Package helpers :: Module ReadFitsKeys
[hide private]

Source Code for Module helpers.ReadFitsKeys

  1  #! /usr/bin/env python 
  2  #------------------------------------------------------------------------------ 
  3  #$Id: ReadFitsKeys.py 7245 2010-07-20 12:52:03Z RossCollins $ 
  4  """ 
  5     Reads given Fits key(s) from all FITS files for a given date 
  6     and reports value counts. 
  7   
  8     @author: E. Sutorius 
  9     @org:    WFAU, IfA, University of Edinburgh 
 10   
 11     @newfield contributors: Contributors, Contributors (Alphabetical Order) 
 12     @contributors: R.S. Collins 
 13  """ 
 14  #------------------------------------------------------------------------------ 
 15  from   collections import defaultdict 
 16  import dircache 
 17  import os 
 18   
 19  from   wsatools.CLI                   import CLI 
 20  import wsatools.FitsUtils                 as fits 
 21  from   wsatools.DbConnect.IngIngester import IngestLogger as Logger 
 22  from   wsatools.SystemConstants       import SystemConstants 
 23  import wsatools.Utilities                 as utils 
 24  #------------------------------------------------------------------------------ 
 25   
26 -class ReadFitsKeys(object):
27 """ Checks FITS files for missing multiframe IDs or WSATimestamps. 28 """ 29 #-------------------------------------------------------------------------- 30 # Define public member variable default values (access as obj.varName) 31 # these need to be set from command-line options 32 #: Database connection. 33 dataArchive = "WSA" 34 #: System constants. 35 sysc = SystemConstants() 36 #: File version numbers to check. 37 versionStr = '1' 38 #: Fits keys. 39 fitsKeys = ["%s_MFID" % dataArchive, "%s_TIME" % dataArchive] 40 #: Write output also into file. 41 writeToFile = False 42 #-------------------------------------------------------------------------- 43
44 - def run(self, startDate, endDate):
45 """ Runs the FITS file check. 46 """ 47 # create a dictionary containing all dates 48 fitsList = fits.FitsList(self.sysc, "rfk_") 49 fitsList.createFitsDateDict( 50 beginDateStr=startDate, endDateStr=endDate, 51 versionStr=self.versionStr) 52 53 fileDict = defaultdict(list) 54 for direc in fitsList.fitsDateDict: 55 for datumVersStr in fitsList.fitsDateDict[direc]: 56 path = os.path.join(direc, datumVersStr) 57 fileDict[datumVersStr] = [os.path.join(path, item) 58 for item in dircache.listdir(path) if item.endswith(".fit")] 59 60 for dateVersStr in sorted(fileDict): 61 keyDict = defaultdict(dict) 62 noKeyDict = defaultdict(list) 63 for fileName in fileDict[dateVersStr]: 64 # read FTIS keywords 65 phdr = fits.open(fileName)[0].header 66 keyList = [] 67 for key in self.fitsKeys: 68 if phdr.has_key(key): 69 keyList.append(phdr[key]) 70 else: 71 keyList.append('') 72 noKeyDict[tuple(self.fitsKeys)].append(fileName) 73 74 if tuple(keyList) in keyDict[tuple(self.fitsKeys)]: 75 keyDict[tuple(self.fitsKeys)][tuple(keyList)] += 1 76 #keyDict[key][tuple(keyList)][0] += 1 77 #keyDict[key][tuple(keyList)][1].append(fileName) 78 else: 79 keyDict[tuple(self.fitsKeys)][tuple(keyList)] = 1 80 #keyDict[key][tuple(keyList)] = [1, [fileName]] 81 82 Logger.addMessage('*'*4+dateVersStr+'*'*4) 83 for key in keyDict: 84 header = ', '.join(key)+':' 85 Logger.addText(header) 86 Logger.addText('=' * len(header)) 87 for val in sorted(keyDict[key]): 88 Logger.addText('%s: %d' % (str(val), keyDict[key][val])) 89 90 if self.writeToFile: 91 outFileName = "VSA_FitsKeys_%s.txt" % ( 92 utils.makeTimeStamp().rpartition(':')[0].replace(' ','_')) 93 Logger.dump(file(outFileName , 'w')) 94 print "\nOutput written to: %s" % outFileName
95 96 #------------------------------------------------------------------------------ 97 98 if __name__ == '__main__': 99 # Define command-line interface settings 100 CLI.progArgs += [ 101 CLI.Argument("begindate", "20051225"), 102 CLI.Argument("enddate", "20061225"), 103 CLI.Argument("version", ReadFitsKeys.versionStr, 104 isValOK=lambda x: x.replace('.', '').isdigit()), 105 CLI.Argument("keys", ','.join(ReadFitsKeys.fitsKeys)), 106 ] 107 CLI.progOpts += [CLI.Option('f', "filename", "write output into file")] 108 cli = CLI(ReadFitsKeys, "$Revision: 7245 $") 109 110 task = ReadFitsKeys() 111 task.sysc = SystemConstants(cli.getArg("database")) 112 task.versionStr = cli.getArg("version") 113 task.fitsKeys = cli.getArg("keys").split(',') 114 task.writeToFile = cli.getOpt("filename") 115 task.run(cli.getArg("begindate"), cli.getArg("enddate")) 116 117 #------------------------------------------------------------------------------ 118 # CLI.Argument("archive", "VSA") 119 # task.sysc = SystemConstants(cli.getArg("archive")) 120