source: trunk/python/asapmath.py@ 1172

Last change on this file since 1172 was 1085, checked in by mar637, 18 years ago

only import scantable form scantable

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1from asap.scantable import scantable
2from asap import rcParams
3from asap import print_log
4
5def average_time(*args, **kwargs):
6 """
7 Return the (time) average of a scan or list of scans. [in channels only]
8 The cursor of the output scan is set to 0
9 Parameters:
10 one scan or comma separated scans
11 mask: an optional mask (only used for 'var' and 'tsys' weighting)
12 scanav: True averages each scan separately.
13 False (default) averages all scans together,
14 weight: Weighting scheme. 'none, 'var' (1/var(spec)
15 weighted), 'tsys' (1/Tsys**2 weighted), 'tint'
16 (integration time weighted) or 'tintsys' (Tsys
17 and tint). The default is 'tint'
18 align: align the spectra in velocity before averaging. It takes
19 the time of the first spectrum in the first scantable
20 as reference time.
21 Example:
22 # return a time averaged scan from scana and scanb
23 # without using a mask
24 scanav = average_time(scana,scanb)
25 # return the (time) averaged scan, i.e. the average of
26 # all correlator cycles
27 scanav = average_time(scan, scanav=True)
28 """
29 scanav = False
30 if kwargs.has_key('scanav'):
31 scanav = kwargs.get('scanav')
32 weight = 'tint'
33 if kwargs.has_key('weight'):
34 weight = kwargs.get('weight')
35 mask = ()
36 if kwargs.has_key('mask'):
37 mask = kwargs.get('mask')
38 align = False
39 if kwargs.has_key('align'):
40 align = kwargs.get('align')
41 varlist = vars()
42 if isinstance(args[0],list):
43 lst = args[0]
44 elif isinstance(args[0],tuple):
45 lst = list(args[0])
46 else:
47 lst = list(args)
48
49 del varlist["kwargs"]
50 varlist["args"] = "%d scantables" % len(lst)
51 # need special formatting here for history...
52
53 from asap._asap import stmath
54 stm = stmath()
55 for s in lst:
56 if not isinstance(s,scantable):
57 msg = "Please give a list of scantables"
58 if rcParams['verbose']:
59 print msg
60 return
61 else:
62 raise TypeError(msg)
63 if scanav: scanav = "SCAN"
64 else: scanav = "NONE"
65 alignedlst = []
66 if align:
67 refepoch = lst[0].get_time(0)
68 for scan in lst:
69 alignedlst.append(scan.freq_align(refepoch,insitu=False))
70 else:
71 alignedlst = lst
72 s = scantable(stm._average(alignedlst, mask, weight.upper(), scanav))
73 s._add_history("average_time",varlist)
74 print_log()
75 return s
76
77def quotient(source, reference, preserve=True):
78 """
79 Return the quotient of a 'source' (signal) scan and a 'reference' scan.
80 The reference can have just one scan, even if the signal has many. Otherwise
81 they must have the same number of scans.
82 The cursor of the output scan is set to 0
83 Parameters:
84 source: the 'on' scan
85 reference: the 'off' scan
86 preserve: you can preserve (default) the continuum or
87 remove it. The equations used are
88 preserve: Output = Toff * (on/off) - Toff
89 remove: Output = Toff * (on/off) - Ton
90 """
91 varlist = vars()
92 from asap._asap import stmath
93 stm = stmath()
94 stm._setinsitu(False)
95 s = scantable(stm._quotient(source, reference, preserve))
96 s._add_history("quotient",varlist)
97 print_log()
98 return s
99
100def simple_math(left, right, op='add', tsys=True):
101 """
102 Apply simple mathematical binary operations to two
103 scan tables, returning the result in a new scan table.
104 The operation is applied to both the correlations and the TSys data
105 The cursor of the output scan is set to 0
106 Parameters:
107 left: the 'left' scan
108 right: the 'right' scan
109 op: the operation: 'add' (default), 'sub', 'mul', 'div'
110 tsys: if True (default) then apply the operation to Tsys
111 as well as the data
112 """
113 varlist = vars()
114 print "Not yet available in asap"
115 return
116 if not isinstance(left,scantable) and not isinstance(right,scantable):
117 msg = "Please provide two scantables as input"
118 if rcParams['verbose']:
119 print msg
120 return
121 else:
122 raise TypeError(msg)
123 s = scantable(stm._bop(left, right, op, tsys))
124 s._add_history("simple_math", varlist)
125 print_log()
126 return s
127
128def merge(*args):
129 """
130 """
131 varlist = vars()
132 if isinstance(args[0],list):
133 lst = tuple(args[0])
134 elif isinstance(args[0],tuple):
135 lst = args[0]
136 else:
137 lst = tuple(args)
138 varlist["args"] = "%d scantables" % len(lst)
139 # need special formatting her for history...
140 from asap._asap import stmath
141 stm = stmath()
142 for s in lst:
143 if not isinstance(s,scantable):
144 msg = "Please give a list of scantables"
145 if rcParams['verbose']:
146 print msg
147 return
148 else:
149 raise TypeError(msg)
150 s = scantable(stm._merge(lst))
151 s._add_history("merge", varlist)
152 print_log()
153 return s
154
Note: See TracBrowser for help on using the repository browser.