// This may look like C code, but it is really -*- C++ -*- // C.Magneville 04/99 #ifndef GENERALDATA_SEEN #define GENERALDATA_SEEN #include "objfio.h" #include #include "pexceptions.h" #include "ppersist.h" #include "ntupintf.h" #include "poly.h" namespace SOPHYA { class GeneralFit; //================================================================ // GENERALFITDATA //================================================================ /*! Classe de stoquage de donnees a plusieurs variables avec erreur sur l'ordonnee et sur les abscisses (options) : \f$ {x0(i),Ex0(i), x1(i),Ex1(i), x2(i),Ex2(i) ... ; Y(i),EY(i)} \f$ \verbatim Pour memoire, structure du rangement (n=mNVar): - Valeur des abscisses mXP (idem pour mErrXP): x0,x1,x2,...,xn x0,x1,x2,...,xn .... x0,x1,x2,....,xn | 1er point | | 2sd point | .... | point mNData | Donc abscisse J=[0,mNVar[ du point numero I=[0,mNData[: mXP[I*mNVar+J] - Valeur de l'ordonnee mF (idem pour mErr et mOK): f f f | 1er point | | 2sd point | .... | point mNData | Donc point numero I [0,mNData[ : mF[i] \endverbatim */ class GeneralFitData : public AnyDataObj , public NTupleInterface { friend class GeneralFit; friend class ObjFileIO; public: //! Valeurs par defaut pour l'utilisation des erreurs enum { Def_ErrF = 1, //!< erreurs sur F par defaut Def_ErrX = 0 //!< pas d'erreurs sur les variables X,Y,... par defaut }; GeneralFitData(unsigned int nVar, unsigned int nDataAlloc, uint_2 errx=0); GeneralFitData(const GeneralFitData& data, bool clean=false); GeneralFitData(); virtual ~GeneralFitData(); void Alloc(unsigned int nVar, unsigned int nDataAlloc, int_2 errx=-1); void SetDataPtr(int ptr = 0); void KillData(int i); void KillData(int i1,int i2); void ValidData(int i); void ValidData(int i1,int i2); void ValidData(); void RedefineData1(int i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX); void RedefineData2(int i,double x,double y,double f,double err=Def_ErrF ,double errx=Def_ErrX,double erry=Def_ErrX); void RedefineData(int i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL); void AddData1(double x, double f, double err=Def_ErrF,double errx=Def_ErrX); void AddData2(double x, double y, double f, double err=Def_ErrF ,double errx=Def_ErrX,double erry=Def_ErrX); void AddData(double* xp, double f, double err=Def_ErrF,double* errxp=NULL); void AddData(float* xp, float f, float err=Def_ErrF,float* errxp=NULL); void SetData1(int nData,double* x,double* f,double *err=NULL,double *errx=NULL); void SetData1(int nData,float* x,float* f,float* err=NULL,float *errx=NULL); void SetData2(int nData,double* x,double* y,double* f,double *err=NULL ,double *errx=NULL,double *erry=NULL); void SetData2(int nData,float* x,float* y,float* f,float* err=NULL ,float *errx=NULL,float *erry=NULL); void SetData(int nData,double** xp,double *f,double *err=NULL,double** errxp=NULL); void SetData(int nData,float** xp,float* f,float* err=NULL,float** errxp=NULL); void PrintStatus(); void PrintData(int i); void PrintData(int i1,int i2); void PrintData(); void Show(ostream& os) const; inline void Show() const {Show(cout);} //! Retourne la place restante dans la structure (nombre de donnees que l'on peut encore stoquer). inline int GetSpaceFree() const { return mNDataAlloc - mNData; } //! Retourne le nombre de variables Xi inline int NVar() const {return mNVar;} //! Retourne le nombre de donnees inline int NData() const {return mNData;} //! Retourne le nombre de bonnes donnees (utilisees pour le fit) inline int NDataGood() const {return mNDataGood;} //! Retourne la place maximale allouee pour les donnees inline int NDataAlloc() const {return mNDataAlloc;} //! Retourne 1 si point valide, sinon 0 inline unsigned short int IsValid(int i) const {if(i>=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i fio(&obj); fio.Write(os); return(os); } inline PInPersist& operator >> (PInPersist& is, GeneralFitData & obj) { ObjFileIO fio(&obj); fio.Read(is); return(is); } // Classe pour la gestion de persistance // ObjFileIO } // Fin du namespace #endif