EPJones.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 SYNTHESIS_EPJONES_H
00029 #define SYNTHESIS_EPJONES_H
00030
00031 #include <casa/aips.h>
00032 #include <casa/Containers/Record.h>
00033 #include <casa/BasicSL/Complex.h>
00034 #include <synthesis/MeasurementComponents/SolvableVisCal.h>
00035 #include <synthesis/MeasurementComponents/nPBWProjectFT.h>
00036 #include <synthesis/MeasurementComponents/PBMosaicFT.h>
00037 #include <ms/MeasurementSets/MeasurementSet.h>
00038 #include <images/Images/PagedImage.h>
00039 #include <images/Images/ImageInterface.h>
00040 #include <images/Images/ImageInfo.h>
00041 #include <synthesis/TransformMachines/StokesImageUtil.h>
00042 #include <msvis/MSVis/VisSet.h>
00043 #include <synthesis/CalTables/CalSet.h>
00044 #include <casa/OS/Timer.h>
00045 namespace casa {
00046
00047
00048 class VisEquation;
00049 class nPBWProjectFT;
00050 class PBMosaicFT;
00051
00052
00053
00054
00055
00056 class EPJones : public SolvableVisJones {
00057 public:
00058
00059
00060 EPJones(VisSet& vs);
00061
00062 EPJones(VisSet& vs, MeasurementSet& ms);
00063
00064
00065 virtual ~EPJones();
00066
00067
00068 virtual Type type() { return VisCal::E; };
00069
00070
00071 virtual String typeName() { return "EP Jones"; };
00072 virtual String longTypeName() { return "EP Jones (pointing errors)"; };
00073
00074
00075 Jones::JonesType jonesType() { return Jones::Diagonal; };
00076
00077 virtual VisCalEnum::VCParType parType() { return setParType(VisCalEnum::REAL);};
00078
00079
00080 Cube<Float>& loadPar();
00081
00082 virtual void setModel(const String& modelImage);
00083
00084 virtual void setSolve();
00085 virtual void setSolve(const Record& solve);
00086 virtual void setNiter(const Int& niter) {niter_p=niter;}
00087 virtual void setTolerance(const Float& tol) {tolerance_p = tol;}
00088 virtual void setGain(const Float& gain) {gain_p = gain;}
00089
00090
00091 using SolvableVisCal::setApply;
00092 virtual void setApply(const Record& applypar);
00093
00094
00095 virtual void applyCal(VisBuffer& vb,
00096 Cube<Complex>& Mout);
00097
00098
00099
00100
00101
00102
00103 virtual void differentiate(VisBuffer& vb,
00104 Cube<Complex>& Mout,
00105 Array<Complex>& dMout,
00106 Matrix<Bool>& Mflg);
00107
00108 virtual void differentiate(VisBuffer& vb,
00109 VisBuffer& dvb0,
00110 VisBuffer& dvb1,
00111 Matrix<Bool>& Mflg);
00112
00113
00114
00115 virtual void diffResiduals(VisIter& vi, VisEquation& ve,
00116 VisBuffer& residuals,
00117 VisBuffer& dVr1,
00118 VisBuffer& dVr2,
00119 Matrix<Bool>& flags);
00120
00121 virtual void guessPar(VisBuffer& vb);
00122 virtual void guessPar() {pointPar_=0;}
00123
00124 virtual Cube<Float>& solveRPar() {return pointPar_;}
00125 virtual void setRPar(Cube<Float>& val) {pointPar_.resize(val.shape());pointPar_=val;}
00126 virtual void setRPar(Double val) {pointPar_=val;}
00127
00128
00129
00130 virtual Bool normalizable() { return False; };
00131
00132
00133 virtual void keep(const Int& slot);
00134
00135 inline virtual CalSet<Float>& rcs() {return *rcs_;};
00136
00137 virtual void inflate(const Vector<Int>& nChan,
00138 const Vector<Int>& startChan,
00139 const Vector<Int>& nSlot);
00140 void initSolve(VisSet& vs);
00141 void initSolvePar();
00142 void store();
00143 void store(const String& table,const Bool& append);
00144 Bool verifyForSolve(VisBuffer& vb);
00145 virtual void postSolveMassage(const VisBuffer&);
00146 virtual void selfGatherAndSolve(VisSet& vs,VisEquation& ve);
00147 virtual Bool useGenericGatherForSolve() { return False; };
00148 virtual Float printFraction(const Int& ) {return 0.1;};
00149 Array<Float> getOffsets(const Int& spw) {return rcs().par(spw);}
00150 Array<Double> getTime(const Int& spw) {return rcs().time(spw);}
00151 void nearest(const Double time, Array<Float>& vals);
00152 void printRPar();
00153
00154 protected:
00155
00156
00157 virtual Int nPar() { return 4; };
00158
00159
00160 virtual Bool trivialJonesElem() { return False; };
00161
00162
00163
00164 virtual void makeComplexGrid(TempImage<Complex>& Grid,
00165 PagedImage<Float>& ModelImage,
00166 VisBuffer& vb);
00167 void printActivity(const Int slotNo, const Int fieldId, const Int spw, const Int nSolutions);
00168
00169
00170 private:
00171
00172
00173 Cube<Float> pointPar_;
00174 nPBWProjectFT *pbwp_p;
00175
00176 MeasurementSet *ms_p;
00177 VisSet *vs_p;
00178
00179 TempImage<Complex> targetVisModel_;
00180 CalSet<Float> *rcs_;
00181 Double maxTimePerSolution, minTimePerSolution, avgTimePerSolution;
00182 Timer timer;
00183 Vector<Int> polMap_p;
00184 Float tolerance_p, gain_p;
00185 Int niter_p;
00186 };
00187
00188
00189
00190
00191
00192 }
00193
00194 #endif
00195