Package helpers :: Module TestFitsVerify
[hide private]

Source Code for Module helpers.TestFitsVerify

  1  #! /usr/bin/env python 
  2  #------------------------------------------------------------------------------ 
  3  # $$ 
  4   
  5  import os 
  6   
  7  from   wsatools.CLI                 import CLI 
  8  from   wsatools.DbConnect.CuSession import CuSession 
  9  from   wsatools.Logger              import ForLoopMonitor, Logger 
 10  import wsatools.FitsUtils               as fits 
 11  import wsatools.Utilities               as utils 
 12  import wsatools.ExternalProcess         as extp 
 13  from   wsatools.SystemConstants     import DepCodes 
 14  #------------------------------------------------------------------------------ 
 15   
 16   
17 -class TestFitsVerify(CuSession):
18 """ Checks files in a programme for errors 19 """ 20 #-------------------------------------------------------------------------- 21 # Class constants (access as TestFitsVerify.varName) 22 cuNum = 31 23 24 #-------------------------------------------------------------------------- 25 # Public member variable default values - set from command-line options 26 testOBframes = False 27 listFileName = None 28 29 #-------------------------------------------------------------------------- 30 # Private class parameters - should not be altered 31 32 _autoCommit = True # Overrides CuSession default 33 34 _tmpWorkDir = None 35 #-------------------------------------------------------------------------- 36 # Private member variables 37 38 39 #-------------------------------------------------------------------------- 40
41 - def _onRun(self):
42 fileList = (self.archive.query("fileName", "Multiframe as m,ProgrammeFrame as p", 43 "p.programmeID=%s and p.multiframeID=m.multiframeID and frameType " 44 "like '%%stack' and frameType not like '%%deep%%' and frameType not " 45 "like '%%tile%%' and %s order by fileName" % (self.programmeID, DepCodes.selectNonDeprecated)) 46 if self.testOBframes else self.archive.query( 47 "fileName", "ProductProcessing", "programmeID=%s order by fileName" % 48 self.programmeID)) 49 50 51 progress = ForLoopMonitor(fileList) 52 self._tmpWorkDir = self.sysc.tempWorkPath() 53 utils.ensureDirExist(self._tmpWorkDir) 54 Logger.addMessage("No stacks = %s" % len(fileList)) 55 self.noFiles = 0 56 # @TODO: parallelise... 57 testedFiles = [] 58 for fName in fileList: 59 fileName = fits.stripServer(fName) 60 confMap = fits.getConfMap(fileName) 61 catName = fits.getCatalogue(fileName) 62 if self.testFits(fileName): 63 testedFiles.append(fileName) 64 if self.testFits(confMap): 65 testedFiles.append(confMap) 66 if self.testFits(catName): 67 testedFiles.append(catName) 68 progress.testForOutput() 69 Logger.addMessage("No files = %s" % self.noFiles) 70 if self.listFileName: 71 utils.ensureDirExist(os.path.dirname(self.listFileName)) 72 file(self.listFileName, 'w').writelines(['%s\n' % os.getenv('HOST')] + ['%s\n' % fileName 73 for fileName in testedFiles]) 74 Logger.addMessage("List of files written to %s" % self.listFileName)
75 76 #-------------------------------------------------------------------------- 77
78 - def testFits(self, fileName):
79 """ 80 """ 81 if os.path.exists(fileName): 82 stdout = extp.run('fverify %s' % fileName, ignoreMsgs=['Problem saving parameter file']) 83 index = 0 84 for ii, line in enumerate(stdout): 85 if line.startswith('HDU#'): 86 index = ii 87 hduNo = 0 88 if ii > index and index > 0: 89 if len(line) > 0 and line[0].isdigit(): 90 hduNo += 1 91 if int(line.split()[len(line.split()) - 1]) > 0: 92 # @TODO: Check for CCPRES error? 93 Logger.addMessage("%s: %s" % (fileName, line)) 94 if self.sysc.tileSuffix not in fileName and self.sysc.mosaicSuffix not in fileName and hduNo < self.sysc.maxHDUs: 95 Logger.addMessage("Fewer extensions in file %s than expected" % fileName) 96 self.noFiles += 1 97 return True
98 99 #------------------------------------------------------------------------------ 100 101 if __name__ == "__main__": 102 # Command-line interface specification 103 CLI.progArgs += [ 104 CLI.Argument("programmeID", "VVV")] 105 CLI.progOpts += [ 106 CLI.Option("o", "obFrames", "Test OB frames"), 107 CLI.Option("l", "listFileName", "File with list of files", "FILE"), 108 ] 109 110 cli = CLI(TestFitsVerify, "$Revision: 9509 $") 111 Logger.isVerbose = False 112 Logger.addMessage(cli.getProgDetails()) 113 CLI.check64bitServer() 114 cu = TestFitsVerify(cli.getArg("programmeID"), cli=cli) 115 116 cu.isTrialRun = cli.getOpt("test") 117 if cli.getOpt("listFileName"): 118 cu.listFileName = cli.getOpt("listFileName") 119 cu.testOBframes = cli.getOpt("obFrames") 120 cu.run() 121 122 #------------------------------------------------------------------------------ 123