Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDMemTable.cc

    r22 r18  
    6565  beamSel_(0),
    6666  polSel_(0) {
    67   Table tab("dummy");
    68   table_ = tab.copyToMemoryTable("dummy");
     67  name_ = String(name);
     68  Table tab(name_);
     69  table_ = tab.copyToMemoryTable(name_);
    6970}
    7071
     
    7475  this->polSel_= other.polSel_;
    7576  this->chanMask_ = other.chanMask_;
     77  this->name_ = String("dummy");
    7678  this->table_ = other.table_.copyToMemoryTable(String("dummy"));
    7779  // clear all rows()
     
    8991  beamSel_(0),
    9092  polSel_(0) {
     93  name_ = String("SDMemTable");
    9194  String exprs = String("select * from $1 where SCANID == ")
    9295    +String::toString(scanID);
    9396  cerr << exprs << endl;
    9497  Table t = tableCommand(exprs,tab);
    95   table_ = t.copyToMemoryTable("dummy");
     98  table_ = t.copyToMemoryTable(name_);
    9699}
    97100
     
    116119  // Now create a new table from the description.
    117120
    118   SetupNewTable aNewTab("dummy", td, Table::New);
     121  SetupNewTable aNewTab(name_, td, Table::New);
    119122  table_ = Table(aNewTab, Table::Memory, 0); 
     123}
     124
     125std::string SDMemTable::name() const {
     126  return name_;
    120127}
    121128
     
    199206  return mask;
    200207}
    201 std::vector<float> SDMemTable::getSpectrum(Int whichRow) {
     208std::vector<float> SDMemTable::getSpectrum(Int whichRow) const {
    202209
    203210  std::vector<float> spectrum;
     
    215222  }
    216223  return spectrum;
    217 }
    218 void SDMemTable::getSpectrum(Vector<Float>& spectrum, Int whichRow=0) {
    219   ROArrayColumn<Float> spec(table_, "SPECTRA");
    220   Array<Float> arr;
    221   spec.get(whichRow, arr);
    222   spectrum.resize(arr.shape()(3));
    223   ArrayAccessor<Float, Axis<0> > aa0(arr);
    224   aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam
    225   ArrayAccessor<Float, Axis<1> > aa1(aa0);
    226   aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF
    227   ArrayAccessor<Float, Axis<2> > aa2(aa1);
    228   aa2.reset(aa2.begin(uInt(polSel_)));// go to pol
    229 
    230   ArrayAccessor<Float, Axis<0> > va(spectrum);
    231   for (ArrayAccessor<Float, Axis<3> > i(aa2); i != i.end(); ++i) {
    232     (*va) = (*i);
    233     va++;
    234   }
    235 }
    236 
    237 void SDMemTable::getMask(Vector<Bool>& mask, Int whichRow=0) const {
    238   ROArrayColumn<uChar> spec(table_, "FLAGTRA");
    239   Array<uChar> arr;
    240   spec.get(whichRow, arr);
    241   mask.resize(arr.shape()(3));
    242 
    243   ArrayAccessor<uChar, Axis<0> > aa0(arr);
    244   aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam
    245   ArrayAccessor<uChar, Axis<1> > aa1(aa0);
    246   aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF
    247   ArrayAccessor<uChar, Axis<2> > aa2(aa1);
    248   aa2.reset(aa2.begin(uInt(polSel_)));// go to pol
    249 
    250   Bool useUserMask = ( chanMask_.size() == arr.shape()(3) );
    251  
    252   ArrayAccessor<Bool, Axis<0> > va(mask);
    253   std::vector<bool> tmp;
    254   tmp = chanMask_; // WHY the fxxx do I have to make a copy here. The
    255                    // iterator should work on chanMask_??
    256   std::vector<bool>::iterator miter;
    257   miter = tmp.begin();
    258 
    259   for (ArrayAccessor<uChar, Axis<3> > i(aa2); i != i.end(); ++i) {
    260     bool out =!static_cast<bool>(*i);
    261     if (useUserMask) {
    262       out = out && (*miter);
    263       miter++;
    264     }
    265     (*va) = out;
    266     va++;
    267   } 
    268224}
    269225
     
    347303}
    348304
    349 SDContainer SDMemTable::getSDContainer(uInt whichRow) const {
    350   ROScalarColumn<Double> mjd(table_, "TIME");
    351   ROScalarColumn<String> srcn(table_, "SRCNAME");
    352   ROArrayColumn<Float> spec(table_, "SPECTRA");
    353   ROArrayColumn<uChar> flags(table_, "FLAGTRA");
    354   ROArrayColumn<Float> ts(table_, "TSYS");
    355   ROScalarColumn<Int> scan(table_, "SCANID");
    356   ROScalarColumn<Double> integr(table_, "INTERVAL");
    357 
    358   SDContainer sdc(nBeam(),nIF(),nPol(),nChan());
    359   mjd.get(whichRow, sdc.timestamp);
    360   srcn.get(whichRow, sdc.sourcename);
    361   integr.get(whichRow, sdc.interval);
    362   scan.get(whichRow, sdc.scanid);
    363   Array<Float> spectrum;
    364   Array<Float> tsys;
    365   Array<uChar> flagtrum;
    366   spec.get(whichRow, spectrum);
    367   sdc.putSpectrum(spectrum);
    368   flags.get(whichRow, flagtrum);
    369   sdc.putFlags(flagtrum);
    370   ts.get(whichRow, tsys);
    371   sdc.putTsys(tsys);
    372   return sdc;
    373 }
    374305bool SDMemTable::putSDHeader(const SDHeader& sdh) {
    375306  table_.lock();
     
    391322  cerr << "Table Header set" << endl;
    392323  return true;
    393 }\
    394 
    395 SDHeader SDMemTable::getSDHeader() const {
    396   SDHeader sdh;
    397   table_.keywordSet().get("nBeam",sdh.nbeam);
    398   table_.keywordSet().get("nIF",sdh.nif);
    399   table_.keywordSet().get("nPol",sdh.npol);
    400   table_.keywordSet().get("nChan",sdh.nchan);
    401   table_.keywordSet().get("Observer", sdh.observer);
    402   table_.keywordSet().get("Project", sdh.project);
    403   table_.keywordSet().get("Obstype", sdh.obstype);
    404   table_.keywordSet().get("AntennaName", sdh.antennaname);
    405   table_.keywordSet().get("AntennaPosition", sdh.antennaposition);
    406   table_.keywordSet().get("Equinox", sdh.equinox);
    407   table_.keywordSet().get("FreqRefFrame", sdh.freqref);
    408   table_.keywordSet().get("FreqRefVal", sdh.reffreq);
    409   table_.keywordSet().get("Bandwidth", sdh.bandwidth);
    410   table_.keywordSet().get("UTC", sdh.utc);
    411   return sdh;
    412 }
     324}
     325
    413326void SDMemTable::makePersistent(const std::string& filename) {
    414327  table_.deepCopy(filename,Table::New);
     
    463376  return n;
    464377}
     378
    465379/*
    466380void SDMemTable::maskChannels(const std::vector<Int>& whichChans ) {
Note: See TracChangeset for help on using the changeset viewer.