Logo ROOT   6.10/09
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 
74  RooAbsOptTestStatistic(other,name),
75  _sumWeight(other._sumWeight),
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(Int_t firstEvent, Int_t lastEvent, Int_t stepSize) const
107 {
108  Int_t i ;
109  Double_t result(0) ;
110 
111  _dataClone->store()->recalculateCache( _projDeps, firstEvent, lastEvent, stepSize,kFALSE) ;
112 
113  if (setNum()==0 && _showProgress) {
114  ccoutP(Plotting) << "." ;
115  cout.flush() ;
116  }
117 
118  for (i=firstEvent ; i<lastEvent ; i+=stepSize) {
119 
120  // get the data values for this event
121  _dataClone->get(i);
122  if (_dataClone->weight()==0) continue ;
123 
125  result += term;
126  }
127 
128  return result ;
129 }
130 
131 
132 
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:77
#define coutI(a)
Definition: RooMsgService.h:31
Double_t getVal(const RooArgSet *set=0) const
Definition: RooAbsReal.h:64
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
STL namespace.
virtual Double_t evaluatePartition(Int_t firstEvent, Int_t lastEvent, Int_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...
bool verbose
RooAbsData is the common abstract base class for binned and unbinned datasets.
Definition: RooAbsData.h:37
#define ccoutP(a)
Definition: RooMsgService.h:39
RooAbsDataStore * store()
Definition: RooAbsData.h:55
const Bool_t kFALSE
Definition: RtypesCore.h:92
#define ClassImp(name)
Definition: Rtypes.h:336
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
Class RooDataWeightedAverage calculate a weighted average of a function or p.d.f given a dataset with...
virtual Double_t weight() const =0
double result[121]
virtual ~RooDataWeightedAverage()
Destructor.
virtual void recalculateCache(const RooArgSet *, Int_t, Int_t, Int_t, Bool_t)
virtual Int_t numEntries() const
Definition: RooAbsData.cxx:269
RooAbsOptTestStatistic is the abstract base class for test statistics objects that evaluate a functio...