source: Sophya/trunk/SophyaLib/NTools/objfitter.cc@ 896

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

ne Pas mettre les arguments par default dans un cc

Dominique

File size: 5.7 KB
Line 
1#include "objfitter.h"
2
3TMatrix<r_4>
4ObjectFitter::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
10TMatrix<r_8>
11ObjectFitter::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
17TMatrix<r_4>
18ObjectFitter::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
24TMatrix<r_8>
25ObjectFitter::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
31TVector<r_4>
32ObjectFitter::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
38TVector<r_8>
39ObjectFitter::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
45TVector<r_4>
46ObjectFitter::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
52TVector<r_8>
53ObjectFitter::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
62template <class T>
63TMatrix<T>
64ArrayFitter<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{
71if(mtx.NCols()<=0||mtx.NRows()<=0)
72 throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) size mismatch\n"));
73GeneralFunction* f = gfit.GetFunction();
74if(f==NULL)
75 throw(NullPtrError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit==NULL\n"));
76int npar = gfit.GetNPar();
77if(npar==0)
78 throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit 0 parametre\n"));
79double* par = new double[npar];
80{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
81TMatrix<T> m(mtx);
82m.SetTemp(true);
83for(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}
87delete [] par;
88return m;
89}
90
91
92template <class T>
93TMatrix<T>
94ArrayFitter<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{
103if(mtx.NCols()<=0||mtx.NRows()<=0)
104 throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) size mismatch\n"));
105GeneralFunction* f = gfit.GetFunction();
106if(f==NULL)
107 throw(NullPtrError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit==NULL\n"));
108int npar = gfit.GetNPar();
109if(npar==0)
110 throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit 0 parametre\n"));
111double* par = new double[npar];
112{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
113TMatrix<T> m(mtx.NRows(), mtx.NCols());
114m.SetTemp(true);
115for(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}
119delete [] par;
120return m;
121
122}
123
124template <class T>
125TVector<T>
126ArrayFitter<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{
131if(vec.NElts()<=0)
132 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
133GeneralFunction* f = gfit.GetFunction();
134if(f==NULL)
135 throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
136int npar = gfit.GetNPar();
137if(npar==0)
138 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
139double* par = new double[npar];
140{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
141TVector<T> v(vec);
142v.SetTemp(true);
143for(uint_4 i=0;i<vec.NElts();i++) {
144 double x = xorg+i*dx;
145 v(i) -= f->Value(&x,par);
146}
147delete [] par;
148return v;
149}
150
151template <class T>
152TVector<T>
153ArrayFitter<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{
158if(vec.NElts()<=0)
159 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
160GeneralFunction* f = gfit.GetFunction();
161if(f==NULL)
162 throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
163int npar = gfit.GetNPar();
164if(npar==0)
165 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
166double* par = new double[npar];
167{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
168TVector<T> v(vec.NElts());
169v.SetTemp(true);
170for(uint_4 i=0;i<vec.NElts();i++) {
171 double x = xorg+i*dx;
172 v(i) = f->Value(&x,par);
173}
174delete [] par;
175return 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)
186template class ArrayFitter<r_4>;
187template class ArrayFitter<r_8>;
188#endif
189
Note: See TracBrowser for help on using the repository browser.