1
2
3
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
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 import os
34 import re
35 import sys
36 import time
37
38 import wsatools.FitsUtils as fits
39
40
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
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
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
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
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
106
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
120 fimgptr.close()
121
122
123
124 if __name__ == '__main__':
125 main(sys.argv)
126
127
128
129
130
131
132
133
134