22class RooNLLVar :
public RooAbsOptTestStatistic {
26 RooNLLVar(
const char *
name,
const char *title, RooAbsPdf& pdf, RooAbsData& data,
28 RooAbsTestStatistic::Configuration
const& cfg=RooAbsTestStatistic::Configuration{});
30 RooNLLVar(
const char *
name,
const char *title, RooAbsPdf& pdf, RooAbsData& data,
31 const RooArgSet& projDeps,
bool extended =
false,
32 RooAbsTestStatistic::Configuration
const& cfg=RooAbsTestStatistic::Configuration{});
34 RooNLLVar(
const RooNLLVar& other,
const char*
name=
nullptr);
35 TObject* clone(
const char* newname=
nullptr)
const override {
return new RooNLLVar(*
this,newname); }
37 RooAbsTestStatistic* create(
const char *
name,
const char *title, RooAbsReal& pdf, RooAbsData& adata,
38 const RooArgSet& projDeps, RooAbsTestStatistic::Configuration
const& cfg)
override;
40 ~RooNLLVar()
override;
42 void applyWeightSquared(
bool flag)
override;
44 double defaultErrorLevel()
const override {
return 0.5 ; }
46 void enableBinOffsetting(
bool on =
true);
48 using ComputeResult = std::pair<ROOT::Math::KahanSum<double>,
double>;
50 static RooNLLVar::ComputeResult computeScalarFunc(
const RooAbsPdf *pdfClone, RooAbsData *dataClone, RooArgSet *normSet,
51 bool weightSq, std::size_t stepSize, std::size_t firstEvent,
52 std::size_t lastEvent, RooAbsPdf
const* offsetPdf =
nullptr);
54 bool setDataSlave(RooAbsData& data,
bool cloneData=
true,
bool ownNewDataAnyway=
false)
override;
58 bool processEmptyDataSets()
const override {
return _extended ; }
59 double evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize)
const override;
61 static RooArgSet _emptySet ;
64 ComputeResult computeScalar(std::size_t stepSize, std::size_t firstEvent, std::size_t lastEvent)
const;
66 bool _extended{
false};
67 bool _doBinOffset{
false};
68 bool _weightSq{
false};
69 mutable bool _first{
true};
70 ROOT::Math::KahanSum<double> _offsetSaveW2{0.0};
72 mutable std::vector<double> _binw ;
73 mutable RooAbsPdf* _binnedPdf{
nullptr};
74 std::unique_ptr<RooAbsPdf> _offsetPdf;