Changeset 470 in Sophya for trunk/SophyaLib/Samba/localmap.h
- Timestamp:
- Oct 15, 1999, 5:43:30 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Samba/localmap.h
r228 r470 4 4 #include "pixelmap.h" 5 5 #include "sphericalmap.h" 6 #include "ndatablock.h" 7 8 #include "anydataobj.h" 9 #include "ppersist.h" 6 10 7 11 // A local map of a region of the sky, in cartesian coordinates. … … 13 17 // indice de colonne et j indice de ligne. La carte est supposee resider 14 18 // dans un plan tangent, dont le point de tangence est repere (x0,y0) dans 15 // la carte et (theta0, phi0) sur la sphere celeste. L 'extension de la19 // la carte et (theta0, phi0) sur la sphere celeste. L extension de la 16 20 // carte est definie par les valeurs de deux angles couverts respectivement 17 21 // par la totalite des pixels en x de la carte et la totalite des pixels 18 22 // en y. (SetSize()). 19 23 // On considere un "plan de reference" : plan tangent a la sphere celeste 20 // aux angles theta=Pi/2 et phi=0. Dans ce plan L 'origine des coordonnees21 // est le point de tangence. L 'axe Ox est la tangente parallele a22 // l 'equateur, dirige vers les phi croissants, l'axe Oy est parallele24 // aux angles theta=Pi/2 et phi=0. Dans ce plan L origine des coordonnees 25 // est le point de tangence. L axe Ox est la tangente parallele a 26 // lequateur, dirige vers les phi croissants, l axe Oy est parallele 23 27 // au meridien, dirige vers le pole nord. 24 28 // De maniere interne a la classe une carte est definie dans ce plan de 25 // reference et transportee jusqu 'au point (theta0, phi0) de sorte que les // axes restent paralleles aux meridiens et paralleles. L'utilisateur peut29 // reference et transportee jusqu au point (theta0, phi0) de sorte que les // axes restent paralleles aux meridiens et paralleles. L utilisateur peut 26 30 // definir sa carte selon un repere en rotation par rapport au repere de 27 // reference (par l 'angle entre le parallele et l'axe Ox souhaite --31 // reference (par l angle entre le parallele et l axe Ox souhaite -- 28 32 // methode SetOrigin(...)) 29 33 30 34 35 // ***************** Class LocalMap ***************************** 31 36 37 template<class T> 38 class LocalMap : public PixelMap<T>, public AnyDataObj 39 { 32 40 41 public: 33 42 43 LocalMap(); 44 LocalMap(int_4 nx, int_4 ny); 45 LocalMap(const LocalMap<T>& lm); 46 virtual ~LocalMap(); 34 47 48 // ---------- Overloading of () to access pixel number k ---- 35 49 36 class LocalMap : public PixelMap { 37 public: 38 LocalMap(); 39 LocalMap(int_4 nx, int_4 ny); 40 virtual ~LocalMap(); 41 // Overloading of () to access pixel number k. 42 inline r_8& operator()(int_4 k) 43 {return(PixVal(k));} 44 inline r_8 const& operator()(int_4 k) const 45 {return(PixVal(k));} 46 inline r_8& operator()(int ix, int iy) 47 { return PixVal(iy*mSzX_+ix) ; }; 48 inline r_8 const& operator()(int ix, int iy) const 49 { return PixVal(iy*mSzX_+ix) ; }; 50 inline T& operator()(int_4 k) {return(PixVal(k));} 51 inline T const& operator()(int_4 k) const {return(PixVal(k));} 52 inline T& operator()(int ix, int iy) {return PixVal(iy*nSzX_+ix);}; 53 inline T const& operator()(int ix, int iy) const {return PixVal(iy*nSzX_+ix);}; 50 54 51 // ---------- Persistence handling 55 // ---------- Definition of PixelMap abstract methods ------- 56 57 /* return/set the number of pixels */ 58 virtual int_4 NbPixels() const; 59 inline void setNbPixels(int_4 n) {nPix_= n;} 60 61 /* return the value of pixel number k */ 62 virtual T& PixVal(int_4 k); 63 virtual T const& PixVal(int_4 k) const; 64 65 /* return the index of pixel at (theta,phi) */ 66 virtual int_4 PixIndexSph(float theta, float phi) const; 52 67 53 enum {classId = 0xF003 }; 54 int_4 ClassId() const { return classId; } 68 /* return the spherical coordinates of center of pixel number k */ 69 virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const; 55 70 56 virtual void WriteSelf(POutPersist&) const; 57 virtual void ReadSelf(PInPersist&);71 /* return the Pixel Solid angle (steradians) */ 72 virtual r_8 PixSolAngle(int_4 k) const; 58 73 59 // ---------- Definition of PixelMap abstract methods74 // ---------- Specific methods ------------------------------ 60 75 61 // Number of pixels 62 virtual int_4 NbPixels() const; 63 64 // Value of pixel number k 65 virtual r_8& PixVal(int_4 k); 66 virtual r_8 const& PixVal(int_4 k) const; 76 void ReSize(int_4 nx, int_4 ny); 67 77 68 // Index of pixel at (theta,phi) 69 virtual int_4 PixIndexSph(float theta, float phi) const; 70 71 // Spherical coordinates of center of pixel number k 72 virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const; 73 // Pixel Solid angle (steradians) 74 virtual r_8 PixSolAngle(int_4 k) const; 78 inline virtual char* TypeOfMap() const {return "LOCAL";}; 79 80 /* Origin (with angle between x axis and phi axis, in degrees) x0,y0 the default: middle of map*/ 81 virtual void SetOrigin(float theta=90., float phi=0., float angle=0.); 82 virtual void SetOrigin(float theta,float phi,int_4 x0,int_4 y0,float angle=0.); 75 83 76 // ---------- Specific methods 84 /* Pixel size (degres) */ 85 virtual void SetSize(float angleX, float angleY); 77 86 78 // Origin (with angle between x axis and phi axis, in degrees) 79 virtual void SetOrigin(float theta0, float phi0, float angle=0.); // x0,y0 default: middle of map 80 virtual void SetOrigin(float theta0, float phi0, int_4 x0, int_4 y0, float angle=0.); 81 // Pixel size (degres) 82 virtual void SetSize(float angleX, float angleY); 87 /* Check to see if the local mapping is done */ 88 inline bool LocalMap_isDone() const {return(originFlag_ && extensFlag_);}; 83 89 84 // Projection to/from spherical map 85 //virtual void Extract(SphericalMap const& sphere); 86 virtual void Project(SphericalMap& sphere) const; 90 /* Projection to/from spherical map */ 91 virtual void Project(SphericalMap<T>& sphere) const; 87 92 88 // There should be a more complex algorithm somewhere to combine *several* 89 // local maps to a full sphere. 90 // -> static method, or separate class 93 /* There should be a more complex algorithm somewhere to combine *several* local maps to a full sphere. 94 -> static method, or separate class */ 95 96 /* provides a integer characterizing the pixelization refinement (here : number of pixels) */ 97 inline virtual int_4 SizeIndex() const {return(nPix_);} 98 inline int_4 Size_x() const {return nSzX_;} 99 inline void setSize_x(int_4 n) {nSzX_= n;} 100 inline int_4 Size_y() const {return nSzY_;} 101 inline void setSize_y(int_4 n) {nSzY_= n;} 91 102 92 void Pixelize(int_4,int_4); // Allocate pixel array 103 inline void Origin(float& theta, float& phi,int& x0, int& y0, float& angle) const {theta= (float)theta0_; phi= (float)phi0_; x0= x0_; y0= y0_;angle= (float)angle_;} 93 104 94 // ------------- méthodes internes ---------------------- 105 inline void Aperture(float& anglex, float& angley) const {anglex= (float)angleX_; angley= (float)angleY_;} 106 107 /* retourne le pointeur vers/remplit le vecteur des contenus des pixels */ 108 inline const NDataBlock<T>* getDataBlock() const {return (&pixels_);} 109 inline void setDataBlock(T* data, int_4 n) {pixels_.FillFrom(n,data);} 110 111 /* impression */ 112 void print(ostream& os) const; 113 114 // ---------- Méthodes internes ----------------------------- 95 115 96 116 private : 97 117 98 void InitNul(); 99 void Clear(); 100 void Getij(int k, int& i, int& j) const; 101 void ReferenceToUser(float &theta, float &phi) const; 102 void UserToReference(float &theta, float &phi) const; 103 void PixProjToAngle(float x, float y,float &theta, float &phi) const; 104 void AngleProjToPix(float theta, float phi, float& x, float& y) const; 105 // ------------- variables internes ----------------------- 118 void InitNul(); 119 void Getij(int k, int& i, int& j) const; 120 void ReferenceToUser(float &theta, float &phi) const; 121 void UserToReference(float &theta, float &phi) const; 122 void PixProjToAngle(float x, float y,float &theta, float &phi) const; 123 void AngleProjToPix(float theta, float phi, float& x, float& y) const; 106 124 107 int_4 mSzX_, mSzY_; 108 int_4 mNPix_; 109 int_4 x0_; 110 int_4 y0_; 111 int_4 originFlag_; 112 int_4 SzFlag_; 113 r_4 cos_angle_; 114 r_4 sin_angle_; 115 r_8 theta0_; 116 r_8 phi0_; 117 r_8 omeg_; 118 r_8 tgAngleX_; 119 r_8 tgAngleY_; 120 r_8* mPix_; 125 // ---------- Variables internes ---------------------------- 126 127 int_4 nSzX_; 128 int_4 nSzY_; 129 int_4 nPix_; 130 bool originFlag_; 131 bool extensFlag_; 132 int_4 x0_; 133 int_4 y0_; 134 r_8 theta0_; 135 r_8 phi0_; 136 r_8 angle_; 137 r_4 cos_angle_; 138 r_4 sin_angle_; 139 r_8 angleX_; 140 r_8 angleY_; 141 r_8 tgAngleX_; 142 r_8 tgAngleY_; 143 NDataBlock<T> pixels_; 144 }; 145 146 // ------------- Classe pour la gestion de persistance -- 147 template <class T> 148 class FIO_LocalMap : public PPersist 149 { 150 151 public: 152 153 FIO_LocalMap(); 154 FIO_LocalMap(string const & filename); 155 FIO_LocalMap(const LocalMap<T>& obj); 156 FIO_LocalMap(LocalMap<T>* obj); 157 virtual ~FIO_LocalMap(); 158 virtual AnyDataObj* DataObj(); 159 inline operator LocalMap<T>() { return(*dobj); } 160 inline LocalMap<T> getObj() { return(*dobj); } 161 162 protected : 163 164 virtual void ReadSelf(PInPersist&); 165 virtual void WriteSelf(POutPersist&) const; 166 LocalMap<T>* dobj; 167 bool ownobj; 121 168 }; 122 169
Note:
See TracChangeset
for help on using the changeset viewer.