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 //#############################################################
32 class AliDielectronSignalBase : public TNamed {
34 enum EBackgroundMethod {
43 AliDielectronSignalBase();
44 AliDielectronSignalBase(const char*name, const char* title);
46 virtual ~AliDielectronSignalBase();
48 void SetIntegralRange(Double_t min, Double_t max) {fIntMin=min;fIntMax=max;}
49 void SetFitRange(Double_t min, Double_t max) {fFitMin=min; fFitMax=max;}
50 void SetRebin(Int_t factor) {fRebin = factor;}
51 void SetMethod(EBackgroundMethod method) {fMethod = method;}
53 const TVectorD& GetValues() const {return fValues;}
54 const TVectorD& GetErrors() const {return fErrors;}
56 Double_t GetIntegralMin() const { return fIntMin; }
57 Double_t GetIntegralMax() const { return fIntMax; }
58 Double_t GetSignal() const { return fValues(0);}
59 Double_t GetSignalError() const { return fErrors(0);}
60 Double_t GetBackground() const { return fValues(1);}
61 Double_t GetBackgroundError() const { return fErrors(1);}
62 Double_t GetSignificance() const { return fValues(2);}
63 Double_t GetSignificanceError() const { return fErrors(2);}
64 Double_t GetSB() const { return fValues(3);}
65 Double_t GetSBError() const { return fErrors(3);}
66 Double_t GetMass() const { return fValues(4);}
67 Double_t GetMassError() const { return fErrors(4);}
68 Double_t GetMassWidth() const { return fValues(5);}
69 Double_t GetMassWidthError() const { return fErrors(5);}
71 TH1* GetSignalHistogram() const {return fHistSignal;}
72 TH1* GetBackgroundHistogram() const {return fHistBackground;}
73 TH1* GetUnlikeSignHistogram() const {return fHistDataPM;}
75 void SetScaleRawToBackground(Double_t intMin, Double_t intMax) { fScaleMin=intMin; fScaleMax=intMax; }
76 Double_t GetScaleFactor() const { return fScaleFactor; }
78 static Double_t ScaleHistograms(TH1* histRaw, TH1* histBackground, Double_t intMin, Double_t intMax);
80 virtual void Print(Option_t *option="") const;
83 This function needs to be implemented by the signal extraction classes.
84 Here all the work should be done.
86 The signal extraction is done on the mass spectra.
87 The TObjArray should contain the Inv. Mass spectra of the 10 possible combinations
88 for single and mixed events defined in AliDielectron.cxx
90 virtual void Process(TObjArray * const /*arrhist*/) = 0;
94 TH1 *fHistSignal; // histogram of pure signal
95 TH1 *fHistBackground; // histogram of background (fitted=0, like-sign=1, event mixing=2)
96 TH1 *fHistDataPM; // histogram of selected +- pair candidates
97 TH1 *fHistDataPP; // histogram of selected ++ pair candidates
98 TH1 *fHistDataMM; // histogram of selected -- pair candidates
99 TH1 *fHistDataME; // histogram of selected +- pair candidates from mixed event
101 TVectorD fValues; // values
102 TVectorD fErrors; // value errors
104 Double_t fIntMin; // signal extraction range min
105 Double_t fIntMax; // signal extraction range max
106 Double_t fFitMin; // fit range lowest inv. mass
107 Double_t fFitMax; // fit range highest inv. mass
109 Int_t fRebin; // histogram rebin factor
110 EBackgroundMethod fMethod; // method for background substraction
111 Double_t fScaleMin; // min for scaling of raw and background histogram
112 Double_t fScaleMax; // max for scaling of raw and background histogram
113 Double_t fScaleFactor; // scale factor of raw to background histogram scaling
115 Bool_t fProcessed; // flag
117 void SetSignificanceAndSOB(); // calculate the significance and S/B
118 TPaveText* DrawStats(Double_t x1=0., Double_t y1=0., Double_t x2=0., Double_t y2=0.);
120 AliDielectronSignalBase(const AliDielectronSignalBase &c);
121 AliDielectronSignalBase &operator=(const AliDielectronSignalBase &c);
123 ClassDef(AliDielectronSignalBase,4) // Dielectron SignalBase
126 inline void AliDielectronSignalBase::SetSignificanceAndSOB()
129 // Calculate S/B and significance
132 fValues(3) = (fValues(1)>0 ? fValues(0)/fValues(1) : 0);
133 Float_t epsSig = (fValues(0)>0 ? fErrors(0)/fValues(0) : 0);
134 Float_t epsBknd = (fValues(1)>0 ? fErrors(1)/fValues(1) : 0);
135 fErrors(3) = fValues(3)*TMath::Sqrt(epsSig*epsSig + epsBknd*epsBknd);
137 fValues(2) = ((fValues(0)+fValues(1))>0 ? fValues(0)/TMath::Sqrt(fValues(0)+fValues(1)) : 0);
138 Float_t s = fValues(0); Float_t b = fValues(1);
139 fErrors(2) = ((s+b)>0 ? TMath::Sqrt((s*(s+2*b)*(s+2*b)+b*s*s)/(4*TMath::Power(s+b,3))) : 0);