source: trunk/python/asapmath.py@ 200

Last change on this file since 200 was 180, checked in by kil064, 20 years ago

add function 'smooth' and remove function 'hanning'

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 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 bin(scan, width=5, insitu=False):
92 """
93 Return a scan where all spectra have been binned up
94 width: The bin width (default=5) in pixels
95 insitu: if False (default) a new scantable is returned.
96 Otherwise, the addition is done in-situ
97 """
98 if not insitu:
99 from asap._asap import bin as _bin
100 return scantable(_bin(scan, width))
101 else:
102 from asap._asap import bin_insitu as _bin
103 _bin(scan, width)
104 return
105
106def average_pol(scan, mask=None, insitu=False):
107 """
108 Average the Polarisations together.
109 Parameters:
110 scan: The scantable
111 mask: An optional mask defining the region, where the
112 averaging will be applied. The output will have all
113 specified points masked.
114 insitu: If False (default) a new scantable is returned.
115 Otherwise, the averaging is done in-situ
116 Example:
117 polav = average_pols(myscan)
118 """
119 if mask is None:
120 mask = ()
121 if not insitu:
122 from asap._asap import averagepol as _avpol
123 return scantable(_avpol(scan, mask))
124 else:
125 from asap._asap import averagepol_insitu as _avpol
126 _avpol(scan, mask)
127 return
128
129def smooth(scan, kernel="hanning", width=5.0, insitu=False, all=True):
130 """
131 Smooth the spectrum by the specified kernel (conserving flux).
132 Parameters:
133 scan: The input scan
134 kernel: The type of smoothing kernel. Select from
135 'hanning' (default), 'gaussian' and 'boxcar'.
136 The first three characters are sufficient.
137 width: The width of the kernel in pixels. For hanning this is
138 ignored otherwise it defauls to 5 pixels.
139 For 'gaussian' it is the Full Width Half
140 Maximum. For 'boxcar' it is the full width.
141 insitu: If False (default) a new scantable is returned.
142 Otherwise, the scaling is done in-situ
143 all: If True (default) apply to all spectra. Otherwise
144 apply only to the selected (beam/pol/if)spectra only
145 Example:
146 none
147 """
148 if not insitu:
149 from asap._asap import smooth as _smooth
150 return scantable(_smooth(scan,kernel,width,all))
151 else:
152 from asap._asap import smooth_insitu as _smooth
153 _smooth(scan,kernel,width,all)
154 return
155
156def poly_baseline(scan, mask=None, order=0):
157 """
158 Return a scan which has been baselined (all rows) by a polynomial.
159 Parameters:
160 scan: a scantable
161 mask: an optional mask
162 order: the order of the polynomial (default is 0)
163 Example:
164 # return a scan baselined by a third order polynomial,
165 # not using a mask
166 bscan = poly_baseline(scan, order=3)
167 """
168 from asap.asapfitter import fitter
169 if mask is None:
170 from numarray import ones
171 mask = tuple(ones(scan.nchan()))
172 f = fitter()
173 f._verbose(True)
174 f.set_scan(scan, mask)
175 f.set_function(poly=order)
176 sf = f.auto_fit()
177 return sf
Note: See TracBrowser for help on using the repository browser.