80 _plotCoefNormSet(
"!plotCoefNormSet",
"plotCoefNormSet",this,
kFALSE,
kFALSE),
81 _plotCoefNormRange(0),
83 _indexCat(
"indexCat",
"Index category",this,inIndexCat),
101 _plotCoefNormSet(
"!plotCoefNormSet",
"plotCoefNormSet",this,
kFALSE,
kFALSE),
102 _plotCoefNormRange(0),
103 _partIntMgr(this,10),
104 _indexCat(
"indexCat",
"Index category",this,inIndexCat),
109 <<
" ERROR: Number PDF list entries must match number of index category states, no PDFs added" << endl ;
113 map<string,RooAbsPdf*> pdfMap ;
121 pdfMap[string(
type->GetName())] = pdf ;
135 _plotCoefNormSet(
"!plotCoefNormSet",
"plotCoefNormSet",this,
kFALSE,
kFALSE),
136 _plotCoefNormRange(0),
137 _partIntMgr(this,10),
138 _indexCat(
"indexCat",
"Index category",this,inIndexCat),
162 for (map<string,RooAbsPdf*>::iterator iter=pdfMap.begin() ; iter!=pdfMap.end() ; ++iter) {
171 for (map<string,RooAbsPdf*>::iterator iter=pdfMap.begin() ; iter!=pdfMap.end() ; ++iter) {
172 addPdf(*iter->second,iter->first.c_str()) ;
178 coutI(
InputArguments) <<
"RooSimultaneous::initialize(" <<
GetName() <<
") INFO: one or more input component of simultaneous p.d.f.s are"
179 <<
" simultaneous p.d.f.s themselves, rewriting composite expressions as one-level simultaneous p.d.f. in terms of"
180 <<
" final constituents and extended index category" << endl ;
184 map<string,RooSimultaneousAux::CompInfo> compMap ;
185 for (map<string,RooAbsPdf*>::iterator iter=pdfMap.begin() ; iter!=pdfMap.end() ; ++iter) {
186 RooSimultaneousAux::CompInfo ci ;
187 ci.pdf = iter->second ;
190 ci.simPdf = simComp ;
191 ci.subIndex = &simComp->
indexCat() ;
193 allAuxCats.
add(*(ci.subIndexComps),
kTRUE) ;
197 ci.subIndexComps = 0 ;
199 compMap[iter->first] = ci ;
204 allCats.
add(allAuxCats) ;
209 for (map<string,RooSimultaneousAux::CompInfo>::iterator citer = compMap.begin() ; citer != compMap.end() ; ++citer) {
212 if (citer->second.subIndexComps) {
213 repliCats.
remove(*citer->second.subIndexComps) ;
214 delete citer->second.subIndexComps ;
216 inIndexCat.
setLabel(citer->first.c_str()) ;
219 if (!citer->second.simPdf) {
231 string superLabel = superIndex->
getLabel() ;
232 addPdf(*citer->second.pdf,superLabel.c_str()) ;
234 <<
") assigning pdf " << citer->second.pdf->GetName() <<
" to super label " << superLabel << endl ;
244 TIterator* titer = citer->second.subIndex->typeIterator() ;
248 string superLabel = superIndex->
getLabel() ;
249 RooAbsPdf* compPdf = citer->second.simPdf->getPdf(
type->GetName()) ;
251 addPdf(*compPdf,superLabel.c_str()) ;
253 <<
") assigning pdf " << compPdf->
GetName() <<
"(member of " << citer->second.pdf->GetName()
254 <<
") to super label " << superLabel << endl ;
257 <<
type->GetName() <<
" for component RooSimultaneous p.d.f " << citer->second.pdf->GetName()
258 <<
"which is associated with master index label " << citer->first << endl ;
271 TIterator* tsiter = citer->second.subIndex->typeIterator() ;
278 string superLabel = superIndex->
getLabel() ;
281 addPdf(*compPdf,superLabel.c_str()) ;
283 <<
") assigning pdf " << compPdf->
GetName() <<
"(member of " << citer->second.pdf->GetName()
284 <<
") to super label " << superLabel << endl ;
287 << stype->
GetName() <<
" for component RooSimultaneous p.d.f " << citer->second.pdf->GetName()
288 <<
"which is associated with master index label " << citer->first << endl ;
313 _plotCoefNormSet(
"!plotCoefNormSet",this,other._plotCoefNormSet),
314 _plotCoefNormRange(other._plotCoefNormRange),
315 _partIntMgr(other._partIntMgr,this),
316 _indexCat(
"indexCat",this,other._indexCat),
317 _numPdf(other._numPdf)
374 << catLabel <<
" has already an associated PDF" << endl ;
382 <<
") ERROR: you cannot add a RooSimultaneous component to a RooSimultaneous using addPdf()."
383 <<
" Use the constructor with RooArgList if input p.d.f.s or the map<string,RooAbsPdf&> instead." << endl ;
448 if (proxy==0)
return 0 ;
462 catFrac=nEvtCat/nEvtTot ;
498 if (proxy==0)
return 0 ;
513 const RooArgSet* normSet,
const char* rangeName)
const
516 analVars.
add(allVars) ;
582 pc.defineString(
"sliceCatState",
"SliceCat",0,
"",
kTRUE) ;
583 pc.defineDouble(
"scaleFactor",
"Normalization",0,1.0) ;
585 pc.defineObject(
"sliceCatList",
"SliceCat",0,0,
kTRUE) ;
586 pc.defineObject(
"projSet",
"Project",0) ;
587 pc.defineObject(
"sliceSet",
"SliceVars",0) ;
588 pc.defineObject(
"projDataSet",
"ProjData",0) ;
589 pc.defineObject(
"projData",
"ProjData",1) ;
590 pc.defineMutex(
"Project",
"SliceVars") ;
591 pc.allowUndefined() ;
594 pc.process(cmdList) ;
604 Double_t scaleFactor =
pc.getDouble(
"scaleFactor") ;
609 const char* sliceCatState =
pc.getString(
"sliceCatState",0,
kTRUE) ;
620 strlcpy(buf,sliceCatState,1024) ;
621 const char* slabel = strtok(buf,
",") ;
633 slabel = strtok(0,
",") ;
640 coutE(
InputArguments) <<
"RooSimultaneous::plotOn(" <<
GetName() <<
") ERROR: must have a projection dataset for index category" << endl ;
657 projectedVars.
remove(*arg) ;
660 << sliceArg->
GetName() <<
" was not projected anyway" << endl ;
664 }
else if (projSet) {
678 coutE(
Plotting) <<
"RooSimultaneous::plotOn(" <<
GetName() <<
") ERROR: Projection over index category "
679 <<
"requested, but projection data set doesn't contain index category" << endl ;
698 projIdxServers.
add(*server) ;
718 <<
") ERROR: Projection dataset doesn't contain complete set of index category dependents" << endl ;
734 <<
" represents a slice in the index category (" <<
_indexCat.
arg().
GetName() <<
")" << endl ;
751 cutString.Append(
"&&") ;
764 delete indexCatComps ;
779 if (!cmdList.
find(
"Asymmetry")) {
780 cmdList2.
Add(&tmp1) ;
782 cmdList2.
Add(&tmp2) ;
822 idxCompSliceIter->
Reset() ;
839 pdfCompList.
add(proxy->
arg()) ;
842 TString plotVarName(
GetName()) ;
843 RooAddPdf *plotVar =
new RooAddPdf(plotVarName,
"weighted sum of RS components",pdfCompList,wgtCompList) ;
856 if (idxCompSliceSet->
getSize()>0) {
857 idxCompSliceIter->
Reset() ;
862 cutString.Append(
"&&") ;
876 if (idxCompSliceSet->
getSize()>0) {
885 projSetTmp.
add(*projSet) ;
890 delete idxCatServers ;
896 <<
" represents a slice in index category components " << *idxCompSliceSet << endl ;
900 if (idxCompProjSet->
getSize()>0) {
902 <<
" averages with data index category components " << *idxCompProjSet << endl ;
904 delete idxCompProjSet ;
917 if (!cmdList.
find(
"Asymmetry")) {
918 cmdList2.
Add(&tmp1) ;
920 cmdList2.
Add(&tmp2) ;
926 cmdList2.
Add(&tmp3) ;
927 frame2 = plotVar->
plotOn(frame,cmdList2) ;
930 frame2 = plotVar->
plotOn(frame,cmdList2) ;
938 delete idxCompSliceIter ;
939 delete idxCompSliceSet ;
942 if (projDataTmp)
delete projDataTmp ;
1006 if (vars.
find(idxCatName) && prototype==0 && (auxProto==0 || auxProto->
getSize()==0) && (autoBinned || (binnedTag && strlen(binnedTag)))) {
1014 return genContext(vars,prototype,auxProto,verbose) ;
1027 const RooArgSet* protoVars = prototype ? prototype->
get() : 0 ;
1029 if (vars.
find(idxCatName) || (protoVars && protoVars->
find(idxCatName))) {
1058 }
else if (!allServers && anyServer) {
1060 coutE(
Plotting) <<
"RooSimultaneous::genContext: ERROR: prototype must include either all "
1061 <<
" components of the RooSimultaneous index category or none " << endl ;
1071 <<
") ERROR: no PDF associated with current state ("
1075 return ((
RooAbsPdf*)proxy->
absArg())->genContext(vars,prototype,auxProto,verbose) ;
1086 Bool_t correctForBinVolume,
1087 Bool_t showProgress)
const
1090 correctForBinVolume, showProgress) == 0)
1124 for (
Int_t i=0 ; i<nEvents ; i++) {
1137 *globClone = *tmp->
get(0) ;
1143 data->add(*globClone) ;
char * Form(const char *fmt,...)
Roo1DTable implements a one-dimensional table.
Double_t getFrac(const char *label, Bool_t silent=kFALSE) const
Return the fraction of entries in the table contained in the slot named 'label'.
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
Bool_t dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=0, Bool_t valueOnly=kFALSE) const
Test whether we depend on (ie, are served by) any object in the specified collection.
virtual Bool_t isFundamental() const
RooArgSet * getVariables(Bool_t stripDisconnected=kTRUE) const
Return RooArgSet with all variables (tree leaf nodes of expresssion tree)
virtual Bool_t isDerived() const
Bool_t addOwnedComponents(const RooArgSet &comps)
Take ownership of the contents of 'comps'.
TIterator * serverIterator() const
RooAbsCategoryLValue is the common abstract base class for objects that represent a discrete value th...
virtual Bool_t setLabel(const char *label, Bool_t printError=kTRUE)=0
RooAbsCategory is the common abstract base class for objects that represent a discrete value with a f...
TIterator * typeIterator() const
Return iterator over all defined states.
virtual Int_t getIndex() const
Return index number of current state.
virtual const char * getLabel() const
Return label string of current state.
Int_t numTypes(const char *=0) const
Bool_t contains(const RooAbsArg &var) const
RooAbsCollection * snapshot(Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents: An owning collection is returned containing clones o...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual TObject * Clone(const char *newname=0) const
Make a clone of an object using the Streamer facility.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator * createIterator(Bool_t dir=kIterForward) const
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsData is the common abstract base class for binned and unbinned datasets.
virtual const RooArgSet * get() const
virtual Roo1DTable * table(const RooArgSet &catSet, const char *cuts="", const char *opts="") const
Construct table for product of categories in catSet.
RooAbsData * reduce(const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg())
Create a reduced copy of this dataset.
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Bool_t canBeExtended() const
RooDataSet * generate(const RooArgSet &whatVars, Int_t nEvents, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none())
See RooAbsPdf::generate(const RooArgSet&,const RooCmdArg&,const RooCmdArg&,const RooCmdArg&,...
Bool_t mustBeExtended() const
RooArgSet * _normSet
Normalization integral (owned by _normMgr)
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1=RooCmdArg::none(), const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none(), const RooCmdArg &arg9=RooCmdArg::none(), const RooCmdArg &arg10=RooCmdArg::none()) const
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Double_t getVal(const RooArgSet *set=0) const
Evaluate object. Returns either cached value or triggers a recalculation.
RooAbsReal * createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables listed in ...
Bool_t plotSanityChecks(RooPlot *frame) const
Utility function for plotOn(), perform general sanity check on frame to ensure safe plotting operatio...
virtual void fixAddCoefNormalization(const RooArgSet &addNormSet=RooArgSet(), Bool_t force=kTRUE)
Fix the interpretation of the coefficient of any RooAddPdf component in the expression tree headed by...
void makeProjectionSet(const RooAbsArg *plotVar, const RooArgSet *allVars, RooArgSet &projectedVars, Bool_t silent) const
Utility function for plotOn() that constructs the set of observables to project when plotting ourselv...
RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, Double_t scaleFactor, Bool_t correctForBinVolume=kFALSE, Bool_t showProgress=kFALSE) const
Fill a RooDataHist with values sampled from this function at the bin centers.
friend class RooRealProxy
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
RooAbsArg * at(Int_t idx) const
virtual const char * name() const
RooAbsArg * absArg() const
RooArgSet is a container object that can hold multiple RooAbsArg objects.
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
T * getObjByIndex(Int_t index) const
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=0)
RooCatType is an auxilary class for RooAbsCategory and defines a a single category state.
virtual const Text_t * GetName() const
Returns name of object.
virtual Bool_t setArg(RooAbsCategory &newRef)
Change object held in proxy into newRef.
const RooAbsCategory & arg() const
const char * label() const
RooCategory represents a fundamental (non-derived) discrete value object.
virtual Bool_t setLabel(const char *label, Bool_t printError=kTRUE)
Set value by specifying the name of the desired state If printError is set, a message will be printed...
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Class RooCmdConfig is a configurable parser for RooCmdArg named arguments.
RooDataSet is a container class to hold N-dimensional binned data.
virtual Double_t weight() const
void set(Double_t weight, Double_t wgtErr=-1)
Increment the weight of the bin enclosing the coordinates given by 'row' by the specified amount.
virtual Int_t numEntries() const
Return the number of bins.
virtual const RooArgSet * get() const
RooDataSet is a container class to hold unbinned data.
virtual const RooArgSet * get(Int_t index) const
Return RooArgSet with coordinates of event 'index'.
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
TIterator * MakeIterator(Bool_t dir=kTRUE) const
Return an iterator over this list.
void Delete(Option_t *o=0)
Remove all elements in collection and delete all elements NB: Collection does not own elements,...
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.
A RooPlot is a plot frame and a container for graphics objects within that frame.
const RooArgSet * getNormVars() const
RooAbsRealLValue * getPlotVar() const
RooRealProxy is the concrete proxy for RooAbsReal objects A RooRealProxy is the general mechanism to ...
const RooAbsReal & arg() const
RooRealVar represents a fundamental (non-derived) real valued object.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::add() method inserts 'var' into set and registers 'var' as server to owner with...
virtual void removeAll()
Remove all argument inset using remove(const RooAbsArg&).
RooSimultaneous facilitates simultaneous fitting of multiple PDFs to subsets of a given dataset.
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Return specialized generator contenxt for simultaneous p.d.f.s.
virtual Double_t evaluate() const
Return the current value: the value of the PDF associated with the current index category state.
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return the number of expected events: If the index is in nset, then return the sum of the expected ev...
virtual ~RooSimultaneous()
Destructor.
RooObjCacheManager _partIntMgr
virtual RooDataSet * generateSimGlobal(const RooArgSet &whatVars, Int_t nEvents)
Special generator interface for generation of 'global observables' – for RooStats tools.
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integration defined by given code.
virtual RooDataHist * fillDataHist(RooDataHist *hist, const RooArgSet *nset, Double_t scaleFactor, Bool_t correctForBinVolume=kFALSE, Bool_t showProgress=kFALSE) const
RooCategoryProxy _indexCat
virtual ExtendMode extendMode() const
WVE NEEDS FIX.
virtual void selectNormalization(const RooArgSet *depSet=0, Bool_t force=kFALSE)
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
Bool_t addPdf(const RooAbsPdf &pdf, const char *catLabel)
Associate given PDF with index category state label 'catLabel'.
friend class RooSimGenContext
void initialize(RooAbsCategoryLValue &inIndexCat, std::map< std::string, RooAbsPdf * > pdfMap)
virtual RooAbsGenContext * autoGenContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE, Bool_t autoBinned=kTRUE, const char *binnedTag="") const
virtual RooPlot * plotOn(RooPlot *frame, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg(), const RooCmdArg &arg3=RooCmdArg(), const RooCmdArg &arg4=RooCmdArg(), const RooCmdArg &arg5=RooCmdArg(), const RooCmdArg &arg6=RooCmdArg(), const RooCmdArg &arg7=RooCmdArg(), const RooCmdArg &arg8=RooCmdArg(), const RooCmdArg &arg9=RooCmdArg(), const RooCmdArg &arg10=RooCmdArg()) const
Helper calling plotOn(RooPlot*, RooLinkedList&) const.
const TNamed * _plotCoefNormRange
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const
Forward determination of analytical integration capabilities to component p.d.f.s A unique code is as...
RooSetProxy _plotCoefNormSet
const RooAbsCategoryLValue & indexCat() const
virtual void selectNormalizationRange(const char *rangeName=0, Bool_t force=kFALSE)
Interface function used by test statistics to freeze choice of range for interpretation of fraction c...
friend class RooSimSplitGenContext
RooAbsPdf * getPdf(const char *catName) const
Return the p.d.f associated with the given index category name.
RooSuperCategory consolidates several RooAbsCategoryLValue objects into a single category.
virtual Bool_t setLabel(const char *label, Bool_t printError=kTRUE)
Set the value of the super category by specifying the state name by setting the state names of the co...
Iterator abstract base class.
virtual TObject * Next()=0
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Delete a TObjLink object.
virtual TIterator * MakeIterator(Bool_t dir=kIterForward) const
Return a list iterator.
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
virtual Int_t IndexOf(const TObject *obj) const
Return index of object in collection.
RooCmdArg ProjWData(const RooAbsData &projData, Bool_t binData=kFALSE)
RooCmdArg DrawOption(const char *opt)
RooCmdArg Project(const RooArgSet &projSet)
RooCmdArg Normalization(Double_t scaleFactor)
static constexpr double pc
static long int sum(long int i)