MeasTableMul.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
00029 #ifndef MEASURES_MEASTABLEMUL_H
00030 #define MEASURES_MEASTABLEMUL_H
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/scimath/Functionals/Polynomial.h>
00035 #include <casacore/casa/Arrays/Matrix.h>
00036 #include <casacore/casa/OS/Mutex.h>
00037 #include <vector>
00038
00039 namespace casacore {
00040
00041
00042 class RotMatrix;
00043 class Euler;
00044
00045
00046
00047
00048
00049
00050
00051
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
00082
00083
00084
00085
00086
00087
00088
00089 class MeasTableMul
00090 {
00091 public:
00092 MeasTableMul();
00093 virtual ~MeasTableMul() {}
00094 void clear();
00095 CountedPtr<Matrix<Double> > getArray (Double time, Double epsilon);
00096 virtual void init() = 0;
00097 virtual void calc(Matrix<Double>&, Double time) = 0;
00098 protected:
00099 Mutex itsMutex;
00100 Int64 itsLastUsed;
00101 vector<Int64> itsUsed;
00102 vector<Double> itsTimes;
00103 vector<CountedPtr<Matrix<Double> > > itsArrays;
00104 Matrix<Double> itsDefArray;
00105 };
00106
00107
00108
00109
00110
00111 class MeasTableMulSCBase: public MeasTableMul
00112 {
00113 public:
00114 MeasTableMulSCBase();
00115 protected:
00116 void doInit(Matrix<Double>& result,
00117 Polynomial<Double> poly[],
00118 Int nrowTD, const Long coeffTD[][5],
00119 Int nrowSC, const Short coeffSC[][2]);
00120 void doCalc(Matrix<Double>& result, Double time,
00121 const Polynomial<Double> poly[],
00122 Int nrowTD, const Long coeffTD[][5]);
00123 };
00124
00125
00126
00127
00128 class MeasTableMulSC: public MeasTableMulSCBase
00129 {
00130 public:
00131 MeasTableMulSC();
00132 virtual void init();
00133 virtual void calc(Matrix<Double>&, Double time);
00134 private:
00135 Polynomial<Double> itsPoly[2*15];
00136 static const Long theirMULTD[15][5];
00137 static const Short theirMULSC[106][2];
00138 };
00139
00140
00141
00142
00143 class MeasTableMulSC1950: public MeasTableMulSCBase
00144 {
00145 public:
00146 MeasTableMulSC1950();
00147 virtual void init();
00148 virtual void calc(Matrix<Double>&, Double time);
00149 private:
00150 Polynomial<Double> itsPoly[2*13];
00151 static const Long theirMULTD[13][5];
00152 static const Short theirMULSC[69][2];
00153 };
00154
00155
00156
00157
00158
00159 class MeasTableMulSC2000Base: public MeasTableMul
00160 {
00161 public:
00162 MeasTableMulSC2000Base();
00163 protected:
00164 void doInit(Matrix<Double>& result,
00165 Polynomial<Double> poly[],
00166 Int nrowSC, const Long coeffSC[][6]);
00167 void doCalc(Matrix<Double>& result, Double time,
00168 const Polynomial<Double> poly[],
00169 Int nrowSC);
00170 };
00171
00172
00173
00174
00175 class MeasTableMulSC2000A: public MeasTableMulSC2000Base
00176 {
00177 public:
00178 MeasTableMulSC2000A();
00179 virtual void init();
00180 virtual void calc(Matrix<Double>&, Double time);
00181 private:
00182 Polynomial<Double> itsPoly[2*678];
00183 static const Long theirMULSC[678][6];
00184 };
00185
00186
00187
00188
00189 class MeasTableMulSC2000B: public MeasTableMulSC2000Base
00190 {
00191 public:
00192 MeasTableMulSC2000B();
00193 virtual void init();
00194 virtual void calc(Matrix<Double>&, Double time);
00195 private:
00196 Polynomial<Double> itsPoly[2*77];
00197 static const Long theirMULSC[77][6];
00198 };
00199
00200
00201
00202
00203
00204 class MeasTableMulAber: public MeasTableMul
00205 {
00206 public:
00207 MeasTableMulAber();
00208 virtual void init();
00209 virtual void calc(Matrix<Double>&, Double time);
00210 private:
00211 Polynomial<Double> itsPoly[18];
00212 static const Long theirMABERTD[3][18];
00213 static const Short theirMABER[80][6];
00214 };
00215
00216
00217
00218
00219
00220 class MeasTableMulAber1950: public MeasTableMul
00221 {
00222 public:
00223 MeasTableMulAber1950();
00224 virtual void init();
00225 virtual void calc(Matrix<Double>&, Double time);
00226 private:
00227 Polynomial<Double> itsPoly[18];
00228 double itsFactor;
00229 static const Short theirMABER[130][6];
00230 static const Short theirABERT1T[10];
00231 static const Short theirABERT2T[2];
00232 static const Short theirABERT3T[1];
00233 static const Double theirABERSPEC[2][6];
00234 };
00235
00236
00237
00238
00239
00240 class MeasTableMulPosSunXY: public MeasTableMul
00241 {
00242 public:
00243 MeasTableMulPosSunXY();
00244 virtual void init();
00245 virtual void calc(Matrix<Double>&, Double time);
00246 private:
00247 static const Double theirMPOSXY[98][4];
00248 };
00249
00250
00251
00252
00253 class MeasTableMulPosSunZ: public MeasTableMul
00254 {
00255 public:
00256 MeasTableMulPosSunZ();
00257 virtual void init();
00258 virtual void calc(Matrix<Double>&, Double time);
00259 private:
00260 static const Double theirMPOSZ[29][2];
00261 };
00262
00263
00264
00265
00266
00267 class MeasTableMulPosEarthXY: public MeasTableMul
00268 {
00269 public:
00270 MeasTableMulPosEarthXY();
00271 virtual void init();
00272 virtual void calc(Matrix<Double>&, Double time);
00273 private:
00274 static const Double theirMPOSXY[189][4];
00275 };
00276
00277
00278
00279
00280 class MeasTableMulPosEarthZ: public MeasTableMul
00281 {
00282 public:
00283 MeasTableMulPosEarthZ();
00284 virtual void init();
00285 virtual void calc(Matrix<Double>&, Double time);
00286 private:
00287 static const Double theirMPOSZ[32][2];
00288 };
00289
00290
00291 }
00292
00293 #endif