40namespace TestStatistics {
58 :
RooAbsL(clonePdfData(*pdf, *
data, evalBackend),
data->numEntries(), 1, extended)
61 paramTracker_ = std::make_unique<RooChangeTracker>(
"chtracker",
"change tracker", *params,
true);
71 RooFit::BatchModeDataHelpers::getDataSpans(*
data,
"",
nullptr,
false,
73 for (
auto const &item : dataSpans) {
74 evaluator_->setInput(item.first->GetName(), item.second,
false);
81 apply_weight_squared(other.apply_weight_squared),
83 lastSection_(other.lastSection_),
84 cachedResult_(other.cachedResult_),
85 evaluator_(other.evaluator_)
107using ComputeResult = std::pair<ROOT::Math::KahanSum<double>,
double>;
111 std::size_t stepSize, std::size_t firstEvent, std::size_t lastEvent,
118 for (
auto i = firstEvent; i < lastEvent; i += stepSize) {
121 double weight = dataClone->
weight();
123 if (0. == weight * weight)
128 double logProba = pdfClone->
getLogVal(normSet);
131 logProba -= offsetPdf->getLogVal(normSet);
134 const double term = -weight * logProba;
136 kahanWeight.
Add(weight);
138 packedNaN.accumulate(term);
141 if (packedNaN.getPayload() != 0.) {
146 return {kahanProb, kahanWeight.
Sum()};
155ComputeResult computeBatchFunc(std::span<const double> probas,
RooAbsData *dataClone,
bool weightSq,
156 std::size_t firstEvent, std::size_t lastEvent, std::vector<double> &unitWeights,
159 const std::size_t nEvents = lastEvent - firstEvent;
161 std::span<const double> dataWeights = dataClone->
getWeightBatch(firstEvent, nEvents, weightSq);
164 const double *weightData =
nullptr;
165 std::size_t nWeights = 0;
166 if (dataWeights.empty()) {
167 if (unitWeights.size() < nEvents) {
168 unitWeights.assign(nEvents, 1.0);
170 weightData = unitWeights.data();
174 weightData = dataWeights.data();
175 nWeights = dataWeights.size();
178 std::span<const double> weights{weightData, nWeights};
180 std::span<const double> probasInRange{
probas.data() + firstEvent, nEvents};
213 std::span<const double> probas =
evaluator_->run();
236 pdf_->wireAllCaches();
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
void Add(T x)
Single-element accumulation. Will not vectorise.
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...
Abstract base class for binned and unbinned datasets.
virtual double weight() const =0
virtual const RooArgSet * get() const
virtual std::span< const double > getWeightBatch(std::size_t first, std::size_t len, bool sumW2=false) const =0
Return event weights of all events in range [first, first+len).
virtual double weightSquared() const =0
Abstract interface for all probability density functions.
virtual double getLogVal(const RooArgSet *set=nullptr) const
Return the log of the current value with given normalization An error message is printed if the argum...
static ErrorLoggingMode evalErrorLoggingMode()
Return current evaluation error logging mode.
static Int_t numEvalErrors()
Return the number of logged evaluation errors since the last clearing.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Minimal configuration struct to steer the evaluation of a single node with the RooBatchCompute librar...
std::shared_ptr< RooAbsData > data_
std::unique_ptr< RooArgSet > normSet_
Pointer to set with observables used for normalization.
std::shared_ptr< RooAbsPdf > pdf_
ROOT::Math::KahanSum< double > cachedResult_
std::vector< double > _unitWeights
! all-ones weights for unweighted data in batched evaluation
bool setApplyWeightSquared(bool flag)
Returns true if value was changed, false otherwise.
ROOT::Math::KahanSum< double > evaluatePartition(Section events, std::size_t components_begin, std::size_t components_end) override
Calculate and return likelihood on subset of data from firstEvent to lastEvent processed with a step ...
RooUnbinnedL(RooAbsPdf *pdf, RooAbsData *data, RooAbsL::Extended extended=RooAbsL::Extended::Auto, RooFit::EvalBackend evalBackend=RooFit::EvalBackend(RooFit::EvalBackend::Value::Legacy))
std::unique_ptr< RooChangeTracker > paramTracker_
bool apply_weight_squared
Apply weights squared?
std::stack< std::vector< double > > _vectorBuffers
std::shared_ptr< RooFit::Evaluator > evaluator_
! For batched evaluation
double reduceSum(Config cfg, InputArr input, size_t n)
ReduceNLLOutput reduceNLL(Config cfg, std::span< const double > probas, std::span< const double > weights, std::span< const double > offsetProbas)
std::unique_ptr< T > compileForNormSet(T const &arg, RooArgSet const &normSet)
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
void probas(TString dataset, TString fin="TMVA.root", Bool_t useTMVAStyle=kTRUE)
A part of some range delimited by two fractional points between 0 and 1 (inclusive).
std::size_t begin(std::size_t N_total) const
std::size_t end(std::size_t N_total) const
Little struct that can pack a float into the unused bits of the mantissa of a NaN double.