Ignore:
Timestamp:
04/08/11 21:06:20 (13 years ago)
Author:
WataruKawasaki
Message:

merged bug fixes from trunk (r2124)

Location:
branches/casa-prerelease/pre-asap
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/casa-prerelease/pre-asap

    • Property svn:mergeinfo changed
      /trunkmerged: 2125
  • branches/casa-prerelease/pre-asap/src

  • branches/casa-prerelease/pre-asap/src/STMath.cpp

    r2103 r2126  
    207207      ROScalarColumn<Double> tmp(tin, "TIME");
    208208      Double td;tmp.get(0,td);
    209       Table basesubt = tin(tin.col("BEAMNO") == Int(rec.asuInt("BEAMNO"))
    210                        && tin.col("IFNO") == Int(rec.asuInt("IFNO"))
    211                        && tin.col("POLNO") == Int(rec.asuInt("POLNO")) );
     209      Table basesubt = tin( tin.col("BEAMNO") == Int(rec.asuInt("BEAMNO"))
     210                         && tin.col("IFNO") == Int(rec.asuInt("IFNO"))
     211                         && tin.col("POLNO") == Int(rec.asuInt("POLNO")) );
    212212      Table subt;
    213213      if ( avmode == "SOURCE") {
    214         subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME") );
     214        subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME"));
    215215      } else if (avmode == "SCAN") {
    216         //subt = basesubt( basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO")) );
    217         subt = basesubt( basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO"))
    218                          && basesubt.col("SRCNAME") == rec.asString("SRCNAME") );
     216        subt = basesubt( basesubt.col("SRCNAME") == rec.asString("SRCNAME")
     217                      && basesubt.col("SCANNO") == Int(rec.asuInt("SCANNO")) );
    219218      } else {
    220219        subt = basesubt;
     
    266265        acc.add(spec, !bflag, tsys, inter, time);
    267266      }
     267
     268      // If there exists a channel at which all the input spectra are masked,
     269      // spec has 'nan' values for that channel and it may affect the following
     270      // processes. To avoid this, replacing 'nan' values in spec with
     271      // weighted-mean of all spectra in the following line.
     272      // (done for CAS-2776, 2011/04/07 by Wataru Kawasaki)
     273      acc.replaceNaN();
    268274    }
    269275    const Vector<Bool>& msk = acc.getMask();
     
    278284      Vector<uChar> flg(msk.shape());
    279285      convertArray(flg, !msk);
     286      for (uInt k = 0; k < flg.nelements(); ++k) {
     287        uChar userFlag = 1 << 7;
     288        if (msk[k]==True) userFlag = 0 << 7;
     289        flg(k) = userFlag;
     290      }
     291
    280292      flagColOut.put(i, flg);
    281293      specColOut.put(i, acc.getSpectrum());
     
    627639  // check if vector size is equal to nrow
    628640  Vector<Float> fact( val ) ;
    629   if ( fact.nelements() != in->nrow() ) {
     641  if (fact.nelements() != uInt(in->nrow())) {
    630642    throw( AipsError("Vector size must be 1 or be same as number of row.") ) ;
    631643  }
     
    688700  // some checks
    689701  vector<uInt> nchans;
    690   for ( uInt i = 0 ; i < in->nrow() ; i++ ) {
    691     nchans.push_back( (in->getSpectrum( i )).size() ) ;
     702  for (Int i = 0 ; i < in->nrow() ; i++) {
     703    nchans.push_back((in->getSpectrum(i)).size());
    692704  }
    693705  //Vector<uInt> mchans( nchans ) ;
     
    22482260  Table outtab = out->table();
    22492261
    2250   const uInt ntau = uInt(tau.size());
     2262  const Int ntau = uInt(tau.size());
    22512263  std::vector<float>::const_iterator tauit = tau.begin();
    22522264  AlwaysAssert((ntau == 1 || ntau == in->nif() || ntau == in->nif() * in->npol()),
     
    22922304{
    22932305  CountedPtr< Scantable > out = getScantable(in, false);
    2294   Table& table = out->table();
    2295   ArrayColumn<Float> specCol(table, "SPECTRA");
    2296   ArrayColumn<uChar> flagCol(table, "FLAGTRA");
    2297   Vector<Float> spec;
    2298   Vector<uChar> flag;
    2299   for ( uInt i=0; i<table.nrow(); ++i) {
    2300     specCol.get(i, spec);
    2301     flagCol.get(i, flag);
    2302     Vector<Bool> mask(flag.nelements());
    2303     convertArray(mask, flag);
    2304     Vector<Float> specout;
    2305     Vector<Bool> maskout;
    2306     if ( kernel == "hanning" ) {
    2307       mathutil::hanning(specout, maskout, spec , !mask);
    2308       convertArray(flag, !maskout);
    2309     } else if (  kernel == "rmedian" ) {
    2310       mathutil::runningMedian(specout, maskout, spec , mask, width);
    2311       convertArray(flag, maskout);
    2312     } else if ( kernel == "poly" ) {
    2313       mathutil::polyfit(specout, maskout, spec, !mask, width, order);
    2314       convertArray(flag, !maskout);
    2315     }
    2316     flagCol.put(i, flag);
    2317     specCol.put(i, specout);
     2306  Table table = out->table();
     2307
     2308  TableIterator iter(table, "IFNO");
     2309  while (!iter.pastEnd()) {
     2310    Table tab = iter.table();
     2311    ArrayColumn<Float> specCol(tab, "SPECTRA");
     2312    ArrayColumn<uChar> flagCol(tab, "FLAGTRA");
     2313    Vector<Float> spec;
     2314    Vector<uChar> flag;
     2315    for (uInt i = 0; i < tab.nrow(); ++i) {
     2316      specCol.get(i, spec);
     2317      flagCol.get(i, flag);
     2318      Vector<Bool> mask(flag.nelements());
     2319      convertArray(mask, flag);
     2320      Vector<Float> specout;
     2321      Vector<Bool> maskout;
     2322      if (kernel == "hanning") {
     2323        mathutil::hanning(specout, maskout, spec, !mask);
     2324        convertArray(flag, !maskout);
     2325      } else if (kernel == "rmedian") {
     2326        mathutil::runningMedian(specout, maskout, spec , mask, width);
     2327        convertArray(flag, maskout);
     2328      } else if (kernel == "poly") {
     2329        mathutil::polyfit(specout, maskout, spec, !mask, width, order);
     2330        convertArray(flag, !maskout);
     2331      }
     2332
     2333      for (uInt j = 0; j < flag.nelements(); ++j) {
     2334        uChar userFlag = 1 << 7;
     2335        if (maskout[j]==True) userFlag = 0 << 7;
     2336        flag(j) = userFlag;
     2337      }
     2338
     2339      flagCol.put(i, flag);
     2340      specCol.put(i, specout);
     2341    }
     2342  ++iter;
    23182343  }
    23192344  return out;
     
    28222847        if (fstart-1 > 0 ) {
    28232848          interp = spec[fstart-1];
    2824           if (fend+1 < spec.nelements()) {
     2849          if (fend+1 < Int(spec.nelements())) {
    28252850            interp = (interp+spec[fend+1])/2.0;
    28262851          }
Note: See TracChangeset for help on using the changeset viewer.