Line data Source code
1 : //# Calibrater.h: High-level calibrator object; controls calibration overall
2 : //# Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003
3 : //# Associated Universities, Inc. Washington DC, USA.
4 : //#
5 : //# This library is free software; you can redistribute it and/or modify it
6 : //# under the terms of the GNU Library General Public License as published by
7 : //# the Free Software Foundation; either version 2 of the License, or (at your
8 : //# option) any later version.
9 : //#
10 : //# This library is distributed in the hope that it will be useful, but WITHOUT
11 : //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 : //# License for more details.
14 : //#
15 : //# You should have received a copy of the GNU Library General Public License
16 : //# along with this library; if not, write to the Free Software Foundation,
17 : //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 : //#
19 : //# Correspondence concerning AIPS++ should be addressed as follows:
20 : //# Internet email: casa-feedback@nrao.edu.
21 : //# Postal address: AIPS++ Project Office
22 : //# National Radio Astronomy Observatory
23 : //# 520 Edgemont Road
24 : //#
25 : //# $Id: Calibrater.h,v 19.16 2006/02/14 19:46:23 gmoellen Exp $
26 :
27 : #ifndef SYNTHESIS_CALIBRATER_H
28 : #define SYNTHESIS_CALIBRATER_H
29 :
30 : #include <casacore/casa/aips.h>
31 : #include <casacore/casa/OS/Timer.h>
32 : #include <casacore/casa/Containers/Record.h>
33 : #include <casacore/ms/MeasurementSets/MeasurementSet.h>
34 : #include <casacore/measures/Measures/MRadialVelocity.h>
35 : #include <synthesis/MeasurementEquations/VisEquation.h>
36 : #include <synthesis/MeasurementComponents/VisCal.h>
37 : #include <synthesis/MeasurementComponents/SolvableVisCal.h>
38 : #include <synthesis/MeasurementComponents/VisCalGlobals.h>
39 : #include <casacore/casa/Logging/LogIO.h>
40 : #include <casacore/casa/Logging/LogSink.h>
41 : #include <casacore/ms/MeasurementSets/MSHistoryHandler.h>
42 : #include <casacore/ms/MSSel/MSSelection.h>
43 : #include <msvis/MSVis/VisibilityProcessing.h>
44 : #include <msvis/MSVis/ViFrequencySelection.h>
45 : #include <msvis/MSVis/SimpleSimVi2.h>
46 :
47 :
48 : namespace casa { //# NAMESPACE CASA - BEGIN
49 :
50 : // <summary>Controls the solution of calibration components (Jones Matrices)</summary>
51 :
52 : // Forward declarations
53 : class MSMetaInfoForCal;
54 :
55 : class Calibrater
56 : {
57 :
58 : public:
59 : // Default constructor
60 : Calibrater();
61 :
62 :
63 : // Simple MS-only ctor
64 : Calibrater(casacore::String msname);
65 :
66 : // Simple simulated-data Calibrater
67 : Calibrater(const vi::SimpleSimVi2Parameters& ssvp);
68 :
69 : // Destructor
70 : virtual ~Calibrater();
71 :
72 : // Calibrater factories
73 : static Calibrater* factory(casacore::Bool old=true);
74 : static Calibrater* factory(casacore::String msname,casacore::Bool old=true);
75 :
76 : // Set uv-data selection via MSSelection
77 : virtual void selectvis(const casacore::String& time="",
78 : const casacore::String& spw="",
79 : const casacore::String& scan="",
80 : const casacore::String& field="",
81 : const casacore::String& intent="",
82 : const casacore::String& obsIDs="",
83 : const casacore::String& baseline="",
84 : const casacore::String& uvrange="",
85 : const casacore::String& chanmode="none",
86 0 : const casacore::Int& nchan=1,
87 0 : const casacore::Int& start=0,
88 0 : const casacore::Int& step=1,
89 : const casacore::MRadialVelocity& mStart=casacore::MRadialVelocity(),
90 : const casacore::MRadialVelocity& mStep=casacore::MRadialVelocity(),
91 : const casacore::String& msSelect="");
92 :
93 : // Set up to apply calibration (using casacore::MSSelection syntax)
94 : casacore::Bool setapply (const casacore::String& type,
95 : const casacore::Double& t,
96 : const casacore::String& table,
97 : const casacore::String& spw,
98 : const casacore::String& field,
99 : const casacore::String& interp,
100 : const casacore::Bool& calwt,
101 : const casacore::Vector<casacore::Int>& spwmap,
102 : const casacore::Vector<casacore::Double>& opacity);
103 :
104 : virtual casacore::Bool setapply (const casacore::String& type,
105 : const casacore::Record& applypar);
106 :
107 : // Set up apply-able calibration via a Cal Library
108 0 : virtual casacore::Bool setcallib(casacore::Record /*callib*/) { throw(casacore::AipsError("Calibrater::setcallib not implemented")); };
109 : virtual casacore::Bool setcallib2(casacore::Record callib, const casacore::MeasurementSet* ms=0);
110 : casacore::Bool validatecallib(casacore::Record callib);
111 :
112 : casacore::Bool setmodel(const casacore::String& modelImage);
113 : casacore::Bool setModel(const casacore::Vector<casacore::Double>& stokes);
114 :
115 : // Arrange to solve (using casacore::MSSelection syntax)
116 : casacore::Bool setsolve (const casacore::String& type,
117 : const casacore::String& solint,
118 : const casacore::String& table,
119 : const casacore::Bool append,
120 : const casacore::Double preavg,
121 : const casacore::String& apmode="AP",
122 : const casacore::Int minblperant=4,
123 : const casacore::String& refant="",
124 : const casacore::String& refantmode="flex",
125 : const casacore::Bool solnorm=false,
126 : const casacore::String& normtype="mean",
127 : const casacore::Float minsnr=0.0f,
128 : const casacore::String& combine="",
129 : const casacore::Int fillgaps=0,
130 : const casacore::String& cfcache="",
131 : const casacore::Double painc=360.0,
132 : const casacore::Int fitorder=0,
133 : const casacore::Float fraction=0.1,
134 : const casacore::Int numedge=-1,
135 : const casacore::String& radius="",
136 : const casacore::Bool smooth=true,
137 : const casacore::Bool zerorates=false,
138 : const casacore::Bool globalsolve=true,
139 : const casacore::Int niter=100,
140 : const casacore::String& corrcomb="none",
141 : const casacore::Vector<casacore::Double>& delaywindow=casacore::Vector<casacore::Double>(),
142 : const casacore::Vector<casacore::Double>& ratewindow=casacore::Vector<casacore::Double>(),
143 : const casacore::Vector<casacore::Bool>& paramactive=casacore::Vector<casacore::Bool>(),
144 : const casacore::Bool concatspws=true,
145 : const casacore::String& solmode="",
146 : const casacore::Vector<casacore::Double>& rmsthresh=casacore::Vector<casacore::Double>()
147 : );
148 :
149 : // Arrange to solve for BPOLY (using casacore::MSSelection syntax)
150 : casacore::Bool setsolvebandpoly(const casacore::String& table,
151 : const casacore::Bool& append,
152 : const casacore::String& solint,
153 : const casacore::String& combine,
154 : const casacore::Vector<casacore::Int>& degree,
155 : const casacore::Bool& visnorm,
156 : const casacore::Bool& solnorm,
157 : const casacore::Int& maskcenter,
158 : const casacore::Float& maskedge,
159 : const casacore::String& refant);
160 :
161 : // Arrange to solve for GSPLINE (using casacore::MSSelection syntax)
162 : casacore::Bool setsolvegainspline(const casacore::String& table,
163 : const casacore::Bool& append,
164 : const casacore::String& mode,
165 : const casacore::Double& splinetime,
166 : const casacore::Double& preavg,
167 : const casacore::Int& numpoint,
168 : const casacore::Double& phasewrap,
169 : const casacore::String& refant);
170 :
171 : virtual casacore::Bool setsolve (const casacore::String& type,
172 : const casacore::Record& solvepar);
173 :
174 : // Unset all (default) or one apply calibration component
175 339 : casacore::Bool unsetapply(const casacore::Int& which=-1);
176 : // TBD: casacore::Bool unsetapply(const casacore::String& type); // by type?
177 :
178 : // Unset the solved-for calibration component
179 : casacore::Bool unsetsolve();
180 :
181 : // Set corrDepFlags toggle
182 : casacore::Bool setCorrDepFlags(const casacore::Bool& corrDepFlags = false);
183 :
184 : casacore::Bool setCorrcomb(const casacore::String& corrcomb = "none");
185 :
186 : // Reset the VisCal lists in the Calibrator object
187 : casacore::Bool reset(const casacore::Bool& apply=true,
188 : const casacore::Bool& solve=true);
189 :
190 : // Apply all setapply'd calibration components to DATA and
191 : // deposit in the CORRECTED_DATA column
192 0 : virtual casacore::Bool correct(casacore::String /* mode="calflag"*/) { throw(casacore::AipsError("Calibrater::correct not implemented")); };
193 : casacore::Bool correct2(casacore::String mode="calflag");
194 :
195 : // Apply all setapply'd calibration components to MODEL_DATA and
196 : // deposit in the MODEL_DATA column
197 0 : virtual casacore::Bool corrupt() { return this->corrupt2(); };
198 : casacore::Bool corrupt2();
199 :
200 : // Initialize sigma/weight, and possibly weight_spectrum
201 : casacore::Bool initWeights(casacore::String wtmode, casacore::Bool dowtsp=false);
202 : casacore::Bool initWeights(casacore::Bool doBT=true, casacore::Bool dowtsp=false);
203 : virtual casacore::Bool initWeightsWithTsys(casacore::String wtmode, casacore::Bool dowtsp=false, casacore::String tsystable="",
204 : casacore::String gainfield="", casacore::String interp="linear",
205 : casacore::Vector<casacore::Int> spwmap=casacore::Vector<casacore::Int>());
206 :
207 : // Solve for a given calibration component
208 : virtual casacore::Bool solve();
209 :
210 : // Modelfit
211 0 : virtual casacore::Vector<casacore::Double> modelfit(const casacore::Int& /*iter*/,
212 : const casacore::String& /*stype*/,
213 : const casacore::Vector<casacore::Double>& /*par*/,
214 : const casacore::Vector<casacore::Bool>& /*vary*/,
215 0 : const casacore::String& /*file*/) { throw(casacore::AipsError("Calibrater::modelfit not implemented")); };
216 :
217 : // Fluxscale (using casacore::MSSelection syntax for fields)
218 : void fluxscale(const casacore::String& infile,
219 : const casacore::String& outfile,
220 : const casacore::String& refFields,
221 : const casacore::Vector<casacore::Int>& refSpwMap,
222 : const casacore::String& tranFields,
223 : const casacore::Bool& append,
224 : const casacore::Float& inGainThres,
225 : const casacore::String& antSel,
226 : const casacore::String& timerangeSel,
227 : const casacore::String& scanSel,
228 : SolvableVisCal::fluxScaleStruct& oFluxScaleFactor,
229 : casacore::Vector<casacore::Int>& tranidx,
230 : const casacore::String& oListFile,
231 : const casacore::Bool& incremental,
232 : const casacore::Int& fitorder,
233 : const casacore::Bool& display);
234 :
235 : // Fluxscale (via field indices)
236 : virtual void fluxscale(const casacore::String& infile,
237 : const casacore::String& outfile,
238 : const casacore::Vector<casacore::Int>& refField,
239 : const casacore::Vector<casacore::Int>& refSpwMap,
240 : const casacore::Vector<casacore::Int>& tranField,
241 : const casacore::Bool& append,
242 : const casacore::Float& inGainThres,
243 : const casacore::String& antSel,
244 : const casacore::String& timerangeSel,
245 : const casacore::String& scanSel,
246 : SolvableVisCal::fluxScaleStruct& oFluxScaleFactor,
247 : const casacore::String& oListFile,
248 : const casacore::Bool& incremental,
249 : const casacore::Int& fitorder,
250 : const casacore::Bool& display);
251 :
252 : // Accumulate (using casacore::MSSelection syntax)
253 0 : virtual void accumulate(const casacore::String& /*intab*/,
254 : const casacore::String& /*incrtab*/,
255 : const casacore::String& /*outtab*/,
256 : const casacore::String& /*fields*/,
257 : const casacore::String& /*calFields*/,
258 : const casacore::String& /*interp="linear"*/,
259 : const casacore::Double& /*t=-1.0*/,
260 0 : const casacore::Vector<casacore::Int>& /*spwmap=casacore::Vector<casacore::Int>(1,-1)*/) { throw(casacore::AipsError("Calibrater::accumulate not implemented")); };
261 :
262 : // Generate cal table from specified values
263 : virtual void specifycal(const casacore::String& type,
264 : const casacore::String& caltable,
265 : const casacore::String& time,
266 : const casacore::String& spw,
267 : const casacore::String& antenna,
268 : const casacore::String& pol,
269 : const casacore::Vector<casacore::Double>& parameter,
270 : const casacore::String& infile,
271 : const casacore::Bool& uniform);
272 :
273 : // casacore::Smooth calibration (using casacore::MSSelection syntax
274 : virtual casacore::Bool smooth(const casacore::String& infile,
275 : casacore::String& outfile,
276 : const casacore::String& smoothtype,
277 : const casacore::Double& smoothtime,
278 : const casacore::String& fields,
279 : const bool ratesmooth);
280 :
281 :
282 : // Apply new reference antenna to calibration
283 : virtual casacore::Bool reRefant(const casacore::String& infile,
284 : casacore::String& outfile,
285 : const casacore::String& refantmode,
286 : const casacore::String& refant);
287 :
288 :
289 : // casacore::List a calibration table
290 : virtual casacore::Bool listCal(const casacore::String& infile,
291 : const casacore::String& field,
292 : const casacore::String& antenna,
293 : const casacore::String& spw,
294 : const casacore::String& listfile="",
295 : const casacore::Int& pagerows=50);
296 :
297 : // Initialize the calibrator object from an input MeasurementSet.
298 : // Optional compression of the calibration columns (MODEL_DATA,
299 : // and CORRECTED_DATA) is supported.
300 : //if addScratch=true, optionally one can just add CORRECTED_DATA by
301 : //setting addModel to false
302 : virtual casacore::Bool initialize(casacore::MeasurementSet& inputMS,
303 : casacore::Bool compress=true,
304 : casacore::Bool addScratch=true, casacore::Bool addModel=true);
305 :
306 : // Re-initialize the calibration scratch columns
307 0 : virtual casacore::Bool initCalSet(const casacore::Int& /*calSet*/) { throw(casacore::AipsError("Calibrater::initCalSet not implemented")); };;
308 :
309 : // Display the state in a dictionary
310 : casacore::Record returndict();
311 : // Get all selected spws
312 : casacore::Vector<casacore::Int> getSelectedSpws();
313 : // Get all selected intents
314 : casacore::Vector<casacore::String> getSelectedIntents();
315 : // Get all apply tables
316 : casacore::Vector<casacore::String> getApplyTables();
317 : // Get solve table
318 : casacore::Vector<casacore::String> getSolveTable();
319 : // Get parameters from visibility iterator
320 : casacore::Bool getIteratorSelection(casacore::Vector<casacore::Int>*,
321 : casacore::Vector<casacore::Int>*, casacore::Vector<casacore::Int>*,
322 : casacore::Vector<casacore::Int>*);
323 : // Convert set to casa vector
324 : casacore::Vector<casacore::Int> convertSetToVector(const set<casacore::Int>);
325 : // Report apply/solve state
326 : casacore::Bool state();
327 : casacore::Bool applystate();
328 : casacore::Bool solvestate();
329 :
330 : casacore::Record& getActRec() {return actRec_;};
331 :
332 :
333 : // Handle caltable backward compatibility
334 : static casacore::Bool updateCalTable(const casacore::String& caltable);
335 :
336 : // Return access to the VisEquation
337 0 : VisEquation* ve() { return ve_p; };
338 :
339 : // Returns true if calibrator object is in a valid state
340 : virtual casacore::Bool ok();
341 :
342 : protected:
343 :
344 : casacore::Bool cleanup();
345 :
346 : // Log functions and variables
347 : casacore::LogIO sink_p;
348 : casacore::LogIO& logSink();
349 :
350 : // Method to update casacore::MS HISTORY Table
351 : void writeHistory(casacore::LogIO& os,
352 : casacore::Bool cliCommand=false);
353 :
354 : // casacore::Time functions and variables
355 : casacore::String timerString();
356 : casacore::Timer timer_p;
357 :
358 : // Select on channel using MSSelection
359 : virtual void selectChannel(const casacore::String& spw);
360 :
361 : // Interpret refant index
362 : casacore::Vector<casacore::Int> getRefantIdxList(const casacore::String& refant);
363 :
364 : casacore::Vector<casacore::Int> getAntIdx(const casacore::String& antenna);
365 :
366 : // Interpret field indices (casacore::MSSelection)
367 : casacore::Vector<casacore::Int> getFieldIdx(const casacore::String& fields);
368 :
369 : // Interpret spw indices (casacore::MSSelection)
370 : casacore::Vector<casacore::Int> getSpwIdx(const casacore::String& spws);
371 :
372 : // Interpret spw indices (casacore::MSSelection)
373 : casacore::Matrix<casacore::Int> getChanIdx(const casacore::String& spws);
374 :
375 : // Query apply types to see if we need to calibrate the weights
376 : casacore::Bool calWt();
377 :
378 : // Given a (supplied) list of uncalibrated spws, determines and returns if there were
379 : // any, and if so sends them as a warning message to the logger.
380 : casacore::Bool summarize_uncalspws(const casacore::Vector<casacore::Bool>& uncalspw, const casacore::String& origin,
381 : casacore::Bool strictflag=false);
382 :
383 : // Create a VisSet for raw phase transfer if needed
384 : void getRawPhaseVisSet(casacore::Vector<casacore::Int>& spwid);
385 :
386 : // The standard solving mechanism (VI2/SDB version)
387 : virtual casacore::Bool genericGatherAndSolve();
388 :
389 : // casacore::Input casacore::MeasurementSet and derived selected MeasurementSet
390 : casacore::String msname_p;
391 : casacore::MeasurementSet* ms_p;
392 : casacore::MeasurementSet* mssel_p;
393 : casacore::MeasurementSet* msselRaw_p;
394 :
395 : // casacore::MSSelection object
396 : casacore::MSSelection* mss_p;
397 : std::shared_ptr<vi::FrequencySelections> frequencySelections_p;
398 :
399 : // Meta-info server for calibration
400 : MSMetaInfoForCal* msmc_p;
401 :
402 : // VisEquation derived from the input MeasurementSet
403 : VisEquation* ve_p;
404 :
405 : // VisCals for applying and solving:
406 : casacore::PtrBlock<VisCal*> vc_p;
407 : SolvableVisCal* svc_p;
408 :
409 : // casacore::MeasurementSet selection parameters
410 : casacore::String dataMode_p;
411 : casacore::Int dataNchan_p, dataStart_p, dataStep_p;
412 : casacore::MRadialVelocity mDataStart_p, mDataStep_p;
413 :
414 : //Spline phase wrapping helper params
415 : casacore::Double phasewrap_p;
416 : casacore::Int splinepoint_p;
417 :
418 : //Used to update the casacore::MS HISTORY Table
419 : casacore::Int histLockCounter_p;
420 : casacore::MSHistoryHandler *hist_p;
421 : casacore::Table historytab_p;
422 :
423 : casacore::Bool usingCalLibrary_;
424 :
425 : // Toggle for correlation-dependent flags
426 : // (if false, when one correlation is flagged, all will be treated as flagged, per-antenna, per-channel)
427 : // (CASA tradition is false; use cases where some antennas may only have one polarization, e.g., VLBI need true)
428 : casacore::Bool corrDepFlags_;
429 :
430 : casacore::String corrcomb_;
431 :
432 :
433 : // Activity record
434 : casacore::Record actRec_;
435 : // Results record
436 : casacore::Record resRec_;
437 :
438 : private:
439 : // Copy constructor and assignment operator are forbidden
440 : Calibrater(const Calibrater&);
441 : Calibrater& operator=(const Calibrater&);
442 :
443 : // Simulated-data/testing context info
444 : const bool simdata_p;
445 : const vi::SimpleSimVi2Parameters ssvp_p;
446 :
447 : // configuration for calibration dependent data filter
448 : casacore::Record calFilterConfig_p;
449 : void setCalFilterConfiguration(casacore::String const &type,
450 : casacore::Record const &config);
451 :
452 : };
453 :
454 : // CalCounting objects
455 :
456 : class CalCounts {
457 :
458 : public:
459 : // Constructor
460 : CalCounts();
461 :
462 : // Destructor
463 : virtual ~CalCounts();
464 :
465 : // initialize the shapes
466 : void initCounts(casacore::Int NSpw, casacore::Int NAnt, casacore::Int NPol);
467 :
468 : // Methods for incrementing counts, initializing structure, and converting to record
469 : void addAntennaCounts(casacore::Int spw, casacore::Int NAnt, casacore::Int NPol, std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>>);
470 :
471 : void updateRefants(casacore::Int, casacore::Int, std::map<casacore::Int, std::map<casacore::Int, casacore::Int>>);
472 :
473 : void logRecordInfo(casacore::Int NSpw, casacore::Int NAnt, casacore::Int NPol);
474 :
475 : casacore::Vector<casacore::Int> antMapVal(casacore::Int spw, casacore::Int ant, casacore::String);
476 :
477 : casacore::Vector<casacore::Int> spwMapVal(casacore::Int spw, casacore::String gate);
478 :
479 : casacore::Vector<casacore::Int> totalMapVal(casacore::String);
480 :
481 : casacore::Record makeRecord(casacore::Int, casacore::Int);
482 :
483 : private:
484 :
485 : // Log functions and variables
486 : casacore::LogIO sink_p;
487 : casacore::LogIO& logSink();
488 :
489 : CalCounts(const CalCounts&) {};
490 :
491 : casacore::Int nSpw, nAnt, nPol;
492 :
493 : // Map by spw of maps by ant
494 : // SPW ANT KEY COUNT
495 : std::map<casacore::Int, std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>>> antennaMap_;
496 :
497 : // Map of keys for each spw
498 : std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>> spwMap_;
499 : // Map of the whole ms
500 : std::map<casacore::String, casacore::Vector<casacore::Int>> totalMap_;
501 :
502 : };
503 :
504 : // Preserve old-fashioned Calibrater here:
505 :
506 : class OldCalibrater : public Calibrater
507 : {
508 :
509 : public:
510 : // Default constructor
511 : OldCalibrater();
512 :
513 :
514 : // Simple casacore::MS-only ctor
515 : OldCalibrater(casacore::String msname);
516 :
517 : // Destructor
518 : virtual ~OldCalibrater();
519 :
520 :
521 : // Set uv-data selection via MSSelection
522 : virtual void selectvis(const casacore::String& time="",
523 : const casacore::String& spw="",
524 : const casacore::String& scan="",
525 : const casacore::String& field="",
526 : const casacore::String& intent="",
527 : const casacore::String& obsIDs="",
528 : const casacore::String& baseline="",
529 : const casacore::String& uvrange="",
530 : const casacore::String& chanmode="none",
531 0 : const casacore::Int& nchan=1,
532 0 : const casacore::Int& start=0,
533 0 : const casacore::Int& step=1,
534 : const casacore::MRadialVelocity& mStart=casacore::MRadialVelocity(),
535 : const casacore::MRadialVelocity& mStep=casacore::MRadialVelocity(),
536 : const casacore::String& msSelect="");
537 :
538 : // Uses *vs_p to ctor VisCals
539 : using Calibrater::setapply;
540 : virtual casacore::Bool setapply (const casacore::String& type,
541 : const casacore::Record& applypar);
542 :
543 :
544 : // Set up apply-able calibration via a Cal Library
545 : virtual casacore::Bool setcallib(casacore::Record callib);
546 : virtual casacore::Bool setcallib2(casacore::Record callib, const casacore::MeasurementSet* ms=0);
547 :
548 : // Uses *vs_p to ctor the SolvableVisCal
549 : virtual casacore::Bool setsolve (const casacore::String& type,
550 : const casacore::Record& solvepar);
551 :
552 : // Apply all setapply'd calibration components to DATA and
553 : // deposit in the CORRECTED_DATA column
554 : virtual casacore::Bool correct(casacore::String mode="calflag");
555 :
556 : // Apply all setapply'd calibration components to MODEL_DATA and
557 : // deposit in the MODEL_DATA column
558 : virtual casacore::Bool corrupt();
559 :
560 : // Initialize sigma/weight, and possibly weight_spectrum
561 : // Tsys-specific version (SD)
562 : virtual casacore::Bool initWeightsWithTsys(casacore::String wtmode, casacore::Bool dowtsp=false, casacore::String tsystable="",
563 : casacore::String gainfield="", casacore::String interp="linear",
564 : casacore::Vector<casacore::Int> spwmap=casacore::Vector<casacore::Int>());
565 :
566 :
567 : // Solve for a given calibration component
568 : virtual casacore::Bool solve();
569 :
570 :
571 : // Modelfit
572 : virtual casacore::Vector<casacore::Double> modelfit(const casacore::Int& iter,
573 : const casacore::String& stype,
574 : const casacore::Vector<casacore::Double>& par,
575 : const casacore::Vector<casacore::Bool>& vary,
576 : const casacore::String& file);
577 :
578 : // Fluxscale (via field indices)
579 : // NB: uses *vs_p to make SVCs
580 : virtual void fluxscale(const casacore::String& infile,
581 : const casacore::String& outfile,
582 : const casacore::Vector<casacore::Int>& refField,
583 : const casacore::Vector<casacore::Int>& refSpwMap,
584 : const casacore::Vector<casacore::Int>& tranField,
585 : const casacore::Bool& append,
586 : const casacore::Float& inGainThres,
587 : const casacore::String& antSel,
588 : const casacore::String& timerangeSel,
589 : const casacore::String& scanSel,
590 : SolvableVisCal::fluxScaleStruct& oFluxScaleFactor,
591 : const casacore::String& oListFile,
592 : const casacore::Bool& incremental,
593 : const casacore::Int& fitorder,
594 : const casacore::Bool& display);
595 :
596 : // Accumulate (using casacore::MSSelection syntax)
597 : virtual void accumulate(const casacore::String& intab,
598 : const casacore::String& incrtab,
599 : const casacore::String& outtab,
600 : const casacore::String& fields,
601 : const casacore::String& calFields,
602 : const casacore::String& interp="linear",
603 : const casacore::Double& t=-1.0,
604 : const casacore::Vector<casacore::Int>& spwmap=casacore::Vector<casacore::Int>(1,-1));
605 :
606 : // Generate cal table from specified values
607 : // NB: creates VCs with *vs_p
608 : virtual void specifycal(const casacore::String& type,
609 : const casacore::String& caltable,
610 : const casacore::String& time,
611 : const casacore::String& spw,
612 : const casacore::String& antenna,
613 : const casacore::String& pol,
614 : const casacore::Vector<casacore::Double>& parameter,
615 : const casacore::String& infile,
616 : const casacore::Bool& uniform);
617 :
618 : // casacore::Smooth calibration (using casacore::MSSelection syntax
619 : // NB: uses *vs_p to create SVC
620 : virtual casacore::Bool smooth(const casacore::String& infile,
621 : casacore::String& outfile,
622 : const casacore::String& smoothtype,
623 : const casacore::Double& smoothtime,
624 : const casacore::String& fields,
625 : const bool ratesmooth);
626 :
627 : // casacore::List a calibration table
628 : virtual casacore::Bool listCal(const casacore::String& infile,
629 : const casacore::String& field,
630 : const casacore::String& antenna,
631 : const casacore::String& spw,
632 : const casacore::String& listfile="",
633 : const casacore::Int& pagerows=50);
634 :
635 :
636 : // Initialize the calibrator object from an input MeasurementSet.
637 : // Optional compression of the calibration columns (MODEL_DATA,
638 : // and CORRECTED_DATA) is supported.
639 : //if addScratch=true, optionally one can just add CORRECTED_DATA by
640 : //setting addModel to false
641 : virtual casacore::Bool initialize(casacore::MeasurementSet& inputMS,
642 : casacore::Bool compress=true,
643 : casacore::Bool addScratch=true,
644 : casacore::Bool addModel=true);
645 :
646 : // Re-initialize the calibration scratch columns
647 : virtual casacore::Bool initCalSet(const casacore::Int& calSet);
648 :
649 : casacore::Bool cleanupVisSet();
650 :
651 : protected:
652 :
653 : // Organize sort columns for correction
654 : virtual VisibilityIterator::DataColumn configureForCorrection ();
655 :
656 : // Select on channel using MSSelection
657 : virtual void selectChannel(const casacore::String& spw);
658 :
659 : // Channel mask services
660 : virtual void initChanMask();
661 :
662 : // Select on channel in the VisSet
663 : virtual void selectChannel(const casacore::String& mode,
664 : const casacore::Int& nchan, const casacore::Int& start, const casacore::Int& step,
665 : const casacore::MRadialVelocity& mStart,
666 : const casacore::MRadialVelocity& mStep);
667 :
668 :
669 : // Returns true if calibrator object is in a valid state
670 : virtual casacore::Bool ok();
671 :
672 : // The standard solving mechanism
673 : virtual casacore::Bool genericGatherAndSolve();
674 :
675 : // VisSet that hosts an old VI
676 : VisSet* vs_p;
677 : VisSet* rawvs_p;
678 :
679 : // channel masking
680 : casacore::PtrBlock<casacore::Vector<casacore::Bool>*> chanmask_;
681 :
682 : private:
683 : // Copy constructor and assignment operator are forbidden
684 : OldCalibrater(const OldCalibrater&);
685 : OldCalibrater& operator=(const OldCalibrater&);
686 :
687 :
688 : };
689 :
690 :
691 :
692 :
693 :
694 : } //# NAMESPACE CASA - END
695 :
696 : #endif
|