Changeset 401


Ignore:
Timestamp:
02/09/05 22:28:48 (20 years ago)
Author:
kil064
Message:

add rest freq specification by line name
add function spectraLines to list known lines

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDMemTable.cc

    r395 r401  
    742742// Set reference frame conversion  (requires row)
    743743
    744   MDirection direct = getDirection(whichRow);
     744  MDirection dir = getDirection(whichRow);
    745745  MEpoch epoch = getEpoch(whichRow);
    746746  MPosition pos = getAntennaPosition();
    747   if (!spec.setReferenceConversion(mtype,epoch,pos,direct)) {
     747//
     748  if (!spec.setReferenceConversion(mtype,epoch,pos,dir)) {
    748749    throw(AipsError("Couldn't convert frequency frame."));
    749750  }
     
    13261327}
    13271328
    1328 casa::Bool SDMemTable::setRestFreqs (const casa::Vector<Double>& restFreqs, const String& sUnit,
    1329                                      const casa::String& source,
    1330                                      casa::Int whichIF)
     1329Bool SDMemTable::setRestFreqs (const Vector<Double>& restFreqsIn,
     1330                                     const String& sUnit,
     1331                                     const vector<string>& lines,
     1332                                     const String& source,
     1333                                     Int whichIF)
    13311334{
    13321335   const Int nIFs = nIF();
     
    13351338   }
    13361339
     1340// FInd vector of restfrequencies
     1341// Double takes precedence over String
     1342
     1343   Unit unit;
     1344   Vector<Double> restFreqs;
     1345   if (restFreqsIn.nelements()>0) {
     1346      restFreqs.resize(restFreqsIn.nelements());
     1347      restFreqs = restFreqsIn;
     1348      unit = Unit(sUnit);
     1349   } else if (lines.size()>0) {
     1350      const uInt nLines = lines.size();
     1351      unit = Unit("Hz");
     1352      restFreqs.resize(nLines);
     1353      MFrequency lineFreq;
     1354      for (uInt i=0; i<nLines; i++) {
     1355         String tS(lines[i]);
     1356         tS.upcase();
     1357         if (MeasTable::Line(lineFreq, tS)) {
     1358            restFreqs[i] = lineFreq.getValue().getValue();          // Hz
     1359         } else {
     1360            String s = String(lines[i]) + String(" is an unrecognized spectral line");
     1361            throw(AipsError(s));
     1362         }
     1363      }
     1364   } else {
     1365      throw(AipsError("You have not specified any rest frequencies or lines"));
     1366   }
     1367
    13371368// If multiple restfreqs, must be length nIF. In this
    13381369// case we will just replace the rest frequencies
     
    13401371
    13411372   const uInt nRestFreqs = restFreqs.nelements();
    1342    Unit unit(sUnit);
    13431373   Int idx = -1;
    13441374   SDFrequencyTable sdft = getSDFreqTable();
     
    14081438}
    14091439
     1440void SDMemTable::spectralLines () const
     1441{
     1442   Vector<String> lines = MeasTable::Lines();
     1443   MFrequency lineFreq;
     1444   Double freq;
     1445//
     1446   cerr.flags(std::ios_base::left);
     1447   cerr << "Line      Frequency (Hz)" << endl;
     1448   cerr << "-----------------------" << endl;
     1449   for (uInt i=0; i<lines.nelements(); i++) {
     1450     MeasTable::Line(lineFreq, lines[i]);
     1451     freq = lineFreq.getValue().getValue();          // Hz
     1452//
     1453     cerr << setw(11) << lines[i] << setprecision(10) << freq << endl;
     1454   }
     1455}
    14101456
    14111457void SDMemTable::renumber()
  • trunk/src/SDMemTable.h

    r392 r401  
    120120  virtual casa::Bool setRestFreqs (const casa::Vector<casa::Double>& restFreqs,
    121121                                   const casa::String& unit,
     122                                   const std::vector<std::string>& lines,
    122123                                   const casa::String& source,
    123124                                   casa::Int whichIF=-1);
     125
     126// List lines
     127   void spectralLines() const;
    124128
    125129// Get/Set flux unit
  • trunk/src/SDMemTableWrapper.h

    r392 r401  
    145145  }
    146146
    147   bool setRestFreqs (const std::vector<double>& restfreqs, const std::string& unit,
    148                      const std::string& source, int whichIF) {
     147  bool setRestFreqs(const std::vector<double>& restfreqs,
     148                    const std::string& unit,
     149                    const std::vector<std::string>& lines,
     150                    const std::string& source, int whichIF) {
    149151    casa::Vector<casa::Double> restFreqs2(restfreqs);
    150152    return table_->setRestFreqs(restFreqs2, casa::String(unit),
    151                                 casa::String(source),
     153                                lines, casa::String(source),
    152154                                casa::Int(whichIF));
    153155  }
     156
     157  void spectralLines() const {table_->spectralLines();}
    154158
    155159  std::vector<double> getRestFreqs() {
  • trunk/src/python_SDMemTable.cc

    r392 r401  
    5151    .def("getbeam", &SDMemTableWrapper::getBeam)
    5252    .def("getpol", &SDMemTableWrapper::getPol)
     53    .def("_lines", &SDMemTableWrapper::spectralLines)
    5354    .def("nif", &SDMemTableWrapper::nIF)
    5455    .def("nbeam", &SDMemTableWrapper::nBeam)
Note: See TracChangeset for help on using the changeset viewer.