76using std::endl, std::string, std::vector, std::list, std::ostream, std::map, std::ostringstream;
114 _pdfList(
"!pdfs",
"List of PDFs",
this)
117 _pdfNSetList.emplace_back(std::make_unique<RooArgSet>(
"nset")) ;
123 _pdfNSetList.emplace_back(std::make_unique<RooArgSet>(
"nset")) ;
128 coutW(InputArguments) <<
"RooProdPdf::RooProdPdf(" <<
GetName()
129 <<
") multiple components with extended terms detected,"
130 <<
" product will not be extendable." << std::endl ;
162 _pdfList(
"!pdfs",
"List of PDFs",
this)
210 _pdfList(
"!pdfs",
"List of PDFs",
this)
234 _pdfList(
"!pdfList",
"List of PDFs",
this)
254 _pdfList(
"!pdfs",
"List of PDFs",
this)
268 _genCode(
other._genCode),
269 _cutOff(
other._cutOff),
271 _extendedIndex(
other._extendedIndex),
272 _useDefaultGen(
other._useDefaultGen),
273 _refRangeName(
other._refRangeName),
274 _selfNorm(
other._selfNorm),
275 _defNormSet(
other._defNormSet)
278 for(
auto const& nset :
other._pdfNSetList) {
279 _pdfNSetList.emplace_back(std::make_unique<RooArgSet>(nset->GetName()));
298 _pdfNSetList.emplace_back(std::make_unique<RooArgSet>(
"nset")) ;
300 if (pdf->canBeExtended()) {
310 if (0 ==
strcmp(
carg->GetName(),
"Conditional")) {
322 if (
thePdf->canBeExtended()) {
330 coutW(InputArguments) <<
"Unknown arg: " <<
carg->GetName() << std::endl ;
336 coutW(InputArguments) <<
"RooProdPdf::RooProdPdf(" <<
GetName()
337 <<
") WARNING: multiple components with extended terms detected,"
338 <<
" product will not be extendable." << std::endl ;
387 cxcoutD(Eval) <<
"RooProdPdf::calculate(" <<
GetName() <<
") rearranged product calculation"
416 v.erase(std::remove_if(
v.begin(),
v.end(), [](T*
x){ return x == nullptr; } ),
v.end());
421 for (
auto const& arg :
other) {
423 return elm !=
nullptr &&
elm->namePtr() == arg->namePtr();
427 if(found !=
v.end()) {
434void addCommon(std::vector<RooAbsArg*> &
v, std::vector<RooAbsArg*>
const&
o1, std::vector<RooAbsArg*>
const&
o2) {
436 for (
auto const& arg :
o1) {
438 return elm->namePtr() == arg->namePtr();
450 const char *
range = normRange.
Length() > 0 ? normRange.
Data() :
nullptr;
478 std::vector<RooAbsArg*>
pdfNSet;
479 std::vector<RooAbsArg*>
pdfCSet;
498 std::vector<RooAbsArg*> & out,
501 if (arg->dependsOnValue(
dataList) && arg->isLValue()) {
655 auto cache = std::make_unique<CacheElem>();
674 if (1 ==
group.size()) {
689 std::ostringstream str;
termImpSet.printValue(str);
690 ratioTerms[str.str()].addOwned(std::move(ratio));
708 std::ostringstream str;
termImpSet.printValue(str);
709 ratioTerms[str.str()].addOwned(std::move(ratio));
728 ostringstream str;
termNSet.printValue(str);
731 cache->_ownedList.addOwned(std::move(
ratioTerms[str.str()]));
737 if (1 ==
group.size()) {
756 cache->_partList.add(*func.x0);
757 if (func.isOwned) cache->_ownedList.addOwned(std::unique_ptr<RooAbsArg>{func.x0});
759 cache->_normList.emplace_back(std::make_unique<RooArgSet>());
760 norm->snapshot(*cache->_normList.back(),
false);
762 cache->_numList.addOwned(std::move(func.x1));
763 cache->_denList.addOwned(std::move(func.x2));
788 if (func.isOwned) cache->_ownedList.addOwned(std::unique_ptr<RooAbsArg>{func.x0});
808 inttmp->setStringAttribute(
"PROD_TERM_TYPE",
"SPECINT");
810 cache->_partList.add(*
inttmp);
828 numtmp->addOwnedComponents(std::move(
ndr));
830 cache->_ownedList.addOwned(std::move(
prodtmp));
831 cache->_ownedList.addOwned(std::move(
inttmp));
832 cache->_ownedList.addOwned(std::move(
prodtmp_num));
833 cache->_ownedList.addOwned(std::move(
prodtmp_den));
834 cache->_numList.addOwned(std::move(
numtmp));
836 cache->_normList.emplace_back(std::make_unique<RooArgSet>());
868 auto ratio = std::make_unique<RooFormulaVar>(
Form(
"ratio(%s,%s)",
ratio_num->GetName(),
ratio_den->GetName()),
"@0/@1",
871 ratio->addOwnedComponents(std::move(
ratio_num));
872 ratio->addOwnedComponents(std::move(
ratio_den));
873 ratio->setAttribute(
"RATIO_TERM") ;
903 if (
string(
"SPECINT")==
part->getStringAttribute(
"PROD_TERM_TYPE")) {
909 std::unique_ptr<RooArgSet> components{
orig->getComponents()};
911 if (
carg->getAttribute(
"RATIO_TERM")) {
936 if (arg->getAttribute(
"RATIO_TERM")) {
956 if (
string(
"SPECINT")==
part->getStringAttribute(
"PROD_TERM_TYPE")) {
961 if (
orig->intRange()) {
968 if (ratio &&
parg->dependsOn(*ratio)) {
1019 std::unique_ptr<RooAbsReal>
specInt;
1030 throw string(
"this should not happen") ;
1053 string name = std::string{
GetName()} +
"_numerator";
1056 std::unique_ptr<RooAbsReal> numerator = std::make_unique<RooProduct>(
name.c_str(),
name.c_str(),
nomList) ;
1063 prod_comp->addOwnedComponents(std::move(iter->second));
1073 string namesr =
Form(
"SPEC_RATIO(%s,%s)",numerator->GetName(),
norm->GetName()) ;
1075 ndr->addOwnedComponents(std::move(numerator));
1130 std::stringstream
errMsg;
1131 errMsg <<
"specializeIntegral: unknown input type " <<
input.ClassName() <<
"::" <<
input.GetName();
1132 throw std::runtime_error(
errMsg.str());
1167 std::vector<RooArgSet*>*
newGroup = nullptr ;
1237 if (
term->size()==1) {
1246 ret.x0->setStringAttribute(
"PROD_TERM_TYPE",
"IIIa") ;
1264 ret.x0->setStringAttribute(
"PROD_TERM_TYPE",
"IIIb") ;
1283 if (nset && !nset->
empty() &&
term->size()>1) {
1290 ret.x0->setStringAttribute(
"PROD_TERM_TYPE",
"IVa") ;
1310 ret.isOwned =
false;
1321 ret0->setStringAttribute(
"PROD_TERM_TYPE",
"IVb") ;
1323 ret.x1 = std::unique_ptr<RooAbsReal>{pdf->createIntegral(
RooArgSet())};
1328 coutE(Eval) <<
"RooProdPdf::processProductTerm(" <<
GetName() <<
") unidentified term!!!" << std::endl ;
1343 std::ostringstream os;
1350 if (!first) os <<
"_X_";
1352 os << pdf->GetName();
1420 if (cache==
nullptr) {
1457 coutF(Generation) <<
"Requesting expected number of events from a RooProdPdf that does not contain an extended p.d.f" << std::endl ;
1458 throw std::logic_error(std::string(
"RooProdPdf ") +
GetName() +
" could not be extended.");
1467 coutF(Generation) <<
"Requesting expected number of events from a RooProdPdf that does not contain an extended p.d.f" << std::endl ;
1468 throw std::logic_error(std::string(
"RooProdPdf ") +
GetName() +
" could not be extended.");
1503 std::vector<Int_t> code;
1572 ret.add(_partList) ;
1575 if (_rearrangedNum)
ret.add(*_rearrangedNum) ;
1576 if (_rearrangedDen)
ret.add(*_rearrangedDen) ;
1589 os <<
indent <<
"RooProdPdf begin partial integral cache" << std::endl ;
1593 for(
auto const& arg : _partList) {
1594 arg->printCompactTree(os,
indent2.c_str()) ;
1598 os <<
indent <<
"RooProdPdf end partial integral cache" << std::endl ;
1617 if (pdf->dependsOn(arg)) {
1648 for(
auto arg :
pdfs) {
1651 coutW(InputArguments) <<
"RooProdPdf::addPdfs(" <<
GetName() <<
") list arg "
1652 << arg->GetName() <<
" is not a PDF, ignored" << std::endl ;
1663 _pdfNSetList.emplace_back(std::make_unique<RooArgSet>(
"nset"));
1668 coutW(InputArguments) <<
"RooProdPdf::addPdfs(" <<
GetName()
1669 <<
") WARNING: multiple components with extended terms detected,"
1670 <<
" product will not be extendable." << std::endl ;
1710 std::vector<TNamed const*>
ptrs;
1713 ptrs.push_back(arg->namePtr());
1726 }
else if (*
pB < *
pA) {
1746std::unique_ptr<RooArgSet>
1749 auto constraints = std::make_unique<RooArgSet>(
"constraints");
1760 pdf->getParameters(
nullptr,
tmp);
1784 constraints->add(*pdf) ;
1791 tmp.remove(observables,
false,
true);
1818 pdf->getParameters(&observables,
tmp);
1856 if (std::list<double>*
hint = pdf->plotSamplingHint(obs,xlo,xhi)) {
1872 if (pdf->dependsOn(obs) && !pdf->isBinnedDistribution(obs)) {
1891 if (std::list<double>*
hint = pdf->binBoundaries(obs,xlo,xhi)) {
1917 parg->setStringAttribute(
"CATNormSet",getColonSeparatedNameString(*pdf_nset).c_str()) ;
1919 if (
string(
"cset")==
pdf_nset->GetName()) {
1920 parg->setStringAttribute(
"CATCondSet",getColonSeparatedNameString(*pdf_nset).c_str()) ;
1923 coutW(Optimization) <<
"RooProdPdf::setCacheAndTrackHints(" <<
GetName() <<
") WARNING product pdf does not specify a normalization set for component " <<
parg->GetName() << std::endl ;
1938 if (i>0) os <<
" * " ;
1941 if (!
ncset->empty()) {
1942 if (
string(
"nset")==
ncset->GetName()) {
1947 for (
auto const* arg : *
ncset) {
1953 os << arg->GetName() ;
1970 cxcoutD(LinkStateMgmt) <<
"RooProdPdf::redirectServersHook(" <<
GetName() <<
"): removing REMOVAL_DUMMY" << std::endl ;
1989 normSet->replace(arg, std::unique_ptr<RooAbsArg>{
newArg->cloneTree()});
1999 os <<
"_partList\n";
2000 os << getColonSeparatedNameString(_partList) <<
"\n";
2002 os << getColonSeparatedNameString(_numList) <<
"\n";
2004 os << getColonSeparatedNameString(_denList) <<
"\n";
2005 os <<
"_ownedList\n";
2006 os << getColonSeparatedNameString(_ownedList) <<
"\n";
2007 os <<
"_normList\n";
2008 for(
auto const& set : _normList) {
2009 os << getColonSeparatedNameString(*set) <<
"\n";
2011 os <<
"_isRearranged" <<
"\n";
2012 os << _isRearranged <<
"\n";
2013 os <<
"_rearrangedNum" <<
"\n";
2014 if(_rearrangedNum) {
2015 os << getColonSeparatedNameString(*_rearrangedNum) <<
"\n";
2017 os <<
"nullptr" <<
"\n";
2019 os <<
"_rearrangedDen" <<
"\n";
2020 if(_rearrangedDen) {
2021 os << getColonSeparatedNameString(*_rearrangedDen) <<
"\n";
2023 os <<
"nullptr" <<
"\n";
2033 std::unique_ptr<RooArgSet> out;
2038 out = std::make_unique<RooArgSet>(
normSet);
2043 out = std::make_unique<RooArgSet>(*
pdfNset);
2048 if (!arg->getStringAttribute(
"__prefix__")) {
2049 arg->SetName((std::string(prefix) + arg->GetName()).c_str());
2050 arg->setStringAttribute(
"__prefix__", prefix);
2060std::unique_ptr<RooAbsArg>
2094 _servers(
"!servers",
"List of servers",
this),
2102 cache->_ownedList.releaseOwnership();
2103 cache->_numList.releaseOwnership();
2104 cache->_denList.releaseOwnership();
2119 for (
RooAbsArg *arg : cache->_partList) {
2126 _normSet{
other._normSet},
2127 _servers(
"!servers",
this,
other._servers),
2129 _isRearranged{
other._isRearranged}
2144 std::vector<std::span<const double>> factors;
2147 auto span = ctx.
at(arg);
2148 factors.push_back(span);
2150 std::array<double, 1>
special{
static_cast<double>(factors.size())};
2162 value *= arg->getVal();
ROOT::RRangeCast< T, false, Range_t > static_range_cast(Range_t &&coll)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
static void indent(ostringstream &buf, int indent_level)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
const_iterator begin() const
const_iterator end() const
const std::vector< Int_t > & retrieve(Int_t masterCode) const
Retrieve the array of integer codes associated with the given master code.
Int_t store(const std::vector< Int_t > &codeList, RooArgSet *set1=nullptr, RooArgSet *set2=nullptr, RooArgSet *set3=nullptr, RooArgSet *set4=nullptr)
Store given arrays of integer codes, and up to four RooArgSets in the registry (each setX pointer may...
Common abstract base class for objects that represent a value and a "shape" in RooFit.
RooExpensiveObjectCache & expensiveObjectCache() const
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...
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'.
friend class RooRealIntegral
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
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...
OperMode operMode() const
Query the operation mode of this node.
Abstract container object that can hold multiple RooAbsArg objects.
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
bool overlaps(Iterator_t otherCollBegin, Iterator_t otherCollEnd) const
Storage_t::size_type size() const
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for generator contexts of RooAbsPdf objects.
Abstract interface for all probability density functions.
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...
RooArgSet const * _normSet
! Normalization set with for above integral
bool canBeExtended() const
If true, PDF can provide extended likelihood term.
const char * normRange() const
bool redirectServersHook(const RooAbsCollection &newServerList, bool mustReplaceAll, bool nameChange, bool isRecursiveStep) override
Hook function intercepting redirectServer calls.
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.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
Abstract base class for objects that represent a real value and implements functionality common to al...
double getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
bool _forceNumInt
Force numerical integration if flag set.
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...
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 ...
Calculates the sum of a set of RooAbsReal terms, or when constructed with two sets,...
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
RooArgSet selectFromSet1(RooArgSet const &argSet, int index) const
Create RooArgSet containing the objects that are both in the cached set 1 with a given index and an i...
T * getObjByIndex(Int_t index) const
Retrieve payload object by slot index.
RooArgSet selectFromSet2(RooArgSet const &argSet, int index) const
Create RooArgSet containing the objects that are both in the cached set 2 with a given index and an i...
void reset()
Clear the cache.
Int_t lastIndex() const
Return index of slot used in last get or set operation.
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=nullptr, const TNamed *isetRangeName=nullptr)
Getter function without integration set.
Named container for two doubles, two integers two object points and three string pointers that can be...
bool add(const RooAbsArg &var, bool valueServer, bool shapeServer, bool silent)
Overloaded RooCollection_t::add() method insert object into set and registers object as server to own...
bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false) override
Remove object 'var' from set and deregister 'var' as server to owner.
TObject * clone(const char *newname=nullptr) const override
RooCustomizer is a factory class to produce clones of a prototype composite PDF object with the same ...
Container class to hold unbinned data.
void markAsCompiled(RooAbsArg &arg) const
bool likelihoodMode() const
void compileServer(RooAbsArg &server, RooAbsArg &arg, RooArgSet const &normSet)
A RooProdPdf with a fixed normalization set can be replaced by this class.
RooFixedProdPdf(std::unique_ptr< RooProdPdf > &&prodPdf, RooArgSet const &normSet)
RooArgSet const * partList() const
double evaluate() const override
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
void doEval(RooFit::EvalContext &ctx) const override
Evaluate product of PDFs in batch mode.
std::unique_ptr< RooProdPdf > _prodPdf
RooAbsReal const * rearrangedDen() const
RooAbsReal const * rearrangedNum() const
std::span< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
std::span< double > output()
RooBatchCompute::Config config(RooAbsArg const *arg) const
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
void Delete(Option_t *o=nullptr) override
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
RooArgList containedArgs(Action) override
Return RooAbsArg components contained in the cache.
std::unique_ptr< RooAbsReal > _rearrangedNum
void printCompactTreeHook(std::ostream &, const char *, Int_t, Int_t) override
Hook function to print cache contents in tree printing of RooProdPdf.
std::vector< std::unique_ptr< RooArgSet > > _normList
std::unique_ptr< RooAbsReal > _rearrangedDen
void writeToStream(std::ostream &os) const
Efficient implementation of a product of PDFs of the form.
std::unique_ptr< RooArgSet > getConstraints(const RooArgSet &observables, RooArgSet const &constrainedParams, RooArgSet &pdfParams) const override
Return all parameter constraint p.d.f.s on parameters listed in constrainedParams.
void setCacheAndTrackHints(RooArgSet &) override
Label OK'ed components of a RooProdPdf with cache-and-track, and label all RooProdPdf descendants wit...
Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, bool staticInitOK=true) const override
Query internal generation capabilities of component p.d.f.s and aggregate capabilities into master co...
void rearrangeProduct(CacheElem &) const
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Return analytical integral defined by given scenario code.
~RooProdPdf() override
Destructor.
Int_t _extendedIndex
Index of extended PDF (if any)
std::unique_ptr< RooAbsReal > specializeRatio(RooFormulaVar &input, const char *targetRangeName) const
RooProdPdf()
Default constructor.
void removePdfs(RooAbsCollection const &pdfs)
Remove some PDFs from the factors of this RooProdPdf.
bool _useDefaultGen
Use default or distributed event generator.
std::vector< std::unique_ptr< RooArgSet > > _pdfNSetList
List of PDF component normalization sets.
std::unique_ptr< RooArgSet > fillNormSetForServer(RooArgSet const &normSet, RooAbsArg const &server) const
std::unique_ptr< RooAbsReal > specializeIntegral(RooAbsReal &orig, const char *targetRangeName) const
void factorizeProduct(const RooArgSet &normSet, const RooArgSet &intSet, Factorized &factorized) const
Factorize product in irreducible terms for given choice of integration/normalization.
bool forceAnalyticalInt(const RooAbsArg &dep) const override
Force RooRealIntegral to offer all observables for internal integration.
std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const override
RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false) const override
Return generator context optimized for generating events from product p.d.f.s.
TNamed * _refRangeName
Reference range name for interpretation of conditional products.
RooAICRegistry _genCode
! Registry of composite direct generator codes
void addPdfs(RooAbsCollection const &pdfs)
Add some full PDFs to the factors of this RooProdPdf.
RooListProxy _pdfList
List of PDF components.
Int_t getPartIntList(const RooArgSet *nset, const RooArgSet *iset, const char *isetRangeName=nullptr) const
Return list of (partial) integrals of product terms for integration of p.d.f over observables iset wh...
void printMetaArgs(std::ostream &os) const override
Customized printing of arguments of a RooProdPdf to more intuitively reflect the contents of the prod...
std::list< double > * binBoundaries(RooAbsRealLValue &, double, double) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
RooObjCacheManager _cacheMgr
! The cache manager
std::string makeRGPPName(const char *pfx, const RooArgSet &term, const RooArgSet &iset, const RooArgSet &nset, const char *isetRangeName) const
Make an appropriate automatic name for a RooGenProdProj object in getPartIntList()
bool isDirectGenSafe(const RooAbsArg &arg) const override
Forward determination of safety of internal generator code to component p.d.f that would generate the...
ProcessProductTermOutput processProductTerm(const RooArgSet *nset, const RooArgSet *iset, const char *isetRangeName, const RooArgSet *term, const RooArgSet &termNSet, const RooArgSet &termISet, bool forceWrap=false) const
Calculate integrals of factorized product terms over observables iset while normalized to observables...
std::unique_ptr< RooAbsReal > makeCondPdfRatioCorr(RooAbsReal &term, const RooArgSet &termNset, const RooArgSet &termImpSet, const char *normRange, const char *refRange) const
For single normalization ranges.
RooArgSet * findPdfNSet(RooAbsPdf const &pdf) const
Look up user specified normalization set for given input PDF component.
ExtendMode extendMode() const override
If this product contains exactly one extendable p.d.f return the extension abilities of that p....
std::list< double > * plotSamplingHint(RooAbsRealLValue &obs, double xlo, double xhi) const override
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
double expectedEvents(const RooArgSet *nset) const override
Return the expected number of events associated with the extendable input PDF in the product.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Determine which part (if any) of given integral can be performed analytically.
bool isBinnedDistribution(const RooArgSet &obs) const override
If all components that depend on obs are binned that so is the product.
friend class RooProdGenContext
RooArgSet * getConnectedParameters(const RooArgSet &observables) const
Return all parameter constraint p.d.f.s on parameters listed in constrainedParams.
double calculate(const RooProdPdf::CacheElem &cache, bool verbose=false) const
Calculate running product of pdfs terms, using the supplied normalization set in 'normSetList' for ea...
RooArgSet _defNormSet
Default normalization set.
std::unique_ptr< RooAbsReal > createExpectedEventsFunc(const RooArgSet *nset) const override
Returns an object that represents the expected number of events for a given normalization set,...
CacheElem * getCacheElem(RooArgSet const *nset) const
bool redirectServersHook(const RooAbsCollection &, bool, bool, bool) override
Implement support for node removal.
void groupProductTerms(std::list< std::vector< RooArgSet * > > &groupedTerms, RooArgSet &outerIntDeps, Factorized const &factorized) const
Group product into terms that can be calculated independently.
void initGenerator(Int_t code) override
Forward one-time initialization call to component generation initialization methods.
void generateEvent(Int_t code) override
Generate a single event with configuration specified by 'code' Defer internal generation to component...
void fixRefRange(const char *rangeName)
std::unique_ptr< CacheElem > createCacheElem(const RooArgSet *nset, const RooArgSet *iset, const char *isetRangeName=nullptr) const
double evaluate() const override
Calculate current value of object.
void initializeFromCmdArgList(const RooArgSet &fullPdfSet, const RooLinkedList &l)
Initialize RooProdPdf configuration from given list of RooCmdArg configuration arguments and set of '...
void selectNormalizationRange(const char *rangeName=nullptr, bool force=false) override
Interface function used by test statistics to freeze choice of range for interpretation of conditiona...
double _cutOff
Cutoff parameter for running product.
Represents the product of a given set of RooAbsReal objects.
Performs hybrid numerical/analytical integrals of RooAbsReal objects.
Variable that can be changed from the outside.
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
Mother of all ROOT objects.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
RooConstVar & RooConst(double val)
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
void compute(Config cfg, Computer comp, std::span< double > output, VarSpan vars, ArgSpan extraArgs={})
BinnedLOutput getBinnedL(RooAbsPdf const &pdf)
std::string getColonSeparatedNameString(RooArgSet const &argSet, char delim=':')