48 throw std::logic_error(
"RooAbsL::isExtendedHelper got an unknown extended value!");
55RooAbsL::RooAbsL(std::shared_ptr<RooAbsPdf> pdf, std::shared_ptr<RooAbsData> data, std::size_t N_events,
56 std::size_t N_components,
Extended extended)
57 :
pdf_(std::move(pdf)),
58 data_(std::move(data)),
66 <<
"in RooAbsL ctor: p.d.f. provides expected number of events, including extended term in likelihood."
82 :
RooAbsL(in.ownedPdf ? std::move(in.ownedPdf)
84 std::shared_ptr<
RooAbsData>(static_cast<
RooAbsData *>(in.data->Clone())), N_events, N_components, extended)
102 :
RooAbsL({std::shared_ptr<RooAbsPdf>(
nullptr), inpdf}, {std::shared_ptr<RooAbsData>(
nullptr), indata}, N_events,
103 N_components, extended)
117 assert((
pdf_.use_count() != 1) && (
data_.use_count() != 1) && (
pdf_.use_count() ==
data_.use_count()));
118 if ((
pdf_.use_count() > 1) && (
data_.use_count() > 1)) {
132 auto _funcObsSet =
pdf_->getObservables(indata);
134 if (
pdf_->getAttribute(
"BinnedLikelihood")) {
135 pdf_->setAttribute(
"BinnedLikelihoodActive");
139 std::unique_ptr<RooArgSet> origParams{inpdf.
getParameters(indata)};
140 pdf_->recursiveRedirectServers(*origParams);
143 normSet_ = std::make_unique<RooArgSet>();
147 for (
const auto realDep : *_funcObsSet) {
149 if (realDepRLV && realDepRLV->isDerived()) {
151 realDepRLV->leafNodeServerList(&tmp2,
nullptr,
true);
152 _funcObsSet->
add(tmp2,
true);
162 for (
const auto arg : *_funcObsSet) {
165 auto realReal =
dynamic_cast<RooRealVar *
>(arg);
169 auto datReal =
dynamic_cast<RooRealVar *
>(dataDepSet->
find(realReal->GetName()));
176 if (!realReal->getBinning().lowBoundFunc() && realReal->getMin() < (datReal->getMin() - 1
e-6)) {
177 oocoutE(
nullptr,
InputArguments) <<
"RooAbsL: ERROR minimum of FUNC observable " << arg->GetName() <<
"("
178 << realReal->getMin() <<
") is smaller than that of " << arg->GetName()
179 <<
" in the dataset (" << datReal->getMin() <<
")" << std::endl;
184 if (!realReal->getBinning().highBoundFunc() && realReal->getMax() > (datReal->getMax() + 1
e-6)) {
186 <<
"RooAbsL: ERROR maximum of FUNC observable " << arg->GetName() <<
" is larger than that of "
187 << arg->GetName() <<
" in the dataset" << std::endl;
214 data_->attachBuffers(*_funcObsSet);
230 pdf_->optimizeCacheMode(*_funcObsSet);
232 data_->setDirtyProp(
false);
240 return std::unique_ptr<RooArgSet>{
pdf_->getParameters(*
data_)};
252 <<
"RooAbsL::constOptimizeTestStatistic(" <<
GetName()
253 <<
") optimizing evaluation of test statistic by finding all nodes in p.d.f that depend exclusively"
254 <<
" on observables and constant parameters and precalculating their values" << std::endl;
261 <<
"RooAbsL::constOptimizeTestStatistic(" <<
GetName()
262 <<
") deactivating optimization of constant terms in test statistic" << std::endl;
268 <<
"RooAbsL::constOptimizeTestStatistic(" <<
GetName()
269 <<
") one ore more parameter were changed from constant to floating or vice versa, "
270 <<
"re-evaluating constant term optimization" << std::endl;
278 <<
"RooAbsL::constOptimizeTestStatistic(" <<
GetName()
279 <<
") the value of one ore more constant parameter were changed re-evaluating constant term optimization"
282 data_.get()->store()->forceCacheUpdate();
289 std::string output(
"likelihood of pdf ");
290 output.append(
pdf_->GetName());
296 std::string output(
"likelihood of pdf ");
297 output.append(
pdf_->GetTitle());
303 return static_cast<std::size_t
>(
data_->numEntries());
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...
virtual bool add(const RooAbsArg &var, bool silent=false)
Add the specified argument to list.
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
Abstract interface for all probability density functions.
virtual ExtendMode extendMode() const
Returns ability of PDF to provide extended likelihood terms.
Abstract base class for objects that represent a real value that may appear on the left hand side of ...
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
static void softAbort()
Soft abort function that interrupts macro execution but doesn't kill ROOT.
Convenience wrapper class used to distinguish between pdf/data owning and non-owning constructors.
std::shared_ptr< RooAbsData > data_
std::size_t N_components_
static bool isExtendedHelper(RooAbsPdf *pdf, Extended extended)
virtual std::string GetName() const
virtual std::string GetTitle() const
std::unique_ptr< RooArgSet > normSet_
Pointer to set with observables used for normalization.
void initClones(RooAbsPdf &inpdf, RooAbsData &indata)
virtual std::unique_ptr< RooArgSet > getParameters()
virtual void constOptimizeTestStatistic(RooAbsArg::ConstOpCode opcode, bool doAlsoTrackingOpt)
Interface function signaling a request to perform constant term optimization.
RooAbsL(std::shared_ptr< RooAbsPdf > pdf, std::shared_ptr< RooAbsData > data, std::size_t N_events, std::size_t N_components, Extended extended)
After handling cloning (or not) of the pdf and dataset, the public constructors call this private con...
virtual std::size_t numDataEntries() const
Number of dataset entries.
std::shared_ptr< RooAbsPdf > pdf_
Variable that can be changed from the outside.
Mother of all ROOT objects.
Namespace for new RooFit test statistic calculation.
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
static void disableConstantTermsOptimization(RooAbsReal *function, RooArgSet *norm_set, RooAbsData *dataset, RooArgSet *observables=nullptr)
static void enableConstantTermsOptimization(RooAbsReal *function, RooArgSet *norm_set, RooAbsData *dataset, bool applyTrackingOpt)