LCOV - code coverage report
Current view: top level - synthesis/MeasurementComponents - Calibrater.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 3 16 18.8 %
Date: 2024-12-11 20:54:31 Functions: 1 7 14.3 %

          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          48 :                          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        2267 :   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           9 :   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

Generated by: LCOV version 1.16