Changeset 2952 for trunk/src


Ignore:
Timestamp:
06/24/14 19:59:46 (10 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/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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.