Index: trunk/SophyaLib/Samba/spherethetaphi.h
===================================================================
--- trunk/SophyaLib/Samba/spherethetaphi.h	(revision 228)
+++ trunk/SophyaLib/Samba/spherethetaphi.h	(revision 470)
@@ -3,98 +3,138 @@
 
 #include "sphericalmap.h"
-#include "pdataarray.h"
-#include "cvector.h"
+#include "ndatablock.h"
+#include "tvector.h"
 
-// ***************** CLASSE SphereThetaPhi *****************************
+#include "anydataobj.h"
+#include "ppersist.h"
 
+// ***************** Class SphereThetaPhi *****************************
 
-class SphereThetaPhi : public SphericalMap {
+template <class T>
+class SphereThetaPhi : public SphericalMap<T>, public AnyDataObj
+{
+
 public :
 
-
-SphereThetaPhi(int_4 m, int_4 pet);
 SphereThetaPhi();
+SphereThetaPhi(int_4 m);
 SphereThetaPhi(char* flnm);
+SphereThetaPhi(const SphereThetaPhi<T>& s);
 virtual ~SphereThetaPhi();
 
-// ------------ Persistence handling
+// ------------ Definition of PixelMap abstract methods -
 
-     enum {classId = 0xF001 };
-int_4                  ClassId() const        { return classId; }
+/* retourne/fixe le nombre de pixels */ 
+virtual int_4 NbPixels() const;
+inline void setNbPixels(int_4 nbpix) { NPix_= nbpix; }
 
-virtual void           WriteSelf(POutPersist&) const;
-virtual void           ReadSelf(PInPersist&);
+/* retourne la valeur du pixel d'indice k */ 
+virtual T&       PixVal(int_4 k);
+virtual T const& PixVal(int_4 k) const;
 
-// ------------------ Definition of PixelMap abstract methods
+/* retourne l'indice du pixel a (theta,phi) */ 
+virtual int_4 PixIndexSph(float theta, float phi) const;
 
-// number of pixels
-virtual  int_4           NbPixels() const;
+/* retourne les coordonnees Spheriques du centre du pixel d'indice k */ 
+virtual void PixThetaPhi(int_4 k, float& theta, float& phi) const;
 
-// Value of pixel number k
-virtual  r_8&       PixVal(int_4 k);
-virtual  r_8 const&       PixVal(int_4 k) const;
+/* retourne/fixe l'angle Solide de Pixel   (steradians) */ 
+virtual r_8 PixSolAngle(int_4 dummy) const;
+inline void setPixSolAngle(r_8 omega) { Omega_= omega; }
+ 
+/* retourne/fixe la valeur du parametre de decoupage m */ 
+inline virtual int_4 SizeIndex() const { return( NTheta_); }
+inline void setSizeIndex(int_4 nbindex) { NTheta_= nbindex; }
 
-// Index of pixel at (theta,phi)
-virtual  int_4           PixIndexSph(float theta, float phi) const;
+// ------------- Specific methods  ----------------------
 
-// Spherical coordinates of center of pixel number k
-virtual  void          PixThetaPhi(int_4 k, float& theta, float& phi) const;
+virtual void Resize(int_4 m);
 
-// Pixel Solid angle  (steradians)
-virtual r_8         PixSolAngle(int_4 dummy) const; 
-// --------------- Specific methods 
+inline virtual char* TypeOfMap() const {return "TETAFI";};
 
+/* Valeurs de theta des paralleles et phi des meridiens limitant  le pixel d'indice k */
+virtual void Limits(int_4 k,float& tet1,float& tet2,float& phi1,float& phi2);
 
-/* Valeurs de theta des paralleles et phi des meridiens limitant          */
-/* le pixel d'indice k                                                   */
-virtual  void          Limits(int_4 k, float& tet1, float& tet2, 
-				float& phi1, float& phi2 );
+/* Nombre de tranches en theta */ 
+int_4 NbThetaSlices() const;
 
-/* Nombre de tranches en theta                                           */
-int_4           NbThetaSlices() const;
-
-/* Nombre de pixels en phi de la tranche d'indice kt                     */
-int_4           NPhi(int_4 kt) const;
+/* Nombre de pixels en phi de la tranche d'indice kt */ 
+int_4 NPhi(int_4 kt) const;
 
 /* Renvoie dans t1,t2 les valeurs respectives de theta min et theta max  */
-/* de la tranche d'indice kt                                             */
-void          Theta(int_4 kt, float& t1, float& t2);
+/* de la tranche d'indice kt  */ 
+void Theta(int_4 kt, float& t1, float& t2);
 
 /* Renvoie dans p1,p2 les valeurs phimin et phimax du pixel d'indice jp  */
-/* dans la tranche d'indice kt                                           */
-void          Phi(int_4 kt, int_4 jp, float& p1, float& p2);
+/* dans la tranche d'indice kt  */ 
+void Phi(int_4 kt, int_4 jp, float& p1, float& p2);
 
 /* Renvoie l'indice k du pixel d'indice jp dans la tranche d'indice kt   */
-int_4           Index(int_4 kt, int_4 jp) const;
+int_4 Index(int_4 kt, int_4 jp) const;
 
+/* Indice kt de la tranche et indice jp du pixel d'indice k  */ 
+void ThetaPhiIndex(int_4 k,int_4& kt,int_4& jp);
 
-/* Indice kt de la tranche et indice jp du pixel d'indice k            */
-void          ThetaPhiIndex(int_4 k,int_4& kt,int_4& jp);
+void Pixelize(int_4); 
 
-void Pixelize(int_4,int_4); 
-void GetThetaSlice(int_4 index, r_4& theta, Vector& phi, Vector& value) const; 
+void GetThetaSlice(int_4 index,r_4& theta,TVector<float>& phi,TVector<T>& value) const; 
 
+/*retourne le tableau contenant le nombre de pixels en phi de chacune des bandes en theta */
+inline const int_4* getmNPhi() const { return(NPhi_); }
+void setmNPhi(int_4* array, int_4 m);
+
+/* retourne/remplit le tableau contenant le nombre/Deuxpi total des pixels contenus dans les bandes */
+inline const int_4* getmTNphi() const { return(TNphi_); }
+void setmTNphi(int_4* array, int_4 m);
+
+/* retourne/remplit le tableau contenant les valeurs limites de theta */
+inline const r_4* getmTheta() const { return(Theta_); }
+void setmTheta(r_4* array, int_4 m);
+
+/* retourne le pointeur vers/remplit  le vecteur des contenus des pixels */ 
+inline const NDataBlock<T>* getDataBlock() const { return (&pixels_); }
+void setDataBlock(T* data, int_4 m);
+
+/* impression */ 
+void print(ostream& os) const;
 
 private :
-// ------------- méthodes internes ----------------------
-          
 
-void	      InitNul();
-void          Clear();
+// ------------- méthodes internes ----------------------          
+void InitNul();
+void Clear();
 
-// ------------- variables internes -----------------------
-int_4 mNTheta,mNPet;
-int_4 mNPix;
-r_4* mTheta;
-r_8  mOmeg;
-int_4* mNphi;
-int_4* mTNphi;
-//r_8* mPix;
-PDataArray<r_8>* _pixel;
-
-
+// ------------- variables internes ---------------------
+int_4 NTheta_;
+int_4 NPix_;
+r_8 Omega_;
+int_4* NPhi_;
+int_4* TNphi_;
+r_4* Theta_;
+NDataBlock<T> pixels_;
 };
 
+// ------------- Classe pour la gestion de persistance --
+template <class T>
+class FIO_SphereThetaPhi : public PPersist  
+{
+public:
 
+FIO_SphereThetaPhi();
+FIO_SphereThetaPhi(string const & filename); 
+FIO_SphereThetaPhi(const SphereThetaPhi<T>& obj);
+FIO_SphereThetaPhi(SphereThetaPhi<T>* obj);
+virtual ~FIO_SphereThetaPhi();
+virtual AnyDataObj* DataObj();
+inline operator SphereThetaPhi<T>() { return(*dobj); }
+inline SphereThetaPhi<T> getObj() { return(*dobj); }
+
+protected :
+
+virtual void ReadSelf(PInPersist&);           
+virtual void WriteSelf(POutPersist&) const;  
+SphereThetaPhi<T>* dobj;
+bool ownobj;
+};
 
 #endif
