| [100] | 1 | """
 | 
|---|
 | 2 | This is the ATNF Single Dish Analysis package.
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | """
 | 
|---|
| [1080] | 5 | import os,sys,shutil, platform
 | 
|---|
| [226] | 6 | 
 | 
|---|
| [1456] | 7 | # Set up CASAPATH and first time use of asap i.e. ~/.asap/*
 | 
|---|
| [1080] | 8 | plf = None
 | 
|---|
 | 9 | if sys.platform == "linux2":
 | 
|---|
 | 10 |     if platform.architecture()[0] == '64bit':
 | 
|---|
 | 11 |         plf = 'linux_64b'
 | 
|---|
 | 12 |     else:
 | 
|---|
 | 13 |         plf = 'linux_gnu'
 | 
|---|
 | 14 | elif sys.platform == 'darwin':
 | 
|---|
 | 15 |     plf = 'darwin'
 | 
|---|
 | 16 | else:
 | 
|---|
 | 17 |     # Shouldn't happen - default to linux
 | 
|---|
 | 18 |     plf = 'linux'
 | 
|---|
 | 19 | asapdata = __path__[-1]
 | 
|---|
| [1171] | 20 | # Allow user defined data location
 | 
|---|
 | 21 | if os.environ.has_key("ASAPDATA"):
 | 
|---|
 | 22 |     if os.path.exists(os.environ["ASAPDATA"]):
 | 
|---|
 | 23 |         asapdata = os.environ["ASAPDATA"]
 | 
|---|
| [1456] | 24 | # use CASAPATH if defined and "data" dir present
 | 
|---|
 | 25 | if not os.environ.has_key("CASAPATH") or \
 | 
|---|
 | 26 |         not os.path.exists(os.environ["CASAPATH"].split()[0]+"/data"):
 | 
|---|
 | 27 |     os.environ["CASAPATH"] = "%s %s somwhere" % ( asapdata, plf)
 | 
|---|
| [1171] | 28 | # set up user space
 | 
|---|
| [1080] | 29 | userdir = os.environ["HOME"]+"/.asap"
 | 
|---|
 | 30 | if not os.path.exists(userdir):
 | 
|---|
 | 31 |     print 'First time ASAP use. Setting up ~/.asap'
 | 
|---|
 | 32 |     os.mkdir(userdir)
 | 
|---|
| [1445] | 33 |     #shutil.copyfile(asapdata+"/data/ipythonrc-asap", userdir+"/ipythonrc-asap")
 | 
|---|
| [1080] | 34 |     f = file(userdir+"/asapuserfuncs.py", "w")
 | 
|---|
 | 35 |     f.close()
 | 
|---|
 | 36 |     f = file(userdir+"/ipythonrc", "w")
 | 
|---|
 | 37 |     f.close()
 | 
|---|
| [1171] | 38 | # remove from namespace
 | 
|---|
| [1080] | 39 | del asapdata, userdir, shutil, platform
 | 
|---|
 | 40 | 
 | 
|---|
| [513] | 41 | def _validate_bool(b):
 | 
|---|
| [226] | 42 |     'Convert b to a boolean or raise'
 | 
|---|
 | 43 |     bl = b.lower()
 | 
|---|
 | 44 |     if bl in ('f', 'no', 'false', '0', 0): return False
 | 
|---|
 | 45 |     elif bl in ('t', 'yes', 'true', '1', 1): return True
 | 
|---|
 | 46 |     else:
 | 
|---|
 | 47 |         raise ValueError('Could not convert "%s" to boolean' % b)
 | 
|---|
 | 48 | 
 | 
|---|
| [513] | 49 | def _validate_int(s):
 | 
|---|
| [226] | 50 |     'convert s to int or raise'
 | 
|---|
 | 51 |     try: return int(s)
 | 
|---|
 | 52 |     except ValueError:
 | 
|---|
 | 53 |         raise ValueError('Could not convert "%s" to int' % s)
 | 
|---|
 | 54 | 
 | 
|---|
| [513] | 55 | def _asap_fname():
 | 
|---|
| [226] | 56 |     """
 | 
|---|
 | 57 |     Return the path to the rc file
 | 
|---|
 | 58 | 
 | 
|---|
 | 59 |     Search order:
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 |      * current working dir
 | 
|---|
 | 62 |      * environ var ASAPRC
 | 
|---|
| [274] | 63 |      * HOME/.asaprc
 | 
|---|
| [706] | 64 | 
 | 
|---|
| [226] | 65 |     """
 | 
|---|
 | 66 | 
 | 
|---|
 | 67 |     fname = os.path.join( os.getcwd(), '.asaprc')
 | 
|---|
 | 68 |     if os.path.exists(fname): return fname
 | 
|---|
 | 69 | 
 | 
|---|
 | 70 |     if os.environ.has_key('ASAPRC'):
 | 
|---|
 | 71 |         path =  os.environ['ASAPRC']
 | 
|---|
 | 72 |         if os.path.exists(path):
 | 
|---|
 | 73 |             fname = os.path.join(path, '.asaprc')
 | 
|---|
 | 74 |             if os.path.exists(fname):
 | 
|---|
 | 75 |                 return fname
 | 
|---|
 | 76 | 
 | 
|---|
 | 77 |     if os.environ.has_key('HOME'):
 | 
|---|
 | 78 |         home =  os.environ['HOME']
 | 
|---|
 | 79 |         fname = os.path.join(home, '.asaprc')
 | 
|---|
 | 80 |         if os.path.exists(fname):
 | 
|---|
 | 81 |             return fname
 | 
|---|
 | 82 |     return None
 | 
|---|
 | 83 | 
 | 
|---|
| [706] | 84 | 
 | 
|---|
| [226] | 85 | defaultParams = {
 | 
|---|
 | 86 |     # general
 | 
|---|
| [513] | 87 |     'verbose'             : [True, _validate_bool],
 | 
|---|
 | 88 |     'useplotter'          : [True, _validate_bool],
 | 
|---|
| [542] | 89 |     'insitu'              : [True, _validate_bool],
 | 
|---|
| [706] | 90 | 
 | 
|---|
| [226] | 91 |     # plotting
 | 
|---|
| [706] | 92 |     'plotter.gui'         : [True, _validate_bool],
 | 
|---|
| [226] | 93 |     'plotter.stacking'    : ['p', str],
 | 
|---|
 | 94 |     'plotter.panelling'   : ['s', str],
 | 
|---|
| [700] | 95 |     'plotter.colours'     : ['', str],
 | 
|---|
 | 96 |     'plotter.linestyles'  : ['', str],
 | 
|---|
| [710] | 97 |     'plotter.decimate'    : [False, _validate_bool],
 | 
|---|
 | 98 |     'plotter.ganged'      : [True, _validate_bool],
 | 
|---|
| [1022] | 99 |     'plotter.histogram'  : [False, _validate_bool],
 | 
|---|
| [1097] | 100 |     'plotter.papertype'  : ['A4', str],
 | 
|---|
| [710] | 101 | 
 | 
|---|
| [226] | 102 |     # scantable
 | 
|---|
 | 103 |     'scantable.save'      : ['ASAP', str],
 | 
|---|
| [513] | 104 |     'scantable.autoaverage'      : [True, _validate_bool],
 | 
|---|
| [226] | 105 |     'scantable.freqframe' : ['LSRK', str],  #default frequency frame
 | 
|---|
| [1076] | 106 |     'scantable.verbosesummary'   : [False, _validate_bool],
 | 
|---|
 | 107 |     'scantable.storage'   : ['memory', str]
 | 
|---|
| [226] | 108 |     # fitter
 | 
|---|
 | 109 |     }
 | 
|---|
 | 110 | 
 | 
|---|
| [255] | 111 | def list_rcparameters():
 | 
|---|
| [706] | 112 | 
 | 
|---|
| [255] | 113 |     print """
 | 
|---|
| [737] | 114 | # general
 | 
|---|
 | 115 | # print verbose output
 | 
|---|
 | 116 | verbose                    : True
 | 
|---|
| [255] | 117 | 
 | 
|---|
| [737] | 118 | # preload a default plotter
 | 
|---|
 | 119 | useplotter                 : True
 | 
|---|
| [255] | 120 | 
 | 
|---|
| [737] | 121 | # apply operations on the input scantable or return new one
 | 
|---|
 | 122 | insitu                     : True
 | 
|---|
| [706] | 123 | 
 | 
|---|
| [737] | 124 | # plotting
 | 
|---|
| [710] | 125 | 
 | 
|---|
| [737] | 126 | # do we want a GUI or plot to a file
 | 
|---|
 | 127 | plotter.gui                : True
 | 
|---|
| [710] | 128 | 
 | 
|---|
| [737] | 129 | # default mode for colour stacking
 | 
|---|
 | 130 | plotter.stacking           : Pol
 | 
|---|
| [255] | 131 | 
 | 
|---|
| [737] | 132 | # default mode for panelling
 | 
|---|
 | 133 | plotter.panelling          : scan
 | 
|---|
| [255] | 134 | 
 | 
|---|
| [737] | 135 | # push panels together, to share axislabels
 | 
|---|
 | 136 | plotter.ganged             : True
 | 
|---|
| [710] | 137 | 
 | 
|---|
| [737] | 138 | # decimate the number of points plotted bya afactor of
 | 
|---|
 | 139 | # nchan/1024
 | 
|---|
 | 140 | plotter.decimate           : False
 | 
|---|
| [733] | 141 | 
 | 
|---|
| [737] | 142 | # default colours/linestyles
 | 
|---|
 | 143 | plotter.colours            :
 | 
|---|
 | 144 | plotter.linestyles         :
 | 
|---|
| [700] | 145 | 
 | 
|---|
| [1022] | 146 | # enable/disable histogram plotting
 | 
|---|
 | 147 | plotter.histogram          : False
 | 
|---|
 | 148 | 
 | 
|---|
| [1097] | 149 | # ps paper type
 | 
|---|
 | 150 | plotter.papertype          : A4
 | 
|---|
 | 151 | 
 | 
|---|
| [737] | 152 | # scantable
 | 
|---|
| [1076] | 153 | 
 | 
|---|
| [1259] | 154 | # default storage of scantable ('memory'/'disk')
 | 
|---|
| [1076] | 155 | scantable.storage          : memory
 | 
|---|
| [737] | 156 | # default ouput format when saving
 | 
|---|
 | 157 | scantable.save             : ASAP
 | 
|---|
 | 158 | # auto averaging on read
 | 
|---|
 | 159 | scantable.autoaverage      : True
 | 
|---|
| [255] | 160 | 
 | 
|---|
| [737] | 161 | # default frequency frame to set when function
 | 
|---|
| [1097] | 162 | # scantable.set_freqframe is called
 | 
|---|
| [737] | 163 | scantable.freqframe        : LSRK
 | 
|---|
| [255] | 164 | 
 | 
|---|
| [737] | 165 | # Control the level of information printed by summary
 | 
|---|
 | 166 | scantable.verbosesummary   : False
 | 
|---|
| [706] | 167 | 
 | 
|---|
| [737] | 168 | # Fitter
 | 
|---|
 | 169 | """
 | 
|---|
| [706] | 170 | 
 | 
|---|
| [226] | 171 | def rc_params():
 | 
|---|
 | 172 |     'Return the default params updated from the values in the rc file'
 | 
|---|
| [706] | 173 | 
 | 
|---|
| [513] | 174 |     fname = _asap_fname()
 | 
|---|
| [706] | 175 | 
 | 
|---|
| [226] | 176 |     if fname is None or not os.path.exists(fname):
 | 
|---|
 | 177 |         message = 'could not find rc file; returning defaults'
 | 
|---|
 | 178 |         ret =  dict([ (key, tup[0]) for key, tup in defaultParams.items()])
 | 
|---|
 | 179 |         #print message
 | 
|---|
 | 180 |         return ret
 | 
|---|
| [706] | 181 | 
 | 
|---|
| [226] | 182 |     cnt = 0
 | 
|---|
 | 183 |     for line in file(fname):
 | 
|---|
 | 184 |         cnt +=1
 | 
|---|
 | 185 |         line = line.strip()
 | 
|---|
 | 186 |         if not len(line): continue
 | 
|---|
 | 187 |         if line.startswith('#'): continue
 | 
|---|
 | 188 |         tup = line.split(':',1)
 | 
|---|
 | 189 |         if len(tup) !=2:
 | 
|---|
 | 190 |             print ('Illegal line #%d\n\t%s\n\tin file "%s"' % (cnt, line, fname))
 | 
|---|
 | 191 |             continue
 | 
|---|
| [706] | 192 | 
 | 
|---|
| [226] | 193 |         key, val = tup
 | 
|---|
 | 194 |         key = key.strip()
 | 
|---|
 | 195 |         if not defaultParams.has_key(key):
 | 
|---|
 | 196 |             print ('Bad key "%s" on line %d in %s' % (key, cnt, fname))
 | 
|---|
 | 197 |             continue
 | 
|---|
| [706] | 198 | 
 | 
|---|
| [226] | 199 |         default, converter =  defaultParams[key]
 | 
|---|
 | 200 | 
 | 
|---|
 | 201 |         ind = val.find('#')
 | 
|---|
 | 202 |         if ind>=0: val = val[:ind]   # ignore trailing comments
 | 
|---|
 | 203 |         val = val.strip()
 | 
|---|
 | 204 |         try: cval = converter(val)   # try to convert to proper type or raise
 | 
|---|
| [1080] | 205 |         except ValueError, msg:
 | 
|---|
| [226] | 206 |             print ('Bad val "%s" on line #%d\n\t"%s"\n\tin file "%s"\n\t%s' % (val, cnt, line, fname, msg))
 | 
|---|
 | 207 |             continue
 | 
|---|
 | 208 |         else:
 | 
|---|
 | 209 |             # Alles Klar, update dict
 | 
|---|
 | 210 |             defaultParams[key][0] = cval
 | 
|---|
 | 211 | 
 | 
|---|
 | 212 |     # strip the conveter funcs and return
 | 
|---|
 | 213 |     ret =  dict([ (key, tup[0]) for key, tup in defaultParams.items()])
 | 
|---|
| [466] | 214 |     print ('loaded rc file %s'%fname)
 | 
|---|
| [226] | 215 | 
 | 
|---|
 | 216 |     return ret
 | 
|---|
 | 217 | 
 | 
|---|
 | 218 | 
 | 
|---|
 | 219 | # this is the instance used by the asap classes
 | 
|---|
| [706] | 220 | rcParams = rc_params()
 | 
|---|
| [226] | 221 | 
 | 
|---|
 | 222 | rcParamsDefault = dict(rcParams.items()) # a copy
 | 
|---|
 | 223 | 
 | 
|---|
 | 224 | def rc(group, **kwargs):
 | 
|---|
 | 225 |     """
 | 
|---|
 | 226 |     Set the current rc params.  Group is the grouping for the rc, eg
 | 
|---|
| [379] | 227 |     for scantable.save the group is 'scantable', for plotter.stacking, the
 | 
|---|
 | 228 |     group is 'plotter', and so on.  kwargs is a list of attribute
 | 
|---|
| [226] | 229 |     name/value pairs, eg
 | 
|---|
 | 230 | 
 | 
|---|
| [379] | 231 |       rc('scantable', save='SDFITS')
 | 
|---|
| [226] | 232 | 
 | 
|---|
 | 233 |     sets the current rc params and is equivalent to
 | 
|---|
| [706] | 234 | 
 | 
|---|
| [379] | 235 |       rcParams['scantable.save'] = 'SDFITS'
 | 
|---|
| [226] | 236 | 
 | 
|---|
 | 237 |     Use rcdefaults to restore the default rc params after changes.
 | 
|---|
 | 238 |     """
 | 
|---|
 | 239 | 
 | 
|---|
| [379] | 240 |     aliases = {}
 | 
|---|
| [706] | 241 | 
 | 
|---|
| [226] | 242 |     for k,v in kwargs.items():
 | 
|---|
 | 243 |         name = aliases.get(k) or k
 | 
|---|
 | 244 |         key = '%s.%s' % (group, name)
 | 
|---|
 | 245 |         if not rcParams.has_key(key):
 | 
|---|
 | 246 |             raise KeyError('Unrecognized key "%s" for group "%s" and name "%s"' % (key, group, name))
 | 
|---|
| [706] | 247 | 
 | 
|---|
| [226] | 248 |         rcParams[key] = v
 | 
|---|
 | 249 | 
 | 
|---|
 | 250 | 
 | 
|---|
 | 251 | def rcdefaults():
 | 
|---|
 | 252 |     """
 | 
|---|
 | 253 |     Restore the default rc params - the ones that were created at
 | 
|---|
 | 254 |     asap load time
 | 
|---|
 | 255 |     """
 | 
|---|
 | 256 |     rcParams.update(rcParamsDefault)
 | 
|---|
 | 257 | 
 | 
|---|
| [1295] | 258 | def _n_bools(n, val):
 | 
|---|
 | 259 |     return [ val for i in xrange(n) ] 
 | 
|---|
| [513] | 260 | 
 | 
|---|
 | 261 | def _is_sequence_or_number(param, ptype=int):
 | 
|---|
 | 262 |     if isinstance(param,tuple) or isinstance(param,list):
 | 
|---|
| [928] | 263 |         if len(param) == 0: return True # empty list
 | 
|---|
| [513] | 264 |         out = True
 | 
|---|
 | 265 |         for p in param:
 | 
|---|
 | 266 |             out &= isinstance(p,ptype)
 | 
|---|
 | 267 |         return out
 | 
|---|
 | 268 |     elif isinstance(param, ptype):
 | 
|---|
 | 269 |         return True
 | 
|---|
 | 270 |     return False
 | 
|---|
 | 271 | 
 | 
|---|
| [928] | 272 | def _to_list(param, ptype=int):
 | 
|---|
 | 273 |     if isinstance(param, ptype):
 | 
|---|
 | 274 |         if ptype is str: return param.split()
 | 
|---|
 | 275 |         else: return [param]
 | 
|---|
 | 276 |     if _is_sequence_or_number(param, ptype):
 | 
|---|
 | 277 |         return param
 | 
|---|
 | 278 |     return None
 | 
|---|
| [715] | 279 | 
 | 
|---|
| [944] | 280 | def unique(x):
 | 
|---|
| [992] | 281 |     """
 | 
|---|
 | 282 |     Return the unique values in a list
 | 
|---|
 | 283 |     Parameters:
 | 
|---|
 | 284 |         x:      the list to reduce
 | 
|---|
 | 285 |     Examples:
 | 
|---|
 | 286 |         x = [1,2,3,3,4]
 | 
|---|
 | 287 |         print unique(x)
 | 
|---|
 | 288 |         [1,2,3,4]
 | 
|---|
 | 289 |     """
 | 
|---|
| [944] | 290 |     return dict([ (val, 1) for val in x]).keys()
 | 
|---|
 | 291 | 
 | 
|---|
| [992] | 292 | def list_files(path=".",suffix="rpf"):
 | 
|---|
 | 293 |     """
 | 
|---|
 | 294 |     Return a list files readable by asap, such as rpf, sdfits, mbf, asap
 | 
|---|
 | 295 |     Parameters:
 | 
|---|
 | 296 |         path:     The directory to list (default '.')
 | 
|---|
 | 297 |         suffix:   The file extension (default rpf)
 | 
|---|
 | 298 |     Example:
 | 
|---|
 | 299 |         files = list_files("data/","sdfits")
 | 
|---|
 | 300 |         print files
 | 
|---|
 | 301 |         ['data/2001-09-01_0332_P363.sdfits',
 | 
|---|
 | 302 |         'data/2003-04-04_131152_t0002.sdfits',
 | 
|---|
 | 303 |         'data/Sgr_86p262_best_SPC.sdfits']
 | 
|---|
 | 304 |     """
 | 
|---|
 | 305 |     if not os.path.isdir(path):
 | 
|---|
 | 306 |         return None
 | 
|---|
| [1295] | 307 |     valid = "rpf rpf.1 rpf.2 sdf sdfits mbf asap".split()
 | 
|---|
| [992] | 308 |     if not suffix in valid:
 | 
|---|
 | 309 |         return None
 | 
|---|
 | 310 |     files = [os.path.expanduser(os.path.expandvars(path+"/"+f)) for f in os.listdir(path)]
 | 
|---|
 | 311 |     return filter(lambda x: x.endswith(suffix),files)
 | 
|---|
 | 312 | 
 | 
|---|
| [715] | 313 | # workaround for ipython, which redirects this if banner=0 in ipythonrc
 | 
|---|
 | 314 | sys.stdout = sys.__stdout__
 | 
|---|
 | 315 | sys.stderr = sys.__stderr__
 | 
|---|
 | 316 | 
 | 
|---|
 | 317 | # Logging
 | 
|---|
 | 318 | from asap._asap import Log as _asaplog
 | 
|---|
 | 319 | global asaplog
 | 
|---|
| [710] | 320 | asaplog=_asaplog()
 | 
|---|
| [715] | 321 | if rcParams['verbose']:
 | 
|---|
 | 322 |     asaplog.enable()
 | 
|---|
 | 323 | else:
 | 
|---|
 | 324 |     asaplog.disable()
 | 
|---|
 | 325 | 
 | 
|---|
 | 326 | def print_log():
 | 
|---|
 | 327 |     log = asaplog.pop()
 | 
|---|
 | 328 |     if len(log) and rcParams['verbose']: print log
 | 
|---|
 | 329 |     return
 | 
|---|
 | 330 | 
 | 
|---|
| [1295] | 331 | def mask_and(a, b):
 | 
|---|
 | 332 |     assert(len(a)==len(b))
 | 
|---|
 | 333 |     return [ a[i] & b[i] for i in xrange(len(a)) ]
 | 
|---|
| [1134] | 334 | 
 | 
|---|
| [1295] | 335 | def mask_or(a, b):
 | 
|---|
 | 336 |     assert(len(a)==len(b))
 | 
|---|
 | 337 |     return [ a[i] | b[i] for i in xrange(len(a)) ]
 | 
|---|
 | 338 | 
 | 
|---|
 | 339 | def mask_not(a):
 | 
|---|
 | 340 |     return [ not i for i in a ]
 | 
|---|
 | 341 | 
 | 
|---|
| [1117] | 342 | from asapfitter import fitter
 | 
|---|
| [895] | 343 | from asapreader import reader
 | 
|---|
| [944] | 344 | from selector import selector
 | 
|---|
| [710] | 345 | 
 | 
|---|
| [100] | 346 | from asapmath import *
 | 
|---|
| [1080] | 347 | from scantable import scantable
 | 
|---|
| [1097] | 348 | from asaplinefind import linefinder
 | 
|---|
| [1134] | 349 | from linecatalog import linecatalog
 | 
|---|
| [1460] | 350 | from interactivemask import interactivemask
 | 
|---|
| [285] | 351 | 
 | 
|---|
| [928] | 352 | if rcParams['useplotter']:
 | 
|---|
| [1295] | 353 |     try:
 | 
|---|
 | 354 |         from  asapplotter import asapplotter
 | 
|---|
 | 355 |         gui = os.environ.has_key('DISPLAY') and rcParams['plotter.gui']
 | 
|---|
 | 356 |         if gui:
 | 
|---|
 | 357 |             import pylab as xyplotter
 | 
|---|
 | 358 |             plotter = asapplotter(gui)
 | 
|---|
 | 359 |             del gui
 | 
|---|
 | 360 |     except ImportError:
 | 
|---|
 | 361 |         print "Matplotlib not installed. No plotting available"
 | 
|---|
| [285] | 362 | 
 | 
|---|
| [574] | 363 | __date__ = '$Date: 2009-02-02 16:50:25 +0000 (Mon, 02 Feb 2009) $'.split()[1]
 | 
|---|
| [1445] | 364 | __version__  = '2.2.0 alma'
 | 
|---|
 | 365 | # nrao casapy specific, get revision number
 | 
|---|
| [1494] | 366 | #__revision__ = ' unknown '
 | 
|---|
| [1456] | 367 | casapath=os.environ["CASAPATH"].split()
 | 
|---|
| [1445] | 368 | revinfo=casapath[0]+'/'+casapath[1]+'/python/2.5/asap/svninfo.txt'
 | 
|---|
 | 369 | if os.path.isfile(revinfo):
 | 
|---|
 | 370 |     f = file(revinfo)
 | 
|---|
 | 371 |     f.readline()
 | 
|---|
 | 372 |     revsionno=f.readline()
 | 
|---|
 | 373 |     f.close()
 | 
|---|
 | 374 |     __revision__ = revsionno.rstrip()
 | 
|---|
| [1494] | 375 | else:
 | 
|---|
 | 376 |     __revision__ = ' unknown '
 | 
|---|
| [100] | 377 | 
 | 
|---|
| [1193] | 378 | def is_ipython():
 | 
|---|
| [1259] | 379 |     return '__IP' in dir(sys.modules["__main__"])
 | 
|---|
| [1193] | 380 | if is_ipython():
 | 
|---|
| [1014] | 381 |     def version(): print  "ASAP %s(%s)"% (__version__, __date__)
 | 
|---|
| [706] | 382 |     def list_scans(t = scantable):
 | 
|---|
| [1295] | 383 |         import types
 | 
|---|
| [706] | 384 |         globs = sys.modules['__main__'].__dict__.iteritems()
 | 
|---|
 | 385 |         print "The user created scantables are:"
 | 
|---|
 | 386 |         sts = map(lambda x: x[0], filter(lambda x: isinstance(x[1], t), globs))
 | 
|---|
 | 387 |         print filter(lambda x: not x.startswith('_'), sts)
 | 
|---|
 | 388 |         return
 | 
|---|
| [100] | 389 | 
 | 
|---|
| [715] | 390 |     def commands():
 | 
|---|
 | 391 |         x = """
 | 
|---|
| [113] | 392 |     [The scan container]
 | 
|---|
 | 393 |         scantable           - a container for integrations/scans
 | 
|---|
| [182] | 394 |                               (can open asap/rpfits/sdfits and ms files)
 | 
|---|
| [113] | 395 |             copy            - returns a copy of a scan
 | 
|---|
 | 396 |             get_scan        - gets a specific scan out of a scantable
 | 
|---|
| [984] | 397 |                               (by name or number)
 | 
|---|
| [1093] | 398 |             drop_scan       - drops a specific scan out of a scantable
 | 
|---|
 | 399 |                               (by number)
 | 
|---|
| [984] | 400 |             set_selection   - set a new subselection of the data
 | 
|---|
 | 401 |             get_selection   - get the current selection object
 | 
|---|
| [113] | 402 |             summary         - print info about the scantable contents
 | 
|---|
| [182] | 403 |             stats           - get specified statistic of the spectra in
 | 
|---|
 | 404 |                               the scantable
 | 
|---|
 | 405 |             stddev          - get the standard deviation of the spectra
 | 
|---|
 | 406 |                               in the scantable
 | 
|---|
| [113] | 407 |             get_tsys        - get the TSys
 | 
|---|
 | 408 |             get_time        - get the timestamps of the integrations
 | 
|---|
| [1351] | 409 |             get_inttime     - get the integration time
 | 
|---|
| [733] | 410 |             get_sourcename  - get the source names of the scans
 | 
|---|
| [794] | 411 |             get_azimuth     - get the azimuth of the scans
 | 
|---|
 | 412 |             get_elevation   - get the elevation of the scans
 | 
|---|
 | 413 |             get_parangle    - get the parallactic angle of the scans
 | 
|---|
| [876] | 414 |             get_unit        - get the current unit
 | 
|---|
| [513] | 415 |             set_unit        - set the abcissa unit to be used from this
 | 
|---|
 | 416 |                               point on
 | 
|---|
| [255] | 417 |             get_abcissa     - get the abcissa values and name for a given
 | 
|---|
 | 418 |                               row (time)
 | 
|---|
| [1259] | 419 |             get_column_names - get the names of the columns in the scantable
 | 
|---|
 | 420 |                                for use with selector.set_query
 | 
|---|
| [113] | 421 |             set_freqframe   - set the frame info for the Spectral Axis
 | 
|---|
 | 422 |                               (e.g. 'LSRK')
 | 
|---|
| [276] | 423 |             set_doppler     - set the doppler to be used from this point on
 | 
|---|
| [984] | 424 |             set_dirframe    - set the frame for the direction on the sky
 | 
|---|
| [240] | 425 |             set_instrument  - set the instrument name
 | 
|---|
| [1190] | 426 |             set_feedtype    - set the feed type
 | 
|---|
| [255] | 427 |             get_fluxunit    - get the brightness flux unit
 | 
|---|
| [240] | 428 |             set_fluxunit    - set the brightness flux unit
 | 
|---|
| [188] | 429 |             create_mask     - return an mask in the current unit
 | 
|---|
 | 430 |                               for the given region. The specified regions
 | 
|---|
 | 431 |                               are NOT masked
 | 
|---|
| [255] | 432 |             get_restfreqs   - get the current list of rest frequencies
 | 
|---|
 | 433 |             set_restfreqs   - set a list of rest frequencies
 | 
|---|
| [1360] | 434 |             shift_refpix    - shift the reference pixel of the IFs
 | 
|---|
| [1012] | 435 |             flag            - flag selected channels in the data
 | 
|---|
| [1192] | 436 |             lag_flag        - flag specified frequency in the data
 | 
|---|
| [1151] | 437 |             save            - save the scantable to disk as either 'ASAP',
 | 
|---|
 | 438 |                               'SDFITS' or 'ASCII'
 | 
|---|
| [486] | 439 |             nbeam,nif,nchan,npol - the number of beams/IFs/Pols/Chans
 | 
|---|
| [733] | 440 |             nscan           - the number of scans in the scantable
 | 
|---|
| [984] | 441 |             nrow            - te number of spectra in the scantable
 | 
|---|
| [486] | 442 |             history         - print the history of the scantable
 | 
|---|
| [530] | 443 |             get_fit         - get a fit which has been stored witnh the data
 | 
|---|
| [706] | 444 |             average_time    - return the (weighted) time average of a scan
 | 
|---|
| [513] | 445 |                               or a list of scans
 | 
|---|
 | 446 |             average_pol     - average the polarisations together.
 | 
|---|
| [1144] | 447 |             average_beam    - average the beams together.
 | 
|---|
| [992] | 448 |             convert_pol     - convert to a different polarisation type
 | 
|---|
| [690] | 449 |             auto_quotient   - return the on/off quotient with
 | 
|---|
| [1069] | 450 |                               automatic detection of the on/off scans (closest
 | 
|---|
 | 451 |                               in time off is selected)
 | 
|---|
| [1144] | 452 |             mx_quotient     - Form a quotient using MX data (off beams)
 | 
|---|
| [1014] | 453 |             scale, *, /     - return a scan scaled by a given factor
 | 
|---|
 | 454 |             add, +, -       - return a scan with given value added
 | 
|---|
| [513] | 455 |             bin             - return a scan with binned channels
 | 
|---|
 | 456 |             resample        - return a scan with resampled channels
 | 
|---|
 | 457 |             smooth          - return the spectrally smoothed scan
 | 
|---|
 | 458 |             poly_baseline   - fit a polynomial baseline to all Beams/IFs/Pols
 | 
|---|
| [706] | 459 |             auto_poly_baseline - automatically fit a polynomial baseline
 | 
|---|
| [780] | 460 |             recalc_azel     - recalculate azimuth and elevation based on
 | 
|---|
 | 461 |                               the pointing
 | 
|---|
| [513] | 462 |             gain_el         - apply gain-elevation correction
 | 
|---|
 | 463 |             opacity         - apply opacity correction
 | 
|---|
 | 464 |             convert_flux    - convert to and from Jy and Kelvin brightness
 | 
|---|
| [255] | 465 |                               units
 | 
|---|
| [513] | 466 |             freq_align      - align spectra in frequency frame
 | 
|---|
| [1014] | 467 |             invert_phase    - Invert the phase of the cross-correlation
 | 
|---|
| [1351] | 468 |             swap_linears    - Swap XX and YY (or RR LL)
 | 
|---|
| [513] | 469 |             rotate_xyphase  - rotate XY phase of cross correlation
 | 
|---|
 | 470 |             rotate_linpolphase - rotate the phase of the complex
 | 
|---|
 | 471 |                                  polarization O=Q+iU correlation
 | 
|---|
| [733] | 472 |             freq_switch     - perform frequency switching on the data
 | 
|---|
 | 473 |             stats           - Determine the specified statistic, e.g. 'min'
 | 
|---|
 | 474 |                               'max', 'rms' etc.
 | 
|---|
 | 475 |             stddev          - Determine the standard deviation of the current
 | 
|---|
 | 476 |                               beam/if/pol
 | 
|---|
| [1014] | 477 |      [Selection]
 | 
|---|
 | 478 |          selector              - a selection object to set a subset of a scantable
 | 
|---|
 | 479 |             set_scans          - set (a list of) scans by index
 | 
|---|
 | 480 |             set_cycles         - set (a list of) cycles by index
 | 
|---|
 | 481 |             set_beams          - set (a list of) beamss by index
 | 
|---|
 | 482 |             set_ifs            - set (a list of) ifs by index
 | 
|---|
 | 483 |             set_polarisations  - set (a list of) polarisations by name
 | 
|---|
 | 484 |                                  or by index
 | 
|---|
 | 485 |             set_names          - set a selection by name (wildcards allowed)
 | 
|---|
 | 486 |             set_tsys           - set a selection by tsys thresholds
 | 
|---|
| [1259] | 487 |             set_query          - set a selection by SQL-like query, e.g. BEAMNO==1
 | 
|---|
| [1351] | 488 |             ( also  get_ functions for all these )
 | 
|---|
| [1014] | 489 |             reset              - unset all selections
 | 
|---|
| [1351] | 490 |             +                  - merge two selections
 | 
|---|
| [733] | 491 | 
 | 
|---|
| [513] | 492 |      [Math] Mainly functions which operate on more than one scantable
 | 
|---|
| [100] | 493 | 
 | 
|---|
| [706] | 494 |             average_time    - return the (weighted) time average
 | 
|---|
| [513] | 495 |                               of a list of scans
 | 
|---|
 | 496 |             quotient        - return the on/off quotient
 | 
|---|
 | 497 |             simple_math     - simple mathematical operations on two scantables,
 | 
|---|
 | 498 |                               'add', 'sub', 'mul', 'div'
 | 
|---|
| [1069] | 499 |             quotient        - build quotient of the given on and off scans
 | 
|---|
| [1351] | 500 |                               (matched pairs and 1 off - n on are valid)
 | 
|---|
| [1117] | 501 |             merge           - merge a list of scantables
 | 
|---|
| [1069] | 502 | 
 | 
|---|
| [1151] | 503 |      [Line Catalog]
 | 
|---|
 | 504 |         linecatalog              - a linecatalog wrapper, taking an ASCII or
 | 
|---|
 | 505 |                                    internal format table
 | 
|---|
 | 506 |             summary              - print a summary of the current selection
 | 
|---|
 | 507 |             set_name             - select a subset by name pattern, e.g. '*OH*'
 | 
|---|
 | 508 |             set_strength_limits  - select a subset by line strength limits
 | 
|---|
 | 509 |             set_frequency_limits - select a subset by frequency limits
 | 
|---|
 | 510 |             reset                - unset all selections
 | 
|---|
 | 511 |             save                 - save the current subset to a table (internal
 | 
|---|
 | 512 |                                    format)
 | 
|---|
 | 513 |             get_row              - get the name and frequency from a specific
 | 
|---|
 | 514 |                                    row in the table
 | 
|---|
| [513] | 515 |      [Fitting]
 | 
|---|
| [113] | 516 |         fitter
 | 
|---|
 | 517 |             auto_fit        - return a scan where the function is
 | 
|---|
 | 518 |                               applied to all Beams/IFs/Pols.
 | 
|---|
 | 519 |             commit          - return a new scan where the fits have been
 | 
|---|
 | 520 |                               commited.
 | 
|---|
 | 521 |             fit             - execute the actual fitting process
 | 
|---|
| [984] | 522 |             store_fit       - store the fit parameters in the data (scantable)
 | 
|---|
| [113] | 523 |             get_chi2        - get the Chi^2
 | 
|---|
 | 524 |             set_scan        - set the scantable to be fit
 | 
|---|
 | 525 |             set_function    - set the fitting function
 | 
|---|
 | 526 |             set_parameters  - set the parameters for the function(s), and
 | 
|---|
 | 527 |                               set if they should be held fixed during fitting
 | 
|---|
| [513] | 528 |             set_gauss_parameters - same as above but specialised for individual
 | 
|---|
 | 529 |                                    gaussian components
 | 
|---|
| [113] | 530 |             get_parameters  - get the fitted parameters
 | 
|---|
| [513] | 531 |             plot            - plot the resulting fit and/or components and
 | 
|---|
 | 532 |                               residual
 | 
|---|
| [210] | 533 |     [Plotter]
 | 
|---|
 | 534 |         asapplotter         - a plotter for asap, default plotter is
 | 
|---|
 | 535 |                               called 'plotter'
 | 
|---|
| [984] | 536 |             plot            - plot a scantable
 | 
|---|
| [1151] | 537 |             plot_lines      - plot a linecatalog overlay
 | 
|---|
| [378] | 538 |             save            - save the plot to a file ('png' ,'ps' or 'eps')
 | 
|---|
| [210] | 539 |             set_mode        - set the state of the plotter, i.e.
 | 
|---|
 | 540 |                               what is to be plotted 'colour stacked'
 | 
|---|
 | 541 |                               and what 'panelled'
 | 
|---|
| [984] | 542 |             set_selection   - only plot a selected part of the data
 | 
|---|
| [733] | 543 |             set_range       - set a 'zoom' window [xmin,xmax,ymin,ymax]
 | 
|---|
| [255] | 544 |             set_legend      - specify user labels for the legend indeces
 | 
|---|
 | 545 |             set_title       - specify user labels for the panel indeces
 | 
|---|
| [733] | 546 |             set_abcissa     - specify a user label for the abcissa
 | 
|---|
| [255] | 547 |             set_ordinate    - specify a user label for the ordinate
 | 
|---|
| [378] | 548 |             set_layout      - specify the multi-panel layout (rows,cols)
 | 
|---|
| [733] | 549 |             set_colors      - specify a set of colours to use
 | 
|---|
 | 550 |             set_linestyles  - specify a set of linestyles to use if only
 | 
|---|
 | 551 |                               using one color
 | 
|---|
| [1151] | 552 |             set_font        - set general font properties, e.g. 'family'
 | 
|---|
| [1054] | 553 |             set_histogram   - plot in historam style
 | 
|---|
| [733] | 554 |             set_mask        - set a plotting mask for a specific polarization
 | 
|---|
| [1171] | 555 |             text            - draw text annotations either in data or relative
 | 
|---|
 | 556 |                               coordinates
 | 
|---|
 | 557 |             arrow           - draw arrow annotations either in data or relative
 | 
|---|
 | 558 |                               coordinates
 | 
|---|
 | 559 |             axhline,axvline - draw horizontal/vertical lines
 | 
|---|
 | 560 |             axhspan,axvspan - draw horizontal/vertical regions
 | 
|---|
| [1175] | 561 | 
 | 
|---|
 | 562 |         xyplotter           - matplotlib/pylab plotting functions
 | 
|---|
 | 563 | 
 | 
|---|
| [182] | 564 |     [Reading files]
 | 
|---|
 | 565 |         reader              - access rpfits/sdfits files
 | 
|---|
| [984] | 566 |             open            - attach reader to a file
 | 
|---|
 | 567 |             close           - detach reader from file
 | 
|---|
| [182] | 568 |             read            - read in integrations
 | 
|---|
 | 569 |             summary         - list info about all integrations
 | 
|---|
 | 570 | 
 | 
|---|
| [113] | 571 |     [General]
 | 
|---|
 | 572 |         commands            - this command
 | 
|---|
 | 573 |         print               - print details about a variable
 | 
|---|
 | 574 |         list_scans          - list all scantables created bt the user
 | 
|---|
| [992] | 575 |         list_files          - list all files readable by asap (default rpf)
 | 
|---|
| [113] | 576 |         del                 - delete the given variable from memory
 | 
|---|
 | 577 |         range               - create a list of values, e.g.
 | 
|---|
 | 578 |                               range(3) = [0,1,2], range(2,5) = [2,3,4]
 | 
|---|
 | 579 |         help                - print help for one of the listed functions
 | 
|---|
 | 580 |         execfile            - execute an asap script, e.g. execfile('myscript')
 | 
|---|
| [255] | 581 |         list_rcparameters   - print out a list of possible values to be
 | 
|---|
| [274] | 582 |                               put into $HOME/.asaprc
 | 
|---|
| [1171] | 583 |         rc                  - set rc parameters from within asap
 | 
|---|
| [466] | 584 |         mask_and,mask_or,
 | 
|---|
 | 585 |         mask_not            - boolean operations on masks created with
 | 
|---|
 | 586 |                               scantable.create_mask
 | 
|---|
| [706] | 587 | 
 | 
|---|
| [210] | 588 |     Note:
 | 
|---|
 | 589 |         How to use this with help:
 | 
|---|
 | 590 |                                          # function 'summary'
 | 
|---|
 | 591 |         [xxx] is just a category
 | 
|---|
 | 592 |         Every 'sub-level' in this list should be replaces by a '.' Period when
 | 
|---|
| [706] | 593 |         using help
 | 
|---|
| [210] | 594 |         Example:
 | 
|---|
 | 595 |             ASAP> help scantable # to get info on ths scantable
 | 
|---|
 | 596 |             ASAP> help scantable.summary # to get help on the scantable's
 | 
|---|
 | 597 |             ASAP> help average_time
 | 
|---|
 | 598 | 
 | 
|---|
| [715] | 599 |             """
 | 
|---|
| [1151] | 600 |         if rcParams['verbose']:
 | 
|---|
 | 601 |             try:
 | 
|---|
 | 602 |                 from IPython.genutils import page as pager
 | 
|---|
 | 603 |             except ImportError:
 | 
|---|
 | 604 |                 from pydoc import pager
 | 
|---|
 | 605 |             pager(x)
 | 
|---|
 | 606 |         else:
 | 
|---|
 | 607 |             print x
 | 
|---|
| [715] | 608 |         return
 | 
|---|
| [113] | 609 | 
 | 
|---|
| [706] | 610 | def welcome():
 | 
|---|
 | 611 |     return """Welcome to ASAP v%s (%s) - the ATNF Spectral Analysis Package
 | 
|---|
| [100] | 612 | 
 | 
|---|
| [1035] | 613 | Please report any bugs via:
 | 
|---|
| [1378] | 614 | http://svn.atnf.csiro.au/trac/asap/simpleticket
 | 
|---|
| [100] | 615 | 
 | 
|---|
| [378] | 616 | [IMPORTANT: ASAP is 0-based]
 | 
|---|
| [706] | 617 | Type commands() to get a list of all available ASAP commands.""" % (__version__, __date__)
 | 
|---|