MinuitWrapper.cxx

Go to the documentation of this file.
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 }

Generated on Tue Jul 5 15:25:04 2011 for ROOT_528-00b_version by  doxygen 1.5.1