1 | #include "objfitter.h"
|
---|
2 |
|
---|
3 | TMatrix<r_4>
|
---|
4 | ObjectFitter::FitResidus(TMatrix<r_4> const & mtx, GeneralFit& gfit,
|
---|
5 | double xorg, double yorg, double dx, double dy)
|
---|
6 | {
|
---|
7 | return( ArrayFitter<r_4>::FitResidus(mtx, gfit, xorg, yorg, dx, dy) );
|
---|
8 | }
|
---|
9 |
|
---|
10 | TMatrix<r_8>
|
---|
11 | ObjectFitter::FitResidus(TMatrix<r_8> const & mtx, GeneralFit& gfit,
|
---|
12 | double xorg, double yorg, double dx, double dy)
|
---|
13 | {
|
---|
14 | return( ArrayFitter<r_8>::FitResidus(mtx, gfit, xorg, yorg, dx, dy) );
|
---|
15 | }
|
---|
16 |
|
---|
17 | TMatrix<r_4>
|
---|
18 | ObjectFitter::FitFunction(TMatrix<r_4> const & mtx, GeneralFit& gfit,
|
---|
19 | double xorg, double yorg, double dx, double dy)
|
---|
20 | {
|
---|
21 | return( ArrayFitter<r_4>::FitFunction(mtx, gfit, xorg, yorg, dx, dy) );
|
---|
22 | }
|
---|
23 |
|
---|
24 | TMatrix<r_8>
|
---|
25 | ObjectFitter::FitFunction(TMatrix<r_8> const & mtx, GeneralFit& gfit,
|
---|
26 | double xorg, double yorg, double dx, double dy)
|
---|
27 | {
|
---|
28 | return( ArrayFitter<r_8>::FitFunction(mtx, gfit, xorg, yorg, dx, dy) );
|
---|
29 | }
|
---|
30 |
|
---|
31 | TVector<r_4>
|
---|
32 | ObjectFitter::FitResidus(TVector<r_4> const & vec, GeneralFit& gfit,
|
---|
33 | double xorg, double dx)
|
---|
34 | {
|
---|
35 | return( ArrayFitter<r_4>::FitResidus(vec, gfit, xorg, dx) );
|
---|
36 | }
|
---|
37 |
|
---|
38 | TVector<r_8>
|
---|
39 | ObjectFitter::FitResidus(TVector<r_8> const & vec, GeneralFit& gfit,
|
---|
40 | double xorg, double dx)
|
---|
41 | {
|
---|
42 | return( ArrayFitter<r_8>::FitResidus(vec, gfit, xorg, dx) );
|
---|
43 | }
|
---|
44 |
|
---|
45 | TVector<r_4>
|
---|
46 | ObjectFitter::FitFunction(TVector<r_4> const & vec, GeneralFit& gfit,
|
---|
47 | double xorg, double dx)
|
---|
48 | {
|
---|
49 | return( ArrayFitter<r_4>::FitFunction(vec, gfit, xorg, dx) );
|
---|
50 | }
|
---|
51 |
|
---|
52 | TVector<r_8>
|
---|
53 | ObjectFitter::FitFunction(TVector<r_8> const & vec, GeneralFit& gfit,
|
---|
54 | double xorg, double dx)
|
---|
55 | {
|
---|
56 | return( ArrayFitter<r_8>::FitFunction(vec, gfit, xorg, dx) );
|
---|
57 | }
|
---|
58 |
|
---|
59 |
|
---|
60 | // ---------------------------------------------------------------------------
|
---|
61 |
|
---|
62 | template <class T>
|
---|
63 | TMatrix<T>
|
---|
64 | ArrayFitter<T>::FitResidus(TMatrix<T> const & mtx, GeneralFit& gfit,
|
---|
65 | double xorg,double yorg,double dx,double dy)
|
---|
66 | // Retourne une classe contenant les residus du fit ``gfit''.
|
---|
67 | // On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
|
---|
68 | // Les coordonnees de l'element (i,j) sont :
|
---|
69 | // (i,j) -> x = xorg+j*dx , y = yorg+i*dy
|
---|
70 | {
|
---|
71 | if(mtx.NCols()<=0||mtx.NRows()<=0)
|
---|
72 | throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) size mismatch\n"));
|
---|
73 | GeneralFunction* f = gfit.GetFunction();
|
---|
74 | if(f==NULL)
|
---|
75 | throw(NullPtrError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit==NULL\n"));
|
---|
76 | int npar = gfit.GetNPar();
|
---|
77 | if(npar==0)
|
---|
78 | throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit 0 parametre\n"));
|
---|
79 | double* par = new double[npar];
|
---|
80 | {for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
|
---|
81 | TMatrix<T> m(mtx);
|
---|
82 | m.SetTemp(true);
|
---|
83 | for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
|
---|
84 | double x[2] = {xorg+j*dx,yorg+i*dy};
|
---|
85 | m(i,j) -= f->Value(x,par);
|
---|
86 | }
|
---|
87 | delete [] par;
|
---|
88 | return m;
|
---|
89 | }
|
---|
90 |
|
---|
91 |
|
---|
92 | template <class T>
|
---|
93 | TMatrix<T>
|
---|
94 | ArrayFitter<T>::FitFunction(TMatrix<T> const & mtx, GeneralFit& gfit,
|
---|
95 | double xorg,double yorg,double dx,double dy)
|
---|
96 |
|
---|
97 | // Retourne une classe contenant la fonction du fit ``gfit''.
|
---|
98 | // On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
|
---|
99 | // Les coordonnees de l'element (i,j) sont :
|
---|
100 | // (i,j) -> x = xorg + j*dx , y = yorg + i*dy
|
---|
101 |
|
---|
102 | {
|
---|
103 | if(mtx.NCols()<=0||mtx.NRows()<=0)
|
---|
104 | throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) size mismatch\n"));
|
---|
105 | GeneralFunction* f = gfit.GetFunction();
|
---|
106 | if(f==NULL)
|
---|
107 | throw(NullPtrError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit==NULL\n"));
|
---|
108 | int npar = gfit.GetNPar();
|
---|
109 | if(npar==0)
|
---|
110 | throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit 0 parametre\n"));
|
---|
111 | double* par = new double[npar];
|
---|
112 | {for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
|
---|
113 | TMatrix<T> m(mtx.NRows(), mtx.NCols());
|
---|
114 | m.SetTemp(true);
|
---|
115 | for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
|
---|
116 | double x[2] = {xorg+j*dx,yorg+i*dy};
|
---|
117 | m(i,j) = f->Value(x,par);
|
---|
118 | }
|
---|
119 | delete [] par;
|
---|
120 | return m;
|
---|
121 |
|
---|
122 | }
|
---|
123 |
|
---|
124 | template <class T>
|
---|
125 | TVector<T>
|
---|
126 | ArrayFitter<T>::FitResidus(TVector<T> const & vec, GeneralFit& gfit,
|
---|
127 | double xorg,double dx)
|
---|
128 | // Retourne une classe contenant les residus du fit ``gfit''.
|
---|
129 | // La coordonnee de l'element (i) est -> x = xorg + i*dx
|
---|
130 | {
|
---|
131 | if(vec.NElts()<=0)
|
---|
132 | throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
|
---|
133 | GeneralFunction* f = gfit.GetFunction();
|
---|
134 | if(f==NULL)
|
---|
135 | throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
|
---|
136 | int npar = gfit.GetNPar();
|
---|
137 | if(npar==0)
|
---|
138 | throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
|
---|
139 | double* par = new double[npar];
|
---|
140 | {for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
|
---|
141 | TVector<T> v(vec);
|
---|
142 | v.SetTemp(true);
|
---|
143 | for(uint_4 i=0;i<vec.NElts();i++) {
|
---|
144 | double x = xorg+i*dx;
|
---|
145 | v(i) -= f->Value(&x,par);
|
---|
146 | }
|
---|
147 | delete [] par;
|
---|
148 | return v;
|
---|
149 | }
|
---|
150 |
|
---|
151 | template <class T>
|
---|
152 | TVector<T>
|
---|
153 | ArrayFitter<T>::FitFunction(TVector<T> const & vec, GeneralFit& gfit,
|
---|
154 | double xorg,double dx)
|
---|
155 | // Retourne une classe contenant les residus du fit ``gfit''.
|
---|
156 | // La coordonnee de l'element (i) est -> x = xorg + i*dx
|
---|
157 | {
|
---|
158 | if(vec.NElts()<=0)
|
---|
159 | throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
|
---|
160 | GeneralFunction* f = gfit.GetFunction();
|
---|
161 | if(f==NULL)
|
---|
162 | throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
|
---|
163 | int npar = gfit.GetNPar();
|
---|
164 | if(npar==0)
|
---|
165 | throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
|
---|
166 | double* par = new double[npar];
|
---|
167 | {for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
|
---|
168 | TVector<T> v(vec.NElts());
|
---|
169 | v.SetTemp(true);
|
---|
170 | for(uint_4 i=0;i<vec.NElts();i++) {
|
---|
171 | double x = xorg+i*dx;
|
---|
172 | v(i) = f->Value(&x,par);
|
---|
173 | }
|
---|
174 | delete [] par;
|
---|
175 | return v;
|
---|
176 | }
|
---|
177 |
|
---|
178 |
|
---|
179 | ///////////////////////////////////////////////////////////////
|
---|
180 | #ifdef __CXX_PRAGMA_TEMPLATES__
|
---|
181 | #pragma define_template ArrayFitter<r_4>
|
---|
182 | #pragma define_template ArrayFitter<r_8>
|
---|
183 | #endif
|
---|
184 |
|
---|
185 | #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
|
---|
186 | template class ArrayFitter<r_4>;
|
---|
187 | template class ArrayFitter<r_8>;
|
---|
188 | #endif
|
---|
189 |
|
---|