eff_header.py
4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
title = "CheckHeader"
tip = "checks FITS header for missing keywords"
onein = True
import numpy as np
import pyfits
import xml2nod3
from guidata.qt.QtCore import Qt
from guidata.qt.QtGui import QMessageBox, QApplication, QCursor
from guidata.dataset.datatypes import DataSet
from guidata.dataset.dataitems import (IntItem, StringItem, ChoiceItem, FloatItem, BoolItem)
from guiqwt.config import _
class NOD3_App:
def __init__(self, parent):
self.parent = parent
self.parent.activateWindow()
def Error(self, msg):
QMessageBox.critical(self.parent.parent(), title,
_(u"Error:")+"\n%s" % str(msg))
def compute_app(self, **args):
class FuncParam(DataSet):
s = StringItem('s', default="string")
i = IntItem('i', default=0, max=100, min=0)
a = FloatItem('a', default=1.)
b = BoolItem("bool", default=True)
choice = ChoiceItem("Unit", ("Degree", "Arcmin", "Arcsec"), default=2)
name = title.replace(" ", "")
if args == {}:
param = FuncParam(_(title), "description")
else:
param = self.parent.ScriptParameter(name, args)
# if no parameter needed set param to None. activate next line
param = None
self.parent.compute_11(name, lambda m, p: self.function(m, p), param, onein)
def function(self, m, p):
Nod3 = xml2nod3.NOD3_Fits()
keys, nod3header = Nod3.NOD3Header()
if not "FITSVERS" in m.header:
m.header["FITSVERS"] = (pyfits.__version__, "FITSVERS")
if not "NAXIS3" in m.header:
m.header["NAXIS3"] = (1, "NAXIS3")
#m.header.update("BLANK", np.nan, "Blank value")
job = "class FuncParam(DataSet):\n"
for key in keys:
if not key in m.header or key.lower() == 'title':
if key not in ("EXTEND", "FITSVERS"):
x = key, nod3header[key][0][-1], nod3header[key][1], nod3header[key][-2]
v = x[2]
u = nod3header[key][-1]
if key.lower() == 'title' and 'OBJECT' in m.header:
v = m.header['OBJECT']
if u == " ":
job += str(" %s = StringItem('%s:', default='%s')\n" % (key, key, v))
else:
job += str(" %s = StringItem('%s [%s]:', default='%s')\n" % (key, key, u, v))
#if x[1] == "A":
# job += str(" %s = StringItem('%s =', default=%s)\n" % (key, key, None))
#elif x[1] in ("I", "J"):
# job += str(" %s = IntItem('%s =', default=%d)\n" % (key, key, 0))
#elif x[1] in ("E", "D"):
# job += str(" %s = FloatItem('%s =', default=%f)\n" % (key, key, 0.0))
job += str("param = FuncParam('%s', _('<b>Edit missing header elements:</b>'))\n" % (title))
job += "param.edit(parent=self.parent)"
QApplication.setOverrideCursor(QCursor(Qt.ArrowCursor))
exec(job)
try:
for i in param._items:
if hasattr(i, '_name'):
key = i._name
val = getattr(param, i._name)
if type(i) in (StringItem, ChoiceItem):
val = str("%s" % val)
else:
key = i
val = getattr(param, i)
if type(val) == str:
val = str("%s" % val)
if val != "":
typ = nod3header[key][0][-1]
if typ == "A":
m.header[key] = (val, nod3header[key][-2])
elif typ == "L":
m.header[key] = (bool(val), nod3header[key][-2])
elif typ in ("I", "J"):
try:
m.header[key] = (int(val), nod3header[key][-2])
except:
m.header[key] = (int(val), nod3header[key][-2])
elif typ in ("E", "D"):
try:
m.header[key] = (float(eval(val)), nod3header[key][-2])
except:
m.header[key] = float(eval(val))
else:
print key, typ, 'not found'
except:
self.Error("keyword may be wrong type?")
QApplication.restoreOverrideCursor()
return [], p
QApplication.restoreOverrideCursor()
return m, p