197bool interpretExtendedCmdArg(
RooAbsPdf const& pdf, 
int extendedCmdArg) {
 
  199  if (extendedCmdArg == 2) {
 
  203          << 
"p.d.f. provides expected number of events, including extended term in likelihood." << std::endl;
 
  207  return extendedCmdArg;
 
  210inline double getLog(
double prob, 
RooAbsReal const *caller)
 
  213   if (std::abs(prob) > 1e6) {
 
  214      oocoutW(caller, Eval) << 
"RooAbsPdf::getLogVal(" << caller->
GetName()
 
  215                            << 
") WARNING: top-level pdf has a large value: " << prob << std::endl;
 
  219      caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to a negative number");
 
  224      caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to zero");
 
  226      return -std::numeric_limits<double>::infinity();
 
  230      caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to NaN");
 
  235   return std::log(prob);
 
  241                             const char* rangeName, 
bool splitRange)
 
  249   if(!rangeName || splitRange) 
return;
 
  254   std::string fitrangeValue;
 
  256   for (
auto const &subrange : subranges) {
 
  257      if (subrange.empty())
 
  259      std::string fitrangeValueSubrange = std::string(
"fit_") + baseName;
 
  260      if (subranges.size() > 1) {
 
  261         fitrangeValueSubrange += 
"_" + subrange;
 
  263      fitrangeValue += fitrangeValueSubrange + 
",";
 
  266         if(arg->isCategory()) 
continue;
 
  267         auto& observable = 
static_cast<RooRealVar&
>(*arg);
 
  269         observable.
setRange(fitrangeValueSubrange.c_str(), observable.getMin(subrange.c_str()),
 
  270                             observable.getMax(subrange.c_str()));
 
  273   pdf.
setStringAttribute(
"fitrange", fitrangeValue.substr(0, fitrangeValue.size() - 1).c_str());
 
  321           double plotMin, 
double plotMax) :
 
  322  RooAbsReal(
name,title,plotMin,plotMax), _normMgr(this,10), _selectComp(true)
 
  335  _normMgr(other._normMgr,this), _selectComp(other._selectComp), _normRange(other._normRange)
 
  357    if (normVal < 0. || (normVal == 0. && rawVal != 0)) {
 
  359      const std::string msg = 
"p.d.f normalization integral is zero or negative: " + std::to_string(normVal);
 
  366      logEvalError(
Form(
"p.d.f value is less than zero (%f), trying to recover", rawVal));
 
  377    return (rawVal == 0. && normVal == 0.) ? 0. : rawVal / normVal;
 
  407  bool nintChanged(
false) ;
 
  439  cxcoutD(Eval) << 
"RooAbsPdf::analyticalIntegralWN(" << 
GetName() << 
") code = " << code << 
" normset = " << (normSet?*normSet:
RooArgSet()) << endl ;
 
  442  if (code==0) 
return getVal(normSet) ;
 
  471  if(!error) 
return error ;
 
  494  if (!nset) 
return 1 ;
 
  502      coutW(Eval) << 
"RooAbsPdf::getNorm(" << 
GetName() << 
":: WARNING normalization is zero, nset = " ;  nset->
Print(
"1") ;
 
  503      if(
_errorCount == 10) 
coutW(Eval) << 
"RooAbsPdf::getNorm(" << 
GetName() << 
") INFO: no more messages will be printed " << endl ;
 
  522    return cache->
_norm ;
 
  579    ((
RooAbsPdf*) 
this)->setProxyNormSet(nset) ;
 
  588      << 
") recreating normalization integral " << endl ;
 
  591      cxcoutD(Tracing) << 
ClassName() << 
"::syncNormalization(" << 
GetName() << 
") selfNormalized, creating unit norm" << endl;
 
  597    auto ntitle = std::string(
GetTitle()) + 
" Unit Normalization";
 
  598    auto nname = std::string(
GetName()) + 
"_UnitNorm";
 
  609    if (cacheParamsStr && strlen(cacheParamsStr)) {
 
  611      std::unique_ptr<RooArgSet> intParams{normInt->
getVariables()} ;
 
  615      if (!cacheParams.
empty()) {
 
  616   cxcoutD(Caching) << 
"RooAbsReal::createIntObj(" << 
GetName() << 
") INFO: constructing " << cacheParams.
getSize()
 
  617          << 
"-dim value cache for integral over " << depList << 
" as a function of " << cacheParams << 
" in range " << (nr?nr:
"<default>") <<  endl ;
 
  626   normInt= cachedIntegral ;
 
  668    for(
auto * pdf : dynamic_range_cast<RooAbsPdf*>(branchList)) {
 
  669      if (pdf) pdf->setTraceCounter(
value,
false) ;
 
  684  return getLog(
getVal(nset), 
this);
 
  694bool checkInfNaNNeg(
const T& inputs) {
 
  700  for (
double val : inputs) { 
 
  701    inf |= !std::isfinite(val);
 
  706  return inf || nan || neg;
 
  717  for (
unsigned int i=0; i<outputs.
size(); ++i) {
 
  718    const double value = outputs[i];
 
  722    } 
else if (!std::isfinite(outputs[i])){
 
  725    } 
else if (outputs[i] < 0.) {
 
  726      logEvalError(
Form(
"p.d.f value of (%s) is less than zero (%f) for entry %zu",
 
  740  auto pdfValues = 
getValues(evalData, normSet);
 
  750  for (std::size_t i = 0; i < pdfValues.
size(); ++i) {
 
  751     output[i] = getLog(pdfValues[i], 
this);
 
  812    coutE(InputArguments) << 
GetName() << 
": this PDF does not support extended maximum likelihood" 
  818    coutE(InputArguments) << 
GetName() << 
": calculated negative expected events: " << expected
 
  820    logEvalError(
"extendedTerm #expected events is <0 return a  NaN");
 
  826  if (std::abs(expected)<1
e-10 && std::abs(sumEntries)<1
e-10) {
 
  832    logEvalError(
"extendedTerm #expected events is a NaN") ;
 
  836  double extra = doOffset
 
  837      ? (expected - sumEntries) - sumEntries * (std::log(expected) - std::log(sumEntries))
 
  838      : expected - sumEntries * std::log(expected);
 
  840  if(sumEntriesW2 != 0.0) {
 
  841    extra *= sumEntriesW2 / sumEntries;
 
  872  double sumW = 
data.sumEntries();
 
  875    sumW2 = 
data.sumEntriesW2();
 
  969  auto baseName = std::string(
"nll_") + 
GetName() + 
"_" + 
data.GetName();
 
  977  pc.
defineString(
"rangeName",
"RangeWithName",0,
"",
true) ;
 
  979  pc.
defineString(
"globstag",
"GlobalObservablesTag",0,
"") ;
 
  980  pc.
defineString(
"globssource",
"GlobalObservablesSource",0,
"data") ;
 
  983  pc.
defineInt(
"splitRange",
"SplitRange",0,0) ;
 
  986  pc.
defineInt(
"interleave",
"NumCPU",1,0) ;
 
  988  pc.
defineInt(
"optConst",
"Optimize",0,0) ;
 
  989  pc.
defineInt(
"cloneData",
"CloneData", 0, 2);
 
  990  pc.
defineSet(
"projDepSet",
"ProjectedObservables",0,0) ;
 
  992  pc.
defineSet(
"glObs",
"GlobalObservables",0,0) ;
 
  993  pc.
defineInt(
"doOffset",
"OffsetLikelihood",0,0) ;
 
  994  pc.
defineSet(
"extCons",
"ExternalConstraints",0,0) ;
 
  995  pc.
defineInt(
"BatchMode", 
"BatchMode", 0, defaultBatchModeInt);
 
  996  pc.
defineDouble(
"IntegrateBins", 
"IntegrateBins", 0, -1.);
 
  998  pc.
defineMutex(
"GlobalObservables",
"GlobalObservablesTag") ;
 
  999  pc.
defineInt(
"ModularL", 
"ModularL", 0, 0);
 
 1013  if (pc.
getInt(
"ModularL")) {
 
 1014      int lut[3] = {2, 1, 0};
 
 1022      if (
auto tmp = pc.
getSet(
"cPars"))
 
 1025      if (
auto tmp = pc.
getSet(
"extCons"))
 
 1026        extConsSet.
add(*tmp);
 
 1028      if (
auto tmp = pc.
getSet(
"glObs"))
 
 1031      const std::string rangeName = pc.
getString(
"globstag", 
"", 
false);
 
 1034      builder.Extended(ext)
 
 1035             .ConstrainedParameters(cParsSet)
 
 1036             .ExternalConstraints(extConsSet)
 
 1037             .GlobalObservables(glObsSet)
 
 1038             .GlobalObservablesTag(rangeName.c_str());
 
 1040      return RooFit::Detail::owningPtr(std::make_unique<RooFit::TestStatistics::RooRealL>(
"likelihood", 
"", builder.build()));
 
 1044  const char* rangeName = pc.
getString(
"rangeName",0,
true) ;
 
 1045  const char* addCoefRangeName = pc.
getString(
"addCoefRange",0,
true) ;
 
 1046  const bool ext = interpretExtendedCmdArg(*
this, pc.
getInt(
"ext")) ;
 
 1050  if (numcpu_strategy==3 && !this->
InheritsFrom(
"RooSimultaneous") ) {
 
 1051     coutW(Minimization) << 
"Cannot use a NumCpu Strategy = 3 when the pdf is not a RooSimultaneous, " 
 1052                            "falling back to default strategy = 0"  << endl;
 
 1053     numcpu_strategy = 0;
 
 1058  bool verbose = pc.
getInt(
"verbose") ;
 
 1064    coutE(Minimization) << 
"The Offset(\"bin\") option doesn't suppot fits to RooDataSet yet, only to RooDataHist." 
 1065                           " Falling back to no offsetting."  << endl;
 
 1071    cloneData = optConst ;
 
 1075    double rangeLo = pc.
getDouble(
"rangeLo") ;
 
 1076    double rangeHi = pc.
getDouble(
"rangeHi") ;
 
 1081    for (
auto arg : obs) {
 
 1083      if (rrv) rrv->
setRange(
"fit",rangeLo,rangeHi) ;
 
 1091  resetFitrangeAttributes(*
this, 
data, baseName, rangeName, splitRange);
 
 1094  auto tmp = pc.
getSet(
"projDepSet");
 
 1096    projDeps.
add(*tmp) ;
 
 1099  const std::string globalObservablesSource = pc.
getString(
"globssource",
"data",
false);
 
 1100  if(globalObservablesSource != 
"data" && globalObservablesSource != 
"model") {
 
 1101    std::string errMsg = 
"RooAbsPdf::fitTo: GlobalObservablesSource can only be \"data\" or \"model\"!";
 
 1102    coutE(InputArguments) << errMsg << std::endl;
 
 1103    throw std::invalid_argument(errMsg);
 
 1105  const bool takeGlobalObservablesFromData = globalObservablesSource == 
"data";
 
 1110  auto createConstr = [&](
RooAbsPdf const& pdf, 
bool removeConstraintsFromPdf=
false) -> std::unique_ptr<RooAbsReal> {
 
 1112            baseName + 
"_constr", 
 
 1119            takeGlobalObservablesFromData, 
 
 1120            removeConstraintsFromPdf
 
 1136    normSet.
remove(projDeps, 
true, 
true);
 
 1142    ctx.setLikelihoodMode(
true);
 
 1144    std::unique_ptr<RooAbsPdf> pdfClone = std::unique_ptr<RooAbsPdf>{
static_cast<RooAbsPdf *
>(head.release())};
 
 1153    if (addCoefRangeName) {
 
 1155                        << 
") fixing interpretation of coefficients of any component to range " 
 1156                        << addCoefRangeName << 
"\n";
 
 1157       pdfClone->fixAddCoefRange(addCoefRangeName, 
false);
 
 1160    std::unique_ptr<RooAbsReal> compiledConstr;
 
 1161    if(std::unique_ptr<RooAbsReal> constr = createConstr(*
this)) {
 
 1163       compiledConstr->addOwnedComponents(std::move(constr));
 
 1169            std::move(compiledConstr),
 
 1170            rangeName ? rangeName : 
"",
 
 1176    auto driver = std::make_unique<ROOT::Experimental::RooFitDriver>(*nll, batchMode);
 
 1178    auto driverWrapper = std::make_unique<ROOT::Experimental::RooAbsRealWrapper>(
 
 1179       std::move(driver), rangeName ? rangeName : 
"", 
dynamic_cast<RooSimultaneous *
>(pdfClone.get()), takeGlobalObservablesFromData);
 
 1180    driverWrapper->setData(
data, 
false);
 
 1181    driverWrapper->addOwnedComponents(std::move(nll));
 
 1182    driverWrapper->addOwnedComponents(std::move(pdfClone));
 
 1184    return RooFit::Detail::owningPtr<RooAbsReal>(std::move(driverWrapper));
 
 1189  std::unique_ptr<RooAbsReal> nll ;
 
 1200  cfg.
rangeName = rangeName ? rangeName : 
"";
 
 1201  auto nllVar = std::make_unique<RooNLLVar>(baseName.c_str(),
"-log(likelihood)",*
this,
data,projDeps, ext, cfg);
 
 1204  nll = std::move(nllVar);
 
 1208  if (std::unique_ptr<RooAbsReal> constraintTerm = createConstr(*
this)) {
 
 1220    constraintTerm->setData(
data, 
false);
 
 1226    auto orignll = std::move(nll) ;
 
 1227    nll = std::make_unique<RooAddition>(
Form(
"%s_with_constr",baseName.c_str()),
"nllWithCons",
RooArgSet(*orignll,*constraintTerm)) ;
 
 1228    nll->addOwnedComponents(std::move(orignll),std::move(constraintTerm)) ;
 
 1236    nll->enableOffsetting(
true) ;
 
 1257   std::unique_ptr<RooFitResult> rw(minimizer.
save());
 
 1261      << 
"RooAbsPdf::fitTo(" << this->
GetName()
 
 1262      << 
") Calculating covariance matrix according to the asymptotically correct approach. If you find this " 
 1263         "method useful please consider citing https://arxiv.org/abs/1911.01303." 
 1267   auto nFloatPars = rw->floatParsFinal().getSize();
 
 1269   for (
int k = 0; k < nFloatPars; k++) {
 
 1270      for (
int l = 0; 
l < nFloatPars; 
l++) {
 
 1277   std::vector<std::unique_ptr<RooDerivative>> derivatives;
 
 1278   const RooArgList &floated = rw->floatParsFinal();
 
 1279   std::unique_ptr<RooArgSet> floatingparams{
 
 1281   for (
const auto paramresult : floated) {
 
 1282      auto paraminternal = 
static_cast<RooRealVar *
>(floatingparams->find(*paramresult));
 
 1284      derivatives.emplace_back(this->
derivative(*paraminternal, obs, 1));
 
 1288   for (
int j = 0; j < 
data.numEntries(); j++) {
 
 1292      std::vector<double> diffs(floated.
getSize(), 0.0);
 
 1293      for (
int k = 0; k < floated.
getSize(); k++) {
 
 1294         const auto paramresult = 
static_cast<RooRealVar *
>(floated.
at(k));
 
 1295         auto paraminternal = 
static_cast<RooRealVar *
>(floatingparams->find(*paramresult));
 
 1297         double diff = derivatives[k]->
getVal();
 
 1299         *paraminternal = paramresult->getVal();
 
 1303      double prob = 
getVal(&obs);
 
 1304      for (
int k = 0; k < floated.
getSize(); k++) {
 
 1305         for (
int l = 0; 
l < floated.
getSize(); 
l++) {
 
 1306            num(k, 
l) += 
data.weightSquared() * diffs[k] * diffs[
l] / (prob * prob);
 
 1318   return rw->covQual();
 
 1337   std::unique_ptr<RooFitResult> rw{minimizer.
save()};
 
 1339   coutI(Fitting) << 
"RooAbsPdf::fitTo(" << this->
GetName()
 
 1340                  << 
") Calculating sum-of-weights-squared correction matrix for covariance matrix" 
 1343   std::unique_ptr<RooFitResult> rw2{minimizer.
save()};
 
 1351      coutE(Fitting) << 
"RooAbsPdf::fitTo(" << this->
GetName()
 
 1352                     << 
") ERROR: Cannot apply sum-of-weights correction to covariance matrix: correction " 
 1353                        "matrix calculated with weight-squared is singular" 
 1362   for (
int i = 0; i < matC.
GetNrows(); ++i) {
 
 1363      for (
int j = 0; j < i; ++j) {
 
 1364         matC(j, i) = matC(i, j);
 
 1372   return std::min(rw->covQual(), rw2->covQual());
 
 1391  bool weightedData = 
data.isNonPoissonWeighted();
 
 1395    coutW(InputArguments) << 
"RooAbsPdf::fitTo(" << 
GetName() << 
") WARNING: a likelihood fit is requested of what appears to be weighted data.\n" 
 1396                          << 
"       While the estimated values of the parameters will always be calculated taking the weights into account,\n" 
 1397                          << 
"       there are multiple ways to estimate the errors of the parameters. You are advised to make an \n" 
 1398                          << 
"       explicit choice for the error calculation:\n" 
 1399                          << 
"           - Either provide SumW2Error(true), to calculate a sum-of-weights-corrected HESSE error matrix\n" 
 1400                          << 
"             (error will be proportional to the number of events in MC).\n" 
 1401                          << 
"           - Or provide SumW2Error(false), to return errors from original HESSE error matrix\n" 
 1402                          << 
"             (which will be proportional to the sum of the weights, i.e., a dataset with <sum of weights> events).\n" 
 1403                          << 
"           - Or provide AsymptoticError(true), to use the asymptotically correct expression\n" 
 1404                          << 
"             (for details see https://arxiv.org/abs/1911.01303)." 
 1409    coutE(InputArguments) << 
"RooAbsPdf::fitTo(" << 
GetName() << 
"): sum-of-weights and asymptotic error correction do not work with MINOS errors. Not fitting." << endl;
 
 1413    coutW(InputArguments) << 
"RooAbsPdf::fitTo(" << 
GetName() << 
") WARNING: asymptotic correction does not apply to MINOS errors" << endl ;
 
 1418    coutE(InputArguments) << 
"RooAbsPdf::fitTo(" << 
GetName() << 
") ERROR: Cannot compute both asymptotically correct and SumW2 errors." << endl ;
 
 1431  m.setMinimizerType(cfg.
minType.c_str());
 
 1434  m.setPrintEvalErrors(cfg.
numee);
 
 1443  if (cfg.
hesse) 
m.hesse(); 
 
 1445  int corrCovQual = -1;
 
 1447  if (
m.getNPar()>0) {
 
 1455  std::unique_ptr<RooFitResult> ret;
 
 1457    auto name = std::string(
"fitresult_") + 
GetName() + 
"_" + 
data.GetName();
 
 1458    auto title = std::string(
"Result of fit of p.d.f. ") + 
GetName() + 
" to dataset " + 
data.GetName();
 
 1459    ret = std::unique_ptr<RooFitResult>{
m.save(
name.c_str(),title.c_str())};
 
 1632  std::string nllCmdListString = 
"ProjectedObservables,Extended,Range," 
 1633      "RangeWithName,SumCoefRange,NumCPU,SplitRange,Constrained,Constrain,ExternalConstraints," 
 1634      "CloneData,GlobalObservables,GlobalObservablesSource,GlobalObservablesTag," 
 1635      "BatchMode,IntegrateBins,ModularL";
 
 1638    nllCmdListString += 
",OffsetLikelihood";
 
 1657  pc.
defineInt(
"numee",
"PrintEvalErrors",0,minimizerDefaults.
numee) ;
 
 1663  pc.
defineInt(
"doOffset",
"OffsetLikelihood",0,0) ;
 
 1664  pc.
defineInt(
"parallelize", 
"Parallelize", 0, 0); 
 
 1665  pc.
defineInt(
"enableParallelGradient", 
"ParallelGradientOptions", 0, 0);
 
 1666  pc.
defineInt(
"enableParallelDescent", 
"ParallelDescentOptions", 0, 0);
 
 1667  pc.
defineInt(
"timingAnalysis", 
"TimingAnalysis", 0, 0);
 
 1680  if (pc.
getInt(
"timingAnalysis") && !this->InheritsFrom(
"RooSimultaneous") ) {
 
 1681     coutW(Minimization) << 
"The timingAnalysis feature was built for minimization with RooSimulteneous " 
 1682                            "and is not implemented for other PDF's. Please create a RooSimultenous to " 
 1683                            "enable this feature."  << endl;
 
 1695    conf.
defineInt(
"BatchMode",
"BatchMode",0,0);
 
 1698    if (conf.
getInt(
"BatchMode") != 0) {
 
 1704    size_t nEvents = 
static_cast<size_t>(prefit*
data.numEntries());
 
 1705    if (prefit > 0.5 || nEvents < 100)  {
 
 1706      coutW(InputArguments) << 
"PrefitDataFraction should be in suitable range." 
 1707      << 
"With the current PrefitDataFraction=" << prefit
 
 1708      << 
", the number of events would be " << nEvents<< 
" out of " 
 1709      << 
data.numEntries() << 
". Skipping prefit..." << endl;
 
 1712      size_t step = 
data.numEntries()/nEvents;
 
 1717      for (
int i=0; i<
data.numEntries(); i+=step)
 
 1723      pc.
filterCmdList(tinyCmdList,
"Prefit,Hesse,Minos,Verbose,Save,Timer");
 
 1727      tinyCmdList.
Add(&hesse_option);
 
 1728      tinyCmdList.
Add(&print_option);
 
 1730      fitTo(tiny,tinyCmdList);
 
 1735  if (pc.
getInt(
"parallelize") != 0 || pc.
getInt(
"enableParallelGradient") || pc.
getInt(
"enableParallelDescent")) {
 
 1738    nllCmdList.
Add(&modularL_option);
 
 1741  std::unique_ptr<RooAbsReal> nll{
createNLL(
data,nllCmdList)};
 
 1783  RooLinkedList chi2CmdList = pc.
filterCmdList(fitCmdList,
"Range,RangeWithName,NumCPU,Optimize,ProjectedObservables,AddCoefRange,SplitRange,DataError,Extended,IntegrateBins") ;
 
 1811  pc.
defineString(
"rangeName",
"RangeWithName",0,
"",
true) ;
 
 1817  const char* rangeName = pc.
getString(
"rangeName",0,
true) ;
 
 1827  if (!rangeName || strchr(rangeName,
',')==0) {
 
 1830    chi2 = 
new RooChi2Var(baseName.c_str(),baseName.c_str(),*
this,
data,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
 
 1836    string rcmd = 
"RangeWithName" ;
 
 1837    if (arg1.
GetName()==rcmd) rarg = &arg1 ;
 
 1838    if (arg2.
GetName()==rcmd) rarg = &arg2 ;
 
 1839    if (arg3.
GetName()==rcmd) rarg = &arg3 ;
 
 1840    if (arg4.
GetName()==rcmd) rarg = &arg4 ;
 
 1841    if (arg5.
GetName()==rcmd) rarg = &arg5 ;
 
 1842    if (arg6.
GetName()==rcmd) rarg = &arg6 ;
 
 1843    if (arg7.
GetName()==rcmd) rarg = &arg7 ;
 
 1844    if (arg8.
GetName()==rcmd) rarg = &arg8 ;
 
 1848    for (std::string& token : 
ROOT::Split(rangeName, 
",")) {
 
 1851      auto chi2Comp = std::make_unique<RooChi2Var>(
Form(
"%s_%s", baseName.c_str(), token.c_str()), 
"chi^2", *
this, 
data,
 
 1852                   &arg1==rarg?subRangeCmd:arg1,&arg2==rarg?subRangeCmd:arg2,
 
 1853                   &arg3==rarg?subRangeCmd:arg3,&arg4==rarg?subRangeCmd:arg4,
 
 1854                   &arg5==rarg?subRangeCmd:arg5,&arg6==rarg?subRangeCmd:arg6,
 
 1855                   &arg7==rarg?subRangeCmd:arg7,&arg8==rarg?subRangeCmd:arg8) ;
 
 1856      chi2List.
addOwned(std::move(chi2Comp));
 
 1858    chi2 = 
new RooAddition(baseName.c_str(),
"chi^2",chi2List);
 
 1878  pc.
defineInt(
"integrate",
"Integrate",0,0) ;
 
 1888  bool integrate = pc.
getInt(
"integrate") ;
 
 1928  os << 
indent << 
"--- RooAbsPdf ---" << endl;
 
 1931    os << 
indent << 
" Normalization integral: " << endl ;
 
 1932    auto moreIndent = std::string(
indent.Data()) + 
"   " ;
 
 1953               const RooArgSet* auxProto, 
bool verbose)
 const 
 1955  return new RooGenContext(*
this,vars,prototype,auxProto,verbose) ;
 
 1962                   bool verbose, 
bool autoBinned, 
const char* binnedTag)
 const 
 1964  if (prototype || (auxProto && auxProto->
getSize()>0)) {
 
 1965    return genContext(vars,prototype,auxProto,verbose);
 
 2042  pc.
defineInt(
"randProto",
"PrototypeData",0,0) ;
 
 2043  pc.
defineInt(
"resampleProto",
"PrototypeData",1,0) ;
 
 2045  pc.
defineInt(
"extended",
"Extended",0,0) ;
 
 2046  pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
 
 2047  pc.
defineInt(
"autoBinned",
"AutoBinned",0,1) ;
 
 2048  pc.
defineInt(
"expectedData",
"ExpectedData",0,0) ;
 
 2055  pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
 
 2062  const char* dsetName = pc.
getString(
"dsetName") ;
 
 2063  bool verbose = pc.
getInt(
"verbose") ;
 
 2064  bool randProto = pc.
getInt(
"randProto") ;
 
 2065  bool resampleProto = pc.
getInt(
"resampleProto") ;
 
 2066  bool extended = pc.
getInt(
"extended") ;
 
 2067  bool autoBinned = pc.
getInt(
"autoBinned") ;
 
 2068  const char* binnedTag = pc.
getString(
"binnedTag") ;
 
 2070  double nEventsD = pc.
getInt(
"nEventsD") ;
 
 2072  bool expectedData = pc.
getInt(
"expectedData") ;
 
 2074  double nEvents = (nEventsD>0) ? nEventsD : 
double(nEventsI);
 
 2083  } 
else if (nEvents==0) {
 
 2084    cxcoutI(Generation) << 
"No number of events specified , number of events generated is " 
 2088  if (extended && protoData && !randProto) {
 
 2089    cxcoutI(Generation) << 
"WARNING Using generator option Extended() (Poisson distribution of #events) together " 
 2090           << 
"with a prototype dataset implies incomplete sampling or oversampling of proto data. " 
 2091           << 
"Set randomize flag in ProtoData() option to randomize prototype dataset order and thus " 
 2092           << 
"to randomize the set of over/undersampled prototype events for each generation cycle." << endl ;
 
 2097  std::unique_ptr<RooDataSet> 
data;
 
 2099    data = std::unique_ptr<RooDataSet>{
generate(whatVars,*protoData,
Int_t(nEvents),verbose,randProto,resampleProto)};
 
 2101     data = std::unique_ptr<RooDataSet>{
generate(whatVars,nEvents,verbose,autoBinned,binnedTag,expectedData, extended)};
 
 2105  if (dsetName && strlen(dsetName)>0) {
 
 2106    data->SetName(dsetName) ;
 
 2134  pc.
defineInt(
"randProto",
"PrototypeData",0,0) ;
 
 2135  pc.
defineInt(
"resampleProto",
"PrototypeData",1,0) ;
 
 2137  pc.
defineInt(
"extended",
"Extended",0,0) ;
 
 2138  pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
 
 2139  pc.
defineInt(
"autoBinned",
"AutoBinned",0,1) ;
 
 2145  pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
 
 2152  const char* dsetName = pc.
getString(
"dsetName") ;
 
 2154  bool verbose = pc.
getInt(
"verbose") ;
 
 2155  bool randProto = pc.
getInt(
"randProto") ;
 
 2156  bool resampleProto = pc.
getInt(
"resampleProto") ;
 
 2157  bool extended = pc.
getInt(
"extended") ;
 
 2158  bool autoBinned = pc.
getInt(
"autoBinned") ;
 
 2159  const char* binnedTag = pc.
getString(
"binnedTag") ;
 
 2163  return new GenSpec(cx,whatVars,protoData,nEvents,extended,randProto,resampleProto,dsetName) ;
 
 2217  std::unique_ptr<RooAbsGenContext> context{
autoGenContext(whatVars,0,0,verbose,autoBinned,binnedTag)};
 
 2222  std::unique_ptr<RooDataSet> generated;
 
 2223  if(0 != context && context->isValid()) {
 
 2224     generated = std::unique_ptr<RooDataSet>{context->generate(nEvents, 
false, extended)};
 
 2227    coutE(Generation)  << 
"RooAbsPdf::generate(" << 
GetName() << 
") cannot create a valid context" << endl;
 
 2239            double nEvents, 
bool , 
bool randProtoOrder, 
bool resampleProto,
 
 2240            bool skipInit, 
bool extended)
 const 
 2242  if (nEvents==0 && (prototype==0 || prototype->
numEntries()==0)) {
 
 2243    return std::make_unique<RooDataSet>(
"emptyData",
"emptyData",whatVars);
 
 2246  std::unique_ptr<RooDataSet> generated;
 
 2249  if (resampleProto) {
 
 2250    randProtoOrder=true ;
 
 2253  if (randProtoOrder && prototype && prototype->
numEntries()!=nEvents) {
 
 2254    coutI(Generation) << 
"RooAbsPdf::generate (Re)randomizing event order in prototype dataset (Nevt=" << nEvents << 
")" << endl ;
 
 2261    generated = std::unique_ptr<RooDataSet>{context.
generate(nEvents,skipInit,extended)};
 
 2264    coutE(Generation) << 
"RooAbsPdf::generate(" << 
GetName() << 
") do not have a valid generator context" << endl;
 
 2295            Int_t nEvents, 
bool verbose, 
bool randProtoOrder, 
bool resampleProto)
 const 
 2297  std::unique_ptr<RooAbsGenContext> context{
genContext(whatVars,&prototype,0,verbose)};
 
 2301  coutE(Generation) << 
"RooAbsPdf::generate(" << 
GetName() << 
") ERROR creating generator context" << endl ;
 
 2316  if (!resampleProto) {
 
 2318    std::iota(lut, lut + nProto, 0); 
 
 2324    for (
int i = nProto-1; i > 0; --i) {
 
 2389    if(server == &arg) 
continue;
 
 2390    if(server->dependsOn(arg)) {
 
 2431  pc.
defineInt(
"extended",
"Extended",0,0) ;
 
 2432  pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
 
 2434  pc.
defineInt(
"expectedData",
"ExpectedData",0,0) ;
 
 2437  pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
 
 2443  double nEvents = pc.
getDouble(
"nEventsD") ;
 
 2445    nEvents = pc.
getInt(
"nEvents") ;
 
 2448  bool extended = pc.
getInt(
"extended") ;
 
 2449  bool expectedData = pc.
getInt(
"expectedData") ;
 
 2450  const char* dsetName = pc.
getString(
"dsetName") ;
 
 2455    cxcoutI(Generation) << 
" Extended mode active, number of events generated (" << nEvents << 
") is Poisson fluctuation on " 
 2456         << 
GetName() << 
"::expectedEvents() = " << nEvents << endl ;
 
 2461  } 
else if (nEvents==0) {
 
 2462    cxcoutI(Generation) << 
"No number of events specified , number of events generated is " 
 2470  if (dsetName && strlen(dsetName)>0) {
 
 2471    data->SetName(dsetName) ;
 
 2508  auto hist = std::make_unique<RooDataHist>(
"genData",
"genData",whatVars);
 
 2513      coutE(InputArguments) << 
"RooAbsPdf::generateBinned(" << 
GetName() << 
") ERROR: No event count provided and p.d.f does not provide expected number of events" << endl ;
 
 2518      if (expectedData || extended) {
 
 2529  vector<int> histOut(hist->numEntries()) ;
 
 2530  double histMax(-1) ;
 
 2531  Int_t histOutSum(0) ;
 
 2532  for (
int i=0 ; i<hist->numEntries() ; i++) {
 
 2537      double w=hist->weight()*nEvents ;
 
 2538      hist->set(i, 
w, sqrt(
w));
 
 2540    } 
else if (extended) {
 
 2544      hist->set(
w,sqrt(
w)) ;
 
 2550      if (hist->weight()>histMax) {
 
 2551        histMax = hist->weight() ;
 
 2554      histOutSum += histOut[i] ;
 
 2559  if (!expectedData && !extended) {
 
 2564    Int_t nEvtExtra = std::abs(
Int_t(nEvents)-histOutSum) ;
 
 2565    Int_t wgt = (histOutSum>nEvents) ? -1 : 1 ;
 
 2568    std::size_t counter = 0;
 
 2569    bool havePrintedInfo = 
false;
 
 2570    while(nEvtExtra>0) {
 
 2573      hist->get(ibinRand) ;
 
 2576      if (ranY<hist->weight()) {
 
 2578          histOut[ibinRand]++ ;
 
 2581          if (histOut[ibinRand]>0) {
 
 2582            histOut[ibinRand]-- ;
 
 2590      if ((counter++ > 10*nEvents || nEvents > 1.E7) && !havePrintedInfo) {
 
 2591        havePrintedInfo = 
true;
 
 2592        coutP(Generation) << 
"RooAbsPdf::generateBinned(" << 
GetName() << 
") Performing costly accept/reject sampling. If this takes too long, use " 
 2593            << 
"extended mode to speed up the process." << std::endl;
 
 2598    for (
int i=0 ; i<hist->numEntries() ; i++) {
 
 2600      hist->set(histOut[i],sqrt(1.0*histOut[i])) ;
 
 2603  } 
else if (expectedData) {
 
 2608    double corr = nEvents/hist->sumEntries() ;
 
 2609    for (
int i=0 ; i<hist->numEntries() ; i++) {
 
 2611      hist->set(hist->weight()*corr,sqrt(hist->weight()*corr)) ;
 
 2626  return generate(whatVars,nEvents) ;
 
 2630void removeRangeOverlap(std::vector<std::pair<double, double>>& ranges) {
 
 2632  std::sort(ranges.begin(), ranges.end());
 
 2634  for (
auto it = ranges.begin(); it != ranges.end(); ++it) {
 
 2635    double& startL = it->first;
 
 2636    double& endL   = it->second;
 
 2638    for (
auto innerIt = it+1; innerIt != ranges.end(); ++innerIt) {
 
 2639      const double startR = innerIt->first;
 
 2640      const double endR   = innerIt->second;
 
 2642      if (startL <= startR && startR <= endL) {
 
 2644        endL = std::max(endL, endR);
 
 2645        *innerIt = make_pair(0., 0.);
 
 2650  auto newEnd = std::remove_if(ranges.begin(), ranges.end(),
 
 2651      [](
const std::pair<double,double>& 
input){
 
 2652          return input.first == input.second;
 
 2654  ranges.erase(newEnd, ranges.end());
 
 2767  std::unique_ptr<RooCmdArg> plotRange;
 
 2768  std::unique_ptr<RooCmdArg> normRange2;
 
 2772    cmdList.
Add(plotRange.get());
 
 2777    cmdList.
Add(normRange2.get());
 
 2780  if (plotRange || normRange2) {
 
 2781    coutI(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") p.d.f was fitted in a subrange and no explicit " 
 2782          << (plotRange?
"Range()":
"") << ((plotRange&&normRange2)?
" and ":
"")
 
 2783          << (normRange2?
"NormRange()":
"") << 
" was specified. Plotting / normalising in fit range. To override, do one of the following" 
 2784          << 
"\n\t- Clear the automatic fit range attribute: <pdf>.removeStringAttribute(\"fitrange\");" 
 2785          << 
"\n\t- Explicitly specify the plotting range: Range(\"<rangeName>\")." 
 2786          << 
"\n\t- Explicitly specify where to compute the normalisation: NormRange(\"<rangeName>\")." 
 2787          << 
"\n\tThe default (full) range can be denoted with Range(\"\") / NormRange(\"\")."<< endl ;
 
 2797  pc.
defineSet(
"compSet",
"SelectCompSet",0) ;
 
 2804  pc.
defineInt(
"rangeAdjustNorm",
"Range",0,0) ;
 
 2805  pc.
defineInt(
"rangeWNAdjustNorm",
"RangeWithName",0,0) ;
 
 2806  pc.
defineMutex(
"SelectCompSet",
"SelectCompSpec") ;
 
 2818  double scaleFactor = pc.
getDouble(
"scaleFactor") ;
 
 2820  const char* compSpec = pc.
getString(
"compSpec") ;
 
 2822  bool haveCompSel = ( (compSpec && strlen(compSpec)>0) || compSet) ;
 
 2825  std::string nameSuffix ;
 
 2826  if (compSpec && strlen(compSpec)>0) {
 
 2827    nameSuffix.append(
"_Comp[") ;
 
 2828    nameSuffix.append(compSpec) ;
 
 2829    nameSuffix.append(
"]") ;
 
 2830  } 
else if (compSet) {
 
 2831    nameSuffix.append(
"_Comp[") ;
 
 2833    nameSuffix.append(
"]") ;
 
 2841    RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.c_str(),0,0,0) ;
 
 2842    cmdList.
Add(&cnsuffix);
 
 2847  double nExpected(1) ;
 
 2851            << 
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
 
 2862      bool hasCustomRange(
false), adjustNorm(
false) ;
 
 2864      std::vector<pair<double,double> > rangeLim;
 
 2869        double rangeLo = pc.
getDouble(
"rangeLo") ;
 
 2870        double rangeHi = pc.
getDouble(
"rangeHi") ;
 
 2871        rangeLim.push_back(make_pair(rangeLo,rangeHi)) ;
 
 2872        adjustNorm = pc.
getInt(
"rangeAdjustNorm") ;
 
 2873        hasCustomRange = true ;
 
 2875        coutI(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") only plotting range [" 
 2876            << rangeLo << 
"," << rangeHi << 
"]" ;
 
 2878          ccoutI(Plotting) << 
", curve is normalized to data in " << (adjustNorm?
"given":
"full") << 
" range" << endl ;
 
 2880          ccoutI(Plotting) << endl ;
 
 2883        nameSuffix.append(
Form(
"_Range[%f_%f]",rangeLo,rangeHi)) ;
 
 2887        for (
const std::string& rangeNameToken : 
ROOT::Split(pc.
getString(
"rangeName", 
"", 
false), 
",")) {
 
 2888          const char* thisRangeName = rangeNameToken.empty() ? nullptr : rangeNameToken.c_str();
 
 2890            coutE(Plotting) << 
"Range '" << rangeNameToken << 
"' not defined for variable '" 
 2896        adjustNorm = pc.
getInt(
"rangeWNAdjustNorm") ;
 
 2897        hasCustomRange = true ;
 
 2899        coutI(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") only plotting range '" << pc.
getString(
"rangeName", 
"", 
false) << 
"'" ;
 
 2901          ccoutI(Plotting) << 
", curve is normalized to data in " << (adjustNorm?
"given":
"full") << 
" range" << endl ;
 
 2903          ccoutI(Plotting) << endl ;
 
 2906        nameSuffix.append(
Form(
"_Range[%s]",pc.
getString(
"rangeName"))) ;
 
 2911        for (
const auto& rangeNameToken : 
ROOT::Split(pc.
getString(
"normRangeName", 
"", 
false), 
",")) {
 
 2912          const char* thisRangeName = rangeNameToken.empty() ? nullptr : rangeNameToken.c_str();
 
 2914            coutE(Plotting) << 
"Range '" << rangeNameToken << 
"' not defined for variable '" 
 2921        hasCustomRange = true ;
 
 2922        coutI(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") p.d.f. curve is normalized using explicit choice of ranges '" << pc.
getString(
"normRangeName", 
"", 
false) << 
"'" << endl ;
 
 2924        nameSuffix.append(
Form(
"_NormRange[%s]",pc.
getString(
"rangeName"))) ;
 
 2928      if (hasCustomRange && adjustNorm) {
 
 2930        const std::size_t oldSize = rangeLim.size();
 
 2931        removeRangeOverlap(rangeLim);
 
 2933        if (oldSize != rangeLim.size() && !pc.
hasProcessed(
"NormRange")) {
 
 2937          coutE(Plotting) << 
"Requested plot/integration ranges overlap. For correct plotting, new ranges " 
 2938              "will be defined." << std::endl;
 
 2941          std::string rangesNoOverlap;
 
 2942          for (
auto it = rangeLim.begin(); it != rangeLim.end(); ++it) {
 
 2943            std::stringstream rangeName;
 
 2944            rangeName << 
"Remove_overlap_range_" << it - rangeLim.begin();
 
 2945            plotVar->setRange(rangeName.str().c_str(), it->first, it->second);
 
 2946            if (!rangesNoOverlap.empty())
 
 2947              rangesNoOverlap += 
",";
 
 2948            rangesNoOverlap += rangeName.str();
 
 2953            rangeArg->
setString(0, rangesNoOverlap.c_str());
 
 2955            plotRange = std::make_unique<RooCmdArg>(
RooFit::Range(rangesNoOverlap.c_str()));
 
 2956            cmdList.
Add(plotRange.get());
 
 2960        double rangeNevt(0) ;
 
 2961        for (
const auto& riter : rangeLim) {
 
 2966        scaleFactor *= rangeNevt/nExpected ;
 
 2972      scaleFactor *= nExpected ;
 
 2974      scaleFactor /= nExpected ;
 
 2993    for (
const auto arg : branchNodeSet) {
 
 2995        branchNodeSet.
remove(*arg) ;
 
 3000    std::unique_ptr<RooArgSet> dirSelNodes;
 
 3006    if (dirSelNodes->getSize()>0) {
 
 3007      coutI(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") directly selected PDF components: " << *dirSelNodes << endl ;
 
 3013   coutE(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") ERROR: component selection set " << *compSet << 
" does not match any components of p.d.f." << endl ;
 
 3015   coutE(Plotting) << 
"RooAbsPdf::plotOn(" << 
GetName() << 
") ERROR: component selection expression '" << compSpec << 
"' does not select any components of p.d.f." << endl ;
 
 3022  RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.c_str(),0,0,0) ;
 
 3023  cmdList.
Add(&cnsuffix);
 
 3054  double nExpected(1) ;
 
 3058            << 
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
 
 3130  pc.
defineInt(
"showc",
"ShowConstants",0,0) ;
 
 3131  pc.
defineSet(
"params",
"Parameters",0,0) ;
 
 3134  pc.
defineInt(
"dummy",
"FormatArgs",0,0) ;
 
 3143  const char* label = pc.
getString(
"label") ;
 
 3150  const char* formatStr = pc.
getString(
"formatStr") ;
 
 3165    std::unique_ptr<RooArgSet> selParams{
static_cast<RooArgSet*
>(pdfParams->selectCommon(*params))} ;
 
 3212  bool showLabel= (label != 0 && strlen(label) > 0);
 
 3217  for (
const auto param : params) {
 
 3219    if(showConstants || !var->isConstant()) 
ymin-= dy;
 
 3222  std::string labelString = label;
 
 3223  unsigned int numLines = std::count(labelString.begin(), labelString.end(), 
'\n') + 1;
 
 3224  if (showLabel) 
ymin -= numLines * dy;
 
 3230  box->SetFillColor(0);
 
 3231  box->SetBorderSize(0);
 
 3232  box->SetTextAlign(12);
 
 3233  box->SetTextSize(0.04F);
 
 3234  box->SetFillStyle(0);
 
 3236  for (
const auto param : params) {
 
 3237    auto var = 
static_cast<const RooRealVar*
>(param);
 
 3238    if(var->isConstant() && !showConstants) 
continue;
 
 3240    std::unique_ptr<TString> formatted{options ? var->
format(sigDigits, options) : var->format(*formatCmd)};
 
 3241    box->AddText(formatted->Data());
 
 3302      pdfOwner->
_norm = 0 ;
 
 3318  name.append(
"_Proj[") ;
 
 3321    for(
auto const& arg : iset) {
 
 3327      name.append(arg->GetName()) ;
 
 3377  pc.
defineSet(
"supNormSet",
"SupNormSet",0,0) ;
 
 3378  pc.
defineInt(
"numScanBins",
"ScanParameters",0,1000) ;
 
 3379  pc.
defineInt(
"intOrder",
"ScanParameters",1,2) ;
 
 3380  pc.
defineInt(
"doScanNum",
"ScanNumCdf",0,1) ;
 
 3381  pc.
defineInt(
"doScanAll",
"ScanAllCdf",0,0) ;
 
 3382  pc.
defineInt(
"doScanNon",
"ScanNoCdf",0,0) ;
 
 3383  pc.
defineMutex(
"ScanNumCdf",
"ScanAllCdf",
"ScanNoCdf") ;
 
 3386  pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
 
 3415      coutI(NumIntegration) << 
"RooAbsPdf::createCdf(" << 
GetName() << 
") integration over observable(s) " << iset << 
" involves numeric integration," << endl
 
 3416             << 
"      constructing cdf though numeric integration of sampled pdf in " << numScanBins << 
" bins and applying order " 
 3417             << intOrder << 
" interpolation on integrated histogram." << endl
 
 3418             << 
"      To override this choice of technique use argument ScanNone(), to change scan parameters use ScanParameters(nbins,order) argument" << endl ;
 
 3430  ivar->
setBins(numScanBins,
"numcdf") ;
 
 3431  auto ret = std::make_unique<RooNumCdf>(
name.c_str(),
name.c_str(),*
this,*ivar,
"numcdf");
 
 3432  ret->setInterpolationOrder(intOrder) ;
 
 3444                                        bool stripDisconnected, 
bool removeConstraintsFromPdf)
 const 
 3449  for (
const auto arg : *comps) {
 
 3450    auto pdf = 
dynamic_cast<const RooAbsPdf*
>(arg) ;
 
 3451    if (pdf && !ret->
find(pdf->GetName())) {
 
 3452      std::unique_ptr<RooArgSet> compRet(
 
 3453              pdf->getConstraints(observables,constrainedParams,stripDisconnected,removeConstraintsFromPdf));
 
 3455        ret->
add(*compRet,
false) ;
 
 3508  if (config) 
return config ;
 
 3540  delete _genContext ;
 
 3547             bool extended, 
bool randProto, 
bool resampleProto, 
TString dsetName, 
bool init) :
 
 3548  _genContext(context), _whatVars(whatVars), _protoData(protoData), _nGen(nGen), _extended(extended),
 
 3549  _randProto(randProto), _resampleProto(resampleProto), _dsetName(dsetName), _init(init)
 
 3556void sterilizeClientCaches(
RooAbsArg & arg) {
 
 3558  for(std::size_t iClient = 0; iClient < 
clients.
size(); ++iClient) {
 
 3560    const std::size_t oldClientsSize = 
clients.
size();
 
 3563    for(
int iCache = 0; iCache < client->
numCaches(); ++iCache) {
 
 3565        cacheMgr->sterilize();
 
 3575        throw std::runtime_error(
"After a clients caches were cleared, the client was gone! This should not happen.");
 
 3596  sterilizeClientCaches(*
this);
 
 3616  sterilizeClientCaches(*
this);
 
 3630                                    bool nameChange, 
bool isRecursiveStep)
 
 3648std::unique_ptr<RooAbsArg>
 
 3654   std::unique_ptr<RooAbsPdf> pdfClone(
static_cast<RooAbsPdf *
>(this->
Clone()));
 
 3657   auto newArg = std::make_unique<RooNormalizedPdf>(*pdfClone, normSet);
 
 3661   for (
RooAbsArg *server : newArg->servers()) {
 
 3665   newArg->addOwnedComponents(std::move(pdfClone));
 
 3675   std::stringstream errMsg;
 
 3677          << 
" did not overload RooAbsPdf::createExpectedEventsFunc()!";
 
 3678   coutE(InputArguments) << errMsg.str() << std::endl;
 
header file containing the templated implementation of matrix inversion routines for use with ROOT's ...
 
std::unique_ptr< RooAbsReal > createConstraintTerm(std::string const &name, RooAbsPdf const &pdf, RooAbsData const &data, RooArgSet const *constrainedParameters, RooArgSet const *externalConstraints, RooArgSet const *globalObservables, const char *globalObservablesTag, bool takeGlobalObservablesFromData, bool removeConstraintsFromPdf)
Create the parameter constraint sum to add to the negative log-likelihood.
 
static void indent(ostringstream &buf, int indent_level)
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
class to compute the Cholesky decomposition of a matrix
 
bool Invert(M &m) const
place the inverse into m
 
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
 
void clearValueAndShapeDirty() const
 
void Print(Option_t *options=nullptr) const override
Print the object to the defaultPrintStream().
 
bool dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr, bool valueOnly=false) const
Test whether we depend on (ie, are served by) any object in the specified collection.
 
void setOperMode(OperMode mode, bool recurseADirty=true)
Set the operation mode of this node.
 
void setStringAttribute(const Text_t *key, const Text_t *value)
Associate string 'value' to this object under key 'key'.
 
RooFit::OwningPtr< RooArgSet > getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
 
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
 
bool addOwnedComponents(const RooAbsCollection &comps)
Take ownership of the contents of 'comps'.
 
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
 
virtual std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const
 
RooFit::OwningPtr< RooArgSet > getComponents() const
Create a RooArgSet with all components (branch nodes) of the expression tree headed by this object.
 
void removeStringAttribute(const Text_t *key)
Delete a string attribute with a given key.
 
bool getAttribute(const Text_t *name) const
Check if a named attribute is set. By default, all attributes are unset.
 
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
 
RooAbsCache * getCache(Int_t index) const
Return registered cache object by index.
 
const RefCountList_t & clients() const
List of all clients of this object.
 
bool isValueDirty() const
 
virtual void applyWeightSquared(bool flag)
Disables or enables the usage of squared weights.
 
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
 
void setProxyNormSet(const RooArgSet *nset)
Forward a change in the cached normalization argset to all the registered proxies.
 
void branchNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool recurseNonDerived=false) const
Fill supplied list with all branch nodes of the arg tree starting with ourself as top node.
 
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
 
RefCountList_t _serverList
 
Int_t numCaches() const
Return number of registered caches.
 
RooAbsArg * findServer(const char *name) const
Return server of this with name name. Returns nullptr if not found.
 
OperMode operMode() const
Query the operation mode of this node.
 
RooAbsArg * _owner
! Pointer to owning RooAbsArg
 
void setInterpolationOrder(Int_t order)
Set interpolation order of RooHistFunct representing cache histogram.
 
RooAbsCategoryLValue is the common abstract base class for objects that represent a discrete value th...
 
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
 
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
 
Int_t getSize() const
Return the number of elements in the collection.
 
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
 
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
 
RooAbsArg * first() const
 
virtual bool addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
 
RooAbsCollection * selectByName(const char *nameList, bool verbose=false) const
Create a subset of the current collection, consisting only of those elements with names matching the ...
 
bool selectCommon(const RooAbsCollection &refColl, RooAbsCollection &outColl) const
Create a subset of the current collection, consisting only of those elements that are contained as we...
 
std::string contentsString() const
Return comma separated list of contained object names as STL string.
 
RooAbsArg * find(const char *name) const
Find object with given name in list.
 
void Print(Option_t *options=nullptr) const override
This method must be overridden when a class wants to print itself.
 
RooAbsData is the common abstract base class for binned and unbinned datasets.
 
virtual const RooArgSet * get() const
 
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
 
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
 
virtual void setExpectedData(bool)
 
virtual RooDataSet * generate(double nEvents=0, bool skipInit=false, bool extendedMode=false)
Generate the specified number of events with nEvents>0 and and return a dataset containing the genera...
 
virtual void setProtoDataOrder(Int_t *lut)
Set the traversal order of prototype data to that in the lookup tables passed as argument.
 
Normalization set with for above integral.
 
~CacheElem() override
Destructor of normalization cache element.
 
RooAbsGenContext * _genContext
 
GenSpec * prepareMultiGen(const RooArgSet &whatVars, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none())
Prepare GenSpec configuration object for efficient generation of multiple datasets from identical spe...
 
virtual bool syncNormalization(const RooArgSet *dset, bool adjustProxies=true) const
Verify that the normalization integral cached with this PDF is valid for given set of normalization o...
 
int calcSumW2CorrectedCovariance(RooMinimizer &minimizer, RooAbsReal &nll) const
Apply correction to errors and covariance matrix.
 
double getNorm(const RooArgSet &nset) const
Get normalisation term needed to normalise the raw values returned by getVal().
 
std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const override
 
RooObjCacheManager _normMgr
 
std::unique_ptr< RooNumGenConfig > _specGeneratorConfig
! MC generator configuration specific for this object
 
double getValV(const RooArgSet *set=nullptr) const override
Return current value, normalized by integrating over the observables in nset.
 
RooAbsReal * createChi2(RooDataHist &data, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) override
Create a  from a histogram and this function.
 
bool _selectComp
Component selection flag for RooAbsPdf::plotCompOn.
 
virtual void generateEvent(Int_t code)
Interface for generation of an event using the algorithm corresponding to the specified code.
 
RooFit::OwningPtr< RooAbsReal > createScanCdf(const RooArgSet &iset, const RooArgSet &nset, Int_t numScanBins, Int_t intOrder)
 
void logBatchComputationErrors(RooSpan< const double > &outputs, std::size_t begin) const
Scan through outputs and fix+log all nans and negative values.
 
RooSpan< const double > getLogProbabilities(RooBatchCompute::RunContext &evalData, const RooArgSet *normSet=nullptr) const
Compute the log-likelihoods for all events in the requested batch.
 
void setGeneratorConfig()
Remove the specialized numeric MC generator configuration associated with this object.
 
virtual void resetErrorCounters(Int_t resetValue=10)
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
 
static int verboseEval()
Return global level of verbosity for p.d.f. evaluations.
 
RooFit::OwningPtr< RooAbsReal > createCdf(const RooArgSet &iset, const RooArgSet &nset=RooArgSet())
Create a cumulative distribution function of this p.d.f in terms of the observables listed in iset.
 
bool isActiveNormSet(RooArgSet const *normSet) const
Checks if normSet is the currently active normalization set of this PDF, meaning is exactly the same ...
 
virtual double expectedEvents(const RooArgSet *nset) const
Return expected number of events to be used in calculation of extended likelihood.
 
RooFit::OwningPtr< RooDataSet > generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
 
virtual RooAbsGenContext * binnedGenContext(const RooArgSet &vars, bool verbose=false) const
Return a binned generator context.
 
TString _normRange
Normalization range.
 
virtual bool isDirectGenSafe(const RooAbsArg &arg) const
Check if given observable can be safely generated using the pdfs internal generator mechanism (if tha...
 
virtual RooFit::OwningPtr< RooAbsReal > createNLL(RooAbsData &data, const RooLinkedList &cmdList={})
Construct representation of -log(L) of PDF with given dataset.
 
Int_t * randomizeProtoOrder(Int_t nProto, Int_t nGen, bool resample=false) const
Return lookup table with randomized order for nProto prototype events.
 
virtual RooFit::OwningPtr< RooFitResult > fitTo(RooAbsData &data, const RooLinkedList &cmdList={})
Fit PDF to given dataset.
 
void setNormRange(const char *rangeName)
 
~RooAbsPdf() override
Destructor.
 
RooArgSet const  * _normSet
Normalization integral (owned by _normMgr)
 
RooNumGenConfig * specialGeneratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
 
virtual RooPlot * paramOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none())
Add a box with parameter values (and errors) to the specified frame.
 
virtual bool selfNormalized() const
Shows if a PDF is self-normalized, which means that no attempt is made to add a normalization term.
 
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Print multi line detailed information of this RooAbsPdf.
 
Int_t _traceCount
Number of traces remaining to print.
 
bool canBeExtended() const
If true, PDF can provide extended likelihood term.
 
int calcAsymptoticCorrectedCovariance(RooMinimizer &minimizer, RooAbsData const &data)
Use the asymptotically correct approach to estimate errors in the presence of weights.
 
void setTraceCounter(Int_t value, bool allNodes=false)
Reset trace counter to given value, limiting the number of future trace messages for this pdf to 'val...
 
virtual RooFit::OwningPtr< RooDataHist > generateBinned(const RooArgSet &whatVars, double nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none()) const
As RooAbsPdf::generateBinned(const RooArgSet&, const RooCmdArg&,const RooCmdArg&, const RooCmdArg&,...
 
Int_t _errorCount
Number of errors remaining to print.
 
virtual std::unique_ptr< RooAbsReal > createExpectedEventsFunc(const RooArgSet *nset) const
Returns an object that represents the expected number of events for a given normalization set,...
 
Int_t _negCount
Number of negative probablities remaining to print.
 
std::unique_ptr< RooFitResult > minimizeNLL(RooAbsReal &nll, RooAbsData const &data, MinimizerConfig const &cfg)
Minimizes a given NLL variable by finding the optimal parameters with the RooMinimzer.
 
virtual const RooAbsReal * getNormObj(const RooArgSet *set, const RooArgSet *iset, const TNamed *rangeName=nullptr) const
Return pointer to RooAbsReal object that implements calculation of integral over observables iset in ...
 
void setActiveNormSet(RooArgSet const *normSet) const
Setter for the _normSet member, which should never be set directly.
 
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Analytical integral with normalization (see RooAbsReal::analyticalIntegralWN() for further informatio...
 
void setNormRangeOverride(const char *rangeName)
 
virtual RooFit::OwningPtr< RooDataSet > generateSimGlobal(const RooArgSet &whatVars, Int_t nEvents)
Special generator interface for generation of 'global observables' – for RooStats tools.
 
double normalizeWithNaNPacking(double rawVal, double normVal) const
 
virtual RooAbsGenContext * autoGenContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false, bool autoBinned=true, const char *binnedTag="") const
 
RooArgSet * getAllConstraints(const RooArgSet &observables, RooArgSet &constrainedParams, bool stripDisconnected=true, bool removeConstraintsFromPdf=false) const
This helper function finds and collects all constraints terms of all component p.d....
 
const RooNumGenConfig * getGeneratorConfig() const
Return the numeric MC generator configuration used for this object.
 
virtual void initGenerator(Int_t code)
Interface for one-time initialization to setup the generator for the specified code.
 
virtual ExtendMode extendMode() const
Returns ability of PDF to provide extended likelihood terms.
 
RooAbsPdf()
Default constructor.
 
bool traceEvalPdf(double value) const
Check that passed value is positive and not 'not-a-number'.
 
static RooNumGenConfig * defaultGeneratorConfig()
Returns the default numeric MC generator configuration for all RooAbsReals.
 
bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep) override
The cache manager.
 
RooFit::OwningPtr< RooFitResult > chi2FitTo(RooDataHist &data, const RooLinkedList &cmdList) override
Calls RooAbsPdf::createChi2(RooDataSet& data, const RooLinkedList& cmdList) and returns fit result.
 
void printValue(std::ostream &os) const override
Print value of p.d.f, also print normalization integral that was last used, if any.
 
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false) const
Interface function to create a generator context from a p.d.f.
 
static TString _normRangeOverride
 
static Int_t _verboseEval
 
double extendedTerm(double sumEntries, double expected, double sumEntriesW2=0.0, bool doOffset=false) const
 
virtual Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, bool staticInitOK=true) const
Load generatedVars with the subset of directVars that we can generate events for, and return a code t...
 
virtual RooAbsPdf * createProjection(const RooArgSet &iset)
Return a p.d.f that represent a projection of this p.d.f integrated over given observables.
 
virtual double getLogVal(const RooArgSet *set=nullptr) const
Return the log of the current value with given normalization An error message is printed if the argum...
 
RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none(), const RooCmdArg &arg9=RooCmdArg::none(), const RooCmdArg &arg10=RooCmdArg::none()) const override
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
 
bool hasRange(const char *name) const override
Check if variable has a binning with given name.
 
std::pair< double, double > getRange(const char *name=nullptr) const
Get low and high bound of the variable.
 
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
 
RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, double scaleFactor, bool correctForBinVolume=false, bool showProgress=false) const
Fill a RooDataHist with values sampled from this function at the bin centers.
 
void plotOnCompSelect(RooArgSet *selNodes) const
Helper function for plotting of composite p.d.fs.
 
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
 
RooFit::OwningPtr< RooFitResult > chi2FitDriver(RooAbsReal &fcn, RooLinkedList &cmdList)
Internal driver function for chi2 fits.
 
RooFit::OwningPtr< RooAbsReal > createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables std::liste...
 
bool plotSanityChecks(RooPlot *frame) const
Utility function for plotOn(), perform general sanity check on frame to ensure safe plotting operatio...
 
RooDerivative * derivative(RooRealVar &obs, Int_t order=1, double eps=0.001)
Return function representing first, second or third order derivative of this function.
 
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg(), const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg(), const RooCmdArg &arg10=RooCmdArg()) const
Plot (project) PDF on specified frame.
 
virtual RooSpan< const double > getValues(RooBatchCompute::RunContext &evalData, const RooArgSet *normSet=nullptr) const
 
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Structure printing.
 
bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep) override
A buffer for reading values from trees.
 
double _value
Cache for current value of object.
 
virtual double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
 
static void setEvalErrorLoggingMode(ErrorLoggingMode m)
Set evaluation error logging mode.
 
TString integralNameSuffix(const RooArgSet &iset, const RooArgSet *nset=nullptr, const char *rangeName=nullptr, bool omitEmpty=false) const
Construct std::string with unique suffix name to give to integral object that encodes integrated obse...
 
virtual double evaluate() const =0
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
 
void logEvalError(const char *message, const char *serverValueString=nullptr) const
Log evaluation error message.
 
const RooNumIntConfig * getIntegratorConfig() const
Return the numeric integration configuration used for this object.
 
virtual bool isBinnedDistribution(const RooArgSet &) const
Tests if the distribution is binned. Unless overridden by derived classes, this always returns false.
 
RooFit::OwningPtr< RooAbsReal > createIntRI(const RooArgSet &iset, const RooArgSet &nset={})
Utility function for createRunningIntegral.
 
virtual double offset() const
 
RooAddition calculates the sum of a set of RooAbsReal terms, or when constructed with two sets,...
 
RooArgList is a container object that can hold multiple RooAbsArg objects.
 
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
 
RooArgSet is a container object that can hold multiple RooAbsArg objects.
 
RooBinnedGenContext is an efficient implementation of the generator context specific for binned pdfs.
 
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
 
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Getter function without integration set.
 
RooCachedReal is an implementation of RooAbsCachedReal that can cache any external RooAbsReal input f...
 
void setCacheSource(bool flag)
 
RooChi2Var implements a simple  calculation from a binned dataset and a PDF.
 
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
 
void setInt(Int_t idx, Int_t value)
 
Int_t getInt(Int_t idx) const
 
void setString(Int_t idx, const char *value)
 
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
 
bool defineObject(const char *name, const char *argName, Int_t setNum, const TObject *obj=nullptr, bool isArray=false)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
 
double getDouble(const char *name, double defaultValue=0.0)
Return double property registered with name 'name'.
 
RooArgSet * getSet(const char *name, RooArgSet *set=nullptr)
Return RooArgSet property registered with name 'name'.
 
void defineMutex(const char *head, Args_t &&... tail)
Define arguments where any pair is mutually exclusive.
 
bool process(const RooCmdArg &arg)
Process given RooCmdArg.
 
bool hasProcessed(const char *cmdName) const
Return true if RooCmdArg with name 'cmdName' has been processed.
 
Int_t getInt(const char *name, Int_t defaultValue=0)
Return integer property registered with name 'name'.
 
static void stripCmdList(RooLinkedList &cmdList, const char *cmdsToPurge)
Utility function that strips command names listed (comma separated) in cmdsToPurge from cmdList.
 
bool defineInt(const char *name, const char *argName, Int_t intNum, Int_t defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
 
bool defineString(const char *name, const char *argName, Int_t stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
 
bool ok(bool verbose) const
Return true of parsing was successful.
 
TObject * getObject(const char *name, TObject *obj=nullptr)
Return TObject property registered with name 'name'.
 
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false)
Return string property registered with name 'name'.
 
void allowUndefined(bool flag=true)
If flag is true the processing of unrecognized RooCmdArgs is not considered an error.
 
bool defineSet(const char *name, const char *argName, Int_t setNum, const RooArgSet *set=nullptr)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
 
RooLinkedList filterCmdList(RooLinkedList &cmdInList, const char *cmdNameList, bool removeFromInList=true) const
Utility function to filter commands listed in cmdNameList from cmdInList.
 
bool defineDouble(const char *name, const char *argName, Int_t doubleNum, double defValue=0.0)
Define double property name 'name' mapped to double in slot 'doubleNum' in RooCmdArg with name argNam...
 
The RooDataHist is a container class to hold N-dimensional binned data.
 
RooDataSet is a container class to hold unbinned data.
 
void markAsCompiled(RooAbsArg &arg) const
 
void compileServers(RooAbsArg &arg, RooArgSet const &normSet)
 
Class RooGenContext implement a universal generator context for all RooAbsPdf classes that do not hav...
 
Switches the message service to a different level while the instance is alive.
 
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
 
virtual void Add(TObject *arg)
 
TObject * FindObject(const char *name) const override
Return pointer to obejct with given name.
 
RooMinimizer is a wrapper class around ROOT::Fit:Fitter that provides a seamless interface between th...
 
RooFit::OwningPtr< RooFitResult > save(const char *name=nullptr, const char *title=nullptr)
Save and return a RooFitResult snapshot of current minimizer status.
 
int hesse()
Execute HESSE.
 
void applyCovarianceMatrix(TMatrixDSym const &V)
Apply results of given external covariance matrix.
 
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
 
RooNumGenConfig holds the configuration parameters of the various numeric integrators used by RooReal...
 
static RooNumGenConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
 
Class RooObjCacheManager is an implementation of class RooCacheManager<RooAbsCacheElement> and specia...
 
void sterilize() override
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
 
A RooPlot is a plot frame and a container for graphics objects within that frame.
 
void addObject(TObject *obj, Option_t *drawOptions="", bool invisible=false)
Add a generic object to this plot.
 
double getFitRangeNEvt() const
Return the number of events in the fit range.
 
const RooArgSet * getNormVars() const
 
RooAbsRealLValue * getPlotVar() const
 
void updateNormVars(const RooArgSet &vars)
Install the given set of observables are reference normalization variables for this frame.
 
double getFitRangeBinW() const
Return the bin width that is being used to normalise the PDF.
 
virtual void printStream(std::ostream &os, Int_t contents, StyleOption style, TString indent="") const
Print description of object on ostream, printing contents set by contents integer,...
 
Class RooProjectedPdf is a RooAbsPdf implementation that represent a projection of a given input p....
 
static UInt_t integer(UInt_t max, TRandom *generator=randomGenerator())
Return an integer uniformly distributed from [0,n-1].
 
static TRandom * randomGenerator()
Return a pointer to a singleton random-number generator implementation.
 
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects.
 
const RooArgSet & numIntRealVars() const
 
RooRealVar represents a variable that can be changed from the outside.
 
TString * format(const RooCmdArg &formatArg) const
Format contents of RooRealVar for pretty printing on RooPlot parameter boxes.
 
void setRange(const char *name, double min, double max)
Set a fit or plotting range.
 
void setBins(Int_t nBins, const char *name=nullptr)
Create a uniform binning under name 'name' for this variable.
 
Container_t::const_iterator begin() const
Iterator over contained objects.
 
Container_t::const_iterator end() const
End of contained objects.
 
std::size_t size() const
Number of contained objects (neglecting the ref count).
 
RooSimultaneous facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
 
A simple container to hold a batch of data values.
 
constexpr std::size_t size() const noexcept
 
constexpr std::span< T >::pointer data() const
 
RooXYChi2Var implements a simple chi^2 calculation from an unbinned dataset with values x,...
 
TMatrixTSym< Element > & Similarity(const TMatrixT< Element > &n)
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform w...
 
The TNamed class is the base class for all named ROOT classes.
 
const char * GetName() const override
Returns name of object.
 
const char * GetTitle() const override
Returns title of object.
 
Mother of all ROOT objects.
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
 
A Pave (see TPave) with text, lines or/and boxes inside.
 
virtual Int_t Poisson(Double_t mean)
Generates a random integer N according to a Poisson law.
 
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
 
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
 
void ToLower()
Change string to lower-case.
 
void Clear()
Clear string without changing its capacity.
 
const char * Data() const
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
 
RooCmdArg SupNormSet(const RooArgSet &nset)
 
RooCmdArg WeightVar(const char *name="weight", bool reinterpretAsWeight=false)
 
RooCmdArg Hesse(bool flag=true)
 
RooCmdArg ModularL(bool flag=false)
 
RooCmdArg PrintLevel(Int_t code)
 
RooCmdArg BatchMode(std::string const &batchMode="cpu")
 
RooCmdArg NormRange(const char *rangeNameList)
 
RooCmdArg Range(const char *rangeName, bool adjustNorm=true)
 
RooCmdArg Normalization(double scaleFactor)
 
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
 
std::unique_ptr< RooAbsReal > createNLL(RooAbsPdf &pdf, RooAbsData &data, std::unique_ptr< RooAbsReal > &&constraints, std::string const &rangeName, RooArgSet const &projDeps, bool isExtended, double integrateOverBinsPrecision, RooFit::OffsetMode offset)
 
OwningPtr< T > owningPtr(std::unique_ptr< T > &&ptr)
Internal helper to turn a std::unique_ptr<T> into an OwningPtr.
 
std::unique_ptr< T > compileForNormSet(T const &arg, RooArgSet const &normSet)
 
std::string & defaultBatchMode()
Get a handle on the default BatchMode option that is used when creating likelihoods.
 
OffsetMode
For setting the offset mode with the Offset() command argument to RooAbsPdf::fitTo()
 
BatchModeOption
For setting the batch mode flag with the BatchMode() command argument to RooAbsPdf::fitTo()
 
T * OwningPtr
An alias for raw pointers for indicating that the return type of a RooFit function is an owning point...
 
std::unique_ptr< T > cloneTreeWithSameParameters(T const &arg, RooArgSet const *observables=nullptr)
Clone RooAbsArg object and reattach to original parameters.
 
RooArgSet selectFromArgSet(RooArgSet const &, std::string const &names)
Construct a RooArgSet of objects in a RooArgSet whose names match to those in the names string.
 
std::string getColonSeparatedNameString(RooArgSet const &argSet)
Create a string with all sorted names of RooArgSet elements separated by colons.
 
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754.
 
Configuration struct for RooAbsPdf::minimizeNLL with all the default.
 
bool enableParallelGradient
 
bool enableParallelDescent
 
const RooArgSet * minosSet
 
std::string rangeName
Stores the configuration parameters for RooAbsTestStatistic.
 
std::string addCoefRangeName
 
bool takeGlobalObservablesFromData
 
double integrateOverBinsPrecision
 
RooFit::MPSplit interleave
 
This struct enables passing computation data around between elements of a computation graph.
 
std::vector< double > logProbabilities
Possibility to register log probabilities.
 
Config argument to RooMinimizer ctor.
 
bool enableParallelDescent
 
bool enableParallelGradient
 
__roodevice__ static __roohost__ double packFloatIntoNaN(float payload)
Pack float into mantissa of a NaN.