185inline double getLog(
double prob,
RooAbsReal const *caller)
188 if (std::abs(prob) > 1e6) {
189 oocoutW(caller, Eval) <<
"RooAbsPdf::getLogVal(" << caller->
GetName()
190 <<
") WARNING: top-level pdf has a large value: " << prob << std::endl;
194 caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to a negative number");
199 caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to zero");
201 return -std::numeric_limits<double>::infinity();
205 caller->
logEvalError(
"getLogVal() top-level p.d.f evaluates to NaN");
210 return std::log(prob);
215using std::endl, std::string, std::ostream, std::vector, std::pair, std::make_pair;
248 double plotMin,
double plotMax) :
249 RooAbsReal(
name,title,plotMin,plotMax), _normMgr(this,10), _selectComp(true)
262 _normMgr(other._normMgr,this), _selectComp(other._selectComp), _normRange(other._normRange)
284 if (normVal < 0. || (normVal == 0. && rawVal != 0)) {
286 const std::string msg =
"p.d.f normalization integral is zero or negative: " + std::to_string(normVal);
293 logEvalError(
Form(
"p.d.f value is less than zero (%f), trying to recover", rawVal));
304 return (rawVal == 0. && normVal == 0.) ? 0. : rawVal / normVal;
334 bool nintChanged(
false) ;
366 cxcoutD(Eval) <<
"RooAbsPdf::analyticalIntegralWN(" <<
GetName() <<
") code = " << code <<
" normset = " << (normSet?*normSet:
RooArgSet()) << endl ;
369 if (code==0)
return getVal(normSet) ;
398 if(!error)
return error ;
421 if (!nset)
return 1 ;
429 coutW(Eval) <<
"RooAbsPdf::getNorm(" <<
GetName() <<
":: WARNING normalization is zero, nset = " ; nset->
Print(
"1") ;
430 if(
_errorCount == 10)
coutW(Eval) <<
"RooAbsPdf::getNorm(" <<
GetName() <<
") INFO: no more messages will be printed " << endl ;
448 return cache->
_norm ;
519 <<
") recreating normalization integral " << endl ;
522 cxcoutD(Tracing) <<
ClassName() <<
"::syncNormalization(" <<
GetName() <<
") selfNormalized, creating unit norm" << endl;
528 auto ntitle = std::string(
GetTitle()) +
" Unit Normalization";
529 auto nname = std::string(
GetName()) +
"_UnitNorm";
543 static_cast<RooRealIntegral*
>(normInt)->setAllowComponentSelection(
false);
548 if (cacheParamsStr && strlen(cacheParamsStr)) {
550 std::unique_ptr<RooArgSet> intParams{normInt->
getVariables()} ;
554 if (!cacheParams.
empty()) {
555 cxcoutD(Caching) <<
"RooAbsReal::createIntObj(" <<
GetName() <<
") INFO: constructing " << cacheParams.
size()
556 <<
"-dim value cache for integral over " << depList <<
" as a function of " << cacheParams <<
" in range " << (nr?nr:
"<default>") << endl ;
565 normInt= cachedIntegral ;
607 for(
auto * pdf : dynamic_range_cast<RooAbsPdf*>(branchList)) {
608 if (pdf) pdf->setTraceCounter(
value,
false) ;
623 return getLog(
getVal(nset),
this);
633bool checkInfNaNNeg(
const T& inputs) {
639 for (
double val : inputs) {
640 inf |= !std::isfinite(val);
645 return inf || nan || neg;
656 for (
unsigned int i=0; i<outputs.size(); ++i) {
657 const double value = outputs[i];
661 }
else if (!std::isfinite(outputs[i])){
664 }
else if (outputs[i] < 0.) {
665 logEvalError(
Form(
"p.d.f value of (%s) is less than zero (%f) for entry %zu",
673 for (std::size_t i = 0; i < pdfValues.size(); ++i) {
674 output[i] = getLog(pdfValues[i],
this);
735 coutE(InputArguments) <<
GetName() <<
": this PDF does not support extended maximum likelihood"
741 coutE(InputArguments) <<
GetName() <<
": calculated negative expected events: " << expected
743 logEvalError(
"extendedTerm #expected events is <0 return a NaN");
749 if (std::abs(expected)<1
e-10 && std::abs(sumEntries)<1
e-10) {
755 logEvalError(
"extendedTerm #expected events is a NaN") ;
759 double extra = doOffset
760 ? (expected - sumEntries) - sumEntries * (std::log(expected) - std::log(sumEntries))
761 : expected - sumEntries * std::log(expected);
763 if(sumEntriesW2 != 0.0) {
764 extra *= sumEntriesW2 / sumEntries;
795 double sumW =
data.sumEntries();
798 sumW2 =
data.sumEntriesW2();
943 return RooFit::FitHelpers::createNLL(*
this,
data, cmdList);
1072 return RooFit::FitHelpers::fitTo(*
this,
data, cmdList,
false);
1101 os <<
indent <<
"--- RooAbsPdf ---" << endl;
1104 os <<
indent <<
" Normalization integral: " << endl ;
1105 auto moreIndent = std::string(
indent.Data()) +
" " ;
1126 const RooArgSet* auxProto,
bool verbose)
const
1128 return new RooGenContext(*
this,vars,prototype,auxProto,verbose) ;
1135 bool verbose,
bool autoBinned,
const char* binnedTag)
const
1137 if (prototype || (auxProto && !auxProto->
empty())) {
1138 return genContext(vars,prototype,auxProto,verbose);
1145 context=
genContext(vars,
nullptr,
nullptr,verbose);
1215 pc.
defineInt(
"randProto",
"PrototypeData",0,0) ;
1216 pc.
defineInt(
"resampleProto",
"PrototypeData",1,0) ;
1218 pc.
defineInt(
"extended",
"Extended",0,0) ;
1219 pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
1220 pc.
defineInt(
"autoBinned",
"AutoBinned",0,1) ;
1221 pc.
defineInt(
"expectedData",
"ExpectedData",0,0) ;
1228 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
1235 const char* dsetName = pc.
getString(
"dsetName") ;
1236 bool verbose = pc.
getInt(
"verbose") ;
1237 bool randProto = pc.
getInt(
"randProto") ;
1238 bool resampleProto = pc.
getInt(
"resampleProto") ;
1239 bool extended = pc.
getInt(
"extended") ;
1240 bool autoBinned = pc.
getInt(
"autoBinned") ;
1241 const char* binnedTag = pc.
getString(
"binnedTag") ;
1243 double nEventsD = pc.
getInt(
"nEventsD") ;
1245 bool expectedData = pc.
getInt(
"expectedData") ;
1247 double nEvents = (nEventsD>0) ? nEventsD :
double(nEventsI);
1256 }
else if (nEvents==0) {
1257 cxcoutI(Generation) <<
"No number of events specified , number of events generated is "
1261 if (extended && protoData && !randProto) {
1262 cxcoutI(Generation) <<
"WARNING Using generator option Extended() (Poisson distribution of #events) together "
1263 <<
"with a prototype dataset implies incomplete sampling or oversampling of proto data. "
1264 <<
"Set randomize flag in ProtoData() option to randomize prototype dataset order and thus "
1265 <<
"to randomize the set of over/undersampled prototype events for each generation cycle." << endl ;
1270 std::unique_ptr<RooDataSet>
data;
1272 data = std::unique_ptr<RooDataSet>{
generate(whatVars,*protoData,
Int_t(nEvents),verbose,randProto,resampleProto)};
1274 data = std::unique_ptr<RooDataSet>{
generate(whatVars,nEvents,verbose,autoBinned,binnedTag,expectedData, extended)};
1278 if (dsetName && strlen(dsetName)>0) {
1279 data->SetName(dsetName) ;
1307 pc.
defineInt(
"randProto",
"PrototypeData",0,0) ;
1308 pc.
defineInt(
"resampleProto",
"PrototypeData",1,0) ;
1310 pc.
defineInt(
"extended",
"Extended",0,0) ;
1311 pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
1312 pc.
defineInt(
"autoBinned",
"AutoBinned",0,1) ;
1318 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
1325 const char* dsetName = pc.
getString(
"dsetName") ;
1327 bool verbose = pc.
getInt(
"verbose") ;
1328 bool randProto = pc.
getInt(
"randProto") ;
1329 bool resampleProto = pc.
getInt(
"resampleProto") ;
1330 bool extended = pc.
getInt(
"extended") ;
1331 bool autoBinned = pc.
getInt(
"autoBinned") ;
1332 const char* binnedTag = pc.
getString(
"binnedTag") ;
1336 return new GenSpec(cx,whatVars,protoData,nEvents,extended,randProto,resampleProto,dsetName) ;
1390 std::unique_ptr<RooAbsGenContext> context{
autoGenContext(whatVars,
nullptr,
nullptr,verbose,autoBinned,binnedTag)};
1395 std::unique_ptr<RooDataSet> generated;
1396 if(
nullptr != context && context->isValid()) {
1397 generated = std::unique_ptr<RooDataSet>{context->generate(nEvents,
false, extended)};
1400 coutE(Generation) <<
"RooAbsPdf::generate(" <<
GetName() <<
") cannot create a valid context" << endl;
1412 double nEvents,
bool ,
bool randProtoOrder,
bool resampleProto,
1413 bool skipInit,
bool extended)
const
1415 if (nEvents==0 && (prototype==
nullptr || prototype->
numEntries()==0)) {
1416 return std::make_unique<RooDataSet>(
"emptyData",
"emptyData",whatVars);
1419 std::unique_ptr<RooDataSet> generated;
1422 if (resampleProto) {
1423 randProtoOrder=true ;
1426 if (randProtoOrder && prototype && prototype->
numEntries()!=nEvents) {
1427 coutI(Generation) <<
"RooAbsPdf::generate (Re)randomizing event order in prototype dataset (Nevt=" << nEvents <<
")" << endl ;
1434 generated = std::unique_ptr<RooDataSet>{context.
generate(nEvents,skipInit,extended)};
1437 coutE(Generation) <<
"RooAbsPdf::generate(" <<
GetName() <<
") do not have a valid generator context" << endl;
1468 Int_t nEvents,
bool verbose,
bool randProtoOrder,
bool resampleProto)
const
1470 std::unique_ptr<RooAbsGenContext> context{
genContext(whatVars,&prototype,
nullptr,verbose)};
1474 coutE(Generation) <<
"RooAbsPdf::generate(" <<
GetName() <<
") ERROR creating generator context" << endl ;
1489 if (!resampleProto) {
1491 std::iota(lut, lut + nProto, 0);
1497 for (
int i = nProto-1; i > 0; --i) {
1562 if(server == &arg)
continue;
1563 if(server->dependsOn(arg)) {
1604 pc.
defineInt(
"extended",
"Extended",0,0) ;
1605 pc.
defineInt(
"nEvents",
"NumEvents",0,0) ;
1607 pc.
defineInt(
"expectedData",
"ExpectedData",0,0) ;
1610 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6) ;
1616 double nEvents = pc.
getDouble(
"nEventsD") ;
1618 nEvents = pc.
getInt(
"nEvents") ;
1621 bool extended = pc.
getInt(
"extended") ;
1622 bool expectedData = pc.
getInt(
"expectedData") ;
1623 const char* dsetName = pc.
getString(
"dsetName") ;
1628 cxcoutI(Generation) <<
" Extended mode active, number of events generated (" << nEvents <<
") is Poisson fluctuation on "
1629 <<
GetName() <<
"::expectedEvents() = " << nEvents << endl ;
1634 }
else if (nEvents==0) {
1635 cxcoutI(Generation) <<
"No number of events specified , number of events generated is "
1643 if (dsetName && strlen(dsetName)>0) {
1644 data->SetName(dsetName) ;
1681 auto hist = std::make_unique<RooDataHist>(
"genData",
"genData",whatVars);
1686 coutE(InputArguments) <<
"RooAbsPdf::generateBinned(" <<
GetName() <<
") ERROR: No event count provided and p.d.f does not provide expected number of events" << endl ;
1691 if (expectedData || extended) {
1702 vector<int> histOut(hist->numEntries()) ;
1703 double histMax(-1) ;
1704 Int_t histOutSum(0) ;
1705 for (
int i=0 ; i<hist->numEntries() ; i++) {
1710 double w=hist->weight()*nEvents ;
1711 hist->set(i,
w, sqrt(
w));
1713 }
else if (extended) {
1717 hist->set(
w,sqrt(
w)) ;
1723 if (hist->weight()>histMax) {
1724 histMax = hist->weight() ;
1727 histOutSum += histOut[i] ;
1732 if (!expectedData && !extended) {
1737 Int_t nEvtExtra = std::abs(
Int_t(nEvents)-histOutSum) ;
1738 Int_t wgt = (histOutSum>nEvents) ? -1 : 1 ;
1741 std::size_t counter = 0;
1742 bool havePrintedInfo =
false;
1743 while(nEvtExtra>0) {
1746 hist->get(ibinRand) ;
1749 if (ranY<hist->weight()) {
1751 histOut[ibinRand]++ ;
1754 if (histOut[ibinRand]>0) {
1755 histOut[ibinRand]-- ;
1763 if ((counter++ > 10*nEvents || nEvents > 1.E7) && !havePrintedInfo) {
1764 havePrintedInfo =
true;
1765 coutP(Generation) <<
"RooAbsPdf::generateBinned(" <<
GetName() <<
") Performing costly accept/reject sampling. If this takes too long, use "
1766 <<
"extended mode to speed up the process." << std::endl;
1771 for (
int i=0 ; i<hist->numEntries() ; i++) {
1773 hist->set(histOut[i],sqrt(1.0*histOut[i])) ;
1776 }
else if (expectedData) {
1781 double corr = nEvents/hist->sumEntries() ;
1782 for (
int i=0 ; i<hist->numEntries() ; i++) {
1784 hist->set(hist->weight()*corr,sqrt(hist->weight()*corr)) ;
1799 return generate(whatVars,nEvents) ;
1803void removeRangeOverlap(std::vector<std::pair<double, double>>& ranges) {
1805 std::sort(ranges.begin(), ranges.end());
1807 for (
auto it = ranges.begin(); it != ranges.end(); ++it) {
1808 double& startL = it->first;
1809 double& endL = it->second;
1811 for (
auto innerIt = it+1; innerIt != ranges.end(); ++innerIt) {
1812 const double startR = innerIt->first;
1813 const double endR = innerIt->second;
1815 if (startL <= startR && startR <= endL) {
1817 endL = std::max(endL, endR);
1818 *innerIt = make_pair(0., 0.);
1823 auto newEnd = std::remove_if(ranges.begin(), ranges.end(),
1824 [](
const std::pair<double,double>&
input){
1825 return input.first == input.second;
1827 ranges.erase(newEnd, ranges.end());
1940 std::unique_ptr<RooCmdArg> plotRange;
1941 std::unique_ptr<RooCmdArg> normRange2;
1945 cmdList.
Add(plotRange.get());
1950 cmdList.
Add(normRange2.get());
1953 if (plotRange || normRange2) {
1954 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") p.d.f was fitted in a subrange and no explicit "
1955 << (plotRange?
"Range()":
"") << ((plotRange&&normRange2)?
" and ":
"")
1956 << (normRange2?
"NormRange()":
"") <<
" was specified. Plotting / normalising in fit range. To override, do one of the following"
1957 <<
"\n\t- Clear the automatic fit range attribute: <pdf>.removeStringAttribute(\"fitrange\");"
1958 <<
"\n\t- Explicitly specify the plotting range: Range(\"<rangeName>\")."
1959 <<
"\n\t- Explicitly specify where to compute the normalisation: NormRange(\"<rangeName>\")."
1960 <<
"\n\tThe default (full) range can be denoted with Range(\"\") / NormRange(\"\")."<< endl ;
1970 pc.
defineSet(
"compSet",
"SelectCompSet",0) ;
1977 pc.
defineInt(
"rangeAdjustNorm",
"Range",0,0) ;
1978 pc.
defineInt(
"rangeWNAdjustNorm",
"RangeWithName",0,0) ;
1979 pc.
defineMutex(
"SelectCompSet",
"SelectCompSpec") ;
1991 double scaleFactor = pc.
getDouble(
"scaleFactor") ;
1993 const char* compSpec = pc.
getString(
"compSpec") ;
1995 bool haveCompSel = ( (compSpec && strlen(compSpec)>0) || compSet) ;
1998 std::string nameSuffix ;
1999 if (compSpec && strlen(compSpec)>0) {
2000 nameSuffix.append(
"_Comp[") ;
2001 nameSuffix.append(compSpec) ;
2002 nameSuffix.append(
"]") ;
2003 }
else if (compSet) {
2012 RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.c_str(),
nullptr,
nullptr,
nullptr) ;
2013 cmdList.
Add(&cnsuffix);
2018 double nExpected(1) ;
2022 <<
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
2033 bool hasCustomRange(
false);
2034 bool adjustNorm(
false);
2036 std::vector<pair<double,double> > rangeLim;
2041 double rangeLo = pc.
getDouble(
"rangeLo") ;
2042 double rangeHi = pc.
getDouble(
"rangeHi") ;
2043 rangeLim.push_back(make_pair(rangeLo,rangeHi)) ;
2044 adjustNorm = pc.
getInt(
"rangeAdjustNorm") ;
2045 hasCustomRange = true ;
2047 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") only plotting range ["
2048 << rangeLo <<
"," << rangeHi <<
"]" ;
2050 ccoutI(Plotting) <<
", curve is normalized to data in " << (adjustNorm?
"given":
"full") <<
" range" << endl ;
2052 ccoutI(Plotting) << endl ;
2055 nameSuffix.append(
Form(
"_Range[%f_%f]",rangeLo,rangeHi)) ;
2059 for (
const std::string& rangeNameToken :
ROOT::Split(pc.
getString(
"rangeName",
"",
false),
",")) {
2060 const char* thisRangeName = rangeNameToken.empty() ? nullptr : rangeNameToken.c_str();
2062 coutE(Plotting) <<
"Range '" << rangeNameToken <<
"' not defined for variable '"
2068 adjustNorm = pc.
getInt(
"rangeWNAdjustNorm") ;
2069 hasCustomRange = true ;
2071 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") only plotting range '" << pc.
getString(
"rangeName",
"",
false) <<
"'" ;
2073 ccoutI(Plotting) <<
", curve is normalized to data in " << (adjustNorm?
"given":
"full") <<
" range" << endl ;
2075 ccoutI(Plotting) << endl ;
2078 nameSuffix.append(
"_Range[" + std::string(pc.
getString(
"rangeName")) +
"]");
2083 for (
const auto& rangeNameToken :
ROOT::Split(pc.
getString(
"normRangeName",
"",
false),
",")) {
2084 const char* thisRangeName = rangeNameToken.empty() ? nullptr : rangeNameToken.c_str();
2086 coutE(Plotting) <<
"Range '" << rangeNameToken <<
"' not defined for variable '"
2093 hasCustomRange = true ;
2094 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") p.d.f. curve is normalized using explicit choice of ranges '" << pc.
getString(
"normRangeName",
"",
false) <<
"'" << endl ;
2096 nameSuffix.append(
"_NormRange[" + std::string(pc.
getString(
"rangeName")) +
"]");
2100 if (hasCustomRange && adjustNorm) {
2102 const std::size_t oldSize = rangeLim.size();
2103 removeRangeOverlap(rangeLim);
2105 if (oldSize != rangeLim.size() && !pc.
hasProcessed(
"NormRange")) {
2109 coutE(Plotting) <<
"Requested plot/integration ranges overlap. For correct plotting, new ranges "
2110 "will be defined." << std::endl;
2113 std::string rangesNoOverlap;
2114 for (
auto it = rangeLim.begin(); it != rangeLim.end(); ++it) {
2115 std::stringstream rangeName;
2116 rangeName <<
"Remove_overlap_range_" << it - rangeLim.begin();
2117 plotVar->setRange(rangeName.str().c_str(), it->first, it->second);
2118 if (!rangesNoOverlap.empty())
2119 rangesNoOverlap +=
",";
2120 rangesNoOverlap += rangeName.str();
2125 rangeArg->
setString(0, rangesNoOverlap.c_str());
2127 plotRange = std::make_unique<RooCmdArg>(
RooFit::Range(rangesNoOverlap.c_str()));
2128 cmdList.
Add(plotRange.get());
2132 double rangeNevt(0) ;
2133 for (
const auto& riter : rangeLim) {
2138 scaleFactor *= rangeNevt/nExpected ;
2144 scaleFactor *= nExpected ;
2146 scaleFactor /= nExpected ;
2165 for (
const auto arg : branchNodeSet) {
2167 branchNodeSet.
remove(*arg) ;
2172 std::unique_ptr<RooArgSet> dirSelNodes;
2178 if (!dirSelNodes->empty()) {
2179 coutI(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") directly selected PDF components: " << *dirSelNodes << endl ;
2185 coutE(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") ERROR: component selection set " << *compSet <<
" does not match any components of p.d.f." << endl ;
2187 coutE(Plotting) <<
"RooAbsPdf::plotOn(" <<
GetName() <<
") ERROR: component selection expression '" << compSpec <<
"' does not select any components of p.d.f." << endl ;
2194 RooCmdArg cnsuffix(
"CurveNameSuffix",0,0,0,0,nameSuffix.c_str(),
nullptr,
nullptr,
nullptr) ;
2195 cmdList.
Add(&cnsuffix);
2226 double nExpected(1) ;
2230 <<
"): ERROR the 'Expected' scale option can only be used on extendable PDFs" << endl ;
2300 pc.
defineInt(
"showc",
"ShowConstants",0,0) ;
2301 pc.
defineSet(
"params",
"Parameters",0,
nullptr) ;
2302 pc.
defineInt(
"dummy",
"FormatArgs",0,0) ;
2312 const char* label = pc.
getString(
"label") ;
2316 int showc = pc.
getInt(
"showc") ;
2321 params = std::unique_ptr<RooArgSet>{
static_cast<RooArgSet*
>(params->selectCommon(*requestedParams))};
2343 bool showLabel= (label !=
nullptr && strlen(label) > 0);
2349 for (
const auto param : params) {
2351 if(showConstants || !var->isConstant())
ymin-= dy;
2354 std::string labelString = label;
2355 unsigned int numLines = std::count(labelString.begin(), labelString.end(),
'\n') + 1;
2356 if (showLabel)
ymin -= numLines * dy;
2360 if(!
box)
return nullptr;
2361 box->SetName((std::string(
GetName()) +
"_paramBox").c_str());
2362 box->SetFillColor(0);
2363 box->SetBorderSize(0);
2364 box->SetTextAlign(12);
2365 box->SetTextSize(0.04F);
2366 box->SetFillStyle(0);
2368 for (
const auto param : params) {
2369 auto var =
static_cast<const RooRealVar*
>(param);
2370 if(var->isConstant() && !showConstants)
continue;
2372 std::unique_ptr<TString> formatted{formatCmd ? var->format(*formatCmd) : var->format(2,
"NELU")};
2373 box->AddText(formatted->Data());
2434 pdfOwner->
_norm = nullptr ;
2450 name.append(
"_Proj[") ;
2451 if (!iset.
empty()) {
2453 for(
auto const& arg : iset) {
2459 name.append(arg->GetName()) ;
2509 pc.
defineSet(
"supNormSet",
"SupNormSet",0,
nullptr) ;
2510 pc.
defineInt(
"numScanBins",
"ScanParameters",0,1000) ;
2511 pc.
defineInt(
"intOrder",
"ScanParameters",1,2) ;
2512 pc.
defineInt(
"doScanNum",
"ScanNumCdf",0,1) ;
2513 pc.
defineInt(
"doScanAll",
"ScanAllCdf",0,0) ;
2514 pc.
defineInt(
"doScanNon",
"ScanNoCdf",0,0) ;
2515 pc.
defineMutex(
"ScanNumCdf",
"ScanAllCdf",
"ScanNoCdf") ;
2518 pc.
process(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) ;
2547 coutI(NumIntegration) <<
"RooAbsPdf::createCdf(" <<
GetName() <<
") integration over observable(s) " << iset <<
" involves numeric integration," << endl
2548 <<
" constructing cdf though numeric integration of sampled pdf in " << numScanBins <<
" bins and applying order "
2549 << intOrder <<
" interpolation on integrated histogram." << endl
2550 <<
" To override this choice of technique use argument ScanNone(), to change scan parameters use ScanParameters(nbins,order) argument" << endl ;
2562 ivar->
setBins(numScanBins,
"numcdf") ;
2563 auto ret = std::make_unique<RooNumCdf>(
name.c_str(),
name.c_str(),*
this,*ivar,
"numcdf");
2564 ret->setInterpolationOrder(intOrder) ;
2565 return RooFit::makeOwningPtr<RooAbsReal>(std::move(ret));
2576 bool stripDisconnected,
bool removeConstraintsFromPdf)
const
2581 for (
const auto arg : *comps) {
2582 auto pdf =
dynamic_cast<const RooAbsPdf*
>(arg) ;
2583 if (pdf && !ret->
find(pdf->GetName())) {
2584 std::unique_ptr<RooArgSet> compRet(
2585 pdf->getConstraints(observables,constrainedParams,stripDisconnected,removeConstraintsFromPdf));
2587 ret->
add(*compRet,
false) ;
2640 if (config)
return config ;
2672 delete _genContext ;
2679 bool extended,
bool randProto,
bool resampleProto,
TString dsetName,
bool init) :
2680 _genContext(context), _whatVars(whatVars), _protoData(protoData), _nGen(nGen),
_extended(extended),
2681 _randProto(randProto), _resampleProto(resampleProto), _dsetName(dsetName),
_init(init)
2688void sterilizeClientCaches(
RooAbsArg & arg) {
2690 for(std::size_t iClient = 0; iClient <
clients.size(); ++iClient) {
2692 const std::size_t oldClientsSize =
clients.size();
2695 for(
int iCache = 0; iCache < client->
numCaches(); ++iCache) {
2697 cacheMgr->sterilize();
2704 if(
clients.size() != oldClientsSize) {
2705 auto clientIter = std::find(
clients.begin(),
clients.end(), client);
2706 if(clientIter ==
clients.end()) {
2707 throw std::runtime_error(
"After a clients caches were cleared, the client was gone! This should not happen.");
2709 iClient = std::distance(
clients.begin(), clientIter);
2728 sterilizeClientCaches(*
this);
2748 sterilizeClientCaches(*
this);
2762 bool nameChange,
bool isRecursiveStep)
2780std::unique_ptr<RooAbsArg>
2786 std::unique_ptr<RooAbsPdf> pdfClone(
static_cast<RooAbsPdf *
>(this->
Clone()));
2789 auto newArg = std::make_unique<RooNormalizedPdf>(*pdfClone, normSet);
2793 for (
RooAbsArg *server : newArg->servers()) {
2797 newArg->addOwnedComponents(std::move(pdfClone));
2807 std::stringstream errMsg;
2809 <<
" did not overload RooAbsPdf::createExpectedEventsFunc()!";
2810 coutE(InputArguments) << errMsg.str() << std::endl;
bool _init
! Is object initialized
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 input
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 value
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Common abstract base class for objects that represent a value and a "shape" in RooFit.
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.
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'.
TIterator Use clients() and begin()
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.
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 expression tree)
RooAbsCache * getCache(Int_t index) const
Return registered cache object by index.
bool isValueDirty() const
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.
Abstract base class for objects that represent a discrete value that can be set from the outside,...
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.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Storage_t::size_type size() const
RooAbsArg * first() const
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.
Abstract base class for binned and unbinned datasets.
virtual Int_t numEntries() const
Return number of entries in dataset, i.e., count unweighted entries.
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
Abstract interface for all probability density functions.
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...
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.
virtual std::unique_ptr< RooFitResult > fitToImpl(RooAbsData &data, const RooLinkedList &cmdList)
Protected implementation of the likelihood fitting routine.
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 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.
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...
Int_t * randomizeProtoOrder(Int_t nProto, Int_t nGen, bool resample=false) const
Return lookup table with randomized order for nProto prototype events.
void setNormRange(const char *rangeName)
~RooAbsPdf() override
Destructor.
RooArgSet const * _normSet
Normalization integral (owned by _normMgr)
RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const override
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
RooNumGenConfig * specialGeneratorConfig() const
Returns the specialized integrator configuration for this RooAbsReal.
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.
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...
GenSpec * prepareMultiGen(const RooArgSet &whatVars, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={})
Prepare GenSpec configuration object for efficient generation of multiple datasets from identical spe...
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,...
virtual RooPlot * paramOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={})
Add a box with parameter values (and errors) to the specified frame.
Int_t _negCount
Number of negative probabilities remaining to print.
RooFit::OwningPtr< RooDataSet > generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={})
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
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.
virtual RooFit::OwningPtr< RooDataHist > generateBinned(const RooArgSet &whatVars, double nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}) const
As RooAbsPdf::generateBinned(const RooArgSet&, const RooCmdArg&,const RooCmdArg&, const RooCmdArg&,...
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.
void printValue(std::ostream &os) const override
Print value of p.d.f, also print normalization integral that was last used, if any.
virtual std::unique_ptr< RooAbsReal > createNLLImpl(RooAbsData &data, const RooLinkedList &cmdList)
Protected implementation of the NLL creation routine.
void logBatchComputationErrors(std::span< const double > &outputs, std::size_t begin) const
Scan through outputs and fix+log all nans and negative values.
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.
void getLogProbabilities(std::span< const double > pdfValues, double *output) const
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...
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.
Abstract base class for objects that represent a real value and implements functionality common to al...
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.
RooFit::OwningPtr< RooAbsReal > createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}) const
Create an object that represents the integral of the function over one or more observables listed in ...
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
bool plotSanityChecks(RooPlot *frame) const
Utility function for plotOn(), perform general sanity check on frame to ensure safe plotting operatio...
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
Function that is called at the end of redirectServers().
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.
TString integralNameSuffix(const RooArgSet &iset, const RooArgSet *nset=nullptr, const char *rangeName=nullptr, bool omitEmpty=false) const
Construct string with unique suffix name to give to integral object that encodes integrated observabl...
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 RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1={}, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}, const RooCmdArg &arg9={}, const RooCmdArg &arg10={}) const
Plot (project) PDF on specified frame.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
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.
Implementation of RooAbsCachedReal that can cache any external RooAbsReal input function provided in ...
void setCacheSource(bool flag)
Named container for two doubles, two integers two object points and three string pointers that can be...
void setString(Int_t idx, const char *value)
Configurable parser for RooCmdArg named arguments.
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.
double getDouble(const char *name, double defaultValue=0.0) const
Return double property registered with name 'name'.
bool defineDouble(const char *name, const char *argName, int doubleNum, double defValue=0.0)
Define double property name 'name' mapped to double in slot 'doubleNum' in RooCmdArg with name argNam...
static void stripCmdList(RooLinkedList &cmdList, const char *cmdsToPurge)
Utility function that strips command names listed (comma separated) in cmdsToPurge from cmdList.
RooArgSet * getSet(const char *name, RooArgSet *set=nullptr) const
Return RooArgSet property registered with name 'name'.
bool defineSet(const char *name, const char *argName, int setNum, const RooArgSet *set=nullptr)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
bool ok(bool verbose) const
Return true of parsing was successful.
bool defineObject(const char *name, const char *argName, int setNum, const TObject *obj=nullptr, bool isArray=false)
Define TObject property name 'name' mapped to object in slot 'setNum' in RooCmdArg with name argName ...
const char * getString(const char *name, const char *defaultValue="", bool convEmptyToNull=false) const
Return string property registered with name 'name'.
bool defineString(const char *name, const char *argName, int stringNum, const char *defValue="", bool appendMode=false)
Define double property name 'name' mapped to double in slot 'stringNum' in RooCmdArg with name argNam...
bool defineInt(const char *name, const char *argName, int intNum, int defValue=0)
Define integer property name 'name' mapped to integer in slot 'intNum' in RooCmdArg with name argName...
void allowUndefined(bool flag=true)
If flag is true the processing of unrecognized RooCmdArgs is not considered an error.
int getInt(const char *name, int defaultValue=0) const
Return integer property registered with name 'name'.
TObject * getObject(const char *name, TObject *obj=nullptr) const
Return TObject property registered with name 'name'.
Container class to hold unbinned data.
void markAsCompiled(RooAbsArg &arg) const
void compileServers(RooAbsArg &arg, RooArgSet const &normSet)
Implements a universal generator context for all RooAbsPdf classes that do not have or need a special...
Switches the message service to a different level while the instance is alive.
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
virtual void Add(TObject *arg)
TObject * FindObject(const char *name) const override
Return pointer to object with given name.
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
Holds the configuration parameters of the various numeric integrators used by RooRealIntegral.
static RooNumGenConfig & defaultConfig()
Return reference to instance of default numeric integrator configuration object.
Implementation of a RooCacheManager<RooAbsCacheElement> that specializes in the storage of cache elem...
void sterilize() override
Clear the cache payload but retain slot mapping w.r.t to normalization and integration sets.
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,...
A RooAbsPdf implementation that represent a projection of a given input p.d.f and the object returned...
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.
Performs hybrid numerical/analytical integrals of RooAbsReal objects.
const RooArgSet & numIntRealVars() const
Variable that can be changed from the outside.
void setBins(Int_t nBins, const char *name=nullptr)
Create a uniform binning under name 'name' for this variable.
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.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
A Pave (see TPave) with text, lines or/and boxes inside.
virtual ULong64_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 Clear()
Clear string without changing its capacity.
const char * Data() const
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
RooCmdArg SupNormSet(const RooArgSet &nset)
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.
OwningPtr< T > makeOwningPtr(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)
std::string getColonSeparatedNameString(RooArgSet const &argSet, char delim=':')
Double_t QuietNaN()
Returns a quiet NaN as defined by IEEE 754.
__roodevice__ static __roohost__ double packFloatIntoNaN(float payload)
Pack float into mantissa of a NaN.