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 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////
18 // Dielectron SignalExt //
21 Dielectron signal extraction class using functions as input.
23 A function to describe the signal as well as one to describe the background
24 has to be deployed by the user. Alternatively on of the default implementaions
29 ///////////////////////////////////////////////////////////////////////////
42 #include "AliDielectronSignalExt.h"
44 ClassImp(AliDielectronSignalExt)
46 AliDielectronSignalExt::AliDielectronSignalExt() :
47 AliDielectronSignalBase()
50 // Default Constructor
54 //______________________________________________
55 AliDielectronSignalExt::AliDielectronSignalExt(const char* name, const char* title) :
56 AliDielectronSignalBase(name, title)
63 //______________________________________________
64 AliDielectronSignalExt::~AliDielectronSignalExt()
71 //______________________________________________
72 void AliDielectronSignalExt::Process(TObjArray* const arrhist)
75 // signal subtraction. support like-sign subtraction and event mixing method
79 ProcessLS(arrhist); // process like-sign subtraction method
83 ProcessEM(arrhist); // process event mixing method
87 AliWarning("Subtraction method not supported. Please check SetMethod() function.");
91 //______________________________________________
92 void AliDielectronSignalExt::ProcessLS(TObjArray* const arrhist)
97 fHistDataPP = (TH1F*)(arrhist->At(0))->Clone("histPP"); // ++ SE
98 fHistDataPM = (TH1F*)(arrhist->At(1))->Clone("histPM"); // +- SE
99 fHistDataMM = (TH1F*)(arrhist->At(2))->Clone("histMM"); // -- SE
100 fHistDataPP->Sumw2();
101 fHistDataPM->Sumw2();
102 fHistDataMM->Sumw2();
104 // rebin the histograms
106 fHistDataPP->Rebin(fRebin);
107 fHistDataPM->Rebin(fRebin);
108 fHistDataMM->Rebin(fRebin);
111 fHistSignal = new TH1F("HistSignal", "Like-Sign substracted signal",
112 fHistDataPM->GetXaxis()->GetNbins(),
113 fHistDataPM->GetXaxis()->GetXmin(), fHistDataPM->GetXaxis()->GetXmax());
114 fHistBackground = new TH1F("HistBackground", "Like-sign contribution",
115 fHistDataPM->GetXaxis()->GetNbins(),
116 fHistDataPM->GetXaxis()->GetXmin(), fHistDataPM->GetXaxis()->GetXmax());
118 // fill out background and subtracted histogram
119 for(Int_t ibin=1; ibin<=fHistDataPM->GetXaxis()->GetNbins(); ibin++) {
120 Float_t pm = fHistDataPM->GetBinContent(ibin);
121 Float_t pp = fHistDataPP->GetBinContent(ibin);
122 Float_t mm = fHistDataMM->GetBinContent(ibin);
123 Float_t epm = fHistDataPM->GetBinError(ibin);
125 Float_t background = 2*TMath::Sqrt(pp*mm);
126 Float_t ebackground = TMath::Sqrt(mm+pp);
127 Float_t signal = pm - background;
128 Float_t error = TMath::Sqrt(epm*epm+mm+pp);
130 fHistSignal->SetBinContent(ibin, signal);
131 fHistSignal->SetBinError(ibin, error);
132 fHistBackground->SetBinContent(ibin, background);
133 fHistBackground->SetBinError(ibin, ebackground);
136 fValues(0) = fHistSignal->IntegralAndError(fHistSignal->FindBin(fIntMin),
137 fHistSignal->FindBin(fIntMax), fErrors(0));
139 fValues(1) = fHistBackground->IntegralAndError(fHistBackground->FindBin(fIntMin),
140 fHistBackground->FindBin(fIntMax),
142 // S/B and significance
143 SetSignificanceAndSOB();
148 //______________________________________________
149 void AliDielectronSignalExt::ProcessEM(TObjArray* const arrhist)
152 // event mixing. not implemented yet.
154 printf("event mixing method is not implemented yet. Like-sign method will be used.\n");
158 //______________________________________________
159 void AliDielectronSignalExt::Draw(const Option_t* option)
162 // Draw the fitted function
164 TString drawOpt(option);
167 Float_t minY = 0.001;
168 Float_t maxY = 1.2*fHistDataPM->GetMaximum();
169 Float_t minX = 1.001*fHistDataPM->GetXaxis()->GetXmin();
170 Float_t maxX = 0.999*fHistDataPM->GetXaxis()->GetXmax();
171 Int_t binSize = Int_t(1000*fHistDataPM->GetBinWidth(1)); // in MeV
172 Float_t minMinY = fHistSignal->GetMinimum();
174 TCanvas *cSub = new TCanvas("cSub","signal, background subtracted",1400,1000);
175 cSub->SetLeftMargin(0.15);
176 cSub->SetRightMargin(0.0);
177 cSub->SetTopMargin(0.002);
178 cSub->SetBottomMargin(0.0);
179 cSub->Divide(2,2,0.,0.);
182 TVirtualPad* pad = cSub->cd(1);
183 pad->SetLeftMargin(0.15);
184 pad->SetRightMargin(0.0);
185 pad->SetTopMargin(0.005);
186 pad->SetBottomMargin(0.0);
187 TH2F *range1=new TH2F("range1","",10,minX,maxX,10,minY,maxY);
188 range1->SetStats(kFALSE);
189 range1->GetYaxis()->SetTitle(Form("entries [counts per %d MeV bin]", binSize));
190 range1->GetYaxis()->CenterTitle();
191 range1->GetYaxis()->SetLabelSize(0.05);
192 range1->GetYaxis()->SetTitleSize(0.06);
193 range1->GetYaxis()->SetTitleOffset(0.8);
195 fHistDataPM->SetLineColor(1);
196 fHistDataPM->SetLineWidth(2);
197 // fHistDataPM->SetMarkerStyle(21);
198 fHistDataPM->Draw("Psame");
199 TLatex *latex = new TLatex();
201 latex->SetTextSize(0.05);
202 latex->DrawLatex(0.2, 0.95, "Background un-substracted");
204 line.SetLineWidth(1);
205 line.SetLineStyle(2);
206 line.DrawLine(fIntMin, minY, fIntMin, maxY);
207 line.DrawLine(fIntMax, minY, fIntMax, maxY);
210 pad->SetLeftMargin(0.);
211 pad->SetRightMargin(0.005);
212 pad->SetTopMargin(0.005);
213 pad->SetBottomMargin(0.0);
214 TH2F *range2=new TH2F("range2","",10,minX,maxX,10,minY,maxY);
215 range2->SetStats(kFALSE);
217 fHistBackground->SetLineColor(4);
218 fHistBackground->SetLineWidth(2);
219 // fHistBackground->SetMarkerColor(4);
220 // fHistBackground->SetMarkerStyle(6);
221 fHistBackground->Draw("Psame");
222 latex->DrawLatex(0.05, 0.95, "Like-sign background");
223 line.DrawLine(fIntMin, minY, fIntMin, maxY);
224 line.DrawLine(fIntMax, minY, fIntMax, maxY);
225 TLegend *legend = new TLegend(0.65, 0.70, 0.98, 0.98);
226 legend->SetFillColor(0);
227 legend->SetMargin(0.15);
228 legend->AddEntry(fHistDataPM, "N_{+-}", "l");
229 legend->AddEntry(fHistDataPP, "N_{++}", "l");
230 legend->AddEntry(fHistDataMM, "N_{--}", "l");
231 legend->AddEntry(fHistSignal, "N_{+-} - 2 #sqrt{N_{++} #times N_{--}}", "l");
232 legend->AddEntry(fHistBackground, "2 #sqrt{N_{++} #times N_{--}}", "l");
237 pad->SetLeftMargin(0.15);
238 pad->SetRightMargin(0.0);
239 pad->SetTopMargin(0.0);
240 pad->SetBottomMargin(0.15);
241 TH2F *range3=new TH2F("range3","",10,minX,maxX,10,minMinY,maxY);
242 range3->SetStats(kFALSE);
243 range3->GetYaxis()->SetTitle(Form("entries [counts per %d MeV bin]", binSize));
244 range3->GetYaxis()->CenterTitle();
245 range3->GetYaxis()->SetLabelSize(0.05);
246 range3->GetYaxis()->SetTitleSize(0.06);
247 range3->GetYaxis()->SetTitleOffset(0.8);
248 range3->GetXaxis()->SetTitle("inv. mass [GeV/c^{2}]");
249 range3->GetXaxis()->CenterTitle();
250 range3->GetXaxis()->SetLabelSize(0.05);
251 range3->GetXaxis()->SetTitleSize(0.06);
252 range3->GetXaxis()->SetTitleOffset(1.0);
254 fHistDataPM->Draw("Psame");
255 fHistDataPP->SetLineWidth(2);
256 fHistDataPP->SetLineColor(6);
257 fHistDataMM->SetLineWidth(2);
258 fHistDataMM->SetLineColor(8);
259 fHistDataPP->Draw("Psame");
260 fHistDataMM->Draw("Psame");
261 line.DrawLine(minX, 0.,maxX, 0.);
262 line.DrawLine(fIntMin, minMinY, fIntMin, maxY);
263 line.DrawLine(fIntMax, minMinY, fIntMax, maxY);
266 pad->SetLeftMargin(0.0);
267 pad->SetRightMargin(0.005);
268 pad->SetTopMargin(0.0);
269 pad->SetBottomMargin(0.15);
270 TH2F *range4=new TH2F("range4","",10,minX,maxX,10,minMinY,maxY);
271 range4->SetStats(kFALSE);
272 range4->GetXaxis()->SetTitle("inv. mass [GeV/c^{2}]");
273 range4->GetXaxis()->CenterTitle();
274 range4->GetXaxis()->SetLabelSize(0.05);
275 range4->GetXaxis()->SetTitleSize(0.06);
276 range4->GetXaxis()->SetTitleOffset(1.0);
278 fHistSignal->SetLineWidth(2);
279 fHistSignal->SetLineColor(2);
280 fHistSignal->Draw("Psame");
281 latex->DrawLatex(0.05, 0.95, "Like-sign background substracted");
282 if(fProcessed) DrawStats(0.05, 0.6, 0.5, 0.9);
283 line.DrawLine(minX, 0.,maxX, 0.);
284 line.DrawLine(fIntMin, minMinY, fIntMin, maxY);
285 line.DrawLine(fIntMax, minMinY, fIntMax, maxY);