1 /*************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////
19 // Dielectron SignalBase //
23 Base class for signal extraction from a histogram or an array of histograms
24 The histogram is assumed to be an inv. mass spectrum,
25 the array of histograms is assumed to be an array with inv. mass histograms
26 resulting from single and mixed events, as defined in AliDielectron.cxx
30 ///////////////////////////////////////////////////////////////////////////
34 #include <TPaveText.h>
36 #include "AliDielectronSignalBase.h"
38 ClassImp(AliDielectronSignalBase)
40 AliDielectronSignalBase::AliDielectronSignalBase() :
61 // Default Constructor
65 //______________________________________________
66 AliDielectronSignalBase::AliDielectronSignalBase(const char* name, const char* title) :
91 //______________________________________________
92 AliDielectronSignalBase::~AliDielectronSignalBase()
97 if(fHistSignal) delete fHistSignal;
98 if(fHistBackground) delete fHistBackground;
99 if (fHistDataPP) delete fHistDataPP;
100 if (fHistDataPM) delete fHistDataPM;
101 if (fHistDataMM) delete fHistDataMM;
105 //______________________________________________
106 TPaveText* AliDielectronSignalBase::DrawStats(Double_t x1/*=0.*/, Double_t y1/*=0.*/, Double_t x2/*=0.*/, Double_t y2/*=0.*/)
109 // Draw extracted values in a TPaveText
110 // with the corners x1,y2,x2,y2
112 if (TMath::Abs(x1)<1e-20&&TMath::Abs(x2)<1e-20){
118 TPaveText *t=new TPaveText(x1,y1,x2,y2,"brNDC");
119 t->SetFillColor(kWhite);
122 t->AddText(Form("Range : %.2f - %.2f GeV/c^{2}", fIntMin, fIntMax));
123 t->AddText(Form("Signal : %.1f #pm %.1f", fValues(0), fErrors(0)));
124 t->AddText(Form("Backgnd: %.1f #pm %.1f", fValues(1), fErrors(1)));
125 t->AddText(Form("Signif.: %.2f #pm %.2f", fValues(2), fErrors(2)));
126 t->AddText(Form("S/B : %.2f #pm %.2f", fValues(3), fErrors(3)));
128 t->AddText(Form("Mass: %.2f #pm %.2f GeV/c^{2}", fValues(4), fErrors(4)));
129 t->AddText(Form("Mass res.: %.1f #pm %.1f MeV/c^{2}", 1000*fValues(5), 1000*fErrors(5)));
136 //______________________________________________
137 void AliDielectronSignalBase::Print(Option_t */*option*/) const
140 // Print the statistics
142 printf("Signal : %.5g #pm %.5g\n",fValues(0), fErrors(0));
143 printf("Backgnd: %.5g #pm %.5g\n",fValues(1), fErrors(1));
144 printf("Signif.: %.5g #pm %.5g\n",fValues(2), fErrors(2));
145 printf("SoB : %.5g #pm %.5g\n",fValues(3), fErrors(3));
147 printf("Mass: %.5g #pm %.5g\n", fValues(4), fErrors(4));
148 printf("Mass res.: %.5g #pm %.5g\n", fValues(5), fErrors(5));
152 //______________________________________________
153 Double_t AliDielectronSignalBase::ScaleHistograms(TH1* histRaw, TH1* histBackground, Double_t intMin, Double_t intMax)
156 // scale histBackground to match the integral of histRaw in the interval intMin, intMax
159 //protect using over and underflow bins in normalisation calculation
160 if (intMin<histRaw->GetXaxis()->GetXmin()) intMin=histRaw->GetXaxis()->GetXmin();
161 if (intMin<histBackground->GetXaxis()->GetXmin()) intMin=histBackground->GetXaxis()->GetXmin();
163 if (intMax>histRaw->GetXaxis()->GetXmax())
164 intMax=histRaw->GetXaxis()->GetXmax()-histRaw->GetBinWidth(histRaw->GetNbinsX())/2.;
165 if (intMax>histBackground->GetXaxis()->GetXmax())
166 intMax=histBackground->GetXaxis()->GetXmax()-histBackground->GetBinWidth(histBackground->GetNbinsX())/2.;
168 Double_t intRaw = histRaw->Integral(histRaw->FindBin(intMin),histRaw->FindBin(intMax));
169 Double_t intBack = histBackground->Integral(histBackground->FindBin(intMin),histBackground->FindBin(intMax));
170 Double_t scaleFactor=intBack>0?intRaw/intBack:0.;
172 histBackground->Sumw2();
173 histBackground->Scale(scaleFactor);