source: trunk/src/STCalTsys.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.5 KB
Line 
1//
2// C++ Implementation: STCalTsys
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
13#include <vector>
14
15#include <casa/Arrays/ArrayMath.h>
16#include <casa/Logging/LogIO.h>
17
18#include "STSelector.h"
19#include "STCalTsys.h"
20#include "STDefs.h"
21#include <atnf/PKSIO/SrcType.h>
22
23using namespace std;
24using namespace casa;
25
26namespace asap {
27STCalTsys::STCalTsys(CountedPtr<Scantable> &s, vector<int> &iflist)
28 : STCalibration(s, "TSYS"),
29 iflist_(iflist),
30 tsysspw_(),
31 do_average_(false)
32{
33 applytable_ = new STCalTsysTable(*s);
34}
35
36STCalTsys::STCalTsys(CountedPtr<Scantable> &s, Record &iflist, bool average)
37 : STCalibration(s, "TSYS"),
38 iflist_(),
39 tsysspw_(iflist),
40 do_average_(average)
41{
42 iflist_.resize(tsysspw_.nfields());
43 for (uInt i = 0; i < tsysspw_.nfields(); ++i) {
44 iflist_[i] = std::atoi(tsysspw_.name(i).c_str());
45 }
46 applytable_ = new STCalTsysTable(*s);
47}
48
49void STCalTsys::setupSelector(const STSelector &sel)
50{
51 sel_ = sel;
52 vector<int> ifnos = sel_.getIFs();
53 if (ifnos.size() > 0) {
54 int nif = 0;
55 int nifOrg = iflist_.size();
56 vector<int> iflistNew(iflist_);
57 for (int i = 0; i < nifOrg; i++) {
58 if (find(ifnos.begin(), ifnos.end(), iflist_[i]) != ifnos.end()) {
59 iflistNew[nif] = iflist_[i];
60 ++nif;
61 }
62 }
63 if (nif == 0) {
64 LogIO os(LogOrigin("STCalTsys", "setupSelector", WHERE));
65 os << LogIO::SEVERE << "Selection contains no data." << LogIO::EXCEPTION;
66 }
67 sel_.setIFs(iflistNew);
68 }
69 else {
70 sel_.setIFs(iflist_);
71 }
72}
73
74void STCalTsys::appenddata(uInt scanno, uInt cycleno,
75 uInt beamno, uInt ifno, uInt polno,
76 uInt freqid, Double time, Float elevation,
77 const Vector<Float> &any_data,
78 const Vector<uChar> &channel_flag)
79{
80 STCalTsysTable *p = dynamic_cast<STCalTsysTable *>(&(*applytable_));
81 if (do_average_ && tsysspw_.isDefined(String::toString(ifno))) {
82 LogIO os(LogOrigin("STCalTsys", "appenddata", WHERE));
83 Vector<Float> averaged_data(any_data.size());
84 Vector<uChar> averaged_flag(any_data.size(), 0);
85 Float averaged_value = 0.0;
86 size_t num_value = 0;
87 Vector<Double> channel_range = tsysspw_.asArrayDouble(String::toString(ifno));
88 os << LogIO::DEBUGGING << "do averaging: channel range for IFNO " << ifno << " is " << channel_range << LogIO::POST;
89 for (uInt i = 1; i < channel_range.size(); i += 2) {
90 size_t start = (size_t)channel_range[i-1];
91 size_t end = std::min((size_t)channel_range[i] + 1, averaged_data.size());
92 os << LogIO::DEBUGGING << "start=" << start << ", end=" << end << LogIO::POST;
93 //Vector<Float> segment = any_data(Slice(start, end - 1, 1, False));
94 //averaged_value += sum(segment);
95 //num_value += segment.size();
96 float sum_per_segment = 0.0;
97 for (size_t j = start; j < end; ++j) {
98 sum_per_segment += any_data[j];
99 }
100 averaged_value += sum_per_segment;
101 num_value += end - start;
102 }
103 averaged_value /= (Float)num_value;
104 averaged_data = averaged_value;
105 os << LogIO::DEBUGGING << "averaged_data = " << averaged_data << LogIO::POST;
106 os << LogIO::DEBUGGING << "any_data = " << any_data << LogIO::POST;
107 p->appenddata(scanno, cycleno, beamno, ifno, polno,
108 freqid, time, elevation, averaged_data,
109 averaged_flag);
110 }
111 else {
112 p->appenddata(scanno, cycleno, beamno, ifno, polno,
113 freqid, time, elevation, any_data,
114 channel_flag);
115 }
116}
117
118}
Note: See TracBrowser for help on using the repository browser.