source: trunk/src/Calibrator.cpp @ 2720

Last change on this file since 2720 was 2720, checked in by Takeshi Nakazato, 11 years ago

New Development: Yes

JIRA Issue: Yes CAS-4770 and its sub-tickets

Ready for Test: Yes

Interface Changes: 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...

First version of applycal for single dish calibration.
Added new classes for the operation (STApplyCal, Calibrator, PSAlmaCalibrator,
Locator, BisectionLocator?, Interpolator1D, NearestInterpolator1D).
Also, modified existing classes to fit with implementation of applycal.


File size: 2.3 KB
Line 
1//
2// C++ Implementation: Calibrator
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/Arrays/Vector.h>
15#include <casa/Exceptions/Error.h>
16
17#include "Calibrator.h"
18
19using namespace casa;
20
21namespace asap {
22
23Calibrator::Calibrator()
24  : nchan_(0),
25    nchanS_(0),
26    source_(0),
27    ref_(0),
28    ref2_(0),
29    scaler_(0),
30    calibrated_(0)
31{}
32
33Calibrator::Calibrator(unsigned int nchan)
34  : nchan_(nchan),
35    nchanS_(0),
36    source_(0),
37    ref_(0),
38    ref2_(0),
39    scaler_(0),
40    calibrated_(0)
41{}
42
43Calibrator::~Calibrator()
44{
45  freeStorage();
46}
47
48void Calibrator::setSource(Vector<Float> &v)
49{
50  if (nchan_ == 0) {
51    nchan_ = v.nelements();
52    initStorage();
53  }
54  else if (nchan_ != v.nelements()) {
55    freeStorage();
56    nchan_ = v.nelements();
57    initStorage();
58  }
59  set(source_, v);
60}
61
62void Calibrator::set(Float *p, Vector<Float> &v)
63{
64  Float *work = p;
65  for (unsigned int i = 0; i < v.nelements(); i++) {
66    *work = v[i];
67    work++;
68  }
69}
70
71void Calibrator::setReference(Vector<Float> &v)
72{
73  assert(v.nelements() == nchan_);
74  set(ref_, v);
75}
76
77void Calibrator::setReference2(Vector<Float> &v)
78{
79  assert(v.nelements() == nchan_);
80  if (!ref2_)
81    ref2_ = new Float[nchan_];
82  set(ref2_, v);
83}
84
85void Calibrator::setScaler(Vector<Float> &v)
86{
87  assert(v.nelements() == nchan_ || v.nelements() == 1);
88  if (nchanS_ == 0) {
89    nchanS_ = v.nelements();
90    if (!scaler_)
91      scaler_ = new Float[nchanS_];
92  }
93  else if (v.nelements() != nchanS_) {
94    if (scaler_)
95      delete[] scaler_;
96    nchanS_ = v.nelements();
97    scaler_ = new Float[nchanS_];
98  }
99  set(scaler_, v);
100}
101
102void Calibrator::initStorage()
103{
104  freeStorage();
105  source_ = new Float[nchan_];
106  ref_ = new Float[nchan_];
107  calibrated_ = new Float[nchan_];
108}
109
110void Calibrator::freeStorage()
111{
112  if (source_) {
113    delete[] source_;
114    source_ = 0;
115  }
116  if (ref_) {
117    delete[] ref_;
118    ref_ = 0;
119  }
120  if (ref2_) {
121    delete[] ref2_;
122    ref2_ = 0;
123  }
124  if (scaler_) {
125    delete[] scaler_;
126    scaler_ = 0;
127  }
128  if (calibrated_) {
129    delete[] calibrated_;
130    calibrated_ = 0;
131  }
132}
133
134const Vector<Float> Calibrator::getCalibrated()
135{
136  return Vector<Float>(IPosition(1,nchan_), calibrated_, SHARE);
137}
138
139}
Note: See TracBrowser for help on using the repository browser.