109#include <sys/types.h>
138 RooAbsArg(
name,title), _plotMin(0), _plotMax(0), _plotBins(100),
139 _value(0), _unit(unit), _forceNumInt(false), _specIntegratorConfig(0), _selectComp(true), _lastNSet(0)
152 double inMaxVal,
const char *unit) :
153 RooAbsArg(
name,title), _plotMin(inMinVal), _plotMax(inMaxVal), _plotBins(100),
154 _value(0), _unit(unit), _forceNumInt(false), _specIntegratorConfig(0), _selectComp(true), _lastNSet(0)
166 RooAbsArg(other,
name), _plotMin(other._plotMin), _plotMax(other._plotMax),
167 _plotBins(other._plotBins), _value(other._value), _unit(other._unit), _label(other._label),
168 _forceNumInt(other._forceNumInt), _selectComp(other._selectComp), _lastNSet(0)
213 if (!assumeSameType) {
229 if(appendUnit && 0 != strlen(
getUnit())) {
281 auto item = evalData.
spans.find(
this);
282 if (item != evalData.
spans.end()) {
288 std::map<RooFit::Detail::DataKey, RooSpan<const double>> dataSpans;
289 for (
auto const &evalDataItem : evalData.
spans) {
290 dataSpans[evalDataItem.first] = evalDataItem.second;
293 std::unique_ptr<RooAbsReal>
clone = RooFit::Detail::compileForNormSet<RooAbsReal>(*
this, normSet ? *normSet :
RooArgSet{});
295 driver.setData(dataSpans);
297 results = driver.getValues();
298 evalData.
spans[
this] = results;
305 std::unique_ptr<RooAbsReal>
clone = RooFit::Detail::compileForNormSet<RooAbsReal>(*
this, *
data.get());
343 <<
"): validation failed: " <<
value << std::endl ;
363 const RooArgSet* ,
const char* rangeName)
const
394 if (code==0)
return getVal(normSet) ;
408 coutF(Eval) <<
"RooAbsReal::analyticalIntegral(" <<
GetName() <<
") code " << code <<
" not implemented" << std::endl ;
469 os <<
indent <<
"--- RooAbsReal ---" << std::endl;
487 for (
auto const& arg : paramsOfInterest) {
493 name.append(arg->GetName()) ;
532 pc.
defineString(
"rangeName",
"RangeWithName",0,
"",
true) ;
537 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
543 const char* rangeName = pc.
getString(
"rangeName",0,
true) ;
568 if (!rangeName || strchr(rangeName,
',')==0) {
574 std::vector<std::string> tokens =
ROOT::Split(rangeName,
",");
577 std::stringstream errMsg;
578 errMsg <<
GetName() <<
" : integrating with respect to the variables " << iset <<
" on the ranges \"" << rangeName
579 <<
"\" is not possible because the ranges are overlapping";
580 const std::string errMsgString = errMsg.str();
581 coutE(Integration) << errMsgString << std::endl;
582 throw std::invalid_argument(errMsgString);
586 for (
const std::string& token : tokens) {
591 title.
Prepend(
"Integral of ") ;
595 auto out = std::make_unique<RooAddition>(fullName.
Data(), title.
Data(), components);
596 out->addOwnedComponents(std::move(components));
597 return RooFit::Detail::owningPtr<RooAbsReal>(std::move(out));
615 std::unique_ptr<RooAbsReal> integral;
620 const std::string title = std::string(
"Integral of ") +
GetTitle();
623 auto out = std::make_unique<RooRealIntegral>(
name.c_str(), title.c_str(), *
this, iset, nset, cfg, rangeName);
624 return RooFit::Detail::owningPtr<RooAbsReal>(std::move(out));
628 while(!iset.
empty()) {
637 if (innerSet.
empty()) {
643 const std::string title = std::string(
"Integral of ") + integrand->
GetTitle();
646 std::unique_ptr<RooAbsReal> innerIntegral = std::move(integral);
649 integral = std::make_unique<RooRealIntegral>(
name.c_str(),title.c_str(),*integrand,innerSet,nset,cfg,rangeName);
653 integral->addOwnedComponents(std::move(innerIntegral));
660 if (integrand ==
this && !iset.
empty()) {
661 coutI(Integration) <<
GetName() <<
" : multidimensional integration over observables with parameterized ranges in terms of other integrated observables detected, using recursive integration strategy to construct final integral" << std::endl ;
665 integrand = integral.get();
673 coutE(Integration) <<
GetName() <<
" : ERROR while defining recursive integral over observables with parameterized integration ranges, please check that integration rangs specify uniquely defined integral " << std::endl;
680 if (cacheParamsStr && strlen(cacheParamsStr)) {
682 std::unique_ptr<RooArgSet> intParams{integral->getVariables()};
686 if (!cacheParams.
empty()) {
687 cxcoutD(Caching) <<
"RooAbsReal::createIntObj(" <<
GetName() <<
") INFO: constructing " << cacheParams.
size()
688 <<
"-dim value cache for integral over " << iset2 <<
" as a function of " << cacheParams <<
" in range " << (rangeName?rangeName:
"<none>") << std::endl ;
690 auto cachedIntegral = std::make_unique<RooCachedReal>(
name.c_str(),
name.c_str(),*integral,cacheParams);
691 cachedIntegral->setInterpolationOrder(2) ;
692 cachedIntegral->addOwnedComponents(std::move(integral));
693 cachedIntegral->setCacheSource(
true) ;
694 if (integral->operMode()==
ADirty) {
695 cachedIntegral->setOperMode(
ADirty) ;
698 return RooFit::Detail::owningPtr<RooAbsReal>(std::move(cachedIntegral));
726 for (
const auto aarg : allObs) {
741 obsWithParamRange.
add(*aarg) ;
742 obsWithFixedRange.
remove(*aarg) ;
743 obsServingAsRangeParams.
add(loBoundObs,
false) ;
744 obsServingAsRangeParams.
add(hiBoundObs,
false) ;
751 RooArgSet obsWithFixedRangeNP(obsWithFixedRange) ;
752 obsWithFixedRangeNP.
remove(obsServingAsRangeParams) ;
755 RooArgSet obsWithParamRangeNP(obsWithParamRange) ;
756 obsWithParamRangeNP.
remove(obsServingAsRangeParams) ;
760 innerObs.
add(obsWithFixedRangeNP) ;
761 innerObs.
add(obsWithParamRangeNP) ;
778 name.Append(
"_Int[") ;
786 name.Append(arg->GetName()) ;
790 name.Append(rangeName) ;
793 }
else if (!omitEmpty) {
794 name.Append(
"_Int[]") ;
797 if (nset && nset->
getSize()>0 ) {
802 name.Append(
"_Norm[") ;
810 name.Append(arg->GetName()) ;
872 for (
const auto arg : dependentVars) {
873 if(!arg->isFundamental() && !
dynamic_cast<const RooAbsLValue*
>(arg)) {
874 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":createPlotProjection: variable \"" << arg->GetName()
875 <<
"\" of wrong type: " << arg->ClassName() << std::endl;
882 <<
"\" is not a dependent and will be ignored." << std::endl;
887 leafNodes.
replace(*found,*arg);
889 leafNodes.
add(*arg) ;
893 arg->getObservables(&leafNodes, lvDep);
894 for (
const auto lvs : lvDep) {
898 leafNodes.
add(*lvs) ;
905 if(0 != projectedVars && projectedVars->
find(arg->GetName())) {
907 <<
"\" cannot be both a dependent and a projected variable." << std::endl;
913 if(0 != projectedVars) leafNodes.
remove(*projectedVars,
true);
918 coutE(Plotting) <<
"RooAbsPdf::createPlotProjection(" <<
GetName() <<
") Couldn't deep-clone PDF, abort," << std::endl ;
929 std::unique_ptr<RooArgSet> plotLeafNodes{
static_cast<RooArgSet*
>(leafNodes.
selectCommon(dependentVars))};
934 if(0 != projectedVars) normSet.
add(*projectedVars);
936 normSet.
remove(*condObs,
true,
true) ;
943 if(0 == projectedVars) projectedVars= ∅
949 title.
Prepend(
"Projection of ");
952 std::unique_ptr<RooAbsReal> projected{theClone->
createIntegral(*projectedVars,normSet,rangeName)};
954 if(
nullptr == projected || !projected->isValid()) {
955 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":createPlotProjection: cannot integrate out ";
964 projected->SetName(
name.Data()) ;
965 projected->SetTitle(title.
Data()) ;
969 cloneSet->
addOwned(std::move(projected));
994 double scaleFactor,
const RooArgSet *projectedVars,
bool scaleForDensity,
995 const RooArgSet* condObs,
bool setError)
const
999 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: no valid histogram to fill" << std::endl;
1005 if(hdim != plotVars.
getSize()) {
1006 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: plotVars has the wrong dimension" << std::endl;
1019 <<
"\" of type " << var->
ClassName() << std::endl;
1024 <<
":fillHistogram: WARNING: variable is not an explicit dependent: " << realVar->
GetName() << std::endl;
1026 plotClones.
addClone(*realVar,
true);
1036 if (projectedVars) {
1037 allDeps.
add(*projectedVars) ;
1040 coutE(InputArguments) <<
"RooAbsReal::fillHistogram(" <<
GetName() <<
") error in checkObservables, abort" << std::endl ;
1048 cxcoutD(Plotting) <<
"RooAbsReal::fillHistogram(" <<
GetName() <<
") plot projection object is " << projected->
GetName() << std::endl ;
1051 Int_t xbins(0),ybins(1),zbins(1);
1063 assert(0 != zvar && 0 != zaxis);
1064 if (scaleForDensity) {
1072 assert(0 != yvar && 0 != yaxis);
1073 if (scaleForDensity) {
1081 assert(0 != xvar && 0 != xaxis);
1082 if (scaleForDensity) {
1087 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillHistogram: cannot fill histogram with "
1088 << hdim <<
" dimensions" << std::endl;
1095 Int_t xbin(0),ybin(0),zbin(0);
1096 Int_t bins= xbins*ybins*zbins;
1097 for(
Int_t bin= 0; bin < bins; bin++) {
1100 if(bin % (xbins*ybins) == 0) {
1106 if(bin % xbins == 0) {
1107 ybin= (ybin%ybins) + 1;
1112 xbin= (xbin%xbins) + 1;
1116 coutE(InputArguments) <<
"RooAbsReal::fillHistogram: Internal Error!" << std::endl;
1122 coutW(Plotting) <<
"WARNING: Function evaluation error(s) at coordinates [x]=" << xvar->
getVal() ;
1123 if (hdim==2)
ccoutW(Plotting) <<
" [y]=" << yvar->
getVal() ;
1124 if (hdim==3)
ccoutW(Plotting) <<
" [z]=" << zvar->
getVal() ;
1125 ccoutW(Plotting) << std::endl ;
1167 bool correctForBinSize,
bool showProgress)
const
1171 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":fillDataHist: no valid RooDataHist to fill" << std::endl;
1178 coutE(InputArguments) <<
"RooAbsReal::fillDataHist(" <<
GetName() <<
") error in checkObservables, abort" << std::endl ;
1195 if (showProgress && (i%onePct==0)) {
1196 ccoutP(Eval) <<
"." << std::flush ;
1199 double binVal = theClone->
getVal(normSet?normSet:obs)*scaleFactor ;
1200 if (correctForBinSize) {
1203 hist->
set(i, binVal, 0.);
1229 std::vector<RooRealVar*> histVars(3,
nullptr);
1231 for(std::size_t iVar = 0; iVar < varNames.size(); ++iVar) {
1232 if(varNames[iVar].empty())
continue;
1234 std::stringstream errMsg;
1235 errMsg <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR more than three variable names passed, but maxumum number of supported variables is three";
1236 coutE(Plotting) << errMsg.str() << std::endl;
1237 throw std::invalid_argument(errMsg.str());
1239 auto var =
static_cast<RooRealVar*
>(vars->find(varNames[iVar].c_str()));
1241 std::stringstream errMsg;
1242 errMsg <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR variable " << varNames[iVar] <<
" does not exist in argset: " << *vars;
1243 coutE(Plotting) << errMsg.str() << std::endl;
1244 throw std::runtime_error(errMsg.str());
1246 histVars[iVar] = var;
1328 pc.
defineInt(
"intBinning",
"IntrinsicBinning",0,2) ;
1329 pc.
defineInt(
"extended",
"Extended",0,2) ;
1331 pc.
defineSet(
"compSet",
"SelectCompSet",0);
1333 pc.
defineSet(
"projObs",
"ProjectedObservables",0,0) ;
1336 pc.
defineMutex(
"SelectCompSet",
"SelectCompSpec") ;
1338 pc.
defineMutex(
"IntrinsicBinning",
"BinningName") ;
1339 pc.
defineMutex(
"IntrinsicBinning",
"BinningSpec") ;
1358 auto projObs = pc.
getSet(
"projObs");
1361 bool doScaling = pc.
getInt(
"scaling") ;
1367 if (!pdfSelf && doExtended == 1) {
1368 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName() <<
") WARNING extended mode requested for a non-pdf object, ignored" << std::endl ;
1372 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName() <<
") WARNING extended mode requested for a non-extendable pdf, ignored" << std::endl ;
1375 if (pdfSelf && doExtended==2) {
1377 }
else if(!pdfSelf) {
1381 const char* compSpec = pc.
getString(
"compSpec") ;
1383 bool haveCompSel = ( (compSpec && strlen(compSpec)>0) || compSet) ;
1385 std::unique_ptr<RooBinning> intBinning;
1386 if (doIntBinning>0) {
1391 if (doIntBinning==1) {
1392 coutW(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName()
1393 <<
") WARNING, intrinsic model binning requested for histogram, but model does not define bin boundaries, reverting to default binning"<< std::endl ;
1396 if (doIntBinning==2) {
1397 coutI(InputArguments) <<
"RooAbsReal::createHistogram(" <<
GetName()
1398 <<
") INFO: Model has intrinsic binning definition, selecting that binning for the histogram"<< std::endl ;
1400 std::vector<double> ba(bl->size());
1402 for (
auto const& elem : *bl) { ba[i++] = elem ; }
1403 intBinning = std::make_unique<RooBinning>(bl->size()-1,ba.data()) ;
1408 RooCmdConfig::stripCmdList(argListCreate,
"Scaling,ProjectedObservables,IntrinsicBinning,SelectCompSet,SelectCompSpec,Extended") ;
1413 argListCreate.
Add(&tmp) ;
1429 branchNodeSet.
remove(*arg) ;
1433 std::unique_ptr<RooArgSet> dirSelNodes;
1439 if (!dirSelNodes->empty()) {
1440 coutI(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") directly selected PDF components: " << *dirSelNodes << std::endl ;
1446 coutE(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR: component selection set " << *compSet <<
" does not match any components of p.d.f." << std::endl ;
1448 coutE(Plotting) <<
"RooAbsPdf::createHistogram(" <<
GetName() <<
") ERROR: component selection expression '" << compSpec <<
"' does not select any components of p.d.f." << std::endl ;
1454 double scaleFactor(1.0) ;
1460 fillHistogram(histo,vars,scaleFactor,intObs,doScaling,projObs,
false) ;
1487 for (
unsigned int i = 0; i < branchNodeSet.
size(); ++i) {
1488 const auto arg = branchNodeSet[i];
1490 branchNodeSet.
remove(*arg) ;
1497 for (
const auto arg : branchNodeSet) {
1506 for (
const auto arg : branchNodeSet) {
1507 for (
const auto selNode : *selNodes) {
1508 if (selNode->dependsOn(*arg)) {
1515 for (
const auto arg : branchNodeSet) {
1516 if (arg->dependsOn(*selNodes)) {
1521 tmp.
remove(*selNodes,
true);
1524 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") indirectly selected PDF components: " << tmp << std::endl ;
1527 for (
const auto arg : branchNodeSet) {
1528 bool select = selNodes->
find(arg->GetName()) !=
nullptr;
1682 argList.
Add(&rnorm) ;
1684 std::vector<std::string> rlist;
1688 rlist.emplace_back(rangeNameToken);
1691 for (
const auto& rangeString : rlist) {
1693 rcmd->
setString(0, rangeString.c_str());
1703 pc.
defineString(
"projectionRangeName",
"ProjectionRange",0,
"",
true) ;
1704 pc.
defineString(
"curveNameSuffix",
"CurveNameSuffix",0,
"") ;
1705 pc.
defineString(
"sliceCatState",
"SliceCat",0,
"",
true) ;
1708 pc.
defineSet(
"sliceSet",
"SliceVars",0) ;
1718 pc.
defineInt(
"doEvalError",
"EvalErrorValue",0,0) ;
1719 pc.
defineInt(
"shiftToZero",
"ShiftToZero",0,0) ;
1720 pc.
defineSet(
"projDataSet",
"ProjData",0) ;
1724 pc.
defineSet(
"errorPars",
"VisualizeError",0) ;
1725 pc.
defineInt(
"linearMethod",
"VisualizeError",0,0) ;
1726 pc.
defineInt(
"binProjData",
"ProjData",0,0) ;
1729 pc.
defineInt(
"numee",
"PrintEvalErrors",0,10) ;
1730 pc.
defineInt(
"rangeAdjustNorm",
"Range",0,0) ;
1731 pc.
defineInt(
"rangeWNAdjustNorm",
"RangeWithName",0,0) ;
1735 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
1736 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,-999) ;
1738 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
1739 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
1740 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
1741 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
1742 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
1744 pc.
defineInt(
"curveInvisible",
"Invisible",0,0) ;
1745 pc.
defineInt(
"showProg",
"ShowProgress",0,0) ;
1747 pc.
defineInt(
"interleave",
"NumCPU",1,0) ;
1751 pc.
defineInt(
"moveToBack",
"MoveToBack",0,0) ;
1755 pc.
defineMutex(
"VisualizeError",
"VisualizeErrorData") ;
1769 bool linMethod = pc.
getInt(
"linearMethod") ;
1770 if (!drawOpt.
Contains(
"P") && errFR) {
1791 std::unique_ptr<RooArgSet> sliceSet{sliceSetTmp ?
static_cast<RooArgSet*
>(sliceSetTmp->
Clone()) :
nullptr};
1797 const char* sliceCatState = pc.
getString(
"sliceCatState",0,
true) ;
1799 if (sliceCatState) {
1803 sliceSet = std::make_unique<RooArgSet>();
1808 auto iter = sliceCatList.
begin();
1809 for (
unsigned int i=0; i < catTokens.size(); ++i) {
1810 if (
auto scat =
static_cast<RooCategory*
>(*iter)) {
1812 scat->setLabel(catTokens[i]) ;
1814 sliceSet->add(*scat,
false) ;
1827 if (vlines==2) vlines=0 ;
1833 if (vlines==2) vlines=0 ;
1853 coutE(InputArguments) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") cannot find existing curve " << o.
addToCurveName <<
" to add to in RooPlot" << std::endl ;
1859 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have slice " << *sliceSet << std::endl ;
1864 for (
const auto sliceArg : *sliceSet) {
1867 projectedVars.
remove(*arg) ;
1869 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") slice variable "
1870 << sliceArg->GetName() <<
" was not projected anyway" << std::endl ;
1873 }
else if (projSet) {
1874 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have projSet " << *projSet << std::endl ;
1877 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: have neither sliceSet nor projSet " << std::endl ;
1882 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") Preprocessing: projectedVars = " << projectedVars << std::endl ;
1912 if ((fillColor != -999 || fillStyle != -999) && !drawOpt.
Contains(
"F")) {
1913 coutW(Plotting) <<
"Fill color or style was set for plotting \"" <<
GetName()
1914 <<
"\", but these only have an effect when 'DrawOption(\"F\")' for fill is used at the same time." << std::endl;
1954 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have ProjData with observables = " << *o.
projData->
get() << std::endl ;
1957 projDataVars.
add(*tmp) ;
1958 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have ProjDataSet = " << *o.
projDataSet <<
" will only use this subset of projData" << std::endl ;
1960 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") using full ProjData" << std::endl ;
1965 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") ProjDataVars = " << projDataVars << std::endl ;
1971 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") have input projSet = " << *o.
projSet << std::endl ;
1973 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") calculated projectedVars = " << *o.
projSet << std::endl ;
1980 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") frame->getNormVars() that are also observables = " << sliceSetTmp << std::endl ;
1982 sliceSetTmp.
remove(projectedVars,
true,
true) ;
1987 sliceSetTmp.
remove(*tmp,
true,
true) ;
1990 if (!sliceSetTmp.
empty()) {
1991 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on "
1992 << frame->
getPlotVar()->
GetName() <<
" represents a slice in " << sliceSetTmp << std::endl ;
1994 sliceSet.
add(sliceSetTmp) ;
2000 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") projectedVars = " << projectedVars <<
" sliceSet = " << sliceSet << std::endl ;
2007 projectedVars.
remove(projDataVars,
true,
true) ;
2012 double oldPlotVarVal = plotVar->
getVal();
2015 if (projectedVars.
getSize()) {
2016 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->GetName()
2017 <<
" integrates over variables " << projectedVars
2020 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2021 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2022 <<
" averages using data variables " << *projDataNeededVars << std::endl ;
2030 deps.
remove(projectedVars,
true,
true) ;
2031 if (projDataNeededVars) {
2032 deps.
remove(*projDataNeededVars,
true,
true) ;
2034 deps.
remove(*plotVar,
true,
true) ;
2035 deps.
add(*plotVar) ;
2041 coutE(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") error in checkObservables, abort" << std::endl ;
2042 if (projDataNeededVars)
delete projDataNeededVars ;
2047 cxcoutD(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot projection object is " << projection->
GetName() << std::endl ;
2054 fullNormSet.
add(projectedVars) ;
2055 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2056 fullNormSet.
add(*projDataNeededVars) ;
2059 std::unique_ptr<RooArgSet> projectionComponents(projection->
getComponents());
2060 for(
auto * pdf : dynamic_range_cast<RooAbsPdf*>(*projectionComponents)) {
2062 pdf->selectNormalization(&fullNormSet) ;
2067 if (o.
projData && projDataNeededVars && projDataNeededVars->
getSize()>0) {
2077 if (!sliceDataSet->empty()) {
2079 for(
RooAbsArg * sliceVar : *sliceDataSet) {
2096 if (!cutString.
IsNull()) {
2098 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") reducing given projection dataset to entries with " << cutString << std::endl ;
2103 <<
") only the following components of the projection data will be used: " << *projDataNeededVars << std::endl ;
2112 if (!
dynamic_cast<RooCategory*
>(arg2)) allCat =
false ;
2116 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") unbinned projection dataset consist only of discrete variables,"
2117 <<
" performing projection with binned copy for optimization." << std::endl ;
2125 if (projDataSel!=o.
projData)
delete projDataSel ;
2132 projection->
getVal(projDataSel->
get()) ;
2140 std::move(cfg),
true) ;
2194 if (projDataSel!=o.
projData)
delete projDataSel ;
2275 if (projDataNeededVars)
delete projDataNeededVars ;
2276 delete projectionCompList ;
2277 plotVar->setVal(oldPlotVarVal);
2297 projectedVars.
remove(*arg) ;
2299 coutI(Plotting) <<
"RooAbsReal::plotSliceOn(" <<
GetName() <<
") slice variable "
2300 << sliceArg->GetName() <<
" was not projected anyway" << std::endl ;
2342 projDataVars.
add(*tmp) ;
2350 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2351 <<
") function doesn't depend on asymmetry category " << asymCat.
GetName() << std::endl ;
2357 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2358 <<
") asymmetry category must have 2 or 3 states with index values -1,0,1" << std::endl ;
2372 sliceSetTmp.
remove(projectedVars,
true,
true) ;
2377 sliceSetTmp.
remove(*tmp,
true,
true) ;
2380 if (!sliceSetTmp.
empty()) {
2381 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") plot on "
2382 << frame->
getPlotVar()->
GetName() <<
" represents a slice in " << sliceSetTmp << std::endl ;
2384 sliceSet.
add(sliceSetTmp) ;
2395 projectedVars.
remove(projDataVars,
true,
true) ;
2408 if (projectedVars.
getSize()) {
2409 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2410 <<
" projects variables " << projectedVars << std::endl ;
2412 if (projDataNeededVars && projDataNeededVars->
getSize()>0) {
2413 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") plot on " << plotVar->
GetName()
2414 <<
" averages using data variables "<< *projDataNeededVars << std::endl ;
2422 asymNeg->setIndex(-1) ;
2428 custNeg.replaceArg(asymCat,*asymNeg) ;
2429 std::unique_ptr<RooAbsReal> funcPos{
static_cast<RooAbsReal*
>(custPos.build())};
2430 std::unique_ptr<RooAbsReal> funcNeg{
static_cast<RooAbsReal*
>(custNeg.build())};
2433 RooArgSet *posProjCompList, *negProjCompList ;
2439 depPos.
add(projDataVars) ;
2440 depNeg.
add(projDataVars) ;
2444 if (!posProj || !negProj) {
2445 coutE(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName() <<
") Unable to create projections, abort" << std::endl ;
2451 asymName.
Append(
"_Asym[") ;
2455 asymTitle.
Append(
" Asymmetry of ") ;
2468 if (!sliceDataSet->
empty()) {
2470 for(
RooAbsArg * sliceVar : *sliceDataSet) {
2486 delete sliceDataSet ;
2488 if (!cutString.
IsNull()) {
2490 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2491 <<
") reducing given projection dataset to entries with " << cutString << std::endl ;
2495 coutI(Plotting) <<
"RooAbsReal::plotAsymOn(" <<
GetName()
2496 <<
") only the following components of the projection data will be used: " << *projDataNeededVars << std::endl ;
2504 std::move(cfg),
true) ;
2510 ((
RooAbsReal*)posProj)->attachDataSet(*projDataSel) ;
2511 ((
RooAbsReal*)negProj)->attachDataSet(*projDataSel) ;
2522 TString curveName(funcAsym.GetName()) ;
2535 RooCurve *curve =
new RooCurve(funcAsym.GetName(),funcAsym.GetTitle(),scaleBind,
2543 ccoutW(Eval) << std::endl ;
2545 if (projDataSel!=o.
projData)
delete projDataSel ;
2564 TString curveName(funcAsym.GetName()) ;
2580 delete posProjCompList ;
2581 delete negProjCompList ;
2611 for(
auto * rrvFitRes : static_range_cast<RooRealVar*>(fr.
floatParsFinal())) {
2613 auto rrvInAbsReal =
static_cast<RooRealVar const*
>(allParamsInAbsReal.
find(*rrvFitRes));
2620 if (rrvFitRes->getError() <= std::abs(rrvFitRes->getVal()) * std::numeric_limits<double>::epsilon())
continue;
2623 if(!rrvInAbsReal)
continue;
2627 if(std::abs(rrvInAbsReal->getVal() - rrvFitRes->getVal()) > 0.01 * rrvFitRes->getError()) {
2628 std::stringstream errMsg;
2629 errMsg <<
"RooAbsReal::getPropagatedError(): the parameters of the RooAbsReal don't have"
2630 <<
" the same values as in the fit result! The logic of getPropagatedError is broken in this case.";
2632 throw std::runtime_error(errMsg.str());
2635 paramList.
add(*rrvInAbsReal);
2638 std::vector<double> plusVar;
2639 std::vector<double> minusVar;
2640 plusVar.reserve(paramList.
size());
2641 minusVar.reserve(paramList.
size());
2648 for (
Int_t ivar=0 ; ivar<paramList.
getSize() ; ivar++) {
2650 auto& rrv =
static_cast<RooRealVar&
>(paramList[ivar]);
2652 double cenVal = rrv.
getVal() ;
2653 double errVal = sqrt(V(ivar,ivar)) ;
2656 rrv.setVal(cenVal+errVal) ;
2657 plusVar.push_back(
getVal(nset)) ;
2660 rrv.setVal(cenVal-errVal) ;
2661 minusVar.push_back(
getVal(nset)) ;
2663 rrv.setVal(cenVal) ;
2676 std::vector<double> errVec(paramList.
getSize()) ;
2677 for (
int i=0 ; i<paramList.
getSize() ; i++) {
2678 errVec[i] = std::sqrt(V(i,i)) ;
2679 for (
int j=i ; j<paramList.
getSize() ; j++) {
2680 C(i,j) = V(i,j) / std::sqrt(V(i,i)*V(j,j));
2687 for (
unsigned int j=0 ; j<plusVar.size() ; j++) {
2688 F[j] = (plusVar[j]-minusVar[j])/2 ;
2692 double sum =
F*(C*
F) ;
2739 for (
auto * cmd : static_range_cast<RooCmdArg*>(plotArgListTmp)) {
2740 if (std::string(
"Normalization")==cmd->GetName()) {
2743 plotArgList.
Add(cmd) ;
2746 plotArgList.
Add(cmd) ;
2753 auto plotFunc = [&](
RooAbsReal const& absReal) {
2756 absReal.plotOn(frame, tmp);
2763 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":plotOnWithErrorBand: no curve for central value available" << std::endl;
2790 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") INFO: visualizing " << Z <<
"-sigma uncertainties in parameters "
2791 << errorParams <<
" from fit result " << fr.
GetName() <<
" using " <<
n <<
" samplings." << std::endl ;
2796 std::unique_ptr<RooDataSet> generatedData{paramPdf->
generate(errorParams,
n)};
2797 std::vector<RooCurve*> cvec ;
2798 for (
int i=0 ; i<generatedData->numEntries() ; i++) {
2799 cloneParams.
assign(*generatedData->get(i)) ;
2800 plotFunc(*cloneFunc);
2801 cvec.push_back(frame->
getCurve()) ;
2814 for (std::vector<RooCurve*>::iterator i=cvec.begin() ; i!=cvec.end() ; ++i) {
2832 for (
auto const* frv : static_range_cast<RooRealVar*>(fr.
floatParsFinal())) {
2833 if (frv->getError() > frv->getVal() * std::numeric_limits<double>::epsilon()) {
2834 fpf_stripped.
add(*frv);
2852 std::vector<int> fpf_idx ;
2856 paramList.
add(*par) ;
2857 fpf_idx.push_back(i) ;
2861 std::vector<RooCurve*> plusVar, minusVar ;
2870 for (
Int_t ivar=0 ; ivar<paramList.
getSize() ; ivar++) {
2874 double cenVal = rrv.
getVal() ;
2875 double errVal = sqrt(V(ivar,ivar)) ;
2878 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal+Z*errVal) ;
2881 plotFunc(*cloneFunc);
2882 plusVar.push_back(frame->
getCurve()) ;
2887 ((
RooRealVar*)paramList.
at(ivar))->setVal(cenVal-Z*errVal) ;
2888 plotFunc(*cloneFunc);
2889 minusVar.push_back(frame->
getCurve()) ;
2896 std::vector<double> errVec(paramList.
getSize()) ;
2897 for (
int i=0 ; i<paramList.
getSize() ; i++) {
2898 errVec[i] = sqrt(V(i,i)) ;
2899 for (
int j=i ; j<paramList.
getSize() ; j++) {
2900 C(i,j) = V(i,j)/sqrt(V(i,i)*V(j,j)) ;
2910 for (std::vector<RooCurve*>::iterator i=plusVar.begin() ; i!=plusVar.end() ; ++i) {
2913 for (std::vector<RooCurve*>::iterator i=minusVar.begin() ; i!=minusVar.end() ; ++i) {
2920 if (!band)
return frame ;
2925 pc.
defineString(
"curveNameSuffix",
"CurveNameSuffix",0,
"") ;
2926 pc.
defineInt(
"lineColor",
"LineColor",0,-999) ;
2927 pc.
defineInt(
"lineStyle",
"LineStyle",0,-999) ;
2928 pc.
defineInt(
"lineWidth",
"LineWidth",0,-999) ;
2929 pc.
defineInt(
"markerColor",
"MarkerColor",0,-999) ;
2930 pc.
defineInt(
"markerStyle",
"MarkerStyle",0,-999) ;
2932 pc.
defineInt(
"fillColor",
"FillColor",0,-999) ;
2933 pc.
defineInt(
"fillStyle",
"FillStyle",0,-999) ;
2935 pc.
defineInt(
"curveInvisible",
"Invisible",0,0) ;
2936 pc.
defineInt(
"moveToBack",
"MoveToBack",0,0) ;
2969 }
else if (pc.
getString(
"curveNameSuffix",0,
true)) {
3002 <<
":plotOn: frame does not specify a plot variable" << std::endl;
3015 coutE(Plotting) <<
ClassName() <<
"::" <<
GetName() <<
":plotOn: WARNING: variable is not an explicit dependent: "
3016 << var->
GetName() << std::endl;
3034 RooArgSet& projectedVars,
bool silent)
const
3036 cxcoutD(Plotting) <<
"RooAbsReal::makeProjectionSet(" <<
GetName() <<
") plotVar = " << plotVar->
GetName()
3037 <<
" allVars = " << (allVars?(*allVars):
RooArgSet()) << std::endl ;
3040 if (!allVars) return ;
3043 projectedVars.
add(*allVars) ;
3048 projectedVars.
remove(*found);
3051 std::unique_ptr<RooArgSet> plotServers{plotVar->
getObservables(&projectedVars)};
3055 cxcoutD(Plotting) <<
"RooAbsReal::makeProjectionSet(" <<
GetName() <<
") removing " << tmp->
GetName()
3056 <<
" from projection set because it a server of " << plotVar->
GetName() << std::endl ;
3057 projectedVars.
remove(*tmp) ;
3063 <<
") WARNING: cannot project out frame variable ("
3064 << found->
GetName() <<
"), ignoring" << std::endl ;
3071 projectedVars.
remove(*arg,
true) ;
3074 <<
") function doesn't depend on projection variable "
3075 << arg->GetName() <<
", ignoring" << std::endl ;
3113 if(binding && !binding->
isValid()) {
3114 coutE(InputArguments) <<
ClassName() <<
"::" <<
GetName() <<
":bindVars: cannot bind to " << vars << std::endl ;
3130 auto other =
static_cast<const RooAbsReal*
>(source);
3131 assert(
dynamic_cast<const RooAbsReal*
>(source));
3133 _value = other->_treeReadBuffer ? other->_treeReadBuffer->operator
double() : other->_value;
3174 coutE(Eval) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") ERROR: TTree branch " <<
GetName()
3175 <<
" is an array and cannot be attached to a RooAbsReal" << std::endl ;
3185 std::map<std::string, std::pair<std::string, std::function<std::unique_ptr<TreeReadBuffer>()>>> typeMap {
3186 {
"Float_t", {
"FLOAT_TREE_BRANCH", [&](){
return createTreeReadBuffer<Float_t >(cleanName, t); }}},
3187 {
"Int_t", {
"INTEGER_TREE_BRANCH", [&](){
return createTreeReadBuffer<Int_t >(cleanName, t); }}},
3188 {
"UChar_t", {
"BYTE_TREE_BRANCH", [&](){
return createTreeReadBuffer<UChar_t >(cleanName, t); }}},
3189 {
"Bool_t", {
"BOOL_TREE_BRANCH", [&](){
return createTreeReadBuffer<Bool_t >(cleanName, t); }}},
3190 {
"Char_t", {
"SIGNEDBYTE_TREE_BRANCH", [&](){
return createTreeReadBuffer<Char_t >(cleanName, t); }}},
3191 {
"UInt_t", {
"UNSIGNED_INTEGER_TREE_BRANCH", [&](){
return createTreeReadBuffer<UInt_t >(cleanName, t); }}},
3192 {
"Long64_t", {
"LONG_TREE_BRANCH", [&](){
return createTreeReadBuffer<Long64_t >(cleanName, t); }}},
3193 {
"ULong64_t", {
"UNSIGNED_LONG_TREE_BRANCH", [&](){
return createTreeReadBuffer<ULong64_t>(cleanName, t); }}},
3194 {
"Short_t", {
"SHORT_TREE_BRANCH", [&](){
return createTreeReadBuffer<Short_t >(cleanName, t); }}},
3195 {
"UShort_t", {
"UNSIGNED_SHORT_TREE_BRANCH", [&](){
return createTreeReadBuffer<UShort_t >(cleanName, t); }}},
3198 auto typeDetails = typeMap.find(typeName.
Data());
3199 if (typeDetails != typeMap.end()) {
3200 coutI(DataHandling) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") TTree " << typeDetails->first <<
" branch " <<
GetName()
3201 <<
" will be converted to double precision." << std::endl ;
3211 coutE(InputArguments) <<
"RooAbsReal::attachToTree(" <<
GetName() <<
") data type " << typeName <<
" is not supported." << std::endl ;
3233 coutE(Eval) <<
"RooAbsReal::fillTreeBranch(" <<
GetName() <<
") ERROR: not attached to tree: " <<
cleanBranchName() << std::endl ;
3371 const TList &nameList)
const
3374 bool isMatched(
true);
3375 for(
auto *
name : static_range_cast<TObjString*>(nameList)) {
3378 matched.
add(*found);
3392 if(isMatched) matchedArgs.
add(matched);
3441 if (config)
return config ;
3454 if (config)
return config ;
3554 static bool inLogEvalError = false ;
3556 if (inLogEvalError) {
3559 inLogEvalError = true ;
3564 if (serverValueString) {
3569 oocoutE(
nullptr,Eval) <<
"RooAbsReal::logEvalError(" <<
"<STATIC>" <<
") evaluation error, " << std::endl
3570 <<
" origin : " << origName << std::endl
3571 <<
" message : " << ee.
_msg << std::endl
3572 <<
" server values: " << ee.
_srvval << std::endl ;
3579 inLogEvalError = false ;
3609 static bool inLogEvalError = false ;
3611 if (inLogEvalError) {
3614 inLogEvalError = true ;
3619 if (serverValueString) {
3622 std::string srvval ;
3623 std::ostringstream oss ;
3634 p->print(oss,
true) ;
3639 std::ostringstream oss2 ;
3643 coutE(Eval) <<
"RooAbsReal::logEvalError(" <<
GetName() <<
") evaluation error, " << std::endl
3644 <<
" origin : " << oss2.str() << std::endl
3645 <<
" message : " << ee.
_msg << std::endl
3646 <<
" server values: " << ee.
_srvval << std::endl ;
3655 <<
") delayed evaluation error, " << std::endl
3656 <<
" origin : " << oss2.str() << std::endl
3657 <<
" message : " << oee.
_msg << std::endl
3658 <<
" server values: " << oee.
_srvval << std::endl ;
3665 inLogEvalError = false ;
3721 if (maxPerNode<0) return ;
3724 if (maxPerNode==0) {
3727 os << iter->second.first ;
3729 os <<
" has " << iter->second.second.size() <<
" errors" << std::endl ;
3734 os << iter->second.first << std::endl ;
3738 for(
auto iter2 = iter->second.second.begin();iter2!=iter->second.second.end() ; ++iter2, i++) {
3739 os <<
" " << iter2->_msg <<
" @ " << iter2->_srvval << std::endl ;
3741 os <<
" ... (remaining " << iter->second.second.size() - maxPerNode <<
" messages suppressed)" << std::endl ;
3762 ntot += elem.second.second.size() ;
3782 for(
auto * pdf : dynamic_range_cast<RooAbsPdf*>(*compSet)) {
3785 pdf->selectNormalization(&addNormSet,force) ;
3787 pdf->selectNormalization(0,force) ;
3807 for(
auto * pdf : dynamic_range_cast<RooAbsPdf*>(*compSet)) {
3809 pdf->selectNormalizationRange(rangeName,force) ;
3827 orderedObs.
add(obs) ;
3885 pc.
defineSet(
"supNormSet",
"SupNormSet",0,0) ;
3886 pc.
defineInt(
"numScanBins",
"ScanParameters",0,1000) ;
3887 pc.
defineInt(
"intOrder",
"ScanParameters",1,2) ;
3888 pc.
defineInt(
"doScanNum",
"ScanNum",0,1) ;
3889 pc.
defineInt(
"doScanAll",
"ScanAll",0,0) ;
3890 pc.
defineInt(
"doScanNon",
"ScanNone",0,0) ;
3894 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
3922 coutI(NumIntegration) <<
"RooAbsPdf::createRunningIntegral(" <<
GetName() <<
") integration over observable(s) " << iset <<
" involves numeric integration," << std::endl
3923 <<
" constructing cdf though numeric integration of sampled pdf in " << numScanBins <<
" bins and applying order "
3924 << intOrder <<
" interpolation on integrated histogram." << std::endl
3925 <<
" To override this choice of technique use argument ScanNone(), to change scan parameters use ScanParameters(nbins,order) argument" << std::endl ;
3943 ivar->
setBins(numScanBins,
"numcdf") ;
3944 auto ret = std::make_unique<RooNumRunningInt>(
name.c_str(),
name.c_str(),*
this,*ivar,
"numrunint") ;
3945 ret->setInterpolationOrder(intOrder) ;
3964 coutW(InputArguments) <<
"RooAbsPdf::createRunningIntegral(" <<
GetName() <<
") WARNING ignoring non-RooRealVar input argument " << arg->GetName() << std::endl ;
3978 for(
auto * rrv : static_range_cast<RooRealVar*>(ilist)) {
3982 cloneList.
add(*cloneArg) ;
3987 cloneLo->
setVal(rrv->getMin()) ;
3988 loList.
add(*cloneLo) ;
4000 finalNset.
add(cloneList,
true) ;
4001 std::unique_ptr<RooAbsReal> cdf{tmp->
createIntegral(cloneList,finalNset,
"CDF")};
4004 cdf->addOwnedComponents(*tmp) ;
4005 cdf->addOwnedComponents(cloneList) ;
4006 cdf->addOwnedComponents(loList) ;
4020 if (realObs.
size() != obs.
size()) {
4021 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified observables are not variables of this p.d.f" << std::endl ;
4026 if (realPars.
size() != pars.
size()) {
4027 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified parameters are not variables of this p.d.f" << std::endl ;
4045 if (realObs.
size() != obs.
size()) {
4046 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified observables are not variables of this p.d.f" << std::endl ;
4051 if (realPars.
size() != pars.
size()) {
4052 coutE(InputArguments) <<
"RooAbsReal::functor(" <<
GetName() <<
") ERROR: one or more specified parameters are not variables of this p.d.f" << std::endl ;
4057 for (
int i=0 ; i<obs.
getSize() ; i++) {
4059 coutE(ObjectHandling) <<
"RooAbsReal::asTF(" <<
GetName() <<
") ERROR: proposed observable " << obs.
at(0)->
GetName() <<
" is not of type RooRealVar" << std::endl ;
4063 for (
int i=0 ; i<pars.
getSize() ; i++) {
4065 coutE(ObjectHandling) <<
"RooAbsReal::asTF(" <<
GetName() <<
") ERROR: proposed parameter " << pars.
at(0)->
GetName() <<
" is not of type RooRealVar" << std::endl ;
4097 <<
" observables specified, but a ROOT TFx can only have 1,2 or 3 observables" << std::endl ;
4102 for (
int i=0 ; i<pars.
getSize() ; i++) {
4132 return new RooDerivative(
name.c_str(),title.c_str(),*
this,obs,normSet,order,eps) ;
4147 std::string title=
Form(
"%sMoment of order %d of %s w.r.t %s ",(central?
"Central ":
""),order,
GetName(),obs.
GetName()) ;
4149 if (order==2)
return new RooSecondMoment(
name.c_str(),title.c_str(),*
this,obs,central,takeRoot) ;
4150 return new RooMoment(
name.c_str(),title.c_str(),*
this,obs,order,central,takeRoot) ;
4166 std::string title=
Form(
"%sMoment of order %d of %s w.r.t %s ",(central?
"Central ":
""),order,
GetName(),obs.
GetName()) ;
4168 if (order==1)
return new RooFirstMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,intNormObs) ;
4169 if (order==2)
return new RooSecondMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,central,takeRoot,intNormObs) ;
4170 return new RooMoment(
name.c_str(),title.c_str(),*
this,obs,normObs,order,central,takeRoot,intNormObs) ;
4295 return new RooChi2Var(
name.c_str(),
name.c_str(),*
this,
data,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
4311 for(
auto * arg : static_range_cast<RooCmdArg*>(cmdList)) {
4318 return createChi2(
data,*cmds[0],*cmds[1],*cmds[2],*cmds[3],*cmds[4],*cmds[5],*cmds[6],*cmds[7]) ;
4384 std::unique_ptr<RooAbsReal> xychi2{
createChi2(xydata,chi2CmdList)};
4427 pc.
defineInt(
"integrate",
"Integrate",0,0) ;
4437 bool integrate = pc.
getInt(
"integrate") ;
4462 pc.
defineInt(
"optConst",
"Optimize",0,1) ;
4466 pc.
defineInt(
"plevel",
"PrintLevel",0,1) ;
4468 pc.
defineInt(
"initHesse",
"InitialHesse",0,0) ;
4472 pc.
defineInt(
"numee",
"PrintEvalErrors",0,10) ;
4476 pc.
defineSet(
"minosSet",
"Minos",0,
nullptr) ;
4485 const char* minType = pc.
getString(
"mintype",
"") ;
4486 const char* minAlg = pc.
getString(
"minalg",
"minuit") ;
4500 std::unique_ptr<RooFitResult> ret;
4504 m.setMinimizerType(minType);
4510 m.setPrintEvalErrors(numee) ;
4512 m.setPrintLevel(plevel) ;
4517 m.optimizeConst(optConst);
4531 m.setStrategy(strat) ;
4540 m.minimize(minType, minAlg) ;
4550 m.minos(*minosSet) ;
4559 std::string title =
Form(
"Result of fit of %s ",
GetName()) ;
4560 ret = std::unique_ptr<RooFitResult>{
m.save(
name.c_str(),title.c_str())};
4595 for (
auto const* arg : paramVars) {
4597 coutW(InputArguments) <<
"RooAbsReal::setParameterizeIntegral(" <<
GetName()
4598 <<
") function does not depend on std::listed parameter " << arg->
GetName() <<
", ignoring" << std::endl ;
4601 if (plist.size()>0) plist +=
":" ;
4602 plist += arg->GetName() ;
4641 std::vector<ServerData> ourServers;
4642 std::size_t dataSize = 1;
4644 for (
auto absArgServer :
servers()) {
4645 if (absArgServer->IsA()->InheritsFrom(
RooAbsReal::Class()) && absArgServer->isValueServer(*
this)) {
4646 auto server =
static_cast<RooAbsReal*
>(absArgServer);
4647 ourServers.push_back({server,
4648 server->getValues(evalData, normSet),
4649 server->getVal(normSet),
4650 server->operMode()});
4653 dataSize = std::max(dataSize, ourServers.back().batch.size());
4659 struct RestoreStateRAII {
4660 RestoreStateRAII(std::vector<ServerData>& servers) :
4661 _servers{servers} { }
4663 ~RestoreStateRAII() {
4664 for (
auto& serverData : _servers) {
4665 serverData.server->setCachedValue(serverData.oldValue,
true);
4666 serverData.server->setOperMode(serverData.oldOperMode);
4670 std::vector<ServerData>& _servers;
4671 } restoreState{ourServers};
4677 coutI(FastEvaluations) <<
"The class " <<
ClassName() <<
" does not implement the faster batch evaluation interface."
4678 <<
" Consider requesting or implementing it to benefit from a speed up." << std::endl;
4683 auto outputData = evalData.
makeBatch(
this, dataSize);
4685 for (std::size_t i=0; i < outputData.size(); ++i) {
4686 for (
auto& serv : ourServers) {
4687 serv.server->setCachedValue(serv.batch[std::min(i, serv.batch.size()-1)],
false);
4713 std::vector<ServerData> ourServers;
4716 for (
auto server :
servers()) {
4717 auto serverValues = dataMap.
at(server);
4718 if(serverValues.empty())
continue;
4721 auto oldOperMode = server->operMode();
4726 ourServers.push_back({server,
4730 server->_valueDirty,
4731 server->_shapeDirty});
4737 struct RestoreStateRAII {
4738 RestoreStateRAII(std::vector<ServerData>& servers) :
4739 _servers{servers} { }
4741 ~RestoreStateRAII() {
4742 for (
auto& serverData : _servers) {
4743 serverData.server->setCachedValue(serverData.oldValue,
true);
4744 serverData.server->setOperMode(serverData.oldOperMode);
4745 serverData.server->_valueDirty = serverData.oldValueDirty;
4746 serverData.server->_shapeDirty = serverData.oldShapeDirty;
4750 std::vector<ServerData>& _servers;
4751 } restoreState{ourServers};
4757 coutI(FastEvaluations) <<
"The class " <<
ClassName() <<
" does not implement the faster batch evaluation interface."
4758 <<
" Consider requesting or implementing it to benefit from a speed up." << std::endl;
4764 for (std::size_t i=0; i < nEvents; ++i) {
4765 for (
auto& serv : ourServers) {
4766 serv.server->setCachedValue(serv.batch[std::min(i, serv.batch.size()-1)],
false);
4778 const bool tmpFast =
_fast;
4779 const double tmp =
_value;
4781 double fullEval = 0.;
4783 fullEval =
getValV(normalisationSet);
4792 if (std::isfinite(ret) && ( ret != 0. ? (ret - fullEval)/ret : ret - fullEval) > 1.E-9) {
4797 formatter <<
"--> (Scalar computation wrong here:)\n"
4798 <<
GetName() <<
" " <<
this <<
" _fast=" << tmpFast
4799 <<
"\n\tcached _value=" << std::setprecision(16) << tmp
4800 <<
"\n\treturning =" << ret
4801 <<
"\n\trecomputed =" << fullEval
4802 <<
"\n\tnew _value =" <<
_value <<
"] ";
4803 formatter <<
"\nServers:";
4829 auto realServer =
dynamic_cast<RooAbsReal*
>(server);
4838 const auto item = evalData.
spans.find(
this);
4839 if (item == evalData.
spans.end())
4842 auto batch = item->second;
4844 const double batchVal = batch.size() == 1 ? batch[0] : batch[evtNo];
4847 if (std::abs(relDiff) > relAccuracy && std::abs(
value) > 1.E-300) {
4849 formatter <<
"--> (Batch computation wrong:)\n";
4851 formatter <<
"\n batch=" << batch.data() <<
" size=" << batch.size() << std::setprecision(17)
4852 <<
"\n batch[" << std::setw(7) << evtNo-1 <<
"]= " << (evtNo > 0 && evtNo - 1 < batch.size() ? std::to_string(batch[evtNo-1]) :
"---")
4853 <<
"\n batch[" << std::setw(7) << evtNo <<
"]= " << batchVal <<
" !!!"
4854 <<
"\n expected ('value'): " <<
value
4855 <<
"\n eval(unnorm.) : " <<
evaluate()
4856 <<
"\n delta " <<
" = " <<
value - batchVal
4857 <<
"\n rel delta " <<
" = " << relDiff
4858 <<
"\n _batch[" << std::setw(7) << evtNo+1 <<
"]= " << (batch.size() > evtNo+1 ? std::to_string(batch[evtNo+1]) :
"---");
4862 formatter <<
"\nServers: ";
4864 formatter <<
"\n - ";
4866 formatter << std::setprecision(17);
4868 auto serverAsReal =
dynamic_cast<RooAbsReal*
>(server);
4871 if (serverBatch.size() > evtNo) {
4872 formatter <<
"\n _batch[" << evtNo-1 <<
"]=" << (serverBatch.size() > evtNo-1 ? std::to_string(serverBatch[evtNo-1]) :
"---")
4873 <<
"\n _batch[" << evtNo <<
"]=" << serverBatch[evtNo]
4874 <<
"\n _batch[" << evtNo+1 <<
"]=" << (serverBatch.size() > evtNo+1 ? std::to_string(serverBatch[evtNo+1]) :
"---");
4877 formatter << std::setprecision(17)
4878 <<
"\n getVal()=" << serverAsReal->getVal(normSet);
4889 bool nameChange,
bool isRecursiveStep)
4901 if(
auto realArg =
dynamic_cast<RooAbsReal*
>(arg)) {
4902 realArg->enableOffsetting(flag) ;
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
static void indent(ostringstream &buf, int indent_level)
winID h TVirtualViewer3D TVirtualGLPainter p
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 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 SetLineColor
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 format
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TSystem * gSystem
void setData(RooAbsData const &data, std::string const &rangeName="", RooSimultaneous const *simPdf=nullptr, bool skipZeroWeights=false, bool takeGlobalObservablesFromData=true)
std::vector< double > getValues()
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
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.
bool recursiveRedirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool recurseInNewSet=true)
Recursively replace all servers with the new servers in newSet.
const TNamed * namePtr() const
De-duplicated pointer to this object's name.
void setShapeDirty()
Notify that a shape-like property (e.g. binning) has changed.
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'.
bool isValueDirtyAndClear() const
virtual TObject * clone(const char *newname=nullptr) const =0
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.
const Text_t * getStringAttribute(const Text_t *key) const
Get string attribute mapped under key 'key'.
RooFit::OwningPtr< RooArgSet > getComponents() const
Create a RooArgSet with all components (branch nodes) of the expression tree headed by this object.
const RefCountList_t & servers() const
List of all servers of this object.
bool dependsOnValue(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=nullptr) const
Check whether this object depends on values from an element in the serverList.
void setValueDirty()
Mark the element dirty. This forces a re-evaluation when a value is requested.
RooFit::OwningPtr< RooArgSet > getVariables(bool stripDisconnected=true) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Implement multi-line detailed printing.
virtual RooAbsArg * cloneTree(const char *newname=nullptr) const
Clone tree expression of objects.
TString cleanBranchName() const
Construct a mangled name from the actual name that is free of any math symbols that might be interpre...
Int_t numProxies() const
Return the number of registered proxies.
static bool _inhibitDirty
void setAttribute(const Text_t *name, bool value=true)
Set (default) or clear a named boolean attribute of this object.
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.
RooAbsProxy * getProxy(Int_t index) const
Return the nth proxy from the proxy list.
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
RefCountList_t _serverList
void leafNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool recurseNonDerived=false) const
Fill supplied list with all leaf nodes of the arg tree, starting with ourself as top node.
virtual bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep)
Function that is called at the end of redirectServers().
virtual bool checkObservables(const RooArgSet *nset) const
Overloadable function in which derived classes can implement consistency checks of the variables.
void attachDataSet(const RooAbsData &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
void treeNodeServerList(RooAbsCollection *list, const RooAbsArg *arg=nullptr, bool doBranch=true, bool doLeaf=true, bool valueOnly=false, bool recurseNonDerived=false) const
Fill supplied list with nodes of the arg tree, following all server links, starting with ourself as t...
RooAbsBinning is the abstract base class for RooRealVar binning definitions.
virtual bool isParameterized() const
Interface function.
virtual RooAbsReal * highBoundFunc() const
Return pointer to RooAbsReal parameterized upper bound, if any.
virtual RooAbsReal * lowBoundFunc() const
Return pointer to RooAbsReal parameterized lower bound, if any.
RooAbsCategoryLValue is the common abstract base class for objects that represent a discrete value th...
virtual bool setIndex(value_type index, bool printError=true)=0
Change category state by specifying the index code of the desired state.
A space to attach TBranches.
virtual value_type getCurrentIndex() const
Return index number of current state.
bool isSignType(bool mustHaveZero=false) const
Determine if category has 2 or 3 states with index values -1,0,1.
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
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.
const char * GetName() const override
Returns name of object.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
bool overlaps(Iterator_t otherCollBegin, Iterator_t otherCollEnd) const
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...
Storage_t::size_type size() const
RooAbsArg * first() const
virtual bool replace(const RooAbsArg &var1, const RooAbsArg &var2)
Replace var1 with var2 and return true for success.
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 ...
virtual RooAbsArg * addClone(const RooAbsArg &var, bool silent=false)
Add a clone of the specified argument to list.
void sort(bool reverse=false)
Sort collection using std::sort and name comparison.
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.
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.
RooAbsData * reduce(const RooCmdArg &arg1, 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())
Create a reduced copy of this dataset.
Abstract interface for evaluating a real-valued function of one real variable and performing numerica...
Abstract base class for objects that are lvalues, i.e.
RooAbsMoment represents the first, second, or third order derivative of any RooAbsReal as calculated ...
void constOptimizeTestStatistic(ConstOpCode opcode, bool doAlsoTrackingOpt=true) override
Driver function to propagate constant term optimizations in test statistic.
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&,...
const char * normRange() const
virtual ExtendMode extendMode() const
Returns ability of PDF to provide extended likelihood terms.
RooAbsProxy is the abstact interface for proxy classes.
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual const RooAbsBinning & getBinning(const char *name=nullptr, bool verbose=true, bool createOnTheFly=false) const =0
Retrive binning configuration with given name or default binning.
virtual double getMax(const char *name=nullptr) const
Get maximum of currently defined range.
virtual double getMin(const char *name=nullptr) const
Get minimum of currently defined range.
TH1 * createHistogram(const char *name, 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
void setServerValues(const char *tmp)
void setMessage(const char *tmp)
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.
virtual void selectNormalizationRange(const char *rangeName=nullptr, bool force=false)
Interface function to force use of a given normalization range to interpret function value.
void plotOnCompSelect(RooArgSet *selNodes) const
Helper function for plotting of composite p.d.fs.
bool isSelectedComp() const
If true, the current pdf is a selected component (for use in plotting)
std::unique_ptr< TreeReadBuffer > _treeReadBuffer
virtual std::list< double > * binBoundaries(RooAbsRealLValue &obs, double xlo, double xhi) const
Retrieve bin boundaries if this distribution is binned in obs.
void selectComp(bool flag)
RooGenFunction * iGenFunction(RooRealVar &x, const RooArgSet &nset=RooArgSet())
TString _label
Plot label for objects value.
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
double findRoot(RooRealVar &x, double xmin, double xmax, double yval)
Return value of x (in range xmin,xmax) at which function equals yval.
virtual RooFit::OwningPtr< RooFitResult > chi2FitTo(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())
Perform a fit to given histogram.
virtual double getValV(const RooArgSet *normalisationSet=nullptr) const
Return value of object.
virtual RooPlot * plotSliceOn(RooPlot *frame, const RooArgSet &sliceSet, Option_t *drawOptions="L", double scaleFactor=1.0, ScaleType stype=Relative, const RooAbsData *projData=nullptr) const
static Int_t numEvalErrorItems()
RooFit::OwningPtr< RooFitResult > chi2FitDriver(RooAbsReal &fcn, RooLinkedList &cmdList)
Internal driver function for chi2 fits.
RooAbsReal()
coverity[UNINIT_CTOR] Default constructor
friend class RooRealBinding
virtual void fixAddCoefNormalization(const RooArgSet &addNormSet=RooArgSet(), bool force=true)
Fix the interpretation of the coefficient of any RooAddPdf component in the expression tree headed by...
virtual RooSpan< double > evaluateSpan(RooBatchCompute::RunContext &evalData, const RooArgSet *normSet) const
Evaluate this object for a batch/span of data points.
static std::map< const RooAbsArg *, std::pair< std::string, std::list< EvalError > > > _evalErrorList
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
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...
virtual RooAbsReal * createChi2(RooDataHist &data, const RooLinkedList &cmdList)
RooAbsArg * createFundamental(const char *newname=nullptr) const override
Create a RooRealVar fundamental object with our properties.
bool _forceNumInt
Force numerical integration if flag set.
~RooAbsReal() override
Destructor.
void setParameterizeIntegral(const RooArgSet ¶mVars)
bool matchArgsByName(const RooArgSet &allArgs, RooArgSet &matchedArgs, const TList &nameList) const
Check if allArgs contains matching elements for each name in nameList.
virtual RooAbsReal * createProfile(const RooArgSet ¶msOfInterest)
Create a RooProfileLL object that eliminates all nuisance parameters in the present function.
void setTreeBranchStatus(TTree &t, bool active) override
(De)Activate associated tree branch
TH1 * fillHistogram(TH1 *hist, const RooArgList &plotVars, double scaleFactor=1, const RooArgSet *projectedVars=nullptr, bool scaling=true, const RooArgSet *condObs=nullptr, bool setError=true) const
Fill the ROOT histogram 'hist' with values sampled from this function at the bin centers.
RooFit::OwningPtr< RooAbsReal > createScanRI(const RooArgSet &iset, const RooArgSet &nset, Int_t numScanBins, Int_t intOrder)
Utility function for createRunningIntegral that construct an object implementing the numeric scanning...
double _DEBUG_getVal(const RooArgSet *normalisationSet) const
Debug version of getVal(), which is slow and does error checking.
bool plotSanityChecks(RooPlot *frame) const
Utility function for plotOn(), perform general sanity check on frame to ensure safe plotting operatio...
double getPropagatedError(const RooFitResult &fr, const RooArgSet &nset=RooArgSet()) const
Calculate error on self by linearly propagating errors on parameters using the covariance matrix from...
virtual void selectNormalization(const RooArgSet *depSet=nullptr, bool force=false)
Interface function to force use of a given set of observables to interpret function value.
RooDerivative * derivative(RooRealVar &obs, Int_t order=1, double eps=0.001)
Return function representing first, second or third order derivative of this function.
static EvalErrorIter evalErrorIter()
TF1 * asTF(const RooArgList &obs, const RooArgList &pars=RooArgList(), const RooArgSet &nset=RooArgSet()) const
Return a ROOT TF1,2,3 object bound to this RooAbsReal with given definition of observables and parame...
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.
TString _unit
Unit for objects value.
static RooNumIntConfig * defaultIntegratorConfig()
Returns the default numeric integration configuration for all RooAbsReals.
virtual RooSpan< const double > getValues(RooBatchCompute::RunContext &evalData, const RooArgSet *normSet=nullptr) const
bool readFromStream(std::istream &is, bool compact, bool verbose=false) override
Read object contents from stream (dummy for now)
bool matchArgs(const RooArgSet &allDeps, RooArgSet &numDeps, const RooArgProxy &a) const
Utility function for use in getAnalyticalIntegral().
void fillTreeBranch(TTree &t) override
Fill the tree branch that associated with this object with its current value.
RooAbsFunc * bindVars(const RooArgSet &vars, const RooArgSet *nset=nullptr, bool clipInvalid=false) const
Create an interface adaptor f(vars) that binds us to the specified variables (in arbitrary order).
RooNumIntConfig * _specIntegratorConfig
void printMultiline(std::ostream &os, Int_t contents, bool verbose=false, TString indent="") const override
Structure printing.
virtual RooPlot * plotAsymOn(RooPlot *frame, const RooAbsCategoryLValue &asymCat, PlotOpt o) const
bool operator==(double value) const
Equality operator comparing to a double.
static ErrorLoggingMode evalErrorLoggingMode()
Return current evaluation error logging mode.
bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep) override
A buffer for reading values from trees.
virtual bool isValidReal(double, bool printError=false) const
Interface function to check if given value is a valid value for this object. Returns true unless over...
void setIntegratorConfig()
Remove the specialized numeric integration configuration associated with this object.
void printValue(std::ostream &os) const override
Print object value.
bool isIdentical(const RooAbsArg &other, bool assumeSameType=false) const override
static bool _hideOffset
Offset hiding flag.
static ErrorLoggingMode _evalErrorMode
void attachToVStore(RooVectorDataStore &vstore) override
static Int_t _evalErrorCount
void copyCache(const RooAbsArg *source, bool valueOnly=false, bool setValDirty=true) override
Copy the cached value of another RooAbsArg to our cache.
TH1 * createHistogram(RooStringView varNameList, Int_t xbins=0, Int_t ybins=0, Int_t zbins=0) const
Create and fill a ROOT histogram TH1, TH2 or TH3 with the values of this function for the variables w...
virtual void fixAddCoefRange(const char *rangeName=nullptr, bool force=true)
Fix the interpretation of the coefficient of any RooAddPdf component in the expression tree headed by...
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.
void attachToTree(TTree &t, Int_t bufSize=32000) override
Attach object to a branch of given TTree.
std::map< constRooAbsArg *, std::pair< std::string, std::list< EvalError > > >::const_iterator EvalErrorIter
RooNumIntConfig * specialIntegratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
void writeToStream(std::ostream &os, bool compact) const override
Write object contents to stream (dummy for now)
double traceEval(const RooArgSet *set) const
Calculate current value of object, with error tracing wrapper.
static void setHideOffset(bool flag)
void checkBatchComputation(const RooBatchCompute::RunContext &evalData, std::size_t evtNo, const RooArgSet *normSet=nullptr, double relAccuracy=1.E-13) const
Walk through expression tree headed by the this object, and check a batch computation.
static void globalSelectComp(bool flag)
Global switch controlling the activation of the selectComp() functionality.
RooAbsMoment * moment(RooRealVar &obs, Int_t order, bool central, bool takeRoot)
Return function representing moment of function of given order.
RooPlot * plotOnWithErrorBand(RooPlot *frame, const RooFitResult &fr, double Z, const RooArgSet *params, const RooLinkedList &argList, bool method1) const
Plot function or PDF on frame with support for visualization of the uncertainty encoded in the given ...
const char * getPlotLabel() const
Get the label associated with the variable.
RooFit::OwningPtr< RooAbsReal > createRunningIntegral(const RooArgSet &iset, const RooArgSet &nset={})
Calls createRunningIntegral(const RooArgSet&, const RooCmdArg&, const RooCmdArg&, const RooCmdArg&,...
virtual Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
static Int_t numEvalErrors()
Return the number of logged evaluation errors since the last clearing.
static void setEvalErrorLoggingMode(ErrorLoggingMode m)
Set evaluation error logging mode.
virtual void preferredObservableScanOrder(const RooArgSet &obs, RooArgSet &orderedObs) const
Interface method for function objects to indicate their preferred order of observables for scanning t...
virtual double maxVal(Int_t code) const
Return maximum value for set of observables identified by code assigned in getMaxVal.
void findInnerMostIntegration(const RooArgSet &allObs, RooArgSet &innerObs, const char *rangeName) const
Utility function for createIntObj() that aids in the construct of recursive integrals over functions ...
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.
virtual void computeBatch(cudaStream_t *, double *output, size_t size, RooFit::Detail::DataMap const &) const
Base function for computing multiple values of a RooAbsReal.
TString getTitle(bool appendUnit=false) const
Return this variable's title std::string.
void logEvalError(const char *message, const char *serverValueString=nullptr) const
Log evaluation error message.
virtual double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
const Text_t * getUnit() const
const RooNumIntConfig * getIntegratorConfig() const
Return the numeric integration configuration used for this object.
static void printEvalErrors(std::ostream &os=std::cout, Int_t maxPerNode=10000000)
Print all outstanding logged evaluation error on the given ostream.
RooFit::OwningPtr< RooAbsReal > createIntRI(const RooArgSet &iset, const RooArgSet &nset={})
Utility function for createRunningIntegral.
virtual void enableOffsetting(bool)
static void clearEvalErrorLog()
Clear the stack of evaluation error messages.
RooFit::OwningPtr< RooAbsReal > createIntObj(const RooArgSet &iset, const RooArgSet *nset, const RooNumIntConfig *cfg, const char *rangeName) const
Internal utility function for createIntegral() that creates the actual integral object.
RooFunctor * functor(const RooArgList &obs, const RooArgList &pars=RooArgList(), const RooArgSet &nset=RooArgSet()) const
Return a RooFunctor object bound to this RooAbsReal with given definition of observables and paramete...
const RooAbsReal * createPlotProjection(const RooArgSet &depVars, const RooArgSet &projVars, RooArgSet *&cloneSet) const
Utility function for plotOn() that creates a projection of a function or p.d.f to be plotted on a Roo...
virtual std::list< double > * plotSamplingHint(RooAbsRealLValue &obs, double xlo, double xhi) const
Interface for returning an optional hint for initial sampling points when constructing a curve projec...
void setPlotLabel(const char *label)
Set the label associated with this variable.
void makeProjectionSet(const RooAbsArg *plotVar, const RooArgSet *allVars, RooArgSet &projectedVars, bool silent) const
Utility function for plotOn() that constructs the set of observables to project when plotting ourselv...
virtual Int_t getMaxVal(const RooArgSet &vars) const
Advertise capability to determine maximum value of function for given set of observables.
virtual double offset() const
static bool _globalSelectComp
Component selection flag for RooAbsPdf::plotCompOn.
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.
RooArgProxy is the abstract interface for RooAbsArg proxy classes.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
Implement the abstract 1-dimensional root finding interface using the Brent-Decker method.
bool findRoot(double &result, double xlo, double xhi, double value=0) const override
Do the root finding using the Brent-Decker method.
RooCategory is an object to represent discrete states.
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...
static const RooCmdArg & none()
Return reference to null argument.
const char * getString(Int_t idx) const
Return string stored in slot idx.
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'.
const RooLinkedList & getObjectList(const char *name)
Return list of objects 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...
A RooCurve is a one-dimensional graphical representation of a real-valued function.
RooCurve * makeErrorBand(const std::vector< RooCurve * > &variations, double Z=1) const
Construct filled RooCurve represented error band that captures alpha% of the variations of the curves...
RooCustomizer is a factory class to produce clones of a prototype composite PDF object with the same ...
void setCloneBranchSet(RooArgSet &cloneBranchSet)
Releases ownership of list of cloned branch nodes.
void replaceArg(const RooAbsArg &orig, const RooAbsArg &subst)
Replace any occurence of arg 'orig' with arg 'subst'.
RooAbsArg * build(const char *masterCatState, bool verbose=false)
Build a clone of the prototype executing all registered 'replace' rules and 'split' rules for the mas...
void setOwning(bool flag)
If flag is true, make customizer own all created components.
The RooDataHist is a container class to hold N-dimensional binned data.
void set(std::size_t binNumber, double weight, double wgtErr)
Set bin content of bin that was last loaded with get(std::size_t).
double binVolume(std::size_t i) const
Return bin volume of i-th bin.
const RooArgSet * get() const override
Get bin centre of current bin.
RooDataSet is a container class to hold unbinned data.
Class RooDataWeightedAverage calculate a weighted average of a function or p.d.f given a dataset with...
RooDerivative represents the first, second, or third order derivative of any RooAbsReal as calculated...
RooFirstMoment represents the first, second, or third order derivative of any RooAbsReal as calculate...
RooFitResult is a container class to hold the input and output of a PDF fit to a dataset.
const TMatrixDSym & covarianceMatrix() const
Return covariance matrix.
TMatrixDSym reducedCovarianceMatrix(const RooArgList ¶ms) const
Return a reduced covariance matrix (Note that Vred is a simple sub-matrix of V, row/columns are order...
const RooArgList & floatParsFinal() const
Return list of floating parameters after fit.
RooAbsPdf * createHessePdf(const RooArgSet ¶ms) const
Return a p.d.f that represents the fit result as a multi-variate probability densisty function on the...
RooSpan< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
Lightweight interface adaptor that exports a RooAbsPdf as a functor.
Lightweight interface adaptor that exports a RooAbsReal as a ROOT::Math::IGenFunction.
A RooHist is a graphical representation of binned data based on the TGraphAsymmErrors class.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
virtual void Add(TObject *arg)
RooLinkedListIterImpl begin() const
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...
RooMoment represents the first, second, or third order derivative of any RooAbsReal as calculated (nu...
static RooMsgService & instance()
Return reference to singleton instance.
bool isActive(const RooAbsArg *self, RooFit::MsgTopic facility, RooFit::MsgLevel level)
Check if logging is active for given object/topic/RooFit::MsgLevel combination.
Lightweight interface adaptor that exports a RooAbsReal as a ROOT::Math::IMultiGenFunction.
RooNumIntConfig holds the configuration parameters of the various numeric integrators used by RooReal...
static RooNumIntConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
Class RooParamBinning is an implementation of RooAbsBinning that constructs a binning with a range de...
A RooPlot is a plot frame and a container for graphics objects within that frame.
void remove(const char *name=nullptr, bool deleteToo=true)
Remove object with given name, or last object added if no name is given.
TObject * findObject(const char *name, const TClass *clas=nullptr) const
Find the named object in our list of items and return a pointer to it.
bool drawBefore(const char *before, const char *target)
Change the order in which our contained objects are drawn so that the target object is drawn just bef...
virtual void SetMinimum(double minimum=-1111)
Set minimum value of Y axis.
const RooArgSet * getNormVars() const
double GetMaximum(double maxval=FLT_MAX) const
TAttLine * getAttLine(const char *name=nullptr) const
Return a pointer to the line attributes of the named object in this plot, or zero if the named object...
TAttFill * getAttFill(const char *name=nullptr) const
Return a pointer to the fill attributes of the named object in this plot, or zero if the named object...
TObject * getObject(Int_t idx) const
Return the name of the object at slot 'idx' in this RooPlot.
virtual void SetMaximum(double maximum=-1111)
Set maximum value of Y axis.
RooAbsRealLValue * getPlotVar() const
TAttMarker * getAttMarker(const char *name=nullptr) const
Return a pointer to the marker attributes of the named object in this plot, or zero if the named obje...
RooCurve * getCurve(const char *name=nullptr) const
Return a RooCurve pointer of the named object in this plot, or zero if the named object does not exis...
void addPlotable(RooPlotable *plotable, Option_t *drawOptions="", bool invisible=false, bool refreshNorm=false)
Add the specified plotable object to our plot.
double GetMinimum(double minval=-FLT_MAX) const
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 RooProfileLL implements the profile likelihood estimator for a given likelihood and set of para...
Lightweight interface adaptor that binds a RooAbsReal object to a subset of its servers and present i...
RooRealIntegral performs hybrid numerical/analytical integrals of RooAbsReal objects.
const RooArgSet & numIntRealVars() const
void setAllowComponentSelection(bool allow)
Set component selection to be allowed/forbidden.
RooRealVar represents a variable that can be changed from the outside.
void setVal(double value) override
Set value of variable to 'value'.
void removeRange(const char *name=nullptr)
Remove range limits for binning with given name. Empty name means default range.
TObject * clone(const char *newname) const override
void setBinning(const RooAbsBinning &binning, const char *name=nullptr)
Add given binning under name 'name' with this variable.
void setBins(Int_t nBins, const char *name=nullptr)
Create a uniform binning under name 'name' for this variable.
Lightweight RooAbsFunction implementation that applies a constant scale factor to another RooAbsFunc.
RooSecondMoment represents the first, second, or third order derivative of any RooAbsReal as calculat...
A simple container to hold a batch of data values.
The RooStringView is a wrapper around a C-syle string that can also be constructed from a std::string...
void setBuffer(RooAbsReal *real, double *newBuf)
RooVectorDataStore uses std::vectors to store data columns.
RealVector * addReal(RooAbsReal *real)
RooXYChi2Var implements a simple chi^2 calculation from an unbinned dataset with values x,...
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Class to manage histogram axis.
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
A TTree is a list of TBranches.
TObjArray * GetListOfLeaves()
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
virtual void SetParName(Int_t ipar, const char *name)
Set name of parameter number ipar.
virtual void SetParameter(Int_t param, Double_t value)
A 2-Dim function with parameters.
A 3-Dim function with parameters.
void SetName(const char *name="") override
Set graph name.
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsZ() const
virtual Int_t GetDimension() const
virtual Int_t GetBin(Int_t binx, Int_t biny=0, Int_t binz=0) const
Return Global bin number corresponding to binx,y,z.
virtual Int_t GetNbinsX() const
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual const char * GetTypeName() const
virtual TLeaf * GetLeafCounter(Int_t &countval) const
Return a pointer to the counter of this leaf (if any) or store the number of elements that the leaf c...
void Add(TObject *obj) override
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
TObject * At(Int_t idx) const override
Collectable string class.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
const char * Data() const
TString & Prepend(const char *cs)
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual void StackTrace()
Print a stack trace.
A TTree represents a columnar dataset.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=nullptr)
Change branch address, dealing with clone trees properly.
TBranch * Branch(const char *name, T *obj, Int_t bufsize=32000, Int_t splitlevel=99)
Add a new branch, and infer the data type from the type of obj being passed.
virtual void SetBranchStatus(const char *bname, Bool_t status=1, UInt_t *found=nullptr)
Set branch status to Process or DoNotProcess.
RooCmdArg YVar(const RooAbsRealLValue &var, const RooCmdArg &arg=RooCmdArg::none())
RooCmdArg ZVar(const RooAbsRealLValue &var, const RooCmdArg &arg=RooCmdArg::none())
RooCmdArg SupNormSet(const RooArgSet &nset)
RooCmdArg Binning(const RooAbsBinning &binning)
RooCmdArg NormRange(const char *rangeNameList)
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
OwningPtr< T > owningPtr(std::unique_ptr< T > &&ptr)
Internal helper to turn a std::unique_ptr<T> into an OwningPtr.
T * OwningPtr
An alias for raw pointers for indicating that the return type of a RooFit function is an owning point...
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.
bool checkIfRangesOverlap(RooArgSet const &observables, std::vector< std::string > const &rangeNames)
Check if there is any overlap when a list of ranges is applied to a set of observables.
Double_t Erfc(Double_t x)
Computes the complementary error function erfc(x).
const char * normRangeName
RooFit::MPSplit interleave
const char * projectionRangeName
const RooArgSet * projDataSet
const char * curveNameSuffix
const char * addToCurveName
const RooFitResult * errorFR
const RooArgSet * projSet
const RooAbsData * projData
RooFit::MPSplit interleave
This struct enables passing computation data around between elements of a computation graph.
RooSpan< double > makeBatch(const RooAbsArg *owner, std::size_t size)
Create a writable batch.
std::map< RooFit::Detail::DataKey, std::vector< double > > ownedMemory
Memory owned by this struct. It is associated to nodes in the computation graph using their pointers.
std::map< RooFit::Detail::DataKey, RooSpan< const double > > spans
Once an object has computed its value(s), the span pointing to the results is registered here.
static uint64_t sum(uint64_t i)