00001 // @(#)root/tmva $Id: MinuitWrapper.cxx 20882 2007-11-19 11:31:26Z rdm $ 00002 // Author: Peter Speckmayer 00003 00004 /********************************************************************************** 00005 * Project: TMVA - a Root-integrated toolkit for multivariate data analysis * 00006 * Package: TMVA * 00007 * Class : MinuitWrapper * 00008 * Web : http://tmva.sourceforge.net * 00009 * * 00010 * Description: * 00011 * Implementation * 00012 * * 00013 * Authors (alphabetical): * 00014 * Peter Speckmayer <peter.speckmayer@cern.ch> - CERN, Switzerland * 00015 * * 00016 * Copyright (c) 2005: * 00017 * CERN, Switzerland * 00018 * MPI-K Heidelberg, Germany * 00019 * * 00020 * Redistribution and use in source and binary forms, with or without * 00021 * modification, are permitted according to the terms listed in LICENSE * 00022 * (http://tmva.sourceforge.net/LICENSE) * 00023 **********************************************************************************/ 00024 00025 //_______________________________________________________________________ 00026 // 00027 // Wrapper around MINUIT 00028 //_______________________________________________________________________ 00029 00030 #include "TMVA/MinuitWrapper.h" 00031 00032 ClassImp(TMVA::MinuitWrapper) 00033 00034 //_______________________________________________________________________ 00035 TMVA::MinuitWrapper::MinuitWrapper( IFitterTarget& target, Int_t maxpar ) 00036 : TMinuit( maxpar ), 00037 fFitterTarget( target ), 00038 fNumPar( maxpar ) 00039 { 00040 // constructor 00041 for ( Int_t i=0; i< maxpar; i++ ) { 00042 fParameters.push_back(0.0); 00043 } 00044 } 00045 00046 //_______________________________________________________________________ 00047 Int_t TMVA::MinuitWrapper::Eval(Int_t /*npar*/, Double_t*, Double_t& f, Double_t* par, Int_t) 00048 { 00049 // std::vector<Double_t> parameters( npar ); 00050 for (Int_t ipar=0; ipar<fNumPar; ipar++) fParameters[ipar] = par[ipar]; 00051 00052 f = fFitterTarget.EstimatorFunction( fParameters ); 00053 return 0; 00054 } 00055 00056 //______________________________________________________________________________ 00057 Int_t TMVA::MinuitWrapper::ExecuteCommand(const char *command, Double_t *args, Int_t nargs) 00058 { 00059 // Execute a fitter command; 00060 // command : command string 00061 // args : list of nargs command arguments 00062 00063 Int_t ierr = 0; 00064 mnexcm(command,args,nargs,ierr); 00065 return ierr; 00066 } 00067 00068 //______________________________________________________________________________ 00069 void TMVA::MinuitWrapper::Clear(Option_t *) 00070 { 00071 // reset the fitter environment 00072 00073 // reset the internal Minuit random generator to its initial state 00074 Double_t val = 3; 00075 Int_t inseed = 12345; 00076 mnrn15(val,inseed); 00077 } 00078 00079 //______________________________________________________________________________ 00080 Int_t TMVA::MinuitWrapper::GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) 00081 { 00082 // return global fit parameters 00083 // amin : chisquare 00084 // edm : estimated distance to minimum 00085 // errdef 00086 // nvpar : number of variable parameters 00087 // nparx : total number of parameters 00088 00089 Int_t ierr = 0; 00090 mnstat(amin,edm,errdef,nvpar,nparx,ierr); 00091 return ierr; 00092 } 00093 00094 //______________________________________________________________________________ 00095 Int_t TMVA::MinuitWrapper::GetErrors(Int_t ipar,Double_t &eplus, Double_t &eminus, Double_t &eparab, Double_t &globcc) 00096 { 00097 // return current errors for a parameter 00098 // ipar : parameter number 00099 // eplus : upper error 00100 // eminus : lower error 00101 // eparab : parabolic error 00102 // globcc : global correlation coefficient 00103 00104 Int_t ierr = 0; 00105 mnerrs(ipar, eplus,eminus,eparab,globcc); 00106 return ierr; 00107 } 00108 00109 //______________________________________________________________________________ 00110 Int_t TMVA::MinuitWrapper::SetParameter(Int_t ipar,const char *parname,Double_t value,Double_t verr,Double_t vlow, Double_t vhigh) 00111 { 00112 // set initial values for a parameter 00113 // ipar : parameter number 00114 // parname : parameter name 00115 // value : initial parameter value 00116 // verr : initial error for this parameter 00117 // vlow : lower value for the parameter 00118 // vhigh : upper value for the parameter 00119 00120 // if (fCovar) {delete [] fCovar; fCovar = 0;} 00121 Int_t ierr = 0; 00122 mnparm(ipar,parname,value,verr,vlow,vhigh,ierr); 00123 return ierr; 00124 } 00125 00126 //______________________________________________________________________________ 00127 TObject *TMVA::MinuitWrapper::Clone(char const* newname) const 00128 { 00129 // produces a clone of this MinuitWrapper 00130 MinuitWrapper *named = (MinuitWrapper*)TNamed::Clone(newname); 00131 named->fFitterTarget = fFitterTarget; 00132 return 0; 00133 }