Logo ROOT   6.08/07
Reference Guide
TUnfold.h
Go to the documentation of this file.
1 // Author: Stefan Schmitt
2 // DESY, 13/10/08
3 
4 // Version 17.1, bug fixes in GetFoldedOutput, GetOutput
5 //
6 // History:
7 // Version 17.0, error matrix with SetInput, store fL not fLSquared
8 // Version 16.2, in parallel to bug-fix in TUnfoldSys
9 // Version 16.1, in parallel to bug-fix in TUnfold.C
10 // Version 16.0, some cleanup, more getter functions, query version number
11 // Version 15, simplified L-curve scan, new tau definition, new eror calc.
12 // Version 14, with changes in TUnfoldSys.cxx
13 // Version 13, new methods for derived classes
14 // Version 12, with support for preconditioned matrix inversion
15 // Version 11, regularisation methods have return values
16 // Version 10, with bug-fix in TUnfold.cxx
17 // Version 9, implements method for optimized inversion of sparse matrix
18 // Version 8, replace all TMatrixSparse matrix operations by private code
19 // Version 7, fix problem with TMatrixDSparse,TMatrixD multiplication
20 // Version 6, completely remove definition of class XY
21 // Version 5, move definition of class XY from TUnfold.C to this file
22 // Version 4, with bug-fix in TUnfold.C
23 // Version 3, with bug-fix in TUnfold.C
24 // Version 2, with changed ScanLcurve() arguments
25 // Version 1, added ScanLcurve() method
26 // Version 0, stable version of basic unfolding algorithm
27 
28 
29 #ifndef ROOT_TUnfold
30 #define ROOT_TUnfold
31 
32 //////////////////////////////////////////////////////////////////////////
33 // //
34 // //
35 // TUnfold provides functionality to correct data //
36 // for migration effects. //
37 // //
38 // Citation: S.Schmitt, JINST 7 (2012) T10003 [arXiv:1205.6201] //
39 // //
40 // //
41 // TUnfold solves the inverse problem //
42 // //
43 // T -1 2 T //
44 // chi**2 = (y-Ax) Vyy (y-Ax) + tau (L(x-x0)) L(x-x0) //
45 // //
46 // Monte Carlo input //
47 // y: vector of measured quantities (dimension ny) //
48 // Vyy: covariance matrix for y (dimension ny x ny) //
49 // A: migration matrix (dimension ny x nx) //
50 // x: unknown underlying distribution (dimension nx) //
51 // Regularisation //
52 // tau: parameter, defining the regularisation strength //
53 // L: matrix of regularisation conditions (dimension nl x nx) //
54 // x0: underlying distribution bias //
55 // //
56 // where chi**2 is minimized as a function of x //
57 // //
58 // The algorithm is based on "standard" matrix inversion, with the //
59 // known limitations in numerical accuracy and computing cost for //
60 // matrices with large dimensions. //
61 // //
62 // Thus the algorithm should not used for large dimensions of x and y //
63 // dim(x) should not exceed O(100) //
64 // dim(y) should not exceed O(500) //
65 // //
66 //////////////////////////////////////////////////////////////////////////
67 
68 /*
69  This file is part of TUnfold.
70 
71  TUnfold is free software: you can redistribute it and/or modify
72  it under the terms of the GNU General Public License as published by
73  the Free Software Foundation, either version 3 of the License, or
74  (at your option) any later version.
75 
76  TUnfold is distributed in the hope that it will be useful,
77  but WITHOUT ANY WARRANTY; without even the implied warranty of
78  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79  GNU General Public License for more details.
80 
81  You should have received a copy of the GNU General Public License
82  along with TUnfold. If not, see <http://www.gnu.org/licenses/>.
83 */
84 
85 #include <TH1D.h>
86 #include <TH2D.h>
87 #include <TObject.h>
88 #include <TArrayI.h>
89 #include <TSpline.h>
90 #include <TMatrixDSparse.h>
91 #include <TMatrixD.h>
92 #include <TObjArray.h>
93 #include <TString.h>
94 
95 #define TUnfold_VERSION "V17.1"
96 #define TUnfold_CLASS_VERSION 17
97 
98 
99 class TUnfold : public TObject {
100  private:
101  void InitTUnfold(void); // initialize all data members
102  public:
103  enum EConstraint {
104  kEConstraintNone =0, // use no extra constraint
105  kEConstraintArea =1 // enforce preservation of the area
106  };
107  enum ERegMode { // regularisation scheme
108  kRegModeNone = 0, // no regularisation
109  kRegModeSize = 1, // regularise the size of the output
110  kRegModeDerivative = 2, // regularize the 1st derivative of the output
111  kRegModeCurvature = 3, // regularize the 2nd derivative of the output
112  kRegModeMixed = 4 // mixed regularisation pattern
113  };
114  protected:
115  TMatrixDSparse * fA; // Input: matrix
116  TMatrixDSparse *fL; // Input: regularisation conditions
117  TMatrixDSparse *fVyy; // Input: covariance matrix for y
118  TMatrixD *fY; // Input: y
119  TMatrixD *fX0; // Input: x0
120  Double_t fTauSquared; // Input: regularisation parameter
121  Double_t fBiasScale; // Input: scale factor for the bias
122  TArrayI fXToHist; // Input: matrix indices -> histogram bins
123  TArrayI fHistToX; // Input: histogram bins -> matrix indices
124  TArrayD fSumOverY; // Input: sum of all columns
125  EConstraint fConstraint; // Input: type of constraint to use
126  ERegMode fRegMode; // Input: type of regularisation
127  private:
128  Int_t fIgnoredBins; // number of input bins which are dropped because they have error=0
129  Double_t fEpsMatrix; // machine accuracy for eingenvalue analysis
130  TMatrixD *fX; // Result: x
131  TMatrixDSparse *fVyyInv; // Result: inverse of covariance matrix on y
132  TMatrixDSparse *fVxx; // Result: covariance matrix on x
133  TMatrixDSparse *fVxxInv; // Result: inverse of covariance matrix on x
134  TMatrixDSparse *fAx; // Result: Ax
135  Double_t fChi2A; // Result: chi**2 contribution from (y-Ax)V(y-Ax)
136  Double_t fLXsquared; // Result: chi**2 contribution from (x-s*x0)Lsquared(x-s*x0)
137  Double_t fRhoMax; // Result: maximum global correlation
138  Double_t fRhoAvg; // Result: average global correlation
139  Int_t fNdf; // Result: number of degrees of freedom
140  TMatrixDSparse *fDXDAM[2]; // Result: part of derivative dx_k/dA_ij
141  TMatrixDSparse *fDXDAZ[2]; // Result: part of derivative dx_k/dA_ij
142  TMatrixDSparse *fDXDtauSquared; // Result: derivative dx/dtau
143  TMatrixDSparse *fDXDY; // Result: derivative dx/dy
144  TMatrixDSparse *fEinv; // Result: matrix E^(-1)
145  TMatrixDSparse *fE; // Result: matrix E
146  protected:
147  TUnfold(void); // for derived classes
148  // Int_t IsNotSymmetric(TMatrixDSparse const &m) const;
149  virtual Double_t DoUnfold(void); // the unfolding algorithm
150  virtual void ClearResults(void); // clear all results
151  void ClearHistogram(TH1 *h,Double_t x=0.) const;
152  virtual TString GetOutputBinName(Int_t iBinX) const; // name a bin
153  TMatrixDSparse *MultiplyMSparseM(const TMatrixDSparse *a,const TMatrixD *b) const; // multiply sparse and non-sparse matrix
154  TMatrixDSparse *MultiplyMSparseMSparse(const TMatrixDSparse *a,const TMatrixDSparse *b) const; // multiply sparse and sparse matrix
155  TMatrixDSparse *MultiplyMSparseTranspMSparse(const TMatrixDSparse *a,const TMatrixDSparse *b) const; // multiply transposed sparse and sparse matrix
157  (const TMatrixDSparse *m1,const TMatrixDSparse *m2,
158  const TMatrixTBase<Double_t> *v) const; // calculate M_ij = sum_k [m1_ik*m2_jk*v[k] ]. the pointer v may be zero (means no scaling).
159  TMatrixDSparse *InvertMSparseSymmPos(const TMatrixDSparse *A,Int_t *rank) const; // invert symmetric (semi-)positive sparse matrix
160  void AddMSparse(TMatrixDSparse *dest,Double_t f,const TMatrixDSparse *src) const; // replacement for dest += f*src
161  TMatrixDSparse *CreateSparseMatrix(Int_t nrow,Int_t ncol,Int_t nele,Int_t *row,Int_t *col,Double_t *data) const; // create a TMatrixDSparse from an array
162  inline Int_t GetNx(void) const {
163  return fA->GetNcols();
164  } // number of non-zero output bins
165  inline Int_t GetNy(void) const {
166  return fA->GetNrows();
167  } // number of input bins
168  void ErrorMatrixToHist(TH2 *ematrix,const TMatrixDSparse *emat,const Int_t *binMap,Bool_t doClear) const; // return an error matrix as histogram
169  Double_t GetRhoIFromMatrix(TH1 *rhoi,const TMatrixDSparse *eOrig,const Int_t *binMap,TH2 *invEmat) const; // return global correlation coefficients
170  inline const TMatrixDSparse *GetDXDY(void) const { return fDXDY; } // access derivative dx/dy
171  inline const TMatrixDSparse *GetDXDAM(int i) const { return fDXDAM[i]; } // access matrix parts of the derivative dx/dA
172  inline const TMatrixDSparse *GetDXDAZ(int i) const { return fDXDAZ[i]; } // access vector parts of the derivative dx/dA
173  inline const TMatrixDSparse *GetDXDtauSquared(void) const { return fDXDtauSquared; } // get derivative dx/dtauSquared
174  inline const TMatrixDSparse *GetAx(void) const { return fAx; } // get vector Ax
175  inline const TMatrixDSparse *GetEinv(void) const { return fEinv; } // get matrix E^-1
176  inline const TMatrixDSparse *GetE(void) const { return fE; } // get matrix E
177  inline const TMatrixDSparse *GetVxx(void) const { return fVxx; } // get covariance matrix of x
178  inline const TMatrixDSparse *GetVxxInv(void) const { return fVxxInv; } // get inverse of covariance matrix of x
179  inline const TMatrixDSparse *GetVyyInv(void) const { return fVyyInv; } // get inverse of covariance matrix of y
180  inline const TMatrixD *GetX(void) const { return fX; } // get result vector x
181  inline Int_t GetRowFromBin(int ix) const { return fHistToX[ix]; } // convert histogram bin number to matrix row
182  inline Int_t GetBinFromRow(int ix) const { return fXToHist[ix]; } // convert matrix row to histogram bin number
183  static void DeleteMatrix(TMatrixD **m); // delete and invalidate pointer
184  static void DeleteMatrix(TMatrixDSparse **m); // delete and invalidate pointer
185  Bool_t AddRegularisationCondition(Int_t i0,Double_t f0,Int_t i1=-1,Double_t f1=0.,Int_t i2=-1,Double_t f2=0.); // add regularisation condition for a triplet of output bins
186  Bool_t AddRegularisationCondition(Int_t nEle,const Int_t *indices,const Double_t *rowData); // add a regularisation condition
187 public:
188  enum EHistMap { // mapping between unfolding matrix and TH2 axes
189  kHistMapOutputHoriz = 0, // map unfolding output to x-axis of TH2 matrix
190  kHistMapOutputVert = 1 // map unfolding output to y-axis of TH2 matrix
191  };
192 
193  TUnfold(const TH2 *hist_A, EHistMap histmap,
194  ERegMode regmode = kRegModeSize,
195  EConstraint constraint=kEConstraintArea); // constructor
196  virtual ~TUnfold(void); // delete data members
197  static const char*GetTUnfoldVersion(void);
198  void SetBias(const TH1 *bias); // set alternative bias
199  void SetConstraint(EConstraint constraint); // set type of constraint for the next unfolding
200  Int_t RegularizeSize(int bin, Double_t scale = 1.0); // regularise the size of one output bin
201  Int_t RegularizeDerivative(int left_bin, int right_bin, Double_t scale = 1.0); // regularize difference of two output bins (1st derivative)
202  Int_t RegularizeCurvature(int left_bin, int center_bin, int right_bin, Double_t scale_left = 1.0, Double_t scale_right = 1.0); // regularize curvature of three output bins (2nd derivative)
203  Int_t RegularizeBins(int start, int step, int nbin, ERegMode regmode); // regularize a 1-dimensional curve
204  Int_t RegularizeBins2D(int start_bin, int step1, int nbin1, int step2, int nbin2, ERegMode regmode); // regularize a 2-dimensional grid
206  const TH1 *hist_y, Double_t scaleBias=0.0); // do the unfolding
207  virtual Int_t SetInput(const TH1 *hist_y, Double_t scaleBias=0.0,Double_t oneOverZeroError=0.0,const TH2 *hist_vyy=0,const TH2 *hist_vyy_inv=0); // define input distribution
208  virtual Double_t DoUnfold(Double_t tau); // Unfold with given choice of tau
209  virtual Int_t ScanLcurve(Int_t nPoint,Double_t tauMin,
210  Double_t tauMax,TGraph **lCurve,
211  TSpline **logTauX=0,TSpline **logTauY=0); // scan the L curve using successive calls to DoUnfold(Double_t) at various tau
212  void GetProbabilityMatrix(TH2 *A,EHistMap histmap) const; // get the matrix A of probabilities
213  void GetNormalisationVector(TH1 *s,const Int_t *binMap=0) const; // get the vector of normalisation factors, equivalent to the initial bias vector
214 
215  void GetOutput(TH1 *output,const Int_t *binMap=0) const; // get output distribution, arbitrary bin mapping
216 
217  void GetBias(TH1 *bias,const Int_t *binMap=0) const; // get bias (includind biasScale)
218 
219  void GetFoldedOutput(TH1 *folded,const Int_t *binMap=0) const; // get unfolding result folded back through the matrix
220 
221  void GetInput(TH1 *inputData,const Int_t *binMap=0) const; // get input data
222 
223  void GetRhoIJ(TH2 *rhoij,const Int_t *binMap=0) const; // get correlation coefficients, arbitrary bin mapping
224 
225  void GetEmatrix(TH2 *ematrix,const Int_t *binMap=0) const; // get error matrix, arbitrary bin mapping
226 
227  Double_t GetRhoI(TH1 *rhoi,const Int_t *binMap=0,TH2 *invEmat=0) const; // get global correlation coefficients, arbitrary bin mapping
228 
229  void GetLsquared(TH2 *lsquared) const; // get regularisation conditions squared
230 
231  inline Int_t GetNr(void) const { return fL->GetNrows(); } // number of regularisation conditions
232  void GetL(TH2 *l) const; // get matrix of regularisation conditions
233 
234  void GetInputInverseEmatrix(TH2 *ematrix); // get input data inverse of error matrix
235 
236  Double_t GetTau(void) const; // get regularisation parameter
237  inline Double_t GetRhoMax(void) const { return fRhoMax; } // get maximum global correlation
238  inline Double_t GetRhoAvg(void) const { return fRhoAvg; } // get average global correlation
239  inline Double_t GetChi2A(void) const { return fChi2A; } // get chi**2 contribution from A
240  Double_t GetChi2L(void) const; // get chi**2 contribution from L
241  virtual Double_t GetLcurveX(void) const; // get value on x axis of L curve
242  virtual Double_t GetLcurveY(void) const; // get value on y axis of L curve
243  inline Int_t GetNdf(void) const { return fNdf; } // get number of degrees of freedom
244  Int_t GetNpar(void) const; // get number of parameters
245 
246  inline Double_t GetEpsMatrix(void) const { return fEpsMatrix; } // get accuracy for eingenvalue analysis
247  void SetEpsMatrix(Double_t eps); // set accuracy for eigenvalue analysis
248 
249  ClassDef(TUnfold, TUnfold_CLASS_VERSION) //Unfolding with support for L-curve analysis
250 };
251 
252 #endif
void GetNormalisationVector(TH1 *s, const Int_t *binMap=0) const
Definition: TUnfold.cxx:2774
void SetBias(const TH1 *bias)
Definition: TUnfold.cxx:1961
EConstraint fConstraint
Definition: TUnfold.h:125
const TMatrixDSparse * GetEinv(void) const
Definition: TUnfold.h:175
TMatrixDSparse * InvertMSparseSymmPos(const TMatrixDSparse *A, Int_t *rank) const
Definition: TUnfold.cxx:1064
static void DeleteMatrix(TMatrixD **m)
Definition: TUnfold.cxx:333
Int_t GetNdf(void) const
Definition: TUnfold.h:243
TUnfold(void)
Definition: TUnfold.cxx:372
Double_t GetRhoMax(void) const
Definition: TUnfold.h:237
virtual Int_t ScanLcurve(Int_t nPoint, Double_t tauMin, Double_t tauMax, TGraph **lCurve, TSpline **logTauX=0, TSpline **logTauY=0)
Definition: TUnfold.cxx:2424
Int_t fNdf
Definition: TUnfold.h:139
Double_t GetRhoIFromMatrix(TH1 *rhoi, const TMatrixDSparse *eOrig, const Int_t *binMap, TH2 *invEmat) const
Definition: TUnfold.cxx:3275
TArrayI fHistToX
Definition: TUnfold.h:123
Int_t GetNcols() const
Definition: TMatrixTBase.h:137
TH1 * h
Definition: legend2.C:5
Base class for spline implementation containing the Draw/Paint methods //.
Definition: TSpline.h:22
TMatrixD * fX
Definition: TUnfold.h:130
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TArc * a
Definition: textangle.C:12
TMatrixDSparse * fDXDtauSquared
Definition: TUnfold.h:142
Int_t RegularizeBins2D(int start_bin, int step1, int nbin1, int step2, int nbin2, ERegMode regmode)
Definition: TUnfold.cxx:2163
TMatrixDSparse * MultiplyMSparseMSparse(const TMatrixDSparse *a, const TMatrixDSparse *b) const
Definition: TUnfold.cxx:711
const TMatrixDSparse * GetVxxInv(void) const
Definition: TUnfold.h:178
TMatrixDSparse * MultiplyMSparseM(const TMatrixDSparse *a, const TMatrixD *b) const
Definition: TUnfold.cxx:858
TMatrixDSparse * MultiplyMSparseMSparseTranspVector(const TMatrixDSparse *m1, const TMatrixDSparse *m2, const TMatrixTBase< Double_t > *v) const
Definition: TUnfold.cxx:911
TMatrixD * fX0
Definition: TUnfold.h:119
Int_t GetBinFromRow(int ix) const
Definition: TUnfold.h:182
void GetInputInverseEmatrix(TH2 *ematrix)
Definition: TUnfold.cxx:2917
TMatrixDSparse * CreateSparseMatrix(Int_t nrow, Int_t ncol, Int_t nele, Int_t *row, Int_t *col, Double_t *data) const
Definition: TUnfold.cxx:698
TMatrixDSparse * fDXDAZ[2]
Definition: TUnfold.h:141
static double A[]
Array of integers (32 bits per element).
Definition: TArrayI.h:29
TMatrixT.
Definition: TMatrixDfwd.h:24
TMatrixDSparse * fL
Definition: TUnfold.h:116
Double_t GetRhoI(TH1 *rhoi, const Int_t *binMap=0, TH2 *invEmat=0) const
Definition: TUnfold.cxx:3216
const TMatrixDSparse * GetDXDY(void) const
Definition: TUnfold.h:170
Bool_t AddRegularisationCondition(Int_t i0, Double_t f0, Int_t i1=-1, Double_t f1=0., Int_t i2=-1, Double_t f2=0.)
Definition: TUnfold.cxx:1973
Double_t x[n]
Definition: legend1.C:17
ERegMode fRegMode
Definition: TUnfold.h:126
#define ClassDef(name, id)
Definition: Rtypes.h:254
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t tau
Definition: TRolke.cxx:630
const TMatrixD * GetX(void) const
Definition: TUnfold.h:180
TMatrixDSparse * fDXDAM[2]
Definition: TUnfold.h:140
TArrayD fSumOverY
Definition: TUnfold.h:124
EHistMap
Definition: TUnfold.h:188
EConstraint
Definition: TUnfold.h:103
virtual Double_t GetLcurveY(void) const
Definition: TUnfold.cxx:3027
const TMatrixDSparse * GetVxx(void) const
Definition: TUnfold.h:177
TMatrixDSparse * MultiplyMSparseTranspMSparse(const TMatrixDSparse *a, const TMatrixDSparse *b) const
Definition: TUnfold.cxx:780
Int_t RegularizeCurvature(int left_bin, int center_bin, int right_bin, Double_t scale_left=1.0, Double_t scale_right=1.0)
Definition: TUnfold.cxx:2099
TArrayI fXToHist
Definition: TUnfold.h:122
const TMatrixDSparse * GetDXDAM(int i) const
Definition: TUnfold.h:171
Double_t fChi2A
Definition: TUnfold.h:135
void SetEpsMatrix(Double_t eps)
Definition: TUnfold.cxx:3418
Int_t GetRowFromBin(int ix) const
Definition: TUnfold.h:181
ERegMode
Definition: TUnfold.h:107
const TMatrixDSparse * GetDXDtauSquared(void) const
Definition: TUnfold.h:173
TMatrixDSparse * fVxxInv
Definition: TUnfold.h:133
void GetBias(TH1 *bias, const Int_t *binMap=0) const
Definition: TUnfold.cxx:2794
Double_t fRhoMax
Definition: TUnfold.h:137
TMatrixDSparse * fAx
Definition: TUnfold.h:134
virtual Int_t SetInput(const TH1 *hist_y, Double_t scaleBias=0.0, Double_t oneOverZeroError=0.0, const TH2 *hist_vyy=0, const TH2 *hist_vyy_inv=0)
Definition: TUnfold.cxx:2208
TMatrixDSparse * fVyyInv
Definition: TUnfold.h:131
virtual TString GetOutputBinName(Int_t iBinX) const
Definition: TUnfold.cxx:1737
virtual Double_t DoUnfold(void)
Definition: TUnfold.cxx:378
TMatrixDSparse * fDXDY
Definition: TUnfold.h:143
Service class for 2-Dim histogram classes.
Definition: TH2.h:36
SVector< double, 2 > v
Definition: Dict.h:5
void GetLsquared(TH2 *lsquared) const
Definition: TUnfold.cxx:2958
TMatrixTSparse.
Double_t fBiasScale
Definition: TUnfold.h:121
void ClearHistogram(TH1 *h, Double_t x=0.) const
Definition: TUnfold.cxx:3394
const TMatrixDSparse * GetVyyInv(void) const
Definition: TUnfold.h:179
virtual Double_t GetLcurveX(void) const
Definition: TUnfold.cxx:3021
TMarker * m
Definition: textangle.C:8
void InitTUnfold(void)
Definition: TUnfold.cxx:295
static const char * GetTUnfoldVersion(void)
Definition: TUnfold.cxx:289
TLine * l
Definition: textangle.C:4
virtual ~TUnfold(void)
Definition: TUnfold.cxx:1948
TMatrixD * fY
Definition: TUnfold.h:118
Double_t fTauSquared
Definition: TUnfold.h:120
Linear Algebra Package.
TMatrixDSparse * fVyy
Definition: TUnfold.h:117
Int_t GetNrows() const
Definition: TMatrixTBase.h:134
Int_t GetNx(void) const
Definition: TUnfold.h:162
Int_t GetNr(void) const
Definition: TUnfold.h:231
double f(double x)
double Double_t
Definition: RtypesCore.h:55
TMatrixDSparse * fEinv
Definition: TUnfold.h:144
virtual void ClearResults(void)
Definition: TUnfold.cxx:345
void GetProbabilityMatrix(TH2 *A, EHistMap histmap) const
Definition: TUnfold.cxx:2863
Double_t fRhoAvg
Definition: TUnfold.h:138
void SetConstraint(EConstraint constraint)
Definition: TUnfold.cxx:2995
Double_t fLXsquared
Definition: TUnfold.h:136
void GetFoldedOutput(TH1 *folded, const Int_t *binMap=0) const
Definition: TUnfold.cxx:2815
const TMatrixDSparse * GetDXDAZ(int i) const
Definition: TUnfold.h:172
const TMatrixDSparse * GetAx(void) const
Definition: TUnfold.h:174
The TH1 histogram class.
Definition: TH1.h:80
void GetInput(TH1 *inputData, const Int_t *binMap=0) const
Definition: TUnfold.cxx:2884
Int_t RegularizeBins(int start, int step, int nbin, ERegMode regmode)
Definition: TUnfold.cxx:2123
Array of doubles (64 bits per element).
Definition: TArrayD.h:29
#define TUnfold_CLASS_VERSION
Definition: TUnfold.h:96
Mother of all ROOT objects.
Definition: TObject.h:37
TMatrixDSparse * fA
Definition: TUnfold.h:115
void GetRhoIJ(TH2 *rhoij, const Int_t *binMap=0) const
Definition: TUnfold.cxx:3188
Int_t fIgnoredBins
Definition: TUnfold.h:128
Int_t RegularizeDerivative(int left_bin, int right_bin, Double_t scale=1.0)
Definition: TUnfold.cxx:2083
TUnfold is used to decompose a measurement y into several sources x given the measurement uncertainti...
Definition: TUnfold.h:99
double f2(const double *x)
#define dest(otri, vertexptr)
Definition: triangle.c:1040
Double_t fEpsMatrix
Definition: TUnfold.h:129
void GetOutput(TH1 *output, const Int_t *binMap=0) const
Definition: TUnfold.cxx:3033
TMatrixDSparse * fE
Definition: TUnfold.h:145
A Graph is a graphics object made of two arrays X and Y with npoints each.
Definition: TGraph.h:53
TMatrixDSparse * fVxx
Definition: TUnfold.h:132
Double_t GetRhoAvg(void) const
Definition: TUnfold.h:238
void ErrorMatrixToHist(TH2 *ematrix, const TMatrixDSparse *emat, const Int_t *binMap, Bool_t doClear) const
Definition: TUnfold.cxx:3109
TF1 * f1
Definition: legend1.C:11
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
Int_t GetNy(void) const
Definition: TUnfold.h:165
void AddMSparse(TMatrixDSparse *dest, Double_t f, const TMatrixDSparse *src) const
Definition: TUnfold.cxx:1001
Double_t GetChi2L(void) const
Definition: TUnfold.cxx:3009
void GetL(TH2 *l) const
Definition: TUnfold.cxx:2977
Int_t RegularizeSize(int bin, Double_t scale=1.0)
Definition: TUnfold.cxx:2069
Int_t GetNpar(void) const
Definition: TUnfold.cxx:3015
Double_t GetChi2A(void) const
Definition: TUnfold.h:239
void GetEmatrix(TH2 *ematrix, const Int_t *binMap=0) const
Definition: TUnfold.cxx:3175
Double_t GetTau(void) const
Definition: TUnfold.cxx:3003
Double_t GetEpsMatrix(void) const
Definition: TUnfold.h:246
const TMatrixDSparse * GetE(void) const
Definition: TUnfold.h:176