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 #ifndef MSVIS_VISBUFFERIMPL_H
00028 #define MSVIS_VISBUFFERIMPL_H
00029
00030 #include <casa/aips.h>
00031
00032 #warning "Remove next line later"
00033 # include <msvis/MSVis/VisBuffer.h>
00034
00035 #include <casa/Arrays/Cube.h>
00036 #include <casa/Arrays/Vector.h>
00037 #include <casa/Arrays/Matrix.h>
00038 #include <casa/BasicSL/Complex.h>
00039 #include <msvis/MSVis/VisBufferComponents.h>
00040
00041 namespace casa {
00042
00043 namespace asyncio {
00044 class VLAT;
00045 }
00046
00047 class VbDirtyComponents;
00048 class ROVisibilityIterator2;
00049 class VisibilityIterator2;
00050
00051 namespace vi {
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 #if 0 // Can't avoid the definition in VisBuffer for now
00082
00083 class VbDirtyComponents {
00084
00085 public:
00086
00087 typedef std::set<VisBufferComponents::EnumType> Set;
00088 typedef Set::const_iterator const_iterator;
00089
00090 VbDirtyComponents operator+ (const VbDirtyComponents & other) const;
00091
00092 const_iterator begin () const;
00093 Bool contains (VisBufferComponents::EnumType component) const;
00094 const_iterator end () const;
00095
00096 static VbDirtyComponents all ();
00097 static VbDirtyComponents exceptThese (VisBufferComponents::EnumType component, ...);
00098 static VbDirtyComponents none ();
00099 static VbDirtyComponents singleton (VisBufferComponents::EnumType component);
00100 static VbDirtyComponents these (VisBufferComponents::EnumType component, ...);
00101
00102 protected:
00103
00104 private:
00105
00106 Set set_p;
00107
00108 static const VbDirtyComponents all_p;
00109
00110 static VbDirtyComponents initializeAll ();
00111
00112 };
00113
00114 #endif // commenting out
00115
00116
00117 class VbCacheItemBase;
00118 class VisBufferCache;
00119 class VisBufferState;
00120
00121 using vi::VbCacheItemBase;
00122 using vi::VisBufferCache;
00123 using vi::VisBufferState;
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 class VisBufferImpl {
00169
00170 friend class casa::asyncio::VLAT;
00171 friend class VbCacheItemBase;
00172 friend class VisBufferCache;
00173 friend class VisBufferState;
00174 friend class VisBufferImplAsync;
00175 friend class VisBufferImplAsyncWrapper;
00176 friend class ViReadImpl;
00177 friend class ViReadImplAsync;
00178
00179 public:
00180
00181 VisBufferImpl();
00182
00183
00184 VisBufferImpl(ROVisibilityIterator2 & iter);
00185
00186
00187
00188 VisBufferImpl(const VisBufferImpl & vb);
00189
00190
00191 virtual ~VisBufferImpl();
00192
00193
00194
00195
00196 virtual VisBufferImpl & operator=(const VisBufferImpl & vb);
00197
00198
00199
00200
00201 virtual void assign(const VisBufferImpl & vb, Bool copy = True);
00202
00203 virtual VisBufferImpl * clone () const;
00204
00205 virtual const ROVisibilityIterator2 * getVi () const;
00206
00207 virtual void invalidate();
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00230
00231
00232
00234
00239
00241
00243
00244 virtual void dirtyComponentsAdd (const VbDirtyComponents & additionalDirtyComponents);
00245 virtual void dirtyComponentsAdd (VisBufferComponents::EnumType component);
00246 virtual void dirtyComponentsClear ();
00247 virtual VbDirtyComponents dirtyComponentsGet () const;
00248 virtual void dirtyComponentsSet (const VbDirtyComponents & dirtyComponents);
00249 virtual void dirtyComponentsSet (VisBufferComponents::EnumType component);
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260 virtual Vector<Float> feed_pa(Double time) const;
00261
00262
00263
00264
00265
00266
00267
00268 virtual Float parang0(Double time) const;
00269 virtual Vector<Float> parang(Double time) const;
00270
00271 virtual MDirection azel0(Double time) const;
00272 virtual void azel0Vec(Double time, Vector<Double>& azelVec) const;
00273 virtual Vector<MDirection> azel(Double time) const;
00274 virtual void azelMat(Double time, Matrix<Double>& azelMat) const;
00275
00276
00277 virtual Double hourang(Double time) const;
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 void freqAveCubes();
00324
00325
00326
00327
00328
00329 void averageChannels (const Matrix<Int>& chanavebounds);
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341 virtual void sortCorr ();
00342 virtual void unSortCorr();
00343
00344
00345
00346 virtual void normalize(const Bool & phaseOnly = False);
00347
00348
00349 virtual void resetWeightsUsingSigma ();
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365 virtual void updateCoordInfo(const VisBufferImpl * vb = NULL, const Bool dirDependent = True);
00366 void copyCoordInfo(const VisBufferImpl & other, Bool force = False);
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395 virtual Bool isNewArrayId () const;
00396 virtual Bool isNewFieldId () const;
00397 virtual Bool isNewMs() const;
00398 virtual Bool isNewSpectralWindow () const;
00399 virtual Bool isWritable () const;
00400 virtual Int msId() const;
00401 virtual String msName (Bool stripPath = False) const;
00402
00404
00405
00406
00407
00408
00409
00410
00411
00412 virtual Vector<Int> antenna1 () const;
00413 virtual const Vector<Int> & antenna2 () const;
00414 virtual Int arrayId () const;
00415 virtual const Vector<Int> & channel () const;
00416 virtual const Vector<SquareMatrix<Complex, 2> > & cjones () const;
00417 virtual const Cube<Complex> & correctedVisCube () const;
00418 virtual void setCorrectedVisCube (const Cube<Complex> &);
00419 virtual const Matrix<CStokesVector> & correctedVisibility () const;
00420 virtual void setCorrectedVisibility (const Matrix<CStokesVector> &);
00421 virtual const Vector<Int> & corrType () const;
00422 virtual Int dataDescriptionId () const;
00423 virtual const Vector<MDirection> & direction1 () const;
00424 virtual const Vector<MDirection> & direction2 () const;
00425 virtual const Vector<Double> & exposure () const;
00426 virtual const Vector<Int> & feed1 () const;
00427 virtual const Vector<Float> & feed1_pa () const;
00428 virtual const Vector<Int> & feed2 () const;
00429 virtual const Vector<Float> & feed2_pa () const;
00430 virtual Int fieldId () const;
00431 virtual const Matrix<Bool> & flag () const;
00432 virtual void setFlag (const Matrix<Bool>&);
00433 virtual const Array<Bool> & flagCategory () const;
00434 virtual void setFlagCategory (const Array<Bool>&);
00435 virtual const Cube<Bool> & flagCube () const;
00436 virtual void setFlagCube (const Cube<Bool>&);
00437 virtual const Vector<Bool> & flagRow () const;
00438 virtual void setFlagRow (const Vector<Bool>&);
00439 virtual const Cube<Float> & floatDataCube () const;
00440 virtual void setFloatDataCube (const Cube<Float> &);
00441 virtual const Vector<Double> & frequency () const;
00442 virtual const Matrix<Float> & imagingWeight () const;
00443 virtual const Cube<Complex> & modelVisCube () const;
00444 virtual void setModelVisCube(const Complex & c);
00445 virtual void setModelVisCube(const Cube<Complex>& vis);
00446 virtual void setModelVisCube(const Vector<Float>& stokes);
00447 virtual const Matrix<CStokesVector> & modelVisibility () const;
00448 virtual void setModelVisibility (Matrix<CStokesVector> &);
00449 virtual Int nChannel () const;
00450 virtual Int nCorr () const;
00451 virtual Int nRow () const;
00452 virtual const Vector<Int> & observationId () const;
00453 virtual const MDirection& phaseCenter () const;
00454 virtual Int polFrame () const;
00455 virtual const Vector<Int> & processorId () const;
00456 virtual const Vector<uInt> & rowIds () const;
00457 virtual const Vector<Int> & scan () const;
00458 virtual const Vector<Float> & sigma () const;
00459 virtual const Matrix<Float> & sigmaMat () const;
00460 virtual Int spectralWindow () const;
00461 virtual const Vector<Int> & stateId () const;
00462 virtual const Vector<Double> & time () const;
00463 virtual const Vector<Double> & timeCentroid () const;
00464 virtual const Vector<Double> & timeInterval () const;
00465 virtual const Vector<RigidVector<Double, 3> > & uvw () const;
00466 virtual const Matrix<Double> & uvwMat () const;
00467 virtual const Cube<Complex> & visCube () const;
00468 virtual void setVisCube(const Complex & c);
00469 virtual void setVisCube (const Cube<Complex> &);
00470 virtual const Matrix<CStokesVector> & visibility () const;
00471 virtual void setVisibility (Matrix<CStokesVector> &);
00472 virtual const Vector<Float> & weight () const;
00473 virtual void setWeight (const Vector<Float>&);
00474 virtual const Matrix<Float> & weightMat () const;
00475 virtual void setWeightMat (const Matrix<Float>&);
00476 virtual const Cube<Float> & weightSpectrum () const;
00477 virtual void setWeightSpectrum (const Cube<Float>&);
00478
00479 protected:
00480
00481
00482
00483
00484
00485 virtual void attachToVisibilityIterator2 (ROVisibilityIterator2 & iter);
00486 virtual void cacheCopy (const VisBufferImpl & other, Bool markAsCached);
00487 virtual void cacheClear (Bool markAsCached = False);
00488
00489 void adjustWeightFactorsAndFlags (Matrix <Float> & rowWeightFactors,
00490 Bool useWeightSpectrum,
00491 Int nRows,
00492 Int nCorrelations,
00493 Int nChannelsOut);
00494 void adjustWeightAndSigmaMatrices (Int nChannelsAveraged, Int nChannelsOut, Int nRows,
00495 Int nCorrelations, Int nChannelsSelected,
00496 const Matrix <Float> & rowWeightFactors);
00497
00498 Int averageChannelFrequencies (Int nChannelsOut,
00499 const Vector<Int> & channels,
00500 const Matrix<Int> & averagingBounds);
00501
00502 void averageFlagInfoChannels (const Matrix<Int> & averagingBounds,
00503 Int nChannelsOut, Bool useWeightSpectrum);
00504
00505 template<class T>
00506 void averageVisCubeChannels (T & dataCache,
00507 Int nChanOut,
00508 const Matrix<Int>& averagingbounds);
00509
00510 virtual void checkVisIter (const char * func, const char * file, int line, const char * extra = "") const;
00511 void computeRowWeightFactors (Matrix <Float> & rowWeightFactors, Bool useWeightSpectrum);
00512 virtual void sortCorrelationsAux (Bool makeSorted);
00513 virtual void detachFromVisibilityIterator2 ();
00514 virtual ROVisibilityIterator2 * getViP () const;
00515 void registerCacheItem (VbCacheItemBase *);
00516 void setIterationInfo (Int msId, const String & msName, Bool isNewMs,
00517 Bool isNewArrayId, Bool isNewFieldId, Bool isNewSpectralWindow);
00518 virtual void stateCopy (const VisBufferImpl & other);
00519
00520 template <typename Coord>
00521 void updateCoord (Coord & item, const Coord & otherItem);
00522
00523 private:
00524
00525 virtual Bool areCorrelationsInCanonicalOrder () const;
00526 void checkVisIterBase (const char * func, const char * file, int line, const char * extra = "") const;
00527 void construct();
00528 void constructCache();
00529 virtual void validate();
00530
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544 virtual void fillAntenna1 (Vector<Int>& value) const;
00545 virtual void fillAntenna2 (Vector<Int>& value) const;
00546 virtual void fillArrayId (Int& value) const;
00547 virtual void fillChannel (Vector<Int>& value) const;
00548 virtual void fillCorrType (Vector<Int>& value) const;
00549 virtual void fillCubeCorrected (Cube <Complex> & value) const;
00550 virtual void fillCubeModel (Cube <Complex> & value) const;
00551 virtual void fillCubeObserved (Cube <Complex> & value) const;
00552 virtual void fillDataDescriptionId (Int& value) const;
00553 virtual void fillDirection1 (Vector<MDirection>& value) const;
00554 virtual void fillDirection2 (Vector<MDirection>& value) const;
00555 virtual void fillDirectionAux (Vector<MDirection>& value,
00556 const Vector<Int> & antenna,
00557 const Vector<Int> &feed,
00558 const Vector<Float> & feedPa) const;
00559 virtual void fillExposure (Vector<Double>& value) const;
00560 virtual void fillFeed1 (Vector<Int>& value) const;
00561 virtual void fillFeed2 (Vector<Int>& value) const;
00562 virtual void fillFeedPa1 (Vector <Float> & feedPa) const;
00563 virtual void fillFeedPa2 (Vector <Float> & feedPa) const;
00564 virtual void fillFeedPaAux (Vector <Float> & feedPa,
00565 const Vector <Int> & antenna,
00566 const Vector <Int> & feed) const;
00567 virtual void fillFieldId (Int& value) const;
00568 virtual void fillFlag (Matrix<Bool>& value) const;
00569 virtual void fillFlagCategory (Array<Bool>& value) const;
00570 virtual void fillFlagCube (Cube<Bool>& value) const;
00571 virtual void fillFlagRow (Vector<Bool>& value) const;
00572 virtual void fillFloatData (Cube<Float>& value) const;
00573 virtual void fillFrequency (Vector<Double>& value) const;
00574 virtual void fillImagingWeight (Matrix<Float> & value) const;
00575 virtual void fillJonesC (Vector<SquareMatrix<Complex, 2> >& value) const;
00576 virtual void fillNChannel (Int& value) const;
00577 virtual void fillNCorr (Int& value) const;
00578 virtual void fillNRow (Int& value) const;
00579 virtual void fillObservationId (Vector<Int>& value) const;
00580 virtual void fillPhaseCenter (MDirection& value) const;
00581 virtual void fillPolFrame (Int& value) const;
00582 virtual void fillProcessorId (Vector<Int>& value) const;
00583 virtual void fillScan (Vector<Int>& value) const;
00584 virtual void fillSigma (Vector<Float>& value) const;
00585 virtual void fillSigmaMat (Matrix<Float>& value) const;
00586 virtual void fillSpectralWindow (Int& value) const;
00587 virtual void fillStateId (Vector<Int>& value) const;
00588 virtual void fillTime (Vector<Double>& value) const;
00589 virtual void fillTimeCentroid (Vector<Double>& value) const;
00590 virtual void fillTimeInterval (Vector<Double>& value) const;
00591 virtual void fillUvw (Vector<RigidVector<Double, 3> >& value) const;
00592 virtual void fillUvwMat (Matrix<Double>& value) const;
00593 virtual void fillVisibilityCorrected (Matrix<CStokesVector>& value) const;
00594 virtual void fillVisibilityModel (Matrix<CStokesVector>& value) const;
00595 virtual void fillVisibilityObserved (Matrix<CStokesVector>& value) const;
00596 virtual void fillWeight (Vector<Float>& value) const;
00597 virtual void fillWeightMat (Matrix<Float>& value) const;
00598 virtual void fillWeightSpectrum (Cube<Float>& value) const;
00599
00600 VisBufferCache * cache_p;
00601 VisBufferState * state_p;
00602 };
00603
00604 }
00605
00606 }
00607
00608
00609 #endif
00610