IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33676 for trunk/ippToPsps


Ignore:
Timestamp:
Apr 3, 2012, 4:31:34 PM (14 years ago)
Author:
rhenders
Message:

added methos to ingest a region based on DVO index; purgeRegions now takes list of regions as arg; added methid to ingest a single region; methos to ingest Photcode table

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippToPsps/jython/dvo.py

    r33599 r33676  
    1919
    2020'''
    21 A class that encapsulates a DVO database
    22 
    23 Pulls relavant bits and pieces into the scratch MySQL database and then provides access queries
     21Abstract base-class for DVO classes
     22
     23Provides generic functionality to pull relevant stuff from a DVO database into a scratch MySQL database while also providing access queries
    2424'''
    2525class Dvo(object):
     
    3434
    3535    '''
    36     def __init__(self, logger, config, scratchDbName):
     36    def __init__(self, logger, config, scratchDbName="ipptopsps_scratch"):
    3737
    3838        # set up logging
     
    9292
    9393    '''
     94    Loads the DVO Photcodes.dat FITS file
     95    '''
     96    def loadPhotcodes(self):
     97
     98        # go no further if we've already partly ingested a different DVO
     99        if not self.correctDvo: return
     100
     101        # check if we have up-to-date version
     102        path = self.config.dvoLocation + "/Photcodes.dat"
     103        if self.scratchDb.alreadyImportedThisDvoTable(path):
     104            self.logger.debugPair("DVO Photcodes.dat file", "up-to-date")
     105            return
     106       
     107        self.logger.infoSeparator()
     108        self.logger.infoPair("DVO Photcodes.dat file", "NOT up-to-date")
     109
     110        self.importFits(
     111                path,
     112                "CODE NAME",
     113                self.scratchDb.dvoPhotcodesTable)
     114        self.logger.infoPair("Adding primary key to", self.scratchDb.dvoPhotcodesTable)
     115        self.scratchDb.makeColumnPrimaryKey(self.scratchDb.dvoPhotcodesTable, "CODE")
     116
     117        self.scratchDb.setImportedThisDvoTable(path)
     118
     119    '''
    94120    Loads the DVO Images.dat FITS file
    95121    '''
     
    189215        self.regionsToPurge = []
    190216        self.allPopulatedRegions = []
     217        self.allPopulatedRegionInfo = []
    191218        self.regionsAlreadyIngested = []
    192219        self.regionsIngestedButOutOfDate = []
     
    194221        # loop through all regions in DVO inside this bounding-box
    195222        for region in allRegions:
     223
     224           regionId = region[0]
     225           regionRa = region[1]
     226           regionDec = region[2]
     227           regionPath = region[3]
    196228
    197229           # get paths for this region for the file types we are interested in
    198230           paths = []
    199231           for fileType in self.ingestFileTypes:
    200                paths.append(self.config.dvoLocation + "/" + region + "." + fileType)
     232               paths.append(self.config.dvoLocation + "/" + regionPath + "." + fileType)
    201233
    202234           # check for the existence of all interested file types
     
    210242
    211243           # ok, have real, populated files so add this region to the list
    212            self.allPopulatedRegions.append(region)
     244           self.allPopulatedRegions.append(regionPath)
     245           self.allPopulatedRegionInfo.append([regionId, regionRa, regionDec])
    213246
    214247           # if we have already imported up-to-date versions of all interested files, then we skip this region
     
    220253   
    221254           if alreadyIngested:
    222                self.regionsAlreadyIngested.append(region)
     255               self.regionsAlreadyIngested.append(regionPath)
    223256               continue
    224257
     
    230263                   break
    231264
    232            if outOfDate: self.regionsIngestedButOutOfDate.append(region)
    233 
    234            self.regionsToIngest.append(region)
     265           if outOfDate: self.regionsIngestedButOutOfDate.append(regionPath)
     266
     267           self.regionsToIngest.append(regionPath)
    235268
    236269        # add out-of-range regions for purge list
     
    241274        for item in self.regionsIngestedButOutOfDate: self.regionsToPurge.append(item)
    242275
    243         self.sizeOfAllPopulatedRegions = self.getDiskSizeOfDvoRegions(self.allPopulatedRegions)
    244         self.sizeOfRegionsAlreadyIngested = self.getDiskSizeOfDvoRegions(self.regionsAlreadyIngested)
    245         self.sizeOfRegionsIngestedButOutOfDate = self.getDiskSizeOfDvoRegions(self.regionsIngestedButOutOfDate)
    246         self.sizeOfRegionsToPurge = self.getDiskSizeOfDvoRegions(self.regionsToPurge)
    247         self.sizeOfRegionsToIngest = self.getDiskSizeOfDvoRegions(self.regionsToIngest)
     276        self.sizeOfAllPopulatedRegions = self.getDiskSizeOfRegions(self.allPopulatedRegions)
     277        self.sizeOfRegionsAlreadyIngested = self.getDiskSizeOfRegions(self.regionsAlreadyIngested)
     278        self.sizeOfRegionsIngestedButOutOfDate = self.getDiskSizeOfRegions(self.regionsIngestedButOutOfDate)
     279        self.sizeOfRegionsToPurge = self.getDiskSizeOfRegions(self.regionsToPurge)
     280        self.sizeOfRegionsToIngest = self.getDiskSizeOfRegions(self.regionsToIngest)
    248281
    249282    '''
     
    288321
    289322    '''
     323    Purges a single region from the database
     324    '''
     325    def purgeRegion(self, region):
     326
     327        regions = []
     328        regions.append(region)
     329        self.purgeRegions(regions)
     330
     331    '''
    290332    Purges the provided regions from the database
    291333    '''
    292     def purgeRegions(self):
     334    def purgeRegions(self, regions):
    293335
    294336        # go no further if we've already partly ingested a different DVO
    295337        if not self.correctDvo: return False
    296338
    297         if len(self.regionsToPurge) < 1: return False
    298 
    299         self.logger.infoPair("Purging", "%d regions" % len(self.regionsToPurge))
    300 
    301         detectionDeleteCount = self.scratchDb.purgeTheseDvoRegions(self.regionsToPurge, self.ingestFileTypes)
     339        if len(regions) < 1: return False
     340
     341        self.logger.infoPair("Purging", "%d regions" % len(regions))
     342
     343        detectionDeleteCount = self.scratchDb.purgeTheseDvoRegions(regions, self.ingestFileTypes)
    302344        if detectionDeleteCount > 0: self.logger.infoPair("Deleted", "%d detections" % detectionDeleteCount)
    303345
     
    327369    Returns the disk size of these DVO regions, i.e. the size on disk of all relevant DVO FITS files
    328370    '''
    329     def getDiskSizeOfDvoRegions(self, regions):
     371    def getDiskSizeOfRegions(self, regions):
    330372
    331373        size = 0.0
     
    338380        return size
    339381
     382
     383    '''
     384    Ingests object files for this region, given an INDEX from the SkyTable
     385    '''
     386    def ingestRegionUsingIndex(self, index):
     387        return self.ingestRegion(self.scratchDb.getRegionNameFromThisDvoIndex(index))
     388
    340389    '''
    341390    Abstract method for ingesting a particular reegion. Must be implemented in all subclasses
    342391    '''
    343392    def ingestRegion(self, region):
    344         self.logger.errorPair("ingestRegion()", "not implemented for this class")
    345 
     393        return self.logger.errorPair("ingestRegion()", "not implemented for this class")
    346394
    347395    '''
     
    364412
    365413        # purge stuff
    366         self.purgeRegions()
     414        self.purgeRegions(self.regionsToPurge)
    367415
    368416        totalRegions = len(self.regionsToIngest)
     
    389437    '''
    390438    Imports a FITS file. A regex filter lets you choose which tables to pull from the file
    391     An optional final argument lets you name the resulatant database table
     439    An optional final argument lets you name the resultant database table
    392440    '''
    393441    def importFits(self, path, columns, tableName):
     
    404452          table = stilts.tpipe(table, cmd='explodeall')
    405453     
    406           # IPP FITS files are littered with infinities, so remove these
     454          # IPP FITS files are littered with infinity values. Remove them
    407455          self.logger.debugPair("Removing", "infinity values")
    408456          table = stilts.tpipe(table, cmd='replaceval -Infinity null *')
Note: See TracChangeset for help on using the changeset viewer.