]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/dielectron/AliDielectronSignalExt.cxx
Removing the unnecessary const
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliDielectronSignalExt.cxx
CommitLineData
572b0139 1/*************************************************************************
2* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
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**************************************************************************/
15
16///////////////////////////////////////////////////////////////////////////
17// //
18// Dielectron SignalExt //
19// //
20/*
21Dielectron signal extraction class using functions as input.
22
23A function to describe the signal as well as one to describe the background
24has to be deployed by the user. Alternatively on of the default implementaions
25can be used.
26
27*/
28// //
29///////////////////////////////////////////////////////////////////////////
572b0139 30#include <TF1.h>
31#include <TH1.h>
bc75eeb5 32#include <TH2F.h>
33#include <TLatex.h>
34#include <TLegend.h>
572b0139 35#include <TCanvas.h>
36#include <TMath.h>
37#include <TString.h>
bc75eeb5 38#include <TLine.h>
572b0139 39
40#include <AliLog.h>
41
42#include "AliDielectronSignalExt.h"
43
44ClassImp(AliDielectronSignalExt)
45
46AliDielectronSignalExt::AliDielectronSignalExt() :
bc75eeb5 47 AliDielectronSignalBase()
572b0139 48{
49 //
50 // Default Constructor
51 //
572b0139 52}
53
54//______________________________________________
55AliDielectronSignalExt::AliDielectronSignalExt(const char* name, const char* title) :
bc75eeb5 56 AliDielectronSignalBase(name, title)
572b0139 57{
58 //
59 // Named Constructor
60 //
61}
62
63//______________________________________________
64AliDielectronSignalExt::~AliDielectronSignalExt()
65{
66 //
67 // Default Destructor
68 //
572b0139 69}
70
71//______________________________________________
72void AliDielectronSignalExt::Process(TObjArray* const arrhist)
73{
74 //
75 // signal subtraction. support like-sign subtraction and event mixing method
76 //
77 switch ( fMethod ){
bc75eeb5 78 case kLikeSign :
572b0139 79 ProcessLS(arrhist); // process like-sign subtraction method
80 break;
81
bc75eeb5 82 case kEventMixing :
572b0139 83 ProcessEM(arrhist); // process event mixing method
84 break;
85
86 default :
87 AliWarning("Subtraction method not supported. Please check SetMethod() function.");
88 }
89}
90
91//______________________________________________
92void AliDielectronSignalExt::ProcessLS(TObjArray* const arrhist)
93{
94 //
95 // signal subtraction
96 //
bc75eeb5 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();
572b0139 103
bc75eeb5 104 // rebin the histograms
105 if (fRebin>1) {
106 fHistDataPP->Rebin(fRebin);
107 fHistDataPM->Rebin(fRebin);
108 fHistDataMM->Rebin(fRebin);
109 }
110
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());
572b0139 117
118 // fill out background and subtracted histogram
bc75eeb5 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);
124
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);
129
130 fHistSignal->SetBinContent(ibin, signal);
131 fHistSignal->SetBinError(ibin, error);
132 fHistBackground->SetBinContent(ibin, background);
133 fHistBackground->SetBinError(ibin, ebackground);
572b0139 134 }
bc75eeb5 135 // signal
136 fValues(0) = fHistSignal->IntegralAndError(fHistSignal->FindBin(fIntMin),
137 fHistSignal->FindBin(fIntMax), fErrors(0));
138 // background
139 fValues(1) = fHistBackground->IntegralAndError(fHistBackground->FindBin(fIntMin),
48609e3d 140 fHistBackground->FindBin(fIntMax),
141 fErrors(1));
bc75eeb5 142 // S/B and significance
572b0139 143 SetSignificanceAndSOB();
144
bc75eeb5 145 fProcessed = kTRUE;
572b0139 146}
147
148//______________________________________________
149void AliDielectronSignalExt::ProcessEM(TObjArray* const arrhist)
150{
151 //
152 // event mixing. not implemented yet.
153 //
154 printf("event mixing method is not implemented yet. Like-sign method will be used.\n");
155 ProcessLS(arrhist);
156}
157
572b0139 158//______________________________________________
159void AliDielectronSignalExt::Draw(const Option_t* option)
160{
161 //
162 // Draw the fitted function
163 //
164 TString drawOpt(option);
165 drawOpt.ToLower();
166
bc75eeb5 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();
173
48609e3d 174 TCanvas *cSub = new TCanvas(Form("%s", fName.Data()),Form("%s", fTitle.Data()),1400,1000);
bc75eeb5 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.);
572b0139 180 cSub->Draw();
181
bc75eeb5 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);
194 range1->Draw();
195 fHistDataPM->SetLineColor(1);
196 fHistDataPM->SetLineWidth(2);
197 // fHistDataPM->SetMarkerStyle(21);
198 fHistDataPM->Draw("Psame");
199 TLatex *latex = new TLatex();
200 latex->SetNDC();
201 latex->SetTextSize(0.05);
202 latex->DrawLatex(0.2, 0.95, "Background un-substracted");
203 TLine line;
204 line.SetLineWidth(1);
205 line.SetLineStyle(2);
206 line.DrawLine(fIntMin, minY, fIntMin, maxY);
207 line.DrawLine(fIntMax, minY, fIntMax, maxY);
208
209 pad = cSub->cd(2);
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);
216 range2->Draw();
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");
233 legend->Draw();
234
572b0139 235
bc75eeb5 236 pad = cSub->cd(3);
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);
253 range3->Draw();
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);
264
265 pad = cSub->cd(4);
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);
277 range4->Draw();
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);
48609e3d 286
287 cSub->SaveAs(Form("%s_summary.png", fName.Data()));
572b0139 288}
289