Changeset 484 for trunk


Ignore:
Timestamp:
02/21/05 08:25:12 (20 years ago)
Author:
mar637
Message:
  • added history
  • added contructor argument for (auto) averaging
  • tidying
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/scantable.py

    r474 r484  
    99    """
    1010   
    11     def __init__(self, filename, unit=None):
     11    def __init__(self, filename, average=None, unit=None):
    1212        """
    1313        Create a scantable from a saved one or make a reference
     
    2121                         [advanced] a reference to an existing
    2222                         scantable
    23            unit:         brightness unit; must be consistent with K or Jy.
     23            average:     average all integrations withinb a scan on read.
     24                         The default (True) is taken from .asaprc.
     25            unit:         brightness unit; must be consistent with K or Jy.
    2426                         Over-rides the default selected by the reader
    2527                         (input rpfits/sdfits/ms) or replaces the value
    2628                         in existing scantables
    2729        """
     30        varlist = vars()
    2831        self._vb = rcParams['verbose']
    2932        self._p = None
    30         from os import stat as st
    31         import stat
     33       
     34        if average is None or type(average) is not bool:
     35            autoav = rcParams['scantable.autoaverage']           
     36
    3237        if isinstance(filename,sdtable):
    3338            sdtable.__init__(self, filename)           
     
    4954                    print "The given file '%s'is not a valid asap table." % (filename)
    5055                    return
    51             else:
    52                 autoav = rcParams['scantable.autoaverage']
    53 
     56            else:           
    5457                from asap._asap import sdreader
    5558                ifSel = -1
     
    7073                else:
    7174                    sdtable.__init__(self,tbl)
     75                self._add_history("scantable", varlist)
    7276
    7377    def save(self, name=None, format=None, stokes=False, overwrite=False):
     
    178182                print "Illegal file name '%s'." % (filename)
    179183        print info
    180 
     184           
    181185    def set_cursor(self, thebeam=0,theif=0,thepol=0):
    182186        """
     
    189193                                            # if=0, pol=1
    190194        """
     195        varlist = vars()
    191196        self.setbeam(thebeam)
    192197        self.setpol(thepol)
    193198        self.setif(theif)
     199        self._add_history("set_cursor",varlist)
    194200        return
    195201
     
    380386                     one of '*Hz','km/s','channel', ''
    381387        """
    382 
     388        varlist = vars()
    383389        if unit in ['','pixel', 'channel']:
    384390            unit = ''
     
    387393        self._setcoordinfo(inf)
    388394        if self._p: self.plot()
    389 
    390     def set_instrument (self, instr):
     395        self._add_history("set_unit",varlist)
     396
     397    def set_instrument(self, instr):
    391398        """
    392399        Set the instrument for subsequent processing
     
    396403        """
    397404        self._setInstrument(instr)
     405        self._add_history("set_instument",vars())
    398406
    399407    def set_doppler(self, doppler='RADIO'):
     
    403411            doppler:    One of 'RADIO', 'OPTICAL', 'Z', 'BETA', 'GAMMA'
    404412        """
    405 
     413        varlist = vars()
    406414        inf = list(self._getcoordinfo())
    407415        inf[2] = doppler
    408416        self._setcoordinfo(inf)
    409417        if self._p: self.plot()
     418        self._add_history("set_doppler",vars())
    410419 
    411420    def set_freqframe(self, frame=None):
     
    417426            scan.set_freqframe('BARY')
    418427        """
    419         if not frame: frame = rcParams['scantable.freqframe']
     428        if frame is None: frame = rcParams['scantable.freqframe']
     429        varlist = vars()
    420430        valid = ['REST','TOPO','LSRD','LSRK','BARY', \
    421431                   'GEO','GALACTO','LGROUP','CMB']
     
    424434            inf[1] = frame
    425435            self._setcoordinfo(inf)
     436            self._add_history("set_freqframe",varlist)
    426437        else:
    427438            print "Please specify a valid freq type. Valid types are:\n",valid
     
    480491           
    481492        """
     493        varlist = vars()
    482494        u = self._getcoordinfo()[0]
    483495        if self._vb:
     
    487499        data = self._getabcissa()
    488500        msk = zeros(n)
    489         for  window in args:
     501        for window in args:
    490502            if (len(window) != 2 or window[0] > window[1] ):
    491503                print "A window needs to be defined as [min,max]"
     
    498510                from numarray import logical_not
    499511                msk = logical_not(msk)
     512        self._add_history("create_mask", varlist)
    500513        return msk
    501514   
     
    517530        sdtable._lines(self)
    518531
    519     def set_restfreqs(self, freqs=None, unit='Hz', lines=None, source=None, theif=None):
     532    def set_restfreqs(self, freqs=None, unit='Hz', lines=None, source=None,
     533                      theif=None):
    520534        """
    521535        Select the restfrequency for the specified source and IF OR
     
    548562            scan.set_restfreqs(freqs=[1.4e9,1.67e9])
    549563        """
     564        varlist = vars()
    550565        if source is None:
    551566            source = ""
     
    563578           lines = []
    564579        sdtable._setrestfreqs(self, freqs, unit, lines, source, theif)
    565         return
     580        self._add_history("set_restfreqs", varlist)
     581       
    566582
    567583
     
    585601            sdtable.setpol(self, thepol)
    586602            sdtable._flag(self)
     603            self._add_history("flag_spectrum", vars())
    587604        else:
    588605            print "Please specify a valid (Beam/IF/Pol)"
     
    683700                        if shp[2] > 1: out +=  ' %s[%d] ' % (a[2],l)
    684701                        out += '= %3.3f\n' % (t[j,k,l])
    685             out += "--------------------------------------------------\n"
    686         print "--------------------------------------------------"
     702            out += "-"*80
     703            out += "\n"
     704        print "-"*80
    687705        print " ", label
    688         print "--------------------------------------------------"
     706        print "-"*80
    689707        print out
     708
     709    def history(self):
     710        hist = list(self._gethistory())
     711        print "-"*80
     712        for h in hist:
     713            items = h.split("##")
     714            date = items[0]
     715            func = items[1]
     716            items = items[2:]
     717            print date           
     718            print "Function: %s\n  Parameters:" % (func)
     719            for i in items:
     720                s = i.split("=")
     721                print "   %s: %s" % (s[0],s[1])
     722            print "-"*80
     723        return
     724
     725    def _add_history(self, funcname, parameters):
     726        # create date
     727        sep = "##"
     728        from datetime import datetime
     729        dstr = datetime.now().strftime('%Y/%m/%d %H:%M:%S')
     730        hist = dstr+sep
     731        hist += funcname+sep#cdate+sep
     732        if parameters.has_key('self'): del parameters['self']
     733        for k,v in parameters.iteritems():
     734            if type(v) is dict:
     735                for k2,v2 in v.iteritems():
     736                    hist += k2
     737                    hist += "="
     738                    if isinstance(v2,scantable):
     739                        hist += 'scantable'
     740                    elif k2 == 'mask':
     741                        hist += str(self._zip_mask(v2))
     742                    else:
     743                        hist += str(v2)                   
     744            else:
     745                hist += k
     746                hist += "="
     747                if isinstance(v,scantable):
     748                    hist += 'scantable'
     749                elif k == 'mask':
     750                    hist += str(self._zip_mask(v))
     751                else:
     752                    hist += str(v)
     753            hist += sep
     754        hist = hist[:-2] # remove trailing '##'
     755        self._addhistory(hist)
     756       
     757
     758    def _zip_mask(self, mask):
     759        mask = list(mask)
     760        i = 0
     761        segments = []
     762        while mask[i:].count(1):
     763            i += mask[i:].index(1)
     764            if mask[i:].count(0):
     765                j = i + mask[i:].index(0)
     766            else:
     767                j = len(mask)               
     768            segments.append([i,j])
     769            i = j
     770        return segments
Note: See TracChangeset for help on using the changeset viewer.