IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 19, 2014, 4:05:27 PM (12 years ago)
Author:
eugene
Message:

merge changes from trunk

Location:
branches/eam_branches/ps2-tc3-20130727
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ps2-tc3-20130727

  • branches/eam_branches/ps2-tc3-20130727/ippToPsps/jython/objectbatch.py

    r35496 r37403  
    1515from scratchdb import ScratchDb
    1616from dvoobjects import DvoObjects
     17from sqlUtility import sqlUtility
    1718
    1819import logging.config
     
    3738                 scratchDb,
    3839                 dvoID,
    39                  batchID,
    40                  useFullTables):
     40                 batchID):
    4141
    4242       super(ObjectBatch, self).__init__(
     
    5050               batchID,
    5151               "OB",
    52                None,
    53                1)
     52               None)
    5453
    5554       try:
    56            ## XX pass in the existing connection to scratchDb
    5755           self.dvoObjects = DvoObjects(self.logger, self.config, self.skychunk, self.ippToPspsDb, self.scratchDb)
    5856       except:
     
    7472        self.region = self.scratchDb.getRegionNameFromThisDvoIndex(self.id)
    7573        self.ippToPspsDb.insertObjectMeta(self.batchID, self.region)
    76         if True:
    77             self.dvoObjects.nativeIngestRegion(self.region)
    78         else:
    79             self.dvoObjects.ingestRegion(self.region)
     74        self.dvoObjects.nativeIngestRegion(self.region)
    8075
    8176        cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
     
    9085    def alterPspsTables(self):
    9186
    92         # dec is reserved in MySQL, so STILTS replaces if with dec_, which PSPS doesn't like. so, force it back again using ``
    93         self.scratchDb.execute("ALTER TABLE Object CHANGE dec_ `dec` double")
    94 
    9587        return True
    9688
     
    10092    def indexIppTables(self):
    10193
    102         self.logger.infoPair("Creating indexes on", "IPP tables")
     94        # since dvopsps is now used, no action is needed here
     95        # self.logger.infoPair("Creating indexes on", "IPP tables")
    10396
    10497        return True
     
    107100    Inserts stuff for all mags
    108101    '''
    109     def insertMags(self, cpsTable):
     102    def updateMeanObjectFromCps(self, cpsTable):
     103
     104        # list of all filters PSPS is interested in
     105        # XXX EAM : 2014.07.24 : this list should probably be in a config file somewhere
     106        interestedFilters = ['g', 'r', 'i', 'z', 'y']
     107       
     108        filters = self.scratchDb.getOrderedListOfFiltersFromPhotcodesTable(interestedFilters)
     109   
     110        # get a count of the available filters
     111        filterCount = self.scratchDb.getCountOfFiltersFromPhotcodesTable()
     112
     113        self.logger.infoPair("Available filters in Photcodes", filters)
     114
     115        # the 'code' now defines the order in the cps file that the mags are listed for a given filter
     116        self.logger.infoPair("Adding magnitudes from", "cps table")
     117        for filter in filters:
     118
     119            filterID = self.scratchDb.getFilterID(filter[1])
     120
     121            # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
     122            # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
     123            # XXX EAM : 20140724 this manipulation is no longer needed : [grizy]Flags is now 4 byte (was 8 byte!)
     124
     125            # set the MeanObject fields based largely on dvopsps cps fields:
     126
     127            # XXX EAM 20140724 : filterCount is meant to match
     128            # Nsecfilt, but is potentially not determined correctly.
     129            # use a call to a dvo-native command which knows how to
     130            # find Nsecfilt (or save in the db with dvopsps)
     131
     132            # the math below depends on filterCount = Nsecfilt and MeanObject.row being 1 counting but cps being 0 counting?
     133            # cps.row has a count of MeanObject.row * Nsecfilt + Nfilter
     134            #  " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
     135
     136            sql = "UPDATE MeanObject JOIN \
     137                   " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
     138                   SET \
     139                    MeanObject." + filter[1] + "QfPerfect      = PSF_QF_PERF_MAX \
     140                   ,MeanObject." + filter[1] + "MeanPSFMag     = MAG \
     141                   ,MeanObject." + filter[1] + "MeanPSFMagErr  = MAG_ERR \
     142                   ,MeanObject." + filter[1] + "MeanPSFMagStd  = MAG_STDEV \
     143                   ,MeanObject." + filter[1] + "MeanPSFMagMin  = MAG_MIN \
     144                   ,MeanObject." + filter[1] + "MeanPSFMagMax  = MAG_MAX \
     145                   ,MeanObject." + filter[1] + "MeanPSFMagNpt  = NUSED \
     146                   ,MeanObject." + filter[1] + "MeanKronMag    = MAG_KRON \
     147                   ,MeanObject." + filter[1] + "MeanKronMagErr = MAG_KRON_ERR \
     148                   ,MeanObject." + filter[1] + "MeanKronMagStd = MAG_KRON_STDEV \
     149                   ,MeanObject." + filter[1] + "MeanKronMagNpt = NUSED_KRON \
     150                   ,MeanObject." + filter[1] + "MeanApMag      = MAG_AP \
     151                   ,MeanObject." + filter[1] + "MeanApMagErr   = MAG_AP_ERR \
     152                   ,MeanObject." + filter[1] + "MeanApMagStd   = MAG_AP_STDEV \
     153                   ,MeanObject." + filter[1] + "MeanApMagNpt   = NUSED_AP \
     154                   ,MeanObject." + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) "
     155
     156
     157            try: self.scratchDb.execute(sql)
     158            except:
     159                self.logger.errorPair("failed update MeanObject", sql)
     160                raise
     161
     162        # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
     163        # XXX EAM 20140724 : keep this cut?
     164        cut = 0.5
     165        self.logger.infoPair("Setting to NULL all MeanMagErr value >", "%f" % cut)
     166        for filter in filters:
     167
     168            sql = "UPDATE MeanObject \
     169                   SET " + filter[1] + "MeanPSFMagErr = null \
     170                   WHERE " + filter[1] + "MeanPSFMagErr > " + str(cut)
     171            self.scratchDb.execute(sql)
     172
     173    '''
     174    Inserts stuff for all mags
     175    '''
     176    def updateObjectThinFromCps(self, cpsTable):
    110177
    111178        # list of all filters PSPS is interested in
     
    126193            filterID = self.scratchDb.getFilterID(filter[1])
    127194
    128             # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
    129             # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
    130 
    131             sql = "UPDATE Object JOIN \
    132                    " + cpsTable + " AS cps ON (cps.row = (Object.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
    133                    SET \
    134                    n" + filter[1] + " = NCODE \
    135                    ," + filter[1] + "MeanPSFMag = MAG \
    136                    ," + filter[1] + "MeanPSFMagErr = MAG_ERR \
    137                    ," + filter[1] + "MeanKronMag = MAG_KRON \
    138                    ," + filter[1] + "MeanKronMagErr = MAG_KRON_ERR \
    139                    ," + filter[1] + "StackPSFMag = STACK_PSF_MAG \
    140                    ," + filter[1] + "StackPSFMagErr = STACK_PSF_MAG_ERR \
    141                    ," + filter[1] + "StackKronMag = STACK_KRON_MAG \
    142                    ," + filter[1] + "StackKronMagErr = STACK_KRON_MAG_ERR \
    143                    ," + filter[1] + "20pct = MAG_20/1000 \
    144                    ," + filter[1] + "80pct = MAG_80/1000 \
    145                    ," + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) \
    146                    ," + filter[1] + "StackDetectID = STACK_DETECT_ID"
    147 
    148 # old method for setting the Stack (PSF,Kron) Mags:
    149 #                  ," + filter[1] + "StackPSFMag = -2.5 * log10(FLUX_PSF) + 8.9 \
    150 #                  ," + filter[1] + "StackPSFMagErr = FLUX_PSF_ERR / FLUX_PSF \
    151 #                  ," + filter[1] + "StackKronMag = -2.5 * log10(FLUX_KRON) + 8.9 \
    152 #                  ," + filter[1] + "StackKronMagErr = FLUX_KRON_ERR / FLUX_KRON \
    153 
    154             #self.logger.info(sql)
    155             self.scratchDb.execute(sql)
    156 
     195            # XXX EAM 20140724 : this is quite awkward, add a objRow and ncode value to mysql db table?
     196            # sqlLine = sqlUtility()
     197
     198            sql  = "UPDATE ObjectThin JOIN "
     199            sql += cpsTable + " AS cps "
     200            sql += "ON (cps.row = (ObjectThin.row * "
     201            sql += str(filterCount) + ")-("
     202            sql += str(filterCount) + " - "
     203            sql += str(filter[0])
     204            sql += ")) "
     205
     206            sql += "SET ObjectThin.n" + filter[1] + " = NCODE, "
     207            sql += "ObjectThin.nStackDetections = ObjectThin.nStackDetections + cps.NSTACK_DET"
     208            self.logger.info(sql)
     209            self.scratchDb.execute(sql)
     210
     211        # XXX this does not seem like a good thing to leave in SQL
    157212        self.logger.infoPair("Calculating nDetections from", "n[filters]")
    158213        for filter in filters:
    159214            # now do a sum of n[filters], but do not include the ones with -999
    160             sql = "UPDATE Object \
    161                    SET nDetections = nDetections + n" + filter[1] + " \
    162                    WHERE n" + filter[1] + " != -999"
    163             self.scratchDb.execute(sql)
    164            
    165 
    166 
    167 
    168         # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
    169         cut = 0.5
    170         self.logger.infoPair("Setting to NULL all MeanMagErr value >", "%f" % cut)
    171         for filter in filters:
    172 
    173             sql = "UPDATE Object \
    174                    SET " + filter[1] + "MeanPSFMagErr = null \
    175                    WHERE " + filter[1] + "MeanPSFMagErr > " + str(cut)
    176             self.scratchDb.execute(sql)
    177 
    178         self.logger.infoPair("Setting to NULL all x20pct =", "32.767" )
    179         for filter in filters:
    180             sql  = "UPDATE Object \
    181                    SET " + filter[1] + "20pct = null \
    182                    WHERE " + filter[1] + "20pct > 32.766"
    183             self.scratchDb.execute(sql)
    184         self.logger.infoPair("Setting to NULL all x80pct =", "32.767" )
    185         for filter in filters:
    186             sql  = "UPDATE Object \
    187                     SET " + filter[1] + "80pct = null \
    188                     WHERE " + filter[1] + "80pct > 32.766"
    189             self.scratchDb.execute(sql)
    190 
    191 
    192 
    193 
    194     '''
    195     Inserts colors
    196     '''
    197     def updateColors(self):
    198 
    199         self.logger.infoPair("Calculating", "colors")
    200         sql = "UPDATE Object \
    201                SET \
    202                grMeanColor = (gMeanMag - rMeanMag) \
    203                ,riMeanColor = (rMeanMag - iMeanMag) \
    204                ,izMeanColor = (iMeanMag - zMeanMag) \
    205                ,zyMeanColor = (zMeanMag - yMeanMag) \
    206                ,grMeanColorErr = SQRT(POW(gMeanMagErr,2) + POW(rMeanMagErr,2)) \
    207                ,riMeanColorErr = SQRT(POW(rMeanMagErr,2) + POW(iMeanMagErr,2)) \
    208                ,izMeanColorErr = SQRT(POW(iMeanMagErr,2) + POW(zMeanMagErr,2)) \
    209                ,zyMeanColorErr = SQRT(POW(zMeanMagErr,2) + POW(yMeanMagErr,2)) \
    210                    "
    211         try:
    212             self.scratchDb.execute(sql)
    213         except:
    214             self.logger.errorPair("Couldn't calculate colors", sql)
     215            sql  = "UPDATE ObjectThin "
     216            sql += "SET nDetections = nDetections + n" + filter[1]
     217            sql += " WHERE n" + filter[1] + " != -999"
     218            self.scratchDb.execute(sql)
     219
     220    '''
     221    give objectName to objectThin
     222    XXX EAM 20140714 : This seems quite inefficient in SQL, move to dvopsps?
     223    '''
     224    def updateObjName(self):
     225    ##this is a 4 part update:
     226        self.logger.infoPair("updating objName", "using stacks")
     227    ## if we have a stackra and dec, use stackra and dec , dec >=0
     228
     229        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
     230        lpad(floor(raStack/15.),2,'0'), \
     231        lpad((raStack/15.-(floor(raStack/15.)))*60. ,2,'0'), \
     232        lpad(format(((raStack/15.-(floor(raStack/15.)))*60.-floor((raStack/15.-(floor(raStack/15.)))*60.))*60.,2),4,'0'), \
     233        '+', \
     234        lpad(floor(decStack),2,'0'), \
     235        lpad((decStack-(floor(decStack)))*60. ,2,'0'), \
     236        lpad(format(((decStack-(floor(decStack)))*60.-floor((decStack-(floor(decStack)))*60.))*60.,2),4,'0') \
     237        ) where raStack > -999 and decStack > -999 and decStack >= 0"
     238        try:
     239            self.scratchDb.execute(sql)
     240        except:
     241            self.logger.errorPair("failed sql", sql)
     242            return False
     243
     244
     245    ## if we have a stackra and dec, use stackra and dec, dec < 0
     246
     247        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
     248        lpad(floor(raStack/15.),2,'0'), \
     249        lpad((raStack/15.-(floor(raStack/15.)))*60. ,2,'0'), \
     250        lpad(format(((raStack/15.-(floor(raStack/15.)))*60.-floor((raStack/15.-(floor(raStack/15.)))*60.))*60.,2),4,'0'), \
     251        '-', \
     252        lpad(floor(decStack),2,'0'), \
     253        lpad((decStack-(floor(decStack)))*60. ,2,'0'), \
     254        lpad(format(((decStack-(floor(decStack)))*60.-floor((decStack-(floor(decStack)))*60.))*60.,2),4,'0') \
     255        ) where raStack > -999 and decStack > -999 and decStack <= 0"
     256        try:
     257            self.scratchDb.execute(sql)
     258        except:
     259            self.logger.errorPair("failed sql", sql)
     260            return False
     261        self.logger.infoPair("updating objName", "using means")
     262    ## use mean ra and dec (dec >= 0)
     263        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
     264        lpad(floor(raMean/15.),2,'0'), \
     265        lpad((raMean/15.-(floor(raMean/15.)))*60. ,2,'0'), \
     266        lpad(format(((raMean/15.-(floor(raMean/15.)))*60.-floor((raMean/15.-(floor(raMean/15.)))*60.))*60.,2),4,'0'), \
     267        '+', \
     268        lpad(floor(decMean),2,'0'), \
     269        lpad((decMean-(floor(decMean)))*60. ,2,'0'), \
     270        lpad(format(((decMean-(floor(decMean)))*60.-floor((decMean-(floor(decMean)))*60.))*60.,2),4,'0') \
     271        ) where raMean > -999 and decMean > -999 and decMean >= 0"
     272        try:
     273            self.scratchDb.execute(sql)
     274        except:
     275            self.logger.errorPair("failed sql", sql)
     276            return False
     277 
     278    ## use mean ra and dec (dec < 0)
     279
     280        sql = "update ObjectThin set objName =  concat('PS1.2 J', \
     281        lpad(floor(raMean/15.),2,'0'), \
     282        lpad((raMean/15.-(floor(raMean/15.)))*60. ,2,'0'), \
     283        lpad(format(((raMean/15.-(floor(raMean/15.)))*60.-floor((raMean/15.-(floor(raMean/15.)))*60.))*60.,2),4,'0'), \
     284        '-', \
     285        lpad(floor(decMean),2,'0'), \
     286        lpad((decMean-(floor(decMean)))*60. ,2,'0'), \
     287        lpad(format(((decMean-(floor(decMean)))*60.-floor((decMean-(floor(decMean)))*60.))*60.,2),4,'0') \
     288        ) where raMean > -999 and decMean > -999 and decMean < 0"
     289
     290        try:
     291            self.scratchDb.execute(sql)
     292        except:
     293            self.logger.errorPair("failed sql", sql)
     294            return False
    215295
    216296    '''
    217297    Populates the Object table
    218298    '''
    219     def populateObjectTable(self):
     299    def populateObjectThinTable(self):
    220300
    221301        cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
     
    223303
    224304        if False:
     305            # XXX EAM 20140724 : this is probably wrong : flux measurements can be 0.0 or negative: please review
    225306            self.logger.infoPair("setting to null  > 1e-38 and < 1e-38 in", "cps FLUX_KRON_ERR")
    226307            sql = "UPDATE " + cpsTableName + " set FLUX_KRON_ERR = NULL where FLUX_KRON_ERR < 1e-37 AND FLUX_KRON_ERR > -1e-37 "
     308            self.exitProgram("review this code" + sql)
    227309     
    228310            try:
     
    242324
    243325       
    244         self.logger.infoPair("Populating", "Object s")
    245         self.logger.infoPair("Inserting objects from", "cpt file")
    246 
    247         # note `` around dec here, as this is a reserved word in MySQL
    248         sql = "INSERT IGNORE INTO Object (\
    249                objID \
    250                ,ippObjID \
    251                ,objInfoFlag \
    252                ,qualityFlag \
    253                ,surveyID \
    254                ,ra \
    255                ,`dec` \
    256                ,raErr \
    257                ,decErr \
    258                ,nDetections \
    259                ,qfPerfect \
    260                ,sgSep \
    261                ,dataRelease \
    262                ,Random \
    263                ,batchID \
    264                ) \
    265                SELECT \
    266                EXT_ID \
    267                ,CAT_ID*1000000000 + OBJ_ID \
    268                ,FLAGS \
    269                ,FLAGS >> 24 & 0xFF \
    270                ," + str(self.surveyID) + " \
    271                ,RA \
    272                ,DEC_ \
    273                ,RA_ERR \
    274                ,DEC_ERR \
    275                ,0 \
    276                ,PSF_QF_PERF \
    277                ,STARGAL_SEP \
    278                , " + str(self.skychunk.dataRelease) + "\
    279                , RAND() \
    280                , " + str(self.batchID) + "\
    281                FROM " + cptTableName
     326        self.logger.info("Populating ThinObject")
     327        self.logger.info("Inserting objects from cpt file")
     328
     329        # note "dec" is a reserved word in MySQL
     330        # XXX EAM 20140724 : do not use INGORE unless we discover unavoidable problems...
     331        # INSERT IGNORE INTO ObjectThin
     332
     333        sqlLine = sqlUtility("INSERT INTO ObjectThin (")
     334
     335        sqlLine.group("objID",           "EXT_ID")
     336        sqlLine.group("ippObjID",        "OBJ_ID + (CAT_ID << 32)") # NOTE: shift by 32 bits exactly
     337        sqlLine.group("surveyID",        "'" + str(self.surveyID) + "'")
     338        sqlLine.group("randomID",        "FLOOR(RAND()*9223372036854775807)") # XXX where does this number come from??
     339        sqlLine.group("batchID",         "'" + str(self.batchID) + "'")
     340        sqlLine.group("dvoRegionID",     "CAT_ID")
     341        sqlLine.group("tessID",          "TESS_ID")
     342        sqlLine.group("projectionID",    "PROJECTION_ID")
     343        sqlLine.group("skycellID",       "SKYCELL_ID")
     344        sqlLine.group("dataRelease",     "'" + str(self.skychunk.dataRelease) + "'")
     345        sqlLine.group("objInfoFlag",     "FLAGS")
     346        sqlLine.group("qualityFlag",     "FLAGS >> 24 & 0xFF")
     347        sqlLine.group("consistencyFlag", "'0'")
     348        sqlLine.group("raStack",         "RA_STK")
     349        sqlLine.group("decStack",        "DEC_STK")
     350        sqlLine.group("raStackErr",      "RA_STK_ERR")
     351        sqlLine.group("decStackErr",     "DEC_STK_ERR")
     352        sqlLine.group("raMean",          "RA_MEAN")
     353        sqlLine.group("decMean",         "DEC_MEAN")
     354        sqlLine.group("raMeanErr",       "RA_ERR")
     355        sqlLine.group("decMeanErr",      "DEC_ERR")
     356        sqlLine.group("posMeanChisq",    "CHISQ_POS")
     357        sqlLine.group("nStackObjectRows", "'0'") # XXX I need to add / define this in dvopsps
     358        sqlLine.group("nStackDetections", "'0'")
     359        sqlLine.group("nDetections",      "'0'")
     360        sql = sqlLine.makeRaw(") SELECT ", " FROM " + cptTableName)
    282361
    283362        try:
     
    289368        # add row count columns so we can perform joins to get colors
    290369        self.logger.infoPair("Adding 'row' columns to", "Object and cps tables")
    291         self.scratchDb.addRowCountColumn("Object", "row")
     370        self.scratchDb.addRowCountColumn("ObjectThin", "row")
    292371        self.scratchDb.addRowCountColumn(cpsTableName, "row")
    293372
    294         self.insertMags(cpsTableName)
    295 
    296 #don't do this as we removed those columns..
    297 #        self.updateColors()
    298 
     373##        self.insertMeanMags(cpsTableName)
     374## this is the new version
     375        self.logger.infoPair("update objName for ","objectThin")
     376        self.updateObjName()
     377
     378        self.logger.infoPair("update ObjectThin from ","cps table")
     379
     380        self.updateObjectThinFromCps(cpsTableName)
     381
     382        # XXX EAM 20140724 : is this necessary??
    299383        #objects can have out of range ra dec in dvo - need to find and kill them at the end
    300384
     
    312396        #count out of range
    313397
    314         sql = "SELECT count(*) FROM Object where Object.dec > " + str(decMax) + " or Object.dec < " + str(decMin) + " or Object.ra > " + str(raMax) + " or Object.ra < " + str(raMin)       
     398        sql = "SELECT count(*) FROM ObjectThin where \
     399              ObjectThin.decMean > " + str(decMax) + " \
     400              or ObjectThin.decMean < " + str(decMin) + " \
     401              or ObjectThin.raMean > " + str(raMax) + " \
     402              or ObjectThin.raMean < " + str(raMin)       
    315403   
    316404        rs = self.scratchDb.executeQuery(sql)
     
    321409       
    322410 
    323         sql = "DELETE FROM Object where Object.dec > " + str(decMax) + " or Object.dec < " + str(decMin) + " or Object.ra > " + str(raMax) + " or Object.ra < " + str(raMin)
     411        sql = "DELETE FROM ObjectThin where \
     412              ObjectThin.decMean > " + str(decMax) + " or \
     413              ObjectThin.decMean < " + str(decMin) + " or \
     414              ObjectThin.raMean > " + str(raMax) + " or \
     415              ObjectThin.raMean < " + str(raMin)
    324416        self.logger.infoPair("Deleting", str(nToDelete) + " objects outside of ra/dec range")
    325417
     
    327419            self.scratchDb.execute(sql)
    328420        except:
    329             self.logger.errorPair("Couldn't cull outsiders from Object table", sql)
    330             return False
    331 
    332         self.logger.infoPair("Dropping row column from", "Object table")
    333         self.scratchDb.dropColumn("Object", "row")
    334         self.logger.infoPair("Purging from scratch Db", self.region + " region")
    335 
    336         self.dvoObjects.purgeRegion(self.region)
    337 
    338         self.setMinMaxObjID(["Object"])
     421            self.logger.errorPair("Couldn't cull outsiders from ObjectThin table", sql)
     422            return False
     423
     424        self.logger.infoPair("Dropping row column from", "ObjectThin table")
     425        self.scratchDb.dropColumn("ObjectThin", "row")
     426        ##self.logger.infoPair("Purging from scratch Db", self.region + " region")
     427
     428        ##Don't do this till after MeanObject
     429        ##self.dvoObjects.purgeRegion(self.region)
     430
     431        self.setMinMaxObjID(["ObjectThin"])
    339432
    340433        return True
     
    343436    Populates the ObjectCalColor table
    344437    '''
    345     def populateObjectCalColorTable(self):
    346 
    347         self.logger.infoPair("Populating", "ObjectCalColor")
    348 
    349         sql = "INSERT INTO ObjectCalColor ( \
    350                objID \
    351                ,ippObjID \
    352                ,dataRelease \
    353                ) \
    354                SELECT \
    355                objID \
    356                ,ippObjID \
    357                ,dataRelease \
    358                FROM Object"
    359         try:
    360             self.scratchDb.execute(sql)
    361         except:
    362             self.logger.errorPair("Couldn't populate ObjectCalColor table", sql)
    363             return False
     438    def populateMeanObjectTable(self):
     439        cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
     440        cpsTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cps")
     441        self.logger.infoPair("Populating MeanObject from ", "ObjectThin")
     442
     443        sql = "INSERT INTO MeanObject ( objID ) SELECT objID FROM ObjectThin"
     444        try:
     445            self.scratchDb.execute(sql)
     446        except:
     447            self.logger.errorPair("Couldn't populate MeanObject table", sql)
     448            return False
     449
     450        self.logger.infoPair("Adding 'row' columns to", "MeanObject table")
     451        self.scratchDb.addRowCountColumn("MeanObject", "row")
     452 
     453
     454        ##self.scratchDb.addRowCountColumn(cpsTableName, "row")
     455        self.logger.infoPair("update MeanObjects from ","cps table")
     456        self.updateMeanObjectFromCps(cpsTableName)
     457
     458        self.logger.infoPair("Dropping row column from", "MeanObject table")
     459        self.scratchDb.dropColumn("MeanObject", "row")
    364460
    365461        return True
     
    370466    def populatePspsTables(self):
    371467
    372         if not self.populateObjectTable(): return False
     468        if not self.populateObjectThinTable(): return False
    373469        #if not self.populateObjectCalColorTable(): return False
     470        if not self.populateMeanObjectTable(): return False
    374471
    375472        # now remove the objID duplicates. We could not do this before as cpt/cps tables relate by row number
    376         self.logger.infoPair("Forcing uniqueness on", "objID in Object table")
    377         rowCountBefore = self.scratchDb.getRowCount("Object")
     473        self.logger.infoPair("Forcing uniqueness on", "objID in ObjectThin table")
     474        rowCountBefore = self.scratchDb.getRowCount("ObjectThin")
    378475
    379476        # XXX EAM : note that in mysql versions later than 5.1, this fails
     
    386483            self.scratchDb.execute("set session old_alter_table=1")
    387484           
    388         self.scratchDb.execute("ALTER IGNORE TABLE Object ADD UNIQUE INDEX(objID)")
     485        self.scratchDb.execute("ALTER IGNORE TABLE ObjectThin ADD UNIQUE INDEX(objID)")
    389486        if self.scratchDb.version > 5.1:
    390487            self.scratchDb.execute("set session old_alter_table=0")
    391488
    392         rowCountAfter = self.scratchDb.getRowCount("Object")
     489        rowCountAfter = self.scratchDb.getRowCount("ObjectThin")
    393490        self.logger.infoPair("Number of duplicated objIDs removed", "%d out of %d" % ((rowCountBefore - rowCountAfter), rowCountBefore))
    394491
     492        self.logger.infoPair("Forcing uniqueness on", "objID in MeanObject table")
     493        rowCountBefore = self.scratchDb.getRowCount("MeanObject")
     494
     495        # XXX EAM : note that in mysql versions later than 5.1, this fails
     496        # unless the following is called first:
     497        # set session old_alter_table=1
     498        # follow the command with
     499        # set session old_alter_table=0
     500        # OF COURSE, this fails for mysql version < 5.5...
     501        if self.scratchDb.version > 5.1:
     502            self.scratchDb.execute("set session old_alter_table=1")
     503           
     504        self.scratchDb.execute("ALTER IGNORE TABLE MeanObject ADD UNIQUE INDEX(objID)")
     505        if self.scratchDb.version > 5.1:
     506            self.scratchDb.execute("set session old_alter_table=0")
     507
     508        rowCountAfter = self.scratchDb.getRowCount("MeanObject")
     509        self.logger.infoPair("Number of duplicated objIDs removed", "%d out of %d" % ((rowCountBefore - rowCountAfter), rowCountBefore))
     510
     511        self.dvoObjects.purgeRegion(self.region)
     512
     513        #this is abuse of something but this is how I get the object batches to crash to further investigate them
     514       
     515#        rowCountAfter = self.scratchDb.getRowCount("Object")
    395516        return True
    396 
     517#        return False
Note: See TracChangeset for help on using the changeset viewer.