source: branches/alma/src/STMath.h@ 1633

Last change on this file since 1633 was 1633, checked in by Takeshi Nakazato, 16 years ago

New Development: No

JIRA Issue: Yes CAS-1422

Ready to Release: Yes

Interface Changes: Yes

What Interface Changed: Defined calibrate() and almacal() in python/asapmath.py

Defined cwcal() in STMath class

Test Programs: List test programs

Put in Release Notes: Yes

Module(s): task_sdaverage

Description: Describe your changes here...

asapmath.py is changed to be able to calibrate data for APEX.
This modification is tentatively considered a calibration of ALMA
single-dish data. However, it must be updated in the future since
I don't know how raw ALMA data are provided and I have to change
code along with read ALMA data.

The calibrate() function takes calibration mode from its argument and
looks antenna name of the input scantable, and calls appropriate calibration
function depending on the calibration mode and antenna name.
If antenna name include 'APEX' or 'ALMA', newly defined calibration function
apexcal() is called. For other antenna name, one of the existing calibration
functions (calps, calnod, calfs, auto_quotient) is called.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.1 KB
Line 
1//
2// C++ Interface: STMath
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#ifndef ASAPSTMATH_H
13#define ASAPSTMATH_H
14
15#include <string>
16#include <map>
17
18#include <casa/aips.h>
19#include <casa/Utilities/CountedPtr.h>
20#include <casa/BasicSL/String.h>
21#include <casa/Arrays/Vector.h>
22#include <scimath/Mathematics/InterpolateArray1D.h>
23
24#include "Scantable.h"
25#include "STDefs.h"
26#include "STPol.h"
27#include "Logger.h"
28
29namespace asap {
30
31/**
32 * Mathmatical operations on Scantable objects
33 * @author Malte Marquarding
34*/
35class STMath : private Logger {
36public:
37 // typedef for long method name
38 typedef casa::InterpolateArray1D<casa::Double,
39 casa::Float>::InterpolationMethod imethod;
40
41 // typedef for std::map
42 typedef std::map<std::string, imethod> imap;
43
44/**
45 * whether to operate on the given Scantable or return a new one
46 * @param insitu the toggle for this behaviour
47 */
48 explicit STMath(bool insitu=true);
49
50 virtual ~STMath();
51
52 /**
53 * get the currnt @attr inistu_ state
54 */
55 bool insitu() const { return insitu_;};
56
57 /**
58 * set the currnt @attr inistu state
59 * @param b the new state
60 */
61 void setInsitu(bool b) { insitu_ = b; };
62
63
64 /**
65 * average a vector of Scantables
66 * @param in the vector of Scantables to average
67 * @param mask an optional mask to apply on specific weights
68 * @param weight weighting scheme
69 * @param avmode the mode ov averaging. Per "SCAN" or "ALL".
70 * @return a casa::CountedPtr<Scantable> which either holds a new Scantable
71 * or returns the imput pointer.
72 */
73 casa::CountedPtr<Scantable>
74 average( const std::vector<casa::CountedPtr<Scantable> >& in,
75 const std::vector<bool>& mask = std::vector<bool>(),
76 const std::string& weight = "NONE",
77 const std::string& avmode = "SCAN");
78
79 /**
80 * median average a vector of Scantables. See also STMath::average
81 * @param in the Scantable to average
82 * @param mode the averaging mode. Currently only "MEDIAN"
83 * @param avmode the mode ov averaging. Per "SCAN" or "ALL".
84 * @return a casa::CountedPtr<Scantable> which either holds a new Scantable
85 * or returns the imput pointer.
86 */
87 casa::CountedPtr<Scantable>
88 averageChannel( const casa::CountedPtr<Scantable> & in,
89 const std::string& mode = "MEDIAN",
90 const std::string& avmode = "SCAN");
91
92 /**
93 * Average polarisations together. really only useful if only linears are
94 * available.
95 * @param in the input Scantable
96 * @param mask an optional mask if weight allows one
97 * @param weight weighting scheme
98 * @return
99 */
100 casa::CountedPtr< Scantable >
101 averagePolarisations( const casa::CountedPtr< Scantable > & in,
102 const std::vector<bool>& mask,
103 const std::string& weight );
104
105 /**
106 * Average beams together.
107 * @param in the input Scantable
108 * @param mask an optional mask if weight allows one
109 * @param weight weighting scheme
110 * @return
111 */
112 casa::CountedPtr< Scantable >
113 averageBeams( const casa::CountedPtr< Scantable > & in,
114 const std::vector<bool>& mask,
115 const std::string& weight );
116
117 casa::CountedPtr<Scantable>
118 unaryOperate( const casa::CountedPtr<Scantable>& in, float val,
119 const std::string& mode, bool tsys=false );
120
121 casa::CountedPtr<Scantable>
122 binaryOperate( const casa::CountedPtr<Scantable>& left,
123 const casa::CountedPtr<Scantable>& right,
124 const std::string& mode);
125
126 casa::CountedPtr<Scantable> autoQuotient(const casa::CountedPtr<Scantable>& in,
127 const std::string& mode = "NEAREST",
128 bool preserve = true);
129
130 casa::CountedPtr<Scantable> quotient( const casa::CountedPtr<Scantable>& on,
131 const casa::CountedPtr<Scantable>& off,
132 bool preserve = true );
133
134 /**
135 * Calibrate total power scans (translated from GBTIDL)
136 * @param calon uncalibrated Scantable with CAL noise signal
137 * @param caloff uncalibrated Scantable with no CAL signal
138 * @param tcal optional scalar Tcal, CAL temperature (K)
139 * @return casa::CountedPtr<Scantable> which holds a calibrated Scantable
140 * (spectrum - average of the two CAL on and off spectra;
141 * tsys - mean Tsys = <caloff>*Tcal/<calon-caloff> + Tcal/2)
142 */
143 casa::CountedPtr<Scantable> dototalpower( const casa::CountedPtr<Scantable>& calon,
144 const casa::CountedPtr<Scantable>& caloff,
145 casa::Float tcal=1.0 );
146
147 /**
148 * Combine signal and reference scans (translated from GBTIDL)
149 * @param sig Scantable which contains signal scans
150 * @param ref Scantable which contains reference scans
151 * @param smoothref optional Boxcar smooth width of the reference scans
152 * default: no smoothing (=1)
153 * @param tsysv optional scalar Tsys value at the zenith, required to
154 * set tau, as well
155 * @param tau optional scalar Tau value
156 * @return casa::CountedPtr<Scantable> which holds combined scans
157 * (spectrum = (sig-ref)/ref * Tsys )
158 */
159 casa::CountedPtr<Scantable> dosigref( const casa::CountedPtr<Scantable>& sig,
160 const casa::CountedPtr<Scantable>& ref,
161 int smoothref=1,
162 casa::Float tsysv=0.0,
163 casa::Float tau=0.0 );
164
165 /**
166 * Calibrate GBT Nod scan pairs (translated from GBTIDL)
167 * @param s Scantable which contains Nod scans
168 * @param scans Vector of scan numbers
169 * @param smoothref optional Boxcar smooth width of the reference scans
170 * @param tsysv optional scalar Tsys value at the zenith, required to
171 * set tau, as well
172 * @param tau optional scalar Tau value
173 * @param tcal optional scalar Tcal, CAL temperature (K)
174 * @return casa::CountedPtr<Scantable> which holds calibrated scans
175 */
176 casa::CountedPtr<Scantable> donod( const casa::CountedPtr<Scantable>& s,
177 const std::vector<int>& scans,
178 int smoothref=1,
179 casa::Float tsysv=0.0,
180 casa::Float tau=0.0,
181 casa::Float tcal=0.0 );
182
183 /**
184 * Calibrate frequency switched scans (translated from GBTIDL)
185 * @param s Scantable which contains frequency switched scans
186 * @param scans Vector of scan numbers
187 * @param smoothref optional Boxcar smooth width of the reference scans
188 * @param tsysv optional scalar Tsys value at the zenith, required to
189 * set tau, as well
190 * @param tau optional scalar Tau value
191 * @param tcal optional scalar Tcal, CAL temperature (K)
192 * @return casa::CountedPtr<Scantable> which holds calibrated scans
193 */
194 casa::CountedPtr<Scantable> dofs( const casa::CountedPtr<Scantable>& s,
195 const std::vector<int>& scans,
196 int smoothref=1,
197 casa::Float tsysv=0.0,
198 casa::Float tau=0.0,
199 casa::Float tcal=0.0 );
200
201 /**
202 * Calibrate data with Chopper-Wheel like calibration method
203 * which adopts position switching by antenna motion,
204 * wobbler (nutator) switching and On-The-Fly observation.
205 *
206 * The method is applicable to APEX, and other telescopes other than GBT.
207 *
208 * @param a Scantable which contains ON and OFF scans
209 * @param a string that indicates calibration mode
210 * @param a string that indicates antenna name
211 **/
212 casa::CountedPtr<Scantable> cwcal( const casa::CountedPtr<Scantable>& s,
213 const casa::String calmode,
214 const casa::String antname );
215
216 /**
217 * Calibrate frequency switched scans with Chopper-Wheel like
218 * calibration method.
219 *
220 * The method is applicable to APEX, and other telescopes other than GBT.
221 *
222 * @param a Scantable which contains ON and OFF scans
223 * @param a string that indicates antenna name
224 **/
225 casa::CountedPtr<Scantable> cwcalfs( const casa::CountedPtr<Scantable>& s,
226 const casa::String antname );
227
228
229 /**
230 * Folding frequency-switch data
231 * @param sig
232 * @param ref
233 * @param choffset
234 **/
235 casa::CountedPtr<Scantable> dofold( const casa::CountedPtr<Scantable> &sig,
236 const casa::CountedPtr<Scantable> &ref,
237 casa::Double choffset,
238 casa::Double choffset = 0.0 );
239
240 casa::CountedPtr<Scantable>
241 freqSwitch( const casa::CountedPtr<Scantable>& in );
242
243 std::vector<float> statistic(const casa::CountedPtr<Scantable>& in,
244 const std::vector<bool>& mask,
245 const std::string& which);
246
247 std::vector< int > minMaxChan(const casa::CountedPtr<Scantable>& in,
248 const std::vector<bool>& mask,
249 const std::string& which);
250
251 casa::CountedPtr<Scantable> bin( const casa::CountedPtr<Scantable>& in,
252 int width=5);
253 casa::CountedPtr<Scantable>
254 resample(const casa::CountedPtr<Scantable>& in,
255 const std::string& method, float width);
256
257 casa::CountedPtr<Scantable>
258 smooth(const casa::CountedPtr<Scantable>& in, const std::string& kernel,
259 float width);
260
261 casa::CountedPtr<Scantable>
262 gainElevation(const casa::CountedPtr<Scantable>& in,
263 const std::vector<float>& coeff,
264 const std::string& fileName,
265 const std::string& method);
266 casa::CountedPtr<Scantable>
267 convertFlux(const casa::CountedPtr<Scantable>& in, float d,
268 float etaap, float jyperk);
269
270 casa::CountedPtr<Scantable> opacity(const casa::CountedPtr<Scantable>& in,
271 float tau);
272
273 casa::CountedPtr<Scantable>
274 merge(const std::vector<casa::CountedPtr<Scantable> >& in);
275
276 casa::CountedPtr<Scantable>
277 invertPhase( const casa::CountedPtr<Scantable>& in);
278
279 casa::CountedPtr<Scantable>
280 rotateXYPhase( const casa::CountedPtr<Scantable>& in, float phase);
281
282 casa::CountedPtr<Scantable>
283 rotateLinPolPhase( const casa::CountedPtr<Scantable>& in, float phase);
284
285 casa::CountedPtr<Scantable>
286 swapPolarisations(const casa::CountedPtr<Scantable>& in);
287
288 casa::CountedPtr<Scantable>
289 frequencyAlign( const casa::CountedPtr<Scantable>& in,
290 const std::string& refTime = "",
291 const std::string& method = "cubic" );
292
293 casa::CountedPtr<Scantable>
294 convertPolarisation( const casa::CountedPtr<Scantable>& in,
295 const std::string& newtype);
296
297 casa::CountedPtr<Scantable>
298 mxExtract( const casa::CountedPtr<Scantable>& in,
299 const std::string& srctype = "on");
300
301 /**
302 * "hard" flag the data, this flags everything selected in setSelection()
303 * @param frequency the frequency to remove
304 * @param width the number of lags to flag left to the side of the frequency
305 */
306 casa::CountedPtr<Scantable>
307 lagFlag( const casa::CountedPtr<Scantable>& in, double frequency,
308 double width);
309
310 // test for average spectra with different channel/resolution
311 casa::CountedPtr<Scantable>
312 new_average( const std::vector<casa::CountedPtr<Scantable> >& in,
313 const bool& compel,
314 const std::vector<bool>& mask = std::vector<bool>(),
315 const std::string& weight = "NONE",
316 const std::string& avmode = "SCAN" )
317 throw (casa::AipsError) ;
318
319
320private:
321 casa::CountedPtr<Scantable> applyToPol( const casa::CountedPtr<Scantable>& in,
322 STPol::polOperation fptr,
323 casa::Float phase);
324
325 static imethod stringToIMethod(const std::string& in);
326 static WeightType stringToWeight(const std::string& in);
327
328 void scaleByVector(casa::Table& in,
329 const casa::Vector<casa::Float>& factor,
330 bool dotsys);
331
332 void scaleFromAsciiTable(casa::Table& in, const std::string& filename,
333 const std::string& method,
334 const casa::Vector<casa::Float>& xout,
335 bool dotsys);
336
337 void scaleFromTable(casa::Table& in, const casa::Table& table,
338 const std::string& method,
339 const casa::Vector<casa::Float>& xout, bool dotsys);
340
341 void convertBrightnessUnits(casa::CountedPtr<Scantable>& in,
342 bool tokelvin, float cfac);
343
344 casa::CountedPtr< Scantable >
345 smoothOther( const casa::CountedPtr< Scantable >& in,
346 const std::string& kernel,
347 float width );
348
349 casa::CountedPtr< Scantable >
350 getScantable(const casa::CountedPtr< Scantable >& in, bool droprows);
351
352 casa::MaskedArray<casa::Float>
353 maskedArray( const casa::Vector<casa::Float>& s,
354 const casa::Vector<casa::uChar>& f );
355 casa::MaskedArray<casa::Double>
356 maskedArray( const casa::Vector<casa::Double>& s,
357 const casa::Vector<casa::uChar>& f );
358 casa::Vector<casa::uChar>
359 flagsFromMA(const casa::MaskedArray<casa::Float>& ma);
360
361 vector<float> getSpectrumFromTime( string reftime, casa::CountedPtr<Scantable>& s, string mode = "before" ) ;
362 vector<float> getTcalFromTime( string reftime, casa::CountedPtr<Scantable>& s, string mode="before" ) ;
363 vector<int> getRowIdFromTime( string reftime, casa::CountedPtr<Scantable>& s ) ;
364 vector<float> getCalibratedSpectra( casa::CountedPtr<Scantable>& on,
365 casa::CountedPtr<Scantable>& off,
366 casa::CountedPtr<Scantable>& sky,
367 casa::CountedPtr<Scantable>& hot,
368 casa::CountedPtr<Scantable>& cold,
369 int index,
370 string antname ) ;
371 vector<float> getFSCalibratedSpectra( casa::CountedPtr<Scantable>& sig,
372 casa::CountedPtr<Scantable>& ref,
373 casa::CountedPtr<Scantable>& sky,
374 casa::CountedPtr<Scantable>& hot,
375 casa::CountedPtr<Scantable>& cold,
376 int index ) ;
377 vector<float> getFSCalibratedSpectra( casa::CountedPtr<Scantable>& sig,
378 casa::CountedPtr<Scantable>& ref,
379 vector< casa::CountedPtr<Scantable> >& sky,
380 vector< casa::CountedPtr<Scantable> >& hot,
381 vector< casa::CountedPtr<Scantable> >& cold,
382 int index ) ;
383 double getMJD( string strtime ) ;
384
385 bool insitu_;
386};
387
388}
389#endif
Note: See TracBrowser for help on using the repository browser.