UvwCoords.h
Go to the documentation of this file.00001 #include <vector>
00002 #include <map>
00003 using namespace std;
00004
00005 #include "Enum.hpp"
00006 #include "CorrelationMode.h"
00007
00008 #include <ms/MeasurementSets/MSFieldColumns.h>
00009
00010 #include <measures/Measures.h>
00011 #include <measures/Measures/MEpoch.h>
00012 #include <measures/Measures/MPosition.h>
00013 #include <measures/Measures/MDirection.h>
00014 #include <measures/Measures/MCBaseline.h>
00015 #include <measures/Measures/MBaseline.h>
00016 #include <measures/Measures/MCuvw.h>
00017 #include <measures/Measures/Muvw.h>
00018 #include <casa/Quanta.h>
00019
00020 using namespace casa;
00021
00022 #include "ASDMEntities.h"
00023 using namespace asdm;
00024
00042 class UvwCoords{
00043 public:
00044
00052 UvwCoords(ASDM* const datasetPtr);
00053
00055 ~UvwCoords();
00056
00079 void uvw_bl( Tag configDescriptionId,
00080 const vector<vector<Angle> >& phaseDir,
00081 double timeCentroid,
00082 Enum<CorrelationMode> correlationMode,
00083 bool reverse, bool autoTrailing,
00084 vector<Vector<casa::Double> >& v_uvw,
00085 casa::MSFieldColumns* msfc_p=0);
00086
00110 void uvw_bl( Tag configDescriptionId,
00111 const vector<vector<Angle> >& phaseDir,
00112 const vector<double>& v_timeCentroid,
00113 Enum<CorrelationMode> correlationMode,
00114 bool reverse, bool autoTrailing,
00115 vector<Vector<casa::Double> >& v_uvw,
00116 casa::MSFieldColumns* msfc_p=0);
00117
00155 void uvw_bl( asdm::MainRow* mainRow, vector<pair<unsigned int,double> > v_tci,
00156 Enum<CorrelationMode> correlationMode,
00157 pair<bool,bool> dataOrder, vector<Vector<casa::Double> >& v_uvw);
00158
00159
00181 void uvw_bl( asdm::MainRow* mainRow, vector<double> v_timeCentroid,
00182 Enum<CorrelationMode> correlationMode,
00183 pair<bool,bool> dataOrder,
00184 vector<casa::Vector<casa::Double> >& v_uvw,
00185 casa::MSFieldColumns* msfc_p=0 );
00186
00187 private:
00188
00192 struct ArrayParam{
00193 public:
00194 Tag subarrayId;
00195 vector<Tag> v_ant;
00196 unsigned int nrepeat;
00197 Enum<CorrelationMode> e_correlationMode;
00202 bool operator== ( ArrayParam & rhs){
00203 set<Tag> a, b;
00204 for(unsigned int na=0; na<v_ant.size(); na++){
00205 a.insert(v_ant[na]);
00206 }
00207
00208 for (unsigned int na=0; na<rhs.v_ant.size(); na++) {
00209 b.insert(rhs.v_ant[na]);
00210 }
00211
00212 if( a != b ) return false;
00213 return true;
00214 }
00215 string show(){
00216 ostringstream os;
00217 for(unsigned int n=0; n<v_ant.size(); n++)os << v_ant[n].toString() << " ";
00218 os << " nrepeat " << nrepeat;
00219 return os.str();
00220 }
00221 };
00222
00223 map<Tag,ArrayParam> m_array_;
00224 map<Tag,MPosition> m_antPos_;
00225 map<Tag,Vector<casa::Double> > m_antUVW_;
00226
00227
00228 double timeCentroid_;
00229 vector<vector<Angle> > phaseDir_;
00230 Tag subarrayId_;
00231
00232 Vector<casa::Double> sduvw_;
00233
00251 vector<double> antPos(const vector<double>& stationPos, const vector<double>& antOffset);
00252
00266 void uvw_an(double timeCentroid, const vector<vector<Angle> >& phaseDir, const vector<Tag>& v_antId);
00267
00268
00286 void uvw_bl( const vector<Tag>& v_antennaId, unsigned int nrep, bool reverse, vector<Vector<casa::Double> >& v_uvw);
00287
00288 };