source: trunk/src/STMolecules.cpp @ 856

Last change on this file since 856 was 856, checked in by mar637, 18 years ago

added name()
reworked copy constructor for (Table tab) to also pass name to base class

File size: 3.0 KB
Line 
1//
2// C++ Implementation: STMolecules
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2006
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include <casa/Exceptions/Error.h>
13#include <tables/Tables/TableDesc.h>
14#include <tables/Tables/SetupNewTab.h>
15#include <tables/Tables/ScaColDesc.h>
16#include <tables/Tables/TableRecord.h>
17#include <tables/Tables/TableParse.h>
18#include <tables/Tables/TableRow.h>
19#include <casa/Containers/RecordField.h>
20
21#include "STMolecules.h"
22
23
24using namespace casa;
25
26namespace asap {
27
28const casa::String STMolecules::name_ = "MOLECULES";
29
30STMolecules::STMolecules(const Scantable& parent) :
31  STSubTable( parent, name_ )
32{
33  setup();
34}
35
36asap::STMolecules::STMolecules( casa::Table tab ) : STSubTable(tab, name_)
37{
38  restfreqCol_.attach(table_,"RESTFREQUENCY");
39  nameCol_.attach(table_,"NAME");
40  formattednameCol_.attach(table_,"FORMATTEDNAME");
41}
42
43STMolecules::~STMolecules()
44{
45}
46
47STMolecules & asap::STMolecules::operator =( const STMolecules & other )
48{
49  if ( this != &other ) {
50    static_cast<STSubTable&>(*this) = other;
51    restfreqCol_.attach(table_,"RESTFREQUENCY");
52    nameCol_.attach(table_,"NAME");
53    formattednameCol_.attach(table_,"FORMATTEDNAME");
54  }
55  return *this;
56}
57
58void asap::STMolecules::setup( )
59{
60  // add to base class table
61  table_.addColumn(ScalarColumnDesc<Double>("RESTFREQUENCY"));
62  table_.addColumn(ScalarColumnDesc<String>("NAME"));
63  table_.addColumn(ScalarColumnDesc<String>("FORMATTEDNAME"));
64  table_.rwKeywordSet().define("UNIT", String("Hz"));
65  // new cached columns
66  restfreqCol_.attach(table_,"RESTFREQUENCY");
67  nameCol_.attach(table_,"NAME");
68  formattednameCol_.attach(table_,"FORMATTEDNAME");
69}
70
71uInt STMolecules::addEntry( Double restfreq, const String& name,
72                            const String& formattedname )
73{
74
75  Table result =
76    table_( near(table_.col("RESTFREQUENCY"), restfreq) );
77  uInt resultid = 0;
78  if ( result.nrow() > 0) {
79    ROScalarColumn<uInt> c(result, "ID");
80    c.get(0, resultid);
81  } else {
82    uInt rno = table_.nrow();
83    table_.addRow();
84    // get last assigned _id and increment
85    if ( rno > 0 ) {
86      idCol_.get(rno-1, resultid);
87      resultid++;
88    }
89    restfreqCol_.put(rno, restfreq);
90    nameCol_.put(rno, name);
91    formattednameCol_.put(rno, formattedname);
92    idCol_.put(rno, resultid);
93  }
94  return resultid;
95}
96
97void STMolecules::getEntry( Double restfreq, String& name,
98                            String& formattedname, uInt id )
99{
100  Table t = table_(table_.col("ID") == Int(id) );
101  if (t.nrow() == 0 ) {
102    throw(AipsError("STMolecules::getEntry - id out of range"));
103  }
104  ROTableRow row(t);
105  // get first row - there should only be one matching id
106  const TableRecord& rec = row.get(0);
107  restfreq = rec.asDouble("RESTFREQUENCY");
108  name = rec.asString("NAME");
109  formattedname = rec.asString("FORMATTEDNAME");
110}
111
112std::vector< double > asap::STMolecules::getRestFrequencies( ) const
113{
114  std::vector<double> out;
115  Vector<Double> rfs = restfreqCol_.getColumn();
116  rfs.tovector(out);
117  return out;
118}
119
120
121}//namespace
122
Note: See TracBrowser for help on using the repository browser.