00001
00002
00003
00004
00005
00006
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
00021 fNumCall++;
00022
00023
00024
00025
00026
00027
00028
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 }
00046
00047 }