source: trunk/python/asapmath.py@ 177

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

add cursor selection to function 'hanning'

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.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 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 hanning(scan, insitu=False, all=True):
130 """
131 Hanning smooth the channels.
132 Parameters:
133 scan: The input scan
134 insitu: If False (default) a new scantable is returned.
135 Otherwise, the scaling 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 Example:
139 none
140 """
141 if not insitu:
142 from asap._asap import hanning as _hann
143 return scantable(_hann(scan,all))
144 else:
145 from asap._asap import hanning_insitu as _hann
146 _hann(scan,all)
147 return
148
149def poly_baseline(scan, mask=None, order=0):
150 """
151 Return a scan which has been baselined (all rows) by a polynomial.
152 Parameters:
153 scan: a scantable
154 mask: an optional mask
155 order: the order of the polynomial (default is 0)
156 Example:
157 # return a scan baselined by a third order polynomial,
158 # not using a mask
159 bscan = poly_baseline(scan, order=3)
160 """
161 from asap.asapfitter import fitter
162 if mask is None:
163 from numarray import ones
164 mask = tuple(ones(scan.nchan()))
165 f = fitter()
166 f._verbose(True)
167 f.set_scan(scan, mask)
168 f.set_function(poly=order)
169 sf = f.auto_fit()
170 return sf
Note: See TracBrowser for help on using the repository browser.