inlib
1.2.0
|
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) |
virtual inlib::f2cmn::func_fitter::~func_fitter | ( | ) | [inline, protected, virtual] |
virtual double inlib::f2cmn::func_fitter::chi2 | ( | ) | const [inline, virtual] |
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; }