IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 19, 2012, 5:24:19 PM (14 years ago)
Author:
mhuber
Message:

merging latest r34040 trunk changes to branch

Location:
branches/meh_branches/ppstack_test
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/meh_branches/ppstack_test

  • branches/meh_branches/ppstack_test/ippToPsps/jython/scratchdb.py

    r33415 r34041  
    2424        self.dvoDoneTable = "dvoDone"
    2525        self.dvoSkyTable = "dvoSkyTable"
    26 
     26        self.dvoPhotcodesTable = "dvoPhotcodes"
    2727
    2828    '''
     
    249249
    250250    '''
    251     Gets the id for the cpm file for the provided region
    252     '''
    253     def getDvoCpmFileIdForRegion(self, region):
    254 
    255         id = -1
    256         sql = "SELECT id FROM " + self.dvoDoneTable + " WHERE region = '" + region + "' AND path LIKE '%.cpm'";
    257         try:
    258             rs = self.executeQuery(sql)
    259             rs.first()
    260             id = rs.getInt(1)
    261         except:
    262             self.logger.errorPair("Could not get file id from " + self.dvoDoneTable, "for region: " + region)
    263 
    264         return id
    265 
    266 
    267     '''
    268251    Gets the id for the provided file
    269252    '''
     
    277260            id = rs.getInt(1)
    278261        except:
    279             self.logger.errprPair("Could not get file id from " + self.dvoDoneTable + "for", path)
     262            self.logger.errorPair("Could not get file id from " + self.dvoDoneTable + "for", path)
    280263
    281264        return id
     
    295278            rs.close()
    296279        except:
    297             self.logger.errorPai("Can't query for ingested regions", sql)
     280            self.logger.errorPair("Can't query for ingested regions", sql)
    298281
    299282        return regions
     
    318301
    319302    '''
    320     Checks whether DVO files we have ingested are form the DVO path provided
     303    Checks whether DVO files we have ingested are from the DVO path provided
     304    Does this by checking the original path of the SkyTable.fits file
    321305    '''
    322306    def isCorrectDvo(self, path):
    323307
    324         sql = "SELECT path FROM " + self.dvoDoneTable + " where path LIKE '%Images.dat'"
     308        sql = "SELECT path FROM " + self.dvoDoneTable + " WHERE path LIKE '%SkyTable.fits'"
    325309        try:
    326310            rs = self.executeQuery(sql) 
     
    336320                return False
    337321
    338         except:
     322        except Exception, e:
     323            print str(e)
    339324            self.logger.errorPair("No DVO files ingested for this path", path)
    340325            return False
     
    342327    '''
    343328    Checks whether the astrometric solution is ok for this chip
    344     TODO the value of 50 for numAstroRef is hardcoded here, but this should be temporary anyway
     329    TODO the value of 50 for numAstroRef (provided by Gene) is hardcoded here, but this should be temporary anyway
    345330    '''
    346331    def astrometricSolutionOK(self, ota):
     
    410395    '''
    411396    Removes the provided DVO FITS files from from dvoDone and dvoDetection tables
    412     Returns a count of the number of detections deleted
    413     '''
    414     def purgeTheseDvoRegions(self, regions):
     397    Returns a count of the number of detections deleted, if any
     398    '''
     399    def purgeTheseDvoRegions(self, regions, fileTypes):
    415400
    416401        detectionCount = self.getRowCount(self.dvoDetectionTable)
    417402        for region in regions:
     403         
     404           for fileType in fileTypes:
     405               sql = "DELETE FROM " + self.dvoDoneTable + " WHERE region = '" + region + "' AND path LIKE '%" + fileType + "'"
     406               try: self.execute(sql)
     407               except:
     408                    self.logger.errorPair("Unable to delete " + fileType + " file from", self.dvoDoneTable)
     409
     410               tableName = self.getDbFriendlyTableName(region + "." + fileType)
     411               sql = "DROP TABLE " + tableName
     412               try: self.execute(sql)
     413               except:
     414                    self.logger.errorPair("Unable to drop table", tableName)
     415                    pass
     416
     417        deletedDetectionCount = detectionCount - self.getRowCount(self.dvoDetectionTable)
     418
     419        # after a big detection delete, we should OPTIMIZE the table
     420        if deletedDetectionCount > 0:
     421            self.logger.infoPair("Running OPTIMIZE on ", self.dvoDetectionTable)
     422            self.optimizeTable(self.dvoDetectionTable)
     423
     424        return deletedDetectionCount
    418425           
    419            fileId = self.getDvoCpmFileIdForRegion(region)
    420 
    421            if fileId < 0:
    422                self.logger.errorPair("Unable to get file ID to delete " + region + " from", self.dvoDoneTable)
    423                continue
    424 
    425            sql = "DELETE FROM " + self.dvoDetectionTable + " WHERE fileID = " + str(fileId)
    426            try: self.execute(sql)
    427            except:
    428                self.logger.errorPair("Unable to delete from " + self.dvoDetectionTable, "for file ID: %d" % fileId)
    429                return False
    430 
    431            sql = "DELETE FROM " + self.dvoDoneTable + " WHERE region = '" + region + "'"
    432            try: self.execute(sql)
    433            except:
    434                self.logger.errorPair("Unable to delete " + region + " from", self.dvoDoneTable)
    435 
    436         finalCount = detectionCount - self.getRowCount(self.dvoDetectionTable)
    437 
    438         # after a big delete, we should OPTIMIZE the table
    439         self.logger.infoPair("Running OPTIMIZE on ", self.dvoDetectionTable)
    440         if finalCount > 0: self.optimizeTable(self.dvoDetectionTable)
    441 
    442         return finalCount
    443            
    444     '''
    445     Drops DVO stuff pertaining to detections
    446     '''
    447     def resetDvoDetectionTables(self):
    448 
    449        self.logger.infoPair("Deleting detections from", self.dvoDoneTable)
    450        sql = "DELETE FROM " + self.dvoDoneTable + " WHERE path LIKE '%cpm' OR path LIKE '%cpt'"
     426    '''
     427    Drops and recreates tables necessary for dvoToMySQL program. Be very careful before using this...
     428    '''
     429    def resetAllDvoTables(self):
     430
     431       # drop all dvo tables - NB detections have to be deleted prior to dvoDone due to foreign key constraint
     432       self.logger.infoPair("Dropping table", self.dvoImagesTable)
     433       self.dropTable(self.dvoImagesTable)
     434       self.logger.infoPair("Dropping table", self.dvoSkyTable)
     435       self.dropTable(self.dvoSkyTable)
     436       self.logger.infoPair("Dropping table", self.dvoDetectionTable)
     437       self.dropTable(self.dvoDetectionTable)
     438       self.logger.infoPair("Dropping table", self.dvoDoneTable)
     439       self.dropTable(self.dvoDoneTable)
     440
     441       # create dvoDone table
     442       self.logger.infoPair("Creating table", self.dvoDoneTable)
     443       sql = "CREATE TABLE " + self.dvoDoneTable + " (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, region VARCHAR(100), path VARCHAR(1000), modifiedDate BIGINT, size BIGINT)"
    451444       try: self.execute(sql)
    452445       except:
    453            self.logger.errorPair("Unable to delete from", self.dvoDoneTable)
     446           self.logger.errorPair("Unable to create table", self.dvoDoneTable)
    454447           return False
    455448
    456        self.logger.infoPair("Dropping table", self.dvoDetectionTable)
    457        self.dropTable(self.dvoDetectionTable)
    458 
     449       self.changeEngineToInnoDB(self.dvoDoneTable)
     450
     451       # create detections table
    459452       self.logger.infoPair("Creating table", self.dvoDetectionTable)
    460453       sql = "CREATE TABLE " + self.dvoDetectionTable + " LIKE dvoDetection"
     
    463456           self.logger.errorPair("Unable to create table", self.dvoDetectionTable)
    464457           return False
    465 
    466        # TODO
     458       self.changeEngineToInnoDB(self.dvoDetectionTable)
     459
     460       # add fileID column
    467461       sql = "ALTER TABLE " + self.dvoDetectionTable + " ADD fileID INT NOT NULL"
    468462       try: self.execute(sql)
     
    471465           return False
    472466
    473     '''
    474     Drops and recreates tables necessary for dvoToMySQL program. Be very careful before using this...
    475     '''
    476     def resetAllDvoTables(self):
    477 
    478        self.logger.infoPair("Dropping table", self.dvoImagesTable)
    479        self.dropTable(self.dvoImagesTable)
    480        self.logger.infoPair("Dropping table", self.dvoSkyTable)
    481        self.dropTable(self.dvoSkyTable)
    482        self.logger.infoPair("Dropping table", self.dvoDoneTable)
    483        self.dropTable(self.dvoDoneTable)
    484 
    485        # create dvoDone table
    486        self.logger.infoPair("Creating table", self.dvoDoneTable )
    487        sql = "CREATE TABLE " + self.dvoDoneTable + " (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, region VARCHAR(100), path VARCHAR(1000), modifiedDate BIGINT, size BIGINT)"
     467       # add an index to the fileID column
     468       self.createIndex(self.dvoDetectionTable, "fileID")
     469
     470       # now add a delete cascading foreign key constraint on fileID
     471       sql = "ALTER TABLE dvoDetectionFull \
     472              ADD CONSTRAINT fk_fileID \
     473              FOREIGN KEY (fileID) \
     474              REFERENCES dvoDone(id) \
     475              ON DELETE CASCADE"
    488476       try: self.execute(sql)
    489        except: self.logger.errorPair("Unable to create table", self.dvoDoneTable)
    490 
    491        self.resetDvoDetectionTables()
     477       except:
     478           self.logger.errorPair("Unable to create foreign key on", self.dvoDoneTable)
     479           return False
     480
     481       return True
    492482
    493483    '''
     
    512502    def getDvoRegionsForThisBox(self, regions, minRa, maxRa, minDec, maxDec):
    513503
    514         sql = "SELECT name FROM " + self.dvoSkyTable + " \
     504        sql = "SELECT \
     505               INDEX_, \
     506               R_MIN+ (R_MAX - R_MIN)/2.0, \
     507               D_MIN + (D_MAX - D_MIN)/2.0, \
     508               NAME \
     509               FROM " + self.dvoSkyTable + " \
    515510               WHERE NOT ((" + str(maxRa) + " <= R_MIN) OR \
    516511                       (" + str(minRa) + " >= R_MAX) OR \
     
    520515        try:
    521516            rs = self.executeQuery(sql)
    522             while (rs.next()): regions.append(rs.getString(1))
     517            while (rs.next()): regions.append([
     518                    rs.getInt(1),
     519                    rs.getFloat(2),
     520                    rs.getFloat(3),
     521                    rs.getString(4)])
     522
    523523            rs.close()
    524524        except:
     
    526526
    527527
     528    '''
     529    Gets the id for the provided file
     530    '''
     531    def getRegionNameFromThisDvoIndex(self, index):
     532
     533        region = ""
     534        sql = "SELECT NAME FROM " + self.dvoSkyTable + " WHERE INDEX_ = " + str(index)
     535        try:
     536            rs = self.executeQuery(sql)
     537            rs.first()
     538            region = rs.getString(1)
     539            rs.close()
     540        except:
     541            self.logger.errorPair("Could not get region using index", sql )
     542
     543        return region
     544
     545    '''
     546    Gets a list of filters ordered as thy are in the DVO Photcodes table, as this reflects the order they apper in the cps file
     547    '''
     548    def getOrderedListOfFiltersFromPhotcodesTable(self, interestedFilters):
     549
     550        sql = "SELECT NAME FROM " + self.dvoPhotcodesTable + " WHERE "
     551
     552        count = 0
     553        for filter in interestedFilters:
     554           if count != 0: sql = sql + " OR "
     555           sql = sql + " name = '" + filter + "'"
     556           count += 1
     557
     558        sql = sql + " ORDER BY CODE"
     559
     560        orderedFilters = []
     561        try:
     562            rs = self.executeQuery(sql)
     563            row = 1
     564            while (rs.next()):
     565                orderedFilters.append([row,rs.getString(1)])
     566                row += 1
     567            rs.close()
     568        except:
     569            self.logger.errorPair("Could not get ordered filter list", sql )
     570
     571        return orderedFilters
     572
Note: See TracChangeset for help on using the changeset viewer.