source: trunk/src/STMolecules.cpp @ 830

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

added getEntry to support export for STWriter.

File size: 2.4 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(casa::Table::TableType tt) :
31  STSubTable( name_, tt )
32{
33  setup();
34}
35
36
37STMolecules::~STMolecules()
38{
39}
40
41void asap::STMolecules::setup( )
42{
43  // add to base class table
44  table_.addColumn(ScalarColumnDesc<Double>("RESTFREQUENCY"));
45  table_.addColumn(ScalarColumnDesc<String>("NAME"));
46  table_.addColumn(ScalarColumnDesc<String>("FORMATTEDNAME"));
47  table_.rwKeywordSet().define("UNIT", String("Hz"));
48  // new cached columns
49  restfreqCol_.attach(table_,"RESTFREQUENCY");
50  nameCol_.attach(table_,"NAME");
51  formattednameCol_.attach(table_,"FORMATTEDNAME");
52}
53
54uInt STMolecules::addEntry( Double restfreq, const String& name,
55                            const String& formattedname )
56{
57
58  Table result =
59    table_( near(table_.col("RESTFREQUENCY"), restfreq) );
60  uInt resultid = 0;
61  if ( result.nrow() > 0) {
62    ROScalarColumn<uInt> c(result, "ID");
63    c.get(0, resultid);
64  } else {
65    uInt rno = table_.nrow();
66    table_.addRow();
67    // get last assigned _id and increment
68    if ( rno > 0 ) {
69      idCol_.get(rno-1, resultid);
70      resultid++;
71    }
72    restfreqCol_.put(rno, restfreq);
73    nameCol_.put(rno, name);
74    formattednameCol_.put(rno, formattedname);
75    idCol_.put(rno, resultid);
76  }
77  return resultid;
78}
79
80void STMolecules::getEntry( Double restfreq, String& name,
81                            String& formattedname, uInt id )
82{
83  Table t = table_(table_.col("ID") == Int(id) );
84  if (t.nrow() == 0 ) {
85    throw(AipsError("STMolecules::getEntry - id out of range"));
86  }
87  ROTableRow row(t);
88  // get first row - there should only be one matching id
89  const TableRecord& rec = row.get(0);
90  restfreq = rec.asDouble("RESTFREQUENCY");
91  name = rec.asString("NAME");
92  formattedname = rec.asString("FORMATTEDNAME");
93}
94
95} //namespace
Note: See TracBrowser for help on using the repository browser.