source: trunk/python/asapmath.py @ 1085

Last change on this file since 1085 was 1085, checked in by mar637, 18 years ago

only import scantable form scantable

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1from asap.scantable import scantable
2from asap import rcParams
3from asap import print_log
4
5def average_time(*args, **kwargs):
6    """
7    Return the (time) average of a scan or list of scans. [in channels only]
8    The cursor of the output scan is set to 0
9    Parameters:
10        one scan or comma separated  scans
11        mask:     an optional mask (only used for 'var' and 'tsys' weighting)
12        scanav:   True averages each scan separately.
13                  False (default) averages all scans together,
14        weight:   Weighting scheme. 'none, 'var' (1/var(spec)
15                  weighted), 'tsys' (1/Tsys**2 weighted), 'tint'
16                  (integration time weighted) or 'tintsys' (Tsys
17                  and tint). The default is 'tint'
18        align:    align the spectra in velocity before averaging. It takes
19                  the time of the first spectrum in the first scantable
20                  as reference time.
21    Example:
22        # return a time averaged scan from scana and scanb
23        # without using a mask
24        scanav = average_time(scana,scanb)
25        # return the (time) averaged scan, i.e. the average of
26        # all correlator cycles
27        scanav = average_time(scan, scanav=True)
28    """
29    scanav = False
30    if kwargs.has_key('scanav'):
31       scanav = kwargs.get('scanav')
32    weight = 'tint'
33    if kwargs.has_key('weight'):
34       weight = kwargs.get('weight')
35    mask = ()
36    if kwargs.has_key('mask'):
37        mask = kwargs.get('mask')
38    align = False
39    if kwargs.has_key('align'):
40        align = kwargs.get('align')
41    varlist = vars()
42    if isinstance(args[0],list):
43        lst = args[0]
44    elif isinstance(args[0],tuple):
45        lst = list(args[0])
46    else:
47        lst = list(args)
48
49    del varlist["kwargs"]
50    varlist["args"] = "%d scantables" % len(lst)
51    # need special formatting here for history...
52
53    from asap._asap import stmath
54    stm = stmath()
55    for s in lst:
56        if not isinstance(s,scantable):
57            msg = "Please give a list of scantables"
58            if rcParams['verbose']:
59                print msg
60                return
61            else:
62                raise TypeError(msg)
63    if scanav: scanav = "SCAN"
64    else: scanav = "NONE"
65    alignedlst = []
66    if align:
67        refepoch = lst[0].get_time(0)
68        for scan in lst:
69            alignedlst.append(scan.freq_align(refepoch,insitu=False))
70    else:
71        alignedlst = lst
72    s = scantable(stm._average(alignedlst, mask, weight.upper(), scanav))
73    s._add_history("average_time",varlist)
74    print_log()
75    return s
76
77def quotient(source, reference, preserve=True):
78    """
79    Return the quotient of a 'source' (signal) scan and a 'reference' scan.
80    The reference can have just one scan, even if the signal has many. Otherwise
81    they must have the same number of scans.
82    The cursor of the output scan is set to 0
83    Parameters:
84        source:        the 'on' scan
85        reference:     the 'off' scan
86        preserve:      you can preserve (default) the continuum or
87                       remove it.  The equations used are
88                       preserve:  Output = Toff * (on/off) - Toff
89                       remove:    Output = Toff * (on/off) - Ton
90    """
91    varlist = vars()
92    from asap._asap import stmath
93    stm = stmath()
94    stm._setinsitu(False)
95    s = scantable(stm._quotient(source, reference, preserve))
96    s._add_history("quotient",varlist)
97    print_log()
98    return s
99
100def simple_math(left, right, op='add', tsys=True):
101    """
102    Apply simple mathematical binary operations to two
103    scan tables,  returning the result in a new scan table.
104    The operation is applied to both the correlations and the TSys data
105    The cursor of the output scan is set to 0
106    Parameters:
107        left:          the 'left' scan
108        right:         the 'right' scan
109        op:            the operation: 'add' (default), 'sub', 'mul', 'div'
110        tsys:          if True (default) then apply the operation to Tsys
111                       as well as the data
112    """
113    varlist = vars()
114    print "Not yet available in asap"
115    return
116    if not isinstance(left,scantable) and not isinstance(right,scantable):
117        msg = "Please provide two scantables as input"
118        if rcParams['verbose']:
119            print msg
120            return
121        else:
122            raise TypeError(msg)
123    s = scantable(stm._bop(left, right, op, tsys))
124    s._add_history("simple_math", varlist)
125    print_log()
126    return s
127
128def merge(*args):
129    """
130    """
131    varlist = vars()
132    if isinstance(args[0],list):
133        lst = tuple(args[0])
134    elif isinstance(args[0],tuple):
135        lst = args[0]
136    else:
137        lst = tuple(args)
138    varlist["args"] = "%d scantables" % len(lst)
139    # need special formatting her for history...
140    from asap._asap import stmath
141    stm = stmath()
142    for s in lst:
143        if not isinstance(s,scantable):
144            msg = "Please give a list of scantables"
145            if rcParams['verbose']:
146                print msg
147                return
148            else:
149                raise TypeError(msg)
150    s = scantable(stm._merge(lst))
151    s._add_history("merge", varlist)
152    print_log()
153    return s
154
Note: See TracBrowser for help on using the repository browser.