ROOT logo
// @(#)root/tmva $Id: MinuitWrapper.cxx 20882 2007-11-19 11:31:26Z rdm $ 
// Author: Peter Speckmayer

/**********************************************************************************
 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
 * Package: TMVA                                                                  *
 * Class  : MinuitWrapper                                                         *
 * Web    : http://tmva.sourceforge.net                                           *
 *                                                                                *
 * Description:                                                                   *
 *      Implementation                                                            *
 *                                                                                *
 * Authors (alphabetical):                                                        *
 *      Peter Speckmayer <peter.speckmayer@cern.ch> - CERN, Switzerland           *
 *                                                                                *
 * Copyright (c) 2005:                                                            *
 *      CERN, Switzerland                                                         * 
 *      MPI-K Heidelberg, Germany                                                 * 
 *                                                                                *
 * Redistribution and use in source and binary forms, with or without             *
 * modification, are permitted according to the terms listed in LICENSE           *
 * (http://tmva.sourceforge.net/LICENSE)                                          *
 **********************************************************************************/

//_______________________________________________________________________
//                                                                      
// Wrapper around MINUIT
//_______________________________________________________________________

#include "TMVA/MinuitWrapper.h"

ClassImp(TMVA::MinuitWrapper)

//_______________________________________________________________________
TMVA::MinuitWrapper::MinuitWrapper( IFitterTarget& target, Int_t maxpar )
   : TMinuit( maxpar ),
     fFitterTarget( target ),
     fNumPar( maxpar )
{
   // constructor
   for ( Int_t i=0; i< maxpar; i++ ) {
      fParameters.push_back(0.0);
   }
}

//_______________________________________________________________________
Int_t TMVA::MinuitWrapper::Eval(Int_t /*npar*/, Double_t*, Double_t& f, Double_t* par, Int_t)
{
   // std::vector<Double_t> parameters( npar );
   for (Int_t ipar=0; ipar<fNumPar; ipar++) fParameters[ipar] = par[ipar];
   
   f = fFitterTarget.EstimatorFunction( fParameters );
   return 0;
}

//______________________________________________________________________________
Int_t TMVA::MinuitWrapper::ExecuteCommand(const char *command, Double_t *args, Int_t nargs)
{
   // Execute a fitter command;
   //   command : command string
   //   args    : list of nargs command arguments

   Int_t ierr = 0;
   mnexcm(command,args,nargs,ierr);
   return ierr;
}

//______________________________________________________________________________
void TMVA::MinuitWrapper::Clear(Option_t *)
{
   // reset the fitter environment

   // reset the internal Minuit random generator to its initial state
   Double_t val = 3;
   Int_t inseed = 12345;
   mnrn15(val,inseed);
}

//______________________________________________________________________________
Int_t TMVA::MinuitWrapper::GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) 
{
   // return global fit parameters
   //   amin     : chisquare
   //   edm      : estimated distance to minimum
   //   errdef
   //   nvpar    : number of variable parameters
   //   nparx    : total number of parameters

   Int_t ierr = 0;
   mnstat(amin,edm,errdef,nvpar,nparx,ierr);
   return ierr;
}

//______________________________________________________________________________
Int_t TMVA::MinuitWrapper::GetErrors(Int_t ipar,Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc)
{
   // return current errors for a parameter
   //   ipar     : parameter number
   //   eplus    : upper error
   //   eminus   : lower error
   //   eparab   : parabolic error
   //   globcc   : global correlation coefficient

   Int_t ierr = 0;
   mnerrs(ipar, eplus,eminus,eparab,globcc);
   return ierr;
}

//______________________________________________________________________________
Int_t TMVA::MinuitWrapper::SetParameter(Int_t ipar,const char *parname,Double_t value,Double_t verr,Double_t vlow, Double_t vhigh)
{
   // set initial values for a parameter
   //   ipar     : parameter number
   //   parname  : parameter name
   //   value    : initial parameter value
   //   verr     : initial error for this parameter
   //   vlow     : lower value for the parameter
   //   vhigh    : upper value for the parameter

   //   if (fCovar)  {delete [] fCovar; fCovar = 0;}
   Int_t ierr = 0;
   mnparm(ipar,parname,value,verr,vlow,vhigh,ierr);
   return ierr;
}

//______________________________________________________________________________
TObject *TMVA::MinuitWrapper::Clone(char const* newname) const
{
   // produces a clone of this MinuitWrapper
   MinuitWrapper *named = (MinuitWrapper*)TNamed::Clone(newname);
   named->fFitterTarget = fFitterTarget;
   return 0;
}
 MinuitWrapper.cxx:1
 MinuitWrapper.cxx:2
 MinuitWrapper.cxx:3
 MinuitWrapper.cxx:4
 MinuitWrapper.cxx:5
 MinuitWrapper.cxx:6
 MinuitWrapper.cxx:7
 MinuitWrapper.cxx:8
 MinuitWrapper.cxx:9
 MinuitWrapper.cxx:10
 MinuitWrapper.cxx:11
 MinuitWrapper.cxx:12
 MinuitWrapper.cxx:13
 MinuitWrapper.cxx:14
 MinuitWrapper.cxx:15
 MinuitWrapper.cxx:16
 MinuitWrapper.cxx:17
 MinuitWrapper.cxx:18
 MinuitWrapper.cxx:19
 MinuitWrapper.cxx:20
 MinuitWrapper.cxx:21
 MinuitWrapper.cxx:22
 MinuitWrapper.cxx:23
 MinuitWrapper.cxx:24
 MinuitWrapper.cxx:25
 MinuitWrapper.cxx:26
 MinuitWrapper.cxx:27
 MinuitWrapper.cxx:28
 MinuitWrapper.cxx:29
 MinuitWrapper.cxx:30
 MinuitWrapper.cxx:31
 MinuitWrapper.cxx:32
 MinuitWrapper.cxx:33
 MinuitWrapper.cxx:34
 MinuitWrapper.cxx:35
 MinuitWrapper.cxx:36
 MinuitWrapper.cxx:37
 MinuitWrapper.cxx:38
 MinuitWrapper.cxx:39
 MinuitWrapper.cxx:40
 MinuitWrapper.cxx:41
 MinuitWrapper.cxx:42
 MinuitWrapper.cxx:43
 MinuitWrapper.cxx:44
 MinuitWrapper.cxx:45
 MinuitWrapper.cxx:46
 MinuitWrapper.cxx:47
 MinuitWrapper.cxx:48
 MinuitWrapper.cxx:49
 MinuitWrapper.cxx:50
 MinuitWrapper.cxx:51
 MinuitWrapper.cxx:52
 MinuitWrapper.cxx:53
 MinuitWrapper.cxx:54
 MinuitWrapper.cxx:55
 MinuitWrapper.cxx:56
 MinuitWrapper.cxx:57
 MinuitWrapper.cxx:58
 MinuitWrapper.cxx:59
 MinuitWrapper.cxx:60
 MinuitWrapper.cxx:61
 MinuitWrapper.cxx:62
 MinuitWrapper.cxx:63
 MinuitWrapper.cxx:64
 MinuitWrapper.cxx:65
 MinuitWrapper.cxx:66
 MinuitWrapper.cxx:67
 MinuitWrapper.cxx:68
 MinuitWrapper.cxx:69
 MinuitWrapper.cxx:70
 MinuitWrapper.cxx:71
 MinuitWrapper.cxx:72
 MinuitWrapper.cxx:73
 MinuitWrapper.cxx:74
 MinuitWrapper.cxx:75
 MinuitWrapper.cxx:76
 MinuitWrapper.cxx:77
 MinuitWrapper.cxx:78
 MinuitWrapper.cxx:79
 MinuitWrapper.cxx:80
 MinuitWrapper.cxx:81
 MinuitWrapper.cxx:82
 MinuitWrapper.cxx:83
 MinuitWrapper.cxx:84
 MinuitWrapper.cxx:85
 MinuitWrapper.cxx:86
 MinuitWrapper.cxx:87
 MinuitWrapper.cxx:88
 MinuitWrapper.cxx:89
 MinuitWrapper.cxx:90
 MinuitWrapper.cxx:91
 MinuitWrapper.cxx:92
 MinuitWrapper.cxx:93
 MinuitWrapper.cxx:94
 MinuitWrapper.cxx:95
 MinuitWrapper.cxx:96
 MinuitWrapper.cxx:97
 MinuitWrapper.cxx:98
 MinuitWrapper.cxx:99
 MinuitWrapper.cxx:100
 MinuitWrapper.cxx:101
 MinuitWrapper.cxx:102
 MinuitWrapper.cxx:103
 MinuitWrapper.cxx:104
 MinuitWrapper.cxx:105
 MinuitWrapper.cxx:106
 MinuitWrapper.cxx:107
 MinuitWrapper.cxx:108
 MinuitWrapper.cxx:109
 MinuitWrapper.cxx:110
 MinuitWrapper.cxx:111
 MinuitWrapper.cxx:112
 MinuitWrapper.cxx:113
 MinuitWrapper.cxx:114
 MinuitWrapper.cxx:115
 MinuitWrapper.cxx:116
 MinuitWrapper.cxx:117
 MinuitWrapper.cxx:118
 MinuitWrapper.cxx:119
 MinuitWrapper.cxx:120
 MinuitWrapper.cxx:121
 MinuitWrapper.cxx:122
 MinuitWrapper.cxx:123
 MinuitWrapper.cxx:124
 MinuitWrapper.cxx:125
 MinuitWrapper.cxx:126
 MinuitWrapper.cxx:127
 MinuitWrapper.cxx:128
 MinuitWrapper.cxx:129
 MinuitWrapper.cxx:130
 MinuitWrapper.cxx:131
 MinuitWrapper.cxx:132
 MinuitWrapper.cxx:133