22namespace TestStatistics {
49 function->getVal(norm_set);
59 if (applyTrackingOpt) {
62 <<
"enableConstantTermsOptimization(function: " << function->GetName()
63 <<
", dataset: " << dataset->GetName()
64 <<
") WARNING Cache-and-track optimization (Optimize level 2) is only available for datasets"
65 <<
" implemented in terms of RooVectorDataStore - ignoring this option for current dataset" << std::endl;
66 applyTrackingOpt =
false;
70 if (applyTrackingOpt) {
72 function->branchNodeServerList(&branches);
73 for (
const auto arg : branches) {
74 arg->setCacheAndTrackHints(trackNodes);
77 std::unique_ptr<RooArgSet> constNodes{trackNodes.
selectByAttrib(
"Constant",
true)};
78 trackNodes.
remove(*constNodes);
87 function->findConstantNodes(*dataset->get(), cached_nodes);
93 dataset->cacheArgs(
nullptr, cached_nodes, norm_set, !function->getAttribute(
"BinnedLikelihood"));
96 for (
const auto cacheArg : cached_nodes) {
100 std::unique_ptr<RooArgSet> constNodes{cached_nodes.
selectByAttrib(
"ConstantExpressionCached",
true)};
101 RooArgSet actualTrackNodes(cached_nodes);
102 actualTrackNodes.
remove(*constNodes);
103 if (!constNodes->empty()) {
104 if (constNodes->size() < 20) {
106 <<
" The following expressions have been identified as constant and will be precalculated and cached: "
107 << *constNodes << std::endl;
110 <<
" A total of " << constNodes->size()
111 <<
" expressions have been identified as constant and will be precalculated and cached." << std::endl;
114 if (!actualTrackNodes.
empty()) {
115 if (actualTrackNodes.
size() < 20) {
116 oocoutI(
nullptr,
Minimization) <<
" The following expressions will be evaluated in cache-and-track mode: "
117 << actualTrackNodes << std::endl;
120 <<
" expressions will be evaluated in cache-and-track-mode." << std::endl;
132 dataset->resetCache();
135 dataset->setArgStatus(*dataset->get(),
true);
141 dataset->setDirtyProp(
false);
153 function->getVal(norm_set);
156 std::unique_ptr<RooArgSet> ownedObservables;
157 if (observables ==
nullptr) {
158 ownedObservables = std::unique_ptr<RooArgSet>{function->getObservables(dataset)};
159 observables = ownedObservables.
get();
161 function->optimizeCacheMode(*observables);
164 dataset->setDirtyProp(
false);
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
Storage_t const & get() const
Const access to the underlying stl container.
void setAttribAll(const Text_t *name, bool value=true)
Set given attribute in each element of the collection by calling each elements setAttribute() functio...
Storage_t::size_type size() const
Abstract base class for binned and unbinned datasets.
Abstract base class for objects that represent a real value and implements functionality common to al...
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * selectByAttrib(const char *name, bool value) const
Use RooAbsCollection::selectByAttrib(), but return as RooArgSet.
Uses std::vector to store data columns.
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 optimizeCaching(RooAbsReal *function, RooArgSet *norm_set, RooAbsData *dataset, RooArgSet *observables=nullptr)
static RooArgSet requiredExtraObservables()
static void enableConstantTermsOptimization(RooAbsReal *function, RooArgSet *norm_set, RooAbsData *dataset, bool applyTrackingOpt)