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 0 : 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 :
280 :
281 : // Apply new reference antenna to calibration
282 : virtual casacore::Bool reRefant(const casacore::String& infile,
283 : casacore::String& outfile,
284 : const casacore::String& refantmode,
285 : const casacore::String& refant);
286 :
287 :
288 : // casacore::List a calibration table
289 : virtual casacore::Bool listCal(const casacore::String& infile,
290 : const casacore::String& field,
291 : const casacore::String& antenna,
292 : const casacore::String& spw,
293 : const casacore::String& listfile="",
294 : const casacore::Int& pagerows=50);
295 :
296 : // Initialize the calibrator object from an input MeasurementSet.
297 : // Optional compression of the calibration columns (MODEL_DATA,
298 : // and CORRECTED_DATA) is supported.
299 : //if addScratch=true, optionally one can just add CORRECTED_DATA by
300 : //setting addModel to false
301 : virtual casacore::Bool initialize(casacore::MeasurementSet& inputMS,
302 : casacore::Bool compress=true,
303 : casacore::Bool addScratch=true, casacore::Bool addModel=true);
304 :
305 : // Re-initialize the calibration scratch columns
306 0 : virtual casacore::Bool initCalSet(const casacore::Int& /*calSet*/) { throw(casacore::AipsError("Calibrater::initCalSet not implemented")); };;
307 :
308 : // Display the state in a dictionary
309 : casacore::Record returndict();
310 : // Get all selected spws
311 : casacore::Vector<casacore::Int> getSelectedSpws();
312 : // Get all selected intents
313 : casacore::Vector<casacore::String> getSelectedIntents();
314 : // Get all apply tables
315 : casacore::Vector<casacore::String> getApplyTables();
316 : // Get solve table
317 : casacore::Vector<casacore::String> getSolveTable();
318 : // Get parameters from visibility iterator
319 : casacore::Bool getIteratorSelection(casacore::Vector<casacore::Int>*,
320 : casacore::Vector<casacore::Int>*, casacore::Vector<casacore::Int>*,
321 : casacore::Vector<casacore::Int>*);
322 : // Convert set to casa vector
323 : casacore::Vector<casacore::Int> convertSetToVector(const set<casacore::Int>);
324 : // Report apply/solve state
325 : casacore::Bool state();
326 : casacore::Bool applystate();
327 : casacore::Bool solvestate();
328 :
329 : casacore::Record& getActRec() {return actRec_;};
330 :
331 :
332 : // Handle caltable backward compatibility
333 : static casacore::Bool updateCalTable(const casacore::String& caltable);
334 :
335 : // Return access to the VisEquation
336 0 : VisEquation* ve() { return ve_p; };
337 :
338 : // Returns true if calibrator object is in a valid state
339 : virtual casacore::Bool ok();
340 :
341 : protected:
342 :
343 : casacore::Bool cleanup();
344 :
345 : // Log functions and variables
346 : casacore::LogIO sink_p;
347 : casacore::LogIO& logSink();
348 :
349 : // Method to update casacore::MS HISTORY Table
350 : void writeHistory(casacore::LogIO& os,
351 : casacore::Bool cliCommand=false);
352 :
353 : // casacore::Time functions and variables
354 : casacore::String timerString();
355 : casacore::Timer timer_p;
356 :
357 : // Select on channel using MSSelection
358 : virtual void selectChannel(const casacore::String& spw);
359 :
360 : // Interpret refant index
361 : casacore::Vector<casacore::Int> getRefantIdxList(const casacore::String& refant);
362 :
363 : casacore::Vector<casacore::Int> getAntIdx(const casacore::String& antenna);
364 :
365 : // Interpret field indices (casacore::MSSelection)
366 : casacore::Vector<casacore::Int> getFieldIdx(const casacore::String& fields);
367 :
368 : // Interpret spw indices (casacore::MSSelection)
369 : casacore::Vector<casacore::Int> getSpwIdx(const casacore::String& spws);
370 :
371 : // Interpret spw indices (casacore::MSSelection)
372 : casacore::Matrix<casacore::Int> getChanIdx(const casacore::String& spws);
373 :
374 : // Query apply types to see if we need to calibrate the weights
375 : casacore::Bool calWt();
376 :
377 : // Given a (supplied) list of uncalibrated spws, determines and returns if there were
378 : // any, and if so sends them as a warning message to the logger.
379 : casacore::Bool summarize_uncalspws(const casacore::Vector<casacore::Bool>& uncalspw, const casacore::String& origin,
380 : casacore::Bool strictflag=false);
381 :
382 : // Create a VisSet for raw phase transfer if needed
383 : void getRawPhaseVisSet(casacore::Vector<casacore::Int>& spwid);
384 :
385 : // The standard solving mechanism (VI2/SDB version)
386 : virtual casacore::Bool genericGatherAndSolve();
387 :
388 : // casacore::Input casacore::MeasurementSet and derived selected MeasurementSet
389 : casacore::String msname_p;
390 : casacore::MeasurementSet* ms_p;
391 : casacore::MeasurementSet* mssel_p;
392 : casacore::MeasurementSet* msselRaw_p;
393 :
394 : // casacore::MSSelection object
395 : casacore::MSSelection* mss_p;
396 : std::shared_ptr<vi::FrequencySelections> frequencySelections_p;
397 :
398 : // Meta-info server for calibration
399 : MSMetaInfoForCal* msmc_p;
400 :
401 : // VisEquation derived from the input MeasurementSet
402 : VisEquation* ve_p;
403 :
404 : // VisCals for applying and solving:
405 : casacore::PtrBlock<VisCal*> vc_p;
406 : SolvableVisCal* svc_p;
407 :
408 : // casacore::MeasurementSet selection parameters
409 : casacore::String dataMode_p;
410 : casacore::Int dataNchan_p, dataStart_p, dataStep_p;
411 : casacore::MRadialVelocity mDataStart_p, mDataStep_p;
412 :
413 : //Spline phase wrapping helper params
414 : casacore::Double phasewrap_p;
415 : casacore::Int splinepoint_p;
416 :
417 : //Used to update the casacore::MS HISTORY Table
418 : casacore::Int histLockCounter_p;
419 : casacore::MSHistoryHandler *hist_p;
420 : casacore::Table historytab_p;
421 :
422 : casacore::Bool usingCalLibrary_;
423 :
424 : // Toggle for correlation-dependent flags
425 : // (if false, when one correlation is flagged, all will be treated as flagged, per-antenna, per-channel)
426 : // (CASA tradition is false; use cases where some antennas may only have one polarization, e.g., VLBI need true)
427 : casacore::Bool corrDepFlags_;
428 :
429 : casacore::String corrcomb_;
430 :
431 :
432 : // Activity record
433 : casacore::Record actRec_;
434 : // Results record
435 : casacore::Record resRec_;
436 :
437 : private:
438 : // Copy constructor and assignment operator are forbidden
439 : Calibrater(const Calibrater&);
440 : Calibrater& operator=(const Calibrater&);
441 :
442 : // Simulated-data/testing context info
443 : const bool simdata_p;
444 : const vi::SimpleSimVi2Parameters ssvp_p;
445 :
446 : // configuration for calibration dependent data filter
447 : casacore::Record calFilterConfig_p;
448 : void setCalFilterConfiguration(casacore::String const &type,
449 : casacore::Record const &config);
450 :
451 : };
452 :
453 : // CalCounting objects
454 :
455 : class CalCounts {
456 :
457 : public:
458 : // Constructor
459 : CalCounts();
460 :
461 : // Destructor
462 : virtual ~CalCounts();
463 :
464 : // initialize the shapes
465 : void initCounts(casacore::Int NSpw, casacore::Int NAnt, casacore::Int NPol);
466 :
467 : // Methods for incrementing counts, initializing structure, and converting to record
468 : void addAntennaCounts(casacore::Int spw, casacore::Int NAnt, casacore::Int NPol, std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>>);
469 :
470 : void updateRefants(casacore::Int, casacore::Int, std::map<casacore::Int, std::map<casacore::Int, casacore::Int>>);
471 :
472 : void logRecordInfo(casacore::Int NSpw, casacore::Int NAnt, casacore::Int NPol);
473 :
474 : casacore::Vector<casacore::Int> antMapVal(casacore::Int spw, casacore::Int ant, casacore::String);
475 :
476 : casacore::Vector<casacore::Int> spwMapVal(casacore::Int spw, casacore::String gate);
477 :
478 : casacore::Vector<casacore::Int> totalMapVal(casacore::String);
479 :
480 : casacore::Record makeRecord(casacore::Int, casacore::Int);
481 :
482 : private:
483 :
484 : // Log functions and variables
485 : casacore::LogIO sink_p;
486 : casacore::LogIO& logSink();
487 :
488 : CalCounts(const CalCounts&) {};
489 :
490 : casacore::Int nSpw, nAnt, nPol;
491 :
492 : // Map by spw of maps by ant
493 : // SPW ANT KEY COUNT
494 : std::map<casacore::Int, std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>>> antennaMap_;
495 :
496 : // Map of keys for each spw
497 : std::map<casacore::Int, std::map<casacore::String, casacore::Vector<casacore::Int>>> spwMap_;
498 : // Map of the whole ms
499 : std::map<casacore::String, casacore::Vector<casacore::Int>> totalMap_;
500 :
501 : };
502 :
503 : // Preserve old-fashioned Calibrater here:
504 :
505 : class OldCalibrater : public Calibrater
506 : {
507 :
508 : public:
509 : // Default constructor
510 : OldCalibrater();
511 :
512 :
513 : // Simple casacore::MS-only ctor
514 : OldCalibrater(casacore::String msname);
515 :
516 : // Destructor
517 : virtual ~OldCalibrater();
518 :
519 :
520 : // Set uv-data selection via MSSelection
521 : virtual void selectvis(const casacore::String& time="",
522 : const casacore::String& spw="",
523 : const casacore::String& scan="",
524 : const casacore::String& field="",
525 : const casacore::String& intent="",
526 : const casacore::String& obsIDs="",
527 : const casacore::String& baseline="",
528 : const casacore::String& uvrange="",
529 : const casacore::String& chanmode="none",
530 0 : const casacore::Int& nchan=1,
531 0 : const casacore::Int& start=0,
532 0 : const casacore::Int& step=1,
533 : const casacore::MRadialVelocity& mStart=casacore::MRadialVelocity(),
534 : const casacore::MRadialVelocity& mStep=casacore::MRadialVelocity(),
535 : const casacore::String& msSelect="");
536 :
537 : // Uses *vs_p to ctor VisCals
538 : using Calibrater::setapply;
539 : virtual casacore::Bool setapply (const casacore::String& type,
540 : const casacore::Record& applypar);
541 :
542 :
543 : // Set up apply-able calibration via a Cal Library
544 : virtual casacore::Bool setcallib(casacore::Record callib);
545 : virtual casacore::Bool setcallib2(casacore::Record callib, const casacore::MeasurementSet* ms=0);
546 :
547 : // Uses *vs_p to ctor the SolvableVisCal
548 : virtual casacore::Bool setsolve (const casacore::String& type,
549 : const casacore::Record& solvepar);
550 :
551 : // Apply all setapply'd calibration components to DATA and
552 : // deposit in the CORRECTED_DATA column
553 : virtual casacore::Bool correct(casacore::String mode="calflag");
554 :
555 : // Apply all setapply'd calibration components to MODEL_DATA and
556 : // deposit in the MODEL_DATA column
557 : virtual casacore::Bool corrupt();
558 :
559 : // Initialize sigma/weight, and possibly weight_spectrum
560 : // Tsys-specific version (SD)
561 : virtual casacore::Bool initWeightsWithTsys(casacore::String wtmode, casacore::Bool dowtsp=false, casacore::String tsystable="",
562 : casacore::String gainfield="", casacore::String interp="linear",
563 : casacore::Vector<casacore::Int> spwmap=casacore::Vector<casacore::Int>());
564 :
565 :
566 : // Solve for a given calibration component
567 : virtual casacore::Bool solve();
568 :
569 :
570 : // Modelfit
571 : virtual casacore::Vector<casacore::Double> modelfit(const casacore::Int& iter,
572 : const casacore::String& stype,
573 : const casacore::Vector<casacore::Double>& par,
574 : const casacore::Vector<casacore::Bool>& vary,
575 : const casacore::String& file);
576 :
577 : // Fluxscale (via field indices)
578 : // NB: uses *vs_p to make SVCs
579 : virtual void fluxscale(const casacore::String& infile,
580 : const casacore::String& outfile,
581 : const casacore::Vector<casacore::Int>& refField,
582 : const casacore::Vector<casacore::Int>& refSpwMap,
583 : const casacore::Vector<casacore::Int>& tranField,
584 : const casacore::Bool& append,
585 : const casacore::Float& inGainThres,
586 : const casacore::String& antSel,
587 : const casacore::String& timerangeSel,
588 : const casacore::String& scanSel,
589 : SolvableVisCal::fluxScaleStruct& oFluxScaleFactor,
590 : const casacore::String& oListFile,
591 : const casacore::Bool& incremental,
592 : const casacore::Int& fitorder,
593 : const casacore::Bool& display);
594 :
595 : // Accumulate (using casacore::MSSelection syntax)
596 : virtual void accumulate(const casacore::String& intab,
597 : const casacore::String& incrtab,
598 : const casacore::String& outtab,
599 : const casacore::String& fields,
600 : const casacore::String& calFields,
601 : const casacore::String& interp="linear",
602 : const casacore::Double& t=-1.0,
603 : const casacore::Vector<casacore::Int>& spwmap=casacore::Vector<casacore::Int>(1,-1));
604 :
605 : // Generate cal table from specified values
606 : // NB: creates VCs with *vs_p
607 : virtual void specifycal(const casacore::String& type,
608 : const casacore::String& caltable,
609 : const casacore::String& time,
610 : const casacore::String& spw,
611 : const casacore::String& antenna,
612 : const casacore::String& pol,
613 : const casacore::Vector<casacore::Double>& parameter,
614 : const casacore::String& infile,
615 : const casacore::Bool& uniform);
616 :
617 : // casacore::Smooth calibration (using casacore::MSSelection syntax
618 : // NB: uses *vs_p to create SVC
619 : virtual casacore::Bool smooth(const casacore::String& infile,
620 : casacore::String& outfile,
621 : const casacore::String& smoothtype,
622 : const casacore::Double& smoothtime,
623 : const casacore::String& fields);
624 :
625 : // casacore::List a calibration table
626 : virtual casacore::Bool listCal(const casacore::String& infile,
627 : const casacore::String& field,
628 : const casacore::String& antenna,
629 : const casacore::String& spw,
630 : const casacore::String& listfile="",
631 : const casacore::Int& pagerows=50);
632 :
633 :
634 : // Initialize the calibrator object from an input MeasurementSet.
635 : // Optional compression of the calibration columns (MODEL_DATA,
636 : // and CORRECTED_DATA) is supported.
637 : //if addScratch=true, optionally one can just add CORRECTED_DATA by
638 : //setting addModel to false
639 : virtual casacore::Bool initialize(casacore::MeasurementSet& inputMS,
640 : casacore::Bool compress=true,
641 : casacore::Bool addScratch=true,
642 : casacore::Bool addModel=true);
643 :
644 : // Re-initialize the calibration scratch columns
645 : virtual casacore::Bool initCalSet(const casacore::Int& calSet);
646 :
647 : casacore::Bool cleanupVisSet();
648 :
649 : protected:
650 :
651 : // Organize sort columns for correction
652 : virtual VisibilityIterator::DataColumn configureForCorrection ();
653 :
654 : // Select on channel using MSSelection
655 : virtual void selectChannel(const casacore::String& spw);
656 :
657 : // Channel mask services
658 : virtual void initChanMask();
659 :
660 : // Select on channel in the VisSet
661 : virtual void selectChannel(const casacore::String& mode,
662 : const casacore::Int& nchan, const casacore::Int& start, const casacore::Int& step,
663 : const casacore::MRadialVelocity& mStart,
664 : const casacore::MRadialVelocity& mStep);
665 :
666 :
667 : // Returns true if calibrator object is in a valid state
668 : virtual casacore::Bool ok();
669 :
670 : // The standard solving mechanism
671 : virtual casacore::Bool genericGatherAndSolve();
672 :
673 : // VisSet that hosts an old VI
674 : VisSet* vs_p;
675 : VisSet* rawvs_p;
676 :
677 : // channel masking
678 : casacore::PtrBlock<casacore::Vector<casacore::Bool>*> chanmask_;
679 :
680 : private:
681 : // Copy constructor and assignment operator are forbidden
682 : OldCalibrater(const OldCalibrater&);
683 : OldCalibrater& operator=(const OldCalibrater&);
684 :
685 :
686 : };
687 :
688 :
689 :
690 :
691 :
692 : } //# NAMESPACE CASA - END
693 :
694 : #endif
|