VisIterator.h
Go to the documentation of this file.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 #ifndef MSVIS_VISITERATOR_H
00029 #define MSVIS_VISITERATOR_H
00030
00031 #include <casa/aips.h>
00032 #include <casa/Arrays/Matrix.h>
00033 #include <casa/Arrays/Cube.h>
00034 #include <casa/Arrays/Slicer.h>
00035 #include <casa/Containers/Stack.h>
00036 #include <casa/Containers/OrderedMap.h>
00037 #include <ms/MeasurementSets/MeasurementSet.h>
00038 #include <measures/Measures/Stokes.h>
00039 #include <measures/Measures/MeasConvert.h>
00040 #include <casa/Quanta/MVDoppler.h>
00041 #include <measures/Measures/MCDoppler.h>
00042 #include <measures/Measures/MDoppler.h>
00043 #include <tables/Tables/ArrayColumn.h>
00044 #include <tables/Tables/ScalarColumn.h>
00045 #include <casa/BasicSL/String.h>
00046 #include <scimath/Mathematics/SquareMatrix.h>
00047 #include <scimath/Mathematics/RigidVector.h>
00048
00049 #include <ms/MSOper/MSDerivedValues.h>
00050 #include <msvis/MSVis/StokesVector.h>
00051 #include <msvis/MSVis/VisImagingWeight.h>
00052 #include <msvis/MSVis/VisibilityIterator.h>
00053 #include <ms/MeasurementSets/MSIter.h>
00054
00055 namespace casa {
00056
00057
00058 class VisBuffer;
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 class ROVisIteratorImpl;
00115
00116 class ROVisIterator : public ROVisibilityIterator
00117 {
00118 public:
00119
00120
00121 ROVisIterator();
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 ROVisIterator(const MeasurementSet& ms,
00133 const Block<Int>& sortColumns,
00134 Double timeInterval=0);
00135
00136 ROVisIterator(const MeasurementSet & ms, const Block<Int>& sortColumns,
00137 Double timeInterval, const ROVisibilityIterator::Factory & factory);
00138
00139
00140
00141 ROVisIterator(const ROVisIterator & other);
00142
00143
00144 ~ROVisIterator();
00145
00146
00147 ROVisIterator & operator=(const ROVisIterator &other);
00148
00149
00150
00151
00152 ROVisIterator & operator++(int);
00153 ROVisIterator & operator++();
00154
00155
00156
00157
00158
00159 Vector<Int>& chanIds(Vector<Int>& chanids) const;
00160 Vector<Int>& chanIds(Vector<Int>& chanids,Int spw) const;
00161
00162
00163 Vector<Int>& corrIds(Vector<Int>& corrids) const;
00164
00165
00166 Vector<Int>& corrType(Vector<Int>& corrTypes) const;
00167
00168
00169 void selectChannel(const Vector<Vector<Slice> >& chansel);
00170 void selectCorrelation(const Vector<Vector<Slice> >& corrsel);
00171
00172
00173 Vector<Matrix<Int> >& setChanAveBounds(Float factor, Vector<Matrix<Int> >& bounds);
00174
00175
00176 void allSelectedSpectralWindows (Vector<Int> & spws, Vector<Int> & nvischan);
00177 void lsrFrequency(const Int& spw, Vector<Double>& freq, Bool& convert, const Bool ignoreconv=False);
00178
00179
00180
00181 void getChannelSelection(Block< Vector<Int> >&,
00182 Block< Vector<Int> >&,
00183 Block< Vector<Int> >&,
00184 Block< Vector<Int> >&,
00185 Block< Vector<Int> >&)
00186 { throw(AipsError("VisIterator::getChannelSelection: you can't do that!")); };
00187
00188
00189
00190 Int numberChan(Int spw) const;
00191 Int numberCorr(Int pol) const;
00192
00193 protected:
00194
00195 class Factory : public ROVisibilityIterator::Factory {
00196 public:
00197
00198 Factory (ROVisIterator * vi) : vi_p (vi) {}
00199 VisibilityIteratorReadImpl *
00200 operator() (const asyncio::PrefetchColumns * prefetchColumns,
00201 const Block<MeasurementSet>& mss,
00202 const Block<Int>& sortColumns,
00203 const Bool addDefaultSortCols,
00204 Double timeInterval) const;
00205 private:
00206
00207 ROVisIterator * vi_p;
00208
00209 };
00210
00211 void getDataColumn(DataColumn whichOne, const Vector<Vector<Slice> >& slices, Cube<Complex>& data) const;
00212 virtual ROVisIteratorImpl * getReadImpl () const;
00213 };
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 class VisIteratorImpl;
00269
00270 class VisIterator : public ROVisIterator
00271 {
00272 public:
00273
00274
00275
00276
00277 VisIterator();
00278 VisIterator(MeasurementSet & ms, const Block<Int>& sortColumns,
00279 Double timeInterval=0);
00280
00281 VisIterator(const VisIterator & MSI);
00282
00283
00284 virtual ~VisIterator();
00285
00286 VisIterator & operator=(const VisIterator &MSI);
00287
00288
00289
00290
00291 VisIterator & operator++(int);
00292 VisIterator & operator++();
00293
00294
00295 void setFlagRow(const Vector<Bool>& rowflags);
00296
00297
00298
00299
00300
00301 void setFlag(const Cube<Bool>& flag);
00302
00303
00304
00305 void setVis(const Cube<Complex>& vis, DataColumn whichOne);
00306
00307
00308 void setVisAndFlag(const Cube<Complex>& vis, const Cube<Bool>& flag,
00309 DataColumn whichOne);
00310
00311
00312 void setWeightMat(const Matrix<Float>& wtmat);
00313
00314
00315 void setWeightSpectrum(const Cube<Float>& wtsp);
00316
00317 protected:
00318
00319 class Factory : public ROVisibilityIterator::Factory {
00320 public:
00321
00322 Factory (VisIterator * vi) : vi_p (vi) {}
00323 VisibilityIteratorReadImpl *
00324 operator() (const asyncio::PrefetchColumns * prefetchColumns,
00325 const Block<MeasurementSet>& mss,
00326 const Block<Int>& sortColumns,
00327 const Bool addDefaultSortCols,
00328 Double timeInterval) const;
00329 private:
00330
00331 VisIterator * vi_p;
00332
00333 };
00334
00335 virtual void attachColumns(const Table &t);
00336
00337
00338 void putDataColumn(DataColumn whichOne, const Vector<Vector<Slice> >& slices,
00339 const Cube<Complex>& data);
00340 void putDataColumn(DataColumn whichOne, const Cube<Complex>& data);
00341
00342
00343 virtual void putCol(ScalarColumn<Bool> &column, const Vector<Bool> &array);
00344
00345 virtual void putCol(ArrayColumn<Bool> &column, const Array<Bool> &array);
00346 virtual void putCol(ArrayColumn<Float> &column, const Array<Float> &array);
00347 virtual void putCol(ArrayColumn<Complex> &column, const Array<Complex> &array);
00348
00349 virtual void putCol(ArrayColumn<Bool> &column, const Slicer &slicer, const Array<Bool> &array);
00350 virtual void putCol(ArrayColumn<Float> &column, const Slicer &slicer, const Array<Float> &array);
00351 virtual void putCol(ArrayColumn<Complex> &column, const Slicer &slicer, const Array<Complex> &array);
00352
00353 VisIteratorImpl * getImpl () const;
00354 };
00355
00356
00357
00358
00359 }
00360
00361 #endif