29#include <unordered_map> 
   34using std::map, std::pair, std::make_pair, std::list, std::max, std::string;
 
   37#pragma optimize("",off) 
  264static std::unordered_map<std::string,  void *> 
gClingFunctions = std::unordered_map<std::string,  void * >();
 
  271   for (
int i = 0; i < 
nobjects; ++i) {
 
 
  289   const static std::set<char> 
ops {
'+',
'^',
'-',
'/',
'*',
'<',
'>',
'|',
'&',
'!',
'=',
'?',
'%'};
 
 
  297   char brackets[] = { 
')',
'(',
'{',
'}'};
 
 
  321   if ( (formula[i] == 
'e' || formula[i] == 
'E')  &&  (i > 0 && i <  formula.
Length()-1) )  {
 
  323      if ( (
isdigit(formula[i-1]) || formula[i-1] == 
'.') && ( 
isdigit(formula[i+1]) || formula[i+1] == 
'+' || formula[i+1] == 
'-' ) )
 
 
  333   if ( (formula[i] == 
'x' || formula[i] == 
'X')  &&  (i > 0 && i <  formula.
Length()-1) && formula[i-1] == 
'0')  {
 
  336      static char hex_values[12] = { 
'a',
'A', 
'b',
'B',
'c',
'C',
'd',
'D',
'e',
'E',
'f',
'F'};
 
 
  356   if (pos == 0 || pos == formula.
Length()-1) 
return false;
 
  357   for (
int i = pos-1; i >=0; i--) {
 
  358      if (formula[i] == 
']' ) 
return false;
 
  359      if (formula[i] == 
'[' ) {
 
  367   for (
int i = pos+1; i < formula.
Length(); i++) {
 
  368      if (formula[i] == 
']' ) 
return true;
 
 
  409   for (
int i = 0; i < formula.
Length(); i++) {
 
  412      if (
isalpha(formula[i]) || formula[i] == 
'{' || formula[i] == 
'[') {
 
  416                                       || (formula[i] == 
'{' && formula[
j] == 
'}'));
 
  428         } 
else if (
isalpha(formula[i])) {
 
  431            i += 
name.Length() - 1;
 
 
  458   for (
auto const & 
specialName : {
"x",
"y",
"z",
"t"}){
 
 
  472      gROOT->GetListOfFunctions()->Remove(
this);
 
 
  484   fClingInput(formula),fFormula(formula)
 
  493#ifndef R__HAS_VECCORE 
  514               gROOT->GetListOfFunctions()->Remove(old);
 
  516               Error(
"TFormula", 
"The name %s is reserved as a TFormula variable name.\n", 
name);
 
  518               gROOT->GetListOfFunctions()->Add(
this);
 
 
  530   fClingInput(formula),fFormula(formula)
 
  543   for (
int i = 0; i < 
npar; ++i) {
 
  562            gROOT->GetListOfFunctions()->Remove(old);
 
  564            Error(
"TFormula",
"The name %s is reserved as a TFormula variable name.\n",
name);
 
  566            gROOT->GetListOfFunctions()->Add(
this);
 
  571      Error(
"TFormula",
"Syntax error in building the lambda expression %s", formula );
 
 
  576   TNamed(formula.GetName(),formula.GetTitle())
 
  578   formula.TFormula::Copy(*
this);
 
  584         gROOT->GetListOfFunctions()->Remove(old);
 
  587         Error(
"TFormula",
"The name %s is reserved as a TFormula variable name.\n",formula.
GetName());
 
  589         gROOT->GetListOfFunctions()->Add(
this);
 
 
  600      rhs.TFormula::Copy(*
this);
 
 
  658   if (formula.
IsNull() ) 
return -1;
 
  670      return (
ret) ? 0 : 1;
 
  680   return (
ret) ? 0 : 1;
 
 
  709      for (
int i = 0; i < 
nLinParts; ++i) 
delete fnew.fLinearParts[i];
 
  710      fnew.fLinearParts.clear();
 
  739      bool ret = 
fnew.InitLambdaExpression(
fnew.fFormula);
 
  742         fnew.fReadyToExecute = 
true;
 
  745         Error(
"TFormula",
"Syntax error in building the lambda expression %s", 
fFormula.
Data() );
 
  746         fnew.fReadyToExecute = 
false;
 
  753   fnew.fMethod.reset(
m);
 
 
  798static std::unique_ptr<TMethodCall>
 
  801   std::unique_ptr<TMethodCall>
 
  802       Method = std::make_unique<TMethodCall>();
 
  827   if (!Method->IsValid()) {
 
  828      Error(
"prepareMethod",
 
  829            "Can't compile function %s prototype with arguments %s", 
FuncName,
 
 
  838   if (!
method) 
return nullptr;
 
  842      Error(
"prepareFuncPtr", 
"Callfunc retuned from Cling is not valid");
 
  849      Error(
"prepareFuncPtr", 
"Compiled function pointer is null");
 
 
  924      { {
"sin",
"TMath::Sin" },
 
  925        {
"cos",
"TMath::Cos" }, {
"exp",
"TMath::Exp"}, {
"log",
"TMath::Log"}, {
"log10",
"TMath::Log10"},
 
  926        {
"tan",
"TMath::Tan"}, {
"sinh",
"TMath::SinH"}, {
"cosh",
"TMath::CosH"},
 
  927        {
"tanh",
"TMath::TanH"}, {
"asin",
"TMath::ASin"}, {
"acos",
"TMath::ACos"},
 
  928        {
"atan",
"TMath::ATan"}, {
"atan2",
"TMath::ATan2"}, {
"sqrt",
"TMath::Sqrt"},
 
  929        {
"ceil",
"TMath::Ceil"}, {
"floor",
"TMath::Floor"}, {
"pow",
"TMath::Power"},
 
  930        {
"binomial",
"TMath::Binomial"},{
"abs",
"TMath::Abs"},
 
  931        {
"min",
"TMath::Min"},{
"max",
"TMath::Max"},{
"sign",
"TMath::Sign" },
 
  936   for (
int i = 0; i < 9; ++i)
 
  939   for (
const auto &var : 
defvars) {
 
  940      int pos = 
fVars.size();
 
 
  973      { {
"sin",
"vecCore::math::Sin" },
 
  974        {
"cos",
"vecCore::math::Cos" }, {
"exp",
"vecCore::math::Exp"}, {
"log",
"vecCore::math::Log"}, {
"log10",
"vecCore::math::Log10"},
 
  975        {
"tan",
"vecCore::math::Tan"},
 
  977        {
"asin",
"vecCore::math::ASin"},
 
  978        {
"acos",
"TMath::Pi()/2-vecCore::math::ASin"},
 
  979        {
"atan",
"vecCore::math::ATan"},
 
  980        {
"atan2",
"vecCore::math::ATan2"}, {
"sqrt",
"vecCore::math::Sqrt"},
 
  981        {
"ceil",
"vecCore::math::Ceil"}, {
"floor",
"vecCore::math::Floor"}, {
"pow",
"vecCore::math::Pow"},
 
  982        {
"cbrt",
"vecCore::math::Cbrt"},{
"abs",
"vecCore::math::Abs"},
 
  983        {
"min",
"vecCore::math::Min"},{
"max",
"vecCore::math::Max"},{
"sign",
"vecCore::math::Sign" }
 
 
 1012      Int_t degree, counter;
 
 1043         variable = formula(tmp + 1, 
polPos - (tmp + 1));
 
 1045      Int_t param = counter + 1;
 
 1047      while (tmp <= degree) {
 
 1070         Error(
"HandlePolN", 
"Error handling polynomial function - expression is %s - trying to replace %s with %s ",
 
 1074      if (formula == pattern) {
 
 
 1125   formula.
ReplaceAll(
"xylandau",
"landau[x,y]");
 
 1179         std::vector<TString> variables;
 
 1189            variables.resize(dim);
 
 1197            dim = 
varList.CountChar(
',') + 1;
 
 1198            variables.resize(dim);
 
 1221               Error(
"PreProcessFormula", 
"Dimension of function %s is detected to be of dimension %d and is not " 
 1222                                          "compatible with existing pre-defined function which has dim %d",
 
 1259            Error(
"PreprocessFormula", 
"%d dimension function %s has no normalized form.", it->first.second,
 
 1263         for (
int i = 0; i < 
body.Length(); ++i) {
 
 1264            if (
body[i] == 
'{') {
 
 1268               TString variable = variables[num];
 
 1272               i += variable.
Length() - 1; 
 
 1273            } 
else if (
body[i] == 
'[') {
 
 1276               while (tmp < 
body.Length() && 
body[tmp] != 
']') {
 
 
 1332         Error(
"HandleParamRanges", 
"End parameter (%d) <= start parameter (%d) in parameter range", 
endCnt, 
startCnt);
 
 
 1356   std::map<std::pair<TString, Int_t>, std::pair<TString, TString>> 
parFunctions;
 
 1364      if (formula[i] == 
'[') {
 
 1365         while (formula[i] != 
']')
 
 1370      if (formula[i] == 
'\"') {
 
 1373         while (formula[i] != 
'\"');
 
 1403         for (k = 
j + 1; 
depth >= 1 && k < formula.
Length(); k++) {
 
 1404            if (formula[k] == 
',' && 
depth == 1) {
 
 1407            } 
else if (formula[k] == 
'(')
 
 1409            else if (formula[k] == 
')')
 
 1423            TF1 *
f1 = 
dynamic_cast<TF1 *
>(obj);
 
 1438            ndim = 
f->GetNdim();
 
 1439            npar = 
f->GetNpar();
 
 1468                     Error(
"HandleFunctionArguments", 
"Square brackets not matching in formula %s",
 
 1483            Error(
"HandleFunctionArguments", 
"Number of dimensions %d greater than 4. Cannot parse formula.", ndim);
 
 1548                     Warning(
"HandleFunctionArguments",
 
 1549                             "Argument %d is not a parameter. Cannot assume variables are implicit.", 
argNr);
 
 1556                     for (
int dim = 0; dim < ndim; dim++) {
 
 1616               Warning(
"HandleFunctionArguments", 
"Unable to make replacement. Number of parameters doesn't work : " 
 1617                                                  "%d arguments, %d dimensions, %d parameters",
 
 
 1644      if (formula[temp] == 
')') {
 
 1647         while (
depth != 0 && temp > 0) {
 
 1648            if (formula[temp] == 
')')
 
 1650            if (formula[temp] == 
'(')
 
 1673      if (temp >= formula.
Length()) {
 
 1674         Error(
"HandleExponentiation", 
"Invalid position of operator ^");
 
 1677         if (formula[temp] == 
'(') {
 
 1681               if (formula[temp] == 
')')
 
 1683               if (formula[temp] == 
'(')
 
 1690            if (formula[temp] == 
'-' || formula[temp] == 
'+')
 
 1702               if (temp < formula.
Length() && formula[temp] == 
'(')
 
 1704               if (temp < formula.
Length() && formula[temp] == 
')') {
 
 
 1737   if(formula.
Length() == 0) 
return;
 
 1739   if(terms.size() <= 1) 
return; 
 
 1754      auto termName = std::string(
"__linear") + std::to_string(
iTerm+1);
 
 1756      std::stringstream 
ss;
 
 
 1843      if (formula[i] == 
'[') {
 
 1847         while (i < formula.
Length() && formula[i] != 
']') {
 
 1848            param.
Append(formula[i++]);
 
 1859               for (
int idx = 0; idx <= 
paramIndex; ++idx) {
 
 1889      if (formula[i] == 
'\"') {
 
 1893         } 
while (formula[i] != 
'\"');
 
 1919            if (formula[i] == 
':' && ((i + 1) < formula.
Length())) {
 
 1920               if (formula[i + 1] == 
':') {
 
 1929            name.Append(formula[i++]);
 
 1932         if (formula[i] == 
'(') {
 
 1934            if (formula[i] == 
')') {
 
 1942               switch (formula[i]) {
 
 1943               case '(': 
depth++; 
break;
 
 1944               case ')': 
depth--; 
break;
 
 1952                  body.Append(formula[i++]);
 
 1976               TF1 *
f1 = 
dynamic_cast<TF1 *
>(obj);
 
 
 2088      if (
fun.IsFuncCall()) {
 
 2106               if (
i2 < formula.
Length() && formula[
i2] != 
'(') {
 
 2120#ifdef TFORMULA_CHECK_FUNCTIONS 
 2122         if (
fun.fName.Contains(
"::")) 
 
 2125            std::string 
name(
fun.fName.Data());
 
 2139                   (
fun.GetNargs() <= 
p->GetNargs() && 
fun.GetNargs() >= 
p->GetNargs() - 
p->GetNargsOpt())) {
 
 2153            if (
f && 
fun.GetNargs() <= 
f->GetNargs() && 
fun.GetNargs() >= 
f->GetNargs() - 
f->GetNargsOpt()) {
 
 2161               Info(
"TFormula", 
"Could not find %s function with %d argument(s)", 
fun.GetName(), 
fun.GetNargs());
 
 2184         map<TString, TFormulaVariable>::iterator 
varsIt = 
fVars.find(
fun.GetName());
 
 2194               int varDim = (*varsIt).second.fArrayPos; 
 
 2200                     if (
v.second.fArrayPos < 
varDim && !
v.second.fFound) {
 
 2202                        v.second.fFound = 
true;
 
 2384      for (list<TFormulaFunction>::iterator it = 
fFuncs.begin(); it != 
fFuncs.end(); ++it) {
 
 2386         if (!it->fFound && !it->IsFuncCall()) {
 
 2388            if (it->GetNargs() == 0)
 
 2389               Error(
"ProcessFormula", 
"\"%s\" has not been matched in the formula expression", it->GetName());
 
 2391               Error(
"ProcessFormula", 
"Could not find %s function with %d argument(s)", it->GetName(), it->GetNargs());
 
 2405         if (!
itvar->second.fFound) {
 
 
 2421      make_pair(make_pair(
"gaus", 1), make_pair(
"[0]*exp(-0.5*(({V0}-[1])/[2])*(({V0}-[1])/[2]))",
 
 2422                                                "[0]*exp(-0.5*(({V0}-[1])/[2])*(({V0}-[1])/[2]))/(sqrt(2*pi)*[2])")));
 
 2423   functions.insert(make_pair(make_pair(
"landau", 1), make_pair(
"[0]*TMath::Landau({V0},[1],[2],false)",
 
 2424                                                                "[0]*TMath::Landau({V0},[1],[2],true)")));
 
 2425   functions.insert(make_pair(make_pair(
"expo", 1), make_pair(
"exp([0]+[1]*{V0})", 
"")));
 
 2427      make_pair(make_pair(
"crystalball", 1), make_pair(
"[0]*ROOT::Math::crystalball_function({V0},[3],[4],[2],[1])",
 
 2428                                                       "[0]*ROOT::Math::crystalball_pdf({V0},[3],[4],[2],[1])")));
 
 2430      make_pair(make_pair(
"breitwigner", 1), make_pair(
"[0]*ROOT::Math::breitwigner_pdf({V0},[2],[1])",
 
 2431                                                       "[0]*ROOT::Math::breitwigner_pdf({V0},[2],[4],[1])")));
 
 2433   functions.insert(make_pair(make_pair(
"cheb0", 1), make_pair(
"ROOT::Math::Chebyshev0({V0},[0])", 
"")));
 
 2434   functions.insert(make_pair(make_pair(
"cheb1", 1), make_pair(
"ROOT::Math::Chebyshev1({V0},[0],[1])", 
"")));
 
 2435   functions.insert(make_pair(make_pair(
"cheb2", 1), make_pair(
"ROOT::Math::Chebyshev2({V0},[0],[1],[2])", 
"")));
 
 2436   functions.insert(make_pair(make_pair(
"cheb3", 1), make_pair(
"ROOT::Math::Chebyshev3({V0},[0],[1],[2],[3])", 
"")));
 
 2438      make_pair(make_pair(
"cheb4", 1), make_pair(
"ROOT::Math::Chebyshev4({V0},[0],[1],[2],[3],[4])", 
"")));
 
 2440      make_pair(make_pair(
"cheb5", 1), make_pair(
"ROOT::Math::Chebyshev5({V0},[0],[1],[2],[3],[4],[5])", 
"")));
 
 2442      make_pair(make_pair(
"cheb6", 1), make_pair(
"ROOT::Math::Chebyshev6({V0},[0],[1],[2],[3],[4],[5],[6])", 
"")));
 
 2444      make_pair(make_pair(
"cheb7", 1), make_pair(
"ROOT::Math::Chebyshev7({V0},[0],[1],[2],[3],[4],[5],[6],[7])", 
"")));
 
 2445   functions.insert(make_pair(make_pair(
"cheb8", 1),
 
 2446                              make_pair(
"ROOT::Math::Chebyshev8({V0},[0],[1],[2],[3],[4],[5],[6],[7],[8])", 
"")));
 
 2447   functions.insert(make_pair(make_pair(
"cheb9", 1),
 
 2448                              make_pair(
"ROOT::Math::Chebyshev9({V0},[0],[1],[2],[3],[4],[5],[6],[7],[8],[9])", 
"")));
 
 2450      make_pair(make_pair(
"cheb10", 1),
 
 2451                make_pair(
"ROOT::Math::Chebyshev10({V0},[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10])", 
"")));
 
 2454      make_pair(make_pair(
"gaus", 2), make_pair(
"[0]*exp(-0.5*(({V0}-[1])/[2])^2 - 0.5*(({V1}-[3])/[4])^2)", 
"")));
 
 2456      make_pair(make_pair(
"landau", 2),
 
 2457                make_pair(
"[0]*TMath::Landau({V0},[1],[2],false)*TMath::Landau({V1},[3],[4],false)", 
"")));
 
 2458   functions.insert(make_pair(make_pair(
"expo", 2), make_pair(
"exp([0]+[1]*{V0})", 
"exp([0]+[1]*{V0}+[2]*{V1})")));
 
 2461      make_pair(make_pair(
"gaus", 3), make_pair(
"[0]*exp(-0.5*(({V0}-[1])/[2])^2 - 0.5*(({V1}-[3])/[4])^2 - 0.5*(({V2}-[5])/[6])^2)", 
"")));
 
 2464      make_pair(make_pair(
"bigaus", 2), make_pair(
"[0]*ROOT::Math::bigaussian_pdf({V0},{V1},[2],[4],[5],[1],[3])",
 
 2465                                                  "[0]*ROOT::Math::bigaussian_pdf({V0},{V1},[2],[4],[5],[1],[3])")));
 
 
 2558         Error(
"GetLinearPart",
"Formula %s has only %d linear parts - requested %d",
GetName(),
n,i);
 
 
 2618            if (
fFuncs.size() > 100) {
 
 
 2643      Error(
"SetName", 
"The name \'%s\' is reserved as a TFormula variable name.\n" 
 2644                       "\tThis function will not be renamed.",
 
 
 2675         fVars[
v.first].fValue = 
v.second;
 
 2678         Error(
"SetVariables", 
"Variable %s is not defined.", 
v.first.Data());
 
 
 2690      Error(
"GetVariable", 
"Variable %s is not defined.", 
name);
 
 2693   return nameIt->second.fValue;
 
 
 2703      Error(
"GetVarNumber", 
"Variable %s is not defined.", 
name);
 
 2706   return nameIt->second.fArrayPos;
 
 
 2717   for ( 
auto & 
v : 
fVars) {
 
 2718      if (
v.second.fArrayPos == 
ivar) 
return v.first;
 
 2720   Error(
"GetVarName",
"Variable with index %d not found !!",
ivar);
 
 
 2731      Error(
"SetVariable", 
"Variable %s is not defined.", 
name.Data());
 
 
 2789               Warning(
"inserting parameter %s at pos %d when vector size is  %d \n", 
name.Data(), pos,
 
 2799         for (
auto it = 
ret.first; it != 
fParams.end(); ++it) {
 
 2809      if (processFormula) {
 
 
 2837      Error(
"GetParameter",
"Parameter %s is not defined.",
name);
 
 
 2852   Error(
"GetParameter",
"wrong index used - use GetParameter(name)");
 
 
 2865      if (
p.second == ipar) 
return p.first.Data();
 
 2867   Error(
"GetParName",
"Parameter with index %d not found !!",ipar);
 
 
 2900      Error(
"SetParameter", 
"Parameter %s is not defined.", 
name.Data());
 
 2907   for (map<TString, TFormulaVariable>::iterator it = 
fParams.begin(); it != 
fParams.end(); ++it) {
 
 2908      if (!it->second.fFound) {
 
 
 2931         Error(
"SetParameters", 
"Parameter %s is not defined", 
p.first.Data());
 
 2939   for (map<TString, TFormulaVariable>::iterator it = 
fParams.begin(); it != 
fParams.end(); ++it) {
 
 2940      if (!it->second.fFound) {
 
 2994      Error(
"SetParName",
"Wrong Parameter index %d ",ipar);
 
 3000      if (it.second  == ipar) {
 
 3008      Error(
"SetParName",
"Parameter %d is not existing.",ipar);
 
 
 3021   if (!formula.
IsNull() ) {
 
 3023      for(list<TFormulaFunction>::iterator it = 
fFuncs.begin(); it != 
fFuncs.end(); ++it)
 
 3025         if (
oldName == it->GetName()) {
 
 3032         Error(
"SetParName", 
"Parameter %s is not defined.", 
oldName.Data());
 
 3037      newName.ReplaceAll(
" ", 
"\\s");
 
 
 3048#ifdef R__HAS_VECCORE 
 3050      Info(
"SetVectorized",
"Cannot vectorized a function of zero dimension");
 
 3055         Error(
"SetVectorized", 
"Cannot set vectorized to %d -- Formula is missing", 
vectorized);
 
 3073      Warning(
"SetVectorized", 
"Cannot set vectorized -- try building with option -Dbuiltin_veccore=On");
 
 
 3083#ifdef R__HAS_VECCORE 
 3087      return vecCore::Get( 
ret, 0 );
 
 3094      Info(
"EvalPar", 
"Function is vectorized - converting Double_t into ROOT::Double_v and back");
 
 3098      std::array<ROOT::Double_v, maxDim> xvec;
 
 3099      for (
int i = 0; i < 
fNdim; i++)
 
 3103      return vecCore::Get(
ans, 0);
 
 3106   std::vector<ROOT::Double_v> xvec(
fNdim);
 
 3107   for (
int i = 0; i < 
fNdim; i++)
 
 3111   return  vecCore::Get(
ans, 0);
 
 3116   Error(
"EvalPar", 
"Formula is vectorized (even though VECCORE is disabled!)");
 
 
 3124   return gInterpreter->GetFunction(
nullptr, Name.c_str());
 
 
 3130      gInterpreter->Declare(
"#include <Math/CladDerivator.h>\n#pragma clad OFF");
 
 
 3140       "#pragma clad ON\n" +
 
 
 3153   std::unique_ptr<TMethodCall>
 
 
 3176      (*FuncPtr)(
nullptr, 2, args,  
nullptr); 
 
 3187      (*FuncPtr)(
nullptr, 3, args, 
nullptr); 
 
 
 3208          (
"clad::gradient(" + std::string(
fClingName.
Data()) + 
", \"p\");");
 
 
 3228      Error(
"GradientPar", 
"Could not initialize the formula!");
 
 3233      Error(
"GradientPar", 
"Could not generate a gradient for the formula %s!",
 
 3240              "The size of gradient result is %zu but %d is required. Resizing.",
 
 
 3272      std::string 
indexes = (
fNpar - 1 == 0) ? 
"0" : std::string(
"0:")
 
 3273          + std::to_string(
fNpar - 1);
 
 
 3292      Error(
"HessianPar", 
"Could not initialize the formula!");
 
 3297      Error(
"HessianPar", 
"Could not generate a hessian for the formula %s!",
 
 3304              "The size of hessian result is %zu but %d is required. Resizing.",
 
 
 3318#ifdef R__HAS_VECCORE 
 3328      return DoEvalVec(
x, params);
 
 3331      return DoEval(
nullptr, params); 
 
 3336      Info(
"EvalPar", 
"Function is not vectorized - converting ROOT::Double_v into Double_t and back");
 
 3338   const int vecSize = vecCore::VectorSize<ROOT::Double_v>();
 
 3341   for (
int i = 0; i < 
vecSize; i++)
 
 3346   for (
int i = 0; i < 
vecSize; i++)
 
 3363      Error(
"Eval", 
"Formula is invalid and not ready to execute ");
 
 3364      for (
auto it = 
fFuncs.begin(); it != 
fFuncs.end(); ++it) {
 
 3367            printf(
"%s is unknown.\n", 
fun.GetName());
 
 3383         Error(
"DoEval", 
"Formula has error and  it is not properly initialized ");
 
 3392      double * 
v = 
const_cast<double*
>(
x);
 
 3393      double * 
p = (params) ? 
const_cast<double*
>(params) : 
const_cast<double*
>(
fClingParameters.data());
 
 3400   double * vars = (
x) ? 
const_cast<double*
>(
x) : 
const_cast<double*
>(
fClingVariables.data());
 
 3403      (*fFuncPtr)(
nullptr, 1, args, &
result);
 
 3405      double *pars = (params) ? 
const_cast<double *
>(params) : 
const_cast<double *
>(
fClingParameters.data());
 
 3407      (*fFuncPtr)(
nullptr, 2, args, &
result);
 
 
 3414#ifdef R__HAS_VECCORE 
 3418      Error(
"Eval", 
"Formula is invalid and not ready to execute ");
 
 3419      for (
auto it = 
fFuncs.begin(); it != 
fFuncs.end(); ++it) {
 
 3422            printf(
"%s is unknown.\n", 
fun.GetName());
 
 3438         Error(
"DoEval", 
"Formula has error and  it is not properly initialized ");
 
 3450      (*fFuncPtr)(0, 1, args, &
result);
 
 3452      double *pars = (params) ? 
const_cast<double *
>(params) : 
const_cast<double *
>(
fClingParameters.data());
 
 3454      (*fFuncPtr)(0, 2, args, &
result);
 
 3471      Info(
"ReInitializeEvalMethod",
"compile now lambda expression function using Cling");
 
 3478   if (!
fLazyInitialization)   
Warning(
"ReInitializeEvalMethod", 
"Formula is NOT properly initialized - try calling again TFormula::PrepareEvalMethod");
 
 
 3537      std::size_t found = 
clingFunc.find(
"return");
 
 3539      if (found == std::string::npos || 
found2 == std::string::npos) {
 
 3540         Error(
"GetExpFormula",
"Invalid Cling expression - return default formula expression");
 
 3554               Error(
"GetExpFormula",
"Parameters not found - invalid expression - return default cling formula");
 
 3578               Error(
"GetExpFormula",
"Parameter names not found - invalid expression - return default formula");
 
 3590   Warning(
"GetExpFormula",
"Invalid option - return default formula expression");
 
 
 3595   std::unique_ptr<TInterpreterValue> 
v = 
gInterpreter->MakeInterpreterValue();
 
 3596   std::string s(
"(void (&)(Double_t *, Double_t *, Double_t *)) ");
 
 3599   return v->ToString();
 
 
 3603   std::unique_ptr<TInterpreterValue> 
v = 
gInterpreter->MakeInterpreterValue();
 
 3605   return v->ToString();
 
 
 3614   printf(
" Formula expression: \n");
 
 3623         printf(
"List of  Variables: \n");
 
 3630         printf(
"List of  Parameters: \n");
 
 3635         for ( 
int ipar = 0; ipar < 
fNpar ; ++ipar) {
 
 3639      printf(
"Expression passed to Cling:\n");
 
 3642         printf(
"Generated Gradient:\n");
 
 3647         printf(
"Generated Hessian:\n");
 
 3654      Warning(
"Print", 
"Formula is not ready to execute. Missing parameters/variables");
 
 3655      for (list<TFormulaFunction>::const_iterator it = 
fFuncs.begin(); it != 
fFuncs.end(); ++it) {
 
 3658            printf(
"%s is unknown.\n", 
fun.GetName());
 
 
 3681   if (
b.IsReading() ) {
 
 3698            Error(
"Streamer",
"Old formula read from file is NOT valid");
 
 3752               Error(
"Streamer",
"number of parameters computed (%d) is not same as the stored parameters (%d)",
fNpar,
int(
parValues.size()) );
 
 3755            if (
v > 11 && 
fNdim != ndim) {
 
 3756               Error(
"Streamer",
"number of dimension computed (%d) is not same as the stored value (%d)",
fNdim, ndim );
 
 3775            Warning(
"Streamer",
"number of parameters list found (%zu) is not same as the stored one (%zu) - use re-created list",
fParams.size(),
paramMap.size()) ;
 
 3791            gROOT->GetListOfFunctions()->Add(
this);
 
 3794            Error(
"Streamer",
"Formula read from file is NOT ready to execute");
 
 3802         Error(
"Streamer",
"Reading version %d is not supported",
v);
 
 
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
 
void GetParameters(TFitEditor::FuncParams_t &pars, TF1 *func)
Stores the parameters of the given function into pars.
 
winID h TVirtualViewer3D TVirtualGLPainter p
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
 
R__EXTERN TInterpreter * gCling
 
R__EXTERN TVirtualMutex * gROOTMutex
 
#define R__LOCKGUARD(mutex)
 
const_iterator begin() const
 
const_iterator end() const
 
Buffer base class used for serializing objects.
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
 
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
 
virtual TFormula * GetFormula()
 
Global functions class (global functions are obtained from CINT).
 
virtual Longptr_t ProcessLine(const char *line, EErrorCode *error=nullptr)=0
 
virtual Bool_t Declare(const char *code)=0
 
virtual Bool_t CallFunc_IsValid(CallFunc_t *) const
 
virtual CallFuncIFacePtr_t CallFunc_IFacePtr(CallFunc_t *) const
 
Method or function calling interface.
 
Each ROOT class (see TClass) has a linked list of methods.
 
The TNamed class is the base class for all named ROOT classes.
 
void Copy(TObject &named) const override
Copy this to obj.
 
const char * GetName() const override
Returns name of object.
 
const char * GetTitle() const override
Returns title of object.
 
virtual void SetName(const char *name)
Set the name of the TNamed.
 
Mother of all ROOT objects.
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
 
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
 
Regular expression class.
 
TString & Insert(Ssiz_t pos, const char *s)
 
Int_t Atoi() const
Return integer value of string.
 
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
 
const char * Data() const
 
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
Ssiz_t Last(char c) const
Find last occurrence of a character c.
 
void ToUpper()
Change string to upper case.
 
TString & Append(const char *cs)
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
 
constexpr Double_t G()
Gravitational constant in: .
 
constexpr Double_t C()
Velocity of light in .
 
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
 
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754.
 
Double_t Floor(Double_t x)
Rounds x downward, returning the largest integral value that is not greater than x.
 
constexpr Double_t K()
Boltzmann's constant in : .
 
constexpr Double_t Sqrt2()
 
constexpr Double_t E()
Base of natural log: .
 
constexpr Double_t Sigma()
Stefan-Boltzmann constant in : .
 
constexpr Double_t H()
Planck's constant in : .
 
constexpr Double_t LogE()
Base-10 log of e (to convert ln to log)
 
constexpr Double_t Ln10()
Natural log of 10 (to convert log to ln)
 
constexpr Double_t EulerGamma()
Euler-Mascheroni Constant.
 
constexpr Double_t R()
Universal gas constant ( ) in
 
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.
 
Double_t Infinity()
Returns an infinity as defined by the IEEE standard.
 
void(* Generic_t)(void *, int, void **, void *)