[228] | 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
|
---|