80 std::map<std::string, RooAbsPdf *> pdfMap;
81 auto indexCatIt = inIndexCat.
begin();
82 for (
unsigned int i = 0; i < inPdfList.
size(); ++i) {
83 auto pdf =
static_cast<RooAbsPdf *
>(&inPdfList[i]);
84 const auto &nameIdx = (*indexCatIt++);
85 pdfMap[nameIdx.first] = pdf;
100using std::string, std::endl;
136 if (inPdfList.
size() != inIndexCat.
size()) {
137 std::stringstream errMsg;
138 errMsg <<
"RooSimultaneous::ctor(" <<
GetName()
139 <<
" ERROR: Number PDF list entries must match number of index category states, no PDFs added";
140 coutE(InputArguments) << errMsg.str() << std::endl;
141 throw std::invalid_argument(errMsg.str());
164 _plotCoefNormSet(
"!plotCoefNormSet",
"plotCoefNormSet", this, false, false),
165 _partIntMgr(this, 10),
166 _indexCat(
"indexCat",
"Index category", this, *initInfo.indexCat)
168 for (std::size_t i = 0; i < initInfo.finalPdfs.size(); ++i) {
169 addPdf(*initInfo.finalPdfs[i], initInfo.finalCatLabels[i].c_str());
173 if (initInfo.superIndex) {
182namespace RooSimultaneousAux {
187 std::unique_ptr<RooArgSet> subIndexComps;
193std::unique_ptr<RooSimultaneous::InitializationOutput>
195 std::map<std::string, RooAbsPdf *>
const& pdfMap)
198 auto out = std::make_unique<RooSimultaneous::InitializationOutput>();
199 out->indexCat = &inIndexCat;
202 bool simComps(
false) ;
203 for (
auto const& item : pdfMap) {
212 for (
auto const& item : pdfMap) {
213 out->addPdf(*item.second,item.first);
218 std::string msgPrefix =
"RooSimultaneous::initialize(" +
name +
") ";
221 oocoutI(
nullptr, InputArguments) << msgPrefix <<
"INFO: one or more input component of simultaneous p.d.f.s are"
222 <<
" simultaneous p.d.f.s themselves, rewriting composite expressions as one-level simultaneous p.d.f. in terms of"
223 <<
" final constituents and extended index category" << std::endl;
227 std::map<string,RooSimultaneousAux::CompInfo> compMap ;
228 for (
auto const& item : pdfMap) {
229 RooSimultaneousAux::CompInfo ci ;
230 ci.pdf = item.second ;
233 ci.simPdf = simComp ;
234 ci.subIndex = &simComp->
indexCat() ;
236 ? std::make_unique<RooArgSet>(simComp->
indexCat())
238 allAuxCats.
add(*ci.subIndexComps,
true) ;
241 ci.subIndex =
nullptr;
243 compMap[item.first] = std::move(ci);
248 allCats.
add(allAuxCats) ;
249 std::string siname =
name +
"_index";
250 out->superIndex = std::make_unique<RooSuperCategory>(siname.c_str(),siname.c_str(),allCats) ;
251 auto *superIndex = out->superIndex.get();
252 out->indexCat = superIndex;
255 for (
auto const& citem : compMap) {
258 if (citem.second.subIndexComps) {
259 repliCats.
remove(*citem.second.subIndexComps) ;
261 inIndexCat.
setLabel(citem.first.c_str()) ;
263 if (!citem.second.simPdf) {
269 for (
const auto& nameIdx : repliSuperCat) {
271 repliSuperCat.
setLabel(nameIdx.first) ;
273 string superLabel = superIndex->getCurrentLabel() ;
274 out->addPdf(*citem.second.pdf,superLabel);
276 <<
"assigning pdf " << citem.second.pdf->GetName() <<
" to super label " << superLabel << endl ;
282 if (repliCats.
empty()) {
286 for (
const auto&
type : *citem.second.subIndex) {
289 RooAbsPdf* compPdf = citem.second.simPdf->getPdf(
type.first);
291 out->addPdf(*compPdf,superLabel);
293 <<
"assigning pdf " << compPdf->
GetName() <<
"(member of " << citem.second.pdf->GetName()
294 <<
") to super label " << superLabel << endl ;
296 oocoutW(
nullptr, InputArguments) << msgPrefix <<
"WARNING: No p.d.f. associated with label "
297 <<
type.second <<
" for component RooSimultaneous p.d.f " << citem.second.pdf->GetName()
298 <<
"which is associated with master index label " << citem.first << endl ;
309 for (
const auto& stype : *citem.second.subIndex) {
312 for (
const auto& nameIdx : repliSuperCat) {
313 repliSuperCat.
setLabel(nameIdx.first) ;
314 const string superLabel = superIndex->getCurrentLabel() ;
315 RooAbsPdf* compPdf = citem.second.simPdf->getPdf(stype.first);
317 out->addPdf(*compPdf,superLabel);
319 <<
"assigning pdf " << compPdf->
GetName() <<
"(member of " << citem.second.pdf->GetName()
320 <<
") to super label " << superLabel << endl ;
322 oocoutW(
nullptr, InputArguments) << msgPrefix <<
"WARNING: No p.d.f. associated with label "
323 << stype.second <<
" for component RooSimultaneous p.d.f " << citem.second.pdf->GetName()
324 <<
"which is associated with master index label " << citem.first << endl ;
341 _plotCoefNormSet(
"!plotCoefNormSet",this,other._plotCoefNormSet),
342 _plotCoefNormRange(other._plotCoefNormRange),
343 _partIntMgr(other._partIntMgr,this),
344 _indexCat(
"indexCat",this,other._indexCat),
345 _numPdf(other._numPdf)
348 for(
auto* proxy : static_range_cast<RooRealProxy*>(other.
_pdfProxyList)) {
394 coutE(InputArguments) <<
"RooSimultaneous::addPdf(" <<
GetName() <<
"): PDF '" << pdf.
GetName()
395 <<
"' overlaps with index category '" <<
_indexCat.arg().
GetName() <<
"'."<< endl ;
401 coutE(InputArguments) <<
"RooSimultaneous::addPdf(" <<
GetName() <<
"): index state '"
402 << catLabel <<
"' has already an associated PDF." << endl ;
409 coutE(InputArguments) <<
"RooSimultaneous::addPdf(" <<
GetName()
410 <<
") ERROR: you cannot add a RooSimultaneous component to a RooSimultaneous using addPdf()."
411 <<
" Use the constructor with RooArgList if input p.d.f.s or the map<string,RooAbsPdf&> instead." << endl ;
432 bool anyCanExtend =
false;
434 for (
auto *proxy : static_range_cast<RooRealProxy *>(
_pdfProxyList)) {
436 if (pdf.mustBeExtended())
438 anyCanExtend |= pdf.canBeExtended();
452 double nEvtTot = 1.0;
453 double nEvtCat = 1.0;
457 auto &pdf =
static_cast<RooAbsPdf const &
>(proxy->arg());
459 for (
auto *proxy2 : static_range_cast<RooRealProxy *>(
_pdfProxyList)) {
460 auto &pdf2 =
static_cast<RooAbsPdf const &
>(proxy2->arg());
461 if(!pdf2.canBeExtended()) {
468 const double nEvt = pdf2.expectedEvents(
_normSet);
475 double catFrac = nEvtCat / nEvtTot;
479 return *proxy * catFrac;
494 for(
auto * proxy : static_range_cast<RooRealProxy*>(
_pdfProxyList)) {
495 sum += (
static_cast<RooAbsPdf*
>(proxy->absArg()))->expectedEvents(nset) ;
506 if (proxy==
nullptr)
return 0 ;
509 return (
static_cast<RooAbsPdf*
>(proxy->
absArg()))->expectedEvents(nset);
521 const RooArgSet* normSet,
const char* rangeName)
const
524 analVars.
add(allVars) ;
538 for(
auto * proxy : static_range_cast<RooRealProxy*>(
_pdfProxyList)) {
539 cache->
_partIntList.
addOwned(std::unique_ptr<RooAbsReal>{proxy->arg().createIntegral(analVars,normSet,
nullptr,rangeName)});
589 pc.
defineObject(
"sliceCatList",
"SliceCat",0,
nullptr,
true) ;
596 pc.
defineSet(
"projDataSet",
"ProjData",0) ;
610 std::unique_ptr<RooArgSet> sliceSet( sliceSetTmp ? (
static_cast<RooArgSet*
>(sliceSetTmp->
Clone())) : nullptr );
612 double scaleFactor = pc.
getDouble(
"scaleFactor") ;
617 const char* sliceCatState = pc.
getString(
"sliceCatState",
nullptr,
true) ;
623 sliceSet = std::make_unique<RooArgSet>();
630 unsigned int tokenIndex = 0;
631 for(
auto * scat : static_range_cast<RooCategory*>(sliceCatList)) {
632 const char* slabel = tokenIndex >= catTokens.size() ? nullptr : catTokens[tokenIndex++].c_str();
636 scat->setLabel(slabel) ;
638 sliceSet->add(*scat,
false) ;
645 coutE(InputArguments) <<
"RooSimultaneous::plotOn(" <<
GetName() <<
") ERROR: must have a projection dataset for index category" << endl ;
655 for (
const auto sliceArg : *sliceSet) {
658 projectedVars.
remove(*arg) ;
660 coutI(Plotting) <<
"RooAbsReal::plotOn(" <<
GetName() <<
") slice variable "
661 << sliceArg->GetName() <<
" was not projected anyway" << endl ;
664 }
else if (projSet) {
670 bool projIndex(
false) ;
678 coutE(Plotting) <<
"RooSimultaneous::plotOn(" <<
GetName() <<
") ERROR: Projection over index category "
679 <<
"requested, but projection data set doesn't contain index category" << endl ;
692 bool anyServers(
false) ;
694 if (projectedVars.
find(server->GetName())) {
696 projIdxServers.
add(*server) ;
704 bool allServers(
true) ;
706 for (
const auto server : projIdxServers) {
707 if (!projData->
get()->
find(server->GetName())) {
709 missing = server->GetName();
714 coutE(Plotting) <<
"RooSimultaneous::plotOn(" <<
GetName()
715 <<
") ERROR: Projection dataset doesn't contain complete set of index categories to do projection."
716 <<
"\n\tcategory " << missing <<
" is missing." << endl ;
726 std::unique_ptr<Roo1DTable> wTable( projData->
table(
_indexCat.arg()) );
736 std::unique_ptr<RooArgSet> idxCompSliceSet( idxCatClone->getObservables(frame->
getNormVars()) );
742 <<
" represents a slice in the index category (" <<
_indexCat.arg().
GetName() <<
")" << endl ;
750 for (
const auto arg : *idxCompSliceSet) {
753 if (sliceSet && (slicedComponent = sliceSet->find(*idxComp)) !=
nullptr) {
754 auto theCat =
static_cast<const RooAbsCategory*
>(slicedComponent);
755 idxComp->setIndex(theCat->getCurrentIndex(),
false);
763 cutString.
Append(
Form(
"%s==%d",idxComp->GetName(),idxComp->getCurrentIndex())) ;
768 projDataVars.
remove(*idxCompSliceSet,
true,
true) ;
770 std::unique_ptr<RooAbsData> projDataTmp(
const_cast<RooAbsData*
>(projData)->reduce(projDataVars,cutString) );
778 if (!cmdList.
find(
"Asymmetry")) {
779 cmdList2.
Add(&tmp1) ;
781 cmdList2.
Add(&tmp2) ;
792 idxCompSliceSet->
remove(projectedVars,
true,
true) ;
798 double sumWeight(0) ;
799 for(
auto * proxy : static_range_cast<RooRealProxy*>(
_pdfProxyList)) {
801 idxCatClone->setLabel(proxy->name()) ;
805 for (
const auto idxSliceCompArg : *idxCompSliceSet) {
806 const auto idxSliceComp =
static_cast<RooAbsCategory*
>(idxSliceCompArg);
816 wgtCompList.
addOwned(std::make_unique<RooRealVar>(proxy->name(),
"coef",wTable->getFrac(proxy->name())));
817 sumWeight += wTable->getFrac(proxy->name()) ;
820 pdfCompList.
add(proxy->arg()) ;
824 RooAddPdf plotVar{plotVarName,
"weighted sum of RS components",pdfCompList,wgtCompList};
831 std::unique_ptr<RooAbsData> projDataTmp;
837 if (!idxCompSliceSet->empty()) {
839 for (
const auto idxSliceCompArg : *idxCompSliceSet) {
840 const auto idxSliceComp =
static_cast<RooAbsCategory*
>(idxSliceCompArg);
846 cutString.
Append(
Form(
"%s==%d",idxSliceComp->GetName(),idxSliceComp->getCurrentIndex())) ;
855 projDataVars.
remove(idxCatServers,
true,
true) ;
857 if (!idxCompSliceSet->empty()) {
858 projDataTmp = std::unique_ptr<RooAbsData>{
const_cast<RooAbsData*
>(projData)->reduce(projDataVars,cutString)};
860 projDataTmp = std::unique_ptr<RooAbsData>{
const_cast<RooAbsData*
>(projData)->reduce(projDataVars)};
866 projSetTmp.
add(*projSet) ;
867 projSetTmp.
remove(idxCatServers,
true,
true);
872 if (
_indexCat.arg().isDerived() && !idxCompSliceSet->empty()) {
874 <<
" represents a slice in index category components " << *idxCompSliceSet << endl ;
878 idxCompProjSet.
remove(*idxCompSliceSet,
true,
true) ;
879 if (!idxCompProjSet.
empty()) {
881 <<
" averages with data index category components " << idxCompProjSet << endl ;
885 <<
" averages with data index category (" <<
_indexCat.arg().
GetName() <<
")" << endl ;
895 if (!cmdList.
find(
"Asymmetry")) {
896 cmdList2.
Add(&tmp1) ;
898 cmdList2.
Add(&tmp2) ;
901 if (!projSetTmp.
empty()) {
904 cmdList2.
Add(&tmp3) ;
905 frame2 = plotVar.plotOn(frame,cmdList2) ;
908 frame2 = plotVar.plotOn(frame,cmdList2) ;
943 const RooArgSet* auxProto,
bool verbose,
bool autoBinned,
const char* binnedTag)
const
947 if (vars.
find(idxCatName) && prototype==
nullptr
948 && (auxProto==
nullptr || auxProto->
empty())
949 && (autoBinned || (binnedTag && strlen(binnedTag)))) {
957 return genContext(vars,prototype,auxProto,verbose) ;
967 const RooArgSet* auxProto,
bool verbose)
const
970 if(prototype) allVars.
add(*prototype->
get());
976 if(catsAmongAllVars.
empty()) {
979 coutE(InputArguments) <<
"RooSimultaneous::genContext(" <<
GetName()
980 <<
") ERROR: no PDF associated with current state ("
984 return static_cast<RooAbsPdf*
>(proxy->absArg())->
genContext(vars,prototype,auxProto,verbose) ;
993 coutE(Plotting) <<
"RooSimultaneous::genContext: ERROR: prototype must include either all "
994 <<
" components of the RooSimultaneous index category or none " << std::endl;
1010 bool correctForBinVolume,
1011 bool showProgress)
const
1014 correctForBinVolume, showProgress) ==
nullptr)
1039 auto data = std::make_unique<RooDataSet>(
"gensimglobal",
"gensimglobal",whatVars);
1041 for (
Int_t i=0 ; i<nEvents ; i++) {
1042 for (
const auto& nameIdx :
indexCat()) {
1052 if (!globtmp.
empty()) {
1053 globClone.
assign(*std::unique_ptr<RooDataSet>{pdftmp->
generate(globtmp,1)}->get(0)) ;
1056 data->add(globClone) ;
1069 if (precision < 0.)
return;
1073 for (
auto const &item : this->
indexCat()) {
1075 auto const &catName = item.
first;
1076 auto &pdf = *this->
getPdf(catName);
1082 newSamplingPdf->setAttribute(
1083 (std::string(
"ORIGNAME:") + pdf.GetName()).c_str());
1084 newSamplingPdfs.
addOwned(std::move(newSamplingPdf));
1106 std::map<std::string, double>
const& precisions,
1107 bool useCategoryNames ) {
1109 constexpr double defaultPrecision = -1.;
1113 for (
auto const &item : this->
indexCat()) {
1115 auto const &catName = item.
first;
1116 auto &pdf = *this->
getPdf(catName);
1117 std::string pdfName = pdf.GetName();
1119 auto found = precisions.find(useCategoryNames ? catName : pdfName);
1120 const double precision =
1121 found != precisions.end() ? found->second : defaultPrecision;
1129 newSamplingPdf->setAttribute(
1130 (std::string(
"ORIGNAME:") + pdf.GetName()).c_str());
1131 newSamplingPdfs.
addOwned(std::move(newSamplingPdf));
1149 return superCat->inputCatList();
1162 for (
RooAbsArg *server : arg->servers()) {
1163 if (server->isFundamental() && normSet.
find(*server)) {
1164 markObs(server, prefix, normSet);
1165 server->setAttribute(
"__obs__");
1166 }
else if (!server->isFundamental()) {
1167 markObs(server, prefix, normSet);
1178 for (
RooAbsArg *server : arg->servers()) {
1179 if (server->isFundamental() && normSet.
find(*server)) {
1180 prefixArgs(server, prefix, normSet);
1181 }
else if (!server->isFundamental()) {
1182 prefixArgs(server, prefix, normSet);
1189std::unique_ptr<RooAbsArg>
1198 std::vector<std::string> catNames;
1200 for (
auto *proxy : static_range_cast<RooRealProxy *>(newSimPdf->_pdfProxyList)) {
1201 catNames.emplace_back(proxy->GetName());
1202 std::string
const &catName = catNames.back();
1203 const std::string prefix =
"_" + catName +
"_";
1205 const std::string origname = proxy->arg().
GetName();
1209 markObs(pdfClone.get(), prefix, normSet);
1211 std::unique_ptr<RooArgSet> pdfNormSet(
1212 static_cast<RooArgSet *
>(std::unique_ptr<RooArgSet>(pdfClone->getVariables())->selectByAttrib(
"__obs__",
true)));
1220 auto *pdfFinal = pdfContext.compile(*pdfClone, *newSimPdf, *pdfNormSet);
1229 prefixArgs(pdfFinal, prefix, normSet);
1231 pdfFinal->fixAddCoefNormalization(*pdfNormSet,
false);
1233 pdfClone->SetName((std::string(
"_") + pdfClone->GetName()).c_str());
1234 pdfFinal->addOwnedComponents(std::move(pdfClone));
1236 pdfFinal->setAttribute((
"ORIGNAME:" + origname).c_str());
1237 newPdfs.
add(*pdfFinal);
1241 newSimPdf->removeServer(
const_cast<RooAbsReal &
>(proxy->arg()),
true);
1249 newSimPdf->_pdfProxyList.Delete();
1252 for (std::size_t i = 0; i < newPdfs.
size(); ++i) {
1253 const char *label = catNames[i].c_str();
1254 newSimPdf->_pdfProxyList.Add(
RooTemplateProxy< RooAbsReal > RooRealProxy
Compatibility typedef replacing the old RooRealProxy class.
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 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 type
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.
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.
R__DEPRECATED(6, 36, "Use getObservables().") RooFit R__DEPRECATED(6, 36, "Use getObservables().") RooFit R__DEPRECATED(6, 36, "Use getObservables().") RooFit const RooAbsArg &testArg const
void setStringAttribute(const Text_t *key, const Text_t *value)
Associate string 'value' to this object under key 'key'.
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.
void SetName(const char *name) override
Set the name of the TNamed.
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'.
bool redirectServers(const RooAbsCollection &newServerList, bool mustReplaceAll=false, bool nameChange=false, bool isRecursionStep=false)
Replace all direct servers of this object with the new servers in newServerList.
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)
TObject * Clone(const char *newname=nullptr) const override
Make a clone of an object using the Streamer facility.
virtual bool isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
Abstract base class for objects that represent a discrete value that can be set from the outside,...
virtual bool setLabel(const char *label, bool printError=true)=0
Change category state by specifying a state name.
A space to attach TBranches.
virtual value_type getCurrentIndex() const
Return index number of current state.
virtual const char * getCurrentLabel() const
Return label string of current state.
std::map< std::string, value_type >::const_iterator begin() const
Iterator for category state names. Points to pairs of index and name.
std::size_t size() const
Number of states defined.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
bool contains(const RooAbsArg &var) const
Check if collection contains an argument with the same name as var.
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.
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 addOwned(RooAbsArg &var, bool silent=false)
Add an argument and transfer the ownership to the collection.
RooAbsArg * find(const char *name) const
Find object with given name in list.
Abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
virtual Roo1DTable * table(const RooArgSet &catSet, const char *cuts="", const char *opts="") const
Construct table for product of categories in catSet.
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.
Abstract interface for all probability density functions.
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.
bool canBeExtended() const
If true, PDF can provide extended likelihood term.
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&,...
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.
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 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...
Efficient implementation of a sum of PDFs of the form.
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.
RooAbsArg * absArg() const
Return pointer to contained argument.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
RooArgSet * selectCommon(const RooAbsCollection &refColl) const
Use RooAbsCollection::selecCommon(), but return as RooArgSet.
static std::unique_ptr< RooAbsPdf > create(RooAbsPdf &pdf, RooAbsData const &data, double precision)
Creates a wrapping RooBinSamplingPdf if appropriate.
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=nullptr)
Setter function without integration set.
T * getObjByIndex(Int_t index) const
Retrieve payload object by slot index.
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.
Object to represent discrete states.
Named container for two doubles, two integers two object points and three string pointers that can be...
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.
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...
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...
const RooLinkedList & getObjectList(const char *name) const
Return list of objects registered with name 'name'.
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'.
void removeAll() override
Remove all argument inset using remove(const RooAbsArg&).
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...
Container class to hold N-dimensional binned data.
double weight(std::size_t i) const
Return weight of i-th bin.
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 sumEntries() const override
Sum the weights of all bins.
Container class to hold unbinned data.
const RooArgSet * get(Int_t index) const override
Return RooArgSet with coordinates of event 'index'.
void compileServers(RooAbsArg &arg, RooArgSet const &normSet)
bool likelihoodMode() const
void setLikelihoodMode(bool flag)
Collection class for internal use, storing a collection of RooAbsArg pointers in a doubly linked list...
TObject * find(const char *name) const
Return pointer to object with given name in collection.
virtual void Add(TObject *arg)
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
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.
const RooArgSet * getNormVars() const
RooAbsRealLValue * getPlotVar() const
Facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
void selectNormalization(const RooArgSet *depSet=nullptr, bool force=false) override
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
double evaluate() const override
Return the current value: the value of the PDF associated with the current index category state.
Int_t _numPdf
Number of registered PDFs.
void selectNormalizationRange(const char *rangeName=nullptr, bool force=false) override
Interface function used by test statistics to freeze choice of range for interpretation of fraction c...
TList _pdfProxyList
List of PDF proxies (named after applicable category state)
RooObjCacheManager _partIntMgr
! Component normalization manager
~RooSimultaneous() override
Destructor.
RooFit::OwningPtr< RooDataSet > generateSimGlobal(const RooArgSet &whatVars, Int_t nEvents) override
Special generator interface for generation of 'global observables' – for RooStats tools.
RooArgSet const & flattenedCatList() const
Internal utility function to get a list of all category components for this RooSimultaneous.
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
ExtendMode extendMode() const override
Examine the pdf components and check if one of them can be extended or must be extended.
RooCategoryProxy _indexCat
Index category.
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Return analytical integration defined by given code.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Forward determination of analytical integration capabilities to component p.d.f.s A unique code is as...
double expectedEvents(const RooArgSet *nset) const override
Return the number of expected events: If the index is in nset, then return the sum of the expected ev...
friend class RooSimGenContext
RooAbsGenContext * autoGenContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false, bool autoBinned=true, const char *binnedTag="") const override
RooAbsPdf * getPdf(RooStringView catName) const
Return the p.d.f associated with the given index category name.
std::unique_ptr< RooAbsArg > compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext &ctx) const override
static std::unique_ptr< RooSimultaneous::InitializationOutput > initialize(std::string const &name, RooAbsCategoryLValue &inIndexCat, std::map< std::string, RooAbsPdf * > const &pdfMap)
void wrapPdfsInBinSamplingPdfs(RooAbsData const &data, double precision)
Wraps the components of this RooSimultaneous in RooBinSamplingPdfs.
const TNamed * _plotCoefNormRange
RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=nullptr, const RooArgSet *auxProto=nullptr, bool verbose=false) const override
Return specialized generator context for simultaneous p.d.f.s.
std::unique_ptr< RooArgSet > _indexCatSet
! Index category wrapped in a RooArgSet if needed internally
bool addPdf(const RooAbsPdf &pdf, const char *catLabel)
Associate given PDF with index category state label 'catLabel'.
RooSetProxy _plotCoefNormSet
const RooAbsCategoryLValue & indexCat() const
friend class RooSimSplitGenContext
virtual RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, double scaleFactor, bool correctForBinVolume=false, bool showProgress=false) const
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
const char * c_str() const
Joins several RooAbsCategoryLValue objects into a single category.
bool setLabel(const char *label, bool printError=true) override
Set the value of the super category by specifying the state name.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
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.
Mother of all ROOT objects.
virtual Int_t IndexOf(const TObject *obj) const
Return index of object in collection.
TString & Append(const char *cs)
RooCmdArg ProjWData(const RooAbsData &projData, bool binData=false)
RooCmdArg Project(const RooArgSet &projSet)
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.
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
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...
std::unique_ptr< T > cloneTreeWithSameParameters(T const &arg, RooArgSet const *observables=nullptr)
Clone RooAbsArg object and reattach to original parameters.
std::string getRangeNameForSimComponent(std::string const &rangeName, bool splitRange, std::string const &catName)
Internal struct used for initialization.
std::vector< RooAbsPdf const * > finalPdfs
std::vector< std::string > finalCatLabels
void addPdf(const RooAbsPdf &pdf, std::string const &catLabel)
static uint64_t sum(uint64_t i)