def __init__(self, session, logger, **kwds): wx.Frame.__init__(self, None, -1, style=wx.DEFAULT_FRAME_STYLE & ~(wx.CLOSE_BOX), **kwds) self.session = session self.logger = logger self.stepGenerator = None self.SetTitle(session.windowTitle) self.exp = ExperimentPanel(self, session, self._onResponseRecorded) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.exp, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) sizer.SetSizeHints(self) self.Layout() darea = wx.GetClientDisplayRect() wsize = self.GetSize() self.SetPosition((darea[0] + (darea[2] - wsize[0]) / 2, darea[1] + (darea[3] - wsize[1]) / 2)) self.Bind(EVT_EXECUTE_FUNCTION, self._onExecuteFunction)
def __init__(self, session, logger, **kwds): wx.Frame.__init__(self, None, -1, style=wx.DEFAULT_FRAME_STYLE & ~ (wx.CLOSE_BOX), **kwds) self.session = session self.logger = logger self.stepGenerator = None self.SetTitle(session.windowTitle) self.exp = ExperimentPanel(self, session, self._onResponseRecorded) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.exp, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) sizer.SetSizeHints(self) self.Layout() darea = wx.GetClientDisplayRect() wsize = self.GetSize(); self.SetPosition((darea[0] + (darea[2] - wsize[0])/2, darea[1] + (darea[3] - wsize[1])/2)) self.Bind(EVT_EXECUTE_FUNCTION, self._onExecuteFunction)
def __init__(self, arg_list): super(MainFrame, self).__init__() self.args = args # Set up tolerance self.eps = np.finfo("float64").eps self.firstUpdate = True self.operationModeChoices = ['none', 'masking'] self.operationMode = self.operationModeChoices[ 0] # Masking mode, Peak finding mode # Init experiment parameters from args if args.expRun is not None and ':run=' in args.expRun: self.experimentName = args.expRun.split('exp=')[-1].split(':')[0] self.runNumber = int(args.expRun.split('run=')[-1]) else: self.experimentName = args.exp self.runNumber = int(args.run) self.detInfo = args.det self.detAlias = None self.eventNumber = int(args.evt) # Directories self.psocakeDir = None self.psocakeRunDir = None self.elogDir = None self.rootDir = None self.writeAccess = True # Init variables self.det = None self.detnames = None self.detInfoList = None self.isCspad = False self.evt = None self.eventID = "" self.hasExperimentName = False self.hasRunNumber = False self.hasDetInfo = False self.pixelIndAssem = None # Init diffraction geometry parameters self.coffset = 0.0 self.clen = 0.0 self.clenEpics = 0.0 self.epics = None self.detectorDistance = 0.0 self.photonEnergy = None self.wavelength = None self.pixelSize = None self.resolutionRingsOn = False self.resolution = None self.resolutionUnits = 0 # Init variables self.calib = None # ndarray detector image self.data = None # assembled detector image self.cx = 0 # detector centre x self.cy = 0 # detector centre y ## Switch to using white background and black foreground pg.setConfigOption('background', color.background) pg.setConfigOption('foreground', color.foreground) ######################################## # Instantiate panels ######################################## self.exp = ExperimentPanel.ExperimentInfo(self) self.geom = diffractionGeometryPanel.DiffractionGeometry(self) self.index = crystalIndexingPanel.CrystalIndexing(self) self.small = SmallDataPanel.SmallData(self) #self.evtLabels = LabelPanel.Labels(self) self.pk = PeakFindingPanel.PeakFinding(self) self.hf = HitFinderPanel.HitFinder(self) self.mk = MaskPanel.MaskMaker(self) self.img = ImagePanel.ImageViewer(self) self.roi = RoiPanel.RoiHistogram(self) self.control = ImageControlPanel.ImageControl(self) self.mouse = MousePanel.Mouse(self) self.stack = ImageStackPanel.ImageStack(self) self.initUI()
def __init__(self, arg_list): super(MainFrame, self).__init__() self.args = args self.area = DockArea() # Get username self.username = self.getUsername() # Set up tolerance self.eps = np.finfo("float64").eps self.firstUpdate = True self.operationModeChoices = ['none', 'masking'] self.operationMode = self.operationModeChoices[ 0] # Masking mode, Peak finding mode # Supported facilities keywords self.facilityLCLS = 'LCLS' if 'CFEL' in os.environ['PSOCAKE_FACILITY'].upper(): self.facility = self.facilityLCLS self.dir = '/gpfs/cfel/cxi/common/slac/reg/d/psdm' if args.outDir is None: args.outDir = '/gpfs/cfel/cxi/scratch/user/' + self.username + '/psocake' elif 'LCLS' in os.environ['PSOCAKE_FACILITY'].upper(): self.facility = self.facilityLCLS self.dir = '/reg/d/psdm' # Init experiment parameters from args if args.expRun is not None and ':run=' in args.expRun: self.experimentName = args.expRun.split('exp=')[-1].split(':')[0] self.runNumber = int(args.expRun.split('run=')[-1]) else: self.experimentName = args.exp self.runNumber = int(args.run) self.detInfo = args.det self.detAlias = None self.eventNumber = int(args.evt) self.inputImages = args.inputImages self.mode = args.mode self.batch = args.batch.lower() print( "\n################################################################" ) if self.batch == "lsf": print("Using LSF for batch jobs. Use -b to set batch preference.") else: print( "Using SLURM for batch jobs. Use -b to set batch preference.") print( "################################################################") # Directories self.psocakeDir = None self.psocakeRunDir = None self.elogDir = None self.rootDir = None self.writeAccess = True self.access = args.access.lower() if 'ffb' in self.access: print( "################################################################" ) print( "Remember only psfeh(hi)prioq/psneh(hi)prioq can access FFB nodes" ) print("FFB node is here: /reg/d/ffb/") print( "################################################################" ) # Init variables self.det = None self.detnames = None self.detInfoList = None self.evt = None self.eventID = "" self.hasExperimentName = False self.hasRunNumber = False self.hasDetInfo = False self.pixelIndAssem = None self.doneExpSetup = False self.doneRunSetup = False self.doneDetSetup = False self.doneEvtSetup = False self.doneInit = False # Init diffraction geometry parameters self.coffset = 0.0 self.clen = 0.0 self.clenEpics = 0.0 self.epics = None self.detectorDistance = 0.0 self.photonEnergy = None self.wavelength = None self.pixelSize = None self.resolutionRingsOn = False self.resolution = None self.resolutionUnits = 0 # Init variables self.calib = None # ndarray detector image self.data = None # assembled detector image self.cx = 0 # detector centre x self.cy = 0 # detector centre y ## Switch to using white background and black foreground pg.setConfigOption('background', color.background) pg.setConfigOption('foreground', color.foreground) ######################################## # Instantiate panels ######################################## self.mouse = MousePanel.Mouse(self) self.img = ImagePanel.ImageViewer(self) self.stack = ImageStackPanel.ImageStack(self) self.exp = ExperimentPanel.ExperimentInfo(self) self.geom = DiffractionGeometryPanel.DiffractionGeometry(self) self.roi = RoiPanel.RoiHistogram(self) self.pk = PeakFindingPanel.PeakFinding(self) self.index = CrystalIndexingPanel.CrystalIndexing(self) self.mk = MaskPanel.MaskMaker(self) self.small = SmallDataPanel.SmallData(self) self.control = ImageControlPanel.ImageControl(self) self.hf = HitFinderPanel.HitFinder(self) if 'label' in args.mode: self.labeling = LabelingPanel.Labeling(self) self.scheme()
class ExperimentFrame(wx.Frame): def __init__(self, session, logger, **kwds): wx.Frame.__init__(self, None, -1, style=wx.DEFAULT_FRAME_STYLE & ~(wx.CLOSE_BOX), **kwds) self.session = session self.logger = logger self.stepGenerator = None self.SetTitle(session.windowTitle) self.exp = ExperimentPanel(self, session, self._onResponseRecorded) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.exp, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) sizer.SetSizeHints(self) self.Layout() darea = wx.GetClientDisplayRect() wsize = self.GetSize() self.SetPosition((darea[0] + (darea[2] - wsize[0]) / 2, darea[1] + (darea[3] - wsize[1]) / 2)) self.Bind(EVT_EXECUTE_FUNCTION, self._onExecuteFunction) def _onExecuteFunction(self, evt): """ Handler for "ExecuteFunctionEvent" objets posted when code wants to execute some function in the event loop after the currently pending events. """ if not hasattr(evt, "function"): return data = None if hasattr(evt, "data"): data = evt.data if data is not None: if isinstance(data, tuple): evt.function(*data) else: evt.function(data) else: evt.function() def _onResponseRecorded(self): trial = self.exp.getTrial() if self.logger is not None: self.logger.log(trial, self.session.metaBlockNumber, self.session.experiment.blockNumber) self._loadNextStep() def _loadNextStep(self): """ Step dispatch function based on base type. """ assert self.stepGenerator is not None step = None try: step = self.stepGenerator.next() except StopIteration: self.stepGenerator = None pass if isinstance(step, ExperimentData.DialogMessage): step.show(self) self._loadNextStep() elif isinstance(step, TrialData.Block): self.exp.setBlockType(step.getBlockType()) self.session.experiment.blockNumber += 1 self._loadNextStep() elif isinstance(step, TrialData.Trial): self.setTrial(step) elif callable(step): step() # For future use elif step is None: self.logger.closeLog() # Experiment has ended def setTrial(self, trial): print "\n->setTrial(" + trial.prettyValues() + ")" self.exp.setTrial(trial) def queueExperiment(self): assert self.session.experiment is not None self.session.experiment.blockNumber = 0 self.stepGenerator = self.session.experiment.stepGenerator() evt = ExecuteFunctionEvent(function=self._loadNextStep, data=None) wx.PostEvent(self, evt)
class ExperimentFrame(wx.Frame): def __init__(self, session, logger, **kwds): wx.Frame.__init__(self, None, -1, style=wx.DEFAULT_FRAME_STYLE & ~ (wx.CLOSE_BOX), **kwds) self.session = session self.logger = logger self.stepGenerator = None self.SetTitle(session.windowTitle) self.exp = ExperimentPanel(self, session, self._onResponseRecorded) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.exp, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) sizer.SetSizeHints(self) self.Layout() darea = wx.GetClientDisplayRect() wsize = self.GetSize(); self.SetPosition((darea[0] + (darea[2] - wsize[0])/2, darea[1] + (darea[3] - wsize[1])/2)) self.Bind(EVT_EXECUTE_FUNCTION, self._onExecuteFunction) def _onExecuteFunction(self, evt): """ Handler for "ExecuteFunctionEvent" objets posted when code wants to execute some function in the event loop after the currently pending events. """ if not hasattr(evt, "function"): return data = None if hasattr(evt, "data"): data = evt.data if data is not None: if isinstance(data, tuple): evt.function(*data) else: evt.function(data) else: evt.function() def _onResponseRecorded(self): trial = self.exp.getTrial() if self.logger is not None: self.logger.log(trial, self.session.metaBlockNumber, self.session.experiment.blockNumber) self._loadNextStep() def _loadNextStep(self): """ Step dispatch function based on base type. """ assert self.stepGenerator is not None step = None try: step = self.stepGenerator.next() except StopIteration: self.stepGenerator = None pass if isinstance(step, ExperimentData.DialogMessage): step.show(self) self._loadNextStep() elif isinstance(step, TrialData.Block): self.exp.setBlockType(step.getBlockType()) self.session.experiment.blockNumber += 1 self._loadNextStep() elif isinstance(step, TrialData.Trial): self.setTrial(step) elif callable(step): step() # For future use elif step is None: self.logger.closeLog() # Experiment has ended def setTrial(self, trial): print "\n->setTrial(" + trial.prettyValues() + ")" self.exp.setTrial(trial) def queueExperiment(self): assert self.session.experiment is not None self.session.experiment.blockNumber = 0 self.stepGenerator = self.session.experiment.stepGenerator() evt = ExecuteFunctionEvent(function=self._loadNextStep, data=None) wx.PostEvent(self, evt)