Changeset 470 in Sophya for trunk/SophyaLib/Samba/spherethetaphi.h
- Timestamp:
- Oct 15, 1999, 5:43:30 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/Samba/spherethetaphi.h
r228 r470 3 3 4 4 #include "sphericalmap.h" 5 #include " pdataarray.h"6 #include " cvector.h"5 #include "ndatablock.h" 6 #include "tvector.h" 7 7 8 // ***************** CLASSE SphereThetaPhi ***************************** 8 #include "anydataobj.h" 9 #include "ppersist.h" 9 10 11 // ***************** Class SphereThetaPhi ***************************** 10 12 11 class SphereThetaPhi : public SphericalMap { 13 template <class T> 14 class SphereThetaPhi : public SphericalMap<T>, public AnyDataObj 15 { 16 12 17 public : 13 18 14 15 SphereThetaPhi(int_4 m, int_4 pet);16 19 SphereThetaPhi(); 20 SphereThetaPhi(int_4 m); 17 21 SphereThetaPhi(char* flnm); 22 SphereThetaPhi(const SphereThetaPhi<T>& s); 18 23 virtual ~SphereThetaPhi(); 19 24 20 // ------------ Persistence handling25 // ------------ Definition of PixelMap abstract methods - 21 26 22 enum {classId = 0xF001 }; 23 int_4 ClassId() const { return classId; } 27 /* retourne/fixe le nombre de pixels */ 28 virtual int_4 NbPixels() const; 29 inline void setNbPixels(int_4 nbpix) { NPix_= nbpix; } 24 30 25 virtual void WriteSelf(POutPersist&) const; 26 virtual void ReadSelf(PInPersist&); 31 /* retourne la valeur du pixel d'indice k */ 32 virtual T& PixVal(int_4 k); 33 virtual T const& PixVal(int_4 k) const; 27 34 28 // ------------------ Definition of PixelMap abstract methods 35 /* retourne l'indice du pixel a (theta,phi) */ 36 virtual int_4 PixIndexSph(float theta, float phi) const; 29 37 30 / / number of pixels31 virtual int_4 NbPixels() const;38 /* retourne les coordonnees Spheriques du centre du pixel d'indice k */ 39 virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const; 32 40 33 // Value of pixel number k 34 virtual r_8& PixVal(int_4 k); 35 virtual r_8 const& PixVal(int_4 k) const; 41 /* retourne/fixe l'angle Solide de Pixel (steradians) */ 42 virtual r_8 PixSolAngle(int_4 dummy) const; 43 inline void setPixSolAngle(r_8 omega) { Omega_= omega; } 44 45 /* retourne/fixe la valeur du parametre de decoupage m */ 46 inline virtual int_4 SizeIndex() const { return( NTheta_); } 47 inline void setSizeIndex(int_4 nbindex) { NTheta_= nbindex; } 36 48 37 // Index of pixel at (theta,phi) 38 virtual int_4 PixIndexSph(float theta, float phi) const; 49 // ------------- Specific methods ---------------------- 39 50 40 // Spherical coordinates of center of pixel number k 41 virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const; 51 virtual void Resize(int_4 m); 42 52 43 // Pixel Solid angle (steradians) 44 virtual r_8 PixSolAngle(int_4 dummy) const; 45 // --------------- Specific methods 53 inline virtual char* TypeOfMap() const {return "TETAFI";}; 46 54 55 /* Valeurs de theta des paralleles et phi des meridiens limitant le pixel d'indice k */ 56 virtual void Limits(int_4 k,float& tet1,float& tet2,float& phi1,float& phi2); 47 57 48 /* Valeurs de theta des paralleles et phi des meridiens limitant */ 49 /* le pixel d'indice k */ 50 virtual void Limits(int_4 k, float& tet1, float& tet2, 51 float& phi1, float& phi2 ); 58 /* Nombre de tranches en theta */ 59 int_4 NbThetaSlices() const; 52 60 53 /* Nombre de tranches en theta */ 54 int_4 NbThetaSlices() const; 55 56 /* Nombre de pixels en phi de la tranche d'indice kt */ 57 int_4 NPhi(int_4 kt) const; 61 /* Nombre de pixels en phi de la tranche d'indice kt */ 62 int_4 NPhi(int_4 kt) const; 58 63 59 64 /* Renvoie dans t1,t2 les valeurs respectives de theta min et theta max */ 60 /* de la tranche d'indice kt */61 void 65 /* de la tranche d'indice kt */ 66 void Theta(int_4 kt, float& t1, float& t2); 62 67 63 68 /* Renvoie dans p1,p2 les valeurs phimin et phimax du pixel d'indice jp */ 64 /* dans la tranche d'indice kt */65 void 69 /* dans la tranche d'indice kt */ 70 void Phi(int_4 kt, int_4 jp, float& p1, float& p2); 66 71 67 72 /* Renvoie l'indice k du pixel d'indice jp dans la tranche d'indice kt */ 68 int_4 73 int_4 Index(int_4 kt, int_4 jp) const; 69 74 75 /* Indice kt de la tranche et indice jp du pixel d'indice k */ 76 void ThetaPhiIndex(int_4 k,int_4& kt,int_4& jp); 70 77 71 /* Indice kt de la tranche et indice jp du pixel d'indice k */ 72 void ThetaPhiIndex(int_4 k,int_4& kt,int_4& jp); 78 void Pixelize(int_4); 73 79 74 void Pixelize(int_4,int_4); 75 void GetThetaSlice(int_4 index, r_4& theta, Vector& phi, Vector& value) const; 80 void GetThetaSlice(int_4 index,r_4& theta,TVector<float>& phi,TVector<T>& value) const; 76 81 82 /*retourne le tableau contenant le nombre de pixels en phi de chacune des bandes en theta */ 83 inline const int_4* getmNPhi() const { return(NPhi_); } 84 void setmNPhi(int_4* array, int_4 m); 85 86 /* retourne/remplit le tableau contenant le nombre/Deuxpi total des pixels contenus dans les bandes */ 87 inline const int_4* getmTNphi() const { return(TNphi_); } 88 void setmTNphi(int_4* array, int_4 m); 89 90 /* retourne/remplit le tableau contenant les valeurs limites de theta */ 91 inline const r_4* getmTheta() const { return(Theta_); } 92 void setmTheta(r_4* array, int_4 m); 93 94 /* retourne le pointeur vers/remplit le vecteur des contenus des pixels */ 95 inline const NDataBlock<T>* getDataBlock() const { return (&pixels_); } 96 void setDataBlock(T* data, int_4 m); 97 98 /* impression */ 99 void print(ostream& os) const; 77 100 78 101 private : 79 // ------------- méthodes internes ----------------------80 81 102 82 void InitNul(); 83 void Clear(); 103 // ------------- méthodes internes ---------------------- 104 void InitNul(); 105 void Clear(); 84 106 85 // ------------- variables internes ----------------------- 86 int_4 mNTheta,mNPet; 87 int_4 mNPix; 88 r_4* mTheta; 89 r_8 mOmeg; 90 int_4* mNphi; 91 int_4* mTNphi; 92 //r_8* mPix; 93 PDataArray<r_8>* _pixel; 94 95 107 // ------------- variables internes --------------------- 108 int_4 NTheta_; 109 int_4 NPix_; 110 r_8 Omega_; 111 int_4* NPhi_; 112 int_4* TNphi_; 113 r_4* Theta_; 114 NDataBlock<T> pixels_; 96 115 }; 97 116 117 // ------------- Classe pour la gestion de persistance -- 118 template <class T> 119 class FIO_SphereThetaPhi : public PPersist 120 { 121 public: 98 122 123 FIO_SphereThetaPhi(); 124 FIO_SphereThetaPhi(string const & filename); 125 FIO_SphereThetaPhi(const SphereThetaPhi<T>& obj); 126 FIO_SphereThetaPhi(SphereThetaPhi<T>* obj); 127 virtual ~FIO_SphereThetaPhi(); 128 virtual AnyDataObj* DataObj(); 129 inline operator SphereThetaPhi<T>() { return(*dobj); } 130 inline SphereThetaPhi<T> getObj() { return(*dobj); } 131 132 protected : 133 134 virtual void ReadSelf(PInPersist&); 135 virtual void WriteSelf(POutPersist&) const; 136 SphereThetaPhi<T>* dobj; 137 bool ownobj; 138 }; 99 139 100 140 #endif
Note:
See TracChangeset
for help on using the changeset viewer.