Package helpers :: Module ResetProvenanceKeys
[hide private]

Source Code for Module helpers.ResetProvenanceKeys

  1  #! /usr/bin/env python 
  2  #------------------------------------------------------------------------------ 
  3  #$Id: ResetProvenanceKeys.py 7245 2010-07-20 12:52:03Z RossCollins $ 
  4  """ 
  5     Replaces wrong Provenance keywords in a list of FITS files. 
  6     All existing keys but the PROV0000 key will be deleted! 
  7   
  8     @author: E. Sutorius 
  9     @org:    WFAU, IfA, University of Edinburgh 
 10  """ 
 11  #------------------------------------------------------------------------------ 
 12  #  usage: ResetProvenanceKeys.py transferlog provlog 
 13  # 
 14  #   where transferlog = file with filenames (one per line) 
 15  #         provlog     = file with provenance information 
 16  # 
 17  #  You can use regular expressions as describe in "Python in a 
 18  #  Nutshell", p.157f (use '.*' where you normally would use '*') 
 19  #  example provlog: 
 20  #  # begin prov.log 
 21  #  # regexp for which the following prov keys are valid 
 22  #  e20060131_000013_p.*_dp 
 23  #  # prov keys for the regexp 
 24  #  PROV0001= 'w20050912_01274_sf_st.fit' / Card #1 
 25  #  PROV0002= 'w20050912_01330_sf_st.fit' / Card #2 
 26  #  PROV0003= 'w20050912_01386_sf_st.fit' / Card #3 
 27  #  # next set of regexps and prov keys 
 28  #  e20060131_000035_p.*_dp 
 29  #  PROV0001= 'w20050912_01026_sf_st.fit' / Card #1 
 30  #  PROV0002= 'w20050912_01082_sf_st.fit' / Card #2 
 31  #  # end prov.log 
 32  #------------------------------------------------------------------------------ 
 33  import os 
 34  import re 
 35  import sys 
 36  import time 
 37   
 38  import wsatools.FitsUtils                 as fits 
 39  #------------------------------------------------------------------------------ 
 40   
41 -def readfiles(filename):
42 """Read filenames from log file.""" 43 xobj = open(filename,mode='r') 44 flist = xobj.readlines() 45 xobj.close() 46 filelist = [] 47 for line in flist: 48 if line.find('#') != 0: 49 filelist.append(line[:-1]) 50 return filelist
51 52 #------------------------------------------------------------------------------
53 -def main(argv):
54 55 if len(argv) !=3: 56 print "argv: ", argv 57 print "usage: ResetProvenanceKeys.py transferlog provlog" 58 print "see script's header for more info." 59 raise SystemExit 60 61 tflog = argv[1] 62 provlog = argv[2] 63 64 filelist = readfiles(tflog) 65 provlist = readfiles(provlog) 66 67 provdict = {} 68 for elem in provlist: 69 if elem.find('PROV') < 0: 70 name = elem 71 provdict[name] = [] 72 else: 73 key = elem[:elem.find('=')] 74 value = elem[elem.find('\'')+1:elem[:elem.find('/')].rfind('\'')] 75 comment = elem[elem.find('/')+1:].strip() 76 provdict[name].append((key,value,comment)) 77 78 for dkey in provdict.keys(): 79 provdict[dkey].sort() 80 provdict[dkey].reverse() 81 82 # open file in update mode 83 for filename in filelist: 84 fimgptr = fits.open(filename,"update") 85 phdr = fimgptr[0].header 86 exthdr = fimgptr[1].header 87 shortname = filename[filename.rfind('/')+1:] 88 for dkey in provdict.keys(): 89 pattern = dkey 90 r1 = re.compile(pattern) 91 if r1.match(shortname): 92 # delete old prov keys 93 for i in range(1,999): 94 fkey = "PROV%04i"%i 95 if exthdr.has_key(fkey): 96 del exthdr[fkey] 97 else: 98 break 99 # write in new prov keys 100 for elem in provdict[dkey]: 101 exthdr.update(elem[0],elem[1],elem[2],after="PROV0000") 102 print shortname,"updated" 103 fimgptr.flush() 104 105 # if file was modified, set the modification date back 106 # to the original one 107 if phdr.has_key("WSA_TIME"): 108 wsaTimestamp = phdr.get("WSA_TIME") 109 timetpl = time.strptime(wsaTimestamp[6:],'%y%m%d%H%M%S') 110 else: 111 if exthdr.has_key("DATE"): 112 timestamp = exthdr.get("DATE") 113 timetpl = time.strptime(timestamp,'%Y-%m-%dT%H:%M:%S') 114 115 modtime = time.mktime(timetpl) 116 os.utime(filename,(time.time(),modtime)) 117 print " file time reset done" 118 119 # close file 120 fimgptr.close()
121 122 #------------------------------------------------------------------------------ 123 # 124 if __name__ == '__main__': 125 main(sys.argv) 126 127 #------------------------------------------------------------------------------ 128 # Change log: 129 # 130 # 3-Feb-2006, ETWS: first version 131 # 7-Jun-2006, RSC: Replaced utils.sortList() with fast, new Python 2.4 method 132 # 10-Jul-2006, RSC: Replaced string module functions with str() equivalents as 133 # the string module with be obsoleted in Python 3.0 134