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 <measures/Measures.h>
00009 #include <measures/Measures/MEpoch.h>
00010 #include <measures/Measures/MPosition.h>
00011 #include <measures/Measures/MDirection.h>
00012 #include <measures/Measures/MCBaseline.h>
00013 #include <measures/Measures/MBaseline.h>
00014 #include <measures/Measures/MCuvw.h>
00015 #include <measures/Measures/Muvw.h>
00016 #include <casa/Quanta.h>
00017 
00018 using namespace casa;
00019 
00020 #include "ASDMEntities.h"
00021 using namespace asdm;
00022 
00035 class UvwCoords{
00036 public:
00037 
00045   UvwCoords(ASDM* const datasetPtr);
00046 
00048   ~UvwCoords();
00049 
00070   void uvw_bl( Tag configDescriptionId, 
00071                const vector<vector<Angle> >& phaseDir,
00072                double timeCentroid,
00073                Enum<CorrelationMode> correlationMode,
00074                bool reverse, bool autoTrailing,
00075                vector<Vector<casa::Double> >& v_uvw );
00076 
00094   void uvw_bl( Tag configDescriptionId, 
00095                const vector<vector<Angle> >& phaseDir,
00096                const vector<double>& v_timeCentroid,
00097                Enum<CorrelationMode> correlationMode,
00098                bool reverse, bool autoTrailing, 
00099                vector<Vector<casa::Double> >& v_uvw);
00100 
00101 
00121   void uvw_bl( asdm::MainRow* mainRow, vector<double> v_timeCentroid, 
00122                Enum<CorrelationMode> correlationMode,
00123                pair<bool,bool> dataOrder,
00124                vector<casa::Vector<casa::Double> >& v_uvw );
00125 
00126 private:
00127 
00131   struct ArrayParam{
00132   public:
00133     Tag                   subarrayId;        //<! (sub)array identifier
00134     vector<Tag>           v_ant;             //<! sequence of antennas
00135     unsigned int          nrepeat;           //<! number of MS main table rows per antenna baseline
00136     Enum<CorrelationMode> e_correlationMode; //<! correlation mode (original mode passed through the user filter)
00141     bool operator== ( ArrayParam & rhs){
00142       set<Tag> a, b;
00143       for(unsigned int na=0; na<v_ant.size(); na++){
00144         a.insert(v_ant[na]);
00145         b.insert(rhs.v_ant[na]);
00146       }
00147       if( a != b ) return false;
00148       return true;
00149     }
00150     string show(){
00151       ostringstream os;
00152       for(unsigned int n=0; n<v_ant.size(); n++)os << v_ant[n].toString() << " ";
00153       os << " nrepeat " << nrepeat;
00154       return os.str();
00155     }
00156   };
00157 
00158   map<Tag,ArrayParam>            m_array_;
00159   map<Tag,MPosition>             m_antPos_;
00160   map<Tag,Vector<casa::Double> > m_antUVW_;
00161 
00162   // the 3 fundamental attributes of the state machine
00163   double                         timeCentroid_;
00164   vector<vector<Angle> >         phaseDir_; 
00165   Tag                            subarrayId_;
00166 
00167   Vector<casa::Double>           sduvw_;
00168 
00173   vector<double> antPos(const vector<double>& stationPos, const vector<double>& antOffset);
00174 
00188   void uvw_an(double timeCentroid, const vector<vector<Angle> >& phaseDir, const vector<Tag>& v_antId);
00189 
00207   void uvw_bl( const vector<Tag>& v_antennaId, unsigned int nrep, bool reverse, vector<Vector<casa::Double> >& v_uvw);
00208 
00209 };

Generated on Thu Aug 27 21:08:35 2009 for NRAOCASA by  doxygen 1.5.1