26 MnApplication::MnApplication(
const FCNBase& fcn, 
const MnUserParameterState& state, 
const MnStrategy& stra, 
unsigned int nfcn) :
 
   27    fFCN(fcn), fState(state), fStrategy(stra), fNumCall(nfcn), fUseGrad(false)
 
   31 MnApplication::MnApplication(
const FCNGradientBase& fcn, 
const MnUserParameterState& state, 
const MnStrategy& stra, 
unsigned int nfcn) :
 
   32    fFCN(fcn), fState(state), fStrategy(stra), fNumCall(nfcn), fUseGrad(true)
 
   36 FunctionMinimum MnApplication::operator()(
unsigned int maxfcn, 
double toler) {
 
   39    assert(fState.IsValid());
 
   40    unsigned int npar = VariableParameters();
 
   42    if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
 
   44    const FCNBase * fcn = &(Fcnbase());
 
   47       const FCNGradientBase * gfcn = 
dynamic_cast<const FCNGradientBase *
>(fcn);
 
   50       FunctionMinimum min = Minimizer().Minimize( *gfcn, fState, fStrategy, maxfcn, toler);
 
   51       fNumCall += min.NFcn();
 
   52       fState = min.UserState();
 
   57       FunctionMinimum min = Minimizer().Minimize( *fcn, fState, fStrategy, maxfcn, toler);
 
   58       fNumCall += min.NFcn();
 
   59       fState = min.UserState();
 
   63       std::cout << 
"State resulting from Migrad. Total Function calls  " << fNumCall  << fState << std::endl;
 
   64       const std::vector<ROOT::Minuit2::MinimumState>& iterationStates =  min.States();
 
   65       std::cout << 
"Number of iterations " << iterationStates.size() << std::endl;
 
   66       for (
unsigned int i = 0; i <  iterationStates.size(); ++i) {
 
   68          const ROOT::Minuit2::MinimumState & st =  iterationStates[i];
 
   69          std::cout << 
"----------> Iteration " << i << std::endl;
 
   70          int pr = std::cout.precision(18);
 
   71          std::cout << 
"            FVAL = " << st.Fval()
 
   72                    << 
" Edm = " << st.Edm() << 
" Nfcn = " << st.NFcn() << std::endl;
 
   73          std::cout.precision(pr);
 
   74          std::cout << 
"            Error matrix change = " << st.Error().Dcovar()
 
   76          std::cout << 
"            Internal parameters : ";
 
   77          for (
int j = 0; j < st.size() ; ++j)
 
   78             std::cout << 
" p" << j << 
" = " << st.Vec()(j);
 
   79          std::cout << std::endl;
 
   92 const std::vector<MinuitParameter>& MnApplication::MinuitParameters()
 const {
 
   94    return fState.MinuitParameters();
 
   97 std::vector<double> MnApplication::Params()
 const {
return fState.Params();}
 
   98 std::vector<double> MnApplication::Errors()
 const {
return fState.Errors();}
 
  101 const MinuitParameter& MnApplication::Parameter(
unsigned int i)
 const {
 
  103    return fState.Parameter(i);
 
  107 void MnApplication::Add(
const char* name, 
double val, 
double err) {
 
  109    fState.Add(name, val, err);
 
  112 void MnApplication::Add(
const char* name, 
double val, 
double err, 
double low, 
double up) {
 
  114    fState.Add(name, val, err, low, up);
 
  117 void MnApplication::Add(
const char* name, 
double val) {
 
  119    fState.Add(name, val);
 
  123 void MnApplication::Fix(
unsigned int i) {fState.Fix(i);}
 
  124 void MnApplication::Release(
unsigned int i) {fState.Release(i);}
 
  125 void MnApplication::SetValue(
unsigned int i, 
double val) {
 
  127    fState.SetValue(i, val);
 
  129 void MnApplication::SetError(
unsigned int i, 
double val) {
 
  131    fState.SetError(i, val);
 
  133 void MnApplication::SetLimits(
unsigned int i, 
double low, 
double up) {
 
  135    fState.SetLimits(i, low, up);
 
  137 void MnApplication::RemoveLimits(
unsigned int i) {fState.RemoveLimits(i);}
 
  139 double MnApplication::Value(
unsigned int i)
 const {
return fState.Value(i);}
 
  140 double MnApplication::Error(
unsigned int i)
 const {
return fState.Error(i);}
 
  143 void MnApplication::Fix(
const char* i) {fState.Fix(i);}
 
  144 void MnApplication::Release(
const char* i) {fState.Release(i);}
 
  145 void MnApplication::SetValue(
const char* i, 
double val) {fState.SetValue(i, val);}
 
  146 void MnApplication::SetError(
const char* i, 
double val) {fState.SetError(i, val);}
 
  147 void MnApplication::SetLimits(
const char* i, 
double low, 
double up) { fState.SetLimits(i, low, up);}
 
  148 void MnApplication::RemoveLimits(
const char* i) {fState.RemoveLimits(i);}
 
  149 void MnApplication::SetPrecision(
double eps) {fState.SetPrecision(eps);}
 
  151 double MnApplication::Value(
const char* i)
 const {
return fState.Value(i);}
 
  152 double MnApplication::Error(
const char* i)
 const {
return fState.Error(i);}
 
  155 unsigned int MnApplication::Index(
const char* name)
 const {
 
  157    return fState.Index(name);
 
  160 const char* MnApplication::Name(
unsigned int i)
 const {
 
  162    return fState.Name(i);
 
  166 double MnApplication::Int2ext(
unsigned int i, 
double val)
 const {
 
  168    return fState.Int2ext(i, val);
 
  170 double MnApplication::Ext2int(
unsigned int e, 
double val)
 const {
 
  172    return fState.Ext2int(e, val);
 
  174 unsigned int MnApplication::IntOfExt(
unsigned int ext)
 const {
 
  176    return fState.IntOfExt(ext);
 
  178 unsigned int MnApplication::ExtOfInt(
unsigned int internal)
 const {
 
  180    return fState.ExtOfInt(
internal);
 
  182 unsigned int MnApplication::VariableParameters()
 const {
 
  184    return fState.VariableParameters();