00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #if ! defined (MSVIS_SimplSimVi2_H)
00029 #define MSVIS_SimplSimVi2_H
00030
00031 #include <casa/aips.h>
00032 #include <casa/BasicSL.h>
00033 #include <msvis/MSVis/VisBufferComponents2.h>
00034 #include <msvis/MSVis/ViImplementation2.h>
00035 #include <msvis/MSVis/ViiLayerFactory.h>
00036 #include <msvis/MSVis/VisBufferImpl2.h>
00037 #include <msvis/MSVis/VisibilityIterator2.h>
00038 #include <msvis/MSVis/VisBuffer2.h>
00039 #include <measures/Measures/MFrequency.h>
00040 #include <measures/Measures/Stokes.h>
00041 #include <casa/Arrays.h>
00042
00043 #include <map>
00044 #include <vector>
00045
00046 #define SSVi2NotPossible() ThrowCc("Not Possible in SimpleSimVi2");
00047 #define SSVi2NotYetImplemented() ThrowCc("Not yet implemented in SimpleSimVi2");
00048
00049 namespace casa {
00050
00051 class RecordInterface;
00052 class Slice;
00053 class String;
00054 template <typename T, Int n> class SquareMatrix;
00055 template <typename T> class Vector;
00056 class VisImagingWeight;
00057
00058 namespace vi {
00059
00060
00061
00062
00063 class Subchunk;
00064 class VisBuffer2;
00065
00066
00067 class SimpleSimVi2Parameters {
00068
00069 public:
00070
00071
00072 SimpleSimVi2Parameters();
00073
00074
00075 SimpleSimVi2Parameters(Int nField,Int nScan,Int nSpw,Int nAnt,Int nCorr,
00076 const Vector<Int>& nTimePerField, const Vector<Int>& nChan,
00077 Complex c0=Complex(0.0f));
00078
00079
00080 SimpleSimVi2Parameters(Int nField,Int nScan,Int nSpw,Int nAnt,Int nCorr,
00081 const Vector<Int>& nTimePerField, const Vector<Int>& nChan,
00082 String date0, Double dt,
00083 const Vector<Double>& refFreq, const Vector<Double>& df,
00084 const Matrix<Float>& stokes,
00085 Bool doNoise,
00086 const Matrix<Float>& gain, const Matrix<Float>& tsys,
00087 Bool doNorm=True,
00088 String polBasis="circ", Bool doAC=False,
00089 Complex c0=Complex(0.0f));
00090
00091 SimpleSimVi2Parameters(const SimpleSimVi2Parameters& other);
00092 SimpleSimVi2Parameters& operator=(const SimpleSimVi2Parameters& other);
00093
00094 ~SimpleSimVi2Parameters();
00095
00096
00097 void summary() const;
00098
00099 Int nField_, nScan_, nSpw_, nAnt_, nCorr_;
00100 Vector<Int> nTimePerField_, nChan_;
00101 String date0_;
00102 Double dt_;
00103 Vector<Double> refFreq_, df_;
00104 Bool doNoise_;
00105 Matrix<Float> stokes_, gain_, tsys_;
00106 Bool doNorm_;
00107 String polBasis_;
00108 Bool doAC_;
00109 Complex c0_;
00110
00111
00112 Vector<Double> freqs(Int spw) const;
00113
00114 private:
00115 void initialize(const Vector<Int>& nTimePerField, const Vector<Int>& nChan,
00116 const Vector<Double>& refFreq, const Vector<Double>& df,
00117 const Matrix<Float>& stokes,
00118 const Matrix<Float>& gain, const Matrix<Float>& tsys);
00119
00120 };
00121
00122 class SimpleSimVi2 : public ViImplementation2 {
00123
00124 public:
00125
00126 SimpleSimVi2 (const SimpleSimVi2Parameters& pars);
00127
00128
00129 SimpleSimVi2( const SimpleSimVi2& ) = delete;
00130 SimpleSimVi2& operator=( const SimpleSimVi2& ) = delete;
00131
00132
00133 virtual ~SimpleSimVi2 ();
00134
00135
00136 virtual String ViiType() const { return String("Simulated(*)"); };
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 virtual void origin ();
00148 virtual Bool more () const;
00149 virtual void next ();
00150 virtual Subchunk getSubchunkId () const;
00151
00152
00153
00154 virtual void originChunks (Bool forceRewind = False);
00155 virtual Bool moreChunks () const;
00156 virtual void nextChunk ();
00157
00158 virtual Bool isWritable () const { return False; };
00159
00160
00161
00162
00163
00164
00165 virtual Double getInterval() const {return 1.0e9; };
00166 virtual void setInterval (Double) { SSVi2NotPossible() };
00167
00168
00169
00170
00171 virtual void setFrequencySelections (const FrequencySelections & selection);
00172
00173
00174 virtual void setRowBlocking (Int) { SSVi2NotPossible() };
00175
00176 virtual Bool existsColumn (VisBufferComponent2 id) const;
00177
00178 virtual const SortColumns & getSortColumns() const { SSVi2NotPossible() };
00179
00180 virtual Bool isNewArrayId () const { return False; };
00181 virtual Bool isNewFieldId () const { return thisField_!=lastField_; };
00182 virtual Bool isNewMs () const { return False; };
00183 virtual Bool isNewSpectralWindow () const { return thisSpw_!=lastSpw_; };
00184
00185
00186
00187 virtual Int nRows () const { return nBsln_; };
00188
00189
00190
00191
00192
00193 virtual void getRowIds (Vector<uInt> & rowids) const;
00194
00195 virtual VisBuffer2 * getVisBuffer (const VisibilityIterator2 *) { SSVi2NotPossible() };
00196 virtual VisBuffer2 * getVisBuffer ();
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 virtual void antenna1 (Vector<Int> & ant1) const;
00207 virtual void antenna2 (Vector<Int> & ant2) const;
00208 virtual void corrType (Vector<Int> & corrTypes) const;
00209 virtual Int dataDescriptionId () const;
00210 virtual void dataDescriptionIds (Vector<Int> & ddis) const;
00211 virtual void exposure (Vector<Double> & expo) const;
00212 virtual void feed1 (Vector<Int> & fd1) const;
00213 virtual void feed2 (Vector<Int> & fd2) const;
00214 virtual void fieldIds (Vector<Int>&) const;
00215 virtual void arrayIds (Vector<Int>&) const;
00216 virtual String fieldName () const;
00217
00218 virtual void flag (Cube<Bool> & flags) const;
00219 virtual void flag (Matrix<Bool> &) const { SSVi2NotPossible() };
00220 virtual Bool flagCategoryExists () const { return False; };
00221 virtual void flagCategory (Array<Bool> &) const { SSVi2NotPossible() };
00222 virtual void flagRow (Vector<Bool> & rowflags) const;
00223 virtual void observationId (Vector<Int> & obsids) const;
00224 virtual Int polarizationId () const;
00225 virtual void processorId (Vector<Int> & procids) const;
00226 virtual void scan (Vector<Int> & scans) const;
00227 virtual String sourceName () const;
00228 virtual void stateId (Vector<Int> & stateids) const;
00229 virtual void jonesC (Vector<SquareMatrix<Complex, 2> > &) const { SSVi2NotPossible() };
00230 virtual Int polFrame () const;
00231 virtual void sigma (Matrix<Float> & sigmat) const;
00232 virtual Int spectralWindow () const;
00233 virtual void spectralWindows (Vector<Int> & spws) const;
00234 virtual void time (Vector<Double> & t) const;
00235 virtual void timeCentroid (Vector<Double> & t) const;
00236 virtual void timeInterval (Vector<Double> & ti) const;
00237 virtual void uvw (Matrix<Double> & uvwmat) const;
00238
00239 virtual void visibilityCorrected (Cube<Complex> & vis) const;
00240 virtual void visibilityModel (Cube<Complex> & vis) const;
00241 virtual void visibilityObserved (Cube<Complex> & vis) const;
00242 virtual void floatData (Cube<Float> & fcube) const;
00243
00244 virtual IPosition visibilityShape () const;
00245
00246 virtual void weight (Matrix<Float> & wtmat) const;
00247 virtual Bool weightSpectrumExists () const;
00248 virtual Bool sigmaSpectrumExists () const;
00249 virtual void weightSpectrum (Cube<Float> & wtsp) const;
00250 virtual void sigmaSpectrum (Cube<Float> & wtsp) const;
00251
00252 virtual void setWeightScaling (CountedPtr<WeightScaling>) { SSVi2NotPossible() };
00253 virtual Bool hasWeightScaling () const { return False; };
00254 virtual CountedPtr<WeightScaling> getWeightScaling () const;
00255
00256
00257
00258
00259
00260
00261
00262
00263 virtual Bool allBeamOffsetsZero () const { SSVi2NotPossible() };
00264 virtual MDirection azel0 (Double) const { SSVi2NotPossible() };
00265 virtual const Vector<MDirection> & azel (Double) const { SSVi2NotPossible() };
00266 virtual const Vector<Float> & feed_pa (Double) const { SSVi2NotPossible() };
00267 virtual const Cube<RigidVector<Double, 2> > & getBeamOffsets () const { SSVi2NotPossible() };
00268 virtual Double hourang (Double) const { SSVi2NotPossible() };
00269 virtual const Float & parang0 (Double) const { SSVi2NotPossible() };
00270 virtual const Vector<Float> & parang (Double) const { SSVi2NotPossible() };
00271 virtual const MDirection & phaseCenter () const { return phaseCenter_; };
00272 virtual const Cube<Double> & receptorAngles () const { SSVi2NotPossible() };
00273
00274
00275
00276
00277
00278
00279
00280 virtual const Vector<String> & antennaMounts () const { SSVi2NotPossible() };
00281 virtual const VisImagingWeight & getImagingWeightGenerator () const { SSVi2NotPossible() };
00282
00283 virtual MFrequency::Types getObservatoryFrequencyType () const { SSVi2NotPossible() };
00284 virtual MPosition getObservatoryPosition () const { SSVi2NotPossible() };
00285 virtual Vector<Float> getReceptor0Angle () { SSVi2NotPossible() };
00286
00287 virtual Int getReportingFrameOfReference () const { return -2; };
00288 virtual void setReportingFrameOfReference (Int) { SSVi2NotPossible() };
00289
00290 virtual MEpoch getEpoch () const;
00291
00292 virtual Vector<Int> getCorrelations () const;
00293
00294 virtual Vector<Stokes::StokesTypes> getCorrelationTypesDefined () const { return corrdef_; };
00295 virtual Vector<Stokes::StokesTypes> getCorrelationTypesSelected () const { return corrdef_; };
00296
00297 virtual Vector<Int> getChannels (Double time, Int frameOfReference, Int spectralWndow = -1,
00298 Int msId = -1) const;
00299 virtual Vector<Double> getFrequencies (Double time, Int frameOfReference, Int spectralWndow = -1,
00300 Int msId = -1) const;
00301
00302
00303 virtual Int msId () const { return -1; };
00304 virtual const MeasurementSet & ms () const { SSVi2NotPossible() };
00305 virtual Int getNMs () const { return 0; };
00306
00307
00308 virtual String msName() const { return String("<noms>"); };
00309
00310
00311
00312 virtual void slurp () const { SSVi2NotPossible() };
00313
00314
00315 virtual const vi::SubtableColumns & subtableColumns () const { SSVi2NotPossible() };
00316
00317
00318
00319
00320
00321 virtual const SpectralWindowChannels & getSpectralWindowChannels (Int msId, Int spectralWindowId) const;
00322
00323
00324 virtual void useImagingWeight (const VisImagingWeight & ) { SSVi2NotPossible() };
00325
00326
00327
00328 virtual Int nAntennas () const;
00329 virtual Int nDataDescriptionIds () const;
00330 virtual Int nPolarizationIds () const;
00331 virtual Int nRowsInChunk () const;
00332 virtual Int nRowsViWillSweep () const;
00333 virtual Int nSpectralWindows () const;
00334
00335
00336 virtual void writeBackChanges (VisBuffer2* ) { SSVi2NotPossible() };
00337 virtual void writeFlag (const Cube<Bool> &) { SSVi2NotPossible() };
00338 virtual void writeFlagRow (const Vector<Bool> &) { SSVi2NotPossible() };
00339 virtual void writeFlagCategory(const Array<Bool>&) { SSVi2NotPossible() };
00340 virtual void writeVisCorrected (const Cube<Complex> &) { SSVi2NotPossible() };
00341 virtual void writeVisModel (const Cube<Complex> &) { SSVi2NotPossible() };
00342 virtual void writeVisObserved (const Cube<Complex> &) { SSVi2NotPossible() };
00343 virtual void writeWeight (const Matrix<Float> &) { SSVi2NotPossible() };
00344 virtual void writeWeightSpectrum (const Cube<Float> &) { SSVi2NotPossible() };
00345 virtual void initWeightSpectrum (const Cube<Float> &) { SSVi2NotPossible() };
00346 virtual void writeSigmaSpectrum (const Cube<Float> &) { SSVi2NotPossible() };
00347 virtual void writeSigma (const Matrix<Float> &) { SSVi2NotPossible() };
00348 virtual void writeModel(const RecordInterface&,Bool,Bool) { SSVi2NotPossible() };
00349
00350 private:
00351
00352
00353 SimpleSimVi2 ();
00354
00355
00356 void configureNewSubchunk();
00357
00358
00359 void addNoise(Cube<Complex>& vis) const;
00360
00361
00362 const SimpleSimVi2Parameters pars_;
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375 Int nChunk_, nBsln_;
00376 Double t0_;
00377 Vector<Float> wt0_;
00378 Matrix<Complex> vis0_;
00379
00380
00381 Int iChunk_,iSubChunk_,iRow0_;
00382 Int iScan_;
00383 Double iChunkTime0_;
00384
00385
00386 Int thisScan_, thisField_, thisSpw_;
00387 Int lastScan_, lastField_, lastSpw_;
00388 Double thisTime_;
00389
00390
00391 Vector<Stokes::StokesTypes> corrdef_;
00392
00393
00394 VisBuffer2* vb_;
00395
00396
00397 MDirection phaseCenter_;
00398
00399 };
00400
00401
00402
00403 class SimpleSimVi2Factory : public ViFactory {
00404
00405 public:
00406
00407 SimpleSimVi2Factory(const SimpleSimVi2Parameters& pars);
00408
00409 ~SimpleSimVi2Factory ();
00410
00411 protected:
00412
00413 virtual ViImplementation2 * createVi () const;
00414
00415 private:
00416
00417 const SimpleSimVi2Parameters& pars_;
00418
00419 };
00420
00421
00422 class SimpleSimVi2LayerFactory : public ViiLayerFactory {
00423
00424 public:
00425
00426 SimpleSimVi2LayerFactory(const SimpleSimVi2Parameters& pars);
00427
00428 virtual ~SimpleSimVi2LayerFactory () {}
00429
00430 protected:
00431
00432
00433
00434 virtual ViImplementation2 * createInstance (ViImplementation2* vii0) const;
00435
00436 private:
00437
00438
00439 const SimpleSimVi2Parameters pars_;
00440
00441
00442 };
00443
00444
00445
00446
00447
00448
00449 }
00450
00451 }
00452
00453 #endif // ! defined (MSVIS_SimpleSimVi2_H)
00454
00455