Logo ROOT   master
Reference Guide
RooDataWeightedAverage.cxx
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * @(#)root/roofitcore:$Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 
17 /**
18 \file RooDataWeightedAverage.cxx
19 \class RooDataWeightedAverage
20 \ingroup Roofitcore
21 
22 Class RooDataWeightedAverage calculate a weighted
23 average of a function or p.d.f given a dataset with observable
24 values, i.e. DWA(f(x),D(x)) = sum_i f(x_i) where x_i is draw from
25 D(i). This class is an implementation of RooAbsOptTestStatistics
26 can make use of the optimization and parallization infrastructure
27 of that base class. The main use of RooDataWeightedAverage is
28 to calculate curves in RooPlots that are added with ProjWData()
29 plot option.
30 
31 **/
32 
33 #include "RooFit.h"
34 #include "Riostream.h"
35 
36 #include "RooDataWeightedAverage.h"
37 #include "RooAbsData.h"
38 #include "RooAbsPdf.h"
39 #include "RooCmdConfig.h"
40 #include "RooMsgService.h"
41 #include "RooAbsDataStore.h"
42 
43 
44 
45 using namespace std;
46 
48 ;
49 
50 
51 ////////////////////////////////////////////////////////////////////////////////
52 /// Constructor of data weighted average of given p.d.f over given data. If nCPU>1 the calculation is parallelized
53 /// over multuple processes. If showProgress is true a progress indicator printing a single dot for each evaluation
54 /// is shown. If interleave is true, the dataset split over multiple processes is done with an interleave pattern
55 /// rather than a bulk-split pattern.
56 
57 RooDataWeightedAverage::RooDataWeightedAverage(const char *name, const char *title, RooAbsReal& pdf, RooAbsData& indata,
58  const RooArgSet& projdeps, Int_t nCPU, RooFit::MPSplit interleave, Bool_t showProgress, Bool_t verbose) :
59  RooAbsOptTestStatistic(name,title,pdf,indata,projdeps,0,0,nCPU,interleave,verbose,kFALSE),
60  _showProgress(showProgress)
61 {
62  if (_showProgress) {
63  coutI(Plotting) << "RooDataWeightedAverage::ctor(" << GetName() << ") constructing data weighted average of function " << pdf.GetName()
64  << " over " << indata.numEntries() << " data points of " << *(indata.get()) << " with a total weight of " << indata.sumEntries() << endl ;
65  }
66  _sumWeight = indata.sumEntries() ;
67 }
68 
69 
70 ////////////////////////////////////////////////////////////////////////////////
71 /// Copy constructor
72 
75  _sumWeight(other._sumWeight),
76  _showProgress(other._showProgress)
77 {
78 }
79 
80 
81 
82 ////////////////////////////////////////////////////////////////////////////////
83 /// Destructor
84 
86 {
87 }
88 
89 
90 
91 ////////////////////////////////////////////////////////////////////////////////
92 /// Return global normalization term by which raw (combined) test statistic should
93 /// be defined to obtain final test statistic. For a data weighted avarage this
94 /// the the sum of all weights
95 
97 {
98  return _sumWeight ;
99 }
100 
101 
102 
103 ////////////////////////////////////////////////////////////////////////////////
104 /// Calculate the data weighted average for events [firstEVent,lastEvent] with step size stepSize
105 
106 Double_t RooDataWeightedAverage::evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize) const
107 {
108  Double_t result(0) ;
109 
110  _dataClone->store()->recalculateCache( _projDeps, firstEvent, lastEvent, stepSize,kFALSE) ;
111 
112  if (setNum()==0 && _showProgress) {
113  ccoutP(Plotting) << "." ;
114  cout.flush() ;
115  }
116 
117  for (auto i=firstEvent ; i<lastEvent ; i+=stepSize) {
118 
119  // get the data values for this event
120  _dataClone->get(i);
121  if (_dataClone->weight()==0) continue ;
122 
124  result += term;
125  }
126 
127  return result ;
128 }
129 
130 
131 
virtual Double_t sumEntries() const =0
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
virtual const RooArgSet * get() const
Definition: RooAbsData.h:87
#define coutI(a)
Definition: RooMsgService.h:30
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
STL namespace.
virtual Double_t evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize) const
Calculate the data weighted average for events [firstEVent,lastEvent] with step size stepSize...
virtual Double_t globalNormalization() const
Return global normalization term by which raw (combined) test statistic should be defined to obtain f...
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
Definition: RooAbsReal.h:89
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition: RooAbsData.h:44
#define ccoutP(a)
Definition: RooMsgService.h:39
RooAbsDataStore * store()
Definition: RooAbsData.h:63
const Bool_t kFALSE
Definition: RtypesCore.h:88
#define ClassImp(name)
Definition: Rtypes.h:365
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:59
Class RooDataWeightedAverage calculate a weighted average of a function or p.d.f given a dataset with...
virtual Double_t weight() const =0
virtual ~RooDataWeightedAverage()
Destructor.
virtual void recalculateCache(const RooArgSet *, Int_t, Int_t, Int_t, Bool_t)
char name[80]
Definition: TGX11.cxx:109
virtual Int_t numEntries() const
Definition: RooAbsData.cxx:306
RooAbsOptTestStatistic is the abstract base class for test statistics objects that evaluate a functio...