Example of using Python functions as inputs to numerical algorithms using the ROOT Functor class. 
´␕ 
Use Functor1D for wrapping one-dimensional function and compute integral of f(x) = x^2-1
integral-1D value =  5.999999999999999
 
 
Use Functor for wrapping a multi-dimensional function, the Rosenbrock Function r(x,y) and find its minimum
****************************************
Minimizer is Minuit2 / Migrad
MinFCN                    =    1.687e-08
NDf                       =            0
Edm                       =  1.68896e-08
NCalls                    =          146
Par_0                     =     0.999952   +/-   1.00372     
Par_1                     =     0.999892   +/-   2.00986     
 
 
Use GradFunctor1D for making a function object implementing f(x) and f'(x)
Found root value x0 : f(x0) = 0  :   1.0
 
 
Use GradFunctor for making a function object implementing f(x,y) and df(x,y)/dx and df(x,y)/dy
****************************************
Minimizer is Minuit2 / Migrad
MinFCN                    =  2.72222e-08
NDf                       =            0
Edm                       =  2.72448e-08
NCalls                    =           76
Par_0                     =     0.999954   +/-   1.00444     
Par_1                     =     0.999892   +/-   2.01131     
   
import ROOT
import array
try:
    import numpy as np
except:
    print("Failed to import numpy.")
 
 
   return x*x -1
 
 
 
print("Use Functor1D for wrapping one-dimensional function and compute integral of f(x) = x^2-1")
 
 
print("integral-1D value = ", value)
expValue = 6
   print("Error computing integral - computed value - different than expected, diff = ", value - expValue)
   
 
print("\n\nUse Functor for wrapping a multi-dimensional function, the Rosenbrock Function r(x,y) and find its minimum")
 
  x = xx[0]
  y = xx[1]
  tmp1 = y-x*x
  tmp2 = 1-x
  return 100*tmp1*tmp1+tmp2*tmp2
 
 
 
 
initialParams = 
np.array([0.,0.], dtype=
'd')
 
   print("Error minimizing Rosenbrock function ")
 
 
print("\n\nUse GradFunctor1D for making a function object implementing f(x) and f'(x)")
 
 
 
if (ret < 0) :
   print("ROOT has not Mathmore")
 
else :
   print("Found root value x0 : f(x0) = 0  :  ", value)
   if (value != 1):
      print("Error finding a ROOT of function f(x)=x^2-1")
 
 
print("\n\nUse GradFunctor for making a function object implementing f(x,y) and df(x,y)/dx and df(x,y)/dy")
 
  x = xx[0]
  y = xx[1]
  
  if (icoord == 0) :
    return 2*(200*x*x*x-200*x*y+x-1)
  else : 
    return 200 * (y - x * x)
    
 
   print("Error minimizing Rosenbrock function ")
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
void Print(Option_t *option="") const override
 
Fitter class, entry point for performing all type of fits.
 
Functor1D class for one-dimensional functions.
 
Documentation for class Functor class.
 
GradFunctor1D class for one-dimensional gradient functions.
 
GradFunctor class for Multidimensional gradient functions.
 
User Class for performing numerical integration of a function in one dimension.
 
User Class to find the Root of one dimensional functions.
 
- Author
 - Lorenzo Moneta 
 
Definition in file exampleFunction.py.