Changeset 392


Ignore:
Timestamp:
02/08/05 15:48:11 (19 years ago)
Author:
kil064
Message:

merge SDMemTable::{selectRestFrequcy,setRestFrequencies} into one function,
setRestFrequencies

Location:
trunk/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDContainer.h

    r388 r392  
    7878// 
    7979  casa::Int length() const { return nFreq_;}          // # of stored Frequencies
    80   void setLength(casa::Int length) {nFreq_ = length;}
     80  void setLength(casa::uInt length) {nFreq_ = length;}
    8181
    8282// Get attributes
     
    8686  casa::Float equinox() const { return equinox_; }
    8787  casa::String refFrame() const { return refFrame_; }
     88//
    8889  void restFrequencies(casa::Vector<casa::Double>& rfs,
    8990                       casa::String& rfunit ) const ;
     
    9293  void setEquinox(casa::Float eq) { equinox_ = eq; }
    9394  void setRefFrame(const casa::String& reff) { refFrame_ = reff; }
     95//
     96  void deleteRestFrequencies () {restFreqs_.resize(0);}
    9497  casa::uInt addRestFrequency(casa::Double);
    9598  void setRestFrequencyUnit(const casa::String& theunit) {restFreqUnit_ = theunit;}
  • trunk/src/SDMemTable.cc

    r387 r392  
    795795}
    796796
    797 void SDMemTable::setRestFreqs(std::vector<double> freqs,
    798                               const std::string& theunit)
    799 {
    800   Vector<Double> tvec(freqs);
    801   Quantum<Vector<Double> > q(tvec, String(theunit));
    802   tvec.resize();
    803   tvec = q.getValue("Hz");
    804   Table t = table_.keywordSet().asTable("FREQUENCIES");
    805   t.rwKeywordSet().define("RESTFREQS",tvec);
    806 }
    807797
    808798std::vector<double> SDMemTable::getRestFreqs() const
     
    13361326}
    13371327
    1338 casa::Bool SDMemTable::selectRestFreq (casa::Double restFreq, const String& unit,
    1339                                        const casa::String& source,
    1340                                        casa::Int whichIF)
     1328casa::Bool SDMemTable::setRestFreqs (const casa::Vector<Double>& restFreqs, const String& sUnit,
     1329                                     const casa::String& source,
     1330                                     casa::Int whichIF)
    13411331{
    13421332   const Int nIFs = nIF();
     
    13451335   }
    13461336
    1347 // Find rest frequency.  Add it if necessary
    1348 
     1337// If multiple restfreqs, must be length nIF. In this
     1338// case we will just replace the rest frequencies
     1339//
     1340
     1341   const uInt nRestFreqs = restFreqs.nelements();
     1342   Unit unit(sUnit);
     1343   Int idx = -1;
    13491344   SDFrequencyTable sdft = getSDFreqTable();
    1350    Quantum<Double> rf(restFreq, Unit(unit));
    1351    uInt idx = sdft.addRestFrequency(rf.getValue("Hz"));
     1345
     1346   if (nRestFreqs>1) {
     1347
     1348// Replace restFreqs, one per IF
     1349
     1350      if (nRestFreqs != nIFs) {
     1351         throw (AipsError("Number of rest frequencies must be equal to the number of IFs"));
     1352      }
     1353//
     1354      sdft.deleteRestFrequencies();
     1355      for (uInt i=0; i<nRestFreqs; i++) {
     1356         Quantum<Double> rf(restFreqs[i], unit);
     1357         sdft.addRestFrequency(rf.getValue("Hz"));
     1358      }
     1359   } else {
     1360
     1361// Add new rest freq
     1362
     1363      Quantum<Double> rf(restFreqs[0], unit);
     1364      idx = sdft.addRestFrequency(rf.getValue("Hz"));
     1365   }
    13521366
    13531367// Replace
     
    13621376         srcnCol_.get(i, srcName);
    13631377         restfreqidCol_.get(i,restFreqIDs);       
    1364 //
    1365          if (empty || source==srcName) {
    1366             if (whichIF<0) {
    1367                restFreqIDs = idx;
    1368             } else {             
    1369                restFreqIDs(whichIF) = idx;
     1378//
     1379         if (idx==-1) {
     1380
     1381// Replace vector of restFreqs; one per IF.
     1382// No selection possible
     1383
     1384            for (uInt i=0; i<nIFs; i++) restFreqIDs[i] = i;
     1385         } else {
     1386
     1387// Set RestFreqID for selected data
     1388
     1389            if (empty || source==srcName) {
     1390               if (whichIF<0) {
     1391                  restFreqIDs = idx;
     1392               } else {             
     1393                  restFreqIDs[whichIF] = idx;
     1394               }
    13701395            }
    13711396         }
  • trunk/src/SDMemTable.h

    r386 r392  
    115115
    116116  virtual void setSpectrum(std::vector<float> spectrum, int whichRow=0);
    117   virtual void setRestFreqs(std::vector<double> freqs,
    118                             const std::string& theunit);
    119117  virtual void setCoordInfo(std::vector<string> theinfo);
    120118
    121 // Select RestFreqID.  FInds the restFreq ID for specified restFreq,
    122 // and updates RESTFREQID column of table for specified IF index
    123 // (-1 means all IFs) and source combination
    124   virtual casa::Bool selectRestFreq (casa::Double restFreq, const casa::String& unit,
    125                                      const casa::String& source,
    126                                      casa::Int whichIF=-1);
     119// Set RestFreqID.  source="" and IF=-1 means select all
     120  virtual casa::Bool setRestFreqs (const casa::Vector<casa::Double>& restFreqs,
     121                                   const casa::String& unit,
     122                                   const casa::String& source,
     123                                   casa::Int whichIF=-1);
    127124
    128125// Get/Set flux unit
  • trunk/src/SDMemTableWrapper.h

    r386 r392  
    145145  }
    146146
    147   void setRestFreqs(std::vector<double> freqs, const std::string& theunit) {
    148     table_->setRestFreqs(freqs, theunit);
    149   }
    150 
    151   bool selectRestFreq(double freq, const std::string& unit,
    152                       const std::string& source, int whichIF) {
    153     return table_->selectRestFreq(casa::Double(freq), casa::String(unit),
    154                                   casa::String(source),
    155                                   casa::Int(whichIF));
     147  bool setRestFreqs (const std::vector<double>& restfreqs, const std::string& unit,
     148                     const std::string& source, int whichIF) {
     149    casa::Vector<casa::Double> restFreqs2(restfreqs);
     150    return table_->setRestFreqs(restFreqs2, casa::String(unit),
     151                                casa::String(source),
     152                                casa::Int(whichIF));
    156153  }
    157154
  • trunk/src/python_SDMemTable.cc

    r386 r392  
    8787    .def("_save",  &SDMemTableWrapper::makePersistent)
    8888    .def("_summary",  &SDMemTableWrapper::summary)
     89    .def("_getrestfreqs",  &SDMemTableWrapper::getRestFreqs)
    8990    .def("_setrestfreqs",  &SDMemTableWrapper::setRestFreqs)
    90     .def("_getrestfreqs",  &SDMemTableWrapper::getRestFreqs)
    91     .def("_selectrestfreq",  &SDMemTableWrapper::selectRestFreq)
    9291    .def("_setcoordinfo", &SDMemTableWrapper::setCoordInfo)
    9392    .def("_getcoordinfo", &SDMemTableWrapper::getCoordInfo)
Note: See TracChangeset for help on using the changeset viewer.