source: trunk/src/SDAttr.cc@ 428

Last change on this file since 428 was 394, checked in by kil064, 20 years ago

Detect Year now in selecting beam/aperture efficiency data

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 KB
RevLine 
[353]1//#---------------------------------------------------------------------------
2//# SDAttr.cc: A collection of attributes for different telescopes
3//#---------------------------------------------------------------------------
4//# Copyright (C) 2004
5//# ATNF
6//#
7//# This program is free software; you can redistribute it and/or modify it
8//# under the terms of the GNU General Public License as published by the Free
9//# Software Foundation; either version 2 of the License, or (at your option)
10//# any later version.
11//#
12//# This program is distributed in the hope that it will be useful, but
13//# WITHOUT ANY WARRANTY; without even the implied warranty of
14//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15//# Public License for more details.
16//#
17//# You should have received a copy of the GNU General Public License along
18//# with this program; if not, write to the Free Software Foundation, Inc.,
19//# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
20//#
21//# Correspondence concerning this software should be addressed as follows:
22//# Internet email: Malte.Marquarding@csiro.au
23//# Postal address: Malte Marquarding,
24//# Australia Telescope National Facility,
25//# P.O. Box 76,
26//# Epping, NSW, 2121,
27//# AUSTRALIA
28//#
29//# $Id:
30//#---------------------------------------------------------------------------
31
32#include "SDAttr.h"
33#include <casa/aips.h>
34#include <casa/Arrays/Vector.h>
35#include <casa/Arrays/ArrayMath.h>
36#include <casa/Exceptions.h>
37#include <casa/Quanta/QC.h>
38#include <casa/Quanta/Quantum.h>
[394]39#include <casa/Quanta/MVTime.h>
[353]40
41#include <measures/Measures/MEpoch.h>
42
43#include <scimath/Mathematics/InterpolateArray1D.h>
44
45using namespace casa;
46using namespace asap;
47
48SDAttr::SDAttr ()
49{
[361]50 initData();
[353]51}
52
53SDAttr::SDAttr(const SDAttr& other)
54{
[361]55 initData(); // state just private 'static' data
[353]56}
57
58SDAttr& SDAttr::operator=(const SDAttr& other)
59{
60 if (this != &other) {
61 ; // state just private 'static' data
62 }
63 return *this;
64}
65
66SDAttr::~SDAttr()
67{;}
68
69
70Float SDAttr::diameter (Instrument inst) const
71{
72 Float D = 1.0;
[362]73 switch (inst) {
74 case ATMOPRA:
75 {
76 D = 22.0;
77 }
78 break;
79 case ATPKSMB:
80 case ATPKSHOH:
81 {
82 D = 64.0;
83 }
84 break;
85 case TIDBINBILLA:
86 {
87 D = 70.0;
88 }
89 break;
90 case CEDUNA:
91 {
92 D = 30.0;
93 }
94 break;
95 case HOBART:
96 {
97 D = 26.0;
98 }
99 break;
100 default:
101 {
102 throw(AipsError("Unknown instrument"));
103 }
[353]104 }
105//
106 return D;
107}
108
109Vector<Float> SDAttr::beamEfficiency (Instrument inst, const MEpoch& dateObs, const Vector<Float>& freqs) const
110{
111
112// Look at date where appropriate
113
[394]114 MVTime t(dateObs.getValue());
115 uInt year = t.year();
116//
[353]117 Vector<Float> facs(freqs.nelements(),1.0);
[362]118 switch (inst) {
119 case ATMOPRA:
120 {
[394]121 if (year<2003) {
122 cerr << "There is no beam efficiency data from before 2003 - using 2003 data" << endl;
123 facs = interp (freqs/1.0e9f, MopEtaBeamX_, MopEtaBeam2003Y_);
124 } else if (year==2003) {
125 cerr << "Using beam efficiency data from 2003" << endl;
126 facs = interp (freqs/1.0e9f, MopEtaBeamX_, MopEtaBeam2003Y_);
127 } else {
128 cerr << "Using beam efficiency data from 2004" << endl;
129 facs = interp (freqs/1.0e9f, MopEtaBeamX_, MopEtaBeam2004Y_);
130 }
[362]131 }
132 break;
133 default:
134 {
135 cerr << "No beam efficiency data for this instrument - assuming unity" << endl;
136 }
[353]137 }
138//
139 return facs;
140}
141
142Vector<Float> SDAttr::apertureEfficiency (Instrument inst, const MEpoch& dateObs, const Vector<Float>& freqs) const
143{
144
145// Look at date where appropriate
146
[394]147 MVTime t(dateObs.getValue());
148 uInt year = t.year();
149//
[353]150 Vector<Float> facs(freqs.nelements(),1.0);
[362]151 switch (inst) {
152 case ATMOPRA:
153 {
[394]154 if (year<2004) {
155 cerr << "There is no aperture efficiency data from before 2004 - using 2004 data" << endl;
156 facs = interp (freqs/1.0e9f, MopEtaApX_, MopEtaAp2004Y_);
157 } else {
158 cerr << "Using aperture efficiency data from 2004" << endl;
159 facs = interp (freqs/1.0e9f, MopEtaApX_, MopEtaAp2004Y_);
160 }
[362]161 }
162 break;
163 default:
164 {
165 cerr << "No aperture efficiency data for this instrument - assuming unity" << endl;
166 }
[353]167 }
168 return facs;
169}
170
171Vector<Float> SDAttr::JyPerK (Instrument inst, const MEpoch& dateObs, const Vector<Float>& freqs) const
172{
173
174// FInd what we need
175
176 Vector<Float> etaAp = apertureEfficiency (inst, dateObs, freqs);
177 Float D = diameter(inst);
178
179// Compute it
180
181 Vector<Float> facs(freqs.nelements(),1.0);
182 for (uInt i=0; i<freqs.nelements(); i++) {
183 facs(i) = SDAttr::findJyPerKFac (etaAp(i), D);
184 }
185//
186 return facs;
187}
188
189
190Float SDAttr::findJyPerKFac (Float etaAp, Float D)
191//
192// Converts K -> Jy
193// D in m
194//
195{
196 Double kb = QC::k.getValue(Unit(String("erg/K")));
197 Float gA = C::pi * D * D / 4.0;
198 return (2.0 * 1.0e19 * kb / etaAp / gA);
199}
200
201
[362]202Vector<Float> SDAttr::gainElevationPoly (Instrument inst) const
203{
[353]204
[362]205// Look at date where appropriate
206
207 switch (inst) {
208 case TIDBINBILLA:
209 {
210 return TidGainElPoly_.copy();
211 }
212 break;
213 default:
214 {
215 Vector<Float> t;
216 return t.copy();
217 }
218 }
219}
220
221
222
223
[353]224// Private
225
226Vector<Float> SDAttr::interp (const Vector<Float>& xOut, const Vector<Float>& xIn,
227 const Vector<Float>& yIn) const
228{
229 Int method = 1; // Linear
230 Vector<Float> yOut;
231 Vector<Bool> mOut;
232//
233 Vector<Bool> mIn(xIn.nelements(),True);
234//
235 InterpolateArray1D<Float,Float>::interpolate(yOut, mOut, xOut,
236 xIn, yIn, mIn,
237 method, True, True);
238//
239 return yOut;
240}
241
[361]242void SDAttr::initData ()
243//
244// Mopra data from online Mopra guide.
245//
[362]246{
247
248// Beam efficiency
249
[353]250 MopEtaBeamX_.resize(3);
251 MopEtaBeamX_(0) = 86.0;
252 MopEtaBeamX_(1) = 100.0;
253 MopEtaBeamX_(2) = 115.0;
254//
255 MopEtaBeam2003Y_.resize(3);
256 MopEtaBeam2003Y_(0) = 0.39;
257 MopEtaBeam2003Y_(1) = 0.37;
258 MopEtaBeam2003Y_(2) = 0.37; // replicated from (1)
259//
260 MopEtaBeam2004Y_.resize(3);
261 MopEtaBeam2004Y_(0) = 0.49;
262 MopEtaBeam2004Y_(1) = 0.44;
[361]263 MopEtaBeam2004Y_(2) = 0.42;
[362]264
265// Aperture efficiency
266
[353]267 MopEtaApX_.resize(2);
268 MopEtaApX_(0) = 86.0;
269 MopEtaApX_(1) = 115.0;
270//
271 MopEtaAp2004Y_.resize(2);
272 MopEtaAp2004Y_(0) = 0.33;
273 MopEtaAp2004Y_(1) = 0.24;
[362]274
275// Gain elevation correction polynomial coefficients (for elevation in degrees)
276
277 TidGainElPoly_.resize(3);
278 TidGainElPoly_(0) = 3.58788e-1;
279 TidGainElPoly_(1) = 2.87243e-2;
280 TidGainElPoly_(2) = -3.219093e-4;
[353]281}
Note: See TracBrowser for help on using the repository browser.