def reseachCorrectorPlan(self, cameradata): qcamera = leginondata.CameraEMData() # Fix Me: Ignore gain index for now because camera setting does not have it when theplan is saved. for key in ('ccdcamera','dimension','binning','offset'): qcamera[key] = cameradata[key] qplan = leginondata.CorrectorPlanData() qplan['camera'] = qcamera plandatalist = qplan.query() if plandatalist: return plandatalist[0] else: return None
def upgradeLeginonDB(self): if not self.leginon_dbupgrade.columnExists( 'AcquisitionImageData', 'REF|CorrectorPlanData|corrector plan'): self.leginon_dbupgrade.addColumn( 'AcquisitionImageData', 'REF|CorrectorPlanData|corrector plan', self.leginon_dbupgrade.int) results = leginondata.InstrumentData(name='DE12').query(results=1) if not results: return decameradata = results[0] dim = {'x': 4096, 'y': 3072} camq = leginondata.CameraEMData(ccdcamera=decameradata, dimension=dim) plans = leginondata.CorrectorPlanData(camera=camq).query() pairs = {} ordered_keys = [] for i, plan in enumerate(plans): if i == 0: ordered_keys.append(i) pairs[i] = (plan.timestamp.now(), plan.timestamp) else: ordered_keys.append(i) pairs[i] = (plans[i - 1].timestamp, plan.timestamp) camq = leginondata.CameraEMData(ccdcamera=decameradata, dimension=dim) camq['save frames'] = True imageq = leginondata.AcquisitionImageData(camera=camq) print 'Query all DE12 images. This may take some time...' images = imageq.query() print 'Total of %d images' % (len(images), ) for image in images: if image['corrector plan']: continue for key in ordered_keys: if image.timestamp > pairs[key][1] and image.timestamp < pairs[ key][0]: print key, image.dbid, image['filename'], image.timestamp status = self.leginon_dbupgrade.updateColumn( 'AcquisitionImageData', 'REF|CorrectorPlanData|corrector plan', '%d' % plans[key].dbid, '`DEF_id`=%d' % image.dbid, True) if not status: print break_from_failed_update
def storeCorrectorPlan(self, plan): # import instrument here so that wx is not required unless Leginon is running import instrument camsettings = self.settings['camera settings'] ccdname = self.settings['instruments']['ccdcamera'] ccdcamera = self.instrument.getCCDCameraData(ccdname) cameradata = leginondata.CameraEMData() cameradata.update(self.settings['camera settings']) cameradata['ccdcamera'] = ccdcamera plandata = leginondata.CorrectorPlanData() plandata['session'] = self.session plandata['camera'] = cameradata plandata['bad_rows'] = plan['rows'] plandata['bad_cols'] = plan['columns'] plandata['bad_pixels'] = plan['pixels'] plandata['despike'] = plan['despike'] plandata['despike size'] = plan['despike size'] plandata['despike threshold'] = plan['despike threshold'] plandata.insert(force=True)
self.stopTimer('Corrector.displayImage') def storePlan(self, plan): newcamstate = leginondata.CorrectorCamstateData() newcamstate['session'] = self.session if self.instrument is None or self.instrument.ccdcamera is None: self.logger.error('Plan not saved: no camera to associate it with') return try: self.instrument.ccdcamera.Settings = self.settings[ 'camera settings'] newcamstate.friendly_update(self.instrument.ccdcamera.Geometry) except Exception, e: self.logger.error('Plan not saved: %s' % e) return plandata = leginondata.CorrectorPlanData() plandata['session'] = self.session plandata['camstate'] = newcamstate plandata['bad_rows'] = plan['rows'] plandata['bad_cols'] = plan['columns'] plandata['bad_pixels'] = plan['pixels'] plandata['ccdcamera'] = self.instrument.getCCDCameraData() self.publish(plandata, database=True, dbforce=True) def acquireSeries(self, n): series = [] for i in range(n): self.logger.info('Acquiring reference image (%s of %s)' % (i + 1, n)) image = self.instrument.ccdcamera.Image series.append(image)