source: trunk/python/asapmath.py@ 224

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

add function 'convertflux'

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.0 KB
RevLine 
[101]1from scantable import scantable
2
[143]3def average_time(*args, **kwargs):
[101]4 """
[113]5 Return the (time) average of a scan or list of scans. [in channels only]
6 Parameters:
7 one scan or comma separated scans
[143]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'
[113]13 Example:
14 # return a time averaged scan from scana and scanb
15 # without using a mask
[129]16 scanav = average_time(scana,scanb)
[113]17 # return the (time) averaged scan, i.e. the average of
18 # all correlator cycles
19 scanav = average_time(scan)
[143]20
[101]21 """
[143]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
[113]36 for s in lst:
[101]37 if not isinstance(s,scantable):
38 print "Please give a list of scantables"
39 return
[143]40 return scantable(_av(lst, mask, scanAv, weight))
[101]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
[150]52def scale(scan, factor, insitu=False, all=True):
[101]53 """
54 Return a scan where all spectra are scaled by the give 'factor'
55 Parameters:
56 scan: a scantable
[113]57 factor: the scaling factor
[150]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
[101]62 """
[141]63 if not insitu:
64 from asap._asap import scale as _scale
[150]65 return scantable(_scale(scan, factor, all))
[141]66 else:
67 from asap._asap import scale_insitu as _scale
[150]68 _scale(scan, factor, all)
[141]69 return
70
[101]71
[150]72def add(scan, offset, insitu=False, all=True):
[113]73 """
[150]74 Return a scan where all spectra have the offset added
[113]75 Parameters:
76 scan: a scantable
[150]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
[113]82 """
[150]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
[224]91def convertflux(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
[167]112def bin(scan, width=5, insitu=False):
[101]113 """
[167]114 Return a scan where all spectra have been binned up
[172]115 width: The bin width (default=5) in pixels
[167]116 insitu: if False (default) a new scantable is returned.
117 Otherwise, the addition is done in-situ
[101]118 """
[167]119 if not insitu:
120 from asap._asap import bin as _bin
121 return scantable(_bin(scan, width))
122 else:
123 from asap._asap import bin_insitu as _bin
124 _bin(scan, width)
125 return
[113]126
[166]127def average_pol(scan, mask=None, insitu=False):
[113]128 """
129 Average the Polarisations together.
130 Parameters:
[172]131 scan: The scantable
132 mask: An optional mask defining the region, where the
133 averaging will be applied. The output will have all
134 specified points masked.
135 insitu: If False (default) a new scantable is returned.
[166]136 Otherwise, the averaging is done in-situ
[113]137 Example:
138 polav = average_pols(myscan)
139 """
140 if mask is None:
[166]141 mask = ()
142 if not insitu:
143 from asap._asap import averagepol as _avpol
144 return scantable(_avpol(scan, mask))
145 else:
146 from asap._asap import averagepol_insitu as _avpol
147 _avpol(scan, mask)
148 return
[113]149
[180]150def smooth(scan, kernel="hanning", width=5.0, insitu=False, all=True):
[113]151 """
[180]152 Smooth the spectrum by the specified kernel (conserving flux).
[113]153 Parameters:
[172]154 scan: The input scan
[180]155 kernel: The type of smoothing kernel. Select from
156 'hanning' (default), 'gaussian' and 'boxcar'.
157 The first three characters are sufficient.
158 width: The width of the kernel in pixels. For hanning this is
159 ignored otherwise it defauls to 5 pixels.
160 For 'gaussian' it is the Full Width Half
161 Maximum. For 'boxcar' it is the full width.
[172]162 insitu: If False (default) a new scantable is returned.
163 Otherwise, the scaling is done in-situ
[180]164 all: If True (default) apply to all spectra. Otherwise
165 apply only to the selected (beam/pol/if)spectra only
[113]166 Example:
167 none
168 """
[172]169 if not insitu:
[180]170 from asap._asap import smooth as _smooth
171 return scantable(_smooth(scan,kernel,width,all))
[172]172 else:
[180]173 from asap._asap import smooth_insitu as _smooth
174 _smooth(scan,kernel,width,all)
[172]175 return
[113]176
177def poly_baseline(scan, mask=None, order=0):
178 """
[160]179 Return a scan which has been baselined (all rows) by a polynomial.
[113]180 Parameters:
181 scan: a scantable
182 mask: an optional mask
183 order: the order of the polynomial (default is 0)
184 Example:
185 # return a scan baselined by a third order polynomial,
186 # not using a mask
187 bscan = poly_baseline(scan, order=3)
188 """
189 from asap.asapfitter import fitter
190 if mask is None:
191 from numarray import ones
192 mask = tuple(ones(scan.nchan()))
193 f = fitter()
194 f._verbose(True)
195 f.set_scan(scan, mask)
196 f.set_function(poly=order)
197 sf = f.auto_fit()
198 return sf
Note: See TracBrowser for help on using the repository browser.