159   : 
TUnfold(hist_A,histmap,regmode,constraint)
 
  182      for (
Int_t ibiny = 0; ibiny <= 
GetNy()+1; ibiny++) {
 
  192         (*fDAinColRelSq)(ix,0) += normerr_sq;
 
  201         } 
else if(ibiny==
GetNy()+1) {
 
  210            rowDAinRelSq[da_nonzero]=ibiny-1;
 
  211            colDAinRelSq[da_nonzero] = ix;
 
  212            dataDAinRelSq[da_nonzero] = normerr_sq;
 
  213            if(dataDAinRelSq[da_nonzero]>0.0) da_nonzero++;
 
  219                                      rowDAinRelSq,colDAinRelSq,dataDAinRelSq);
 
  223   delete[] rowDAinRelSq;
 
  224   delete[] colDAinRelSq;
 
  225   delete[] dataDAinRelSq;
 
  252      Error(
"AddSysError",
"Source %s given twice, ignoring 2nd call.\n",
name);
 
  268         for(
Int_t loop=0;loop<2;loop++) {
 
  269            for (
Int_t ibiny = 0; ibiny <= 
GetNy()+1; ibiny++) {
 
  280                  if((ibiny>0)&&(ibiny<=
GetNy())) {
 
  282                  } 
else if(ibiny==0) {
 
  283                     z0=(*fAoutside)(ix,0);
 
  285                     z0=(*fAoutside)(ix,1);
 
  297                  if((ibiny>0)&&(ibiny<=
GetNy())) {
 
  303                        data[nmax]=z/
sum-aCopy(ibiny-1,ix);
 
  307                     if(
data[nmax] != 0.0) nmax++;
 
  315               "source %s has no influence and has not been added.\n",
name);
 
  318                                                 nmax,rows,cols,
data);
 
  348            Warning(
"DoBackgroundSubtraction",
 
  349                    "inverse error matrix from user input," 
  350                    " not corrected for background");
 
  358            for(key=bgrPtr.
Next();key;key=bgrPtr.
Next()) {
 
  361                  (*fY)(i,0) -= (*bgr)(i,0);
 
  373         for(
Int_t i=0;i<ny;i++) {
 
  376         for(
Int_t i=0;i<ny;i++) {
 
  377            for(
Int_t k=vyydata_rows[i];k<vyydata_rows[i+1];k++) {
 
  378               if(vyydata_data[k]>0.0) {
 
  380                  usedBin[vyydata_cols[k]]++;
 
  387            for(key=bgrErrUncorrSqPtr.
Next();key;
 
  388                key=bgrErrUncorrSqPtr.
Next()) {
 
  390               for(
Int_t yi=0;yi<ny;yi++) {
 
  391                  if(!usedBin[yi]) 
continue;
 
  392                  vyy(yi,yi) +=(*bgrerruncorrSquared)(yi,0);
 
  399            for(key=bgrErrScalePtr.
Next();key;key=bgrErrScalePtr.
Next()) {
 
  401               for(
Int_t yi=0;yi<ny;yi++) {
 
  402                  if(!usedBin[yi]) 
continue;
 
  403                  for(
Int_t yj=0;yj<ny;yj++) {
 
  404                     if(!usedBin[yj]) 
continue;
 
  405                     vyy(yi,yj) +=(*bgrerrscale)(yi,0)* (*bgrerrscale)(yj,0);
 
  418      Fatal(
"DoBackgroundSubtraction",
"No input vector defined");
 
  446                              const TH2 *hist_vyy_inv)
 
  488      Error(
"SubtractBackground",
"Source %s given twice, ignoring 2nd call.\n",
 
  496         (*bgrErrUncSq)(row,0) =
 
  498         (*bgrErrCorr)(row,0) = scale_error*bgr->
GetBinContent(row+1);
 
  506         Info(
"SubtractBackground",
 
  507              "Background subtraction prior to setting input data");
 
  530(
TH1 *bgrHist,
const char *bgrSource,
const Int_t *binMap,
 
  540      for(key=bgrPtr.
Next();key;key=bgrPtr.
Next()) {
 
  542         if(bgrSource && bgrName.
CompareTo(bgrSource)) 
continue;
 
  545            Int_t destBin=binMap[i];
 
  552   if(includeError &1) {
 
  554      for(key=bgrErrUncorrSqPtr.
Next();key;key=bgrErrUncorrSqPtr.
Next()) {
 
  556         if(bgrSource && bgrName.
CompareTo(bgrSource)) 
continue;
 
  560            Int_t destBin=binMap[i];
 
  563                ((*bgrerruncorrSquared)(i,0)+
 
  568   if(includeError & 2) {
 
  570      for(key=bgrErrScalePtr.
Next();key;key=bgrErrScalePtr.
Next()) {
 
  572         if(bgrSource && bgrName.
CompareTo(bgrSource)) 
continue;
 
  575            Int_t destBin=binMap[i];
 
  576            bgrHist->
SetBinError(destBin,hypot((*bgrerrscale)(i,0),
 
 1000                                   const Int_t *binMap)
 
 1027(
TH1 *hist_delta,
const char *source,
const Int_t *binMap)
 
 1203(
TH2 *ematrix,
const char *source,
const Int_t *binMap,
Bool_t clearEmat)
 
 1263   for(key=sysErrPtr.
Next();key;key=sysErrPtr.
Next()) {
 
 1289   for(key=sysErrPtr.
Next();key;key=sysErrPtr.
Next()) {
 
 1325   for(key=sysErrPtr.
Next();key;key=sysErrPtr.
Next()) {
 
 1359      if(vdy_rows[i+1]>vdy_rows[i]) {
 
 1360         r += vdy_data[vdy_rows[i]] * dy(i,0);
 
 1413   if((
m->GetNcols() != 
v->GetNrows())||(
v->GetNcols()!=1)) {
 
 1414      Fatal(
"ScaleColumnsByVector error",
 
 1415            "matrix cols/vector rows %d!=%d OR vector cols %d !=1\n",
 
 1416            m->GetNcols(),
v->GetNrows(),
v->GetNcols());
 
 1418   const Int_t *rows_m=
m->GetRowIndexArray();
 
 1419   const Int_t *cols_m=
m->GetColIndexArray();
 
 1425      for(
Int_t i=0;i<
m->GetNrows();i++) {
 
 1426         for(
Int_t index_m=rows_m[i];index_m<rows_m[i+1];index_m++) {
 
 1427            Int_t j=cols_m[index_m];
 
 1428            Int_t index_v=rows_v[j];
 
 1429            if(index_v<rows_v[j+1]) {
 
 1430               data_m[index_m] *= data_v[index_v];
 
 1432               data_m[index_m] =0.0;
 
 1437      for(
Int_t i=0;i<
m->GetNrows();i++) {
 
 1438         for(
Int_t index_m=rows_m[i];index_m<rows_m[i+1];index_m++) {
 
 1439            Int_t j=cols_m[index_m];
 
 1440            data_m[index_m] *= (*v)(j,0);
 
 1468   for(
Int_t i=0;i<nbin+2;i++) {
 
 1475      for(
Int_t i=0;i<binMapSize;i++) {
 
 1476         Int_t destBinI=binMap ? binMap[i] : i;
 
 1478         if((destBinI>=0)&&(destBinI<nbin+2)&&(srcBinI>=0)) {
 
 1480            if(
index<delta_rows[srcBinI+1]) {
 
 1481               c[destBinI]+=delta_data[
index];
 
 1486   for(
Int_t i=0;i<nbin+2;i++) {
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
 
Option_t Option_t TPoint TPoint const char mode
 
TMatrixTSparse< Double_t > TMatrixDSparse
 
TMatrixT< Double_t > TMatrixD
 
virtual Int_t GetEntries() const
 
TH1 is the base class of all histogram classes in ROOT.
 
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
 
virtual Int_t GetNbinsX() const
 
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
 
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
 
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
 
Service class for 2-D histogram classes.
 
Double_t GetBinContent(Int_t binx, Int_t biny) const override
 
TObject * Next() override
Returns the next key from a map.
 
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
 
void Add(TObject *obj) override
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
 
virtual void SetOwnerKeyValue(Bool_t ownkeys=kTRUE, Bool_t ownvals=kTRUE)
Set ownership for keys and values.
 
TObject * FindObject(const char *keyname) const override
Check if a (key,value) pair exists with keyname as name of the key.
 
void Clear(Option_t *option="") override
Remove all (key,value) pairs from the map.
 
const Int_t * GetRowIndexArray() const override
 
const Int_t * GetColIndexArray() const override
 
const Element * GetMatrixArray() const override
 
Collectable string class.
 
const TString & GetString() const
 
Mother of all ROOT objects.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
 
Class used by TMap to store (key,value) pairs.
 
A sorted doubly linked list.
 
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
 
An algorithm to unfold distributions from detector to truth level, with background subtraction and pr...
 
TMatrixD * fAoutside
Input: underflow/overflow bins.
 
TMatrixDSparse * fDAinRelSq
Input: normalized errors from input matrix.
 
TMatrixDSparse * GetSummedErrorMatrixXX(void)
Determine total error matrix on the vector x.
 
void GetEmatrixSysTau(TH2 *ematrix, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance matrix contribution from error on regularisation parameter.
 
Double_t GetChi2Sys(void)
Calculate total chi**2 including all systematic errors.
 
void GetEmatrixTotal(TH2 *ematrix, const Int_t *binMap=nullptr)
Get total error matrix, summing up all contributions.
 
void VectorMapToHist(TH1 *hist_delta, const TMatrixDSparse *delta, const Int_t *binMap)
Map delta to hist_delta, possibly summing up bins.
 
void ScaleColumnsByVector(TMatrixDSparse *m, const TMatrixTBase< Double_t > *v) const
Scale columns of a matrix by the corresponding rows of a vector.
 
void GetEmatrixSysBackgroundScale(TH2 *ematrix, const char *source, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance contribution from background normalisation uncertainty.
 
TMap * fDeltaCorrAx
Result: syst.shift from fSysIn on fAx.
 
TMatrixD * fYData
Input: fY prior to bgr subtraction.
 
void GetRhoItotal(TH1 *rhoi, const Int_t *binMap=nullptr, TH2 *invEmat=nullptr)
Get global correlatiocn coefficients, summing up all contributions.
 
void GetEmatrixFromVyy(const TMatrixDSparse *vyy, TH2 *ematrix, const Int_t *binMap, Bool_t clearEmat)
Propagate an error matrix on the input vector to the unfolding result.
 
void GetBackground(TH1 *bgr, const char *bgrSource=nullptr, const Int_t *binMap=nullptr, Int_t includeError=3, Bool_t clearHist=kTRUE) const
Get background into a histogram.
 
void InitTUnfoldSys(void)
Initialize pointers and TMaps.
 
TMatrixDSparse * fVyyData
Input: error on fY prior to bgr subtraction.
 
TMatrixDSparse * fEmatUncorrAx
Result: syst.error from fDA2 on fAx.
 
Bool_t GetDeltaSysBackgroundScale(TH1 *delta, const char *source, const Int_t *binMap=nullptr)
Correlated one-sigma shifts from background normalisation uncertainty.
 
void DoBackgroundSubtraction(void)
Perform background subtraction.
 
TMatrixDSparse * GetSummedErrorMatrixYY(void)
Determine total error matrix on the vector Ax.
 
Double_t fDtau
Input: error on tau.
 
ESysErrMode
type of matrix specified with AddSysError()
 
@ kSysErrModeRelative
matrix gives the relative shifts
 
@ kSysErrModeMatrix
matrix is an alternative to the default matrix, the errors are the difference to the original matrix
 
@ kSysErrModeShift
matrix gives the absolute shifts
 
virtual TMatrixDSparse * PrepareUncorrEmat(const TMatrixDSparse *m1, const TMatrixDSparse *m2)
Propagate uncorrelated systematic errors to a covariance matrix.
 
Bool_t GetDeltaSysTau(TH1 *delta, const Int_t *binMap=nullptr)
Correlated one-sigma shifts from shifting tau.
 
Bool_t GetDeltaSysSource(TH1 *hist_delta, const char *source, const Int_t *binMap=nullptr)
Correlated one-sigma shifts correspinding to a given systematic uncertainty.
 
void GetEmatrixInput(TH2 *ematrix, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance matrix contribution from input measurement uncertainties.
 
TMatrixDSparse * fEmatUncorrX
Result: syst.error from fDA2 on fX.
 
~TUnfoldSys(void) override
 
void SubtractBackground(const TH1 *hist_bgr, const char *name, Double_t scale=1.0, Double_t scale_error=0.0)
Specify a source of background.
 
void ClearResults(void) override
Clear all data members which depend on the unfolding results.
 
TMap * fBgrIn
Input: size of background sources.
 
TMap * fDeltaCorrX
Result: syst.shift from fSysIn on fX.
 
TSortedList * GetSysSources(void) const
Get a new list of all systematic uuncertainty sources.
 
TMatrixD * fDAinColRelSq
Input: normalized column err.sq. (inp.matr.)
 
TMatrixDSparse * fDeltaSysTau
Result: systematic shift from tau.
 
void AddSysError(const TH2 *sysError, const char *name, EHistMap histmap, ESysErrMode mode)
Specify a correlated systematic uncertainty.
 
void SetTauError(Double_t delta_tau)
Specify an uncertainty on tau.
 
TMap * fBgrErrUncorrInSq
Input: uncorr error squared from bgr sources.
 
TUnfoldSys(void)
Only for use by root streamer or derived classes.
 
virtual void PrepareSysError(void)
Matrix calculations required to propagate systematic errors.
 
Int_t SetInput(const TH1 *hist_y, Double_t scaleBias=0.0, Double_t oneOverZeroError=0.0, const TH2 *hist_vyy=nullptr, const TH2 *hist_vyy_inv=nullptr) override
Define the input data for subsequent calls to DoUnfold(Double_t).
 
void GetEmatrixSysSource(TH2 *ematrix, const char *source, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance contribution from a systematic variation of the response matrix.
 
void GetEmatrixSysBackgroundUncorr(TH2 *ematrix, const char *source, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance contribution from background uncorrelated uncertainty.
 
void GetEmatrixSysUncorr(TH2 *ematrix, const Int_t *binMap=nullptr, Bool_t clearEmat=kTRUE)
Covariance contribution from uncorrelated uncertainties of the response matrix.
 
TMap * fBgrErrScaleIn
Input: background sources correlated error.
 
TSortedList * GetBgrSources(void) const
Get a new list of all background sources.
 
virtual TMatrixDSparse * PrepareCorrEmat(const TMatrixDSparse *m1, const TMatrixDSparse *m2, const TMatrixDSparse *dsys)
Propagate correlated systematic shift to an output vector.
 
TMap * fSysIn
Input: correlated errors.
 
An algorithm to unfold distributions from detector to truth level.
 
TArrayI fHistToX
mapping of histogram bins to matrix indices
 
TMatrixDSparse * MultiplyMSparseM(const TMatrixDSparse *a, const TMatrixD *b) const
Multiply sparse matrix and a non-sparse matrix.
 
TMatrixDSparse * MultiplyMSparseTranspMSparse(const TMatrixDSparse *a, const TMatrixDSparse *b) const
Multiply a transposed Sparse matrix with another sparse matrix,.
 
TMatrixDSparse * MultiplyMSparseMSparseTranspVector(const TMatrixDSparse *m1, const TMatrixDSparse *m2, const TMatrixTBase< Double_t > *v) const
Calculate a sparse matrix product  where the diagonal matrix V is given by a vector.
 
TMatrixDSparse * CreateSparseMatrix(Int_t nrow, Int_t ncol, Int_t nele, Int_t *row, Int_t *col, Double_t *data) const
Create a sparse matrix, given the nonzero elements.
 
const TMatrixDSparse * GetDXDAM(int i) const
matrix contributions of the derivative dx/dA
 
Int_t GetNy(void) const
returns the number of measurement bins
 
const TMatrixDSparse * GetDXDtauSquared(void) const
vector of derivative dx/dtauSquared, using internal bin counting
 
static void DeleteMatrix(TMatrixD **m)
delete matrix and invalidate pointer
 
void ClearHistogram(TH1 *h, Double_t x=0.) const
Initialize bin contents and bin errors for a given histogram.
 
Int_t GetNx(void) const
returns internal number of output (truth) matrix rows
 
const TMatrixDSparse * GetDXDAZ(int i) const
vector contributions of the derivative dx/dA
 
EConstraint
type of extra constraint
 
TMatrixDSparse * fVyy
covariance matrix Vyy corresponding to y
 
const TMatrixDSparse * GetVyyInv(void) const
inverse of covariance matrix of the data y
 
TArrayD fSumOverY
truth vector calculated from the non-normalized response matrix
 
ERegMode
choice of regularisation scheme
 
void ErrorMatrixToHist(TH2 *ematrix, const TMatrixDSparse *emat, const Int_t *binMap, Bool_t doClear) const
Add up an error matrix, also respecting the bin mapping.
 
TArrayI fXToHist
mapping of matrix indices to histogram bins
 
const TMatrixDSparse * GetAx(void) const
vector of folded-back result
 
TMatrixD * fY
input (measured) data y
 
TMatrixDSparse * InvertMSparseSymmPos(const TMatrixDSparse *A, Int_t *rank) const
Get the inverse or pseudo-inverse of a positive, sparse matrix.
 
Double_t fTauSquared
regularisation parameter tau squared
 
virtual void ClearResults(void)
Reset all results.
 
void GetEmatrix(TH2 *ematrix, const Int_t *binMap=nullptr) const
Get output covariance matrix, possibly cumulated over several bins.
 
TMatrixDSparse * MultiplyMSparseMSparse(const TMatrixDSparse *a, const TMatrixDSparse *b) const
Multiply two sparse matrices.
 
EHistMap
arrangement of axes for the response matrix (TH2 histogram)
 
@ kHistMapOutputHoriz
truth level on x-axis of the response matrix
 
void AddMSparse(TMatrixDSparse *dest, Double_t f, const TMatrixDSparse *src) const
Add a sparse matrix, scaled by a factor, to another scaled matrix.
 
const TMatrixDSparse * GetVxx(void) const
covariance matrix of the result
 
Double_t GetRhoIFromMatrix(TH1 *rhoi, const TMatrixDSparse *eOrig, const Int_t *binMap, TH2 *invEmat) const
Get global correlation coefficients with arbitrary min map.
 
const TMatrixDSparse * GetDXDY(void) const
matrix of derivatives dx/dy
 
TMatrixDSparse * fA
response matrix A
 
virtual Int_t SetInput(const TH1 *hist_y, Double_t scaleBias=0.0, Double_t oneOverZeroError=0.0, const TH2 *hist_vyy=nullptr, const TH2 *hist_vyy_inv=nullptr)
Define input data for subsequent calls to DoUnfold(tau).
 
Double_t Sqrt(Double_t x)
Returns the square root of x.
 
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
 
static uint64_t sum(uint64_t i)