LCOV - code coverage report
Current view: top level - synthesis/MeasurementComponents - StandardVisCal.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 42 71 59.2 %
Date: 2025-12-19 19:56:21 Functions: 42 71 59.2 %

          Line data    Source code
       1             : //# StandardVisCal.h: Declaration of standard (Solvable)VisCal types
       2             : //# Copyright (C) 1996,1997,2000,2001,2002,2003,2011
       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 adressed 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             : //#                        Charlottesville, VA 22903-2475 USA
      25             : //#
      26             : //#
      27             : 
      28             : #ifndef SYNTHESIS_STANDARDVISCAL_H
      29             : #define SYNTHESIS_STANDARDVISCAL_H
      30             : 
      31             : #include <casacore/casa/aips.h>
      32             : #include <casacore/casa/Containers/Record.h>
      33             : #include <casacore/casa/BasicSL/Complex.h>
      34             : #include <synthesis/MeasurementComponents/VisCal.h>
      35             : #include <synthesis/MeasurementComponents/SolvableVisCal.h>
      36             : #include <synthesis/MeasurementComponents/CalCorruptor.h>
      37             : 
      38             : namespace casa { //# NAMESPACE CASA - BEGIN
      39             : 
      40             : // Forward declarations
      41             : class VisEquation;
      42             : class TJonesCorruptor;
      43             : 
      44             : 
      45             : // **********************************************************
      46             : //  PJones
      47             : //
      48             : 
      49             : class PJones : public VisJones {
      50             : public:
      51             : 
      52             :   // Constructor
      53             :   PJones(VisSet& vs);
      54             :   PJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
      55             :   PJones(const MSMetaInfoForCal& msmc);
      56             : 
      57             :   virtual ~PJones();
      58             : 
      59             :   // Return the type enum
      60       39937 :   virtual Type type() { return VisCal::P; };
      61             : 
      62             :   // Return type name as string
      63          80 :   virtual casacore::String typeName()     { return "P Jones"; };
      64           0 :   virtual casacore::String longTypeName() { return "P Jones (parallactic angle phase)"; };
      65             : 
      66             :   // Type of Jones matrix according to nPar()
      67      457440 :   Jones::JonesType jonesType() { return pjonestype_; };
      68             : 
      69             : protected:
      70             : 
      71             :   // P has one trivial casacore::Complex parameter
      72           0 :   virtual casacore::Int nPar() { return 1; };
      73             : 
      74      106920 :   virtual casacore::Vector<casacore::Float>& pa() { return pa_; };
      75             : 
      76             :   // Jones matrix elements are NOT trivial
      77       35640 :   virtual casacore::Bool trivialJonesElem() { return false; };
      78             : 
      79             :   // Calculate parallactic angle
      80             :   virtual void calcPar();
      81             : 
      82             :   // Detect basis and feed_pa for this vb
      83             :   virtual void syncMeta(const VisBuffer& vb);
      84             :   virtual void syncMeta2(const vi::VisBuffer2& vb);
      85             : 
      86             :   // Calculate a single PJones matrix 
      87             :   virtual void calcOneJones(casacore::Vector<casacore::Complex>& mat, casacore::Vector<casacore::Bool>& mOk,
      88             :                             const casacore::Vector<casacore::Complex>& par, const casacore::Vector<casacore::Bool>& pOk );
      89             : 
      90             : private:
      91             : 
      92             :   Jones::JonesType pjonestype_;
      93             : 
      94             :   casacore::Vector<casacore::Float> pa_;
      95             :   
      96             : };
      97             : 
      98             : 
      99             : 
     100             : 
     101             : 
     102             : 
     103             : 
     104             : 
     105             : 
     106             : 
     107             : 
     108             : // **********************************************************
     109             : //  TJones
     110             : //
     111             : 
     112             : class TJones : public SolvableVisJones {
     113             : public:
     114             : 
     115             :   // Constructor
     116             :   TJones(VisSet& vs);
     117             :   TJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     118             :   TJones(const MSMetaInfoForCal& msmc);
     119             :   TJones(const casacore::Int& nAnt);
     120             : 
     121             : 
     122             :   virtual ~TJones();
     123             : 
     124             :   // Return the type enum
     125      499008 :   virtual Type type() { return VisCal::T; };
     126             : 
     127             :   // Return type name as string
     128         118 :   virtual casacore::String typeName()     { return "T Jones"; };
     129          12 :   virtual casacore::String longTypeName() { return "T Jones (polarization-independent troposphere"; };
     130             :   
     131             :   // Local setSolve
     132             :   virtual void setSolve(const casacore::Record& solve);
     133             : 
     134             :   // Type of Jones matrix according to nPar()
     135     2545266 :   virtual Jones::JonesType jonesType() { return Jones::Scalar; };
     136             : 
     137             :   // This type is accumulatable
     138           0 :   virtual casacore::Bool accumulatable() { return true; };
     139             : 
     140             :   // This type is smoothable
     141           4 :   virtual casacore::Bool smoothable() { return true; };
     142             : 
     143             :   // Hazard a guess at parameters
     144             :   virtual void guessPar(VisBuffer& vb);
     145             :   virtual void guessPar(SDBList& sdbs,const casacore::Bool& corrDepFlags=false);  //  VI2
     146             : 
     147             :   // Set up corruptor
     148             :   virtual void createCorruptor(const VisIter& vi, const casacore::Record& simpar, const casacore::Int nSim);
     149             : 
     150             : protected:
     151             : 
     152             :   // T has one trivial complex parameter
     153    19924137 :   virtual casacore::Int nPar() { return 1; };
     154             : 
     155             :   // Jones matrix elements are trivial
     156      123870 :   virtual casacore::Bool trivialJonesElem() { return true; };
     157             : 
     158             :   // Are diff'd Js trivial?
     159     9259167 :   virtual casacore::Bool trivialDJ() { return true; };
     160             : 
     161             :   // Initialize trivial dJs
     162             :   virtual void initTrivDJ();
     163             : 
     164             : private:
     165             : 
     166             :   // object that can simulate the corruption terms - internal to T;
     167             :   // public access is only to the CalCorruptor parts
     168             :   AtmosCorruptor *tcorruptor_p;
     169             : 
     170             : };
     171             : 
     172             : 
     173             : 
     174             : 
     175             : 
     176             : 
     177             : 
     178             : 
     179             : 
     180             : 
     181             : // **********************************************************
     182             : //  TfJones (freq-dep T)
     183             : //
     184             : 
     185             : class TfJones : public TJones {
     186             : public:
     187             : 
     188             :   // Constructor
     189             :   TfJones(VisSet& vs);
     190             :   TfJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     191             :   TfJones(const MSMetaInfoForCal& msmc);
     192             :   TfJones(const casacore::Int& nAnt);
     193             : 
     194             :   virtual ~TfJones();
     195             : 
     196             :   // Return the type enum
     197       20249 :   virtual Type type() { return VisCal::T; };
     198             : 
     199             :   // Return type name as string
     200          50 :   virtual casacore::String typeName()     { return "Tf Jones"; };
     201           0 :   virtual casacore::String longTypeName() { return "Tf Jones (frequency-dependent atmospheric complex gain"; };
     202             : 
     203             :   // This is the freq-dep version of T
     204             :   //   (this is the ONLY fundamental difference from T)
     205       39276 :   virtual casacore::Bool freqDepPar() { return true; };
     206             : 
     207             : protected:
     208             : 
     209             :   // <nothing>
     210             : 
     211             : private:
     212             : 
     213             :   // <nothing>
     214             :   
     215             : };
     216             : 
     217             : 
     218             : 
     219             : 
     220             : 
     221             : // **********************************************************
     222             : //  GJones
     223             : //
     224             : 
     225             : class GJones : public SolvableVisJones {
     226             : public:
     227             : 
     228             :   // Constructor
     229             :   GJones(VisSet& vs);
     230             :   GJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     231             :   GJones(const MSMetaInfoForCal& msmc);
     232             :   GJones(const casacore::Int& nAnt);
     233             : 
     234             :   virtual ~GJones();
     235             : 
     236             :   // Return the type enum
     237      296316 :   virtual Type type() { return VisCal::G; };
     238             : 
     239             :   // Return type name as string
     240        1790 :   virtual casacore::String typeName()     { return "G Jones"; };
     241          92 :   virtual casacore::String longTypeName() { return "G Jones (electronic Gain)"; };
     242             : 
     243             :   // Local setSolve
     244             :   //  (parses solmode)
     245             :   using SolvableVisJones::setSolve;
     246             :   virtual void setSolve(const casacore::Record& solve);
     247             : 
     248             :   // Type of Jones matrix according to nPar()
     249     7524748 :   virtual Jones::JonesType jonesType() { return Jones::Diagonal; };
     250             : 
     251             :   // This type is accumulatable
     252           0 :   virtual casacore::Bool accumulatable() { return true; };
     253             : 
     254             :   // This type is smoothable
     255          11 :   virtual casacore::Bool smoothable() { return true; };
     256             : 
     257             :   // Nominally, we will only use parallel hands for now
     258       10564 :   virtual casacore::Bool phandonly() { return true; };
     259             : 
     260             :   // Hazard a guess at parameters
     261             :   virtual void guessPar(VisBuffer& vb);
     262             :   virtual void guessPar(SDBList& sdbs,const casacore::Bool& corrDepFlags=false);  //  VI2
     263             : 
     264             :   virtual void createCorruptor(const VisIter& vi, const casacore::Record& simpar, const casacore::Int nSim);
     265             : 
     266             : protected:
     267             : 
     268             :   // G has two trivial casacore::Complex parameters
     269    31890645 :   virtual casacore::Int nPar() { return 2; };
     270             : 
     271             :   // Jones matrix elements are trivial
     272       39257 :   virtual casacore::Bool trivialJonesElem() { return true; };
     273             : 
     274             :   // dG/dp are trivial
     275    10270441 :   virtual casacore::Bool trivialDJ() { return true; };
     276             : 
     277             :   // Initialize trivial dJs
     278             :   virtual void initTrivDJ();
     279             : 
     280             : private:
     281             : 
     282             :   GJonesCorruptor *gcorruptor_p;
     283             :   
     284             : };
     285             : 
     286             : 
     287             : 
     288             : // **********************************************************
     289             : //  BJones  (freq-dep GJones)
     290             : //
     291             : 
     292             : class BJones : public GJones {
     293             : public:
     294             : 
     295             :   // Constructor
     296             :   BJones(VisSet& vs);
     297             :   BJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     298             :   BJones(const MSMetaInfoForCal& msmc);
     299             :   BJones(const casacore::Int& nAnt);
     300             : 
     301             :   virtual ~BJones();
     302             : 
     303             :   // Return the type enum
     304        9014 :   virtual Type type() { return VisCal::B; };
     305             : 
     306             :   // Return type name as string
     307         157 :   virtual casacore::String typeName()     { return "B Jones"; };
     308          14 :   virtual casacore::String longTypeName() { return "B Jones (bandpass)"; };
     309             : 
     310             :   // Local setSolve
     311             :   using GJones::setSolve;
     312             :   virtual void setSolve(const casacore::Record& solve);
     313             : 
     314             :   // This is the freq-dep version of G 
     315             :   //   (this is the ONLY fundamental difference from G)
     316    10635830 :   virtual casacore::Bool freqDepPar() { return true; };
     317             : 
     318             :   virtual void normalize();
     319             : 
     320             :   // Specialize post solve operations (adds chan gap fill)
     321             :   virtual void globalPostSolveTinker();
     322             :   
     323             :   // Fill in bracketted channel gaps in solutions
     324             :   virtual void fillChanGaps();
     325             :   virtual void fillChanGapArray(casacore::Array<casacore::Complex>& sol,
     326             :                                 casacore::Array<casacore::Bool>& solOK);
     327             : 
     328             : protected:
     329             : 
     330             :   // B-specific weight scaling factors
     331             :   virtual void calcWtScale(); // B-specific channel-collapsing weight scale calc
     332             : 
     333             : private:
     334             : 
     335             :   // widest channel gap to fill by interpolation
     336             :   casacore::Int maxchangap_p;
     337             : 
     338             : 
     339             : };
     340             : 
     341             : 
     342             : 
     343             : // **********************************************************
     344             : //  JJones
     345             : //
     346             : 
     347             : class JJones : public SolvableVisJones {
     348             : public:
     349             : 
     350             :   // Constructor
     351             :   JJones(VisSet& vs);
     352             :   JJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     353             :   JJones(const MSMetaInfoForCal& msmc);
     354             :   JJones(const casacore::Int& nAnt);
     355             : 
     356             :   virtual ~JJones();
     357             : 
     358             :   // J-specific solve setup
     359             :   using SolvableVisJones::setSolve;
     360             :   void setSolve(const casacore::Record& solvepar);
     361             : 
     362             :   // Return the type enum
     363           0 :   virtual Type type() { return VisCal::J; };
     364             : 
     365             :   // Return type name as string
     366           0 :   virtual casacore::String typeName()     { return "J Jones"; };
     367           0 :   virtual casacore::String longTypeName() { return "J Jones (generic polarized gain)"; };
     368             :   
     369             : 
     370             :   // Type of Jones matrix according to nPar()
     371           0 :   virtual Jones::JonesType jonesType() { return Jones::General; };
     372             : 
     373             :   // Hazard a guess at parameters
     374             :   virtual void guessPar(VisBuffer& vb);
     375             : 
     376             :   // J-specific reReference
     377             :   // TBD: non-triv impl
     378           0 :   virtual void reReference() {};
     379             : 
     380             : protected:
     381             : 
     382             :   // J has four trivial casacore::Complex parameters
     383           0 :   virtual casacore::Int nPar() { return 4; };
     384             : 
     385             :   // Jones matrix elements are trivial
     386           0 :   virtual casacore::Bool trivialJonesElem() { return true; };
     387             : 
     388             :   // dJ/dp are trivial
     389           0 :   virtual casacore::Bool trivialDJ() { return true; };
     390             : 
     391             :   // Initialize trivial dJs
     392             :   virtual void initTrivDJ();
     393             : 
     394             : private:
     395             : 
     396             :   // <nothing>
     397             :   
     398             : };
     399             : 
     400             : 
     401             : // **********************************************************
     402             : //  JfJones (freq-dep J)
     403             : //
     404             : 
     405             : class JfJones : public JJones {
     406             : public:
     407             : 
     408             :   // Constructor
     409             :   JfJones(VisSet& vs);
     410             :   JfJones(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     411             :   JfJones(const MSMetaInfoForCal& msmc);
     412             :   JfJones(const casacore::Int& nAnt);
     413             : 
     414             :   virtual ~JfJones();
     415             : 
     416             :   // Return the type enum
     417           0 :   virtual Type type() { return VisCal::J; };
     418             : 
     419             :   // Return type name as string
     420           0 :   virtual casacore::String typeName()     { return "Jf Jones"; };
     421           0 :   virtual casacore::String longTypeName() { return "Jf Jones (frequency-dependent generic polarized gain)"; };
     422             : 
     423             :   // This is the freq-dep version of J
     424             :   //   (this is the ONLY fundamental difference from J)
     425           0 :   virtual casacore::Bool freqDepPar() { return true; };
     426             : 
     427             : protected:
     428             : 
     429             :   // <nothing>
     430             : 
     431             : private:
     432             : 
     433             :   // <nothing>
     434             :   
     435             : };
     436             : 
     437             : 
     438             : // **********************************************************
     439             : //  M: baseline-based (closure) 
     440             : //
     441             : 
     442             : /*
     443             : 
     444             : class MMueller : public SolvableVisMueller {
     445             : public:
     446             : 
     447             :   // Constructor
     448             :   MMueller(VisSet& vs);
     449             :   MMueller(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     450             :   MMueller(const MSMetaInfoForCal& msmc);
     451             :   MMueller(const casacore::Int& nAnt);
     452             : 
     453             :   virtual ~MMueller();
     454             : 
     455             :   // Return the type enum
     456             :   virtual Type type() { return VisCal::M; };
     457             : 
     458             :   // Return type name as string
     459             :   virtual casacore::String typeName()     { return "M Mueller"; };
     460             :   virtual casacore::String longTypeName() { return "M Mueller (baseline-based)"; };
     461             : 
     462             :   // Type of Jones matrix according to nPar()
     463             :   virtual Mueller::MuellerType muellerType() { return Mueller::Diag2; };
     464             : 
     465             :   // Local setApply
     466             :   using SolvableVisCal::setApply;
     467             :   virtual void setApply(const casacore::Record& apply);
     468             : 
     469             :   // M gathers/solves for itself
     470             :   virtual casacore::Bool useGenericGatherForSolve() { return false; };
     471             : 
     472             :   // M solves for itself (by copying averaged data)
     473             :   virtual void selfGatherAndSolve(VisSet& vs, VisEquation& ve) { newselfSolve(vs,ve); };
     474             :   virtual void newselfSolve(VisSet& vs, VisEquation& ve);  // new supports combine
     475             : 
     476             :   // Local M version only supports normalization
     477             :   virtual void globalPostSolveTinker();
     478             : 
     479             :   virtual void createCorruptor(const VisIter& vi, const casacore::Record& simpar, const casacore::Int nSim);
     480             : protected:
     481             : 
     482             :   // M currently has just 2 complex parameters, i.e., both parallel hands
     483             :   virtual casacore::Int nPar() { return 2; };
     484             : 
     485             :   // Jones matrix elements are trivial
     486             :   virtual casacore::Bool trivialMuellerElem() { return true; };
     487             : 
     488             : private:
     489             :   AtmosCorruptor *atmcorruptor_p;
     490             : 
     491             : };
     492             : 
     493             : 
     494             : 
     495             : 
     496             : 
     497             : 
     498             : // **********************************************************
     499             : //  MfMueller (freq-dep MMueller)
     500             : //
     501             : 
     502             : class MfMueller : public MMueller {
     503             : public:
     504             : 
     505             :   // Constructor
     506             :   MfMueller(VisSet& vs);
     507             :   MfMueller(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     508             :   MfMueller(const MSMetaInfoForCal& msmc);
     509             :   MfMueller(const casacore::Int& nAnt);
     510             : 
     511             :   virtual ~MfMueller();
     512             : 
     513             :   // Return the type enum
     514             :   virtual Type type() { return VisCal::M; };
     515             : 
     516             :   // Return type name as string
     517             :   virtual casacore::String typeName()     { return "Mf Mueller"; };
     518             :   virtual casacore::String longTypeName() { return "Mf Mueller (closure bandpass)"; };
     519             : 
     520             :   // This is the freq-dep version of M
     521             :   //   (this is the ONLY fundamental difference from M)
     522             :   virtual casacore::Bool freqDepPar() { return true; };
     523             : 
     524             :   // Normalize baseline spectra (after B)
     525             :   virtual void normalize();
     526             : 
     527             : protected:
     528             : 
     529             :   // <nothing>
     530             : 
     531             : private:
     532             : 
     533             :   // <nothing>
     534             : 
     535             : };
     536             : 
     537             : */
     538             : 
     539             : 
     540             : // **********************************************************
     541             : //  TOPac 
     542             : //
     543             : 
     544             : class TOpac : public TJones {
     545             : public:
     546             : 
     547             :   // Constructor
     548             :   TOpac(VisSet& vs);
     549             :   TOpac(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     550             :   TOpac(const MSMetaInfoForCal& msmc);
     551             : 
     552             :   virtual ~TOpac();
     553             : 
     554             :   // Return the type enum
     555           0 :   virtual Type type() { return VisCal::T; };
     556             : 
     557             :   // Return type name as string
     558           0 :   virtual casacore::String typeName()     { return "TOpac"; };
     559           0 :   virtual casacore::String longTypeName() { return "TOpac (Opacity corrections in amplitude)"; };
     560             :   
     561             : 
     562             :   // Type of Jones matrix according to nPar()
     563           0 :   Jones::JonesType jonesType() { return Jones::Scalar; };
     564             : 
     565             :   // We have casacore::Float parameters
     566           0 :   virtual VisCalEnum::VCParType parType() { return VisCalEnum::REAL; };
     567             : 
     568             :   // Local specialization of setApply to extract opacity
     569             :   void setApply(const casacore::Record& applypar);
     570             : 
     571             :   // Report apply-related info
     572             :   casacore::String applyinfo();
     573             : 
     574             : protected:
     575             : 
     576             :   // TOpac has one casacore::Float par per ant
     577           0 :   virtual casacore::Int nPar() { return 1; };
     578             : 
     579             :   // Jones matrix elements are NOT trivial
     580           0 :   virtual casacore::Bool trivialJonesElem() { return false; };
     581             : 
     582             :   // Access to z.a. data
     583           0 :   casacore::Vector<casacore::Double>& za() { return za_; };
     584             : 
     585             :   // Detect zenith angle for this vb
     586             :   virtual void syncMeta(const VisBuffer& vb);
     587             :   virtual void syncMeta2(const vi::VisBuffer2& vb);
     588             : 
     589             :   // Calculate parameters (in this case, the z.a.)
     590             :   virtual void calcPar();
     591             : 
     592             :   // Calculate the TOpac matrix for all ants
     593             :   virtual void calcAllJones();
     594             : 
     595             : private:
     596             : 
     597             :   // avoid compiler warnings
     598             :   using TJones::setApply;  
     599             : 
     600             :   // opacity per spw
     601             :   casacore::Vector<casacore::Double> opacity_;
     602             : 
     603             :   // zenith angle per antenna
     604             :   casacore::Vector<casacore::Double> za_;
     605             :   
     606             : };
     607             : 
     608             : 
     609             : // **********************************************************
     610             : //  TfOpac (freq-dep TOpac)
     611             : //
     612             : 
     613             : class TfOpac : public TOpac {
     614             : public:
     615             : 
     616             :   // Constructor
     617             :   TfOpac(VisSet& vs);
     618             :   TfOpac(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     619             :   TfOpac(const MSMetaInfoForCal& msmc);
     620             : 
     621             :   virtual ~TfOpac();
     622             : 
     623             :   // Return the type enum
     624           0 :   virtual Type type() { return VisCal::T; };
     625             : 
     626             :   // Return type name as string
     627           0 :   virtual casacore::String typeName()     { return "TfOpac"; };
     628           0 :   virtual casacore::String longTypeName() { return "TfOpac (frequency-dependent opacity"; };
     629             : 
     630             :   // This is the freq-dep version of TOpac
     631             :   //   (this is the ONLY fundamental difference from TOpac)
     632           0 :   virtual casacore::Bool freqDepPar() { return true; };
     633             : 
     634             : protected:
     635             : 
     636             :   // Calculate the TfOpac matrix for all ants
     637             :   virtual void calcAllJones();
     638             : 
     639             : private:
     640             : 
     641             :   //  Frequency weight scaling factors
     642             :   virtual void calcWtScale();
     643             :   
     644             : };
     645             : 
     646             : // **********************************************************
     647             : //  M: baseline-based (closure) 
     648             : //
     649             : 
     650             : 
     651             : class MMueller : public SolvableVisMueller {
     652             : public:
     653             : 
     654             :   // Constructor
     655             :   MMueller(VisSet& vs);
     656             :   MMueller(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     657             :   MMueller(const MSMetaInfoForCal& msmc);
     658             :   MMueller(const casacore::Int& nAnt);
     659             : 
     660             :   virtual ~MMueller();
     661             : 
     662             :   // Return the type enum
     663      101428 :   virtual Type type() { return VisCal::M; };
     664             : 
     665             :   // Return type name as string
     666          75 :   virtual casacore::String typeName()     { return "M Mueller"; };
     667          30 :   virtual casacore::String longTypeName() { return "M Mueller (baseline-based)"; };
     668             : 
     669             :   // Type of Jones matrix according to nPar()
     670      101023 :   virtual Mueller::MuellerType muellerType() { return Mueller::Diag2; };
     671             : 
     672             :   // Local setApply
     673             :   using SolvableVisCal::setApply;
     674             :   virtual void setApply(const casacore::Record& apply);
     675             : 
     676             :   // M gathers/solves for itself under self-determined conditions
     677             :   //  Initialization:  VI1: False ; VI2: True
     678          16 :   virtual casacore::Bool useGenericGatherForSolve() { return useGenGathSolve_p; };
     679             : 
     680             :   // When generically gathering (VI2 only!), _don't_ use generic solveOne
     681             :   //   (use selfSolveOne below, which is just copy from averaged data)
     682        1394 :   virtual casacore::Bool useGenericSolveOne() { return !useGenGathSolve_p; };
     683             : 
     684             :   // M solves for itself (by copying averaged data)
     685           5 :   virtual void selfGatherAndSolve(VisSet& vs, VisEquation& ve) { newselfSolve(vs,ve); };
     686             :   virtual void newselfSolve(VisSet& vs, VisEquation& ve);  // new supports combine
     687             : 
     688             :   // Local M version only supports normalization
     689             :   virtual void globalPostSolveTinker();
     690             : 
     691             :   // Modern solving
     692             :   virtual void selfSolveOne(SDBList& sdbs);
     693             :   using SolvableVisMueller::selfSolveOne;  // VS/VI version (trap)
     694             : 
     695             :   virtual void createCorruptor(const VisIter& vi, const casacore::Record& simpar, const casacore::Int nSim);
     696             : protected:
     697             : 
     698             :   // M currently has just 2 complex parameters, i.e., both parallel hands
     699      189654 :   virtual casacore::Int nPar() { return 2; };
     700             : 
     701             :   // Jones matrix elements are trivial
     702         264 :   virtual casacore::Bool trivialMuellerElem() { return true; };
     703             : 
     704             :   // solve implementation
     705             :   virtual void solveOne(SDBList& sdbs);
     706             : 
     707             : private:
     708             :   AtmosCorruptor *atmcorruptor_p;
     709             : 
     710             :   const bool useGenGathSolve_p;  // true unless VisSet-driven ctor used
     711             : 
     712             : 
     713             : };
     714             : 
     715             : 
     716             : // **********************************************************
     717             : //  MfMueller (freq-dep MMueller)
     718             : //
     719             : 
     720             : class MfMueller : public MMueller {
     721             : public:
     722             : 
     723             :   // Constructor
     724             :   MfMueller(VisSet& vs);
     725             :   MfMueller(casacore::String msname,casacore::Int MSnAnt,casacore::Int MSnSpw);
     726             :   MfMueller(const MSMetaInfoForCal& msmc);
     727             :   MfMueller(const casacore::Int& nAnt);
     728             : 
     729             :   virtual ~MfMueller();
     730             : 
     731             :   // Return the type enum
     732        3780 :   virtual Type type() { return VisCal::M; };
     733             : 
     734             :   // Return type name as string
     735           5 :   virtual casacore::String typeName()     { return "Mf Mueller"; };
     736           2 :   virtual casacore::String longTypeName() { return "Mf Mueller (closure bandpass)"; };
     737             : 
     738             :   // This is the freq-dep version of M
     739             :   //   (this is the ONLY fundamental difference from M)
     740         258 :   virtual casacore::Bool freqDepPar() { return true; };
     741             : 
     742             :   // Normalize baseline spectra (after B)
     743             :   virtual void normalize();
     744             : 
     745             : protected:
     746             : 
     747             :   // <nothing>
     748             : 
     749             : private:
     750             : 
     751             :   // <nothing>
     752             : 
     753             : };
     754             : 
     755             : 
     756             : 
     757             : } //# NAMESPACE CASA - END
     758             : 
     759             : #endif
     760             : 

Generated by: LCOV version 1.16