#ifndef ROOT_TUnfoldSys
#define ROOT_TUnfoldSys
#include <TUnfold.h>
class TMap;
class TUnfoldSys : public TUnfold {
private:
void InitTUnfoldSys(void);
protected:
TMatrixDSparse * fDA2;
TMatrixD* fDAcol;
TMatrixD* fAoutside;
TMap *fSysIn;
TMatrixDSparse *fESparse;
TMatrixDSparse *fVYAx;
TMatrixDSparse *fEAtV;
TMatrixDSparse *fAE;
TMatrixDSparse *fAEAtV_one;
TMatrixD *fErrorUncorrX;
TMatrixD *fErrorUncorrAx;
TMap *fErrorCorrX;
TMap *fErrorCorrAx;
protected:
TUnfoldSys(void);
virtual void ClearResults(void);
virtual void PrepareSysError(void);
virtual TMatrixD *PrepareUncorrEmat(TMatrixDSparse const *m1,TMatrixDSparse const *m2);
virtual TMatrixD *PrepareCorrEmat(TMatrixDSparse const *m1,TMatrixDSparse const *m2,TMatrixDSparse const *dsys);
public:
enum ESysErrMode {
kSysErrModeMatrix=0,
kSysErrModeShift=1,
kSysErrModeRelative=2
};
TUnfoldSys(TH2 const *hist_A, EHistMap histmap, ERegMode regmode = kRegModeSize);
virtual ~ TUnfoldSys(void);
void AddSysError(TH2 const *sysError,char const *name, EHistMap histmap,
ESysErrMode mode);
void GetEmatrixSysUncorr(TH2 *ematrix,Int_t const *binMap=0,Bool_t clearEmat=kTRUE);
void GetEmatrixSysSource(TH2 *ematrix,char const *source,
Int_t const *binMap=0,Bool_t clearEmat=kTRUE);
void GetEmatrixSysTotal(TH2 *ematrix,Int_t const *binMap=0,Bool_t clearEmat=kTRUE);
void GetEmatrixTotal(TH2 *ematrix,Int_t const *binMap=0);
Double_t GetChi2Sys(void);
ClassDef(TUnfoldSys, 0)
};
#endif