ROOT  6.06/09
Reference Guide
TUnfoldDensity.h
Go to the documentation of this file.
1 // Author: Stefan Schmitt
2 // DESY, 11/08/11
3 
4 // Version 17.1, add scan type RhoSquare
5 //
6 // History:
7 // Version 17.0, support for density regularisation and complex binning schemes
8 
9 #ifndef ROOT_TUnfoldDensity
10 #define ROOT_TUnfoldDensity
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // //
15 // TUnfoldDensity, an extension of the class TUnfoldSys to correct for //
16 // migration effects. TUnfoldDensity provides methods to deal with //
17 // multidimensional complex binning schemes and variable bin widths //
18 // //
19 // Citation: S.Schmitt, JINST 7 (2012) T10003 [arXiv:1205.6201] //
20 // //
21 //////////////////////////////////////////////////////////////////////////
22 
23 /*
24  This file is part of TUnfold.
25 
26  TUnfold is free software: you can redistribute it and/or modify
27  it under the terms of the GNU General Public License as published by
28  the Free Software Foundation, either version 3 of the License, or
29  (at your option) any later version.
30 
31  TUnfold is distributed in the hope that it will be useful,
32  but WITHOUT ANY WARRANTY; without even the implied warranty of
33  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34  GNU General Public License for more details.
35 
36  You should have received a copy of the GNU General Public License
37  along with TUnfold. If not, see <http://www.gnu.org/licenses/>.
38 */
39 
40 #include "TUnfoldSys.h"
41 #include "TUnfoldBinning.h"
42 
43 
44 class TUnfoldDensity : public TUnfoldSys {
45  protected:
46  const TUnfoldBinning * fConstOutputBins; // binning scheme for the output
47  const TUnfoldBinning * fConstInputBins; // binning scheme for the input
48  TUnfoldBinning *fOwnedOutputBins; // output binning scheme if owner
49  TUnfoldBinning *fOwnedInputBins; // input binning scheme if owner
50  TUnfoldBinning *fRegularisationConditions; // binning scheme for the regularisation conditions
51 
52  public:
53  enum EDensityMode {
58  };
59  protected:
60 
61  virtual TString GetOutputBinName(Int_t iBinX) const; // name a bin
62 
63  TUnfoldDensity(void); // constructor for derived classes, do nothing
64 
65  Double_t GetDensityFactor(EDensityMode densityMode,Int_t iBin) const; // density correction factor for this bin
67  (const TUnfoldBinning *binning,ERegMode regmode,
68  EDensityMode densityMode,const char *distribution,
69  const char *axisSteering); // regularize the given binning recursively
71  (const TUnfoldBinning *binning,ERegMode regmode,
72  EDensityMode densityMode,const char *axisSteering); // regularize the distribution of one binning node
73 
74  public:
75  TUnfoldDensity(const TH2 *hist_A, EHistMap histmap,
76  ERegMode regmode = kRegModeCurvature,
77  EConstraint constraint=kEConstraintArea,
79  const TUnfoldBinning *outputBins=0,
80  const TUnfoldBinning *inputBins=0,
81  const char *regularisationDistribution=0,
82  const char *regularisationAxisSteering="*[UOB]"); // constructor for using the histogram classes. Default regularisation is on the curvature of the bin-width normalized density, excluding underflow and overflow bins
83 
84  virtual ~ TUnfoldDensity(void); // delete data members
85 
86  void RegularizeDistribution(ERegMode regmode,EDensityMode densityMode,
87  const char *distribution,
88  const char *axisSteering); // regularize distribution(s) of the output binning scheme
89 
90 
91  enum EScanTauMode { // scan mode of correlation scan
92  kEScanTauRhoAvg =0, // average global correlation coefficient (from TUnfold::GetRhoI())
93  kEScanTauRhoMax =1, // maximum global correlation coefficient (from TUnfold::GetRhoI())
94  kEScanTauRhoAvgSys =2, // average global correlation coefficient (from TUnfoldSys::GetRhoItotal())
95  kEScanTauRhoMaxSys =3, // maximum global correlation coefficient (from TUnfoldSys::GetRhoItotal())
96  kEScanTauRhoSquareAvg =4, // average global correlation coefficient squared (from TUnfold::GetRhoI())
97  kEScanTauRhoSquareAvgSys =5 // average global correlation coefficient squared (from TUnfoldSys::GetRhoItotal())
98  };
99 
100  virtual Int_t ScanTau(Int_t nPoint,Double_t tauMin,Double_t tauMax,
101  TSpline **scanResult,Int_t mode=kEScanTauRhoAvg,
102  const char *distribution=0,const char *projectionMode=0,TGraph **lCurvePlot=0,TSpline **logTauXPlot=0,TSpline **logTauYPlot=0); // scan some variable (e.g. global correlation) and find a minimum using successive calls to DoUnfold(Double_t) at various tau
103  virtual Double_t GetScanVariable(Int_t mode,const char *distribution,const char *projectionMode); // calculate variable for ScanTau()
104 
105  TH1 *GetOutput(const char *histogramName,
106  const char *histogramTitle=0,const char *distributionName=0,
107  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE) const; // get unfolding result
108  TH1 *GetBias(const char *histogramName,
109  const char *histogramTitle=0,const char *distributionName=0,
110  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE) const; // get bias
111  TH1 *GetFoldedOutput(const char *histogramName,
112  const char *histogramTitle=0,
113  const char *distributionName=0,
114  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE,
115  Bool_t addBgr=kFALSE) const; // get unfolding result folded back
116  TH1 *GetBackground(const char *histogramName,const char *bgrSource=0,
117  const char *histogramTitle=0,
118  const char *distributionName=0,
119  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE,Int_t includeError=3,
120  Bool_t clearHist=kTRUE) const; // get background source
121  TH1 *GetInput(const char *histogramName,const char *histogramTitle=0,
122  const char *distributionName=0,
123  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE) const; // get unfolding input
124  TH1 *GetDeltaSysSource(const char *source,
125  const char *histogramName,
126  const char *histogramTitle=0,
127  const char *distributionName=0,
128  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get systematic shifts from one systematic source
129  TH1 *GetDeltaSysBackgroundScale(const char *bgrSource,
130  const char *histogramName,
131  const char *histogramTitle=0,
132  const char *distributionName=0,
133  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get correlated uncertainty induced by the scale uncertainty of a background source
134  TH1 *GetDeltaSysTau(const char *histogramName,
135  const char *histogramTitle=0,
136  const char *distributionName=0,
137  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get correlated uncertainty from varying tau
138  TH2 *GetEmatrixSysUncorr(const char *histogramName,
139  const char *histogramTitle=0,
140  const char *distributionName=0,
141  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get error matrix contribution from uncorrelated errors on the matrix A
142  TH2 *GetEmatrixSysBackgroundUncorr(const char *bgrSource,
143  const char *histogramName,
144  const char *histogramTitle=0,
145  const char *distributionName=0,
146  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get error matrix from uncorrelated error of one background source
147  TH2 *GetEmatrixInput(const char *histogramName,
148  const char *histogramTitle=0,
149  const char *distributionName=0,
150  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get error contribution from input vector
151  TH2 *GetEmatrixTotal(const char *histogramName,
152  const char *histogramTitle=0,
153  const char *distributionName=0,
154  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get total error including systematic,statistical,background,tau errors
155  TH1 *GetRhoIstatbgr(const char *histogramName,const char *histogramTitle=0,
156  const char *distributionName=0,
157  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE,
158  TH2 **ematInv=0); // get global correlation coefficients, stat+bgr errors only (from TUnfold)
159  TH1 *GetRhoItotal(const char *histogramName,const char *histogramTitle=0,
160  const char *distributionName=0,
161  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE,
162  TH2 **ematInv=0); // get global correlation coefficients, including systematic errors (from TUnfoldSys)
163  TH2 *GetRhoIJtotal(const char *histogramName,
164  const char *histogramTitle=0,
165  const char *distributionName=0,
166  const char *projectionMode=0,Bool_t useAxisBinning=kTRUE); // get correlation coefficients
167  TH2 *GetL(const char *histogramName,
168  const char *histogramTitle=0,
169  Bool_t useAxisBinning=kTRUE); // get regularisation matrix
170  TH1 *GetLxMinusBias(const char *histogramName,const char *histogramTitle=0); // get vector L(x-bias) of regularisation conditions
171 
172  TH2 *GetProbabilityMatrix(const char *histogramName,
173  const char *histogramTitle=0,Bool_t useAxisBinning=kTRUE) const; // get matrix of probabilities
174 
175  const TUnfoldBinning *GetInputBinning(const char *distributionName=0) const; // find binning scheme for input bins
176  const TUnfoldBinning *GetOutputBinning(const char *distributionName=0) const; // find binning scheme for output bins
177 TUnfoldBinning *GetLBinning(void) const { return fRegularisationConditions; } // binning scheme for regularisation conditions (matrix L)
178  ClassDef(TUnfoldDensity, TUnfold_CLASS_VERSION) //Unfolding with densisty regularisation
179 };
180 
181 #endif
TH1 * GetFoldedOutput(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE, Bool_t addBgr=kFALSE) const
const TUnfoldBinning * fConstOutputBins
virtual Int_t ScanTau(Int_t nPoint, Double_t tauMin, Double_t tauMax, TSpline **scanResult, Int_t mode=kEScanTauRhoAvg, const char *distribution=0, const char *projectionMode=0, TGraph **lCurvePlot=0, TSpline **logTauXPlot=0, TSpline **logTauYPlot=0)
Base class for spline implementation containing the Draw/Paint methods //.
Definition: TSpline.h:22
TH1 * GetBias(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE) const
const TUnfoldBinning * GetOutputBinning(const char *distributionName=0) const
TUnfold is used to decompose a measurement y into several sources x given the measurement uncertainti...
Definition: TUnfoldSys.h:51
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TH1 * GetOutput(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE) const
const Bool_t kFALSE
Definition: Rtypes.h:92
TH2 * GetEmatrixSysUncorr(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TH1 * GetInput(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE) const
TUnfoldDensity(void)
TUnfoldBinning * fOwnedOutputBins
const TUnfoldBinning * GetInputBinning(const char *distributionName=0) const
TH2 * GetL(const char *histogramName, const char *histogramTitle=0, Bool_t useAxisBinning=kTRUE)
void RegularizeDistribution(ERegMode regmode, EDensityMode densityMode, const char *distribution, const char *axisSteering)
TH2 * GetEmatrixSysBackgroundUncorr(const char *bgrSource, const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TH1 * GetLxMinusBias(const char *histogramName, const char *histogramTitle=0)
TH2 * GetEmatrixTotal(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
#define ClassDef(name, id)
Definition: Rtypes.h:254
EHistMap
Definition: TUnfold.h:188
EConstraint
Definition: TUnfold.h:103
void RegularizeOneDistribution(const TUnfoldBinning *binning, ERegMode regmode, EDensityMode densityMode, const char *axisSteering)
TUnfoldBinning * GetLBinning(void) const
TH2 * GetProbabilityMatrix(const char *histogramName, const char *histogramTitle=0, Bool_t useAxisBinning=kTRUE) const
ERegMode
Definition: TUnfold.h:107
Double_t GetDensityFactor(EDensityMode densityMode, Int_t iBin) const
TUnfoldBinning * fRegularisationConditions
Service class for 2-Dim histogram classes.
Definition: TH2.h:36
TH2 * GetRhoIJtotal(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TH1 * GetBackground(const char *histogramName, const char *bgrSource=0, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE, Int_t includeError=3, Bool_t clearHist=kTRUE) const
TH1 * GetDeltaSysTau(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TH1 * GetRhoIstatbgr(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE, TH2 **ematInv=0)
This class serves as a container of analysis bins analysis bins are specified by defining the axes of...
TH1 * GetDeltaSysSource(const char *source, const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
double Double_t
Definition: RtypesCore.h:55
virtual ~TUnfoldDensity(void)
The TH1 histogram class.
Definition: TH1.h:80
const TUnfoldBinning * fConstInputBins
#define TUnfold_CLASS_VERSION
Definition: TUnfold.h:96
TH1 * GetDeltaSysBackgroundScale(const char *bgrSource, const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TUnfoldBinning * fOwnedInputBins
A Graph is a graphics object made of two arrays X and Y with npoints each.
Definition: TGraph.h:53
virtual Double_t GetScanVariable(Int_t mode, const char *distribution, const char *projectionMode)
TH2 * GetEmatrixInput(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE)
TH1 * GetRhoItotal(const char *histogramName, const char *histogramTitle=0, const char *distributionName=0, const char *projectionMode=0, Bool_t useAxisBinning=kTRUE, TH2 **ematInv=0)
virtual TString GetOutputBinName(Int_t iBinX) const
const Bool_t kTRUE
Definition: Rtypes.h:91
void RegularizeDistributionRecursive(const TUnfoldBinning *binning, ERegMode regmode, EDensityMode densityMode, const char *distribution, const char *axisSteering)