inlib  1.2.0
Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions
inlib::f2cmn::func_fitter Class Reference

List of all members.

Public Member Functions

bool value (int, double *a_params, double &a_value)
virtual double chi2 () const

Static Public Member Functions

static bool fit (std::ostream &a_out, const std::vector< point > &a_data, const std::vector< parameter > a_params, fit_func &a_func, std::vector< double > &a_output, const std::vector< command > &a_cmds=std::vector< command >(1, command("MIGRAD")))

Protected Member Functions

 func_fitter (const std::vector< point > &a_data, fit_func &a_func)
virtual ~func_fitter ()

Static Protected Member Functions

static bool function (int &aParamn, double *, double &aValue, double *aParams, int, void *aTag)

Detailed Description

Definition at line 7719 of file f2cmn.


Constructor & Destructor Documentation

inlib::f2cmn::func_fitter::func_fitter ( const std::vector< point > &  a_data,
fit_func a_func 
) [inline, protected]

Definition at line 7740 of file f2cmn.

  :m_data(a_data),m_func(a_func),m_chi2(0)
  {}
virtual inlib::f2cmn::func_fitter::~func_fitter ( ) [inline, protected, virtual]

Definition at line 7743 of file f2cmn.

{}

Member Function Documentation

virtual double inlib::f2cmn::func_fitter::chi2 ( ) const [inline, virtual]

Definition at line 7737 of file f2cmn.

{ return m_chi2;}
static bool inlib::f2cmn::func_fitter::fit ( std::ostream &  a_out,
const std::vector< point > &  a_data,
const std::vector< parameter a_params,
fit_func a_func,
std::vector< double > &  a_output,
const std::vector< command > &  a_cmds = std::vector<command>(1,command("MIGRAD")) 
) [inline, static]

Definition at line 7751 of file f2cmn.

                                                                    {

    //NOTE : the size of a_output is : 
    //         2 + a_params.size() * 4
    //       with :
    //         a_output[0] = chi2
    //         a_output[1] = number of degree of freedom

    //exa cmd : MINIMIZE, MINOS
  
    a_output.clear();

    func_fitter fcn(a_data,a_func);
    fitter minuit(0);
    minuit.SetFCN(function,&fcn);
    minuit.SetOut(&a_out);


   {double args[10];
    args[0] = -1; //shut up by default.
    int status;
    minuit.mnexcm("SET PRI",args,1,status);}

    unsigned int paramn = a_params.size();
    for(unsigned int index=0;index<paramn;index++) {
      int status;
      minuit.mnparm(index,
                    a_params[index].m_name.c_str(),
                    a_params[index].m_start,
                    a_params[index].m_step,
                    a_params[index].m_min,
                    a_params[index].m_max,
                    status);
    }

    std::vector<command>::const_iterator it;
    for(it=a_cmds.begin();it!=a_cmds.end();++it) {
      int status;
      minuit.mnexcm((*it).name(),(*it).args(),(*it).argn(),status);
      if(status>0) return false;
    }

    //in principle a_func should have the ending (fitted) parameters.

    // output :
    a_output.push_back(fcn.chi2());
    a_output.push_back(a_data.size()-a_params.size()); //ndf (num deg of freedom)
    for(unsigned int index=0;index<paramn;index++) {
      std::string s;
      double value,err;
      double bmin,bmax;
      int ierr;
      minuit.mnpout(index,s,value,err,bmin,bmax,ierr);
      a_output.push_back(value);
      a_output.push_back(err);
      a_output.push_back(bmin);
      a_output.push_back(bmax);
    }

    return true;  
  }
static bool inlib::f2cmn::func_fitter::function ( int &  aParamn,
double *  ,
double &  aValue,
double *  aParams,
int  ,
void *  aTag 
) [inline, static, protected]

Definition at line 7745 of file f2cmn.

                                                               {
    func_fitter& fcn = *((func_fitter*)aTag);
    return fcn.value(aParamn,aParams,aValue);
  }
bool inlib::f2cmn::func_fitter::value ( int  ,
double *  a_params,
double &  a_value 
) [inline]

Definition at line 7721 of file f2cmn.

                                                     {
    //{printf("debug : param number : %d\n",a_paramn);
    // for(unsigned int i=0;i<a_paramn;i++) {
    //   printf("debug :    %d %g\n",i,a_params[i]);
    //}}
    m_chi2 = 0;
    if(!m_func.set(a_params)) {a_value = 0;return false;}
    unsigned int npt = m_data.size();
    for(unsigned int ipt=0;ipt<npt;ipt++) {
      double value = m_func.value(m_data[ipt].m_coords);
      double chinew = (m_data[ipt].m_value - value)/m_data[ipt].m_error;
      m_chi2 += (chinew * chinew);
    }
    a_value = m_chi2;
    return true;
  }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines