IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 29, 2012, 5:07:20 PM (14 years ago)
Author:
eugene
Message:

merging changes from trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20120405/ippToPsps/jython/objectbatch.py

    r33715 r33948  
    5151               1)
    5252
    53        if not self.everythingOK: return
    54 
    55        self.dvoObjects = DvoObjects(self.logger, self.config, self.scratchDb.dbName)
     53       try:
     54           self.dvoObjects = DvoObjects(self.logger, self.config, self.scratchDb.dbName)
     55       except:
     56           self.logger.errorPair("Unable to create instance of", "DvoObjects")
     57           raise
    5658
    5759       # create an output filename, which is {dvoINDEX}.FITS
     
    7880    def alterPspsTables(self):
    7981
    80         self.logger.debug("Altering PSPS tables")
     82        # dec is reserved in MySQL, so STILTS replaces if with dec_, which PSPS doesn't like. so, force it back again using ``
     83        self.scratchDb.execute("ALTER TABLE Object CHANGE dec_ `dec` double")
     84
    8185        return True
    8286
     
    9599    def insertMags(self, cpsTable):
    96100
    97         # list of all filters we are interested in
    98         allFilters = ['g', 'r', 'i', 'z', 'y']
     101        # list of all filters PSPS is interested in
     102        interestedFilters = ['g', 'r', 'i', 'z', 'y']
    99103       
    100         # this loop looks into the DVO Photcodes tables and gets the 'CODE' for each the filters above that are listed
    101         filters = []
    102         for filter in allFilters:
    103             code = self.scratchDb.getCodeForThisFilter(filter)
    104             if code < 0: continue
    105             filters.append([code, filter])
     104        filters = self.scratchDb.getOrderedListOfFiltersFromPhotcodesTable(interestedFilters)
    106105   
    107106        # get a count of the available filters
    108107        filterCount = len(filters)
    109108
    110         self.logger.infoPair("Available filters", filters)
     109        self.logger.infoPair("Available filters in Photcodes", filters)
    111110
    112111        # the 'code' now defines the order in the cps file that the mags are listed for a given filter
     112        self.logger.infoPair("Adding magnitudes from", "cps table")
    113113        for filter in filters:
    114114
    115115            sql = "UPDATE Object \
    116                    JOIN " + cpsTable + " AS cps ON (cps.row = (Object.row*" + str(filterCount) + ")-" + str(filter[0]) + ") \
     116                   JOIN " + cpsTable + " AS cps ON (cps.row = (Object.row*" + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
    117117                   SET \
    118118                   n" + filter[1] + " = NCODE \
     
    120120                   ," + filter[1] + "MeanFlux = 3631 * POW(10.0, (-0.4*MAG)) \
    121121                   ," + filter[1] + "MeanMagErr = MAG_ERR \
    122                    ," + filter[1] + "Min = MAG_20 \
    123                    ," + filter[1] + "Max = MAG_80 \
     122                   ," + filter[1] + "Min = MAG_20/1000 \
     123                   ," + filter[1] + "Max = MAG_80/1000 \
    124124                   "
    125 
     125           
     126            self.scratchDb.execute(sql)
     127
     128        # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
     129        cut = 0.5
     130        self.logger.infoPair("Setting to NULL all MeanMagErr value >", "%f" % cut)
     131        for filter in filters:
     132
     133            sql = "UPDATE Object \
     134                   SET " + filter[1] + "MeanMagErr = null \
     135                   WHERE " + filter[1] + "MeanMagErr > " + str(cut)
    126136            self.scratchDb.execute(sql)
    127137
     
    131141    def updateColors(self):
    132142
     143        self.logger.infoPair("Calculating", "colors")
    133144        sql = "UPDATE Object \
    134145               SET \
     
    147158            self.logger.errorPair("Couldn't calculate colors", sql)
    148159
    149 
    150     '''
    151     Does the processing, i.e. pulling stuff from IPP tables into PSPS tables
    152     '''
    153     def populatePspsTables(self):
     160    '''
     161    Populates the Object table
     162    '''
     163    def populateObjectTable(self):
    154164
    155165        cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
    156166        cpsTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cps")
    157167
    158         self.logger.infoPair("Inserting objects from", "cpt")
    159         sql = "INSERT INTO Object (\
     168        self.logger.infoPair("Populating", "ObjectCalColor")
     169        self.logger.infoPair("Inserting objects from", "cpt file")
     170
     171        # note `` around dec here, as this is a reserved word in MySQL
     172        sql = "INSERT IGNORE INTO Object (\
    160173               objID \
    161174               ,ippObjID \
    162175               ,objInfoFlag \
     176               ,varFlag \
    163177               ,surveyID \
    164178               ,ra \
    165                ,dec_ \
     179               ,`dec` \
    166180               ,raErr \
    167181               ,decErr \
    168182               ,nDetections \
     183               ,dataRelease \
    169184               ) \
    170185               SELECT \
     
    172187               ,CAT_ID*1000000000 + OBJ_ID \
    173188               ,FLAGS \
     189               ,0 \
    174190               ," + str(self.surveyID) + " \
    175191               ,RA \
     
    178194               ,DEC_ERR \
    179195               ,NMEASURE \
     196               , " + str(self.config.dataRelease) + "\
    180197               FROM " + cptTableName
    181198
     
    184201        except:
    185202            self.logger.errorPair("Couldn't populate Object table", sql)
     203            return False
    186204
    187205        # add row count columns so we can perform joins to get colors
     
    190208        self.scratchDb.addRowCountColumn(cpsTableName, "row")
    191209
    192         self.logger.infoPair("Adding magnitudes from", "cps table")
    193210        self.insertMags(cpsTableName)
    194211
    195         self.logger.infoPair("Calculating", "colors")
    196212        self.updateColors()
    197213
     
    205221        return True
    206222
     223    '''
     224    Populates the ObjectCalColor table
     225    '''
     226    def populateObjectCalColorTable(self):
     227
     228        self.logger.infoPair("Populating", "ObjectCalColor")
     229
     230        sql = "INSERT INTO ObjectCalColor ( \
     231               objID \
     232               ,ippObjID \
     233               ,dataRelease \
     234               ) \
     235               SELECT \
     236               objID \
     237               ,ippObjID \
     238               ,dataRelease \
     239               FROM Object"
     240        try:
     241            self.scratchDb.execute(sql)
     242        except:
     243            self.logger.errorPair("Couldn't populate ObjectCalColor table", sql)
     244            return False
     245
     246        return True
     247
     248    '''
     249    Does the processing, i.e. pulling stuff from IPP tables into PSPS tables
     250    '''
     251    def populatePspsTables(self):
     252
     253        if not self.populateObjectTable(): return False
     254        #if not self.populateObjectCalColorTable(): return False
     255
     256        # now remove the objID duplicates. We could not do this before as cpt/cps tables relate by row number
     257        self.logger.infoPair("Forcing uniqueness on", "objID in Object table")
     258        rowCountBefore = self.scratchDb.getRowCount("Object")
     259        self.scratchDb.execute("ALTER IGNORE TABLE Object ADD UNIQUE INDEX(objID)")
     260        rowCountAfter = self.scratchDb.getRowCount("Object")
     261        self.logger.infoPair("Number of duplicated objIDs removed", "%d out of %d" % ((rowCountBefore - rowCountAfter), rowCountBefore))
     262
     263        return True
     264
Note: See TracChangeset for help on using the changeset viewer.