def upgradeLeginonDB(self):
        if not self.leginon_dbupgrade.tableExists('EucentricFocusData'):
            return

        # EucentricFocusData
        # initialize column by inserting the most recent data
        last_data = leginondata.EucentricFocusData().query(results=1)[0]
        q = leginondata.EucentricFocusData(initializer=last_data,
                                           probe='micro')
        q.insert()
        # update as 'micro' as default
        r = leginondata.EucentricFocusData().query()
        r.reverse()
        for data in r:
            q = "UPDATE `EucentricFocusData` SET `probe` = 'micro' WHERE `DEF_id` =%d" % data.dbid
            self.leginon_dbupgrade.executeCustomSQL(q)

        # RotationCenterData
        # initialize column by inserting the most recent data
        last_data = leginondata.RotationCenterData().query(results=1)[0]
        q = leginondata.RotationCenterData(initializer=last_data,
                                           probe='micro')
        q.insert()
        # update as 'micro' as default
        r = leginondata.RotationCenterData().query()
        r.reverse()
        for data in r:
            q = "UPDATE `RotationCenterData` SET `probe` = 'micro' WHERE `DEF_id` =%d" % data.dbid
            self.leginon_dbupgrade.executeCustomSQL(q)

        # MatrixCalibrationData
        # initialize column by inserting the most recent data
        last_data = leginondata.MatrixCalibrationData().query(results=1)[0]
        q = leginondata.MatrixCalibrationData(initializer=last_data,
                                              probe='micro')
        q.insert()
        r = leginondata.MatrixCalibrationData().query()
        r.reverse()
        for data in r:
            # update as 'micro' as default only on 'defocus' and 'stigx','stigy'
            if data['type'] in ('defocus', 'stigx', 'stigy'):
                q = "UPDATE `MatrixCalibrationData` SET `probe` = 'micro' WHERE `DEF_id` =%d" % data.dbid
                self.leginon_dbupgrade.executeCustomSQL(q)
Пример #2
0
 def getMatrix(self, tem, cam, ht, mag, type):
         matdat = leginondata.MatrixCalibrationData()
         matdat['tem'] = tem
         matdat['ccdcamera'] = cam
         matdat['type'] = type
         matdat['magnification'] = mag
         matdat['high tension'] = ht
         caldatalist = self.node.research(datainstance=matdat, results=1)
         if caldatalist:
                 return caldatalist[0]['matrix']
         else:
                 excstr = 'No %s matrix for %s, %s, %seV, %sx' % (type, tem, cam, ht, mag)
                 raise RuntimeError(excstr)
    def getMatrixCal(self, tem, ccd, ht, mag, timestamp, type):
        qinst = leginondata.MatrixCalibrationData(type=type, magnification=mag)
        qinst['high tension'] = ht
        qinst['tem'] = tem
        qinst['ccdcamera'] = ccd

        caldatalist = dbdk.query(qinst)

        # get the one that was valid at timestamp
        caldata = None
        for cal in caldatalist:
            if cal.timestamp < timestamp:
                caldata = cal['matrix']
                break

        if caldata is None:
            if caldatalist:
                caldata = caldatalist[0]['matrix']
            else:
                caldata = None

        return caldata