Changeset 976


Ignore:
Timestamp:
04/03/06 16:39:42 (18 years ago)
Author:
mar637
Message:

Ticket #12 - read of multiple rpf files into one scantable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/scantable.py

    r946 r976  
    11from asap._asap import Scantable
    22from asap import rcParams
    3 from asap import print_log
     3from asap import print_log, asaplog
    44from asap import selector
    55from numarray import ones,zeros
     
    3030                         in existing scantables
    3131        """
    32         if average is None or type(average) is not bool:
     32        if average is None:
    3333            average = rcParams['scantable.autoaverage']
    34 
    3534        varlist = vars()
    3635        from asap._asap import stmath
    3736        self._math = stmath()
    38         from asap import asaplog
    3937        if isinstance(filename, Scantable):
    4038            Scantable.__init__(self, filename)
    41             if unit is not None:
    42                 self.set_fluxunit(unit)
    43         else:
    44             import os.path
    45             if not os.path.exists(filename):
    46                 s = "File '%s' not found." % (filename)
    47                 if rcParams['verbose']:
    48                     asaplog.push(s)
    49                     print asaplog.pop().strip()
    50                     return
    51                 raise IOError(s)
    52             filename = os.path.expandvars(filename)
    53             if os.path.isdir(filename):
    54                 # crude check if asap table
    55                 if os.path.exists(filename+'/table.info'):
    56                     Scantable.__init__(self, filename, "memory")
    57                     if unit is not None:
    58                         self.set_fluxunit(unit)
     39        else:
     40            if isinstance(filename,str):
     41                import os.path
     42                filename = os.path.expandvars(filename)
     43                filename = os.path.expanduser(filename)
     44                if not os.path.exists(filename):
     45                    s = "File '%s' not found." % (filename)
     46                    if rcParams['verbose']:
     47                        asaplog.push(s)
     48                        print asaplog.pop().strip()
     49                        return
     50                    raise IOError(s)
     51                if os.path.isdir(filename):
     52                    # crude check if asap table
     53                    if os.path.exists(filename+'/table.info'):
     54                        Scantable.__init__(self, filename, "memory")
     55                        if unit is not None:
     56                            self.set_fluxunit(unit)
     57                        self.set_freqframe(rcParams['scantable.freqframe'])
     58                    else:
     59                        msg = "The given file '%s'is not a valid asap table." % (filename)
     60                        if rcParams['verbose']:
     61                            print msg
     62                            return
     63                        else:
     64                            raise IOError(msg)
    5965                else:
    60                     msg = "The given file '%s'is not a valid asap table." % (filename)
    61                     if rcParams['verbose']:
    62                         print msg
    63                         return
    64                     else:
    65                         raise IOError(msg)
    66             else:
    67                 from asap._asap import stfiller
    68                 ifSel = -1
    69                 beamSel = -1
    70                 r = stfiller()
    71                 r._open(filename,ifSel,beamSel)
    72                 asaplog.push('Importing data...')
    73                 print_log()
    74                 r._read()
    75                 tbl = r._getdata()
    76                 if unit is not None:
    77                     tbl.set_fluxunit(unit)
    78                 if average:
    79                     asaplog.push('Auto averaging integrations...')
    80                     print_log()
    81                     tbl2 = self._math._average((tbl,),(),'NONE','SCAN', False)
    82                     Scantable.__init__(self,tbl2)
    83                     del tbl2
    84                 else:
    85                     Scantable.__init__(self,tbl)
    86                 del r,tbl
    87                 self._add_history("scantable", varlist)
     66                    self._fill([filename],unit, average)
     67            elif (isinstance(filename,list) or isinstance(filename,tuple)) \
     68                  and isinstance(filename[-1], str):
     69                self._fill(filename, unit, average)
    8870        print_log()
    8971
     
    209191        return Scantable._summary(self,True)
    210192
    211     def summary(self, filename=None, verbose=None):
     193    def summary(self, filename=None):
    212194        """
    213195        Print a summary of the contents of this scantable.
     
    218200                         The default (False) is taken from .asaprc
    219201        """
    220         info = Scantable._summary(self, verbose)
    221         if verbose is None: verbose = rcParams['scantable.verbosesummary']
     202        info = Scantable._summary(self, True)
     203        #if verbose is None: verbose = rcParams['scantable.verbosesummary']
    222204        if filename is not None:
    223205            if filename is "":
     
    772754        """
    773755        varlist = vars()
    774         if weight is None: weight = 'tint'
     756        if weight is None: weight = 'TINT'
    775757        if mask is None: mask = ()
    776758        if scanav:
     
    10461028                        both sides of the spectrum. Default is to keep
    10471029                        all channels. Nested tuples represent individual
    1048                         edge selection for different IFs (a number of spectral
    1049                         channels can be different)
     1030                        edge selection for different IFs (a number of spectral
     1031                        channels can be different)
    10501032            order:      the order of the polynomial (default is 0)
    10511033            threshold:  the threshold used by line finder. It is better to
     
    10651047        from asap import _is_sequence_or_number as _is_valid
    10661048
    1067         # check whether edge is set up for each IF individually
    1068         individualEdge = False;
    1069         if len(edge)>1:
    1070            if isinstance(edge[0],list) or isinstance(edge[0],tuple):
    1071                individualEdge = True;
     1049        # check whether edge is set up for each IF individually
     1050        individualEdge = False;
     1051        if len(edge)>1:
     1052           if isinstance(edge[0],list) or isinstance(edge[0],tuple):
     1053               individualEdge = True;
    10721054
    10731055        if not _is_valid(edge, int) and not individualEdge:
     
    10761058            to make individual selection for different IFs."
    10771059
    1078         curedge = (0,0)
    1079         if individualEdge:
    1080            for edge_par in edge:
    1081                if not _is_valid(edge,int):
    1082                   raise ValueError, "Each element of the 'edge' tuple has \
     1060        curedge = (0,0)
     1061        if individualEdge:
     1062           for edge_par in edge:
     1063               if not _is_valid(edge,int):
     1064                  raise ValueError, "Each element of the 'edge' tuple has \
    10831065                  to be a pair of integers or an integer."
    10841066        else:
    1085            curedge = edge;
     1067           curedge = edge;
    10861068
    10871069        # setup fitter
     
    11071089            asaplog.push(msg, False)
    11081090
    1109             # figure out edge parameter
    1110             if individualEdge:
    1111                if len(edge)>=workscan.getif(r):
    1112                   raise RuntimeError, "Number of edge elements appear to be less than the number of IFs"
    1113                   curedge = edge[workscan.getif(r)]
    1114 
    1115             # setup line finder
     1091            # figure out edge parameter
     1092            if individualEdge:
     1093               if len(edge)>=workscan.getif(r):
     1094                  raise RuntimeError, "Number of edge elements appear to be less than the number of IFs"
     1095                  curedge = edge[workscan.getif(r)]
     1096
     1097            # setup line finder
    11161098            fl.find_lines(r,mask,curedge)
    11171099            f.set_scan(workscan, fl.get_mask())
     
    13601342        if row > self.nrow():
    13611343            return
    1362         from asap import asapfit
     1344        from asap.asapfit import asapfit
    13631345        fit = asapfit(self._getfit(row))
    13641346        if rcParams['verbose']:
     
    14351417        nchans = filter(lambda t: t > 0, nchans)
    14361418        return (sum(nchans)/len(nchans) == nchans[0])
     1419
     1420    def _fill(self, names, unit, average):
     1421        import os
     1422        varlist = vars()
     1423        from asap._asap import stfiller
     1424        first = True
     1425        fullnames = []
     1426        for name in names:
     1427            name = os.path.expandvars(name)
     1428            name = os.path.expanduser(name)
     1429            if not os.path.exists(name):
     1430                msg = "File '%s' does not exists" % (name)
     1431                if rcParams['verbose']:
     1432                    asaplog.push(msg)
     1433                    print asaplog.pop().strip()
     1434                    return
     1435                raise IOError(msg)
     1436            fullnames.append(name)
     1437        if average:
     1438            asaplog.push('Auto averaging integrations')
     1439        for name in fullnames:
     1440            r = stfiller()
     1441            msg = "Importing %s..." % (name)
     1442            asaplog.push(msg,False)
     1443            print_log()
     1444            r._open(name,-1,-1)
     1445            r._read()
     1446            tbl = r._getdata()
     1447            if average:
     1448                tbl = self._math._average((tbl,),(),'NONE','SCAN', False)
     1449                #tbl = tbl2
     1450            if not first:
     1451                tbl = self._math._merge([self, tbl])
     1452                #tbl = tbl2
     1453            Scantable.__init__(self, tbl)
     1454            r._close()
     1455            del r,tbl
     1456            first = False
     1457        if unit is not None:
     1458            self.set_fluxunit(unit)
     1459        self.set_freqframe(rcParams['scantable.freqframe'])
     1460        #self._add_history("scantable", varlist)
     1461
Note: See TracChangeset for help on using the changeset viewer.