1 | #ifndef LOCALMAP_SEEN
|
---|
2 | #define LOCALMAP_SEEN
|
---|
3 |
|
---|
4 | #include "pixelmap.h"
|
---|
5 | #include "sphericalmap.h"
|
---|
6 |
|
---|
7 | // A local map of a region of the sky, in cartesian coordinates.
|
---|
8 | // It has an origin in (theta0, phi0), mapped to pixel(x0, y0)
|
---|
9 | // (x0, y0 might be outside of this local map)
|
---|
10 | // default value of (x0, y0) is middle of the map, center of pixel(nx/2, ny/2)
|
---|
11 | //
|
---|
12 | // la carte est consideree comme un tableau a deux indices i et j, i etant
|
---|
13 | // indice de colonne et j indice de ligne. La carte est supposee resider
|
---|
14 | // 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 la
|
---|
16 | // carte est definie par les valeurs de deux angles couverts respectivement
|
---|
17 | // par la totalite des pixels en x de la carte et la totalite des pixels
|
---|
18 | // en y. (SetSize()).
|
---|
19 | // 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 coordonnees
|
---|
21 | // est le point de tangence. L'axe Ox est la tangente parallele a
|
---|
22 | // l'equateur, dirige vers les phi croissants, l'axe Oy est parallele
|
---|
23 | // au meridien, dirige vers le pole nord.
|
---|
24 | // 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 peut
|
---|
26 | // 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 --
|
---|
28 | // methode SetOrigin(...))
|
---|
29 |
|
---|
30 |
|
---|
31 |
|
---|
32 |
|
---|
33 |
|
---|
34 |
|
---|
35 |
|
---|
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 |
|
---|
51 | // ---------- Persistence handling
|
---|
52 |
|
---|
53 | enum {classId = 0xF003 };
|
---|
54 | int_4 ClassId() const { return classId; }
|
---|
55 |
|
---|
56 | virtual void WriteSelf(POutPersist&) const;
|
---|
57 | virtual void ReadSelf(PInPersist&);
|
---|
58 |
|
---|
59 | // ---------- Definition of PixelMap abstract methods
|
---|
60 |
|
---|
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;
|
---|
67 |
|
---|
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;
|
---|
75 |
|
---|
76 | // ---------- Specific methods
|
---|
77 |
|
---|
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);
|
---|
83 |
|
---|
84 | // Projection to/from spherical map
|
---|
85 | //virtual void Extract(SphericalMap const& sphere);
|
---|
86 | virtual void Project(SphericalMap& sphere) const;
|
---|
87 |
|
---|
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
|
---|
91 |
|
---|
92 | void Pixelize(int_4,int_4); // Allocate pixel array
|
---|
93 |
|
---|
94 | // ------------- méthodes internes ----------------------
|
---|
95 |
|
---|
96 | private :
|
---|
97 |
|
---|
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 -----------------------
|
---|
106 |
|
---|
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_;
|
---|
121 | };
|
---|
122 |
|
---|
123 | #endif
|
---|