source: Sophya/trunk/SophyaLib/Samba/spheregorski.h@ 262

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

Creation du module DPC/Samba Reza 13/04/99

File size: 4.8 KB
Line 
1#ifndef SPHEREGORSKI_SEEN
2#define SPHEREGORSKI_SEEN
3
4#include "sphericalmap.h"
5#include "cvector.h"
6
7// les attributs de classe pix2x_ et pix2y_ sont relatifs a la traduction des
8// indices RING en indices NESTED (ou l'inverse). Ce sont des tableaux
9// d'entiers initialises et remplis par le constructeur. Dans la version
10// FORTRAN de healpix, il s'agissait de tableaux mis en COMMON. Ils etaient
11// initialises au premier appel d'une conversion d'indice. Je ne peux pas
12// garder cette procedure car, par exemple, la fonction PixValNest() const
13// n'autorisera pas la constitution de ces tableaux (a cause du const). Ainsi,
14// des la creation d'un objet SphereGorski ces tableaux sont calcules, ce qui
15// est, certes, inutile si on ne se sert pas des indices NESTED. Ca ne me
16// rejouit pas, mais c'est le seul moyen que j'ai trouve pour temir compte de
17// toutes les demandes et des options prises.
18//
19// G. Le Meur
20
21class SphereGorski : public SphericalMap {
22public :
23
24
25SphereGorski();
26SphereGorski(int_4 m);
27SphereGorski(char* flnm);
28virtual ~SphereGorski();
29
30// ------------ Persistence handling
31 enum {classId = 0xF002 };
32
33int_4 ClassId() const { return classId; }
34
35virtual void WriteSelf(POutPersist&) const;
36virtual void ReadSelf(PInPersist&);
37
38// ----------- FITS IO (1D FITS ARRAY)
39void ReadFits(char flnm[] );
40void WriteFits(char flnm[]);
41
42// ------------------ Definition of PixelMap abstract methods
43
44/* Nombre de pixels du decoupage */
45virtual int_4 NbPixels() const;
46
47/* Valeur du contenu du pixel d'indice "RING" k */
48virtual r_8& PixVal(int_4 k);
49virtual r_8 const& PixVal(int_4 k) const;
50
51int_4 NbThetaSlices() const;
52void GetThetaSlice(int_4 index, r_4& theta, Vector& phi, Vector& value) const;
53
54/* Indice "RING" du pixel vers lequel pointe une direction definie par
55ses coordonnees spheriques */
56virtual int_4 PixIndexSph(float theta, float phi) const;
57
58/* Coordonnees spheriques du milieu du pixel d'indice "RING" k */
59virtual void PixThetaPhi(int_4 k, float& teta, float& phi) const;
60
61// Pixel Solid angle (steradians)
62virtual r_8 PixSolAngle(int_4 dummy) const;
63
64
65// --------------- Specific methods
66
67 // NEST indexing
68/* Valeur du contenu du pixel d'indice "NEST" k */
69virtual r_8& PixValNest(int_4 k);
70virtual r_8 const& PixValNest(int_4 k) const;
71
72/* Indice "NEST" du pixel vers lequel pointe une direction definie par
73ses coordonnees spheriques */
74virtual int_4 PixIndexSphNest(float theta, float phi) const;
75
76/* Coordonnees spheriques du milieu du pixel d'indice "NEST" k */
77virtual void PixThetaPhiNest(int_4 k, float& teta, float& phi) const;
78
79 // algorithme de pixelisation
80void Pixelize(int_4);
81
82
83/* convertit index nested en ring */
84int_4 NestToRing(int_4 );
85
86
87/* convertit index ring en nested" */
88int_4 RingToNest(int_4 );
89
90
91/* analyse en harmoniques spheriques des valeurs des pixels de la
92 sphere : appel du module anafast (Gorski-Hivon) */
93void anharm(int, float, float*);
94
95/*synthese des valeurs des pixels de la sphere par l'intermediaire
96 des coefficients en harmoniques spheriques reconstitues apartir d'un
97 spectre en puissance : appel du module synfast (Gorski-Hivon) */
98void synharm(int , int, float, float* );
99
100
101// ------------- méthodes internes ----------------------
102
103private :
104
105void InitNul();
106void Clear();
107int nest2ring(int nside, int ipnest) const;
108void mk_pix2xy(int *pix2x,int *pix2y);
109int ring2nest(int nside, int ipring) const;
110void mk_xy2pix(int *x2pix, int *y2pix);
111int ang2pix_ring(int nside, double theta, double phi) const;
112int ang2pix_nest(int nside, double theta, double phi) const;
113void pix2ang_ring(int nside, int ipix, double& theta, double& phi) const;
114void pix2ang_nest(int nside, int ipix, double& theta, double& phi) const;
115// ------------- variables internes -----------------------
116 private :
117class Pix2XY {
118 public :
119Pix2XY() {
120 pix2x_=new int[1024];
121 pix2y_=new int[1024];
122 mk_pix2xy(pix2x_,pix2y_);
123 }
124~Pix2XY() {
125 if (pix2x_) delete[] pix2x_;
126 if (pix2y_) delete[] pix2y_;
127 }
128void pix2ang_nest(int nside, int ipix, double& theta, double& phi) const;
129
130private :
131int *pix2x_;
132int *pix2y_;
133void mk_pix2xy(int *pix2x,int *pix2y);
134
135};
136
137int nlmax_;
138int nmmax_;
139int iseed_;
140int nSide_;
141int_4 nPix_;
142int *pix2x_;
143int *pix2y_;
144int *x2pix_;
145int *y2pix_;
146float fwhm_;
147float quadrupole_;
148float sym_cut_deg_;
149r_8 omeg_;
150r_8* mPix_;
151char powFile_[128];
152Pix2XY *pix2xy_;
153};
154#endif
Note: See TracBrowser for help on using the repository browser.