00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TUnfoldSys
00013 #define ROOT_TUnfoldSys
00014
00015 #include <TUnfold.h>
00016
00017 class TMap;
00018
00019 class TUnfoldSys : public TUnfold {
00020 private:
00021 void InitTUnfoldSys(void);
00022 protected:
00023 TMatrixDSparse *fDAinRelSq;
00024 TMatrixD* fDAinColRelSq;
00025 TMatrixD* fAoutside;
00026 TMap *fSysIn;
00027 TMap *fBgrIn;
00028 TMap *fBgrErrUncorrIn;
00029 TMap *fBgrErrCorrIn;
00030 Double_t fDtau;
00031 TMatrixD *fYData;
00032 TMatrixDSparse *fVyyData;
00033 TMatrixDSparse *fEmatUncorrX;
00034 TMatrixDSparse *fEmatUncorrAx;
00035 TMap *fDeltaCorrX;
00036 TMap *fDeltaCorrAx;
00037 TMatrixDSparse *fDeltaSysTau;
00038 protected:
00039 TUnfoldSys(void);
00040 virtual void ClearResults(void);
00041 virtual void PrepareSysError(void);
00042 virtual TMatrixDSparse *PrepareUncorrEmat(const TMatrixDSparse *m1,const TMatrixDSparse *m2);
00043 virtual TMatrixDSparse *PrepareCorrEmat(const TMatrixDSparse *m1,const TMatrixDSparse *m2,const TMatrixDSparse *dsys);
00044 void ScaleColumnsByVector(TMatrixDSparse *m,const TMatrixTBase<Double_t> *v) const;
00045 void VectorMapToHist(TH1 *hist_delta,const TMatrixDSparse *delta,const Int_t *binMap);
00046 void GetEmatrixFromVyy(const TMatrixDSparse *vyy,TH2 *ematrix,const Int_t *binMap,Bool_t clearEmat);
00047 void DoBackgroundSubtraction(void);
00048 public:
00049 enum ESysErrMode {
00050 kSysErrModeMatrix=0,
00051 kSysErrModeShift=1,
00052 kSysErrModeRelative=2
00053 };
00054 TUnfoldSys(const TH2 *hist_A, EHistMap histmap, ERegMode regmode = kRegModeSize,
00055 EConstraint constraint=kEConstraintNone);
00056 virtual ~ TUnfoldSys(void);
00057 void AddSysError(const TH2 *sysError,const char *name, EHistMap histmap,
00058 ESysErrMode mode);
00059 void GetDeltaSysSource(TH1 *hist_delta,const char *source,
00060 const Int_t *binMap=0);
00061 void SubtractBackground(const TH1 *hist_bgr,const char *name,
00062 Double_t scale=1.0,
00063 Double_t scale_error=0.0);
00064 virtual Int_t SetInput(const TH1 *hist_y,Double_t scaleBias=0.0,Double_t oneOverZeroError=0.0);
00065 void GetDeltaSysBackgroundScale(TH1 *delta,const char *source,
00066 const Int_t *binMap=0);
00067 void SetTauError(Double_t delta_tau);
00068 void GetDeltaSysTau(TH1 *delta,const Int_t *binMap=0);
00069 void GetEmatrixSysUncorr(TH2 *ematrix,const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00070 void GetEmatrixSysSource(TH2 *ematrix,const char *source,
00071 const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00072 void GetEmatrixSysBackgroundUncorr(TH2 *ematrix,const char *source,
00073 const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00074 void GetEmatrixSysBackgroundScale(TH2 *ematrix,const char *source,
00075 const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00076 void GetEmatrixSysTau(TH2 *ematrix,
00077 const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00078 void GetEmatrixInput(TH2 *ematrix,const Int_t *binMap=0,Bool_t clearEmat=kTRUE);
00079 void GetEmatrixTotal(TH2 *ematrix,const Int_t *binMap=0);
00080 Double_t GetChi2Sys(void);
00081
00082 ClassDef(TUnfoldSys, 0)
00083 };
00084
00085 #endif