1 #include "../interface/SimplerLikelihoodRatioTestStatExt.h"
2 #include "../interface/utils.h"
6 RooAbsPdf &pdfNull, RooAbsPdf &pdfAlt,
7 const RooArgSet & paramsNull,
const RooArgSet & paramsAlt,
18 if (
pdfNull_ == 0)
throw std::invalid_argument(
"SimplerLikelihoodRatioTestStatOpt:: pdf does not depend on observables");
20 if (cloneNull == cloneAlt) {
24 if (
pdfAlt_ == 0)
throw std::invalid_argument(
"SimplerLikelihoodRatioTestStatOpt:: pdf does not depend on observables");
59 std::auto_ptr<TIterator> iterDepObs(
pdfDepObs_.createIterator());
60 bool nonEmpty = data.numEntries() > 0;
62 const RooArgSet *
entry = data.get(0);
63 for (RooAbsArg *
a = (RooAbsArg *) iterDepObs->Next();
a != 0;
a = (RooAbsArg *) iterDepObs->Next()) {
64 a->redirectServers(*entry);
80 for (RooAbsArg *
a = (RooAbsArg *) iterDepObs->Next();
a != 0;
a = (RooAbsArg *) iterDepObs->Next()) {
81 a->redirectServers(*
obs_);
85 return nullNLL-altNLL;
90 std::auto_ptr<RooAbsCategoryLValue> catClone((RooAbsCategoryLValue*) simpdf->indexCat().Clone());
91 out.resize(catClone->numBins(
NULL), 0);
95 for (
int ib = 0, nb = out.size(); ib < nb; ++ib) {
97 RooAbsPdf *pdfi = simpdf->getPdf(catClone->getLabel());
98 pdfi->optimizeCacheMode(*
obs_);
107 data.setDirtyProp(
false);
110 int i,
n = data.numEntries();
113 RooAbsCategoryLValue *cat = 0;
115 const RooArgSet *
entry = data.get(0);
116 cat =
dynamic_cast<RooAbsCategoryLValue *
>(entry->find(pdf->indexCat().GetName()));
117 assert(cat != 0 &&
"Didn't find category in dataset");
121 std::vector<double> sumw(components.size(), 0);
122 for (i = 0; i <
n; ++
i) {
124 double w = data.weight();
if (w == 0)
continue;
125 int bin = cat->getBin();
126 assert(bin <
int(components.size()) &&
"Bin outside range");
127 if (components[bin] == 0)
continue;
128 sum += -w*components[
bin]->getLogVal(
obs_);
133 for (i = 0, n = components.size(); i <
n; ++
i) {
134 if (components[i]) sum += components[
i]->extendedTerm(
UInt_t(sumw[i]),
obs_);
140 data.setDirtyProp(
false);
141 double sum = 0.0, sumw = 0.0;
142 int i,
n = data.numEntries();
143 for (i = 0; i <
n; ++
i) {
145 double w = data.weight();
if (w == 0)
continue;
146 sum += -w*pdf->getLogVal(
obs_);
157 SimplerLikelihoodRatioTestStatExt::SimplerLikelihoodRatioTestStatExt(
158 const RooArgSet &obs,
159 RooAbsPdf &pdfNull, RooAbsPdf &pdfAlt,
160 const RooArgSet & paramsNull,
const RooArgSet & paramsAlt)
165 paramsNull_.reset(pdfNull_->getVariables());
166 paramsAlt_.reset(pdfAlt_->getVariables());
167 snapNull_.addClone(paramsNull);
168 snapAlt_.addClone(paramsAlt);
171 SimplerLikelihoodRatioTestStatExt::~SimplerLikelihoodRatioTestStatExt()
176 SimplerLikelihoodRatioTestStatExt::Evaluate(RooAbsData&
data, RooArgSet& nullPOI)
178 std::auto_ptr<RooAbsReal> nllNull_(pdfNull_->createNLL(data));
179 std::auto_ptr<RooAbsReal> nllAlt_(pdfAlt_->createNLL(data));
181 *paramsNull_ = snapNull_;
182 *paramsNull_ = nullPOI;
183 double nullNLL = nllNull_->getVal();
185 *paramsAlt_ = snapAlt_;
186 double altNLL = nllAlt_->getVal();
187 return nullNLL-altNLL;
RooArgList pdfDepObs_
nodes which depend directly on observables, on which one has to do redirectServers ...
std::auto_ptr< RooArgSet > paramsAlt_
double evalSimNLL(RooAbsData &data, RooSimultaneous *pdf, std::vector< RooAbsPdf * > &components)
std::vector< RooAbsPdf * > simPdfComponentsNull_
components of the sim pdfs after factorization, for each bin in sim. category. can contain nulls ...
std::vector< RooAbsPdf * > simPdfComponentsAlt_
std::auto_ptr< RooAbsPdf > pdfNullOwned_
owned copy of the pdfs after factorizing
virtual ~SimplerLikelihoodRatioTestStatOpt()
void getClients(const RooAbsCollection &values, const RooAbsCollection &allObjects, RooAbsCollection &clients)
add to 'clients' all object within allObjects that directly depend on values
RooAbsPdf * pdfNull_
pdfs (cloned, and with constraints factorized away)
RooArgSet snapNull_
snapshots of parameters for the two pdfs
RooSimultaneous * simPdfNull_
pdfNull, pdfAlt cast to sympdf (may be null) after factorization
RooAbsPdf * fullClonePdf(const RooAbsPdf *pdf, RooArgSet &holder, bool cloneLeafNodes=false)
const RooArgSet * obs_
observables (global argset)
RooSimultaneous * simPdfAlt_
RooArgSet pdfCompNull_
snapshot with all branch nodes of the pdfs before factorization
RooAbsPdf * factorizePdf(const RooArgSet &observables, RooAbsPdf &pdf, RooArgList &constraints)
std::pair< std::string, MonitorElement * > entry
virtual Double_t Evaluate(RooAbsData &data, RooArgSet &nullPOI)
SimplerLikelihoodRatioTestStatOpt(const RooArgSet &obs, RooAbsPdf &pdfNull, RooAbsPdf &pdfAlt, const RooArgSet ¶msNull=RooArgSet(), const RooArgSet ¶msAlt=RooArgSet(), bool factorize=true)
std::auto_ptr< RooArgSet > paramsNull_
parameter sets to apply snapshots to
double evalSimpleNLL(RooAbsData &data, RooAbsPdf *pdf)
std::auto_ptr< RooAbsPdf > pdfAltOwned_
char data[epos_bytes_allocation]
void unrollSimPdf(RooSimultaneous *pdf, std::vector< RooAbsPdf * > &out)