Changeset 21 for trunk/src


Ignore:
Timestamp:
07/05/04 18:09:31 (20 years ago)
Author:
mmarquar
Message:

Added retrieval functions for SDHeader and SDContainer.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDMemTable.cc

    r18 r21  
    206206  return mask;
    207207}
    208 std::vector<float> SDMemTable::getSpectrum(Int whichRow) const {
     208std::vector<float> SDMemTable::getSpectrum(Int whichRow) {
    209209
    210210  std::vector<float> spectrum;
     
    222222  }
    223223  return spectrum;
     224}
     225void SDMemTable::getSpectrum(Vector<Float>& spectrum, Int whichRow=0) {
     226  ROArrayColumn<Float> spec(table_, "SPECTRA");
     227  Array<Float> arr;
     228  spec.get(whichRow, arr);
     229  spectrum.resize(arr.shape()(3));
     230  ArrayAccessor<Float, Axis<0> > aa0(arr);
     231  aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam
     232  ArrayAccessor<Float, Axis<1> > aa1(aa0);
     233  aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF
     234  ArrayAccessor<Float, Axis<2> > aa2(aa1);
     235  aa2.reset(aa2.begin(uInt(polSel_)));// go to pol
     236
     237  ArrayAccessor<Float, Axis<0> > va(spectrum);
     238  for (ArrayAccessor<Float, Axis<3> > i(aa2); i != i.end(); ++i) {
     239    (*va) = (*i);
     240    va++;
     241  }
     242}
     243
     244void SDMemTable::getMask(Vector<Bool>& mask, Int whichRow=0) const {
     245  ROArrayColumn<uChar> spec(table_, "FLAGTRA");
     246  Array<uChar> arr;
     247  spec.get(whichRow, arr);
     248  mask.resize(arr.shape()(3));
     249
     250  ArrayAccessor<uChar, Axis<0> > aa0(arr);
     251  aa0.reset(aa0.begin(uInt(beamSel_)));//go to beam
     252  ArrayAccessor<uChar, Axis<1> > aa1(aa0);
     253  aa1.reset(aa1.begin(uInt(IFSel_)));// go to IF
     254  ArrayAccessor<uChar, Axis<2> > aa2(aa1);
     255  aa2.reset(aa2.begin(uInt(polSel_)));// go to pol
     256
     257  Bool useUserMask = ( chanMask_.size() == arr.shape()(3) );
     258 
     259  ArrayAccessor<Bool, Axis<0> > va(mask);
     260  std::vector<bool> tmp;
     261  tmp = chanMask_; // WHY the fxxx do I have to make a copy here. The
     262                   // iterator should work on chanMask_??
     263  std::vector<bool>::iterator miter;
     264  miter = tmp.begin();
     265
     266  for (ArrayAccessor<uChar, Axis<3> > i(aa2); i != i.end(); ++i) {
     267    bool out =!static_cast<bool>(*i);
     268    if (useUserMask) {
     269      out = out && (*miter);
     270      miter++;
     271    }
     272    (*va) = out;
     273    va++;
     274  } 
    224275}
    225276
     
    303354}
    304355
     356SDContainer SDMemTable::getSDContainer(uInt whichRow) const {
     357  ROScalarColumn<Double> mjd(table_, "TIME");
     358  ROScalarColumn<String> srcn(table_, "SRCNAME");
     359  ROArrayColumn<Float> spec(table_, "SPECTRA");
     360  ROArrayColumn<uChar> flags(table_, "FLAGTRA");
     361  ROArrayColumn<Float> ts(table_, "TSYS");
     362  ROScalarColumn<Int> scan(table_, "SCANID");
     363  ROScalarColumn<Double> integr(table_, "INTERVAL");
     364
     365  SDContainer sdc(nBeam(),nIF(),nPol(),nChan());
     366  mjd.get(whichRow, sdc.timestamp);
     367  srcn.get(whichRow, sdc.sourcename);
     368  integr.get(whichRow, sdc.interval);
     369  scan.get(whichRow, sdc.scanid);
     370  Array<Float> spectrum;
     371  Array<Float> tsys;
     372  Array<uChar> flagtrum;
     373  spec.get(whichRow, spectrum);
     374  sdc.putSpectrum(spectrum);
     375  flags.get(whichRow, flagtrum);
     376  sdc.putFlags(flagtrum);
     377  ts.get(whichRow, tsys);
     378  sdc.putTsys(tsys);
     379  return sdc;
     380}
    305381bool SDMemTable::putSDHeader(const SDHeader& sdh) {
    306382  table_.lock();
     
    322398  cerr << "Table Header set" << endl;
    323399  return true;
    324 }
    325 
     400}\
     401
     402SDHeader SDMemTable::getSDHeader() const {
     403  SDHeader sdh;
     404  table_.keywordSet().get("nBeam",sdh.nbeam);
     405  table_.keywordSet().get("nIF",sdh.nif);
     406  table_.keywordSet().get("nPol",sdh.npol);
     407  table_.keywordSet().get("nChan",sdh.nchan);
     408  table_.keywordSet().get("Observer", sdh.observer);
     409  table_.keywordSet().get("Project", sdh.project);
     410  table_.keywordSet().get("Obstype", sdh.obstype);
     411  table_.keywordSet().get("AntennaName", sdh.antennaname);
     412  table_.keywordSet().get("AntennaPosition", sdh.antennaposition);
     413  table_.keywordSet().get("Equinox", sdh.equinox);
     414  table_.keywordSet().get("FreqRefFrame", sdh.freqref);
     415  table_.keywordSet().get("FreqRefVal", sdh.reffreq);
     416  table_.keywordSet().get("Bandwidth", sdh.bandwidth);
     417  table_.keywordSet().get("UTC", sdh.utc);
     418  return sdh;
     419}
    326420void SDMemTable::makePersistent(const std::string& filename) {
    327421  table_.deepCopy(filename,Table::New);
     
    376470  return n;
    377471}
    378 
    379472/*
    380473void SDMemTable::maskChannels(const std::vector<Int>& whichChans ) {
  • trunk/src/SDMemTable.h

    r19 r21  
    6969  virtual bool putSDHeader(const SDHeader& sdh);
    7070  virtual bool putSDFreqTable(const SDFrequencyTable& sdft) {;}
     71
     72  //get the dat wrapped up in a meta container
     73  virtual SDContainer getSDContainer(uInt whichRow=0) const;
     74  virtual SDHeader getSDHeader() const;
    7175 
    7276  // get spectrum,mask and tsys for the given row, at the selected
    73   // cursor
    74   virtual std::vector<float> getSpectrum(Int whichRow) const;
     77  // cursor - all as stl vectors
     78  virtual std::vector<float> getSpectrum(Int whichRow);
    7579  virtual std::vector<bool> getMask(Int whichRow) const;
     80
    7681  virtual Float getTsys(Int whichRow) const;
     82  // get all as aips++ Vectors
     83  virtual void getSpectrum(Vector<Float>& spectrum, Int whichRow=0);
     84  virtual void getMask(Vector<Bool>& mask,Int whichRow=0) const;
    7785
    78   // get info fro current row
     86  // get info for current row
    7987  virtual Double getTime(Int whichRow) const ;
    8088  virtual std::string getSourceName(Int whichRow) const;
     
    104112  SDMemTable getScan(Int scanID);
    105113
    106   const TableRecord& getHeader() const {;}
     114  const TableRecord& getHeader() const {return table_.keywordSet();}
    107115  // get a handle to the "raw" aips++ table
    108116  const Table& table() { return table_; }
Note: See TracChangeset for help on using the changeset viewer.