5 from ost
import io, mol, seq, geom, conop, gui, settings, gfx
18 from PyQt4
import QtGui, QtCore
31 QtGui.QApplication.instance().quit()
32 gui.GostyApp.Instance().ProcessEvents()
38 def _InitRuleBasedProcessor():
40 if os.path.exists(compound_lib_path):
41 conop_inst=conop.Conopology.Instance()
42 compound_lib=conop.CompoundLib.Load(compound_lib_path)
43 conop_inst.SetDefaultLib(compound_lib)
48 _InitRuleBasedProcessor()
51 settings = QtCore.QSettings()
52 restore = settings.value(
"restore_settings",QtCore.QVariant(
False)).toBool()
55 settings.setValue(
"restore_settings",QtCore.QVariant(
True))
58 panels = app.perspective.panels
59 panels.AddWidgetToPool(
'ost.gui.FileBrowser', -1)
60 panels.AddWidgetToPool(
'ost.gui.PythonShell', 1)
61 panels.AddWidgetToPool(
'ost.gui.SceneWin', 1)
62 panels.AddWidgetToPool(
'ost.gui.SequenceViewer', 1)
63 panels.AddWidgetToPool(
'ost.gui.MessageWidget', 1)
64 if not panels.Restore(
"ui/perspective/panels"):
65 panels.AddWidget(gui.PanelPosition.LEFT_PANEL, app.scene_win)
66 panels.AddWidgetByName(gui.PanelPosition.LEFT_PANEL,
67 'ost.gui.FileBrowser',
False)
68 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.seq_viewer)
69 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.py_shell)
70 panels.AddWidget(gui.PanelPosition.RIGHT_PANEL, app.message_widget)
75 def _InitFrontEnd(try_stereo):
77 app=gui.GostyApp.Instance()
78 app.SetAppTitle(
"DNG")
79 app.TryStereo(try_stereo)
80 main_area=app.perspective.main_area
83 main_area.AddPersistentWidget(
"3D Scene",
"gl_win" , app.gl_win,
84 int(QtCore.Qt.WindowMaximized))
87 app.perspective.Restore()
88 additional_modules=getattr(__main__,
'ADDITIONAL_GUI_MODULES', [])
89 for module_name
in additional_modules:
90 __import__(module_name)
95 if not _InitPanels(app):
99 for pdb_id
in options.pdb_ids:
100 pdb_id, sel=_SplitIDSel(pdb_id)
101 selection=_get_selection_query(sel)
102 gui.FileLoader.LoadFrom(pdb_id,
"pdb.org",selection)
104 input_files=[_SplitIDSel(arg)
for arg
in loading_list]
105 for f
in input_files:
106 selection=_get_selection_query(f[1])
107 gui.FileLoader.LoadObject(f[0],selection)
109 def _get_selection_query(sel):
110 if len(options.query)>0:
112 return '(%s) and (%s)' % (options.query, sel)
119 def _execute_script():
120 script=script_argv[0]
121 sys_argv_backup=sys.argv
124 execfile(script, __main__.__dict__)
126 sys.argv=sys_argv_backup
130 QtGui.QApplication.instance().exit()
134 script_argv.append(value)
135 for arg
in parser.rargs:
136 script_argv.append(arg)
137 del parser.rargs[0:len(parser.rargs)]
139 def _SplitIDSel(name):
142 return name[:pos], name[pos+1:-1]
146 gui.GostyApp.Instance().StopScript()
153 usage =
'usage: dng [options] [files to load]'
156 optparse.OptionParser.__init__(self, **kwargs)
157 def exit(self, status_code, error_message):
159 QtGui.QApplication.instance().
exit()
163 parser.add_option(
"-h",
"--help", action=
"callback", callback=show_help, help=
"show this help message and exit")
164 parser.add_option(
"-v",
"--verbosity_level", action=
"store", type=
"int", dest=
"vlevel", default=2,
165 help=
"sets the verbosity level [default: %default]")
166 parser.add_option(
"-s",
"--script", action=
"callback", default=[], dest=
"script", type=
"string", callback=parse_script_option, help=
"executes a script (syntax: -s SCRIPT [options] [args]) Anything that follows this option is passed to the script")
167 parser.add_option(
"-p",
"--pdb_id", dest=
"pdb_ids", default=[],action=
"append", help=
"PDB file ID. The file will be retrieved from PDB")
168 parser.add_option(
"-b",
"--processor", dest=
"processor", default=
"HEURISTIC", help=
"Type of processor used by the progam (either RULE_BASED or HEURISTIC) [default: %default]")
169 parser.add_option(
"-c",
"--compound_library", dest=
"complib", default=
"compounds.chemlib", help=
"Compound library for the RULE_BASED processor (only used if --processor option is set to RULE_BASED, otherwise ignored [default: %default]")
170 parser.add_option(
"-q",
"--query", dest=
"query", default=
"", help=
"Selection query to be highlighted automatically upon loading (only used together with -p option or when a PDB file is loaded, otherwise ignored [default: None]")
171 parser.add_option(
"-S",
"--stereo", dest=
"try_stereo", default=
False, action=
"store_true",help=
"try to get a quad-buffer stereo visual")
172 parser.disable_interspersed_args()
173 (options, args) = parser.parse_args()
175 if len(parser.rargs)!=0:
176 for rargs_string
in parser.rargs:
177 if not rargs_string.endswith(
'.py'):
178 loading_list.append(rargs_string)
180 print 'Error: one of the files to load is a Python script, use -s flag to execute it\n'
181 QtGui.QApplication.instance().
exit()
184 if len(options.script)!=0:
185 script_argv=options.script
187 if options.processor==
"RULE_BASED":
188 from ost
import conop
189 if os.path.exists(options.complib):
190 compound_lib=conop.CompoundLib.Load(options.complib)
191 conop.SetDefaultLib(compound_lib)
194 home = os.getenv(
'HOME')
or os.getenv(
'USERPROFILE')
195 _ostrc=os.path.join(home,
'.ostrc')
196 if os.path.exists(_ostrc):
202 rcfile=open(_ostrc,
"w")
203 print >> rcfile,
'# This python file is parsed by ost and dng at startup'
204 print >> rcfile,
'# Its content is made available in the global namespace'
205 print >> rcfile,
'# It can be used to define custom variables and functions'
206 print >> rcfile,
'# For example:'
207 print >> rcfile,
'# IMPORTANT_DIR="path/to/important/dir"'
211 working_dir=settings.GetValue(
"DNG_WORKING_DIR",
None)
213 if working_dir !=
None and os.path.isdir(working_dir):
214 os.chdir(working_dir)
216 _InitFrontEnd(options.try_stereo)
218 if len(loading_list)!=0
or len(options.pdb_ids)!=0:
221 if len(script_argv)!=0:
main class for organization and root for the graphical display
String DLLEXPORT_OST_BASE GetSharedDataPath()