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_MCUVW_H
00030 #define MEASURES_MCUVW_H
00031
00032
00033 #include <casacore/casa/aips.h>
00034 #include <casacore/measures/Measures/Muvw.h>
00035 #include <casacore/measures/Measures/MeasBase.h>
00036 #include <casacore/measures/Measures/MeasRef.h>
00037 #include <casacore/measures/Measures/MCBase.h>
00038 #include <casacore/measures/Measures/MConvertBase.h>
00039 #include <casacore/measures/Measures/MeasMath.h>
00040 #include <casacore/casa/Quanta/MVDirection.h>
00041 #include <casacore/casa/OS/Mutex.h>
00042
00043 namespace casacore {
00044
00045
00046 class MCuvw;
00047 class String;
00048 template <class T> class Vector;
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 class MCuvw : public MCBase {
00086
00087 public:
00088
00089
00090
00091 friend class MeasConvert<Muvw>;
00092
00093
00094
00095 MCuvw();
00096
00097
00098 ~MCuvw();
00099
00100
00101
00102 static String showState();
00103
00104 private:
00105
00106
00107
00108
00109
00110
00111 enum Routes {
00112 GAL_J2000,
00113 GAL_B1950,
00114 J2000_GAL,
00115 B1950_GAL,
00116 J2000_B1950,
00117 J2000_B1950_VLA,
00118 B1950_J2000,
00119 B1950_VLA_J2000,
00120 B1950_B1950_VLA,
00121 B1950_VLA_B1950,
00122 J2000_JMEAN,
00123 B1950_BMEAN,
00124 JMEAN_J2000,
00125 JMEAN_JTRUE,
00126 BMEAN_B1950,
00127 BMEAN_BTRUE,
00128 JTRUE_JMEAN,
00129 BTRUE_BMEAN,
00130 J2000_JNAT,
00131 JNAT_J2000,
00132 B1950_APP,
00133 APP_B1950,
00134 APP_TOPO,
00135 HADEC_AZEL,
00136 HADEC_AZELGEO,
00137 AZEL_HADEC,
00138 AZELGEO_HADEC,
00139 HADEC_TOPO,
00140 AZEL_AZELSW,
00141 AZELGEO_AZELSWGEO,
00142 AZELSW_AZEL,
00143 AZELSWGEO_AZELGEO,
00144 APP_JNAT,
00145 JNAT_APP,
00146 J2000_ECLIP,
00147 ECLIP_J2000,
00148 JMEAN_MECLIP,
00149 MECLIP_JMEAN,
00150 JTRUE_TECLIP,
00151 TECLIP_JTRUE,
00152 GAL_SUPERGAL,
00153 SUPERGAL_GAL,
00154 ITRF_HADEC,
00155 HADEC_ITRF,
00156 TOPO_HADEC,
00157 TOPO_APP,
00158 ICRS_J2000,
00159 J2000_ICRS,
00160 N_Routes
00161 };
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 MeasMath measMath;
00174
00175 MVDirection MVDIR1;
00176
00177
00178
00179 static uInt ToRef_p[N_Routes][3];
00180
00181 static uInt FromTo_p[Muvw::N_Types][Muvw::N_Types];
00182
00183 static MutexedInit theirMutexedInit;
00184
00185
00186 static void fillState()
00187 { theirMutexedInit.exec(); }
00188
00189
00190
00191 MCuvw(const MCuvw &other);
00192
00193 MCuvw &operator=(const MCuvw &other);
00194
00195
00196
00197
00198 virtual void getConvert(MConvertBase &mc,
00199 const MRBase &inref,
00200 const MRBase &outref);
00201
00202
00203 virtual void initConvert(uInt which, MConvertBase &mc);
00204
00205
00206 virtual void clearConvert();
00207
00208
00209 virtual void doConvert(MeasValue &in,
00210 MRBase &inref,
00211 MRBase &outref,
00212 const MConvertBase &mc);
00213
00214 void doConvert(MVuvw &in,
00215 MRBase &inref,
00216 MRBase &outref,
00217 const MConvertBase &mc);
00218
00219
00220 void getAPP();
00221 void getJ2000();
00222 void getB1950();
00223
00224
00225 void toPole(MVPosition &in);
00226
00227 void fromPole(MVPosition &in);
00228
00229 private:
00230
00231 static void doFillState (void*);
00232 };
00233
00234
00235 }
00236
00237 #endif
00238