source: trunk/python/asapmath.py@ 160

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

document that poly_baseline now operates on all rows in the scan

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.7 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, binwidth=5):
92 """
93 """
94 from asap._asap import bin as _bin
95 return scantable(_bin(scan, binwidth))
96
97def average_pol(scan, mask=None):
98 """
99 Average the Polarisations together.
100 Parameters:
101 scan - a scantable
102 mask - an optional mask defining the region, where
103 the averaging will be applied. The output
104 will have all specified points masked.
105 The dimension won't be reduced and
106 all polarisations will contain the
107 averaged spectrum.
108 Example:
109 polav = average_pols(myscan)
110 """
111 from asap._asap import averagepol as _avpol
112 from numarray import ones
113 if mask is None:
114 mask = tuple(ones(scan.nchan()))
115 return scantable(_avpol(scan, mask))
116
117def hanning(scan):
118 """
119 Hanning smooth the channels.
120 Parameters:
121 scan - the input scan
122 Example:
123 none
124 """
125 from asap._asap import hanning as _han
126 return scantable(_han(scan))
127
128
129def poly_baseline(scan, mask=None, order=0):
130 """
131 Return a scan which has been baselined (all rows) by a polynomial.
132 Parameters:
133 scan: a scantable
134 mask: an optional mask
135 order: the order of the polynomial (default is 0)
136 Example:
137 # return a scan baselined by a third order polynomial,
138 # not using a mask
139 bscan = poly_baseline(scan, order=3)
140 """
141 from asap.asapfitter import fitter
142 if mask is None:
143 from numarray import ones
144 mask = tuple(ones(scan.nchan()))
145 f = fitter()
146 f._verbose(True)
147 f.set_scan(scan, mask)
148 f.set_function(poly=order)
149 sf = f.auto_fit()
150 return sf
Note: See TracBrowser for help on using the repository browser.