Esempio n. 1
0
class ProcessingFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)
        self.viewer = None
        self.toolbar = self.CreateToolBar(style=wx.TB_3DBUTTONS | wx.TB_TEXT)
        btn = self.toolbar.AddLabelTool(id=-1,
                                        label="Image viewer",
                                        bitmap=icons.hkl_file.GetBitmap(),
                                        shortHelp="Image viewer",
                                        kind=wx.ITEM_NORMAL)
        self.Bind(wx.EVT_MENU, self.OnLaunchViewer, btn)
        self.toolbar.Realize()
        self.statusbar = self.CreateStatusBar()
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.sizer)
        self.nb = fnb.FlatNotebook(self,
                                   agwStyle=fnb.FNB_DEFAULT_STYLE
                                   | fnb.FNB_NO_X_BUTTON)
        self.sizer.Add(self.nb, 1, wx.EXPAND)
        self.nb.SetMinSize((800, 40))
        self.start_panel = StartPanel(self.nb)
        self.nb.AddPage(self.start_panel, "Setup")
        self.output_panel = LogViewer(self.nb)
        self.nb.AddPage(self.output_panel, "Output")
        try:
            self.html_panel = wx.html2.WebView.New(self.nb)
        except NotImplementedError:
            self.html_panel = wx.html.HtmlWindow(self.nb)
        self.nb.AddPage(self.html_panel, "Report")
        #self.indexing_panel = indexing.IndexingPanel(self.nb)
        #self.nb.AddPage(self.indexing_panel, "Indexing")
        #self.integration_panel = integration.IntegrationPanel(self.nb)
        #self.nb.AddPage(self.integration_panel, "Integration")
        self.SetSize((800, 600))

        self.event_dispatcher = process_control.event_agent(window=self,
                                                            project_id=0,
                                                            job_id=0)

        self.was_aborted = False

    #def LoadResults (self, dir_name) :
    #self.result = results_base.result(dir_name)
    #self.indexing_panel.SetIndexingResults(self.result.get_indexing())
    #self.integration_panel.SetResults(self.result)
    #self.nb.SetSelection(1)

    def OnRunXia2(self, evt):

        #thread = WorkerThread(0, self)
        #thread.start()
        #return

        output_dir = self.start_panel.GetOutputDir()
        result = self.run_xia2(imagesets=self.start_panel.GetImagesets(),
                               output_dir=output_dir)

    def run_xia2(self, **kwds):
        output_dir = kwds['output_dir']
        imagesets = kwds['imagesets']
        args = []
        for imageset in imagesets:
            scan = imageset.get_scan()
            first, last = scan.get_image_range()
            args.append('image=%s:%i:%i' % (imageset.paths()[0], first, last))
        kwds = {}

        self.nb.AdvanceSelection(forward=True)
        thread = xia2Thread(self, output_dir, args)
        thread.start()
        return

    def launch_viewer_frame(self):
        if (self.viewer is None):
            self.viewer = XrayFrame(parent=self, title="Image viewer")
            self.viewer.Show()
            self.Bind(wx.EVT_CLOSE, self.OnCloseViewer, self.viewer)

    def get_viewer_frame(self):
        self.launch_viewer_frame()
        return self.viewer

    def set_viewer_frame(self, frame):
        assert (self.viewer is None)
        self.viewer = frame

    def OnCloseViewer(self, evt):
        self.viewer.Destroy()
        self.viewer = None

    def OnLaunchViewer(self, evt):
        self.launch_viewer_frame()

    def callback_start(self, data):
        self.event_dispatcher.callback_start(data)

    def callback_stdout(self, data):
        self.output_panel.AppendText(data)
        self.event_dispatcher.callback_stdout(data)

    def callback_other(self, data):
        print 'other'
        self.event_dispatcher.callback_other(data)

    def callback_abort(self):
        self.event_dispatcher.callback_abort()
        self.close()

    def callback_final(self, result):
        if self.was_aborted:  # XXX hack for jobs killed with 'qdel'
            self.callback_abort()
            return
        import glob
        html_files = glob.glob(
            os.path.join(result.output_dir, 'LogFiles/*_report.html'))
        print html_files
        if html_files:
            html_file = html_files[0]
            try:
                # wx.html.HtmlWindow
                self.html_panel.LoadFile(html_file)
            except AttributeError:
                # wx.html2.WebView
                self.html_panel.LoadURL(html_file)
            self.nb.AdvanceSelection()
        self.event_dispatcher.callback_final(result)
        self.close()

    def callback_error(self, error, traceback_info):
        self.event_dispatcher.callback_error(error, traceback_info)
        self.close()

    def callback_pause(self):
        self.event_dispatcher.callback_pause()

    def callback_resume(self):
        self.event_dispatcher.callback_resume()

    def close(self):
        pass

    def OnLogEvent(self, event):
        print event
Esempio n. 2
0
class ProcessingFrame (wx.Frame) :
  def __init__ (self, *args, **kwds) :
    wx.Frame.__init__(self, *args, **kwds)
    self.viewer = None
    self.toolbar = self.CreateToolBar(style=wx.TB_3DBUTTONS|wx.TB_TEXT)
    btn = self.toolbar.AddLabelTool(id=-1,
      label="Image viewer",
      bitmap=icons.hkl_file.GetBitmap(),
      shortHelp="Image viewer",
      kind=wx.ITEM_NORMAL)
    self.Bind(wx.EVT_MENU, self.OnLaunchViewer, btn)
    self.toolbar.Realize()
    self.statusbar = self.CreateStatusBar()
    self.sizer = wx.BoxSizer(wx.VERTICAL)
    self.SetSizer(self.sizer)
    self.nb = wx.lib.agw.flatnotebook.FlatNotebook(self)
    self.sizer.Add(self.nb, 1, wx.EXPAND)
    self.nb.SetMinSize((800,40))
    self.start_panel = StartPanel(self.nb)
    self.nb.AddPage(self.start_panel, "Setup")
    self.indexing_panel = indexing.IndexingPanel(self.nb)
    self.nb.AddPage(self.indexing_panel, "Indexing")
    self.integration_panel = integration.IntegrationPanel(self.nb)
    self.nb.AddPage(self.integration_panel, "Integration")
    self.SetSize((800,600))

  def LoadResults (self, dir_name) :
    self.result = results_base.result(dir_name)
    self.indexing_panel.SetIndexingResults(self.result.get_indexing())
    self.integration_panel.SetResults(self.result)
    self.nb.SetSelection(1)

  def OnRunIndexing (self, evt) :
    dataset, frames = self.start_panel.GetDataset()
    output_dir = self.start_panel.GetOutputDir()
    result = self.run_indexing(
      dataset=dataset,
      frames=frames,
      output_dir=output_dir)
    self.LoadResults(output_dir)

  def run_indexing (self, **kwds) :
    from rstbx.viewer import drivers
    run = drivers.run_indexing(**kwds)
    indexing_result = process_control.run_function_as_process_in_dialog(
      parent=self,
      thread_function=run,
      title="Running LABELIT",
      message="Indexing images and performing simple test integration")
    return indexing_result

  def launch_viewer_frame (self) :
    if (self.viewer is None) :
      self.viewer = XrayFrame(
        parent=self,
        title="Image viewer")
      self.viewer.Show()
      self.Bind(wx.EVT_CLOSE, self.OnCloseViewer, self.viewer)

  def get_viewer_frame (self) :
    self.launch_viewer_frame()
    return self.viewer

  def set_viewer_frame (self, frame) :
    assert (self.viewer is None)
    self.viewer = frame

  def OnCloseViewer (self, evt) :
    self.viewer.Destroy()
    self.viewer = None

  def OnLaunchViewer (self, evt) :
    self.launch_viewer_frame()