32 FunctionGradient FumiliGradientCalculator::operator()(
const MinimumParameters& par)
 const {
 
   37    int nvar = par.Vec().size();
 
   38    std::vector<double> extParam = fTransformation(  par.Vec() );
 
   50    FumiliFCNBase & fcn = 
const_cast<FumiliFCNBase &
>(fFcn);
 
   52    fcn.EvaluateAll(extParam);
 
   55    MnAlgebraicVector v(nvar);
 
   56    MnAlgebraicSymMatrix h(nvar);
 
   59    const std::vector<double> & fcn_gradient = fFcn.Gradient();
 
   60    assert( fcn_gradient.size() == extParam.size() );
 
   88    std::vector<double> deriv(nvar);
 
   89    std::vector<unsigned int> extIndex(nvar);
 
   90    for (
int i = 0; i < nvar; ++i) {
 
   91       extIndex[i] = fTransformation.ExtOfInt(i);
 
   93       if ( fTransformation.Parameter(extIndex[i]).HasLimits())
 
   94          deriv[i] =  fTransformation.DInt2Ext( i, par.Vec()(i) ) ;
 
   96       v(i) = fcn_gradient[extIndex[i]]*deriv[i];
 
   98       for (
int j = 0; j <= i; ++j) {
 
   99          h(i,j) = deriv[i]*deriv[j]*fFcn.Hessian(extIndex[i],extIndex[j]);
 
  107    Numerical2PGradientCalculator gc(MnUserFcn(fFcn,fTransformation), fTransformation, MnStrategy(1));
 
  108    FunctionGradient g2 = gc(par);
 
  110    std::cout << 
"Fumili Gradient " << v << std::endl;
 
  111    std::cout << 
"Minuit Gradient " << g2.Vec() << std::endl;
 
  116    return FunctionGradient(v);
 
  119 FunctionGradient FumiliGradientCalculator::operator()(
const MinimumParameters& par,
 
  120                                                       const FunctionGradient&)
 const 
  124    return this->operator()(par);