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

Last change on this file since 3028 was 2929, checked in by ansari, 19 years ago

Modifs ObjFitter pour prise en charge ajustement tableaux/TMatrix/TVector <int_2> <uint_2> <int_8> - Reza 3/4/2006

File size: 17.5 KB
RevLine 
[2615]1#include "sopnamsp.h"
[756]2#include "objfitter.h"
3
[1110]4//===========================================================================
5//===========================================================================
6//=========================== ObjectFitter ==================================
7//===========================================================================
8//===========================================================================
9
[1206]10//============================= Matrix et Vector ============================
[2929]11TMatrix<uint_2>
12ObjectFitter::FitResidus(TMatrix<uint_2> const & mtx,GeneralFit& gfit,
13 double xorg,double yorg,double dx,double dy)
14{return( ArrayFitter<uint_2>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
15
16TMatrix<int_2>
17ObjectFitter::FitResidus(TMatrix<int_2> const & mtx,GeneralFit& gfit,
18 double xorg,double yorg,double dx,double dy)
19{return( ArrayFitter<int_2>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
20
[1204]21TMatrix<int_4>
[1206]22ObjectFitter::FitResidus(TMatrix<int_4> const & mtx,GeneralFit& gfit,
23 double xorg,double yorg,double dx,double dy)
24{return( ArrayFitter<int_4>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
[1204]25
[2929]26TMatrix<int_8>
27ObjectFitter::FitResidus(TMatrix<int_8> const & mtx,GeneralFit& gfit,
28 double xorg,double yorg,double dx,double dy)
29{return( ArrayFitter<int_8>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
30
[756]31TMatrix<r_4>
[1206]32ObjectFitter::FitResidus(TMatrix<r_4> const & mtx,GeneralFit& gfit,
33 double xorg,double yorg,double dx,double dy)
34{return( ArrayFitter<r_4>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
[756]35
36TMatrix<r_8>
[1206]37ObjectFitter::FitResidus(TMatrix<r_8> const & mtx,GeneralFit& gfit,
38 double xorg,double yorg,double dx,double dy)
39{return( ArrayFitter<r_8>::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );}
[756]40
[2929]41TMatrix<uint_2>
42ObjectFitter::FitFunction(TMatrix<uint_2> const & mtx,GeneralFit& gfit,
43 double xorg,double yorg,double dx,double dy)
44{return( ArrayFitter<uint_2>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
45
46TMatrix<int_2>
47ObjectFitter::FitFunction(TMatrix<int_2> const & mtx,GeneralFit& gfit,
48 double xorg,double yorg,double dx,double dy)
49{return( ArrayFitter<int_2>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
50
[1204]51TMatrix<int_4>
[1206]52ObjectFitter::FitFunction(TMatrix<int_4> const & mtx,GeneralFit& gfit,
53 double xorg,double yorg,double dx,double dy)
54{return( ArrayFitter<int_4>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
[1204]55
[2929]56TMatrix<int_8>
57ObjectFitter::FitFunction(TMatrix<int_8> const & mtx,GeneralFit& gfit,
58 double xorg,double yorg,double dx,double dy)
59{return( ArrayFitter<int_8>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
60
[756]61TMatrix<r_4>
[1206]62ObjectFitter::FitFunction(TMatrix<r_4> const & mtx,GeneralFit& gfit,
63 double xorg,double yorg,double dx,double dy)
64{return( ArrayFitter<r_4>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
[756]65
66TMatrix<r_8>
[1206]67ObjectFitter::FitFunction(TMatrix<r_8> const & mtx,GeneralFit& gfit,
68 double xorg,double yorg,double dx,double dy)
69{return( ArrayFitter<r_8>::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );}
[756]70
[2929]71TVector<uint_2>
72ObjectFitter::FitResidus(TVector<uint_2> const & vec,GeneralFit& gfit,
73 double xorg,double dx)
74{return( ArrayFitter<uint_2>::FitResidus(vec,gfit,xorg,dx) );}
75
76TVector<int_2>
77ObjectFitter::FitResidus(TVector<int_2> const & vec,GeneralFit& gfit,
78 double xorg,double dx)
79{return( ArrayFitter<int_2>::FitResidus(vec,gfit,xorg,dx) );}
80
[1204]81TVector<int_4>
[1206]82ObjectFitter::FitResidus(TVector<int_4> const & vec,GeneralFit& gfit,
83 double xorg,double dx)
84{return( ArrayFitter<int_4>::FitResidus(vec,gfit,xorg,dx) );}
[1204]85
[2929]86TVector<int_8>
87ObjectFitter::FitResidus(TVector<int_8> const & vec,GeneralFit& gfit,
88 double xorg,double dx)
89{return( ArrayFitter<int_8>::FitResidus(vec,gfit,xorg,dx) );}
90
[756]91TVector<r_4>
[1206]92ObjectFitter::FitResidus(TVector<r_4> const & vec,GeneralFit& gfit,
93 double xorg,double dx)
94{return( ArrayFitter<r_4>::FitResidus(vec,gfit,xorg,dx) );}
[756]95
96TVector<r_8>
[1206]97ObjectFitter::FitResidus(TVector<r_8> const & vec,GeneralFit& gfit,
98 double xorg,double dx)
99{return( ArrayFitter<r_8>::FitResidus(vec,gfit,xorg,dx) );}
[756]100
[2929]101TVector<int_2>
102ObjectFitter::FitFunction(TVector<int_2> const & vec,GeneralFit& gfit,
103 double xorg,double dx)
104{return( ArrayFitter<int_2>::FitFunction(vec,gfit,xorg,dx) );}
105
106TVector<uint_2>
107ObjectFitter::FitFunction(TVector<uint_2> const & vec,GeneralFit& gfit,
108 double xorg,double dx)
109{return( ArrayFitter<uint_2>::FitFunction(vec,gfit,xorg,dx) );}
110
[1204]111TVector<int_4>
[1206]112ObjectFitter::FitFunction(TVector<int_4> const & vec,GeneralFit& gfit,
113 double xorg,double dx)
114{return( ArrayFitter<int_4>::FitFunction(vec,gfit,xorg,dx) );}
[1204]115
[2929]116TVector<int_8>
117ObjectFitter::FitFunction(TVector<int_8> const & vec,GeneralFit& gfit,
118 double xorg,double dx)
119{return( ArrayFitter<int_8>::FitFunction(vec,gfit,xorg,dx) );}
120
[756]121TVector<r_4>
[1206]122ObjectFitter::FitFunction(TVector<r_4> const & vec,GeneralFit& gfit,
123 double xorg,double dx)
124{return( ArrayFitter<r_4>::FitFunction(vec,gfit,xorg,dx) );}
[756]125
126TVector<r_8>
[1206]127ObjectFitter::FitFunction(TVector<r_8> const & vec,GeneralFit& gfit,
128 double xorg,double dx)
129{return( ArrayFitter<r_8>::FitFunction(vec,gfit,xorg,dx) );}
[756]130
[1206]131//============================= Matrix et Vector ============================
132Image<uint_2> ObjectFitter::FitResidus(Image<uint_2> const & im,GeneralFit& gfit)
133{ return( ImageFitter<uint_2>::FitResidus(im,gfit) ); }
134Image<int_4> ObjectFitter::FitResidus(Image<int_4> const & im,GeneralFit& gfit)
135{ return( ImageFitter<int_4>::FitResidus(im,gfit) ); }
136Image<int_8> ObjectFitter::FitResidus(Image<int_8> const & im,GeneralFit& gfit)
137{ return( ImageFitter<int_8>::FitResidus(im,gfit) ); }
138Image<r_4> ObjectFitter::FitResidus(Image<r_4> const & im,GeneralFit& gfit)
139{ return( ImageFitter<r_4>::FitResidus(im,gfit) ); }
140Image<r_8> ObjectFitter::FitResidus(Image<r_8> const & im,GeneralFit& gfit)
141{ return( ImageFitter<r_8>::FitResidus(im,gfit) ); }
[756]142
[1206]143Image<uint_2> ObjectFitter::FitFunction(Image<uint_2> const & im,GeneralFit& gfit)
144{ return( ImageFitter<uint_2>::FitFunction(im,gfit) ); }
145Image<int_4> ObjectFitter::FitFunction(Image<int_4> const & im,GeneralFit& gfit)
146{ return( ImageFitter<int_4>::FitFunction(im,gfit) ); }
147Image<int_8> ObjectFitter::FitFunction(Image<int_8> const & im,GeneralFit& gfit)
148{ return( ImageFitter<int_8>::FitFunction(im,gfit) ); }
149Image<r_4> ObjectFitter::FitFunction(Image<r_4> const & im,GeneralFit& gfit)
150{ return( ImageFitter<r_4>::FitFunction(im,gfit) ); }
151Image<r_8> ObjectFitter::FitFunction(Image<r_8> const & im,GeneralFit& gfit)
152{ return( ImageFitter<r_8>::FitFunction(im,gfit) ); }
153
[1110]154//=============================== Histo =====================================
155/*! Retourne une classe contenant les residus du fit ``gfit''. */
156Histo ObjectFitter::FitResidus(Histo const& hh, GeneralFit& gfit)
157{
158Histo h(hh);
159if(h.NBins()<=0)
160 throw(SzMismatchError("Histo::FitResidus: size mismatch\n"));
161GeneralFunction* f = gfit.GetFunction();
162if(f==NULL)
163 throw(NullPtrError("Histo::FitResidus: NULL pointer\n"));
164TVector<r_8> par = gfit.GetParm();
165for(int_4 i=0;i<h.NBins();i++) {
166 r_8 x = h.BinCenter(i);
167 h(i) -= f->Value(&x,par.Data());
168}
169return h;
170}
[756]171
[1110]172/*! Retourne une classe contenant la fonction du fit ``gfit''. */
173Histo ObjectFitter::FitFunction(Histo const& hh, GeneralFit& gfit)
174{
175Histo h(hh);
176if(h.NBins()<=0)
177 throw(SzMismatchError("Histo::FitFunction: size mismatch\n"));
178GeneralFunction* f = gfit.GetFunction();
179if(f==NULL)
180 throw(NullPtrError("Histo::FitFunction: NULL pointer\n"));
181TVector<r_8> par = gfit.GetParm();
182for(int_4 i=0;i<h.NBins();i++) {
183 r_8 x = h.BinCenter(i);
184 h(i) = f->Value(&x,par.Data());
185}
186return h;
187}
188
189/*!
190 Fit de l'histogramme par ``gfit''.
[1206]191 \param errtype,errscale,errmin : pour definir les erreurs
192 \sa GeneralFitData::ComputeError(double,err,FitErrType,double,double,bool)
[1110]193*/
[1206]194int_4 ObjectFitter::Fit(Histo const& h, GeneralFit& gfit
195 ,GeneralFitData::FitErrType errtype,double errscale,double errmin)
[1110]196{
197if(h.NBins()<=0) return -1000;
198
199GeneralFitData mydata(1,h.NBins());
200
201for(int_4 i=0;i<h.NBins();i++) {
202 r_8 x = h.BinCenter(i);
203 r_8 f = h(i);
[1206]204 r_8 e = (h.HasErrors()) ? h.Error(i) : 1.;
205 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
[1110]206 mydata.AddData1(x,f,e);
207}
208
209gfit.SetData(&mydata);
210
211return gfit.Fit();
212}
213
214//============================== Histo2D ====================================
215/*! Retourne une classe contenant les residus du fit ``gfit''. */
216Histo2D ObjectFitter::FitResidus(Histo2D const& hh, GeneralFit& gfit)
217{
218Histo2D h(hh);
219if(h.NBinX()<=0 || h.NBinY()<=0)
220 throw(SzMismatchError("Histo2D::FitResidus: size mismatch\n"));
221GeneralFunction* f = gfit.GetFunction();
222if(f==NULL)
223 throw(NullPtrError("Histo2D::FitResidus: NULL pointer\n"));
224TVector<r_8> par = gfit.GetParm();
225for(int_4 i=0;i<h.NBinX();i++) for(int_4 j=0;j<h.NBinY();j++) {
226 r_8 xc,yc;
227 h.BinCenter(i,j,xc,yc);
228 r_8 x[2] = {xc,yc};
229 h(i,j) -= f->Value(x,par.Data());
230}
231return h;
232}
233
234/*! Retourne une classe contenant la fonction du fit ``gfit''. */
235Histo2D ObjectFitter::FitFunction(Histo2D const& hh, GeneralFit& gfit)
236{
237Histo2D h(hh);
238if(h.NBinX()<=0 || h.NBinY()<=0)
239 throw(SzMismatchError("Histo2D::FitFunction: size mismatch\n"));
240GeneralFunction* f = gfit.GetFunction();
241if(f==NULL)
242 throw(NullPtrError("Histo2D::FitFunction: NULL pointer\n"));
243TVector<r_8> par = gfit.GetParm();
244for(int_4 i=0;i<h.NBinX();i++) for(int_4 j=0;j<h.NBinY();j++) {
245 r_8 xc,yc;
246 h.BinCenter(i,j,xc,yc);
247 r_8 x[2] = {xc,yc};
248 h(i,j) = f->Value(x,par.Data());
249}
250return h;
251}
252
253/*!
254 Fit de l'histogramme par ``gfit''.
[1206]255 \param errtype,errscale,errmin : pour definir les erreurs
256 \sa GeneralFitData::ComputeError(double,err,FitErrType,double,double,bool)
[1110]257*/
[1206]258int_4 ObjectFitter::Fit(Histo2D const & h, GeneralFit& gfit
259 ,GeneralFitData::FitErrType errtype,double errscale,double errmin)
[1110]260{
261if(h.NBinX()*h.NBinY()<=0) return -1000;
262
263GeneralFitData mydata(2,h.NBinX()*h.NBinY());
264
265for(int_4 i=0;i<h.NBinX();i++) for(int_4 j=0;j<h.NBinY();j++) {
[1206]266 r_8 x,y; h.BinCenter(i,j,x,y);
[1110]267 r_8 f = h(i,j);
[1206]268 r_8 e = (h.HasErrors()) ? h.Error(i,j) : 1.;
269 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
[1110]270 mydata.AddData2(x,y,f,e);
271}
272
273gfit.SetData(&mydata);
274
275return gfit.Fit();
276}
277
278//===========================================================================
279//===========================================================================
280//========================== ArrayFitter<T> =================================
281//===========================================================================
282//===========================================================================
283
[1206]284/*! Retourne une classe contenant les residus du fit ``gfit''. */
[756]285template <class T>
286TMatrix<T>
287ArrayFitter<T>::FitResidus(TMatrix<T> const & mtx, GeneralFit& gfit,
[1206]288 double xorg,double yorg,double dx,double dy)
[756]289// Retourne une classe contenant les residus du fit ``gfit''.
290// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
291// Les coordonnees de l'element (i,j) sont :
292// (i,j) -> x = xorg+j*dx , y = yorg+i*dy
293{
294if(mtx.NCols()<=0||mtx.NRows()<=0)
295 throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) size mismatch\n"));
296GeneralFunction* f = gfit.GetFunction();
297if(f==NULL)
298 throw(NullPtrError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit==NULL\n"));
299int npar = gfit.GetNPar();
300if(npar==0)
301 throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit 0 parametre\n"));
302double* par = new double[npar];
303{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
[1206]304TMatrix<T> m(mtx,false);
[756]305for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
306 double x[2] = {xorg+j*dx,yorg+i*dy};
307 m(i,j) -= f->Value(x,par);
308}
309delete [] par;
310return m;
311}
312
313
[1206]314/*! Retourne une classe contenant la fonction du fit ``gfit''. */
[756]315template <class T>
316TMatrix<T>
317ArrayFitter<T>::FitFunction(TMatrix<T> const & mtx, GeneralFit& gfit,
[1206]318 double xorg,double yorg,double dx,double dy)
[756]319
320// Retourne une classe contenant la fonction du fit ``gfit''.
321// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
322// Les coordonnees de l'element (i,j) sont :
323// (i,j) -> x = xorg + j*dx , y = yorg + i*dy
324
325{
326if(mtx.NCols()<=0||mtx.NRows()<=0)
327 throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) size mismatch\n"));
328GeneralFunction* f = gfit.GetFunction();
329if(f==NULL)
330 throw(NullPtrError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit==NULL\n"));
331int npar = gfit.GetNPar();
332if(npar==0)
333 throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit 0 parametre\n"));
334double* par = new double[npar];
335{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
336TMatrix<T> m(mtx.NRows(), mtx.NCols());
337for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
338 double x[2] = {xorg+j*dx,yorg+i*dy};
339 m(i,j) = f->Value(x,par);
340}
341delete [] par;
342return m;
343
344}
345
[1206]346/*! Retourne une classe contenant les residus du fit ``gfit''. */
[756]347template <class T>
348TVector<T>
349ArrayFitter<T>::FitResidus(TVector<T> const & vec, GeneralFit& gfit,
[1206]350 double xorg,double dx)
351// Retourne une classe contenant la fonction fittee du fit ``gfit''.
[756]352// La coordonnee de l'element (i) est -> x = xorg + i*dx
353{
354if(vec.NElts()<=0)
355 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
356GeneralFunction* f = gfit.GetFunction();
357if(f==NULL)
358 throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
359int npar = gfit.GetNPar();
360if(npar==0)
361 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
362double* par = new double[npar];
363{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
[1206]364TVector<T> v(vec,false);
[756]365for(uint_4 i=0;i<vec.NElts();i++) {
366 double x = xorg+i*dx;
367 v(i) -= f->Value(&x,par);
368}
369delete [] par;
370return v;
371}
372
[1206]373/*! Retourne une classe contenant la fonction du fit ``gfit''. */
[756]374template <class T>
375TVector<T>
376ArrayFitter<T>::FitFunction(TVector<T> const & vec, GeneralFit& gfit,
[1206]377 double xorg,double dx)
378// Retourne une classe contenant la function fittee du fit ``gfit''.
[756]379// La coordonnee de l'element (i) est -> x = xorg + i*dx
380{
381if(vec.NElts()<=0)
382 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) size mismatch\n"));
383GeneralFunction* f = gfit.GetFunction();
384if(f==NULL)
385 throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
386int npar = gfit.GetNPar();
387if(npar==0)
388 throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
389double* par = new double[npar];
390{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
391TVector<T> v(vec.NElts());
392for(uint_4 i=0;i<vec.NElts();i++) {
393 double x = xorg+i*dx;
394 v(i) = f->Value(&x,par);
395}
396delete [] par;
397return v;
398}
399
[1206]400//===========================================================================
401//===========================================================================
402//========================== ImageFitter<T> =================================
403//===========================================================================
404//===========================================================================
[756]405
[1206]406/*! Retourne une classe contenant les residus du fit ``gfit''. */
407template <class T>
408Image<T>
409ImageFitter<T>::FitResidus(Image<T> const & ima, GeneralFit& gfit)
410{
411if(ima.XSize()<=0||ima.YSize()<=0)
412 throw(SzMismatchError("ImageFitter::FitResidus(Image<T>...) size mismatch\n"));
413GeneralFunction* f = gfit.GetFunction();
414if(f==NULL)
415 throw(NullPtrError("ImageFitter::FitResidus(Image<T>...) GeneraFit==NULL\n"));
416int npar = gfit.GetNPar();
417if(npar==0)
418 throw(SzMismatchError("ImageFitter::FitResidus(Image<T>...) GeneraFit 0 parametre\n"));
419double* par = new double[npar];
420{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
421Image<T> im(ima,false);
422for(uint_4 i=0;i<ima.XSize();i++) for(uint_4 j=0;j<ima.YSize();j++) {
423 double x[2] = {ima.XPos(i),ima.YPos(j)};
424 im(i,j) -= f->Value(x,par);
425}
426delete [] par;
427return im;
428}
429
430/*! Retourne une classe contenant la function fittee du fit ``gfit''. */
431template <class T>
432Image<T>
433ImageFitter<T>::FitFunction(Image<T> const & ima, GeneralFit& gfit)
434{
435if(ima.XSize()<=0||ima.YSize()<=0)
436 throw(SzMismatchError("ImageFitter::FitFunction(Image<T>...) size mismatch\n"));
437GeneralFunction* f = gfit.GetFunction();
438if(f==NULL)
439 throw(NullPtrError("ImageFitter::FitFunction(Image<T>...) GeneraFit==NULL\n"));
440int npar = gfit.GetNPar();
441if(npar==0)
442 throw(SzMismatchError("ImageFitter::FitFunction(Image<T>...) GeneraFit 0 parametre\n"));
443double* par = new double[npar];
444{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
445Image<T> im(ima.XSize(),ima.YSize());
446for(uint_4 i=0;i<ima.XSize();i++) for(uint_4 j=0;j<ima.YSize();j++) {
447 double x[2] = {ima.XPos(i),ima.YPos(j)};
448 im(i,j) = f->Value(x,par);
449}
450delete [] par;
451return im;
452}
453
[756]454///////////////////////////////////////////////////////////////
455#ifdef __CXX_PRAGMA_TEMPLATES__
[2929]456#pragma define_template ArrayFitter<uint_2>
457#pragma define_template ArrayFitter<int_2>
[1204]458#pragma define_template ArrayFitter<int_4>
[2929]459#pragma define_template ArrayFitter<int_8>
[756]460#pragma define_template ArrayFitter<r_4>
461#pragma define_template ArrayFitter<r_8>
[1204]462#pragma define_template ArrayFitter< complex<r_4> >
463#pragma define_template ArrayFitter< complex<r_8> >
[1206]464#pragma define_template ImageFitter<uint_2>
465#pragma define_template ImageFitter<int_4>
466#pragma define_template ImageFitter<int_8>
467#pragma define_template ImageFitter<r_4>
468#pragma define_template ImageFitter<r_8>
[756]469#endif
470
471#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
[2870]472namespace SOPHYA {
[2929]473template class ArrayFitter<uint_2>;
474template class ArrayFitter<int_2>;
[1204]475template class ArrayFitter<int_4>;
[2929]476template class ArrayFitter<int_8>;
[756]477template class ArrayFitter<r_4>;
478template class ArrayFitter<r_8>;
[1204]479template class ArrayFitter< complex<r_4> >;
480template class ArrayFitter< complex<r_8> >;
[1206]481template class ImageFitter<uint_2>;
482template class ImageFitter<int_4>;
483template class ImageFitter<int_8>;
484template class ImageFitter<r_4>;
485template class ImageFitter<r_8>;
[2870]486}
[756]487#endif
Note: See TracBrowser for help on using the repository browser.