| 1 | from scantable import scantable
 | 
|---|
| 2 | from asap import rcParams
 | 
|---|
| 3 | 
 | 
|---|
| 4 | def average_time(*args, **kwargs):
 | 
|---|
| 5 |     """
 | 
|---|
| 6 |     Return the (time) average of a scan or list of scans. [in channels only]
 | 
|---|
| 7 |     The cursor of the output scan is set to 0
 | 
|---|
| 8 |     Parameters:
 | 
|---|
| 9 |         one scan or comma separated  scans
 | 
|---|
| 10 |         mask:     an optional mask (only used for 'var' and 'tsys' weighting)
 | 
|---|
| 11 |         scanav:   True (default) averages each scan separately
 | 
|---|
| 12 |                   False averages all scans together,
 | 
|---|
| 13 |         weight:   Weighting scheme. 'none' (default), 'var' (variance
 | 
|---|
| 14 |                   weighted), 'tsys'
 | 
|---|
| 15 |     Example:
 | 
|---|
| 16 |         # return a time averaged scan from scana and scanb
 | 
|---|
| 17 |         # without using a mask
 | 
|---|
| 18 |         scanav = average_time(scana,scanb)
 | 
|---|
| 19 |         # return the (time) averaged scan, i.e. the average of
 | 
|---|
| 20 |         # all correlator cycles
 | 
|---|
| 21 |         scanav = average_time(scan)
 | 
|---|
| 22 | 
 | 
|---|
| 23 |     """
 | 
|---|
| 24 |     scanAv = True
 | 
|---|
| 25 |     if kwargs.has_key('scanav'):
 | 
|---|
| 26 |        scanAv = kwargs.get('scanav')
 | 
|---|
| 27 |     weight = 'none'
 | 
|---|
| 28 |     if kwargs.has_key('weight'):
 | 
|---|
| 29 |        weight = kwargs.get('weight')
 | 
|---|
| 30 |     mask = ()
 | 
|---|
| 31 |     if kwargs.has_key('mask'):
 | 
|---|
| 32 |         mask = kwargs.get('mask')
 | 
|---|
| 33 |     lst = tuple(args)
 | 
|---|
| 34 |     from asap._asap import average as _av
 | 
|---|
| 35 |     for s in lst:
 | 
|---|
| 36 |         if not isinstance(s,scantable):
 | 
|---|
| 37 |             print "Please give a list of scantables"
 | 
|---|
| 38 |             return
 | 
|---|
| 39 |     return scantable(_av(lst, mask, scanAv, weight))
 | 
|---|
| 40 | 
 | 
|---|
| 41 | def quotient(source, reference, preserve=True):
 | 
|---|
| 42 |     """
 | 
|---|
| 43 |     Return the quotient of a 'source' (signal) scan and a 'reference' scan.
 | 
|---|
| 44 |     The reference can have just one row, even if the signal has many. Otherwise
 | 
|---|
| 45 |     they must have the same number of rows.
 | 
|---|
| 46 |     The cursor of the output scan is set to 0
 | 
|---|
| 47 |     Parameters:
 | 
|---|
| 48 |         source:        the 'on' scan
 | 
|---|
| 49 |         reference:     the 'off' scan
 | 
|---|
| 50 |         preserve:      you can preserve (default) the continuum or 
 | 
|---|
| 51 |                        remove it.  The equations used are 
 | 
|---|
| 52 |                           preserve - Output = Tref * (sig/ref) - Tref
 | 
|---|
| 53 |                           remove   - Output = Tref * (sig/ref) - Tsig
 | 
|---|
| 54 |     """
 | 
|---|
| 55 |     from asap._asap import quotient as _quot
 | 
|---|
| 56 |     return scantable(_quot(source, reference, preserve))
 | 
|---|
| 57 | 
 | 
|---|
| 58 | def simple_math(left, right, op='add', tsys=True):
 | 
|---|
| 59 |     """
 | 
|---|
| 60 |     Apply simple mathematical binary operations to two 
 | 
|---|
| 61 |     scan tables,  returning the result in a new scan table.
 | 
|---|
| 62 |     The operation is applied to both the correlations and the TSys data
 | 
|---|
| 63 |     The cursor of the output scan is set to 0
 | 
|---|
| 64 |     Parameters:
 | 
|---|
| 65 |         left:          the 'left' scan
 | 
|---|
| 66 |         right:         the 'right' scan
 | 
|---|
| 67 |         op:            the operation: 'add' (default), 'sub', 'mul', 'div'
 | 
|---|
| 68 |         tsys:          if True (default) then apply the operation to Tsys
 | 
|---|
| 69 |                        as well as the data
 | 
|---|
| 70 |     """
 | 
|---|
| 71 |     if not isinstance(left,scantable) and not isinstance(right,scantable):
 | 
|---|
| 72 |         print "Please provide two scantables as input"
 | 
|---|
| 73 |         return
 | 
|---|
| 74 |     from asap._asap import b_operate as _bop
 | 
|---|
| 75 |     return scantable(_bop(left, right, op, tsys))
 | 
|---|
| 76 | 
 | 
|---|
| 77 | def scale(scan, factor, insitu=None, allaxes=None, tsys=True):
 | 
|---|
| 78 |     """
 | 
|---|
| 79 |     Return a scan where all spectra are scaled by the give 'factor'
 | 
|---|
| 80 |     Parameters:
 | 
|---|
| 81 |         scan:        a scantable
 | 
|---|
| 82 |         factor:      the scaling factor
 | 
|---|
| 83 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 84 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 85 |                      The default is taken from .asaprc (False)
 | 
|---|
| 86 |         allaxes:     if True apply to all spectra. Otherwise
 | 
|---|
| 87 |                      apply only to the selected (beam/pol/if)spectra only.
 | 
|---|
| 88 |                      The default is taken from .asaprc (True if none)
 | 
|---|
| 89 |         tsys:        if True (default) then apply the operation to Tsys
 | 
|---|
| 90 |                      as well as the data
 | 
|---|
| 91 |     """
 | 
|---|
| 92 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 93 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 94 |     if not insitu:
 | 
|---|
| 95 |         from asap._asap import scale as _scale
 | 
|---|
| 96 |         return scantable(_scale(scan, factor, allaxes, tsys))
 | 
|---|
| 97 |     else:
 | 
|---|
| 98 |         from asap._asap import scale_insitu as _scale
 | 
|---|
| 99 |         _scale(scan, factor, allaxes, tsys)
 | 
|---|
| 100 |         return
 | 
|---|
| 101 |         
 | 
|---|
| 102 | 
 | 
|---|
| 103 | def add(scan, offset, insitu=None, allaxes=None):
 | 
|---|
| 104 |     """
 | 
|---|
| 105 |     Return a scan where all spectra have the offset added
 | 
|---|
| 106 |     Parameters:
 | 
|---|
| 107 |         scan:        a scantable
 | 
|---|
| 108 |         offset:      the offset
 | 
|---|
| 109 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 110 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 111 |                      The default is taken from .asaprc (False)
 | 
|---|
| 112 |         allaxes:     if True apply to all spectra. Otherwise
 | 
|---|
| 113 |                      apply only to the selected (beam/pol/if)spectra only
 | 
|---|
| 114 |                      The default is taken from .asaprc (True if none)
 | 
|---|
| 115 |     """
 | 
|---|
| 116 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 117 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 118 |     if not insitu:
 | 
|---|
| 119 |         from asap._asap import add as _add
 | 
|---|
| 120 |         return scantable(_add(scan, offset, allaxes))
 | 
|---|
| 121 |     else:
 | 
|---|
| 122 |         from asap._asap import add_insitu as _add
 | 
|---|
| 123 |         _add(scan, offset, allaxes)
 | 
|---|
| 124 |         return
 | 
|---|
| 125 |         
 | 
|---|
| 126 | def convert_flux(scan, jyperk=None, eta=None, d=None, insitu=None, allaxes=None):
 | 
|---|
| 127 |     """
 | 
|---|
| 128 |     Return a scan where all spectra are converted to either Jansky or Kelvin
 | 
|---|
| 129 |         depending upon the flux units of the scan table.  By default the
 | 
|---|
| 130 |         function tries to look the values up internally. If it can't find
 | 
|---|
| 131 |         them (or if you want to over-ride), you must specify EITHER jyperk
 | 
|---|
| 132 |         OR eta (and D which it will try to look up also if you don't
 | 
|---|
| 133 |         set it).  jyperk takes precedence if you set both.
 | 
|---|
| 134 |     Parameters:
 | 
|---|
| 135 |         scan:        a scantable
 | 
|---|
| 136 |         jyperk:      the Jy / K conversion factor
 | 
|---|
| 137 |         eta:         the aperture efficiency  
 | 
|---|
| 138 |         d:           the geomtric diameter (metres)
 | 
|---|
| 139 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 140 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 141 |                      The default is taken from .asaprc (False)
 | 
|---|
| 142 |         allaxes:         if True apply to all spectra. Otherwise
 | 
|---|
| 143 |                      apply only to the selected (beam/pol/if)spectra only
 | 
|---|
| 144 |                      The default is taken from .asaprc (True if none)
 | 
|---|
| 145 |     """
 | 
|---|
| 146 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 147 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 148 |     if jyperk is None: jyperk = -1.0
 | 
|---|
| 149 |     if d is None: d = -1.0
 | 
|---|
| 150 |     if eta is None: eta = -1.0
 | 
|---|
| 151 |     if not insitu:
 | 
|---|
| 152 |         from asap._asap import convertflux as _convert
 | 
|---|
| 153 |         return scantable(_convert(scan, d, eta, jyperk, allaxes))
 | 
|---|
| 154 |     else:
 | 
|---|
| 155 |         from asap._asap import convertflux_insitu as _convert
 | 
|---|
| 156 |         _convert(scan, d, eta, jyperk, allaxes)
 | 
|---|
| 157 |         return
 | 
|---|
| 158 | 
 | 
|---|
| 159 | def gain_el(scan, poly=None, filename="", method="linear",
 | 
|---|
| 160 |             insitu=None, allaxes=None):
 | 
|---|
| 161 |     """
 | 
|---|
| 162 |     Return a scan after applying a gain-elevation correction. The correction
 | 
|---|
| 163 |     can be made via either a polynomial or a table-based interpolation 
 | 
|---|
| 164 |     (and extrapolation if necessary).
 | 
|---|
| 165 |     You specify polynomial coefficients, an ascii table or neither.
 | 
|---|
| 166 |     If you specify neither, then a polynomial correction will be made
 | 
|---|
| 167 |     with built in coefficients known for certain telescopes (an error will
 | 
|---|
| 168 |     occur if the instrument is not known).   The data and Tsys are *divided* 
 | 
|---|
| 169 |     by the scaling factors.
 | 
|---|
| 170 |     Parameters:
 | 
|---|
| 171 |         scan:        a scantable
 | 
|---|
| 172 |         poly:        Polynomial coefficients (default None) to compute a
 | 
|---|
| 173 |                      gain-elevation correction as a function of
 | 
|---|
| 174 |                      elevation (in degrees).
 | 
|---|
| 175 |         filename:    The name of an ascii file holding correction factors.
 | 
|---|
| 176 |                      The first row of the ascii file must give the column 
 | 
|---|
| 177 |                      names and these MUST include columns
 | 
|---|
| 178 |                      "ELEVATION" (degrees) and "FACTOR" (multiply data by this)
 | 
|---|
| 179 |                      somewhere.
 | 
|---|
| 180 |                      The second row must give the data type of the column. Use
 | 
|---|
| 181 |                      'R' for Real and 'I' for Integer.  An example file
 | 
|---|
| 182 |                      would be (actual factors are arbitrary) :
 | 
|---|
| 183 | 
 | 
|---|
| 184 |                      TIME ELEVATION FACTOR
 | 
|---|
| 185 |                      R R R
 | 
|---|
| 186 |                      0.1 0 0.8
 | 
|---|
| 187 |                      0.2 20 0.85
 | 
|---|
| 188 |                      0.3 40 0.9
 | 
|---|
| 189 |                      0.4 60 0.85
 | 
|---|
| 190 |                      0.5 80 0.8
 | 
|---|
| 191 |                      0.6 90 0.75
 | 
|---|
| 192 |         method:      Interpolation method when correcting from a table. Values 
 | 
|---|
| 193 |                      are  "nearest", "linear" (default), "cubic" and "spline"
 | 
|---|
| 194 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 195 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 196 |                      The default is taken from .asaprc (False)
 | 
|---|
| 197 |         allaxes:         if True apply to all spectra. Otherwise
 | 
|---|
| 198 |                      apply only to the selected (beam/pol/if) spectra only
 | 
|---|
| 199 |                      The default is taken from .asaprc (True if none)
 | 
|---|
| 200 |     """
 | 
|---|
| 201 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 202 |     if poly is None:
 | 
|---|
| 203 |        poly = ()
 | 
|---|
| 204 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 205 |     from os.path import expandvars
 | 
|---|
| 206 |     filename = expandvars(filename)
 | 
|---|
| 207 |     if not insitu:
 | 
|---|
| 208 |         from asap._asap import gainel as _gainEl
 | 
|---|
| 209 |         return scantable(_gainEl(scan, poly, filename, method, allaxes))
 | 
|---|
| 210 |     else:
 | 
|---|
| 211 |         from asap._asap import gainel_insitu as _gainEl
 | 
|---|
| 212 |         _gainEl(scan, poly, filename, method, allaxes)
 | 
|---|
| 213 |         return
 | 
|---|
| 214 |         
 | 
|---|
| 215 | def freq_align(scan, reftime=None, method='cubic', perif=False, insitu=None):
 | 
|---|
| 216 |     """
 | 
|---|
| 217 |         Return a scan where all rows have been aligned in frequency. The
 | 
|---|
| 218 |         alignment frequency frame (e.g. LSRK) is that set by function
 | 
|---|
| 219 |         set_freqframe.  
 | 
|---|
| 220 |         scan:        a scantable
 | 
|---|
| 221 |         reftime:     reference time to align at. By default, the time of
 | 
|---|
| 222 |                      the first row of data is used.  
 | 
|---|
| 223 |         method:      Interpolation method for regridding the spectra. Choose
 | 
|---|
| 224 |                      from "nearest", "linear", "cubic" (default) and "spline"
 | 
|---|
| 225 |         perif:       Generate aligners per freqID (no doppler tracking) or
 | 
|---|
| 226 |                      per IF (scan-based doppler tracking)
 | 
|---|
| 227 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 228 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 229 |                      The default is taken from .asaprc (False)
 | 
|---|
| 230 |     """
 | 
|---|
| 231 |     if reftime is None: reftime = ''
 | 
|---|
| 232 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 233 |     perfreqid = not perif
 | 
|---|
| 234 |     if not insitu:
 | 
|---|
| 235 |         from asap._asap import freq_align as _align
 | 
|---|
| 236 |         return scantable(_align(scan, reftime, method, perfreqid))
 | 
|---|
| 237 |     else:
 | 
|---|
| 238 |         from asap._asap import freq_align_insitu as _align
 | 
|---|
| 239 |         _align(scan, reftime, method, perfreqid)
 | 
|---|
| 240 |         return
 | 
|---|
| 241 |         
 | 
|---|
| 242 | def opacity(scan, tau, insitu=None, allaxes=None):
 | 
|---|
| 243 |     """
 | 
|---|
| 244 |     Return a scan after applying an opacity correction. The data
 | 
|---|
| 245 |     and Tsys are multiplied by the correction factor.
 | 
|---|
| 246 |     Parameters:
 | 
|---|
| 247 |         scan:        a scantable
 | 
|---|
| 248 |         tau:         Opacity from which the correction factor is exp(tau*ZD)
 | 
|---|
| 249 |                      where ZD is the zenith-distance
 | 
|---|
| 250 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 251 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 252 |                      The default is taken from .asaprc (False)
 | 
|---|
| 253 |         allaxes:     if True apply to all spectra. Otherwise
 | 
|---|
| 254 |                      apply only to the selected (beam/pol/if)spectra only
 | 
|---|
| 255 |                      The default is taken from .asaprc (True if none)
 | 
|---|
| 256 |     """
 | 
|---|
| 257 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 258 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 259 |     if not insitu:
 | 
|---|
| 260 |         from asap._asap import opacity as _opacity
 | 
|---|
| 261 |         return scantable(_opacity(scan, tau, allaxes))
 | 
|---|
| 262 |     else:
 | 
|---|
| 263 |         from asap._asap import opacity_insitu as _opacity
 | 
|---|
| 264 |         _opacity(scan, tau, allaxes)
 | 
|---|
| 265 |         return
 | 
|---|
| 266 |         
 | 
|---|
| 267 | def bin(scan, width=5, insitu=None):
 | 
|---|
| 268 |     """
 | 
|---|
| 269 |     Return a scan where all spectra have been binned up
 | 
|---|
| 270 |         width:       The bin width (default=5) in pixels
 | 
|---|
| 271 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 272 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 273 |                      The default is taken from .asaprc (False)
 | 
|---|
| 274 |     """
 | 
|---|
| 275 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 276 |     if not insitu:
 | 
|---|
| 277 |         from asap._asap import bin as _bin
 | 
|---|
| 278 |         return scantable(_bin(scan, width))
 | 
|---|
| 279 |     else:
 | 
|---|
| 280 |         from asap._asap import bin_insitu as _bin
 | 
|---|
| 281 |         _bin(scan, width)
 | 
|---|
| 282 |         return
 | 
|---|
| 283 | 
 | 
|---|
| 284 | def resample(scan, width=5, method='cubic', insitu=None):
 | 
|---|
| 285 |     """
 | 
|---|
| 286 |     Return a scan where all spectra have been binned up
 | 
|---|
| 287 |         width:       The bin width (default=5) in pixels
 | 
|---|
| 288 |         method:      Interpolation method when correcting from a table. Values 
 | 
|---|
| 289 |                      are  "nearest", "linear", "cubic" (default) and "spline"
 | 
|---|
| 290 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 291 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 292 |                      The default is taken from .asaprc (False)
 | 
|---|
| 293 |     """
 | 
|---|
| 294 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 295 |     if not insitu:
 | 
|---|
| 296 |         from asap._asap import resample as _resample
 | 
|---|
| 297 |         return scantable(_resample(scan, method, width))
 | 
|---|
| 298 |     else:
 | 
|---|
| 299 |         from asap._asap import resample_insitu as _resample
 | 
|---|
| 300 |         _resample(scan, method, width)
 | 
|---|
| 301 |         return
 | 
|---|
| 302 | 
 | 
|---|
| 303 | def average_pol(scan, mask=None, weight='none', insitu=None):
 | 
|---|
| 304 |     """
 | 
|---|
| 305 |     Average the Polarisations together.
 | 
|---|
| 306 |     The polarisation cursor of the output scan is set to 0
 | 
|---|
| 307 |     Parameters:
 | 
|---|
| 308 |         scan:        The scantable
 | 
|---|
| 309 |         mask:        An optional mask defining the region, where the
 | 
|---|
| 310 |                      averaging will be applied. The output will have all 
 | 
|---|
| 311 |                      specified points masked. 
 | 
|---|
| 312 |         weight:      Weighting scheme. 'none' (default), or 'var' (variance
 | 
|---|
| 313 |                      weighted)
 | 
|---|
| 314 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 315 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 316 |                      The default is taken from .asaprc (False)
 | 
|---|
| 317 |     Example:
 | 
|---|
| 318 |         polav = average_pols(myscan)
 | 
|---|
| 319 |     """
 | 
|---|
| 320 |     if mask is None:
 | 
|---|
| 321 |         mask = ()
 | 
|---|
| 322 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 323 |     if not insitu:
 | 
|---|
| 324 |         from asap._asap import averagepol as _avpol
 | 
|---|
| 325 |         return scantable(_avpol(scan, mask, weight))
 | 
|---|
| 326 |     else:
 | 
|---|
| 327 |         from asap._asap import averagepol_insitu as _avpol
 | 
|---|
| 328 |         _avpol(scan, mask, weight)
 | 
|---|
| 329 |         return
 | 
|---|
| 330 |     
 | 
|---|
| 331 | def smooth(scan, kernel="hanning", width=5.0, insitu=None, allaxes=None):
 | 
|---|
| 332 |     """
 | 
|---|
| 333 |     Smooth the spectrum by the specified kernel (conserving flux).
 | 
|---|
| 334 |     Parameters:
 | 
|---|
| 335 |         scan:       The input scan
 | 
|---|
| 336 |         kernel:     The type of smoothing kernel. Select from
 | 
|---|
| 337 |                     'hanning' (default), 'gaussian' and 'boxcar'.
 | 
|---|
| 338 |                     The first three characters are sufficient.
 | 
|---|
| 339 |         width:      The width of the kernel in pixels. For hanning this is
 | 
|---|
| 340 |                     ignored otherwise it defauls to 5 pixels.
 | 
|---|
| 341 |                     For 'gaussian' it is the Full Width Half
 | 
|---|
| 342 |                     Maximum. For 'boxcar' it is the full width.
 | 
|---|
| 343 |         insitu:     if False a new scantable is returned.
 | 
|---|
| 344 |                     Otherwise, the scaling is done in-situ
 | 
|---|
| 345 |                     The default is taken from .asaprc (False)
 | 
|---|
| 346 |         allaxes:    If True (default) apply to all spectra. Otherwise
 | 
|---|
| 347 |                     apply only to the selected (beam/pol/if)spectra only
 | 
|---|
| 348 |                     The default is taken from .asaprc (True if none)
 | 
|---|
| 349 |     Example:
 | 
|---|
| 350 |          none
 | 
|---|
| 351 |     """
 | 
|---|
| 352 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 353 |     if insitu is None: insitu = rcParams['insitu']
 | 
|---|
| 354 |     if not insitu:
 | 
|---|
| 355 |         from asap._asap import smooth as _smooth
 | 
|---|
| 356 |         return scantable(_smooth(scan,kernel,width,allaxes))
 | 
|---|
| 357 |     else:
 | 
|---|
| 358 |         from asap._asap import smooth_insitu as _smooth
 | 
|---|
| 359 |         _smooth(scan,kernel,width,allaxes)
 | 
|---|
| 360 |         return
 | 
|---|
| 361 |     
 | 
|---|
| 362 | def poly_baseline(scan, mask=None, order=0, insitu=None):
 | 
|---|
| 363 |     """
 | 
|---|
| 364 |     Return a scan which has been baselined (all rows) by a polynomial. 
 | 
|---|
| 365 |     Parameters:
 | 
|---|
| 366 |         scan:    a scantable
 | 
|---|
| 367 |         mask:    an optional mask
 | 
|---|
| 368 |         order:   the order of the polynomial (default is 0)
 | 
|---|
| 369 |         insitu:      if False a new scantable is returned.
 | 
|---|
| 370 |                      Otherwise, the scaling is done in-situ
 | 
|---|
| 371 |                      The default is taken from .asaprc (False)
 | 
|---|
| 372 |     Example:
 | 
|---|
| 373 |         # return a scan baselined by a third order polynomial,
 | 
|---|
| 374 |         # not using a mask
 | 
|---|
| 375 |         bscan = poly_baseline(scan, order=3)
 | 
|---|
| 376 |     """
 | 
|---|
| 377 |     from asap.asapfitter import fitter
 | 
|---|
| 378 |     if mask is None:
 | 
|---|
| 379 |         from numarray import ones
 | 
|---|
| 380 |         mask = tuple(ones(scan.nchan()))
 | 
|---|
| 381 |     f = fitter()
 | 
|---|
| 382 |     f._verbose(True)
 | 
|---|
| 383 |     f.set_scan(scan, mask)
 | 
|---|
| 384 |     f.set_function(poly=order)    
 | 
|---|
| 385 |     sf = f.auto_fit(insitu)
 | 
|---|
| 386 |     return sf
 | 
|---|
| 387 | 
 | 
|---|
| 388 | def rotate_xyphase (scan, angle, allaxes=None):
 | 
|---|
| 389 |     """
 | 
|---|
| 390 |     Rotate the phase of the XY correlation.  This is always done in situ
 | 
|---|
| 391 |     in the data.  So if you call this function more than once
 | 
|---|
| 392 |     then each call rotates the phase further.
 | 
|---|
| 393 |     Parameters:
 | 
|---|
| 394 |         angle:   The angle (degrees) to rotate (add) by.
 | 
|---|
| 395 |         allaxes: If True apply to all spectra. Otherwise
 | 
|---|
| 396 |                  apply only to the selected (beam/pol/if)spectra only.
 | 
|---|
| 397 |                  The default is taken from .asaprc (True if none)
 | 
|---|
| 398 |     Examples:
 | 
|---|
| 399 |         rotate_xyphase(scan, 2.3)
 | 
|---|
| 400 |     """
 | 
|---|
| 401 |     if allaxes is None: allaxes = rcParams['scantable.allaxes']
 | 
|---|
| 402 |     from asap._asap import rotate_xyphase as _rotate_xyphase
 | 
|---|
| 403 |     _rotate_xyphase(scan, angle, allaxes)
 | 
|---|
| 404 |     return
 | 
|---|
| 405 | 
 | 
|---|