Changeset 256 for trunk


Ignore:
Timestamp:
01/21/05 22:25:08 (20 years ago)
Author:
mar637
Message:
  • rewrote save to avoid using empty filenames
  • rewrote stat,tsys output and formatting
  • renmaing of function names
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/scantable.py

    r241 r256  
    5959                    sdtable.__init__(self,tbl)
    6060
    61     def save(self, name="", format=None):
     61    def save(self, name=None, format=None, overwrite=False):
    6262        """
    6363        Store the scantable on disk. This can be a asap file or SDFITS/MS2.
     
    7272                                       'MS2' (saves as an aips++
    7373                                              MeasurementSet V2)
     74            overwrite:   if the file should be overwritten if it exists.
     75                         The default False is to return with warning
     76                         without writing the output
    7477        Example:
    7578            scan.save('myscan.asap')
     
    7780        """
    7881        if format is None: format = rcParams['scantable.save']
     82        suffix = '.'+format.lower()
     83        if name is None or name =="":
     84            name = 'scantable'+suffix
     85        from os import path
     86        if path.isfile(name) or path.isdir(name):
     87            if not overwrite:
     88                print "File %s already exists." % name
     89                return
    7990        if format == 'ASAP':
    8091            self._save(name)
     
    119130
    120131    def __str__(self):
    121         return sdtable.summary(self)
     132        return sdtable._summary(self)
    122133
    123134    def summary(self,filename=None):
     
    128139                         Default - no file output
    129140        """
    130         info = sdtable.summary(self)
     141        info = sdtable._summary(self)
    131142        if filename is not None:
     143            if filename is "":
     144                filename = 'scantable_summary.txt'
    132145            data = open(filename, 'w')
    133146            data.write(info)
     
    135148        print info
    136149
    137     def set_selection(self, thebeam=0,theif=0,thepol=0):
     150    def set_cursor(self, thebeam=0,theif=0,thepol=0):
    138151        """
    139152        Set the spectrum for individual operations.
     
    141154            thebeam,theif,thepol:    a number
    142155        Example:
    143             scan.set_selection(0,0,1)
     156            scan.set_cursor(0,0,1)
    144157            pol1sig = scan.stats(all=False) # returns std dev for beam=0
    145158                                            # if=0, pol=1
     
    150163        return
    151164
    152     def get_selection(self):
     165    def get_cursor(self):
    153166        """
    154167        Return/print a the current 'cursor' into the Beam/IF/Pol cube.
     
    165178        if self._vb:
    166179            print "--------------------------------------------------"
    167             print " Cursor selection"
     180            print " Cursor position"
    168181            print "--------------------------------------------------"
    169182            out = 'Beam=%d IF=%d Pol=%d ' % (i,j,k)
     
    191204        if all is None: all = rcParams['scantable.allaxes']
    192205        from asap._asap import stats as _stats
     206        from numarray import array,zeros,Float
    193207        if mask == None:
    194208            mask = ones(self.nchan())
     209        axes = ['Beam','IF','Pol','Time']
     210
    195211        if all:
    196             out = ''
    197             tmp = []
    198             for l in range(self.nrow()):
    199                 tm = self._gettime(l)
    200                 out += 'Time[%s]:\n' % (tm)
    201                 for i in range(self.nbeam()):
    202                     self.setbeam(i)
    203                     if self.nbeam() > 1: out +=  ' Beam[%d] ' % (i)
    204                     for j in range(self.nif()):
    205                         self.setif(j)
    206                         if self.nif() > 1: out +=  ' IF[%d] ' % (j)
    207                         for k in range(self.npol()):
    208                             self.setpol(k)
    209                             if self.npol() > 1: out +=  ' Pol[%d] ' % (k)
    210                             statval = _stats(self,mask,stat,l)
    211                             tmp.append(statval)
    212                             out += '= %3.3f\n' % (statval[0])
    213                 out += "--------------------------------------------------\n"
     212            n = self.nbeam()*self.nif()*self.npol()*self.nrow()
     213            shp = [self.nbeam(),self.nif(),self.npol(),self.nrow()]
     214            arr = array(zeros(n),shape=shp,type=Float)
     215
     216            for i in range(self.nbeam()):
     217                self.setbeam(i)
     218                for j in range(self.nif()):
     219                    self.setif(j)
     220                    for k in range(self.npol()):
     221                        self.setpol(k)
     222                        arr[i,j,k,:] = _stats(self,mask,stat,-1)
     223            retval = {'axes': axes, 'data': arr, 'cursor':None}
     224            tm = [self._gettime(val) for val in range(self.nrow())]
    214225            if self._vb:
    215                 print "--------------------------------------------------"
    216                 print " ",stat
    217                 out += "--------------------------------------------------\n"
    218                 print out
    219             return tmp
     226                self._print_values(retval,stat,tm)
     227            return retval
    220228
    221229        else:
    222             i = self.getbeam()
    223             j = self.getif()
    224             k = self.getpol()
     230            i,j,k = (self.getbeam(),self.getif(),self.getpol())
    225231            statval = _stats(self,mask,stat,-1)
    226232            out = ''
     
    239245                print "--------------------------------------------------"
    240246                print out
    241             return statval
     247            retval = {'axes': axes, 'data': array(statval), 'cursor':(i,j,k)}
     248            return retval
    242249
    243250    def stddev(self,mask=None, all=None):
     
    267274            all:    optional parameter to get the Tsys values for all
    268275                    Beams/IFs/Pols (default) or just the one selected
    269                     with scantable.set_selection()
     276                    with scantable.set_cursor()
    270277                    [True or False]
    271278        Returns:
     
    273280        """
    274281        if all is None: all = rcParams['scantable.allaxes']
     282        from numarray import array,zeros,Float
     283        axes = ['Beam','IF','Pol','Time']
     284
    275285        if all:
    276             out = ''
    277             tmp = []
    278             for l in range(self.nrow()):
    279                 tm = self._gettime(l)
    280                 out += 'Time[%s]:\n' % (tm)
    281                 for i in range(self.nbeam()):
    282                     self.setbeam(i)
    283                     if self.nbeam() > 1: out +=  ' Beam[%d] ' % (i)
    284                     for j in range(self.nif()):
    285                         self.setif(j)
    286                         if self.nif() > 1: out +=  ' IF[%d] ' % (j)
    287                         for k in range(self.npol()):
    288                             self.setpol(k)
    289                             if self.npol() > 1: out +=  ' Pol[%d] ' % (k)
    290                             ts = self._gettsys()
    291                             tmp.append(ts)
    292                             out += '= %3.3f\n' % (ts[l])
    293                 out+= "--------------------------------------------------\n"
     286            n = self.nbeam()*self.nif()*self.npol()*self.nrow()
     287            shp = [self.nbeam(),self.nif(),self.npol(),self.nrow()]
     288            arr = array(zeros(n),shape=shp,type=Float)
     289
     290            for i in range(self.nbeam()):
     291                self.setbeam(i)
     292                for j in range(self.nif()):
     293                    self.setif(j)
     294                    for k in range(self.npol()):
     295                        self.setpol(k)
     296                        arr[i,j,k,:] = self._gettsys()
     297            retval = {'axes': axes, 'data': arr, 'cursor':None}
     298            tm = [self._gettime(val) for val in range(self.nrow())]
    294299            if self._vb:
    295                 print "--------------------------------------------------"
    296                 print " Tsys"
    297                 print "--------------------------------------------------"
    298                 print out
    299             return tmp
     300                self._print_values(retval,'Tsys',tm)
     301            return retval
     302
    300303        else:
    301             i = self.getbeam()
    302             j = self.getif()
    303             k = self.getpol()
    304             ts = self._gettsys()
     304            i,j,k = (self.getbeam(),self.getif(),self.getpol())
     305            statval = self._gettsys()
    305306            out = ''
    306307            for l in range(self.nrow()):
     
    310311                if self.nif() > 1: out +=  ' IF[%d] ' % (j)
    311312                if self.npol() > 1: out +=  ' Pol[%d] ' % (k)
    312                 out += '= %3.3f\n' % (ts[l])
    313                 out += "--------------------------------------------------\n"
     313                out += '= %3.3f\n' % (statval[l])
     314                out +=  "--------------------------------------------------\n"
     315
    314316            if self._vb:
    315317                print "--------------------------------------------------"
    316                 print " Tsys"
     318                print " TSys"
    317319                print "--------------------------------------------------"
    318320                print out
    319             return ts
     321            retval = {'axes': axes, 'data': array(statval), 'cursor':(i,j,k)}
     322            return retval
    320323       
    321324    def get_time(self):
     
    388391            The abcissa values and it's format string.
    389392        """
    390         abc = self.getabcissa(rowno)
    391         lbl = self.getabcissalabel(rowno)
     393        abc = self._getabcissa(rowno)
     394        lbl = self._getabcissalabel(rowno)
    392395        return abc, lbl
    393396
     
    423426            print "The current mask window unit is", u
    424427        n = self.nchan()
    425         data = self.getabcissa()
     428        data = self._getabcissa()
    426429        msk = zeros(n)
    427430        for  window in args:
     
    451454        sdtable._setrestfreqs(self,freqs, unit)
    452455        return
     456    def get_restfreqs(self):
     457        """
     458        Get the restfrequency(s) stored in this scantable.
     459        The return value(s) are always of unit 'Hz'
     460        Parameters:
     461            none
     462        Returns:
     463            a list of doubles
     464        """
     465        return list(self._getrestfreqs())
    453466
    454467    def flag_spectrum(self, thebeam, theif, thepol):
     
    507520        xlab,ylab,tlab = None,None,None
    508521        self._vb = False
    509         sel = self.get_selection()       
     522        sel = self.get_cursor()       
    510523        for i in range(npan):
    511524            if npan > 1:
     
    534547                else:
    535548                    x,xlab = self.get_abcissa(i)
    536                     y = self.getspectrum(i)
     549                    y = self._getspectrum(i)
    537550                    ylab = r'Flux'
    538                     m = self.getmask(i)
     551                    m = self._getmask(i)
    539552                llab = col+' '+str(j)
    540553                self._p.set_line(label=llab)
     
    544557            self._p.set_axes('title',tlab)
    545558        self._p.release()
    546         self.set_selection(sel[0],sel[1],sel[2])
     559        self.set_cursor(sel[0],sel[1],sel[2])
    547560        self._vb = rcParams['verbose']
    548561        return
     562
     563        print out
     564
     565    def _print_values(self, dat, label='', timestamps=[]):
     566        d = dat['data']
     567        a = dat['axes']
     568        shp = d.getshape()
     569        out = ''
     570        for i in range(shp[3]):
     571            out += '%s [%s]:\n' % (a[3],timestamps[i])
     572            t = d[:,:,:,i]
     573            for j in range(shp[0]):
     574                if shp[0] > 1: out +=  ' %s[%d] ' % (a[0],j)
     575                for k in range(shp[1]):
     576                    if shp[1] > 1: out +=  ' %s[%d] ' % (a[1],k)
     577                    for l in range(shp[2]):
     578                        if shp[2] > 1: out +=  ' %s[%d] ' % (a[2],l)
     579                        out += '= %3.3f\n' % (t[j,k,l])
     580            out += "--------------------------------------------------\n"
     581        print "--------------------------------------------------"
     582        print " ", label
     583        print "--------------------------------------------------"
     584        print out
Note: See TracChangeset for help on using the changeset viewer.