ScanBuilder.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: ScanBuilder.cxx 23654 2008-05-06 07:30:34Z moneta $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #include "Minuit2/ScanBuilder.h"
00011 #include "Minuit2/MnParameterScan.h"
00012 #include "Minuit2/FunctionMinimum.h"
00013 #include "Minuit2/MinimumSeed.h"
00014 #include "Minuit2/MinimumState.h"
00015 #include "Minuit2/MnFcn.h"
00016 
00017 namespace ROOT {
00018 
00019    namespace Minuit2 {
00020 
00021 
00022 FunctionMinimum ScanBuilder::Minimum(const MnFcn& mfcn, const GradientCalculator&, const MinimumSeed& seed, const MnStrategy&, unsigned int, double) const {
00023    // find the function minimum performing a parameter scan (using MnParameterScan class)  
00024    // function gradient is not used
00025    MnAlgebraicVector x = seed.Parameters().Vec();
00026    MnUserParameterState upst(seed.State(), mfcn.Up(), seed.Trafo());
00027    MnParameterScan scan(mfcn.Fcn(), upst.Parameters(), seed.Fval());
00028    double amin = scan.Fval();
00029    unsigned int n = seed.Trafo().VariableParameters();
00030    MnAlgebraicVector dirin(n);
00031    for(unsigned int i = 0; i < n; i++) {
00032       unsigned int ext = seed.Trafo().ExtOfInt(i);
00033       scan(ext);
00034       if(scan.Fval() < amin) {
00035          amin = scan.Fval();
00036          x(i) = seed.Trafo().Ext2int(ext, scan.Parameters().Value(ext));
00037       }
00038       dirin(i) = sqrt(2.*mfcn.Up()*seed.Error().InvHessian()(i,i));
00039    }
00040 
00041    MinimumParameters mp(x, dirin, amin);
00042    MinimumState st(mp, 0., mfcn.NumOfCalls());
00043 
00044    return FunctionMinimum(seed, std::vector<MinimumState>(1, st), mfcn.Up());
00045 }
00046 
00047    }  // namespace Minuit2
00048 
00049 }  // namespace ROOT

Generated on Tue Jul 5 14:37:11 2011 for ROOT_528-00b_version by  doxygen 1.5.1