source: Sophya/trunk/SophyaLib/Samba/localmap.h@ 470

Last change on this file since 470 was 470, checked in by ansari, 26 years ago

versions templatees, NdataBlocks etc. 15-OCT-99-GLM

File size: 5.7 KB
Line 
1#ifndef LOCALMAP_SEEN
2#define LOCALMAP_SEEN
3
4#include "pixelmap.h"
5#include "sphericalmap.h"
6#include "ndatablock.h"
7
8#include "anydataobj.h"
9#include "ppersist.h"
10
11// A local map of a region of the sky, in cartesian coordinates.
12// It has an origin in (theta0, phi0), mapped to pixel(x0, y0)
13// (x0, y0 might be outside of this local map)
14// default value of (x0, y0) is middle of the map, center of pixel(nx/2, ny/2)
15//
16// la carte est consideree comme un tableau a deux indices i et j, i etant
17// indice de colonne et j indice de ligne. La carte est supposee resider
18// dans un plan tangent, dont le point de tangence est repere (x0,y0) dans
19// la carte et (theta0, phi0) sur la sphere celeste. L extension de la
20// carte est definie par les valeurs de deux angles couverts respectivement
21// par la totalite des pixels en x de la carte et la totalite des pixels
22// en y. (SetSize()).
23// On considere un "plan de reference" : plan tangent a la sphere celeste
24// 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
27// au meridien, dirige vers le pole nord.
28// De maniere interne a la classe une carte est definie dans ce plan de
29// reference et transportee jusqu au point (theta0, phi0) de sorte que les // axes restent paralleles aux meridiens et paralleles. L utilisateur peut
30// definir sa carte selon un repere en rotation par rapport au repere de
31// reference (par l angle entre le parallele et l axe Ox souhaite --
32// methode SetOrigin(...))
33
34
35// ***************** Class LocalMap *****************************
36
37template<class T>
38class LocalMap : public PixelMap<T>, public AnyDataObj
39{
40
41public:
42
43LocalMap();
44LocalMap(int_4 nx, int_4 ny);
45LocalMap(const LocalMap<T>& lm);
46virtual ~LocalMap();
47
48// ---------- Overloading of () to access pixel number k ----
49
50inline T& operator()(int_4 k) {return(PixVal(k));}
51inline T const& operator()(int_4 k) const {return(PixVal(k));}
52inline T& operator()(int ix, int iy) {return PixVal(iy*nSzX_+ix);};
53inline T const& operator()(int ix, int iy) const {return PixVal(iy*nSzX_+ix);};
54
55// ---------- Definition of PixelMap abstract methods -------
56
57/* return/set the number of pixels */
58virtual int_4 NbPixels() const;
59inline void setNbPixels(int_4 n) {nPix_= n;}
60
61/* return the value of pixel number k */
62virtual T& PixVal(int_4 k);
63virtual T const& PixVal(int_4 k) const;
64
65/* return the index of pixel at (theta,phi) */
66virtual int_4 PixIndexSph(float theta, float phi) const;
67
68/* return the spherical coordinates of center of pixel number k */
69virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const;
70
71/* return the Pixel Solid angle (steradians) */
72virtual r_8 PixSolAngle(int_4 k) const;
73
74// ---------- Specific methods ------------------------------
75
76void ReSize(int_4 nx, int_4 ny);
77
78inline 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*/
81virtual void SetOrigin(float theta=90., float phi=0., float angle=0.);
82virtual void SetOrigin(float theta,float phi,int_4 x0,int_4 y0,float angle=0.);
83
84/* Pixel size (degres) */
85virtual void SetSize(float angleX, float angleY);
86
87/* Check to see if the local mapping is done */
88inline bool LocalMap_isDone() const {return(originFlag_ && extensFlag_);};
89
90/* Projection to/from spherical map */
91virtual void Project(SphericalMap<T>& sphere) const;
92
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) */
97inline virtual int_4 SizeIndex() const {return(nPix_);}
98inline int_4 Size_x() const {return nSzX_;}
99inline void setSize_x(int_4 n) {nSzX_= n;}
100inline int_4 Size_y() const {return nSzY_;}
101inline void setSize_y(int_4 n) {nSzY_= n;}
102
103inline 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_;}
104
105inline 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 */
108inline const NDataBlock<T>* getDataBlock() const {return (&pixels_);}
109inline void setDataBlock(T* data, int_4 n) {pixels_.FillFrom(n,data);}
110
111/* impression */
112void print(ostream& os) const;
113
114// ---------- Méthodes internes -----------------------------
115
116private :
117
118void InitNul();
119void Getij(int k, int& i, int& j) const;
120void ReferenceToUser(float &theta, float &phi) const;
121void UserToReference(float &theta, float &phi) const;
122void PixProjToAngle(float x, float y,float &theta, float &phi) const;
123void AngleProjToPix(float theta, float phi, float& x, float& y) const;
124
125// ---------- Variables internes ----------------------------
126
127int_4 nSzX_;
128int_4 nSzY_;
129int_4 nPix_;
130bool originFlag_;
131bool extensFlag_;
132int_4 x0_;
133int_4 y0_;
134r_8 theta0_;
135r_8 phi0_;
136r_8 angle_;
137r_4 cos_angle_;
138r_4 sin_angle_;
139r_8 angleX_;
140r_8 angleY_;
141r_8 tgAngleX_;
142r_8 tgAngleY_;
143NDataBlock<T> pixels_;
144};
145
146// ------------- Classe pour la gestion de persistance --
147template <class T>
148class FIO_LocalMap : public PPersist
149{
150
151public:
152
153FIO_LocalMap();
154FIO_LocalMap(string const & filename);
155FIO_LocalMap(const LocalMap<T>& obj);
156FIO_LocalMap(LocalMap<T>* obj);
157virtual ~FIO_LocalMap();
158virtual AnyDataObj* DataObj();
159inline operator LocalMap<T>() { return(*dobj); }
160inline LocalMap<T> getObj() { return(*dobj); }
161
162protected :
163
164virtual void ReadSelf(PInPersist&);
165virtual void WriteSelf(POutPersist&) const;
166LocalMap<T>* dobj;
167bool ownobj;
168};
169
170#endif
Note: See TracBrowser for help on using the repository browser.