source: trunk/src/STMolecules.cpp@ 863

Last change on this file since 863 was 856, checked in by mar637, 19 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.