00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef FlagCalTableHandler_H_
00024 #define FlagCalTableHandler_H_
00025
00026 #include <flagging/Flagging/FlagDataHandler.h>
00027 #include <ms/MSSel/MSSelectionTools.h>
00028 #include <synthesis/CalTables/NewCalTable.h>
00029 #include <synthesis/CalTables/CTInterface.h>
00030 #include <synthesis/CalTables/CTIter.h>
00031 #include <synthesis/CalTables/CalBuffer.h>
00032 #include <measures/Measures/Stokes.h>
00033
00034 namespace casa {
00035
00036 namespace vi {
00037
00038 class WeightScaling;
00039
00040 }
00041
00042 #if !defined(__clang__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && \
00043 (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
00044 #pragma GCC diagnostic push
00045 #pragma GCC diagnostic ignored "-Wunused-parameter"
00046 #define CASA_WPOP_UNUSED
00047 #endif
00048
00049 class DummyBufferImpl: public vi::VisBuffer2
00050 {
00051 public:
00052 DummyBufferImpl() {}
00053 ~DummyBufferImpl() {}
00054
00055 virtual void copy (const VisBuffer2 & , Bool ) {}
00056 virtual void copyComponents (const VisBuffer2 & ,
00057 const VisBufferComponents2 & ,
00058 Bool = False,
00059 Bool = True) {}
00060 virtual void copyCoordinateInfo(const VisBuffer2 * , Bool ,
00061 Bool = False,
00062 Bool = True) {}
00063
00064 virtual void setShape (Int , Int , Int , Bool) {}
00065 virtual const vi::VisibilityIterator2 * getVi () const {return NULL;}
00066
00067 virtual Bool isAttached () const {return True;}
00068 virtual Bool isFillable () const {return True;}
00069
00070 virtual void writeChangesBack () {}
00071 virtual void initWeightSpectrum (const Cube<Float>&) {}
00072 virtual void initSigmaSpectrum (const Cube<Float>&) {}
00073 virtual void dirtyComponentsAdd (const VisBufferComponents2 & ) {}
00074 virtual void dirtyComponentsAdd (VisBufferComponent2 ) {}
00075 virtual void dirtyComponentsClear () {}
00076 virtual VisBufferComponents2 dirtyComponentsGet () const { VisBufferComponents2 dummy; return dummy;}
00077 virtual void dirtyComponentsSet (const VisBufferComponents2 & ) {}
00078 virtual void dirtyComponentsSet (VisBufferComponent2 ) {}
00079
00080 virtual const Matrix<Float> & imagingWeight() const {static Matrix<Float> dummy; return dummy;}
00081 void setImagingWeight (const Matrix<float> &) {}
00082
00083 virtual Double getFrequency (Int , Int ,
00084 Int = FrameNotSpecified) const { static Double dummy; return dummy;}
00085 virtual const Vector<Double> & getFrequencies (Int ,
00086 Int = FrameNotSpecified) const {static Vector<Double> dummy; return dummy;}
00087 virtual Int getChannelNumber (Int , Int ) const {static Int dummy; return dummy;}
00088 virtual const Vector<Int> & getChannelNumbers (Int ) const {static Vector<Int> dummy; return dummy;}
00089
00090 virtual void normalize() {}
00091
00092 virtual void resetWeightsUsingSigma () {}
00093
00094 virtual Bool isNewArrayId () const {static Bool dummy; return dummy;}
00095 virtual Bool isNewFieldId () const {static Bool dummy; return dummy;}
00096 virtual Bool isNewMs() const {static Bool dummy; return dummy;}
00097 virtual Bool isNewSpectralWindow () const {static Bool dummy; return dummy;}
00098 virtual Bool isWritable () const {static Bool dummy; return dummy;}
00099 virtual Int msId() const {static Int dummy; return dummy;}
00100 virtual String msName (Bool = False) const {String dummy; return dummy;}
00101 virtual vi::Subchunk getSubchunk () const {vi::Subchunk dummy; return dummy;}
00102
00103 virtual const Vector<Int> & antenna1 () const {static Vector<Int> dummy; return dummy;}
00104 virtual void setAntenna1 (const Vector<Int> & ) {}
00105 virtual const Vector<Int> & antenna2 () const {static Vector<Int> dummy; return dummy;}
00106 virtual void setAntenna2 (const Vector<Int> & ) {}
00107 virtual const Vector<Int>& arrayId () const {static Vector<Int> dummy; return dummy;}
00108 virtual void setArrayId (const Vector<Int>&) {}
00109 virtual Int dataDescriptionId () const {static Int dummy; return dummy;}
00110 virtual void setDataDescriptionId (Int ) {}
00111 virtual void setDataDescriptionIds(const casa::Vector<int>&){}
00112 virtual const Vector<MDirection> & direction1 () const {static Vector<MDirection> dummy; return dummy;}
00113 virtual const Vector<MDirection> & direction2 () const {static Vector<MDirection> dummy; return dummy;}
00114 virtual const Vector<Double> & exposure () const {static Vector<Double> dummy; return dummy;}
00115 virtual void setExposure (const Vector<Double> & ) {}
00116 virtual const Vector<Int> & feed1 () const {static Vector<Int> dummy; return dummy;}
00117 virtual void setFeed1 (const Vector<Int> & ) {}
00118 virtual const Vector<Int> & feed2 () const {static Vector<Int> dummy; return dummy;}
00119 virtual void setFeed2 (const Vector<Int> & ) {}
00120 virtual const Vector<Int>& fieldId () const {static Vector<Int> dummy; return dummy;}
00121 virtual void setFieldId (const Vector<Int>&) {}
00122 virtual const Matrix<Bool> & flag () const {static Matrix<Bool> dummy; return dummy;}
00123 virtual void setFlag (const Matrix<Bool>& ) {}
00124 virtual const Array<Bool> & flagCategory () const {static Array<Bool> dummy; return dummy;}
00125 virtual void setFlagCategory (const Array<Bool>& ) {}
00126 virtual const Cube<Bool> & flagCube () const {static Cube<Bool> dummy; return dummy;}
00127 virtual void setFlagCube (const Cube<Bool>& ) {}
00128 virtual const Vector<Bool> & flagRow () const {static Vector<Bool> dummy; return dummy;}
00129 virtual void setFlagRow (const Vector<Bool>& ) {}
00130 virtual const Vector<Int> & observationId () const {static Vector<Int> dummy; return dummy;}
00131 virtual void setObservationId (const Vector<Int> & ) {}
00132 virtual const Vector<Int> & processorId () const {static Vector<Int> dummy; return dummy;}
00133 virtual void setProcessorId (const Vector<Int> & ) {}
00134 virtual const Vector<Int> & scan () const {static Vector<Int> dummy; return dummy;}
00135 virtual void setScan (const Vector<Int> & ) {}
00136 virtual const Matrix<Float> & sigma () const {static Matrix<Float> dummy; return dummy;}
00137 virtual void setSigma (const Matrix<Float> & ) {}
00138 virtual const Matrix<Float> & sigmaMat () const {static Matrix<Float> dummy; return dummy;}
00139 virtual const Vector<Int> & stateId () const {static Vector<Int> dummy; return dummy;}
00140 virtual void setStateId (const Vector<Int> & ) {}
00141 virtual const Vector<Double> & time () const {static Vector<Double> dummy; return dummy;}
00142 virtual void setTime (const Vector<Double> & ) {}
00143 virtual const Vector<Double> & timeCentroid () const {static Vector<Double> dummy; return dummy;}
00144 virtual void setTimeCentroid (const Vector<Double> & ) {}
00145 virtual const Vector<Double> & timeInterval () const {static Vector<Double> dummy; return dummy;}
00146 virtual void setTimeInterval (const Vector<Double> & ) {}
00147 virtual const Matrix<Double> & uvw () const {static Matrix<Double> dummy; return dummy;}
00148 virtual void setUvw (const Matrix<Double> & ) {}
00149 virtual const Matrix<Float> & weight () const {static Matrix<Float> dummy; return dummy;}
00150 virtual void setWeight (const Matrix<Float>& ) {}
00151 virtual const Matrix<Float> & weightMat () const {static Matrix<Float> dummy; return dummy;}
00152 virtual void setWeightMat (const Matrix<Float>& ) {}
00153 virtual const Cube<Float> & weightSpectrum () const {static Cube<Float> dummy; return dummy;}
00154 virtual void setWeightSpectrum (const Cube<Float>& ) {}
00155 virtual const Cube<float>& sigmaSpectrum() const {static Cube<Float> dummy; return dummy;}
00156 virtual void setSigmaSpectrum(const Cube<float>&) {}
00157
00158 virtual const Cube<Complex> & visCube () const {static Cube<Complex> dummy; return dummy;}
00159 virtual void setVisCube(const Complex & ) {}
00160 virtual void setVisCube (const Cube<Complex> &){}
00161 virtual const Matrix<CStokesVector> & vis () const {static Matrix<CStokesVector> dummy; return dummy;}
00162 virtual void setVis (Matrix<CStokesVector> &) {}
00163 virtual const Cube<Complex> & visCubeCorrected () const {static Cube<Complex> dummy; return dummy;}
00164 virtual void setVisCubeCorrected (const Cube<Complex> &) {}
00165 virtual const Matrix<CStokesVector> & visCorrected () const {static Matrix<CStokesVector> dummy; return dummy;}
00166 virtual void setVisCorrected (const Matrix<CStokesVector> &) {}
00167 virtual const Cube<Float> & visCubeFloat () const {static Cube<Float> dummy; return dummy;}
00168 virtual void setVisCubeFloat (const Cube<Float> &) {}
00169 virtual const Cube<Complex> & visCubeModel () const {static Cube<Complex> dummy; return dummy;}
00170 virtual void setVisCubeModel(const Complex & ) {}
00171 virtual void setVisCubeModel(const Cube<Complex>& ) {}
00172 virtual void setVisCubeModel(const Vector<Float>& ) {}
00173 virtual const Matrix<CStokesVector> & visModel () const {static Matrix<CStokesVector> dummy; return dummy;}
00174 virtual void setVisModel (Matrix<CStokesVector> &) {}
00175
00176 virtual MDirection azel0 (Double ) const {static MDirection dummy; return dummy;}
00177 virtual Vector<MDirection> & azel(Double ) const {static Vector<MDirection> dummy; return dummy;}
00178 virtual const Vector<SquareMatrix<Complex, 2> > & cjones () const {static Vector<SquareMatrix<Complex, 2> > dummy; return dummy;}
00179 virtual const Vector<Int> & correlationTypes () const {static Vector<Int> dummy; return dummy;}
00180 virtual Vector<Float> & feedPa(Double ) const {static Vector<Float> dummy; return dummy;}
00181 virtual const Vector<Float> & feedPa1 () const {static Vector<Float> dummy; return dummy;}
00182 virtual const Vector<Float> & feedPa2 () const {static Vector<Float> dummy; return dummy;}
00183 virtual Double hourang(Double ) const {static Double dummy; return dummy;}
00184 virtual Int nAntennas () const {static Int dummy; return dummy;}
00185 virtual Int nChannels () const {static Int dummy; return dummy;}
00186 virtual Int nCorrelations () const {static Int dummy; return dummy;}
00187 virtual Int nRows () const {static Int dummy; return dummy;}
00188 virtual Float parang0(Double ) const {static Float dummy; return dummy;}
00189 virtual Vector<Float> & parang(Double ) const {static Vector<Float> dummy; return dummy;}
00190 virtual const MDirection& phaseCenter () const {static MDirection dummy; return dummy;}
00191 virtual Int polarizationFrame () const {static Int dummy; return dummy;}
00192 virtual Int polarizationId () const {static Int dummy; return dummy;}
00193 virtual const Vector<uInt> & rowIds () const {static Vector<uInt> dummy; return dummy;}
00194 virtual Int spectralWindow () const {static Int dummy; return dummy;}
00195 virtual const Vector<Int> & spectralWindows () const {static Vector<Int> dummy; return dummy;}
00196 virtual void setSpectralWindows (const Vector<Int> & ) {}
00197 virtual Bool modelDataIsVirtual () const { return false;}
00198
00199
00200 virtual void setFillable (Bool ) {}
00201 virtual const Vector<Int> & dataDescriptionIds () const {static Vector<Int> dummy; return dummy;}
00202 virtual Vector<Int> getCorrelationTypes () const {static Vector<Int> dummy; return dummy;}
00203 virtual void validateShapes () const {}
00204
00205 virtual Float getWeightScaled (Int ) const { return 0;}
00206 virtual Float getWeightScaled (Int , Int ) const { return 0;}
00207 virtual Float getWeightScaled (Int , Int , Int ) const { return 0;}
00208 virtual Float getSigmaScaled (Int row) const { return 0;}
00209 virtual Float getSigmaScaled (Int correlation, Int row) const { return 0;}
00210 virtual Float getSigmaScaled (Int correlation, Int channel, Int row) const { return 0;}
00211 virtual CountedPtr<vi::WeightScaling> getWeightScaling () const { return 0; }
00212
00213 virtual void phaseCenterShift(const Vector<Double>& phase) {};
00214 virtual void phaseCenterShift(Double dx, Double dy) {};
00215
00216
00217 protected:
00218
00219 virtual void configureNewSubchunk (Int , const String & , Bool ,
00220 Bool , Bool ,
00221 Bool , const vi::Subchunk & ,
00222 Int , Int , Int ,
00223 const Vector<Int> & ,
00224 const Vector<Stokes::StokesTypes> &,
00225 const Vector<Stokes::StokesTypes> &,
00226 CountedPtr <vi::WeightScaling> ) {}
00227 virtual void invalidate() {}
00228 virtual Bool isRekeyable () const {static Bool dummy; return dummy;}
00229 virtual void setRekeyable (Bool ) {}
00230
00231 };
00232
00233 #ifdef CASA_WPOP
00234 #pragma GCC diagnostic pop
00235 #define CASA_WPOP
00236 #endif
00237
00238
00239 class CTCache
00240 {
00241
00242 public:
00243 CTCache(CTIter *calIter);
00244 ~CTCache();
00245
00246 Int arrayId();
00247 Int fieldId();
00248 Int spectralWindow();
00249 Vector<Int>& scan();
00250 Vector<Double>& time();
00251 Vector<Int>& antenna1();
00252 Vector<Int>& antenna2();
00253 Cube<Bool>& flagCube();
00254 Vector<Int>& getChannelNumbers(Int rowInBuffer);
00255 Vector<Double>& getFrequencies(Int rowInBuffer,Int frame = vi::VisBuffer2::FrameNotSpecified);
00256 Int nRowChunk();
00257 Int nRows();
00258 Int nChannels();
00259 Int nCorrelations();
00260
00261 Cube<Complex>& visCube();
00262 Cube<Complex>& visCubeCorrected();
00263 Cube<Complex>& visCubeModel();
00264
00265
00266 Vector<Int>& observationId();
00267 Vector<Int>& correlationTypes();
00268
00269
00270 void invalidate();
00271
00272 private:
00273
00274 CTIter *calIter_p;
00275 Int field0_p;
00276 Int spw0_p;
00277 Vector<Int> field_p;
00278 Vector<Int> spw_p;
00279 Vector<Int> scan_p;
00280 Vector<Double> time_p;
00281 Vector<Int> antenna1_p;
00282 Vector<Int> antenna2_p;
00283 Cube<Bool> flagCube_p;
00284 Vector<Int> channel_p;
00285 Vector<Double> frequency_p;
00286 Cube<Complex> cparam_p;
00287 Cube<Complex> fparam_p;
00288 Cube<Complex> snr_p;
00289 Int nRowChunk_p;
00290 Int nRow_p;
00291 Int nChannel_p;
00292 Int nCorr_p;
00293
00294
00295 Vector<Int> observationId_p;
00296 Vector<Int> corrType_p;
00297
00298
00299 Bool CTfieldIdOK_p;
00300 Bool CTspectralWindowOK_p;
00301 Bool CTscanOK_p;
00302 Bool CTtimeOK_p;
00303 Bool CTantenna1OK_p;
00304 Bool CTantenna2OK_p;
00305 Bool CTflagCubeOk_p;
00306 Bool CTobservationIdOK_p;
00307 Bool CTcorrTypeOK_p;
00308 Bool CTchannelOK_p;
00309 Bool CTfrequencyOK_p;
00310 Bool CTVisCubeOK_p;
00311 Bool CTcorrectedVisCubeOK_p;
00312 Bool CTmodelVisCubeOK_p;
00313 Bool CTnRowChunkOK_p;
00314 Bool CTnRowOK_p;
00315 Bool CTnChannelOK_p;
00316 Bool CTnCorrOK_p;
00317
00318
00319 Int& fillSpectralWindow();
00320 Int& fillFieldId();
00321 Int& fillnRowChunk();
00322
00323 };
00324
00325
00326 class CTBuffer: public DummyBufferImpl
00327 {
00328
00329 public:
00330
00331 CTBuffer(CTIter *ctIter) {ctCache_p = new CTCache(ctIter);invalidate();}
00332 ~CTBuffer() {}
00333
00334 const Vector<Int> & arrayId() const {arrayId_p.assign (Vector<Int> (time().nelements(), ctCache_p->arrayId())); return arrayId_p;}
00335 const Vector<Int> & fieldId() const {fieldId_p.assign (Vector<Int> (time().nelements(), ctCache_p->fieldId())); return fieldId_p;}
00336 Int spectralWindow() const {return ctCache_p->spectralWindow();}
00337 const Vector<Int>& scan() const {return ctCache_p->scan();}
00338 const Vector<Double>& time() const {return ctCache_p->time();}
00339 const Vector<Int>& antenna1() const {return ctCache_p->antenna1();}
00340 const Vector<Int>& antenna2() const {return ctCache_p->antenna2();}
00341 const Cube<Bool>& flagCube() const {return ctCache_p->flagCube();}
00342 const Vector<Int>& getChannelNumbers(Int rowInBuffer) const {return ctCache_p->getChannelNumbers(rowInBuffer);}
00343 Vector<Int> getChannelNumbersSelected (Int outputChannelIndex) const { throw AipsError ("Not Implemented");}
00344 const Vector<Double>& getFrequencies(Int rowInBuffer,Int = vi::VisBuffer2::FrameNotSpecified) const {return ctCache_p->getFrequencies(rowInBuffer);}
00345 Int nRows() const {return ctCache_p->nRows();}
00346 Int nChannels() const {return ctCache_p->nChannels();}
00347 Int nCorrelations() const {return ctCache_p->nCorrelations();}
00348 const Vector<Int> & spectralWindows () const {
00349 spectralWindows_p.assign (Vector<Int> (time().nelements(), ctCache_p->spectralWindow())); return spectralWindows_p;}
00350
00351
00352 const Cube<Complex>& visCube() const {return ctCache_p->visCube();}
00353 const Cube<Complex>& visCubeCorrected() const {return ctCache_p->visCubeCorrected();}
00354 const Cube<Complex>& visCubeModel() const {return ctCache_p->visCubeModel();}
00355
00356
00357 const Vector<Int>& observationId() const {return ctCache_p->observationId();}
00358 const Vector<Int>& correlationTypes() const {return ctCache_p->correlationTypes();}
00359 Vector<Stokes::StokesTypes> getCorrelationTypesDefined () const { throw AipsError ("Not Implemented");}
00360 Vector<Stokes::StokesTypes> getCorrelationTypesSelected () const { throw AipsError ("Not Implemented");}
00361
00362
00363 void invalidate() {ctCache_p->invalidate();}
00364
00365 Vector<bool>& flagRowRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00366 Cube<bool>& flagCubeRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00367 Cube<complex<float> >& visCubeRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00368 Cube<complex<float> >& visCubeCorrectedRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00369 Cube<complex<float> >& visCubeModelRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00370 Cube<float >& weightSpectrumRef() {throw AipsError ("Not implemented " , __FILE__, __LINE__);}
00371 IPosition getShape () const { return IPosition ();}
00372
00373 private:
00374
00375 mutable Vector<Int> arrayId_p;
00376 mutable Vector<Int> fieldId_p;
00377 mutable Vector<Int> spectralWindows_p;
00378 CTIter *calIter_p;
00379 CTCache *ctCache_p;
00380
00381 };
00382
00383
00384 class FlagCalTableHandler: public FlagDataHandler
00385 {
00386
00387 public:
00388
00389
00390
00391 FlagCalTableHandler(string msname, uShort iterationApproach = SUB_INTEGRATION, Double timeInterval = 0);
00392
00393
00394 ~FlagCalTableHandler();
00395
00396
00397 bool open();
00398
00399
00400 bool close();
00401
00402
00403 bool selectData();
00404
00405
00406 bool parseExpression(MSSelection &parser);
00407
00408
00409 bool generateIterator();
00410
00411
00412 bool nextChunk();
00413
00414
00415 bool nextBuffer();
00416
00417
00418 bool flushFlags();
00419
00420
00421 String getTableName();
00422
00423
00424 bool checkIfColumnExists(String column);
00425
00426
00427 bool summarySignal();
00428
00429 private:
00430
00431
00432 void generateScanStartStopMap();
00433
00434
00435 Block<String> getSortColumns(Block<Int> intCols);
00436
00437
00438 NewCalTable *selectedCalTable_p;
00439 NewCalTable *originalCalTable_p;
00440 CTInterface *calTableInterface_p;
00441
00442
00443 CTIter *calIter_p;
00444 CTBuffer *calBuffer_p;
00445
00446 };
00447
00448 }
00449
00450 #endif