41 RooEffProd::RooEffProd(
const char *name,
const char *title,
42 RooAbsPdf& inPdf, RooAbsReal& inEff) :
43 RooAbsPdf(name,title),
45 _pdf(
"pdf",
"pre-efficiency pdf", this,inPdf),
46 _eff(
"eff",
"efficiency function",this,inEff),
58 RooEffProd::RooEffProd(
const RooEffProd& other,
const char* name) :
59 RooAbsPdf(other, name),
60 _cacheMgr(other._cacheMgr,this),
61 _pdf(
"pdf",this,other._pdf),
62 _eff(
"acc",this,other._eff),
74 RooEffProd::~RooEffProd()
83 Double_t RooEffProd::getValV(
const RooArgSet* set)
const
85 _nset = _fixedNset ? _fixedNset : set ;
86 return RooAbsPdf::getValV(set) ;
95 Double_t RooEffProd::evaluate()
const
97 return eff()->getVal() * pdf()->getVal(_nset);
106 RooAbsGenContext* RooEffProd::genContext(
const RooArgSet &vars,
const RooDataSet *prototype,
107 const RooArgSet* auxProto, Bool_t verbose)
const
111 return new RooEffGenContext(*
this,*pdf(),*eff(),vars,prototype,auxProto,verbose) ;
128 Int_t RooEffProd::getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars,
129 const RooArgSet* normSet,
const char* rangeName)
const
133 if (normSet && normSet->getSize()>0) {
152 analVars.add(allVars) ;
155 Int_t sterileIndex(-1) ;
156 CacheElem* cache = (CacheElem*) _cacheMgr.getObj(&allVars,&allVars,&sterileIndex,RooNameReg::ptr(rangeName)) ;
158 return _cacheMgr.lastIndex()+1;
162 cache =
new CacheElem ;
163 cache->_intObs.addClone(allVars) ;
164 cache->_clone = (RooEffProd*) clone(Form(
"%s_clone",GetName())) ;
165 cache->_clone->_fixedNset = &cache->_intObs ;
166 cache->_int = cache->_clone->createIntegral(cache->_intObs,rangeName) ;
169 Int_t code = _cacheMgr.setObj(&allVars,&allVars,(RooAbsCacheElement*)cache,RooNameReg::ptr(rangeName)) ;
182 Double_t RooEffProd::analyticalIntegralWN(Int_t code,
const RooArgSet* normSet,
const char* )
const
188 return getVal(normSet) ;
192 CacheElem* cache = (CacheElem*) _cacheMgr.getObjByIndex(code-1) ;
194 return cache->_int->getVal() ;
204 RooArgList RooEffProd::CacheElem::containedArgs(Action)
206 RooArgList ret(_intObs) ;