00001 import __main__
00002 import sys
00003 import optparse
00004 from ost import io, mol, seq, geom, conop, gui
00005 import ost
00006 try:
00007 from ost import img
00008 import ost.img.alg
00009 _img_present=True
00010 except ImportError:
00011 _img_present=False
00012 pass
00013 import httplib
00014
00015 from PyQt4 import QtGui, QtCore
00016 from ost.gui.scene.init_inspector import _InitInspector
00017 from ost.gui.init_menubar import _InitMenuBar
00018 from ost.gui.init_spacenav import _InitSpaceNav
00019 from ost.gui.init_context_menu import _InitContextMenu
00020
00021 def _InitRuleBasedBuilder():
00022 compound_lib_path=os.path.join(ost.GetSharedDataPath(), 'compounds.chemlib')
00023 if os.path.exists(compound_lib_path):
00024 conop_inst=conop.Conopology.Instance()
00025 compound_lib=conop.CompoundLib.Load(compound_lib_path)
00026 conop_inst.RegisterBuilder(conop.RuleBasedBuilder(compound_lib), 'RBB')
00027 conop_inst.SetDefaultBuilder('RBB')
00028
00029
00030
00031 _InitRuleBasedBuilder()
00032 def _InitPanels(app):
00033 panels = app.perspective.panels
00034 panels.AddWidgetToPool('ost.gui.FileBrowser', -1)
00035 panels.AddWidgetToPool('ost.gui.PythonShell', 1)
00036 panels.AddWidgetToPool('ost.gui.RemoteLoader', -1)
00037 panels.AddWidgetToPool('ost.gui.SceneWin', 1)
00038 panels.AddWidgetToPool('ost.gui.SequenceViewer', 1)
00039 if not panels.Restore("ui/perspective/panels"):
00040 panels.AddWidget(gui.PanelPosition.LEFT_PANEL, app.scene_win)
00041 panels.AddWidgetByName(gui.PanelPosition.LEFT_PANEL,
00042 'ost.gui.FileBrowser', False)
00043 panels.AddWidgetByName(gui.PanelPosition.LEFT_PANEL,
00044 'ost.gui.RemoteLoader', False)
00045 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.seq_viewer)
00046 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.py_shell)
00047
00048 def _InitFrontEnd():
00049 app=gui.GostyApp.Instance()
00050 app.SetAppTitle("DNG")
00051 main_area=app.perspective.main_area
00052 _InitMenuBar(app)
00053 _InitPanels(app)
00054 _InitSpaceNav(app)
00055 _InitContextMenu(app)
00056 main_area.AddPersistentWidget("3D Scene", "gl_win" , app.gl_win, int(QtCore.Qt.WindowMaximized))
00057 app.perspective.Restore()
00058 additional_modules=getattr(__main__, 'ADDITIONAL_GUI_MODULES', [])
00059 for module_name in additional_modules:
00060 __import__(module_name)
00061 app.ProcessEvents()
00062 _InitInspector(app)
00063
00064 def _load_files():
00065 for pdb_id in options.pdb_ids:
00066 pdb_id, sel=_SplitIDSel(pdb_id)
00067 selection=_get_selection_query(sel)
00068 gui.FileLoader.LoadFrom(pdb_id,"pdb.org",selection)
00069
00070 input_files=[_SplitIDSel(arg) for arg in loading_list]
00071 for f in input_files:
00072 selection=_get_selection_query(f[1])
00073 gui.FileLoader.LoadObject(f[0],selection)
00074
00075 def _get_selection_query(sel):
00076 if len(options.query)>0:
00077 if len(sel)>0:
00078 return '(%s) and (%s)' % (options.query, sel)
00079 else:
00080 return options.query
00081 elif len(sel)>0:
00082 return sel
00083 return ""
00084
00085 def _execute_script():
00086 script=script_argv[0]
00087 sys_argv_backup=sys.argv
00088 sys.argv=script_argv
00089 try:
00090 execfile(script, __main__.__dict__)
00091 finally:
00092 sys.argv=sys_argv_backup
00093
00094 def show_help(option, opt, value, parser):
00095 parser.print_help()
00096 QtGui.QApplication.instance().exit()
00097 sys.exit(-1)
00098
00099 def parse_script_option(option, opt, value, parser):
00100 script_argv.append(value)
00101 for arg in parser.rargs:
00102 script_argv.append(arg)
00103 del parser.rargs[0:len(parser.rargs)]
00104
00105 def _SplitIDSel(name):
00106 pos=name.find('[')
00107 if pos>-1:
00108 return name[:pos], name[pos+1:-1]
00109 return name, ''
00110
00111 loading_list=[]
00112 script_argv=[]
00113 images=[]
00114 viewers=[]
00115 usage = 'usage: dng [options] [files to load]'
00116 class OstOptionParser(optparse.OptionParser):
00117 def __init__(self, **kwargs):
00118 optparse.OptionParser.__init__(self, **kwargs)
00119 def exit(self, status_code, error_message):
00120 print error_message,
00121 QtGui.QApplication.instance().exit()
00122 sys.exit(-1)
00123
00124 parser=OstOptionParser(usage=usage,conflict_handler="resolve")
00125 parser.add_option("-h", "--help", action="callback", callback=show_help, help="show this help message and exit")
00126 parser.add_option("-v", "--verbosity_level", action="store", type="int", dest="vlevel", default=0, help="sets the verbosity level [default: %default]")
00127 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")
00128 parser.add_option("-p", "--pdb_id", dest="pdb_ids", default=[],action="append", help="PDB file ID. The file will be retrieved from PDB")
00129 parser.add_option("-b", "--builder", dest="builder", default="HEURISTIC", help="Type of builder used by the progam (either RULE_BASED or HEURISTIC) [default: %default]")
00130 parser.add_option("-c", "--compound_library", dest="complib", default="compounds.chemlib", help="Compound library for the RULE_BASED builder (only used if --builder option is set to RULE_BASED, otherwise ignored [default: %default]")
00131 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]")
00132 parser.disable_interspersed_args()
00133 (options, args) = parser.parse_args()
00134
00135 if len(parser.rargs)!=0:
00136 for rargs_string in parser.rargs:
00137 if not rargs_string.endswith('.py'):
00138 loading_list.append(rargs_string)
00139 else:
00140 print 'Error: one of the files to load is a Python script, use -s flag to execute it\n'
00141 QtGui.QApplication.instance().exit()
00142 sys.exit(-1)
00143
00144 if len(options.script)!=0:
00145 script_argv=options.script
00146
00147 if options.builder=="RULE_BASED":
00148 from ost import conop
00149 compound_lib=conop.CompoundLib.Load(options.complib)
00150 rbb=conop.RuleBasedBuilder(compound_lib)
00151 conop.Conopology.Instance().RegisterBuilder(rbb,'rbb')
00152 conop.Conopology.Instance().SetDefaultBuilder('rbb')
00153
00154 PushVerbosityLevel(options.vlevel)
00155 _InitFrontEnd()
00156
00157 if len(loading_list)!=0 or len(options.pdb_ids)!=0:
00158 _load_files()
00159 scene.Autoslab()
00160 if len(script_argv)!=0:
00161 _execute_script()
00162