|
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;
}
1.7.5.1