AMueller.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_AMUELLER_H
00029 #define SYNTHESIS_AMUELLER_H
00030
00031 #include <casa/aips.h>
00032 #include <casa/BasicSL/Complex.h>
00033 #include <synthesis/MeasurementComponents/StandardVisCal.h>
00034 #include <synthesis/MeasurementComponents/CalCorruptor.h>
00035
00036 namespace casa {
00037
00038 class VisBuffGroupAcc;
00039
00040 class AMueller : public MMueller {
00041 public:
00042
00043
00044 AMueller(VisSet& vs);
00045 AMueller(String msname,Int MSnAnt,Int MSnSpw);
00046 AMueller(const MSMetaInfoForCal& msmc);
00047 AMueller(const Int& nAnt);
00048
00049 virtual ~AMueller();
00050
00051
00052 virtual Type type() { return VisCal::A; };
00053
00054
00055 virtual String typeName() { return "A Mueller"; };
00056 virtual String longTypeName() { return "A Mueller (baseline-based)"; };
00057
00058
00059
00060 virtual Mueller::MuellerType muellerType() { return Mueller::AddDiag2; };
00061
00062
00063 using SolvableVisCal::setSolve;
00064
00065
00066 virtual void setSolve(const Record& solvepar);
00067
00068
00069
00070
00071
00072 virtual void setSolveChannelization(VisSet& vs);
00073
00074
00075 virtual Int sizeUpSolve(VisSet& vs, Vector<Int>& nChunkPerSol);
00076
00077
00078 virtual Bool useGenericGatherForSolve() {return fitorder_p != 0;}
00079
00080
00081
00082
00083
00084 virtual Bool useGenericSolveOne() {return False;}
00085
00086
00087
00088 virtual void selfSolveOne(VisBuffGroupAcc& vbga);
00089
00090 virtual void storeNCT();
00091
00092 virtual void setApply() {SolvableVisCal::setApply();}
00093 virtual void setApply(const Record& applypar);
00094
00095
00096
00097 virtual void applyCal(VisBuffer& vb, Cube<Complex>& Vout, Bool trial=False);
00098
00099
00100 virtual Bool freqDepPar() { return False; };
00101 virtual Bool freqDepMat() {
00102 return fitorder_p != 0 || nChanPar() > 1;
00103 }
00104
00105
00106
00107
00108 virtual Bool normalizable() {return False;};
00109
00110
00111
00112 virtual void corrupt(VisBuffer& vb);
00113
00114
00115
00116
00117
00118 void syncCalMat(const Bool& doInv)
00119 {
00120 doSub_p = doInv;
00121 if(fitorder_p == 0)
00122 VisMueller::syncCalMat(doInv);
00123 }
00124
00125 protected:
00126 virtual Int nPar() {
00127 if(nCorr_p < 0)
00128 hurl("nPar()", "nPar() called before being set.");
00129 return nCorr_p;
00130 }
00131
00132 private:
00133 void init();
00134
00135
00136 void hurl(const String& origin, const String& msg);
00137
00138
00139 Int fitorder_p;
00140
00141 Bool doSub_p;
00142
00143 Int nCorr_p;
00144
00145
00146 Vector<Double> lofreq_p;
00147 Vector<Double> hifreq_p;
00148 Vector<uInt> totnumchan_p;
00149
00150 Vector<Bool> spwApplied_p;
00151
00152 };
00153
00154
00155
00156
00157 class ANoise : public SolvableVisMueller {
00158 public:
00159
00160
00161 ANoise(VisSet& vs);
00162 ANoise(String msname,Int MSnAnt,Int MSnSpw);
00163 ANoise(const MSMetaInfoForCal& msmc);
00164 ANoise(const Int& nAnt);
00165
00166 virtual ~ANoise();
00167
00168
00169 virtual Type type() { return VisCal::ANoise; };
00170
00171
00172 virtual String typeName() { return "A Noise"; };
00173 virtual String longTypeName() { return "A Noise (baseline-based)"; };
00174
00175
00176
00177 virtual Mueller::MuellerType muellerType() { return Mueller::AddDiag2; };
00178
00179
00180 virtual Bool isSolvable() { return False; };
00181
00182
00183 virtual Bool freqDepPar() { return True; };
00184
00185 virtual void createCorruptor(const VisIter& vi, const Record& simpar, const Int nSim);
00186
00187 protected:
00188
00189 virtual Int nPar() { return 2; };
00190
00191
00192 virtual Bool trivialMuellerElem() { return (!simOnTheFly()); };
00193
00194
00195 virtual Bool timeDepMat() { return simOnTheFly(); };
00196
00197
00198
00199 virtual void calcAllMueller();
00200
00201
00202
00203 virtual void calcOneMueller(Vector<Complex>& mat, Vector<Bool>& mOk,
00204 const Vector<Complex>& par, const Vector<Bool>& pOk);
00205
00206 private:
00207 ANoiseCorruptor *acorruptor_p;
00208
00209 };
00210
00211 }
00212
00213 #endif