source: Sophya/trunk/SophyaLib/Samba/spheregorski.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
RevLine 
[228]1#ifndef SPHEREGORSKI_SEEN
2#define SPHEREGORSKI_SEEN
3
4#include "sphericalmap.h"
[470]5#include "tvector.h"
6#include "ndatablock.h"
[228]7
[470]8#include "anydataobj.h"
9#include "ppersist.h"
10
[228]11// les attributs de classe pix2x_ et pix2y_ sont relatifs a la traduction des
[470]12// indices RING en indices NESTED (ou l inverse). Ce sont des tableaux
[228]13// d'entiers initialises et remplis par le constructeur. Dans la version
14// FORTRAN de healpix, il s'agissait de tableaux mis en COMMON. Ils etaient
[470]15// initialises au premier appel d'une conversion d indice. Je ne peux pas
[228]16// garder cette procedure car, par exemple, la fonction PixValNest() const
17// n'autorisera pas la constitution de ces tableaux (a cause du const). Ainsi,
[470]18// des la creation d un objet SphereGorski ces tableaux sont calcules, ce qui
[228]19// est, certes, inutile si on ne se sert pas des indices NESTED. Ca ne me
[470]20// rejouit pas, mais c est le seul moyen que j ai trouve pour temir compte de
[228]21// toutes les demandes et des options prises.
22//
23// G. Le Meur
24
[470]25// ***************** CLASSE SphereGorski *****************************
26
27template<class T>
28class SphereGorski : public SphericalMap<T>, public AnyDataObj
29{
30
[228]31public :
32
33SphereGorski();
34SphereGorski(int_4 m);
[470]35SphereGorski(const SphereGorski<T>& s);
[228]36virtual ~SphereGorski();
37
38// ------------------ Definition of PixelMap abstract methods
39
[470]40/* Nombre de pixels du decoupage */
41virtual int_4 NbPixels() const;
42inline void setNbPixels(int_4 n) {nPix_= n;}
[228]43
[470]44/* Valeur du contenu du pixel d'indice "RING" k */
45virtual T& PixVal(int_4 k);
46virtual T const& PixVal(int_4 k) const;
[228]47
[470]48/* Nombre de tranches en theta */
[228]49int_4 NbThetaSlices() const;
[470]50void GetThetaSlice(int_4 index,r_4& theta,TVector<float>& phi,TVector<T>& value) const;
[228]51
52/* Indice "RING" du pixel vers lequel pointe une direction definie par
53ses coordonnees spheriques */
[470]54virtual int_4 PixIndexSph(float theta, float phi) const;
[228]55
[470]56/* Coordonnees spheriques du milieu du pixel d'indice "RING" k */
57virtual void PixThetaPhi(int_4 k, float& teta, float& phi) const;
[228]58
[470]59/* Pixel Solid angle (steradians) */
60virtual r_8 PixSolAngle(int_4 dummy) const;
61inline void setPixSolAngle(r_8 x) {omeg_= x;}
[228]62
63// --------------- Specific methods
64
[470]65virtual void Resize(int_4 m);
66
67inline virtual char* TypeOfMap() const {return "RING";};
68
[228]69/* Valeur du contenu du pixel d'indice "NEST" k */
[470]70virtual T& PixValNest(int_4 k);
71virtual T const& PixValNest(int_4 k) const;
[228]72
73/* Indice "NEST" du pixel vers lequel pointe une direction definie par
74ses coordonnees spheriques */
[470]75virtual int_4 PixIndexSphNest(float theta, float phi) const;
[228]76
77/* Coordonnees spheriques du milieu du pixel d'indice "NEST" k */
[470]78virtual void PixThetaPhiNest(int_4 k, float& teta, float& phi) const;
[228]79
[470]80/* algorithme de pixelisation */
[228]81void Pixelize(int_4);
82
83/* convertit index nested en ring */
[470]84int_4 NestToRing(int_4 ) const;
[228]85
86/* convertit index ring en nested" */
[470]87int_4 RingToNest(int_4 ) const;
[228]88
89/* analyse en harmoniques spheriques des valeurs des pixels de la
90 sphere : appel du module anafast (Gorski-Hivon) */
[470]91//void anharm(int, float, float*);
[228]92
93/*synthese des valeurs des pixels de la sphere par l'intermediaire
94 des coefficients en harmoniques spheriques reconstitues apartir d'un
95 spectre en puissance : appel du module synfast (Gorski-Hivon) */
[470]96//void synharm(int, int, float, float*);
[228]97
[470]98/* retourne/fixe la valeur du parametre Gorski */
99inline virtual int_4 SizeIndex() const {return(nSide_);}
100inline void setSizeIndex(int_4 n) {nSide_= n;}
[228]101
[470]102/* retourne les pointeurs /remplit les tableaux */
103inline const NDataBlock<T>* getDataBlock() const { return (&pixels_); }
104inline void setDataBlock(T* data, int_4 m) { pixels_.FillFrom(m,data); }
105
106/* retourne/fixe les parametres des modules anafast et synfast */
107void getParafast(int_4& nlmax,int_4& nmmax,int_4& iseed,float& fwhm,float& quadr,float& cut) const;
108void setParafast(int_4 nlmax,int_4 nmmax,int_4 iseed,float fwhm,float quadr,float cut,char* filename);
109
110/* retourne/fixe le nom du fichier qui contient le spectre de puissance */
111void powfile(char filename[]) const;
112
113/* impression */
114void print(ostream& os) const;
115
[228]116private :
117
[470]118// ------------- méthodes internes ----------------------
119void InitNul();
120
121int nest2ring(int nside, int ipnest) const;
122int ring2nest(int nside, int ipring) const;
123
124int ang2pix_ring(int nside, double theta, double phi) const;
125int ang2pix_nest(int nside, double theta, double phi) const;
126void pix2ang_ring(int nside, int ipix, double& theta, double& phi) const;
127void pix2ang_nest(int nside, int ipix, double& theta, double& phi) const;
128
[228]129// ------------- variables internes -----------------------
[470]130int_4 nSide_;
131int_4 nPix_;
132r_8 omeg_;
[228]133
[470]134NDataBlock<T> pixels_;
[228]135
136int nlmax_;
137int nmmax_;
138int iseed_;
139float fwhm_;
140float quadrupole_;
141float sym_cut_deg_;
142char powFile_[128];
143};
[470]144
145//
146// ------------- Classe pour la gestion de persistance --
147//
148template <class T>
149class FIO_SphereGorski : public PPersist
150{
151public:
152
153FIO_SphereGorski();
154FIO_SphereGorski(string const & filename);
155FIO_SphereGorski(const SphereGorski<T>& obj);
156FIO_SphereGorski(SphereGorski<T>* obj);
157virtual ~FIO_SphereGorski();
158virtual AnyDataObj* DataObj();
159inline operator SphereGorski<T>() { return(*dobj); }
160inline SphereGorski<T> getObj() { return(*dobj); }
161
162protected :
163
164virtual void ReadSelf(PInPersist&);
165virtual void WriteSelf(POutPersist&) const;
166SphereGorski<T>* dobj;
167bool ownobj;
168};
169
170//
171// ------------- Classe PIXELS_XY -----------------------
172//
173class PIXELS_XY
174{
175
176public :
177
178static PIXELS_XY& instance();
179
180NDataBlock<int> pix2x_;
181NDataBlock<int> pix2y_;
182NDataBlock<int> x2pix_;
183NDataBlock<int> y2pix_;
184
185private :
186
187PIXELS_XY();
188void mk_pix2xy();
189void mk_xy2pix();
190};
[228]191#endif
Note: See TracBrowser for help on using the repository browser.