1 #ifndef ALISIGNIFICANCECALCULATOR_H
2 #define ALISIGNIFICANCECALCULATOR_H
4 /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
9 ///////////////////////////////////////////////////////////////////
11 // Class to calculate the statistical significance from //
12 // AliMultiVeector objects for signal and background //
13 // Origin: Francesco Prino (prino@to.infn.it) //
15 ///////////////////////////////////////////////////////////////////
19 class AliMultiDimVector;
21 class AliSignificanceCalculator : public TObject{
23 AliSignificanceCalculator();
24 AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, Float_t normsig=1., Float_t normbkg=1.);
25 AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, AliMultiDimVector* err2sig, AliMultiDimVector* err2bkg, Float_t normsig=1., Float_t normbkg=1.);
27 ~AliSignificanceCalculator();
29 void SetSignal(AliMultiDimVector* sig, Float_t norm=1.){
30 if(fSignal) delete fSignal;
33 if(fSignal && fBackground) CalculateSignificance();
35 void SetBackground(AliMultiDimVector* bac, Float_t norm=1.){
36 if(fBackground) delete fBackground;
39 if(fSignal && fBackground) CalculateSignificance();
41 void SetErrSquareSignal(AliMultiDimVector* err2sig, Float_t norm=1.){
42 if(fErrSquareSignal) delete fErrSquareSignal;
43 fErrSquareSignal=err2sig;
45 if(fSignal && fBackground) CalculateSignificance();
47 void SetErrSquareBackground(AliMultiDimVector* err2bkg, Float_t norm=1.){
48 if(fErrSquareBackground) delete fErrSquareBackground;
49 fErrSquareBackground=err2bkg;
51 if(fSignal && fBackground) CalculateSignificance();
54 void SetNormalizations(Float_t normSig, Float_t normBkg){
57 if(fSignal && fBackground) CalculateSignificance();
60 AliMultiDimVector* GetSignal() const {return fSignal;}
61 AliMultiDimVector* GetBackground() const {return fBackground;}
62 AliMultiDimVector* GetSignificance() const {return fSignificance;}
63 AliMultiDimVector* GetSignificanceError() const {return fErrSignificance;}
65 void CalculateSignificance();
66 Float_t GetMaxSignificance(Int_t* cutIndices, Int_t ptbin) const{
68 if(fSignificance) fSignificance->FindMaximum(sigMax,cutIndices,ptbin);
71 AliMultiDimVector* CalculatePurity() const;
72 AliMultiDimVector* CalculatePurityError() const;
73 AliMultiDimVector* CalculateSOverB() const;
74 AliMultiDimVector* CalculateSOverBError() const;
78 AliSignificanceCalculator(const AliSignificanceCalculator& c);
79 AliSignificanceCalculator& operator=(const AliSignificanceCalculator& c);
81 AliMultiDimVector* fSignal; // signal matrix
82 AliMultiDimVector* fErrSquareSignal; // matrix with err^2 for signal
83 AliMultiDimVector* fBackground; // background matrix
84 AliMultiDimVector* fErrSquareBackground; // matrix with err^2 for background
85 AliMultiDimVector* fSignificance; // significance matrix
86 AliMultiDimVector* fErrSignificance; // matrix with error on significance
87 Float_t fNormSig; // signal normalization
88 Float_t fNormBkg; // background normalization
90 ClassDef(AliSignificanceCalculator,0); // class to compute and maximise significance