MnUserFcn.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: MnUserFcn.cxx 24400 2008-06-20 07:28:49Z 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/MnUserFcn.h"
00011 #include "Minuit2/FCNBase.h"
00012 #include "Minuit2/MnUserTransformation.h"
00013 
00014 namespace ROOT {
00015 
00016    namespace Minuit2 {
00017 
00018 
00019 double MnUserFcn::operator()(const MnAlgebraicVector& v) const {
00020    // call Fcn function transforming from a MnAlgebraicVector of internal values to a std::vector of external ones 
00021    fNumCall++;
00022 
00023    // calling fTransform() like here was not thread safe because it was using a cached vector
00024    //return Fcn()( fTransform(v) );
00025    // make a new thread-safe implementation creating a vector each time
00026    // a bit slower few% in stressFit and 10% in Rosenbrock function but it is negligible in big fits
00027 
00028    // get first initial values of parameter (in case some one is fixed) 
00029    std::vector<double> vpar(fTransform.InitialParValues().begin(), fTransform.InitialParValues().end()  );
00030 
00031    const std::vector<MinuitParameter>& parameters = fTransform.Parameters();
00032    unsigned int n = v.size(); 
00033    for (unsigned int i = 0; i < n; i++) {
00034       int ext = fTransform.ExtOfInt(i);
00035       if (parameters[ext].HasLimits()) {
00036          vpar[ext] = fTransform.Int2ext(i, v(i));
00037       } 
00038       else {
00039          vpar[ext] = v(i);
00040       }
00041    }
00042    return Fcn()(vpar); 
00043 }
00044 
00045    }  // namespace Minuit2
00046 
00047 }  // namespace ROOT

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