source: trunk/python/asapmath.py @ 160

Last change on this file since 160 was 160, checked in by kil064, 19 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.