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

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

File:
1 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()
Note: See TracChangeset for help on using the changeset viewer.