Changeset 470 in Sophya for trunk/SophyaLib/Samba/spheregorski.h


Ignore:
Timestamp:
Oct 15, 1999, 5:43:30 PM (26 years ago)
Author:
ansari
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/Samba/spheregorski.h

    r228 r470  
    33
    44#include "sphericalmap.h"
    5 #include "cvector.h"
     5#include "tvector.h"
     6#include "ndatablock.h"
     7
     8#include "anydataobj.h"
     9#include "ppersist.h"
    610
    711// 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
     12// indices  RING en indices NESTED (ou l inverse). Ce sont des tableaux
    913// d'entiers initialises et remplis par le constructeur. Dans la version
    1014// 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
     15// initialises au premier appel d'une conversion d indice. Je ne peux pas
    1216// garder cette procedure car, par exemple, la fonction PixValNest() const
    1317// 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
     18// des la creation d un objet SphereGorski ces tableaux sont calcules, ce qui
    1519// 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
     20// rejouit pas, mais c est le seul moyen que j ai trouve pour temir compte de
    1721// toutes les demandes et des options prises.
    1822//
    1923//                                                G. Le Meur
    2024
    21 class SphereGorski : public SphericalMap {
     25// ***************** CLASSE SphereGorski *****************************
     26
     27template<class T>
     28class SphereGorski : public SphericalMap<T>,  public AnyDataObj
     29{
     30
    2231public :
    23 
    2432
    2533SphereGorski();
    2634SphereGorski(int_4 m);
    27 SphereGorski(char* flnm);
     35SphereGorski(const SphereGorski<T>& s);
    2836virtual ~SphereGorski();
    29 
    30 // ------------ Persistence handling
    31      enum {classId = 0xF002 };
    32 
    33 int_4                  ClassId() const        { return classId; }
    34 
    35 virtual void           WriteSelf(POutPersist&) const;
    36 virtual void           ReadSelf(PInPersist&);
    37 
    38 // -----------   FITS IO (1D FITS ARRAY)
    39 void ReadFits(char flnm[] );
    40 void WriteFits(char flnm[]);
    4137
    4238// ------------------ Definition of PixelMap abstract methods
    4339
    44 /* Nombre de pixels du decoupage                                         */
    45 virtual  int_4           NbPixels() const;
     40/* Nombre de pixels du decoupage */
     41virtual int_4 NbPixels() const;
     42inline void setNbPixels(int_4 n) {nPix_= n;}
    4643
    47 /* Valeur du contenu du pixel d'indice "RING" k                                 */
    48 virtual  r_8&      PixVal(int_4 k);
    49 virtual  r_8  const&    PixVal(int_4 k) const;
     44/* Valeur du contenu du pixel d'indice "RING" k  */
     45virtual T& PixVal(int_4 k);
     46virtual T const& PixVal(int_4 k) const;
    5047
     48/* Nombre de tranches en theta */
    5149int_4 NbThetaSlices() const;
    52 void  GetThetaSlice(int_4 index, r_4& theta, Vector& phi, Vector& value) const;
     50void GetThetaSlice(int_4 index,r_4& theta,TVector<float>& phi,TVector<T>& value) const;
    5351
    5452/* Indice "RING" du pixel vers lequel pointe une direction definie par
    5553ses  coordonnees spheriques */                                   
    56 virtual  int_4          PixIndexSph(float theta, float phi) const;
     54virtual int_4 PixIndexSph(float theta, float phi) const;
    5755
    58 /* Coordonnees spheriques du milieu du pixel d'indice "RING" k       */
    59 virtual  void          PixThetaPhi(int_4 k, float& teta, float& phi) const;
     56/* Coordonnees spheriques du milieu du pixel d'indice "RING" k   */
     57virtual void PixThetaPhi(int_4 k, float& teta, float& phi) const;
    6058
    61 // Pixel Solid angle  (steradians)
    62 virtual r_8         PixSolAngle(int_4 dummy) const;
    63 
     59/* Pixel Solid angle  (steradians) */
     60virtual r_8 PixSolAngle(int_4 dummy) const;
     61inline void setPixSolAngle(r_8 x) {omeg_= x;}
    6462
    6563// --------------- Specific methods
    6664
    67     // NEST indexing
     65virtual void Resize(int_4 m);
     66
     67inline virtual char* TypeOfMap() const {return "RING";};
     68
    6869/* Valeur du contenu du pixel d'indice "NEST" k                                 */
    69 virtual  r_8&      PixValNest(int_4 k);
    70 virtual  r_8 const&      PixValNest(int_4 k) const;
     70virtual T& PixValNest(int_4 k);
     71virtual T const& PixValNest(int_4 k) const;
    7172
    7273/* Indice "NEST" du pixel vers lequel pointe une direction definie par
    7374ses  coordonnees spheriques */                                   
    74 virtual  int_4      PixIndexSphNest(float theta, float phi) const;
     75virtual int_4 PixIndexSphNest(float theta, float phi) const;
    7576
    7677/* Coordonnees spheriques du milieu du pixel d'indice "NEST" k       */
    77 virtual  void      PixThetaPhiNest(int_4 k, float& teta, float& phi) const;
     78virtual void PixThetaPhiNest(int_4 k, float& teta, float& phi) const;
    7879
    79    // algorithme de pixelisation
     80/* algorithme de pixelisation */
    8081void Pixelize(int_4);
    8182
    82 
    8383/* convertit index nested en ring  */
    84 int_4 NestToRing(int_4 );
    85 
     84int_4 NestToRing(int_4 ) const;
    8685
    8786/* convertit index ring en nested" */
    88 int_4 RingToNest(int_4 );
    89 
     87int_4 RingToNest(int_4 ) const;
    9088
    9189/*    analyse en harmoniques spheriques des valeurs des pixels de la
    9290   sphere : appel du module anafast (Gorski-Hivon) */
    93 void anharm(int, float, float*);
     91//void anharm(int, float, float*);
    9492 
    9593/*synthese  des valeurs des pixels de la sphere par l'intermediaire
    9694  des coefficients en harmoniques spheriques reconstitues apartir d'un
    9795  spectre en puissance : appel du module synfast (Gorski-Hivon) */
    98 void synharm(int , int, float, float* );
     96//void synharm(int, int, float, float*);
    9997
     98/* retourne/fixe la valeur du parametre Gorski */
     99inline virtual int_4 SizeIndex() const {return(nSide_);}
     100inline void setSizeIndex(int_4 n) {nSide_= n;}
     101
     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         
     116private :
    100117
    101118// ------------- méthodes internes ----------------------
    102          
    103 private :
     119void InitNul();
    104120
    105 void          InitNul();
    106 void          Clear();
    107 int           nest2ring(int nside, int ipnest) const;
    108 void          mk_pix2xy(int *pix2x,int *pix2y);
    109 int           ring2nest(int nside, int ipring) const;
    110 void          mk_xy2pix(int *x2pix, int *y2pix);
    111 int           ang2pix_ring(int nside, double theta, double phi) const;
    112 int           ang2pix_nest(int nside, double theta, double phi) const;
    113 void          pix2ang_ring(int nside, int ipix, double& theta,  double& phi) const;
    114 void          pix2ang_nest(int nside, int ipix, double& theta, double& phi) const;
     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
    115129// ------------- variables internes -----------------------
    116                    private :
    117 class Pix2XY {
    118   public :
    119 Pix2XY() {
    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   }
    128 void          pix2ang_nest(int nside, int ipix, double& theta, double& phi) const;
     130int_4 nSide_;
     131int_4 nPix_;
     132r_8 omeg_;
    129133
    130 private :
    131 int *pix2x_;
    132 int *pix2y_;
    133 void          mk_pix2xy(int *pix2x,int *pix2y);
    134 
    135 };
     134NDataBlock<T> pixels_;
    136135
    137136int nlmax_;
    138137int nmmax_;
    139138int iseed_;
    140 int  nSide_;
    141 int_4  nPix_;
    142 int *pix2x_;
    143 int *pix2y_;
    144 int *x2pix_;
    145 int *y2pix_;
    146139float fwhm_;
    147140float quadrupole_;
    148141float sym_cut_deg_;
    149 r_8  omeg_;
    150 r_8*    mPix_;
    151142char powFile_[128];
    152 Pix2XY *pix2xy_;
     143};
     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();
    153190};
    154191#endif
Note: See TracChangeset for help on using the changeset viewer.