Changeset 2952


Ignore:
Timestamp:
06/24/14 19:59:46 (11 years ago)
Author:
WataruKawasaki
Message:

New Development: No

JIRA Issue: Yes CAS-6598

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: add a parameter for some functions

Test Programs: test_sdscale

Put in Release Notes:

Module(s): sd

Description: add a parameter 'skip_flaggedrow' for STMath::unaryOperate(), STMath::arrayOperate(), STMath::arrayOperateChannel(), STMath::arrayOperateRow() and their python interfaces if exist. the default value of 'skip_flaggedrow' is false so default behaviour of these functions will not change.


Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/asapmath.py

    r2904 r2952  
    10251025
    10261026@asaplog_post_dec
    1027 def _array2dOp( scan, value, mode="ADD", tsys=False, insitu=None):
     1027def _array2dOp( scan, value, mode="ADD", tsys=False, insitu=None, skip_flaggedrow=False):
    10281028    """
    10291029    This function is workaround on the basic operation of scantable
     
    10361036    insitu:  if False, a new scantable is returned.
    10371037             Otherwise, the array operation is done in-sitsu.
     1038    skip_flaggedrow: skip operation for row-flagged spectra.
    10381039    """
    10391040    if insitu is None: insitu = rcParams['insitu']
     
    10441045    stm._setinsitu(insitu)
    10451046    if len( value ) == 1:
    1046         s = scantable( stm._arrayop( scan, value[0], mode, tsys ) )
     1047        s = scantable( stm._arrayop( scan, value[0], mode, tsys, skip_flaggedrow ) )
    10471048    elif len( value ) != nrow:
    10481049        raise ValueError( 'len(value) must be 1 or conform to scan.nrow()' )
     
    10621063            s.set_selection( sel )
    10631064            if len( value[irow] ) == 1:
    1064                 stm._unaryop( s, value[irow][0], mode, tsys )
     1065                stm._unaryop( s, value[irow][0], mode, tsys, skip_flaggedrow )
    10651066            else:
    10661067                #stm._arrayop( s, value[irow], mode, tsys, 'channel' )
    1067                 stm._arrayop( s, value[irow], mode, tsys )
     1068                stm._arrayop( s, value[irow], mode, tsys, skip_flaggedrow )
    10681069        s.set_selection(basesel)
    10691070    return s
  • trunk/python/scantable.py

    r2937 r2952  
    47974797
    47984798    @asaplog_post_dec
    4799     def scale(self, factor, tsys=True, insitu=None):
     4799    def scale(self, factor, tsys=True, insitu=None, skip_flaggedrow=False):
    48004800        """\
    48014801
     
    48134813                         as well as the data
    48144814
     4815            skip_flaggedrow: if True, scaling is NOT executed for
     4816                             row-flagged spectra. default is False.
    48154817        """
    48164818        if insitu is None: insitu = rcParams['insitu']
     
    48234825                                                         numpy.ndarray):
    48244826                from asapmath import _array2dOp
    4825                 s = _array2dOp( self, factor, "MUL", tsys, insitu )
     4827                s = _array2dOp( self, factor, "MUL", tsys, insitu, skip_flaggedrow )
    48264828            else:
    48274829                s = scantable( self._math._arrayop( self, factor,
    4828                                                     "MUL", tsys ) )
     4830                                                    "MUL", tsys, skip_flaggedrow ) )
    48294831        else:
    4830             s = scantable(self._math._unaryop(self, factor, "MUL", tsys))
     4832            s = scantable(self._math._unaryop(self, factor, "MUL", tsys, skip_flaggedrow))
    48314833        s._add_history("scale", varlist)
    48324834        if insitu:
  • trunk/src/STMath.cpp

    r2950 r2952  
    618618                                              float val,
    619619                                              const std::string& mode,
    620                                               bool tsys )
     620                                              bool tsys,
     621                                              bool skip_flaggedrow )
    621622{
    622623  CountedPtr< Scantable > out = getScantable(in, false);
     
    624625  ArrayColumn<Float> specCol(tab,"SPECTRA");
    625626  ArrayColumn<Float> tsysCol(tab,"TSYS");
     627  ScalarColumn<uInt> flagrowCol(tab, "FLAGROW");
    626628  if (mode=="DIV") val = 1.0/val ;
    627629  else if (mode=="SUB") val *= -1.0 ;
     
    629631    Vector<Float> spec;
    630632    Vector<Float> ts;
     633    uInt flagrow;
    631634    specCol.get(i, spec);
    632635    tsysCol.get(i, ts);
     636    flagrowCol.get(i, flagrow);
     637    if (skip_flaggedrow && (flagrow > 0)) continue;
    633638    if (mode == "MUL" || mode == "DIV") {
    634639      //if (mode == "DIV") val = 1.0/val;
     
    656661                                              const std::string& mode,
    657662                                              const std::string& opmode,
    658                                               bool tsys )
     663                                              bool tsys,
     664                                              bool skip_flaggedrow )
    659665{
    660666  CountedPtr< Scantable > out ;
    661667  if ( opmode == "channel" ) {
    662     out = arrayOperateChannel( in, val, mode, tsys ) ;
     668    out = arrayOperateChannel( in, val, mode, tsys, skip_flaggedrow ) ;
    663669  }
    664670  else if ( opmode == "row" ) {
    665     out = arrayOperateRow( in, val, mode, tsys ) ;
     671    out = arrayOperateRow( in, val, mode, tsys, skip_flaggedrow ) ;
    666672  }
    667673  else {
     
    674680                                                     const std::vector<float> val,
    675681                                                     const std::string& mode,
    676                                                      bool tsys )
     682                                                     bool tsys,
     683                                                     bool skip_flaggedrow )
    677684{
    678685  if ( val.size() == 1 ){
     
    721728  ArrayColumn<Float> specCol(tab,"SPECTRA");
    722729  ArrayColumn<Float> tsysCol(tab,"TSYS");
     730  ScalarColumn<uInt> flagrowCol(tab, "FLAGROW");
    723731  if (mode == "DIV") fact = (float)1.0 / fact;
    724732  else if (mode == "SUB") fact *= (float)-1.0 ;
     
    726734    Vector<Float> spec;
    727735    Vector<Float> ts;
     736    uInt flagrow;
    728737    specCol.get(i, spec);
    729738    tsysCol.get(i, ts);
     739    flagrowCol.get(i, flagrow);
     740    if (skip_flaggedrow && (flagrow > 0)) continue;
    730741    if (mode == "MUL" || mode == "DIV") {
    731742      //if (mode == "DIV") fact = (float)1.0 / fact;
     
    752763                                                 const std::vector<float> val,
    753764                                                 const std::string& mode,
    754                                                  bool tsys )
     765                                                 bool tsys,
     766                                                 bool skip_flaggedrow )
    755767{
    756768  if ( val.size() == 1 ) {
     
    788800  ArrayColumn<Float> specCol(tab,"SPECTRA");
    789801  ArrayColumn<Float> tsysCol(tab,"TSYS");
     802  ScalarColumn<uInt> flagrowCol(tab, "FLAGROW");
    790803  if (mode == "DIV") fact = (float)1.0 / fact;
    791804  if (mode == "SUB") fact *= (float)-1.0 ;
     
    793806    Vector<Float> spec;
    794807    Vector<Float> ts;
     808    uInt flagrow;
    795809    specCol.get(i, spec);
    796810    tsysCol.get(i, ts);
     811    flagrowCol.get(i, flagrow);
     812    if (skip_flaggedrow && (flagrow > 0)) continue;
    797813    if (mode == "MUL" || mode == "DIV") {
    798814      spec *= fact[i];
  • trunk/src/STMath.h

    r2919 r2952  
    1515#include <map>
    1616#include <string>
     17#include <iostream>
    1718
    1819#include <casa/aips.h>
     
    117118  casa::CountedPtr<Scantable>
    118119    unaryOperate( const casa::CountedPtr<Scantable>& in, float val,
    119                   const std::string& mode, bool tsys=false );
     120                  const std::string& mode, bool tsys=false,
     121                  bool skip_flaggedrow=false );
    120122
    121123  // array operation
     
    125127                  const std::string& mode,
    126128                  const std::string& opmode="channel", 
    127                   bool tsys=false );
     129                  bool tsys=false,
     130                  bool skip_flaggedrow=false );
    128131
    129132  // channel operation
     
    131134    arrayOperateChannel( const casa::CountedPtr<Scantable>& in,
    132135                         const std::vector<float> val,
    133                          const std::string& mode, bool tsys=false );
     136                         const std::string& mode, bool tsys=false,
     137                         bool skip_flaggedrow=false );
    134138
    135139  // row operation
     
    137141    arrayOperateRow( const casa::CountedPtr<Scantable>& in,
    138142                     const std::vector<float> val,
    139                      const std::string& mode, bool tsys=false );
     143                     const std::string& mode, bool tsys=false,
     144                     bool skip_flaggedrow=false );
    140145
    141146  // 2d array operation
  • trunk/src/STMathWrapper.h

    r2900 r2952  
    7070  ScantableWrapper
    7171    unaryOperate( const ScantableWrapper& in, float val,
    72                   const std::string& mode, bool tsys=false )
    73   { return ScantableWrapper(STMath::unaryOperate(in.getCP(), val, mode, tsys)); }
     72                  const std::string& mode, bool tsys=false,
     73                  bool skip_flaggedrow=false )
     74  { return ScantableWrapper(STMath::unaryOperate(in.getCP(), val, mode, tsys, skip_flaggedrow)); }
    7475
    7576  ScantableWrapper arrayOperate( const ScantableWrapper& in,
    7677                                 const std::vector<float> val,
    7778                                 const std::string& mode,
    78                                  bool tsys=false )
    79   { return ScantableWrapper(STMath::arrayOperateChannel(in.getCP(), val, mode, tsys)); }
     79                                 bool tsys=false,
     80                                 bool skip_flaggedrow=false )
     81  { return ScantableWrapper(STMath::arrayOperateChannel(in.getCP(), val, mode, tsys, skip_flaggedrow)); }
    8082
    8183  ScantableWrapper array2dOperate( const ScantableWrapper& in,
Note: See TracChangeset for help on using the changeset viewer.