source: trunk/src/STCalTsysTable.cpp @ 2955

Last change on this file since 2955 was 2955, checked in by Takeshi Nakazato, 10 years ago

New Development: No

JIRA Issue: Yes CAS-6585, CAS-6571

Ready for Test: Yes

Interface Changes: Yes/No?

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...

Added FLAGTRA column to sky and Tsys caltable.
To support previous versions of caltabls that don't have FLAGTRA
column, the code automatically add FLAGTRA column and initialize
it with initial value (uChar)0 if no FLAGTRA exists.


File size: 3.9 KB
Line 
1//
2// C++ Implementation: STCalTsysTable
3//
4// Description:
5//
6//
7// Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp> (C) 2012
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include <assert.h>
13
14#include <casa/Exceptions/Error.h>
15#include <casa/Utilities/Assert.h>
16#include <tables/Tables/TableDesc.h>
17#include <tables/Tables/SetupNewTab.h>
18#include <tables/Tables/ArrColDesc.h>
19#include <tables/Tables/ScaColDesc.h>
20#include <tables/Tables/TableRecord.h>
21#include <tables/Tables/TableIter.h>
22#include <measures/TableMeasures/TableMeasDesc.h>
23#include <measures/TableMeasures/TableMeasRefDesc.h>
24#include <measures/TableMeasures/TableMeasValueDesc.h>
25
26#include "Scantable.h"
27#include "STCalTsysTable.h"
28
29
30using namespace casa;
31
32namespace asap {
33
34const String STCalTsysTable::name_ = "APPLY_TSYS";
35
36STCalTsysTable::STCalTsysTable(const Scantable& parent)
37  : STApplyTable(parent, name_)
38{
39  setup();
40}
41
42STCalTsysTable::STCalTsysTable(const String &name)
43  : STApplyTable(name)
44{
45  if (!table_.tableDesc().isColumn("FLAGTRA")) {
46    LogIO os(LogOrigin("STCalTsysTable", "STCalTsysTable", WHERE));
47    os << "Adding FLAGTRA column to " << name << " with initial value of 0 (all data valid)." << LogIO::POST;
48    table_.addColumn(ArrayColumnDesc<uChar>("FLAGTRA"));
49    TableIterator iter(table_, "IFNO");
50    while (!iter.pastEnd()) {
51      Table t = iter.table();
52      ArrayColumn<Float> tsysCol(t, "TSYS");
53      IPosition shape(2, tsysCol.shape(0)[0], t.nrow());
54      ArrayColumn<uChar> flagtraCol(t, "FLAGTRA");
55      Array<uChar> flagtra(shape, (uChar)0);
56      flagtraCol.putColumn(flagtra);
57      iter.next();
58    }
59  }
60 
61  attachOptionalColumns();
62}
63
64STCalTsysTable::~STCalTsysTable()
65{
66}
67
68void STCalTsysTable::setup()
69{
70  table_.addColumn(ArrayColumnDesc<Float>("TSYS"));
71  table_.addColumn(ArrayColumnDesc<uChar>("FLAGTRA"));
72  table_.addColumn(ScalarColumnDesc<Float>("ELEVATION"));
73
74  table_.rwKeywordSet().define("ApplyType", "CALTSYS");
75
76  attachOptionalColumns();
77}
78
79void STCalTsysTable::attachOptionalColumns()
80{
81  tsysCol_.attach(table_, "TSYS");
82  flagtraCol_.attach(table_, "FLAGTRA");
83  elCol_.attach(table_,"ELEVATION");
84 
85}
86
87void STCalTsysTable::setdata(uInt irow, uInt scanno, uInt cycleno,
88                             uInt beamno, uInt ifno, uInt polno, uInt freqid, 
89                             Double time, Float elevation,
90                             const Vector<Float> &tsys,
91                             const Vector<uChar> &flagtra)
92{
93  if (irow >= (uInt)nrow()) {
94    throw AipsError("row index out of range");
95  }
96
97  if (!sel_.empty()) {
98    os_.origin(LogOrigin("STCalTsysTable","setdata",WHERE));
99    os_ << LogIO::WARN << "Data selection is effective. Specified row index may be wrong." << LogIO::POST;
100  } 
101
102  setbasedata(irow, scanno, cycleno, beamno, ifno, polno, freqid, time);
103  elCol_.put(irow, elevation);
104  tsysCol_.put(irow, tsys);
105  flagtraCol_.put(irow, flagtra);
106}
107
108void STCalTsysTable::appenddata(uInt scanno, uInt cycleno,
109                                uInt beamno, uInt ifno, uInt polno, uInt freqid,
110                                Double time, Float elevation,
111                                const Vector<Float> &tsys,
112                                const Vector<uChar> &flagtra)
113{
114  uInt irow = nrow();
115  table_.addRow(1, True);
116  setdata(irow, scanno, cycleno, beamno, ifno, polno, freqid, time, elevation,
117          tsys, flagtra);
118}
119
120uInt STCalTsysTable::nchan(uInt ifno)
121{
122  STSelector org = sel_;
123  STSelector sel;
124  sel.setIFs(vector<int>(1,(int)ifno));
125  setSelection(sel);
126  uInt n = tsysCol_(0).nelements();
127  unsetSelection();
128  if (!org.empty())
129    setSelection(org);
130  return n;
131}
132
133Vector<Double> STCalTsysTable::getBaseFrequency(uInt whichrow)
134{
135  //assert(whichrow < nrow());
136  assert_<AipsError>(whichrow < nrow(), "row index out of range.");
137  uInt freqid = freqidCol_(whichrow);
138  uInt nc = tsysCol_(whichrow).nelements();
139  Block<Double> f = getFrequenciesRow(freqid);
140  Vector<Double> freqs(nc);
141  indgen(freqs, f[1]-f[0]*f[2], f[2]);
142  return freqs;
143}
144}
Note: See TracBrowser for help on using the repository browser.