ROOT logo
ROOT » HIST » HIST » TUnfoldSys

class TUnfoldSys: public TUnfold


 TUnfoldSys adds error propagation of systematic errors to TUnfold

 Example:
    TH2D *histA,*histAsys1,*histAsys2;
    TH1D *data;
  assume the above histograms are filled:
      histA: migration matrix from generator (x-axis) to detector (y-axis)
           the errors of histA are the uncorrelated systematic errors
      histAsys1: alternative migration matrix, when systematic #1 is applied
      histAsys1: alternative migration matrix, when systematic #2 is applied

  set up the unfolding:

    TUnfoldSys unfold(histA,TUnfold::kHistMapOutputVert);
    unfold.SetInput(input);
    unfold.AddSysError(histAsys1,"syserror1",TUnfold::kHistMapOutputVert,
                       TUnfoldSys::kSysErrModeMatrix);
    unfold.AddSysError(histAsys2,"syserror2",TUnfold::kHistMapOutputVert,
                       TUnfoldSys::kSysErrModeMatrix);

  it is possible to specify the systematic errors as
      TUnfoldSys::kSysErrModeMatrix:
          alternative migration matrix
      TUnfoldSys::kSysErrModeAbsolute:
          matrix of absolute shifts wrt the original matrix
      TUnfoldSys::kSysErrModeMatrix:
          matrix of relative errors wrt the original matrix

  run the unfolding: see description of class TUnfold
    unfold.ScanLcurve( ...)

 retrieve the output
    unfold.GetOutput(output);     unfolding output with statistical errors
    unfold.GetEmatrix(stat_error);             error matrix for stat.errors
    unfold.GetEmatrixSysUncorr(uncorr_sys);    error matrix for uncorr.syst
    unfold.GetEmatrixSysSource(sys1,"syserror1"); error matrix from source 1
    unfold.GetEmatrixSysSource(sys2,"syserror2"); error matrix from source 2
    unfold.GetEmatrixSysTotal(sys_total); error matrix for total sys.errors
                                          (= uncorr_sys+sys1+sys2)
    unfold.GetEmatrixTotal(err_total); error matrix with all errros added
                                       (= sys_total+stat_error)
    Double_t chi_2=GetChi2Sys();  chi**2 including systematic errors
                                  compare to GetChi2A(), stat errors only


Function Members (Methods)

public:
TUnfoldSys(const TUnfoldSys&)
TUnfoldSys(TH2 *const hist_A, TUnfold::EHistMap histmap, TUnfold::ERegMode regmode = kRegModeSize)
virtual~TUnfoldSys()
voidTObject::AbstractMethod(const char* method) const
voidAddSysError(TH2 *const sysError, char *const name, TUnfold::EHistMap histmap, TUnfoldSys::ESysErrMode mode)
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
virtual voidTObject::Delete(Option_t* option = "")MENU
static voidTUnfold::DeleteMatrix(TMatrixD** m)
static voidTUnfold::DeleteMatrix(TMatrixDSparse** m)
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual Double_tTUnfold::DoUnfold(Double_t const& tau)
Double_tTUnfold::DoUnfold(Double_t const& tau, TH1 *const hist_y, Double_t const& scaleBias = 0.0)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
TH1D*TUnfold::GetBias(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
const Double_t&TUnfold::GetChi2A() const
const Double_t&TUnfold::GetChi2L() const
Double_tGetChi2Sys()
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
voidTUnfold::GetEmatrix(TH2* ematrix, Int_t *const binMap = 0) const
TH2D*TUnfold::GetEmatrix(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
voidGetEmatrixSysSource(TH2* ematrix, char *const source, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
voidGetEmatrixSysTotal(TH2* ematrix, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
voidGetEmatrixSysUncorr(TH2* ematrix, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
voidGetEmatrixTotal(TH2* ematrix, Int_t *const binMap = 0)
TH1D*TUnfold::GetFoldedOutput(char *const name, char *const title, Double_t y0 = 0.0, Double_t y1 = 0.0) const
virtual const char*TObject::GetIconName() const
TH1D*TUnfold::GetInput(char *const name, char *const title, Double_t y0 = 0.0, Double_t y1 = 0.0) const
Double_tTUnfold::GetLcurveX() const
Double_tTUnfold::GetLcurveY() const
TH2D*TUnfold::GetLsquared(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
virtual const char*TObject::GetName() const
Int_tTUnfold::GetNdf() const
Int_tTUnfold::GetNpar() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
voidTUnfold::GetOutput(TH1* output, Int_t *const binMap = 0) const
TH1D*TUnfold::GetOutput(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
const Double_t&TUnfold::GetRhoAvg() const
Double_tTUnfold::GetRhoI(TH1* rhoi, TH2* ematrixinv = 0, Int_t *const binMap = 0) const
TH1D*TUnfold::GetRhoI(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
voidTUnfold::GetRhoIJ(TH2* rhoij, Int_t *const binMap = 0) const
TH2D*TUnfold::GetRhoIJ(char *const name, char *const title, Double_t x0 = 0.0, Double_t x1 = 0.0) const
const Double_t&TUnfold::GetRhoMax() const
const Double_t&TUnfold::GetTau() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TUnfoldSys&operator=(const TUnfoldSys&)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTObject::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
Int_tTUnfold::RegularizeBins(int start, int step, int nbin, TUnfold::ERegMode regmode)
Int_tTUnfold::RegularizeBins2D(int start_bin, int step1, int nbin1, int step2, int nbin2, TUnfold::ERegMode regmode)
Int_tTUnfold::RegularizeCurvature(int left_bin, int center_bin, int right_bin, Double_t const& scale_left = 1.0, Double_t const& scale_right = 1.0)
Int_tTUnfold::RegularizeDerivative(int left_bin, int right_bin, Double_t const& scale = 1.0)
Int_tTUnfold::RegularizeSize(int bin, Double_t const& scale = 1.0)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
virtual Int_tTUnfold::ScanLcurve(Int_t nPoint, Double_t const& tauMin, Double_t const& tauMax, TGraph** lCurve, TSpline** logTauX = 0, TSpline** logTauY = 0)
voidTUnfold::SetBias(TH1 *const bias)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
Int_tTUnfold::SetInput(TH1 *const hist_y, Double_t const& scaleBias = 0.0, Double_t oneOverZeroError = 0.0)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
TUnfoldSys()
static voidTUnfold::AddMSparse(TMatrixDSparse& dest, Double_t const& f, TMatrixDSparse const& src)
virtual voidTUnfold::CalculateChi2Rho()
virtual voidClearResults()
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual Double_tTUnfold::DoUnfold()
voidTUnfold::ErrorMatrixToHist(TH2* ematrix, TMatrixD *const emat, Int_t *const binMap, Bool_t doClear) const
Int_tTUnfold::GetNx() const
Int_tTUnfold::GetNy() const
static Bool_tTUnfold::InvertMConditioned(TMatrixD& A)
static TMatrixD*TUnfold::InvertMSparse(TMatrixDSparse const& A)
voidTObject::MakeZombie()
static TMatrixDSparse*TUnfold::MultiplyMSparseM(TMatrixDSparse const& a, TMatrixD const& b)
static TMatrixDSparse*TUnfold::MultiplyMSparseMSparse(TMatrixDSparse const& a, TMatrixDSparse const& b)
static TMatrixDSparse*TUnfold::MultiplyMSparseTranspMSparse(TMatrixDSparse const& a, TMatrixDSparse const& b)
static Double_tTUnfold::MultiplyVecMSparseVec(TMatrixDSparse const& a, TMatrixD const& v)
virtual TMatrixD*PrepareCorrEmat(TMatrixDSparse *const m1, TMatrixDSparse *const m2, TMatrixDSparse *const dsys)
virtual voidPrepareSysError()
virtual TMatrixD*PrepareUncorrEmat(TMatrixDSparse *const m1, TMatrixDSparse *const m2)
private:
voidInitTUnfoldSys()

Data Members

public:
enum ESysErrMode { kSysErrModeMatrix
kSysErrModeShift
kSysErrModeRelative
};
enum TUnfold::EHistMap { kHistMapOutputHoriz
kHistMapOutputVert
};
enum TUnfold::ERegMode { kRegModeNone
kRegModeSize
kRegModeDerivative
kRegModeCurvature
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
protected:
TMatrixDSparse*TUnfold::fAInput: matrix
TMatrixDSparse*fAEResult: AE for chi**2
TMatrixDSparse*fAEAtV_oneResult: AEA#V-1 for chi**2
TMatrixD*fAoutsideInput: underflow/overflow bins
TMatrixDSparse*TUnfold::fAtVResult: fA# times fV
TMatrixDSparse*TUnfold::fAxResult: Ax
Double_tTUnfold::fBiasScaleInput: scale factor for the bias
Double_tTUnfold::fChi2AResult: chi**2 contribution from (y-Ax)V(y-Ax)
Double_tTUnfold::fChi2LResult: chi**2 contribution from tau(x-s*x0)Lsquared(x-s*x0)
TMatrixDSparse*fDA2Input: uncorrelated errors on fA (squared)
TMatrixD*fDAcolInput: normalized column errors on fA
TMatrixD*TUnfold::fEResult: error matrix
TMatrixDSparse*fEAtVResult: EA#V for syst.errors
TMatrixDSparse*fESparseResult: sparse version of fE
TMatrixDSparse*TUnfold::fEinvResult: inverse error matrix
TMap*fErrorCorrAxResult: syst.error from fSysIn
TMap*fErrorCorrXResult: syst.error from fSysIn
TMatrixD*fErrorUncorrAxResult: syst.error from fDA2 on fAx
TMatrixD*fErrorUncorrXResult: syst.error from fDA2 on fX
TArrayITUnfold::fHistToXInput: histogram bins -> matrix indices
TMatrixDSparse*TUnfold::fLsquaredInput: regularisation conditions squared
Int_tTUnfold::fNdfResult: number of degrees of freedom
Double_tTUnfold::fRhoAvgResult: average global correlation
Double_tTUnfold::fRhoMaxResult: maximum global correlation
TArrayDTUnfold::fSumOverYInput: sum of all columns
TMap*fSysInInput: correlated errors
Double_tTUnfold::fTauInput: regularisation parameter
TMatrixDSparse*TUnfold::fVInput: covariance matrix for y
TMatrixDSparse*fVYAxResult: V(y-Ax) for syst.errors
TMatrixD*TUnfold::fXResult: x
TMatrixD*TUnfold::fX0Input: x0
TArrayITUnfold::fXToHistInput: matrix indices -> histogram bins
TMatrixD*TUnfold::fYInput: y

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TUnfoldSys(const TUnfoldSys& )
 set all pointers to zero
TUnfoldSys(TH2 *const hist_A, TUnfold::EHistMap histmap, TUnfold::ERegMode regmode = kRegModeSize)
 arguments:
    hist_A:  matrix that describes the migrations
    histmap: mapping of the histogram axes to the unfolding output
    regmode: global regularisation mode
 data members initialized to something different from zero:
    fDA2, fDAcol
void AddSysError(TH2 *const sysError, char *const name, TUnfold::EHistMap histmap, TUnfoldSys::ESysErrMode mode)
 add a correlated error source
    sysError: alternative matrix or matrix of absolute/relative shifts
    name: name of the error source
    histmap: mapping of the histogram axes to the unfolding output
    mode: format of the error source
void InitTUnfoldSys(void)
 initialize pointers and TMaps
~TUnfoldSys(void)
 delete all data members
void ClearResults(void)
 clear all data members which depend on the unfolding results
void PrepareSysError(void)
 calculations required for syst.error
 data members modified
    fVYAx, fESparse, fEAtV, fAE, fAEAtV_one,
    fErrorUncorrX, fErrorUncorrAx, fErrorCorrX, fErrorCorrAx
void GetEmatrixSysUncorr(TH2* ematrix, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
 get output error contribution from statistical fluctuations in A
   ematrix: output error matrix histogram
   binMap: see method GetEmatrix()
   clearEmat: set kTRUE to clear the histogram prior to adding the errors
 data members modified:
   fVYAx, fESparse, fEAtV, fErrorAStat
TMatrixD * PrepareUncorrEmat(TMatrixDSparse *const m1, TMatrixDSparse *const m2)
 prepare matrix of uncorrelated systematic errors
   m1,m2 : coefficients for propagating the errors
 the result depends on the errors
   fDA2, fDA2col
TMatrixD * PrepareCorrEmat(TMatrixDSparse *const m1, TMatrixDSparse *const m2, TMatrixDSparse *const dsys)
 prepare error matrix of correlated systematic shifts
   m1,m2 : coefficients for propagating the errors
   dsys : matrix of correlated shifts from this source
void GetEmatrixSysSource(TH2* ematrix, char *const source, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
 calculate systematic error matrix from a given source
    ematrix: output
    source: name of the error source
    binMap: see method GetEmatrix()
    clearEmat: set kTRUE to clear the histogram prior to adding the errors
void GetEmatrixSysTotal(TH2* ematrix, Int_t *const binMap = 0, Bool_t clearEmat = kTRUE)
 calculate total systematic error matrix
    ematrix: output
    binMap: see method GetEmatrix()
    clearEmat: set kTRUE to clear the histogram prior to adding the errors
void GetEmatrixTotal(TH2* ematrix, Int_t *const binMap = 0)
 get total error including statistical error
    ematrix: output
    binMap: see method GetEmatrix()
Double_t GetChi2Sys(void)
 calculate total chi**2 including systematic errors
TUnfoldSys(const TUnfoldSys& )