#include "sopnamsp.h" #include "objfitter.h" //=========================================================================== //=========================================================================== //=========================== ObjectFitter ================================== //=========================================================================== //=========================================================================== //============================= Matrix et Vector ============================ TMatrix ObjectFitter::FitResidus(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );} TMatrix ObjectFitter::FitResidus(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );} TMatrix ObjectFitter::FitResidus(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitResidus(mtx,gfit,xorg,yorg,dx,dy) );} TMatrix ObjectFitter::FitFunction(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );} TMatrix ObjectFitter::FitFunction(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );} TMatrix ObjectFitter::FitFunction(TMatrix const & mtx,GeneralFit& gfit, double xorg,double yorg,double dx,double dy) {return( ArrayFitter::FitFunction(mtx,gfit,xorg,yorg,dx,dy) );} TVector ObjectFitter::FitResidus(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitResidus(vec,gfit,xorg,dx) );} TVector ObjectFitter::FitResidus(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitResidus(vec,gfit,xorg,dx) );} TVector ObjectFitter::FitResidus(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitResidus(vec,gfit,xorg,dx) );} TVector ObjectFitter::FitFunction(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitFunction(vec,gfit,xorg,dx) );} TVector ObjectFitter::FitFunction(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitFunction(vec,gfit,xorg,dx) );} TVector ObjectFitter::FitFunction(TVector const & vec,GeneralFit& gfit, double xorg,double dx) {return( ArrayFitter::FitFunction(vec,gfit,xorg,dx) );} //============================= Matrix et Vector ============================ Image ObjectFitter::FitResidus(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitResidus(im,gfit) ); } Image ObjectFitter::FitResidus(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitResidus(im,gfit) ); } Image ObjectFitter::FitResidus(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitResidus(im,gfit) ); } Image ObjectFitter::FitResidus(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitResidus(im,gfit) ); } Image ObjectFitter::FitResidus(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitResidus(im,gfit) ); } Image ObjectFitter::FitFunction(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitFunction(im,gfit) ); } Image ObjectFitter::FitFunction(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitFunction(im,gfit) ); } Image ObjectFitter::FitFunction(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitFunction(im,gfit) ); } Image ObjectFitter::FitFunction(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitFunction(im,gfit) ); } Image ObjectFitter::FitFunction(Image const & im,GeneralFit& gfit) { return( ImageFitter::FitFunction(im,gfit) ); } //=============================== Histo ===================================== /*! Retourne une classe contenant les residus du fit ``gfit''. */ Histo ObjectFitter::FitResidus(Histo const& hh, GeneralFit& gfit) { Histo h(hh); if(h.NBins()<=0) throw(SzMismatchError("Histo::FitResidus: size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("Histo::FitResidus: NULL pointer\n")); TVector par = gfit.GetParm(); for(int_4 i=0;iValue(&x,par.Data()); } return h; } /*! Retourne une classe contenant la fonction du fit ``gfit''. */ Histo ObjectFitter::FitFunction(Histo const& hh, GeneralFit& gfit) { Histo h(hh); if(h.NBins()<=0) throw(SzMismatchError("Histo::FitFunction: size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("Histo::FitFunction: NULL pointer\n")); TVector par = gfit.GetParm(); for(int_4 i=0;iValue(&x,par.Data()); } return h; } /*! Fit de l'histogramme par ``gfit''. \param errtype,errscale,errmin : pour definir les erreurs \sa GeneralFitData::ComputeError(double,err,FitErrType,double,double,bool) */ int_4 ObjectFitter::Fit(Histo const& h, GeneralFit& gfit ,GeneralFitData::FitErrType errtype,double errscale,double errmin) { if(h.NBins()<=0) return -1000; GeneralFitData mydata(1,h.NBins()); for(int_4 i=0;i par = gfit.GetParm(); for(int_4 i=0;iValue(x,par.Data()); } return h; } /*! Retourne une classe contenant la fonction du fit ``gfit''. */ Histo2D ObjectFitter::FitFunction(Histo2D const& hh, GeneralFit& gfit) { Histo2D h(hh); if(h.NBinX()<=0 || h.NBinY()<=0) throw(SzMismatchError("Histo2D::FitFunction: size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("Histo2D::FitFunction: NULL pointer\n")); TVector par = gfit.GetParm(); for(int_4 i=0;iValue(x,par.Data()); } return h; } /*! Fit de l'histogramme par ``gfit''. \param errtype,errscale,errmin : pour definir les erreurs \sa GeneralFitData::ComputeError(double,err,FitErrType,double,double,bool) */ int_4 ObjectFitter::Fit(Histo2D const & h, GeneralFit& gfit ,GeneralFitData::FitErrType errtype,double errscale,double errmin) { if(h.NBinX()*h.NBinY()<=0) return -1000; GeneralFitData mydata(2,h.NBinX()*h.NBinY()); for(int_4 i=0;i ================================= //=========================================================================== //=========================================================================== /*! Retourne une classe contenant les residus du fit ``gfit''. */ template TMatrix ArrayFitter::FitResidus(TMatrix const & mtx, GeneralFit& gfit, double xorg,double yorg,double dx,double dy) // Retourne une classe contenant les residus du fit ``gfit''. // On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j). // Les coordonnees de l'element (i,j) sont : // (i,j) -> x = xorg+j*dx , y = yorg+i*dy { if(mtx.NCols()<=0||mtx.NRows()<=0) throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ArrayFitter::FitResidus(TMatrix...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i m(mtx,false); for(uint_4 i=0;iValue(x,par); } delete [] par; return m; } /*! Retourne une classe contenant la fonction du fit ``gfit''. */ template TMatrix ArrayFitter::FitFunction(TMatrix const & mtx, GeneralFit& gfit, double xorg,double yorg,double dx,double dy) // Retourne une classe contenant la fonction du fit ``gfit''. // On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j). // Les coordonnees de l'element (i,j) sont : // (i,j) -> x = xorg + j*dx , y = yorg + i*dy { if(mtx.NCols()<=0||mtx.NRows()<=0) throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ArrayFitter::FitFunction(TMatrix...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i m(mtx.NRows(), mtx.NCols()); for(uint_4 i=0;iValue(x,par); } delete [] par; return m; } /*! Retourne une classe contenant les residus du fit ``gfit''. */ template TVector ArrayFitter::FitResidus(TVector const & vec, GeneralFit& gfit, double xorg,double dx) // Retourne une classe contenant la fonction fittee du fit ``gfit''. // La coordonnee de l'element (i) est -> x = xorg + i*dx { if(vec.NElts()<=0) throw(SzMismatchError("ArrayFitter::FitResidus(TVector...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ArrayFitter::FitResidus(TVector...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ArrayFitter::FitResidus(TVector...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i v(vec,false); for(uint_4 i=0;iValue(&x,par); } delete [] par; return v; } /*! Retourne une classe contenant la fonction du fit ``gfit''. */ template TVector ArrayFitter::FitFunction(TVector const & vec, GeneralFit& gfit, double xorg,double dx) // Retourne une classe contenant la function fittee du fit ``gfit''. // La coordonnee de l'element (i) est -> x = xorg + i*dx { if(vec.NElts()<=0) throw(SzMismatchError("ArrayFitter::FitResidus(TVector...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ArrayFitter::FitResidus(TVector...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ArrayFitter::FitResidus(TVector...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i v(vec.NElts()); for(uint_4 i=0;iValue(&x,par); } delete [] par; return v; } //=========================================================================== //=========================================================================== //========================== ImageFitter ================================= //=========================================================================== //=========================================================================== /*! Retourne une classe contenant les residus du fit ``gfit''. */ template Image ImageFitter::FitResidus(Image const & ima, GeneralFit& gfit) { if(ima.XSize()<=0||ima.YSize()<=0) throw(SzMismatchError("ImageFitter::FitResidus(Image...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ImageFitter::FitResidus(Image...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ImageFitter::FitResidus(Image...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i im(ima,false); for(uint_4 i=0;iValue(x,par); } delete [] par; return im; } /*! Retourne une classe contenant la function fittee du fit ``gfit''. */ template Image ImageFitter::FitFunction(Image const & ima, GeneralFit& gfit) { if(ima.XSize()<=0||ima.YSize()<=0) throw(SzMismatchError("ImageFitter::FitFunction(Image...) size mismatch\n")); GeneralFunction* f = gfit.GetFunction(); if(f==NULL) throw(NullPtrError("ImageFitter::FitFunction(Image...) GeneraFit==NULL\n")); int npar = gfit.GetNPar(); if(npar==0) throw(SzMismatchError("ImageFitter::FitFunction(Image...) GeneraFit 0 parametre\n")); double* par = new double[npar]; {for(int i=0;i im(ima.XSize(),ima.YSize()); for(uint_4 i=0;iValue(x,par); } delete [] par; return im; } /////////////////////////////////////////////////////////////// #ifdef __CXX_PRAGMA_TEMPLATES__ #pragma define_template ArrayFitter #pragma define_template ArrayFitter #pragma define_template ArrayFitter #pragma define_template ArrayFitter< complex > #pragma define_template ArrayFitter< complex > #pragma define_template ImageFitter #pragma define_template ImageFitter #pragma define_template ImageFitter #pragma define_template ImageFitter #pragma define_template ImageFitter #endif #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES) template class ArrayFitter; template class ArrayFitter; template class ArrayFitter; template class ArrayFitter< complex >; template class ArrayFitter< complex >; template class ImageFitter; template class ImageFitter; template class ImageFitter; template class ImageFitter; template class ImageFitter; #endif