source: Sophya/trunk/SophyaLib/NTools/generaldata.h@ 307

Last change on this file since 307 was 307, checked in by ansari, 26 years ago

FIO_... + grosses modifs cmv 19/5/99

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// C.Magneville 04/99
3#ifndef GENERALDATA_SEEN
4#define GENERALDATA_SEEN
5
6#include "pexceptions.h"
7#include "ppersist.h"
8#include "poly.h"
9#include "anydataobj.h"
10
11namespace PlanckDPC {
12
13class GeneralFit;
14class FIO_GeneralFitData;
15
16//================================================================
17// GENERALFITDATA
18//================================================================
19
20class GeneralFitData : public AnyDataObj {
21 friend class GeneralFit;
22 friend class FIO_GeneralFitData;
23public:
24 enum {Def_ErrF = 1, Def_ErrX = 0};
25
26 GeneralFitData(unsigned int nVar, unsigned int nDataAlloc, uint_2 errx=0);
27 GeneralFitData(const GeneralFitData& data, bool clean=false);
28 GeneralFitData();
29 virtual ~GeneralFitData();
30
31 void Alloc(unsigned int nVar, unsigned int nDataAlloc, int_2 errx=-1);
32 void SetDataPtr(int ptr = 0);
33
34 void KillData(int i);
35 void KillData(int i1,int i2);
36
37 void ValidData(int i);
38 void ValidData(int i1,int i2);
39 void ValidData();
40
41 void RedefineData1(int i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX);
42 void RedefineData2(int i,double x,double y,double f,double err=Def_ErrF
43 ,double errx=Def_ErrX,double erry=Def_ErrX);
44 void RedefineData(int i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL);
45
46 void AddData1(double x, double f, double err=Def_ErrF,double errx=Def_ErrX);
47 void AddData2(double x, double y, double f, double err=Def_ErrF
48 ,double errx=Def_ErrX,double erry=Def_ErrX);
49 void AddData(double* xp, double f, double err=Def_ErrF,double* errxp=NULL);
50 void AddData(float* xp, float f, float err=Def_ErrF,float* errxp=NULL);
51
52 void SetData1(int nData,double* x,double* f,double *err=NULL,double *errx=NULL);
53 void SetData1(int nData,float* x,float* f,float* err=NULL,float *errx=NULL);
54 void SetData2(int nData,double* x,double* y,double* f,double *err=NULL
55 ,double *errx=NULL,double *erry=NULL);
56 void SetData2(int nData,float* x,float* y,float* f,float* err=NULL
57 ,float *errx=NULL,float *erry=NULL);
58 void SetData(int nData,double** xp,double *f,double *err=NULL,double** errxp=NULL);
59 void SetData(int nData,float** xp,float* f,float* err=NULL,float** errxp=NULL);
60
61 void PrintStatus();
62 void PrintData(int i);
63 void PrintData(int i1,int i2);
64 void PrintData();
65
66 inline int GetSpaceFree() const { return mNDataAlloc - mNData; }
67 inline int NVar() const {return mNVar;}
68 inline int NData() const {return mNData;}
69 inline int NDataGood() const {return mNDataGood;}
70 inline int NDataAlloc() const {return mNDataAlloc;}
71
72 inline unsigned short int IsValid(int i) const
73 {if(i>=0 && i<mNData) return mOK[i]; else return 0;}
74 inline bool HasXErrors() {if(mErrXP) return true; else return false;}
75
76 inline double X1(int i) const
77 {if(i>=0 && i<mNData) return mXP[i]; else return 0.;}
78 inline double X(int i) const
79 {if(i>=0 && i<mNData) return mXP[i*mNVar]; else return 0.;}
80 inline double Y(int i) const
81 {if(i>=0 && i<mNData && 1<mNVar) return mXP[i*mNVar+1]; else return 0.;}
82 inline double Z(int i) const
83 {if(i>=0 && i<mNData && 2<mNVar) return mXP[i*mNVar+2]; else return 0.;}
84 inline double Absc(int j,int i) const
85 {if(i>=0 && i<mNData && j<mNVar)return mXP[i*mNVar+j]; else return 0.;}
86 inline double Val(int i) const
87 {if(i>=0 && i<mNData) return mF[i]; else return 0.;}
88
89 inline double EX1(int i) const
90 {if(mErrXP && i>=0 && i<mNData) return mErrXP[i]; else return 0.;}
91 inline double EX(int i) const
92 {if(mErrXP && i>=0 && i<mNData) return mErrXP[i*mNVar]; else return 0.;}
93 inline double EY(int i) const
94 {if(mErrXP && i>=0 && i<mNData && 1<mNVar) return mErrXP[i*mNVar+1];
95 else return 0.;}
96 inline double EZ(int i) const
97 {if(mErrXP && i>=0 && i<mNData && 2<mNVar) return mErrXP[i*mNVar+2];
98 else return 0.;}
99 inline double EAbsc(int j,int i) const
100 {if(mErrXP && i>=0 && i<mNData && j<mNVar) return mErrXP[i*mNVar+j];
101 else return 0.;}
102 inline double EVal(int i) const
103 {if(i>=0 && i<mNData) return mErr[i]; else return 0.;}
104
105 r_8* GetVec(int n, r_8* ret=NULL) const ;
106 r_4* GetVecR4(int n, r_4* ret=NULL) const ;
107 int GetMinMax(int var,int& imin,int& imax);
108 int GetMinMax(int var,double& min,double& max);
109 int GetMeanSigma(int var,double& mean,double& sigma,double min=1.,double max=-1.);
110 int GetMoMeMed(int var,double& mode,double& mean,double& median,
111 double min=1.,double max=-1.,double coeff=0.8);
112 int GetMode(int var,double& mode,double min=1.,double max=-1.,double coeff=0.8);
113 double PolFit(int varx,Poly& pol,int degre,bool ey=true);
114 double PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2=-1,bool ez=true);
115 GeneralFitData FitResidus(GeneralFit& gfit);
116 GeneralFitData FitFunction(GeneralFit& gfit);
117 string VarList_C(const char* nomx) const;
118
119protected:
120 void Delete();
121
122 int_4 mNVar;
123 int_4 mNDataAlloc;
124 int_4 mNData;
125 int_4 mNDataGood;
126 uint_2 mOk_EXP;
127 r_8* mXP; // x0 y0 z0, x1 y1 z1, ..., xn yn zn
128 r_8* mErrXP; // Ex0 Ey0 Ez0, Ex1 Ey1 Ez1, ..., Exn Eyn Ezn
129 r_8* mF; // F0, F1, ...., Fn
130 r_8* mErr; // EF0, EF1, ...., EFn
131 uint_2* mOK; // 1 si pt valid, 0 sinon
132 r_8* BuffVar;
133 r_4* BuffVarR4;
134};
135
136/////////////////////////////////////////////////////////////////////////
137// Classe pour la gestion de persistance
138class FIO_GeneralFitData : public PPersist {
139public:
140 FIO_GeneralFitData();
141 FIO_GeneralFitData(string const & filename);
142 FIO_GeneralFitData(const GeneralFitData & obj);
143 FIO_GeneralFitData(GeneralFitData * obj);
144 virtual ~FIO_GeneralFitData();
145 virtual AnyDataObj* DataObj();
146 inline operator GeneralFitData() { return(*dobj); }
147protected :
148 virtual void ReadSelf(PInPersist&);
149 virtual void WriteSelf(POutPersist&) const;
150 GeneralFitData * dobj;
151 bool ownobj;
152};
153
154} // Fin du namespace
155
156#endif
Note: See TracBrowser for help on using the repository browser.