LCOV - code coverage report
Current view: top level - msvis/MSVis - SimpleSimVi2.h (source / functions) Hit Total Coverage
Test: ctest_coverage.info Lines: 0 59 0.0 %
Date: 2023-11-02 14:27:30 Functions: 0 59 0.0 %

          Line data    Source code
       1             : //# SimpleSimVi2.h: Rudimentary data simulator
       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: aips2-request@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             : //# $Id: VisibilityIterator2.h,v 19.14 2006/02/28 04:48:58 mvoronko Exp $
      27             : 
      28             : #if ! defined (MSVIS_SimplSimVi2_H)
      29             : #define MSVIS_SimplSimVi2_H
      30             : 
      31             : #include <casacore/casa/aips.h>
      32             : #include <casacore/casa/Exceptions/Error.h>
      33             : #include <casacore/casa/BasicSL.h>
      34             : #include <casacore/ms/MeasurementSets/MSAntennaColumns.h>
      35             : #include <casacore/ms/MeasurementSets/MSSpWindowColumns.h>
      36             : #include <casacore/ms/MeasurementSets/MSDataDescColumns.h>
      37             : #include <casacore/ms/MeasurementSets/MSPolColumns.h>
      38             : #include <msvis/MSVis/VisBufferComponents2.h>
      39             : #include <msvis/MSVis/ViImplementation2.h>
      40             : #include <msvis/MSVis/ViiLayerFactory.h>
      41             : #include <msvis/MSVis/VisBufferImpl2.h>
      42             : #include <msvis/MSVis/VisibilityIterator2.h>
      43             : #include <msvis/MSVis/VisBuffer2.h>
      44             : #include <casacore/measures/Measures/MFrequency.h>
      45             : #include <casacore/measures/Measures/Stokes.h>
      46             : #include <casacore/casa/Arrays.h>
      47             : #include <casacore/casa/Arrays/ArrayFwd.h>
      48             : 
      49             : #include <map>
      50             : #include <vector>
      51             : 
      52             : #define SSVi2NotPossible() ThrowCc("Not Possible in SimpleSimVi2"); 
      53             : #define SSVi2NotYetImplemented() ThrowCc("Not yet implemented in SimpleSimVi2");
      54             : 
      55             : namespace casacore{
      56             : 
      57             : class AipsError;
      58             : class RecordInterface;
      59             : class String;
      60             : template <typename T, Int n> class SquareMatrix;
      61             : 
      62             : }
      63             : 
      64             : namespace casa { //# NAMESPACE CASA - BEGIN
      65             : 
      66             : class VisImagingWeight;
      67             : 
      68             : namespace vi {
      69             : 
      70             : 
      71             : //# forward decl
      72             : 
      73             : class Subchunk;
      74             : class VisBuffer2;
      75             : 
      76             : 
      77             : class SimpleSimVi2Parameters {
      78             : 
      79             : public:
      80             : 
      81             :   // Default ctor (sets default values, useful for self-testing)
      82             :   SimpleSimVi2Parameters();
      83             : 
      84             :   // Simple, shape-oriented ctor
      85             :   SimpleSimVi2Parameters(casacore::Int nField,casacore::Int nScan,
      86             :                          casacore::Int nSpw, casacore::Int nAnt, casacore::Int nCorr,
      87             :                          const casacore::Vector<casacore::Int>& nTimePerField,
      88             :                          const casacore::Vector<casacore::Int>& nChan,
      89             :                          casacore::Complex c0=casacore::Complex(0.0f),
      90             :                          casacore::String polBasis="circ",
      91             :                          casacore::Bool autoPol=false,casacore::Bool doParang=false,
      92             :                          casacore::Bool doAC=false);
      93             : 
      94             :   // Full control
      95             :   SimpleSimVi2Parameters(casacore::Int nField,casacore::Int nScan,casacore::Int nSpw,
      96             :                          casacore::Int nAnt,casacore::Int nCorr,
      97             :                          const casacore::Vector<casacore::Int>& nTimePerField,
      98             :                          const casacore::Vector<casacore::Int>& nChan,
      99             :                          casacore::String date0, casacore::Double dt,
     100             :                          const casacore::Vector<casacore::Double>& refFreq,
     101             :                          const casacore::Vector<casacore::Double>& df,
     102             :                          const casacore::Matrix<casacore::Float>& stokes,
     103             :                          casacore::Bool doNoise,
     104             :                          const casacore::Matrix<casacore::Float>& gain,
     105             :                          const casacore::Matrix<casacore::Float>& tsys,
     106             :                          casacore::Bool doNorm=true,
     107             :                          casacore::String polBasis="circ", casacore::Bool doAC=false,
     108             :                          casacore::Complex c0 = casacore::Complex(0.0f),
     109             :                          casacore::Bool doParang=false,
     110             :                          MetadataScope spwScope = ChunkScope,
     111             :                          MetadataScope antennaScope = RowScope);
     112             :   
     113             :   SimpleSimVi2Parameters(const SimpleSimVi2Parameters& other);
     114             :   SimpleSimVi2Parameters& operator=(const SimpleSimVi2Parameters& other);
     115             : 
     116             :   ~SimpleSimVi2Parameters();
     117             : 
     118             : 
     119             :   void summary() const;
     120             : 
     121             :   casacore::Int nField_, nScan_, nSpw_, nAnt_, nCorr_;
     122             :   casacore::Vector<casacore::Int> nTimePerField_, nChan_;
     123             :   casacore::String date0_; 
     124             :   casacore::Double dt_;
     125             :   casacore::Vector<casacore::Double> refFreq_, df_;
     126             :   casacore::Bool doNoise_;
     127             :   casacore::Matrix<casacore::Float> stokes_, gain_, tsys_;
     128             :   casacore::Bool doNorm_;
     129             :   casacore::String polBasis_;
     130             :   casacore::Bool doAC_;
     131             :   casacore::Complex c0_;
     132             :   casacore::Bool autoPol_;   // set non-trivial linear polarization 
     133             :   casacore::Bool doParang_;  // Simple linear-in-time, for now
     134             :   MetadataScope spwScope_; // is SPW constant on each chunk, subchunk or row?
     135             :   MetadataScope antennaScope_; // are ANTENNA1, ANTENNA2 constant on each subchunk or row? (chunk scope not supported for the time being)
     136             : 
     137             :   // Return frequencies for specified spw
     138             :   casacore::Vector<casacore::Double> freqs(casacore::Int spw) const;
     139             : 
     140             : private:
     141             :   void initialize(const casacore::Vector<casacore::Int>& nTimePerField, const casacore::Vector<casacore::Int>& nChan,
     142             :                   const casacore::Vector<casacore::Double>& refFreq, const casacore::Vector<casacore::Double>& df,
     143             :                   const casacore::Matrix<casacore::Float>& stokes, 
     144             :                   const casacore::Matrix<casacore::Float>& gain, const casacore::Matrix<casacore::Float>& tsys);
     145             : 
     146             : };
     147             : 
     148             : class SimpleSimVi2 : public ViImplementation2 {
     149             : 
     150             : public:
     151             : 
     152             :   SimpleSimVi2 (const SimpleSimVi2Parameters& pars);
     153             : 
     154             :   // make noncopyable...
     155             :   SimpleSimVi2( const SimpleSimVi2& ) = delete;
     156             :   SimpleSimVi2& operator=( const SimpleSimVi2& ) = delete;
     157             : 
     158             :   // Destructor
     159             :   virtual ~SimpleSimVi2 ();
     160             : 
     161             :   // Report the the ViImplementation type
     162           0 :   virtual casacore::String ViiType() const override {return casacore::String("Simulated(*)"); };
     163             : 
     164             :   //   +==================================+
     165             :   //   |                                  |
     166             :   //   | Iteration Control and Monitoring |
     167             :   //   |                                  |
     168             :   //   +==================================+
     169             :   
     170             : 
     171             :   // Methods to control and monitor subchunk iteration
     172             : 
     173             :   virtual void origin () override;
     174             :   virtual casacore::Bool more () const override;
     175             :   virtual void next () override;
     176             :   virtual Subchunk getSubchunkId () const override;
     177             :   
     178             :   // Methods to control chunk iterator
     179             : 
     180             :   virtual void originChunks (casacore::Bool forceRewind = false) override;
     181             :   virtual casacore::Bool moreChunks () const override;
     182             :   virtual void nextChunk () override;
     183             : 
     184             :   virtual void result(casacore::Record& res) const override;
     185             : 
     186             :   // Detecting the key change isn't possible (yet?)  
     187           0 :   virtual casacore::String keyChange() const override { SSVi2NotPossible() };
     188             : 
     189           0 :   virtual casacore::Bool isWritable () const override { return false; };
     190             : 
     191             :   // Return the time interval (in seconds) used for iteration.
     192             :   // This is not the same as the INTERVAL column.  Setting the
     193             :   // the interval requires calling origin chunks before performing
     194             :   // further iterator.
     195             :   
     196           0 :   virtual casacore::Double getInterval() const override {return 1.0e9; };
     197           0 :   virtual void setInterval (casacore::Double) override { SSVi2NotPossible() };
     198             : 
     199             :   // Select the channels to be returned.  Requires calling originChunks before
     200             :   // performing additional iteration.
     201             :   
     202             :   virtual void setFrequencySelections (const FrequencySelections & selection) override;
     203             : 
     204             :   // Set the 'blocking' size for returning data.
     205           0 :   virtual void setRowBlocking (casacore::rownr_t) override { SSVi2NotPossible() };
     206           0 :   virtual casacore::rownr_t getRowBlocking() const { SSVi2NotPossible() };
     207             :   
     208             :   virtual casacore::Bool existsColumn (VisBufferComponent2 id) const override;
     209             :   
     210           0 :   virtual const SortColumns & getSortColumns() const override { SSVi2NotPossible() };
     211             : 
     212           0 :   virtual casacore::Bool isNewArrayId () const override { return false; };
     213           0 :   virtual casacore::Bool isNewFieldId () const override { return thisField_!=lastField_; };
     214           0 :   virtual casacore::Bool isNewMs () const override  { return false; };
     215           0 :   virtual casacore::Bool isNewSpectralWindow () const override { return thisSpw_!=lastSpw_; };
     216             : 
     217             :   // Return the number of rows in the current iteration
     218             :   virtual casacore::rownr_t nRows () const override;
     219             :   
     220             :   // Return the number of distinct cube/array shapes in the current iteration
     221             :   virtual casacore::rownr_t nShapes () const override;
     222             :   
     223             :   // Return the number of rows for each distinct array/cube shapes in the current iteration
     224             :   virtual const casacore::Vector<casacore::rownr_t>& nRowsPerShape () const override;
     225             : 
     226             :   // Return the number of channels for each distinct array/cube shapes in the current iteration
     227             :   virtual const casacore::Vector<casacore::Int>& nChannelsPerShape () const override;
     228             : 
     229             :   // Return the number of correlations for each distinct array/cube shapes in the current iteration
     230             :   virtual const casacore::Vector<casacore::Int>& nCorrelationsPerShape () const override;
     231             : 
     232             :   // Return the row ids as from the original root table. This is useful
     233             :   // to find correspondance between a given row in this iteration to the
     234             :   // original ms row
     235             : 
     236             :   virtual void getRowIds (casacore::Vector<casacore::rownr_t> & rowids) const override;
     237             : 
     238             :   virtual VisBuffer2 * getVisBuffer () const override;
     239             : 
     240             : 
     241             :   //   +=========================+
     242             :   //   |                         |
     243             :   //   | Subchunk casacore::Data Accessors |
     244             :   //   |                         |
     245             :   //   +=========================+
     246             :   
     247             :   // Return info
     248             :   virtual void antenna1 (casacore::Vector<casacore::Int> & ant1) const override;
     249             :   virtual void antenna2 (casacore::Vector<casacore::Int> & ant2) const override;
     250             :   virtual void corrType (casacore::Vector<casacore::Int> & corrTypes) const override;
     251             :   virtual casacore::Int  dataDescriptionId () const override;
     252             :   virtual void dataDescriptionIds (casacore::Vector<casacore::Int> & ddis) const override;
     253             :   virtual void exposure (casacore::Vector<casacore::Double> & expo) const override;
     254             :   virtual void feed1 (casacore::Vector<casacore::Int> & fd1) const override;
     255             :   virtual void feed2 (casacore::Vector<casacore::Int> & fd2) const override;
     256             :   virtual void fieldIds (casacore::Vector<casacore::Int>&) const override;
     257             :   virtual void arrayIds (casacore::Vector<casacore::Int>&) const override;
     258             :   virtual casacore::String fieldName () const override;
     259             : 
     260             :   virtual void flag (casacore::Cube<casacore::Bool> & flags) const override;
     261             :   virtual void flag (casacore::Vector<casacore::Cube<casacore::Bool>> & flags) const override;
     262           0 :   virtual void flag (casacore::Matrix<casacore::Bool> &) const override { SSVi2NotPossible() };
     263           0 :   virtual casacore::Bool flagCategoryExists () const override { return false; };
     264           0 :   virtual void flagCategory (casacore::Array<casacore::Bool> &) const override { SSVi2NotPossible() };
     265             :   virtual void flagRow (casacore::Vector<casacore::Bool> & rowflags) const override;
     266             :   virtual void observationId (casacore::Vector<casacore::Int> & obsids) const override;
     267             :   virtual casacore::Int polarizationId () const override;
     268             :   virtual void processorId (casacore::Vector<casacore::Int> & procids) const override;
     269             :   virtual void scan (casacore::Vector<casacore::Int> & scans) const override;
     270             :   virtual casacore::String sourceName () const override;
     271             :   virtual void stateId (casacore::Vector<casacore::Int> & stateids) const override;
     272           0 :   virtual void jonesC (casacore::Vector<casacore::SquareMatrix<casacore::Complex, 2> > &) const override { SSVi2NotPossible() };
     273             :   virtual casacore::Int polFrame () const override;
     274             :   virtual void sigma (casacore::Matrix<casacore::Float> & sigmat) const override;
     275             :   virtual void sigma (casacore::Vector<casacore::Matrix<casacore::Float>> & sigmat) const override;
     276             :   virtual void spectralWindows (casacore::Vector<casacore::Int> & spws) const override;
     277             :   virtual void polarizationIds (casacore::Vector<casacore::Int> & polIds) const override;
     278             :   virtual void time (casacore::Vector<casacore::Double> & t) const override;
     279             :   virtual void timeCentroid (casacore::Vector<casacore::Double> & t) const override;
     280             :   virtual void timeInterval (casacore::Vector<casacore::Double> & ti) const override;
     281             :   virtual void uvw (casacore::Matrix<casacore::Double> & uvwmat) const override;
     282             : 
     283             :   virtual void visibilityCorrected (casacore::Cube<casacore::Complex> & vis) const override;
     284             :   virtual void visibilityCorrected (casacore::Vector<casacore::Cube<casacore::Complex>> & vis) const override;
     285             :   virtual void visibilityModel (casacore::Cube<casacore::Complex> & vis) const override;
     286             :   virtual void visibilityModel (casacore::Vector<casacore::Cube<casacore::Complex>> & vis) const override;
     287             :   virtual void visibilityObserved (casacore::Cube<casacore::Complex> & vis) const override;
     288             :   virtual void visibilityObserved (casacore::Vector<casacore::Cube<casacore::Complex>> & vis) const override;
     289             :   virtual void floatData (casacore::Cube<casacore::Float> & fcube) const override;
     290             :   virtual void floatData (casacore::Vector<casacore::Cube<casacore::Float>> & fcubes) const override;
     291             : 
     292             :   virtual casacore::IPosition visibilityShape () const override;
     293             : 
     294             :   virtual void weight (casacore::Matrix<casacore::Float> & wtmat) const override;
     295             :   virtual void weight (casacore::Vector<casacore::Matrix<casacore::Float>> & wtmat) const override;
     296             :   virtual casacore::Bool weightSpectrumExists () const override;
     297             :   virtual casacore::Bool sigmaSpectrumExists () const override;
     298             :   virtual void weightSpectrum (casacore::Cube<casacore::Float> & wtsp) const override;
     299             :   virtual void weightSpectrum (casacore::Vector<casacore::Cube<casacore::Float>> & wtsp) const override;
     300             :   virtual void sigmaSpectrum (casacore::Cube<casacore::Float> & wtsp) const override;
     301             :   virtual void sigmaSpectrum (casacore::Vector<casacore::Cube<casacore::Float>> & wtsp) const override;
     302             : 
     303           0 :   virtual void setWeightScaling (casacore::CountedPtr<WeightScaling>) override { SSVi2NotPossible() };
     304           0 :   virtual casacore::Bool hasWeightScaling () const override { return false; };
     305             :   virtual casacore::CountedPtr<WeightScaling> getWeightScaling () const override; //  { SSVi2NotPossible() };
     306             : 
     307             :   //   +------------------------+
     308             :   //   |                        |
     309             :   //   | Angular casacore::Data Providers |
     310             :   //   |                        |
     311             :   //   +------------------------+
     312             : 
     313             :   // No underlying geometry is available for these!
     314           0 :   virtual casacore::Bool allBeamOffsetsZero () const override { SSVi2NotPossible() };
     315           0 :   virtual casacore::MDirection azel0 (casacore::Double) const override { SSVi2NotPossible() };
     316           0 :   virtual const casacore::Vector<casacore::MDirection> & azel (casacore::Double) const override { SSVi2NotPossible() };
     317             :   virtual const casacore::Vector<casacore::Float> & feed_pa (casacore::Double t) const override; 
     318           0 :   virtual std::pair<bool, casacore::MDirection> getPointingAngle (int /*antenna*/, double /*time*/) const override
     319           0 :   { return std::make_pair (true, phaseCenter()); }
     320           0 :   virtual const casacore::Cube<casacore::RigidVector<casacore::Double, 2> > & getBeamOffsets () const override { SSVi2NotPossible() };
     321           0 :   virtual casacore::Double hourang (casacore::Double) const override { SSVi2NotPossible() };
     322           0 :   virtual const casacore::Float & parang0 (casacore::Double) const override { SSVi2NotPossible() };
     323           0 :   virtual const casacore::Vector<casacore::Float> & parang (casacore::Double) const override { SSVi2NotPossible() };
     324           0 :   virtual const casacore::MDirection & phaseCenter () const override { return phaseCenter_; }; // trivial value (for now)
     325           0 :   virtual const casacore::Cube<casacore::Double> & receptorAngles () const override { SSVi2NotPossible() };
     326             : 
     327             :   //   +=========================+
     328             :   //   |                         |
     329             :   //   | Chunk and casacore::MS Level casacore::Data |
     330             :   //   |                         |
     331             :   //   +=========================+
     332             : 
     333           0 :   virtual const casacore::Vector<casacore::String> & antennaMounts () const override { SSVi2NotPossible() };
     334           0 :   virtual const VisImagingWeight & getImagingWeightGenerator () const override { SSVi2NotPossible() };
     335             :   
     336           0 :   virtual casacore::MFrequency::Types getObservatoryFrequencyType () const override { SSVi2NotPossible() };
     337           0 :   virtual casacore::MPosition getObservatoryPosition () const override { SSVi2NotPossible() };
     338           0 :   virtual casacore::Vector<casacore::Float> getReceptor0Angle () override { SSVi2NotPossible() };
     339             :  
     340           0 :   virtual casacore::Int getReportingFrameOfReference () const override { return -2;  /*SSVi2NotPossible()*/ };
     341           0 :   virtual void setReportingFrameOfReference (casacore::Int) override { SSVi2NotPossible() };
     342             :  
     343             :   virtual casacore::MEpoch getEpoch () const override;
     344             : 
     345             :   virtual casacore::Vector<casacore::Int> getCorrelations () const override;
     346             : 
     347           0 :   virtual casacore::Vector<casacore::Stokes::StokesTypes> getCorrelationTypesDefined () const override { return corrdef_; /*SSVi2NotPossible()*/ };
     348           0 :   virtual casacore::Vector<casacore::Stokes::StokesTypes> getCorrelationTypesSelected () const override { return corrdef_; /*SSVi2NotPossible()*/ };
     349             : 
     350             :   virtual casacore::Vector<casacore::Int> getChannels (casacore::Double time, casacore::Int frameOfReference, casacore::Int spectralWndow = -1,
     351             :                                    casacore::Int msId = -1) const override;
     352             :   virtual casacore::Vector<casacore::Double> getFrequencies (casacore::Double time, casacore::Int frameOfReference, casacore::Int spectralWndow = -1,
     353             :                                          casacore::Int msId = -1) const override;
     354             :   virtual casacore::Vector<casacore::Double> getChanWidths (casacore::Double time, casacore::Int frameOfReference, casacore::Int spectralWndow = -1,
     355             :                                          casacore::Int msId = -1) const override;
     356             : 
     357             :   //reference to actual ms in interator  (TRIVIAL returns
     358           0 :   virtual casacore::Int msId () const override { return -1; }; // zero-based index of current casacore::MS in set of MSs
     359           0 :   virtual const casacore::MeasurementSet & ms () const override { SSVi2NotPossible() };
     360           0 :   virtual casacore::Int getNMs () const override { return 0; };
     361             : 
     362             :   // Name of the MS in the interator
     363           0 :   virtual casacore::String msName() const override { return casacore::String("<noms>"); };
     364             : 
     365             :   // Call to use the slurp i/o method for all scalar columns. 
     366             :   //  Not meaningful for non-I/O
     367           0 :   virtual void slurp () const override { SSVi2NotPossible() };
     368             : 
     369             :   // Access the current casacore::MSColumns object in MSIter -- NOT POSSIBLE
     370           0 :   virtual const vi::SubtableColumns & subtableColumns () const override { SSVi2NotPossible() };
     371             : 
     372             : 
     373             :   // get back the selected spectral windows and spectral channels for
     374             :   // current ms
     375             : 
     376             :   virtual const SpectralWindowChannels & getSpectralWindowChannels (casacore::Int msId, casacore::Int spectralWindowId) const override;
     377             : 
     378             :   //assign a VisImagingWeight object to this iterator
     379           0 :   virtual void useImagingWeight (const VisImagingWeight & ) override { SSVi2NotPossible() };
     380             :   
     381             :   // Return number of antennasm spws, polids, ddids
     382             :   
     383             :   virtual casacore::Int nAntennas () const override;
     384             :   virtual casacore::Int nDataDescriptionIds () const override;
     385             :   virtual casacore::Int nPolarizationIds () const override;
     386             :   virtual casacore::rownr_t nRowsInChunk () const override; // number rows in current chunk
     387             :   virtual casacore::rownr_t nRowsViWillSweep () const override; // number of rows in all selected ms's
     388             :   virtual casacore::Int nSpectralWindows () const override;
     389             :   virtual casacore::Int nTimes() const override;
     390             : 
     391             :   // Writeback methods are Irrelevant for non-disk-reading VI2
     392           0 :   virtual void writeBackChanges (VisBuffer2* ) override { SSVi2NotPossible() };
     393           0 :   virtual void writeFlag (const casacore::Cube<casacore::Bool> &) override { SSVi2NotPossible() };
     394           0 :   virtual void writeFlagRow (const casacore::Vector<casacore::Bool> &) override { SSVi2NotPossible() };
     395           0 :   virtual void writeFlagCategory(const casacore::Array<casacore::Bool>&) override { SSVi2NotPossible() };
     396           0 :   virtual void writeVisCorrected (const casacore::Cube<casacore::Complex> &) override { SSVi2NotPossible() };
     397           0 :   virtual void writeVisModel (const casacore::Cube<casacore::Complex> &) override { SSVi2NotPossible() };
     398           0 :   virtual void writeVisObserved (const casacore::Cube<casacore::Complex> &) override { SSVi2NotPossible() };
     399           0 :   virtual void writeWeight (const casacore::Matrix<casacore::Float> &) override { SSVi2NotPossible() };
     400           0 :   virtual void writeWeightSpectrum (const casacore::Cube<casacore::Float> &) override { SSVi2NotPossible() };
     401           0 :   virtual void initWeightSpectrum (const casacore::Cube<casacore::Float> &) override { SSVi2NotPossible() };
     402           0 :   virtual void writeSigmaSpectrum (const casacore::Cube<casacore::Float> &) override { SSVi2NotPossible() };
     403           0 :   virtual void writeSigma (const casacore::Matrix<casacore::Float> &) override { SSVi2NotPossible() };
     404           0 :   virtual void writeModel(const casacore::RecordInterface&,casacore::Bool,casacore::Bool) override { SSVi2NotPossible() };
     405             : 
     406             :   //**********************************************************************
     407             :   // Methods to access the subtables.
     408             :   //**********************************************************************
     409             : 
     410             :   // Access to antenna subtable
     411             :   const casacore::MSAntennaColumns& antennaSubtablecols() const override;
     412             : 
     413             :   // Access to dataDescription subtable
     414             :   const casacore::MSDataDescColumns& dataDescriptionSubtablecols() const override;
     415             : 
     416             :   // Access to feed subtable
     417             :   const casacore::MSFeedColumns& feedSubtablecols() const override;
     418             : 
     419             :   // Access to field subtable
     420             :   const casacore::MSFieldColumns& fieldSubtablecols() const override;
     421             : 
     422             :   // Access to flagCmd subtable
     423             :   const casacore::MSFlagCmdColumns& flagCmdSubtablecols() const override;
     424             : 
     425             :   // Access to history subtable
     426             :   const casacore::MSHistoryColumns& historySubtablecols() const override;
     427             : 
     428             :   // Access to observation subtable
     429             :   const casacore::MSObservationColumns& observationSubtablecols() const override;
     430             : 
     431             :   // Access to pointing subtable
     432             :   const casacore::MSPointingColumns& pointingSubtablecols() const override;
     433             : 
     434             :   // Access to polarization subtable
     435             :   const casacore::MSPolarizationColumns& polarizationSubtablecols() const override;
     436             : 
     437             :   // Access to processor subtable
     438             :   const casacore::MSProcessorColumns& processorSubtablecols() const override;
     439             : 
     440             :   // Access to spectralWindow subtable
     441             :   const casacore::MSSpWindowColumns& spectralWindowSubtablecols() const override;
     442             : 
     443             :   // Access to state subtable
     444             :   const casacore::MSStateColumns& stateSubtablecols() const override;
     445             : 
     446             :   // Access to doppler subtable
     447             :   const casacore::MSDopplerColumns& dopplerSubtablecols() const override;
     448             : 
     449             :   // Access to freqOffset subtable
     450             :   const casacore::MSFreqOffsetColumns& freqOffsetSubtablecols() const override;
     451             : 
     452             :   // Access to source subtable
     453             :   const casacore::MSSourceColumns& sourceSubtablecols() const override;
     454             : 
     455             :   // Access to sysCal subtable
     456             :   const casacore::MSSysCalColumns& sysCalSubtablecols() const override;
     457             : 
     458             :   // Access to weather subtable
     459             :   const casacore::MSWeatherColumns& weatherSubtablecols() const override;
     460             : 
     461             : private:
     462             : 
     463             :   // Make default ctor invisible
     464             :   SimpleSimVi2 ();
     465             : 
     466             :   // Keep VB2 sync'd
     467             :   void configureNewSubchunk();
     468             : 
     469             :   // Generate noise on data
     470             :   void addNoise(casacore::Cube<casacore::Complex>& vis, casacore::rownr_t vbRowOffset) const;
     471             : 
     472             :   // Corrupt by (ad hoc) parang factors
     473             :   void corruptByParang(casacore::Cube<casacore::Complex>& vis, casacore::rownr_t vbRowOffset) const;
     474             : 
     475             :   // Generate the antenna, spw and DD subtables
     476             :   void generateSubtables();
     477             : 
     478             :   // casacore::Input parameters
     479             :   const SimpleSimVi2Parameters pars_;
     480             :   /*
     481             :   casacore::Int nField_,nScan_,nSpw_,nAnt_,nCorr_;
     482             :   casacore::Vector<casacore::Int> nTimePerField_, nChan_;
     483             :   casacore::String date0_;
     484             :   casacore::Double dt_;
     485             :   casacore::Vector<casacore::Double> refFreq_, df_;
     486             :   casacore::Matrix<casacore::Float> stokes_, sefd_;
     487             :   casacore::String polBasis_;
     488             :   casacore::Bool doAC_;
     489             :   */
     490             : 
     491             :   // Derived parameters
     492             :   casacore::Int nChunk_, nBsln_;
     493             :   casacore::rownr_t  nSubchunk_;
     494             :   casacore::Complex c0_;
     495             :   casacore::Double t0_;
     496             :   casacore::Vector<casacore::Float> wt0_;
     497             :   casacore::Matrix<casacore::Complex> vis0_;
     498             : 
     499             : 
     500             :   // Counters
     501             :   casacore::Int iChunk_;
     502             :   casacore::rownr_t iSubChunk_;
     503             :   casacore::Int iRow0_;
     504             :   casacore::Int iScan_;
     505             :   casacore::Double iChunkTime0_;
     506             : 
     507             :   // Meta-info for current iteration
     508             :   casacore::Int thisScan_, thisField_, thisSpw_, thisAntenna1_, thisAntenna2_;
     509             :   casacore::Int lastScan_, lastField_, lastSpw_;
     510             :   casacore::Double thisTime_;
     511             :   casacore::rownr_t nRows_;
     512             :   casacore::rownr_t nShapes_;
     513             :   casacore::Vector<casacore::rownr_t> nRowsPerShape_;
     514             :   casacore::Vector<casacore::Int> nChannPerShape_;
     515             :   casacore::Vector<casacore::Int> nCorrsPerShape_;
     516             : 
     517             :   // Correlation stuff
     518             :   casacore::Vector<casacore::Stokes::StokesTypes> corrdef_;
     519             : 
     520             :   // The associated VB
     521             :   std::unique_ptr<VisBuffer2> vb_;
     522             : 
     523             :   // Subtables
     524             :   casacore::MSAntenna antennaSubTable_p;
     525             :   std::unique_ptr<casacore::MSAntennaColumns> antennaSubTablecols_p;
     526             :   casacore::MSSpectralWindow spwSubTable_p;
     527             :   std::unique_ptr<casacore::MSSpWindowColumns> spwSubTablecols_p;
     528             :   casacore::MSDataDescription ddSubTable_p;
     529             :   std::unique_ptr<casacore::MSDataDescColumns> ddSubTablecols_p;
     530             :   casacore::MSPolarization polSubTable_p;
     531             :   std::unique_ptr<casacore::MSPolarizationColumns> polSubTablecols_p;
     532             : 
     533             :   // Trivial (for now) MDirection, so phaseCenter() has something to return
     534             :   casacore::MDirection phaseCenter_;
     535             : 
     536             :   // Trivial (for now) parang
     537             :   mutable casacore::Vector<casacore::Float> feedpa_;
     538             : 
     539             : };
     540             : 
     541             : 
     542             : 
     543             : class SimpleSimVi2Factory : public ViFactory {
     544             : 
     545             : public:
     546             : 
     547             :   SimpleSimVi2Factory(const SimpleSimVi2Parameters& pars);
     548             :   
     549             :   ~SimpleSimVi2Factory ();
     550             : 
     551             : protected:
     552             : 
     553             :   virtual ViImplementation2 * createVi () const;
     554             : 
     555             : private:
     556             : 
     557             :   const SimpleSimVi2Parameters& pars_;
     558             : 
     559             : };
     560             : 
     561             : 
     562             : class SimpleSimVi2LayerFactory : public ViiLayerFactory {
     563             : 
     564             : public:
     565             : 
     566             :   SimpleSimVi2LayerFactory(const SimpleSimVi2Parameters& pars);
     567             : 
     568           0 :   virtual ~SimpleSimVi2LayerFactory () {}
     569             : 
     570             : protected:
     571             : 
     572             :   // SimpleSimVi2-specific layer-creater
     573             :   //   
     574             :   virtual ViImplementation2 * createInstance (ViImplementation2* vii0) const;
     575             : 
     576             : private:
     577             : 
     578             :   // Store a copy of the parameters
     579             :   const SimpleSimVi2Parameters pars_;
     580             : 
     581             : 
     582             : };
     583             : 
     584             : 
     585             : 
     586             : 
     587             : 
     588             : 
     589             : } // end namespace vi
     590             : 
     591             : } //# NAMESPACE CASA - END
     592             : 
     593             : #endif // ! defined (MSVIS_SimpleSimVi2_H)
     594             : 
     595             : 

Generated by: LCOV version 1.16