Line data Source code
1 : #ifndef _SYNTHESYS_POINTING_DIRECTION_PROJECTOR_H_ 2 : #define _SYNTHESYS_POINTING_DIRECTION_PROJECTOR_H_ 3 : 4 : #include <casacore/casa/Arrays/Matrix.h> 5 : #include <casacore/casa/Arrays/Vector.h> 6 : #include <casacore/casa/Logging/LogIO.h> 7 : 8 : namespace casa { 9 : // Partially projection code from ASAP GenericEdgeDetector 10 : class Projector { 11 : public: 12 : Projector(); 13 18 : virtual ~Projector() { 14 18 : } 15 : void setDirection(const casacore::Matrix<casacore::Double> &dir); 16 : void setReferenceCoordinate(casacore::Double const lat, casacore::Double const lon); 17 : void setReferencePixel(casacore::Double const refx, casacore::Double const refy); 18 : void unsetReferenceCoordinate(); 19 : void unsetReferencePixel(); 20 18 : casacore::Bool isReferenceCoordinateSet() const {return user_defined_center_;} 21 18 : casacore::Bool isReferencePixelSet() const {return user_defined_pcenter_;} 22 9 : void getUserDefinedReferenceCoordinate(casacore::Double &lat, casacore::Double &lon) { 23 9 : lat = cenx_user_; 24 9 : lon = ceny_user_; 25 9 : } 26 9 : void getUserDefinedReferencePixel(casacore::Double &refx, casacore::Double &refy) { 27 9 : refx = pcenx_user_; 28 9 : refy = pceny_user_; 29 9 : } 30 : virtual const casacore::Matrix<casacore::Double>& project() = 0; 31 : protected: 32 : // From asap/src/MathUtils 33 : void rotateRA(casacore::Vector<casacore::Double> &v); 34 : // casacore::Input data 35 : casacore::Matrix<casacore::Double> dir_; 36 : 37 : // logging 38 : casacore::LogIO os_; 39 : 40 : private: 41 : // private attributes 42 : casacore::Double cenx_user_; 43 : casacore::Double ceny_user_; 44 : casacore::Bool user_defined_center_; 45 : casacore::Double pcenx_user_; 46 : casacore::Double pceny_user_; 47 : casacore::Bool user_defined_pcenter_; 48 : }; 49 : 50 : class OrthographicProjector: public Projector { 51 : public: 52 : OrthographicProjector(casacore::Float pixel_scale = 0.5); 53 : virtual ~OrthographicProjector(); 54 : const casacore::Matrix<casacore::Double>& project(); 55 : const casacore::Vector<casacore::Double>& p_center() const { 56 : return p_center_; 57 : } 58 36 : const casacore::Vector<casacore::Double>& p_size() const { 59 36 : return p_size_; 60 : } 61 9 : casacore::Double pixel_size() const { 62 9 : return dy_; 63 : } 64 : 65 : private: 66 : void scale_and_center(); 67 : // options 68 : casacore::Float pixel_scale_; 69 : // pixel info 70 : casacore::Double cenx_; 71 : casacore::Double ceny_; 72 : casacore::Double pcenx_; 73 : casacore::Double pceny_; 74 : casacore::uInt nx_; 75 : casacore::uInt ny_; 76 : casacore::Double dx_; 77 : casacore::Double dy_; 78 : 79 : // storage for projection 80 : casacore::Matrix<casacore::Double> pdir_; 81 : 82 : // projection parameters computed from input directions 83 : casacore::Vector<casacore::Double> p_center_; 84 : casacore::Vector<casacore::Double> p_size_; 85 : }; 86 : 87 : } // end of namespace casa 88 : 89 : #endif /* _SYNTHESYS_POINTING_DIRECTION_PROJECTOR_H_ */