1 #ifndef ALIDIELECTRONSIGNALBASE_H
2 #define ALIDIELECTRONSIGNALBASE_H
4 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 //#############################################################
9 //# Class AliDielectronSignalBase #
10 //# Manage Cuts on the legs of the pair #
13 //# Anton Andronic, GSI / A.Andronic@gsi.de #
14 //# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
15 //# Julian Book, Uni Ffm / Julian.Book@cern.ch #
16 //# Frederick Kramer, Uni Ffm, / Frederick.Kramer@cern.ch #
17 //# Magnus Mager, CERN / Magnus.Mager@cern.ch #
18 //# WooJin J. Park, GSI / W.J.Park@gsi.de #
19 //# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
21 //#############################################################
31 class AliDielectronSignalBase : public TNamed {
33 AliDielectronSignalBase();
34 AliDielectronSignalBase(const char*name, const char* title);
36 virtual ~AliDielectronSignalBase();
39 void SetIntegralRange(Double_t min, Double_t max) {fIntMin=min;fIntMax=max;}
41 void SetSignal(Double_t val, Double_t valErr) {fValues(0)=val; fErrors(0)=valErr;}
42 void SetBackground(Double_t val, Double_t valErr) {fValues(1)=val; fErrors(1)=valErr;}
43 void SetSignificance(Double_t val, Double_t valErr) {fValues(2)=val; fErrors(2)=valErr;}
44 void SetSignalOverBackground(Double_t val, Double_t valErr) {fValues(3)=val; fErrors(3)=valErr;}
46 const TVectorD& GetValues() const {return fValues;}
47 const TVectorD& GetErrors() const {return fErrors;}
49 Double_t GetIntegralMin() const { return fIntMin; }
50 Double_t GetIntegralMax() const { return fIntMax; }
52 Double_t GetSignal() {return fValues(0);}
53 Double_t GetBackground() {return fValues(1);}
54 Double_t GetSignificance() {return fValues(2);}
55 Double_t GetSignalOverBackground() {return fValues(3);}
57 Double_t GetSignalError() {return fErrors(0);}
58 Double_t GetBackgroundError() {return fErrors(1);}
59 Double_t GetSignificanceError() {return fErrors(2);}
60 Double_t GetSignalOverBackgroundError() {return fErrors(3);}
62 void GetSignal(Double_t &val, Double_t &valErr) {val=fValues(0); valErr=fErrors(0);}
63 void GetBackground(Double_t &val, Double_t &valErr) {val=fValues(1); valErr=fErrors(1);}
64 void GetSignificance(Double_t &val, Double_t &valErr) {val=fValues(2); valErr=fErrors(2);}
65 void GetSignalOverBackground(Double_t &val, Double_t &valErr) {val=fValues(3); valErr=fErrors(3);}
68 This function needs to be implemented by the signal extraction classes.
70 The signal extraction is done on the mass spectra.
71 The TObjArray should contain the Inv. Mass spectra of the 10 possible combinations
72 for single and mixed events defined in AliDielectron.cxx
73 In the referece TVectorDs the values and value errors of the result should be stored:
74 Parameter - 0: Signal entries
76 2: Significance ( S/sqr(S+B) )
79 It is enough to calculate the signal and background and then call
80 SetSignificanceAndSOB(TVectorD &values, TVectorD &errors)
81 Please also read the description there!!!
83 virtual void Process(TObjArray * const /*arrhist*/) = 0;
87 void SetSignificanceAndSOB();
88 TPaveText* DrawStats(Double_t x1=0., Double_t y1=0., Double_t x2=0., Double_t y2=0.);
89 void Reset() {fValues.Zero(); fErrors.Zero();}
92 TVectorD fValues; // values
93 TVectorD fErrors; // value errors
95 Double_t fIntMin; // signal extraction range min
96 Double_t fIntMax; // signal extraction range max
98 AliDielectronSignalBase(const AliDielectronSignalBase &c);
99 AliDielectronSignalBase &operator=(const AliDielectronSignalBase &c);
101 ClassDef(AliDielectronSignalBase,2) // Dielectron SignalBase
108 inline void AliDielectronSignalBase::SetSignificanceAndSOB()
111 // calculate significance and signal over background from values
112 // it is expected that:
113 // - 'values' and 'errors' have the size 4
114 // - Parameters 0 are given: signal and signal error
115 // - Parameters 1 are given: background and background error
116 // - Optionally parameter 2 can be given: signal+background and its error
118 // The calculated significance and S/B and the corresponding errors
119 // are written in parameters 2 and 3, the first two parameters (signal and background)
122 Double_t signal=fValues(0), signal_err=fErrors(0);
123 Double_t background=fValues(1), background_err=fErrors(1);
124 Double_t sigPlusBack=fValues(2), sigPlusBack_err=fErrors(2);
125 Double_t significance=0, significance_err=0;
126 Double_t sob=0, sob_err=0;
128 if (sigPlusBack<1e-20){
129 //calculate signal plus background
130 sigPlusBack=signal+background;
131 sigPlusBack_err=TMath::Sqrt( signal_err*signal_err + background_err*background_err );
134 if (sigPlusBack>1e-30){
136 significance=signal/TMath::Sqrt(sigPlusBack);
138 significance_err=TMath::Sqrt((signal_err/signal)*(signal_err/signal)+
139 (0.5*sigPlusBack_err/sigPlusBack)*(0.5*sigPlusBack_err/sigPlusBack)
144 if (background>1e-30){
145 sob=signal/background;
146 sob_err=TMath::Sqrt((signal_err/signal)*(signal_err/signal)+
147 (background_err/background)*(background_err/background))*sob;
150 fValues(2)=significance;
151 fErrors(2)=significance_err;