source: trunk/python/asapmath.py@ 230

Last change on this file since 230 was 229, checked in by kil064, 20 years ago

add gain-elevation correction functionality

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.6 KB
Line 
1from scantable import scantable
2
3def average_time(*args, **kwargs):
4 """
5 Return the (time) average of a scan or list of scans. [in channels only]
6 Parameters:
7 one scan or comma separated scans
8 mask: an optional mask (only used for 'var' and 'tsys' weighting)
9 scanav: False (default) averages all scans together,
10 True averages each scan separately
11 weight: Weighting scheme. 'none' (default), 'var' (variance
12 weighted), 'tsys'
13 Example:
14 # return a time averaged scan from scana and scanb
15 # without using a mask
16 scanav = average_time(scana,scanb)
17 # return the (time) averaged scan, i.e. the average of
18 # all correlator cycles
19 scanav = average_time(scan)
20
21 """
22 scanAv = False
23 if kwargs.has_key('scanav'):
24 scanAv = kwargs.get('scanav')
25#
26 weight = 'none'
27 if kwargs.has_key('weight'):
28 weight = kwargs.get('weight')
29#
30 mask = ()
31 if kwargs.has_key('mask'):
32 mask = kwargs.get('mask')
33#
34 lst = tuple(args)
35 from asap._asap import average as _av
36 for s in lst:
37 if not isinstance(s,scantable):
38 print "Please give a list of scantables"
39 return
40 return scantable(_av(lst, mask, scanAv, weight))
41
42def quotient(source, reference):
43 """
44 Return the quotient of a 'source' scan and a 'reference' scan
45 Parameters:
46 source: the 'on' scan
47 reference: the 'off' scan
48 """
49 from asap._asap import quotient as _quot
50 return scantable(_quot(source, reference))
51
52def scale(scan, factor, insitu=False, all=True):
53 """
54 Return a scan where all spectra are scaled by the give 'factor'
55 Parameters:
56 scan: a scantable
57 factor: the scaling factor
58 insitu: if False (default) a new scantable is returned.
59 Otherwise, the scaling is done in-situ
60 all: if True (default) apply to all spectra. Otherwise
61 apply only to the selected (beam/pol/if)spectra only
62 """
63 if not insitu:
64 from asap._asap import scale as _scale
65 return scantable(_scale(scan, factor, all))
66 else:
67 from asap._asap import scale_insitu as _scale
68 _scale(scan, factor, all)
69 return
70
71
72def add(scan, offset, insitu=False, all=True):
73 """
74 Return a scan where all spectra have the offset added
75 Parameters:
76 scan: a scantable
77 offset: the offset
78 insitu: if False (default) a new scantable is returned.
79 Otherwise, the addition is done in-situ
80 all: if True (default) apply to all spectra. Otherwise
81 apply only to the selected (beam/pol/if)spectra only
82 """
83 if not insitu:
84 from asap._asap import add as _add
85 return scantable(_add(scan, offset, all))
86 else:
87 from asap._asap import add_insitu as _add
88 _add(scan, offset, all)
89 return
90
91def convert_flux(scan, area, eta=1.0, insitu=False, all=True):
92 """
93 Return a scan where all spectra are converted to either Jansky or Kelvin
94 depending upon the flux units of the scan table.
95 Parameters:
96 scan: a scantable
97 area: the illuminated area of the telescope (m**2)
98 eta: The efficiency of the telescope (default 1.0)
99 insitu: if False (default) a new scantable is returned.
100 Otherwise, the conversion is done in-situ
101 all: if True (default) apply to all spectra. Otherwise
102 apply only to the selected (beam/pol/if)spectra only
103 """
104 if not insitu:
105 from asap._asap import convertflux as _convert
106 return scantable(_convert(scan, area, eta, all))
107 else:
108 from asap._asap import convertflux_insitu as _convert
109 _convert(scan, area, eta, all)
110 return
111
112def gain_el(scan, filename="gainel.txt", method="linear", insitu=False, all=True):
113 """
114 Return a scan after applying a gain-elevation correction via interpolation
115 (and extrapolation if necessary) from values in an ascii file.
116 Parameters:
117 scan: a scantable
118 filename: The name of the ASCII file holding the data. The first row
119 must give the column names. These MUST include columns
120 "ELEVATION" (degrees) and "FACTOR" (multiply data by this) somewhere.
121 The second row must give the data type of the column. Use 'R' for
122 Real and 'I' for Integer. An example file would be:
123
124 ELEVATION FACTOR
125 R R
126 0 1.5
127 20 1.4
128 40 1.3
129 60 1.2
130 80 1.1
131 90 1.0
132 method: Interpolation method. "nearest", "linear" (default),
133 "cubic" and "spline"
134 insitu: if False (default) a new scantable is returned.
135 Otherwise, the conversion is done in-situ
136 all: if True (default) apply to all spectra. Otherwise
137 apply only to the selected (beam/pol/if)spectra only
138 """
139 if not insitu:
140 from asap._asap import gainel as _gainEl
141 return scantable(_gainEl(scan, filename, method, all))
142 else:
143 from asap._asap import gainel_insitu as _gainEl
144 _gainEl(scan, filename, method, all)
145 return
146
147def bin(scan, width=5, insitu=False):
148 """
149 Return a scan where all spectra have been binned up
150 width: The bin width (default=5) in pixels
151 insitu: if False (default) a new scantable is returned.
152 Otherwise, the addition is done in-situ
153 """
154 if not insitu:
155 from asap._asap import bin as _bin
156 return scantable(_bin(scan, width))
157 else:
158 from asap._asap import bin_insitu as _bin
159 _bin(scan, width)
160 return
161
162def average_pol(scan, mask=None, insitu=False):
163 """
164 Average the Polarisations together.
165 Parameters:
166 scan: The scantable
167 mask: An optional mask defining the region, where the
168 averaging will be applied. The output will have all
169 specified points masked.
170 insitu: If False (default) a new scantable is returned.
171 Otherwise, the averaging is done in-situ
172 Example:
173 polav = average_pols(myscan)
174 """
175 if mask is None:
176 mask = ()
177 if not insitu:
178 from asap._asap import averagepol as _avpol
179 return scantable(_avpol(scan, mask))
180 else:
181 from asap._asap import averagepol_insitu as _avpol
182 _avpol(scan, mask)
183 return
184
185def smooth(scan, kernel="hanning", width=5.0, insitu=False, all=True):
186 """
187 Smooth the spectrum by the specified kernel (conserving flux).
188 Parameters:
189 scan: The input scan
190 kernel: The type of smoothing kernel. Select from
191 'hanning' (default), 'gaussian' and 'boxcar'.
192 The first three characters are sufficient.
193 width: The width of the kernel in pixels. For hanning this is
194 ignored otherwise it defauls to 5 pixels.
195 For 'gaussian' it is the Full Width Half
196 Maximum. For 'boxcar' it is the full width.
197 insitu: If False (default) a new scantable is returned.
198 Otherwise, the scaling is done in-situ
199 all: If True (default) apply to all spectra. Otherwise
200 apply only to the selected (beam/pol/if)spectra only
201 Example:
202 none
203 """
204 if not insitu:
205 from asap._asap import smooth as _smooth
206 return scantable(_smooth(scan,kernel,width,all))
207 else:
208 from asap._asap import smooth_insitu as _smooth
209 _smooth(scan,kernel,width,all)
210 return
211
212def poly_baseline(scan, mask=None, order=0):
213 """
214 Return a scan which has been baselined (all rows) by a polynomial.
215 Parameters:
216 scan: a scantable
217 mask: an optional mask
218 order: the order of the polynomial (default is 0)
219 Example:
220 # return a scan baselined by a third order polynomial,
221 # not using a mask
222 bscan = poly_baseline(scan, order=3)
223 """
224 from asap.asapfitter import fitter
225 if mask is None:
226 from numarray import ones
227 mask = tuple(ones(scan.nchan()))
228 f = fitter()
229 f._verbose(True)
230 f.set_scan(scan, mask)
231 f.set_function(poly=order)
232 sf = f.auto_fit()
233 return sf
Note: See TracBrowser for help on using the repository browser.