]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFPID.cxx
Initialisation of static const moved to the implementation file
[u/mrichter/AliRoot.git] / TOF / AliTOFPID.cxx
CommitLineData
190c1f49 1/**************************************************************************
2 * Copyright(c) 1998-1999, 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// TTask class for TOF PID.
18// Use case: start root and execute the following macro
19/*
20{
21 // Dynamically link some shared libs
22 if (gClassTable->GetID("AliRun") < 0) {
23 gROOT->LoadMacro("loadlibs.C");
24 loadlibs();
25 }
26 // create an instance of the AliTOFPID class
27 // You have to pass the ntuple and cuts filenames
28 AliTOFPID* tofpid=new AliTOFPID("ntuple.root","cuts.root");
29
30 // option "pp" for pp events (it includes also electron in the analysis)
31 // option "visual" to shows interactively histos
32 // option "asC" or "asEPS" to save canvas in the current dir in .C or .eps format
33
34 // make a choice: uncomment one of these lines
35 // tofpid->Exec("pp","visual","asC");
36 // tofpid->Exec("pp","novisual","asC");
37 // tofpid->Exec("Pb-Pb","visual","asC");
38 // tofpid->Exec("pp","visual","asC");
39 // tofpid->Exec("pp","novisual","asEPS");
40}
41*/
42//
43//
44//
45//
46//
47//
48//
49//
50//-- Authors: B. Zagreev , F. Pierella
51//////////////////////////////////////////////////////////////////////////////
52
53
54#include "TROOT.h"
55#include "TStyle.h"
56#include "TTask.h"
57#include "TTree.h"
58#include "TSystem.h"
59#include "TFile.h"
60#include "TCanvas.h"
61#include "TPad.h"
62#include "TText.h"
63#include "TLine.h"
64#include "TPaveLabel.h"
65#include "TPaveText.h"
66#include "AliConst.h"
67#include "AliTOFConstants.h"
68#include "AliTOFPID.h"
69#include <TClonesArray.h>
70#include "TFile.h"
71#include <TF1.h>
72#include <TF2.h>
73#include "TTask.h"
74#include "TTree.h"
75#include "TSystem.h"
76#include "TROOT.h"
77#include "TFolder.h"
78#include "TNtuple.h"
79#include "TLeaf.h"
80#include <stdlib.h>
81#include <iostream.h>
82#include <fstream.h>
83
84ClassImp(AliTOFPID)
85
86//____________________________________________________________________________
87 AliTOFPID::AliTOFPID():TTask("AliTOFPID","")
88{
89 // default ctor - set the pointer member vars to zero
90 felectron = 0;
91 fpion = 0;
92 fkaon = 0;
93 fproton = 0;
94 fcut = 0;
95 fhfile = 0;
96 fNtuple = 0;
97 fgen = 0;
98 foutfileName = 0;
99}
100
101//____________________________________________________________________________
102 AliTOFPID::AliTOFPID(char* headerFile, char *cutsFile, const Option_t* opt="pp"):TTask("AliTOFPID","")
103{
104 fhfile = TFile::Open(headerFile); // connect file with ntuple
105 fcut = TFile::Open(cutsFile); // connect file for cuts
106 foutfileName=headerFile;
107
108 Init(opt);
109 // add Task to //root/Tasks folder
110 TTask * roottasks = (TTask*)gROOT->GetRootFolder()->FindObject("Tasks") ;
111 roottasks->Add(this) ;
112}
113//____________________________________________________________________________
114void AliTOFPID::Init(const Option_t* opt)
115{
116 if(strstr(opt,"pp")){
117 if(fcut->GetKey("electron")) felectron = (TCutG*)fcut->Get("electron");
118 fcut->Print();
119 if(fcut->GetKey("pion")) fpion = (TCutG*)fcut->Get("pion");
120 fcut->Print();
121 }
122 if(fcut->GetKey("kaon")) fkaon = (TCutG*)fcut->Get("kaon");
123 fcut->Print();
124 if(fcut->GetKey("proton")) fproton = (TCutG*)fcut->Get("proton");
125
126 gFile->ls();
127 fNtuple= (TNtuple*)fhfile->Get("Ntuple"); // get ntuple from file
128 Int_t nvar = fNtuple->GetNvar(); cout <<"N of var.="<< nvar << endl;
129 fNtuple->GetEvent(0);
130
131}
132
133//____________________________________________________________________________
134 AliTOFPID::~AliTOFPID()
135{
136 //
137 // dtor (free used memory)
138 //
139
140 if (felectron)
141 {
142 delete felectron;
143 felectron = 0;
144 }
145
146 if (fpion)
147 {
148 delete fpion;
149 fpion = 0;
150 }
151
152 if (fkaon)
153 {
154 delete fkaon;
155 fkaon = 0;
156 }
157
158 if (fproton)
159 {
160 delete fproton;
161 fproton = 0;
162 }
163
164 if (fcut)
165 {
166 delete fcut;
167 fcut = 0;
168 }
169
170
171 if (fhfile)
172 {
173 delete fhfile;
174 fhfile = 0;
175 }
176
177
178 if (fNtuple)
179 {
180 delete fNtuple;
181 fNtuple = 0;
182 }
183
184 if (fgen)
185 {
186 delete fgen;
187 fgen = 0;
188 }
189
190 if (foutfileName)
191 {
192 delete foutfileName;
193 foutfileName = 0;
194 }
195}
196
197
198//____________________________________________________________________________
199void AliTOFPID::Exec(const Option_t *eventType, const Option_t *outputmode, const Option_t *outputsavemode)
200{
201 //
202 // Performs PID for TOF detector
203 //
204
205 fTask=1;
206 TAxis *xaxis;
207 ////////// Create histograms /////////////////
208 // for electron only in pp case
209 TH1F* eleff=0;
210 TH1F *elcon=0;
211 TH1F *elid=0;
212 TH1F *elall=0;
213
214 if(strstr(eventType,"pp")){
215 eleff = new TH1F("eleff","",10,0,0.6);
216 xaxis=eleff->GetYaxis();
217 xaxis->SetLabelSize(.08);
218 elcon = new TH1F("elcon","",10,0,0.6);
219 xaxis=elcon->GetXaxis();
220 xaxis->SetLabelSize(.09);
221 xaxis=elcon->GetYaxis();
222 xaxis->SetLabelSize(.08);
223 elid = new TH1F("elid","Identified electrons",10,0,0.6);
224 elall = new TH1F("elall","Electrons",10,0,0.6);
225 }
226
227 // pions
228 TH1F *pit = new TH1F("pit","",15,0,2.5); //part. with tracks
229 TH1F *pig = new TH1F("pig","",15,0,2.5); //part. in geometry acceptance
230 TH1F *pieff = new TH1F("pieff","",15,0,2.5); //efficiency
231 xaxis=pieff->GetYaxis();
232 xaxis->SetLabelSize(.08);
233 TH1F *picon = new TH1F("picon","",15,0,2.5); //contamination
234 xaxis=picon->GetXaxis();
235 xaxis->SetLabelSize(.09);
236 xaxis=picon->GetYaxis();
237 xaxis->SetLabelSize(.08);
238 TH1F *piid = new TH1F("piid","Identified pions",15,0,2.5);
239 TH1F *piall = new TH1F("piall","Pions",15,0,2.5);
240 TH1F *pigen = new TH1F("pigen","Pions",15,0,2.5);
241 xaxis=pigen->GetXaxis();
242 xaxis->SetLabelSize(.09);
243 pigen->SetXTitle("P?t! (GeV/c)");
244 xaxis->SetTitleSize(.09);
245 xaxis=pigen->GetYaxis();
246 xaxis->SetLabelSize(.08);
247 //pigen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
248 xaxis->SetTitleSize(.09);
249
250 // kaons
251 TH1F *kat = new TH1F("kat","",15,0,2.5);
252 TH1F *kag = new TH1F("kag","",15,0,2.5);
253 TH1F *kaeff = new TH1F("kaeff","",15,0,2.5);
254 xaxis=kaeff->GetYaxis();
255 xaxis->SetLabelSize(.08);
256 TH1F *kacon = new TH1F("kacon","",15,0,2.5);
257 xaxis=kacon->GetXaxis();
258 xaxis->SetLabelSize(.09);
259 xaxis=kacon->GetYaxis();
260 xaxis->SetLabelSize(.08);
261 TH1F *kaid = new TH1F("kaid","Identified kaons",15,0,2.5);
262 TH1F *kaall = new TH1F("kaall","Kaons",15,0,2.5);
263 TH1F *kagen = new TH1F("kagen","Kaons",15,0,2.5);
264 xaxis=kagen->GetXaxis();
265 xaxis->SetLabelSize(.09);
266 kagen->SetXTitle("P?t! (GeV/c)");
267 xaxis->SetTitleSize(.09);
268 xaxis=kagen->GetYaxis();
269 xaxis->SetLabelSize(.08);
270 //kagen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
271 xaxis->SetTitleSize(.09);
272
273 // protons
274 TH1F *prt = new TH1F("prt","",15,0,4.4);
275 TH1F *prg = new TH1F("prg","",15,0,4.4);
276 TH1F *preff = new TH1F("preff","",15,0,4.4);
277 xaxis=preff->GetYaxis();
278 xaxis->SetLabelSize(.08);
279 TH1F *prcon = new TH1F("prcon","",15,0,4.4);
280 xaxis=prcon->GetXaxis();
281 xaxis->SetLabelSize(.09);
282 xaxis=prcon->GetYaxis();
283 xaxis->SetLabelSize(.08);
284 TH1F *prid = new TH1F("prid","Identified protons",15,0,4.4);
285 TH1F *prall = new TH1F("prall","Protons",15,0,4.4);
286 TH1F *prgen = new TH1F("prgen","Protons",15,0,4.4);
287 xaxis=prgen->GetXaxis();
288 xaxis->SetLabelSize(.09);
289 prgen->SetXTitle("P?t! (GeV/c)");
290 xaxis->SetTitleSize(.09);
291 xaxis=prgen->GetYaxis();
292 xaxis->SetLabelSize(.08);
293 //prgen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
294 xaxis->SetTitleSize(.09);
295
296 // 2-D histos (extrapolated mass vs momentum)
297 TH2F* hel=0;
298 if(strstr(eventType,"pp")){
299 hel = new TH2F("hel","",1000,-.2,1.2,1000,-4.2,0.);
300 hel->SetXTitle("Mass (GeV/c^{2})");
301 hel->SetYTitle("Momentum (GeV/c)");
302 }
303 TH2F *hpi = new TH2F("hpi","",1000,-.2,1.2,1000,-4.2,0.);
304 hpi->SetXTitle("Mass (GeV/c^{2})");
305 hpi->SetYTitle("Momentum (GeV/c)");
306 TH2F *hka = new TH2F("hka","",1000,-.2,1.2,1000,-4.2,0.);
307 hka->SetXTitle("Mass (GeV/c^{2})");
308 hka->SetYTitle("Momentum (GeV/c)");
309 TH2F *hpr = new TH2F("hpr","",1000,-.2,1.2,1000,-4.2,0.);
310 hpr->SetXTitle("Mass (GeV/c^{2})");
311 hpr->SetYTitle("Momentum (GeV/c)");
312
313
314 fhfile->cd();
315 Int_t nparticles = (Int_t)fNtuple->GetEntries();
316 cout << " Number of nparticles =" << nparticles << endl;
317 if (nparticles <= 0) return;
318
319 Float_t ka=0, pi=0, pr=0, kaal=0, pial=0, pral=0;
320 Float_t pitrack=0, pimag=0, pigeom=0;
321 Float_t katrack=0, kamag=0, kageom=0;
322 Float_t prtrack=0, prmag=0, prgeom=0;
323 Float_t pif=0, kaf=0, prf=0, pin=0, kan=0, prn=0;
324 Float_t px, py, pz, x, y, z, pdgcode, mass;
325 Int_t event, matc, imam;
326 Int_t indexOfFile=0, numfile=0;
327 //////// Loop over tracks (particles)///////////////////////
328
329 for (Int_t i=0; i < nparticles; i++) {
330 fNtuple->GetEvent(i);
331 event=fNtuple->GetLeaf("event")->GetValue();
332 pdgcode=fNtuple->GetLeaf("ipart")->GetValue();
333 mass=fNtuple->GetLeaf("mext")->GetValue(0);
334 matc=fNtuple->GetLeaf("matc")->GetValue(0);
335 imam=fNtuple->GetLeaf("imam")->GetValue(0);
336 px=fNtuple->GetLeaf("pxvtx")->GetValue(0);
337 py=fNtuple->GetLeaf("pyvtx")->GetValue(0);
338 pz=fNtuple->GetLeaf("pzvtx")->GetValue(0);
339 x=fNtuple->GetLeaf("xvtx")->GetValue(0);
340 y=fNtuple->GetLeaf("yvtx")->GetValue(0);
341 z=fNtuple->GetLeaf("zvtx")->GetValue(0);
342 Float_t pvtx=TMath::Sqrt(px*px+py*py+pz*pz);
343 Float_t ptvtx=TMath::Sqrt(px*px+py*py);
344 Float_t mt=0.;
345 Int_t abspdgcode=TMath::Abs(pdgcode);
346 switch(abspdgcode){
347 case 321:
348 mt=TMath::Sqrt(AliTOFConstants::fgkKaonMass*AliTOFConstants::fgkKaonMass+px*px+py*py);
349 break;
350 case 2212:
351 mt=TMath::Sqrt(AliTOFConstants::fgkProtonMass*AliTOFConstants::fgkProtonMass+px*px+py*py);
352 break;
353 case 11:
354 mt=TMath::Sqrt(AliTOFConstants::fgkElectronMass*AliTOFConstants::fgkElectronMass+px*px+py*py);
355 break;
356 default:
357 mt=TMath::Sqrt(AliTOFConstants::fgkPionMass*AliTOFConstants::fgkPionMass+px*px+py*py);
358 break;
359 }
360
361 if (imam == 0 && pz !=0 && TMath::ATan(TMath::Abs(ptvtx/pz))>TMath::Pi()*45./180.)
362 {//only primary +/-45
363 if (fkaon->IsInside(mass,-pvtx) && matc>2) {
364 ka++;
365 if (fTask!=2) kaid->Fill(pvtx); else {kaid->Fill(ptvtx);}
366 if (TMath::Abs(pdgcode)==321) {kaf++; kaeff->Fill(pvtx);} else {kan++; kacon->Fill(pvtx);}
367 } else if (fproton->IsInside(mass,-pvtx) && matc>1) {
368 pr++;
369 if (fTask!=2) prid->Fill(pvtx); else
370 {prid->Fill(ptvtx);}
371 if (TMath::Abs(pdgcode)==2212) {prf++; preff->Fill(pvtx);} else {prn++; prcon->Fill(pvtx);}
372 } else if (strstr(eventType,"pp") && felectron->IsInside(mass,-pvtx) && matc>2) {elid->Fill(pvtx);
373 if (strstr(eventType,"pp") && TMath::Abs(pdgcode)==11) eleff->Fill(pvtx); else elcon->Fill(pvtx);
374 } else if (matc>0) {
375 //||matc==-4&&fpion->IsInside(mass,-pvtx)
376 pi++;
377 if (fTask!=2) piid->Fill(pvtx); else {piid->Fill(ptvtx);}
378 if (TMath::Abs(pdgcode)==211) {pif++; pieff->Fill(pvtx);} else {pin++; picon->Fill(pvtx);}
379 }
380
381 //////////////// Normalization histograms ////////////////////
382 if (strstr(eventType,"pp") && TMath::Abs(pdgcode)==11) {
383 if (fTask!=2) elall->Fill(pvtx); else elall->Fill(ptvtx);
384 if (fTask==1) hel->Fill(mass,-pvtx);
385
386 } else if (TMath::Abs(pdgcode)==211) {
387 pial++;
388 if (matc!=0) {
389 pitrack++;
390 pit->Fill(pvtx);
391 if (matc!=-1) {
392 pimag++;
393 if (matc>-2 || matc==-4) {
394 pigeom++;
395 pig->Fill(pvtx);
396 }
397 }
398 }
399 if (fTask!=2) piall->Fill(pvtx);
400 else {
401 piall->Fill(ptvtx,1/ptvtx);
402 }
403 if (fTask==1) hpi->Fill(mass,-pvtx);
404
405 } else if (TMath::Abs(pdgcode)==321) {
406 kaal++;
407 if (matc!=0) {
408 katrack++;
409 kat->Fill(pvtx);
410 if (matc!=-1) {
411 kamag++;
412 if (matc>-2 || matc==-4) {
413 kageom++;
414 kag->Fill(pvtx);
415 }
416 }
417 }
418 if (fTask!=2) kaall->Fill(pvtx);
419 else {
420 kaall->Fill(ptvtx,1/ptvtx);
421 }
422 if (fTask==1) hka->Fill(mass,-pvtx);
423
424 } else if (TMath::Abs(pdgcode)==2212) {
425 pral++;
426 if (matc!=0) {
427 prtrack++;
428 prt->Fill(pvtx);
429 if (matc!=-1) {
430 prmag++;
431 if (matc>-2 || matc==-4) {
432 prgeom++;
433 prg->Fill(pvtx);
434 }
435 }
436 }
437 if (fTask!=2) prall->Fill(pvtx);
438 else {
439 prall->Fill(ptvtx,1/ptvtx);
440 }
441 if (fTask==1) hpr->Fill(mass,-pvtx);}
442
443 }// End of cuts appling
444 }// End of loop over particles
445
446 // display results
447 cout<< "Pions in 45-135 deg. "<< pial <<" (100%)"<< endl;
448 cout<< "Pions that have track "<< pitrack/pial*100 <<" %"<<endl;
449 cout<< "Magnetic field "<< pimag/pial*100 <<" %"<<endl;
450 cout<< "Geometry efficiency "<< pigeom/pial*100 <<" %"<<endl;
451 cout<< "PID procedure "<< pif/pial*100 <<" %"<<endl;
452 cout<< "Contamination "<< pin/pi*100 <<" %"<<endl;
453 cout<<endl;
454 cout<< "Kaons in 45-135 deg. "<< kaal <<" (100%)"<< endl;
455 cout<< "Kaons that have track "<< katrack/kaal*100 <<" %"<<endl;
456 cout<< "Magnetic field "<< kamag/kaal*100 <<" %"<<endl;
457 cout<< "Geometry efficiency "<< kageom/kaal*100 <<" %"<<endl;
458 cout<< "PID procedure(+decays) "<< kaf/kaal*100 <<" %"<<endl;
459 cout<< "Contamination "<< kan/ka*100 <<" %"<<endl;
460 cout<<endl;
461 cout<< "Protons in 45-135 deg. "<< pral <<" (100%)"<< endl;
462 cout<< "Protons that have track "<< prtrack/pral*100 <<" %"<<endl;
463 cout<< "Magnetic field "<< prmag/pral*100 <<" %"<<endl;
464 cout<< "Geometry efficiency "<< prgeom/pral*100 <<" %"<<endl;
465 cout<< "PID procedure "<< prf/pral*100 <<" %"<<endl;
466 cout<< "Contamination "<< prn/pr*100 <<" %"<<endl;
467 cout<<endl;
468 cout<< "All part. in 45-135 deg. "<< pial+kaal+pral <<" (100%)"<< endl;
469 cout<< "All part. that have track "<< (pitrack+katrack+prtrack)/(pial+kaal+pral)*100 <<" %"<<endl;
470 cout<< "Magnetic field "<< (pimag+kamag+prmag)/(pial+kaal+pral)*100 <<" %"<<endl;
471 cout<< "Geometry efficiency "<< (pigeom+kageom+prgeom)/(pial+kaal+pral)*100 <<" %"<<endl;
472 cout<< "PID procedure "<< (pif+kaf+prf)/(pial+kaal+pral)*100 <<" %"<<endl;
473 cout<< "Contamination "<< (pin+kan+prn)/(pi+ka+pr)*100 <<" %"<<endl;
474 cout<<endl;
475
476 TCanvas *pidCanvas=0;
477 TCanvas *momvsmassCanvas=0;
478 TPad *tp=0;
479 TPad *pad1=0;
480 TPad *pad2=0;
481 TPad *pad3=0;
482 TPad *pad4=0;
483 TPad *pad5=0;
484 TPad *pad6=0;
485 TPad *pad7=0;
486 TPad *pad8=0;
487
488 //////////////////////// For fTask 1 ///////////////////////////
489 if (fTask==1) {
490 if (strstr(eventType,"pp")){
491 eleff->Divide(elall);
492 }
493 pieff->Divide(piall);
494 kaeff->Divide(kaall);
495 preff->Divide(prall);
496 pit->Divide(piall);
497 kat->Divide(kaall);
498 prt->Divide(prall);
499 pig->Divide(piall);
500 kag->Divide(kaall);
501 prg->Divide(prall);
502 if (strstr(eventType,"pp")){
503 elcon->Divide(elid);
504 }
505 picon->Divide(piid);
506 kacon->Divide(kaid);
507 prcon->Divide(prid);
508 //Create a canvas, set the view range, show histograms
509 if (indexOfFile==0) {
510 pidCanvas = new TCanvas("pidCanvas","PID ",10,100,800,500);
511 pidCanvas->SetBorderMode(0);
512 pidCanvas->SetBorderSize(0);
513 pidCanvas->SetFillColor(0);
514 pidCanvas->SetFillStyle(0);
515 if (strstr(outputmode,"visual")) pidCanvas->Draw();
516 Float_t pxs=0.25+0.125; //X size of pad
517 Float_t pys=0.5+0.055; //y size of pad
518 tp = new TPad("histo","Histograms",.1,.1,.9,.9);
519 if (strstr(eventType,"Pb-Pb")){
520 //pad1 = new TPad("pad1","electron efficiency",0.,.5-.055,0.+pxs,.5-.055+pys-.00001,0,0,0);
521 pad2 = new TPad("pad2","pion efficiency",0.,0.5-.055,0.+pxs,0.5-.055+pys-.00001,0,0,0);
522 pad3 = new TPad("pad3","kaon efficiency",0.3,0.5-.055,0.3+pxs,0.5-.055+pys-.00001,0,0,0);
523 pad4 = new TPad("pad4","proton efficiency",0.6,0.5-.055,0.6+pxs,0.5-.055+pys-.00001,0,0,0);
524 //pad5 = new TPad("pad5","electron contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
525 pad6 = new TPad("pad6","pion contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
526 pad7 = new TPad("pad7","kaon contamination",.3,0.,0.3+pxs,0.+pys,0,0,0);
527 pad8 = new TPad("pad8","proton contamination",.6,0.,0.6+pxs,0.+pys,0,0,0);
528 }
529
530 if (strstr(eventType,"pp")){
531 pad1 = new TPad("pad1","electron efficiency",0.,.5-.055,0.25+0.045,1.,0,0,0);
532 pad2 = new TPad("pad2","pion efficiency",0.25-0.015,0.5-.055,0.5+0.03,1.,0,0,0);
533 pad3 = new TPad("pad3","kaon efficiency",0.5-0.03,0.5-.055,0.75+0.015,1.,0,0,0);
534 pad4 = new TPad("pad4","proton efficiency",0.75-0.045,0.5-.055,1.,1.,0,0,0);
535 pad5 = new TPad("pad5","electron contamination",0.,0.,.25+.045,.5+.055,0,0,0);
536 pad6 = new TPad("pad6","pion contamination",.25-.015,0.,.5+.03,.5+.055,0,0,0);
537 pad7 = new TPad("pad7","kaon contamination",.5-.03,0.,.75+.015,.5+.055,0,0,0);
538 pad8 = new TPad("pad8","proton contamination",.75-.045,0.,1.,.5+.055,0,0,0);
539 }
540
541 gStyle->SetOptStat(0);
542 tp->SetFillStyle(0);
543 tp->SetFillColor(0);
544 tp->SetBorderSize(0);
545 pidCanvas->cd();
546 TText *text1= new TText(.1,.2,"Contamination Efficiency");
547 text1->SetTextAngle(90);
548 if (strstr(outputmode,"visual")) text1->Draw();
549 //tp->DrawText(.3,.0,"p (GeV/c");
550 pidCanvas->cd();
551 TText *text2= new TText(.8,.0,"p (GeV/c)");
552 if (strstr(outputmode,"visual")) {
553 text2->Draw();
554 tp->Draw();
555 }
556 }
557
558
559 if (strstr(eventType,"pp")){
560 pad1->SetFillStyle(0);
561 pad1->SetFillColor(10);
562 tp->cd();
563 if (strstr(outputmode,"visual")) pad1->Draw();
564 pad1->cd();
565 //eleff->SetLineWidth(15);
566 eleff->SetLineWidth(3);
567 eleff->SetMaximum(1.);
568 if (indexOfFile==0) {
569 //eleff->SetFillColor(33);
570 //eleff->SetFillColor(30);
571 //eleff->SetFillColor(0);
572 //eleff->SetLineColor(4);
573 eleff->SetLineColor(1);
574 if (strstr(outputmode,"visual")) eleff->Draw();}
575 else {
576 eleff->SetFillStyle(0);
577 eleff->SetFillColor(30);
578 if (indexOfFile==2) {
579 eleff->SetLineColor(3);
580 eleff->SetLineWidth(3);
581 } else {
582 //eleff->SetLineColor(2);
583 eleff->SetLineColor(1);
584 eleff->SetLineStyle(2);}
585 if (strstr(outputmode,"visual")) eleff->Draw("same");}
586 // eleff->Fit("pol1");
587 TPaveLabel *ellab = new TPaveLabel(.42,.85,.52,1.05,"e");
588 if (strstr(outputmode,"visual")) ellab->Draw();
589 }
590
591 pad2->SetFillStyle(0);
592 pad2->SetFillColor(10);
593 tp->cd();
594 if (strstr(outputmode,"visual")) pad2->Draw();
595 pad2->cd();
596 pieff->SetLineWidth(3);
597 pieff->SetMaximum(1.);
598 if (indexOfFile==0) {
599 pieff->SetLineColor(1);
600 if (strstr(outputmode,"visual")) pieff->Draw();
601 } else {
602 pieff->SetFillStyle(0);
603 pieff->SetFillColor(30);
604 if (indexOfFile==1) {
605 pieff->SetLineStyle(2);
606 } else if (indexOfFile==2) {
607 pieff->SetLineStyle(3);
608 } else {
609 pieff->SetLineStyle(4);}
610 if (strstr(outputmode,"visual")) pieff->Draw("same");}
611 TPaveLabel *pilab = new TPaveLabel(1.7,.85,2.2,1.05,"#pi");
612 if (strstr(outputmode,"visual")) pilab->Draw();
613
614 pad3->SetFillStyle(0);
615 pad3->SetFillColor(10);
616 tp->cd();
617 if (strstr(outputmode,"visual")) pad3->Draw();
618 pad3->cd();
619 kaeff->SetLineWidth(3);
620 kaeff->SetMaximum(1.);
621 if (indexOfFile==0) {
622 kaeff->SetLineColor(1);
623 if (strstr(outputmode,"visual")) kaeff->Draw();
624 } else {
625 kaeff->SetFillStyle(0);
626 kaeff->SetFillColor(30);
627 if (indexOfFile==1) {
628 kaeff->SetLineStyle(2);
629 } else if (indexOfFile==2) {
630 kaeff->SetLineStyle(3);
631 } else {
632 kaeff->SetLineStyle(4);}
633 if (strstr(outputmode,"visual")) kaeff->Draw("same");}
634 TPaveLabel *kalab = new TPaveLabel(1.7,.85,2.2,1.05,"K");
635 if (strstr(outputmode,"visual")) kalab->Draw();
636
637 pad4->SetFillStyle(0);
638 pad4->SetFillColor(10);
639 tp->cd();
640 if (strstr(outputmode,"visual")) pad4->Draw();
641 pad4->cd();
642 preff->SetLineWidth(3);
643 preff->SetMaximum(1.);
644 if (indexOfFile==0) {
645 preff->SetLineColor(1);
646 if (strstr(outputmode,"visual")) preff->Draw();
647 } else {
648 preff->SetFillStyle(0);
649 preff->SetFillColor(30);
650 if (indexOfFile==1) {
651 preff->SetLineStyle(2);
652 } else if (indexOfFile==2) {
653 preff->SetLineStyle(3);
654 } else {
655 preff->SetLineStyle(4);}
656 if (strstr(outputmode,"visual")) preff->Draw("same");}
657 TPaveLabel *prlab = new TPaveLabel(3.2,.85,4.1,1.05,"p");
658 if (strstr(outputmode,"visual")) prlab->Draw();
659
660 if (strstr(eventType,"pp")){
661 pad5->SetFillStyle(0);
662 pad5->SetFillColor(10);
663 tp->cd();
664 if (strstr(outputmode,"visual")) pad5->Draw();
665 pad5->cd();
666 //elcon->SetLineWidth(5);
667 elcon->SetLineWidth(3);
668 elcon->SetMaximum(1.);
669 if (indexOfFile==0) {
670 //elcon->SetFillColor(33);
671 //elcon->SetFillColor(30);
672 //elcon->SetLineColor(4);
673 elcon->SetLineColor(1);
674 if (strstr(outputmode,"visual")) elcon->Draw();}
675 else {
676 elcon->SetFillStyle(4000);
677 elcon->SetFillColor(30);
678 if (indexOfFile==2) {
679 elcon->SetLineColor(3);
680 elcon->SetLineWidth(3);
681 } else {
682 elcon->SetLineColor(2);
683 elcon->SetLineStyle(2);}
684 if (strstr(outputmode,"visual")) elcon->Draw("same");}
685 }
686
687
688 pad6->SetFillStyle(0);
689 pad6->SetFillColor(10);
690 tp->cd();
691 if (strstr(outputmode,"visual")) pad6->Draw();
692 pad6->cd();
693 picon->SetLineWidth(3);
694 picon->SetMaximum(1.);
695 if (indexOfFile==0) {
696 picon->SetLineColor(1);
697 if (strstr(outputmode,"visual")) picon->Draw();}
698 else {
699 picon->SetFillStyle(0);
700 picon->SetFillColor(30);
701 if (indexOfFile==1) {
702 picon->SetLineStyle(2);
703 } else if (indexOfFile==2) {
704 picon->SetLineStyle(3);
705 } else {
706 picon->SetLineStyle(4);
707 TLine* line;
708 line = new TLine(0.2,0.85,0.9,0.85);
709 line->SetLineStyle(2);
710 line->SetLineWidth(1);
711 if (strstr(outputmode,"visual")) line->Draw();
712 line = new TLine(0.2,0.65,0.9,0.65);
713 line->SetLineWidth(2);
714 if (strstr(outputmode,"visual")) line->Draw();
715 line = new TLine(0.2,0.45,0.9,0.45);
716 line->SetLineStyle(3);
717 line->SetLineWidth(1);
718 if (strstr(outputmode,"visual")) line->Draw();
719 line = new TLine(0.2,0.25,0.9,0.25);
720 line->SetLineStyle(4);
721 line->SetLineWidth(1);
722 if (strstr(outputmode,"visual")) line->Draw();
723 TPaveLabel *pl = new TPaveLabel(1.1,0.8,1.9,0.9,"100 ps","br");
724 pl->SetFillColor(18);
725 pl->SetTextSize(0.99);
726 if (strstr(outputmode,"visual")) pl->Draw();
727 pl = new TPaveLabel(1.1,0.6,1.9,0.7,"150 ps","br");
728 pl->SetFillColor(18);
729 pl->SetTextSize(0.99);
730 if (strstr(outputmode,"visual")) pl->Draw();
731 pl = new TPaveLabel(1.1,0.4,1.9,0.5,"200 ps","br");
732 pl->SetFillColor(18);
733 pl->SetTextSize(0.99);
734 if (strstr(outputmode,"visual")) pl->Draw();
735 pl = new TPaveLabel(1.1,0.2,1.9,0.3,"300 ps","br");
736 pl->SetFillColor(18);
737 pl->SetTextSize(0.99);
738 if (strstr(outputmode,"visual")) pl->Draw();
739 }
740 if (strstr(outputmode,"visual")) picon->Draw("same");}
741
742 pad7->SetFillStyle(0);
743 pad7->SetFillColor(10);
744 tp->cd();
745 if (strstr(outputmode,"visual")) pad7->Draw();
746 pad7->cd();
747 kacon->SetLineWidth(3);
748 kacon->SetMaximum(1.);
749 if (indexOfFile==0) {
750 kacon->SetLineColor(1);
751 if (strstr(outputmode,"visual")) kacon->Draw();}
752 else {
753 kacon->SetFillStyle(0);
754 kacon->SetFillColor(30);
755 if (indexOfFile==1) {
756 kacon->SetLineStyle(2);
757 } else if (indexOfFile==2) {
758 kacon->SetLineStyle(3);
759 } else {
760 kacon->SetLineStyle(4);}
761 if (strstr(outputmode,"visual")) kacon->Draw("same");}
762
763 pad8->SetFillStyle(0);
764 pad8->SetFillColor(10);
765 tp->cd();
766 if (strstr(outputmode,"visual")) pad8->Draw();
767 pad8->cd();
768 prcon->SetLineWidth(3);
769 prcon->SetMaximum(1.);
770 if (indexOfFile==0) {
771 prcon->SetLineColor(1);
772 if (strstr(outputmode,"visual")) prcon->Draw();}
773 else {
774 prcon->SetFillStyle(0);
775 prcon->SetFillColor(30);
776 if (indexOfFile==1) {
777 prcon->SetLineStyle(2);
778 } else if (indexOfFile==2) {
779 prcon->SetLineStyle(3);
780 } else {
781 prcon->SetLineStyle(4);}
782 if (strstr(outputmode,"visual")) prcon->Draw("same");}
783
784 if (indexOfFile==0) {
785 momvsmassCanvas = new TCanvas("momvsmassCanvas","Momentum vs mass disribution",500,10,700,700);
786 momvsmassCanvas->SetFillColor(0);
787 momvsmassCanvas->SetBorderMode(0);
788 gPad->SetFillStyle(0);
789 gPad->SetBorderMode(0);
790 gPad->SetFillColor(0);
791 // gStyle->SetOptStat(11);
792 if (numfile==4) momvsmassCanvas->Divide(1,2,0,0);
793 } else if (indexOfFile==1 && numfile == 4) {
794 momvsmassCanvas->cd(1);
795 TPaveLabel *pl = new TPaveLabel(-0.0376218,-3.03586,0.0979277,-2.70158,"100 ps","br");
796 pl->SetFillColor(18);
797 pl->SetTextSize(0.99);
798 if (strstr(outputmode,"visual")) pl->Draw();
799 } else if (indexOfFile==3 && numfile == 4) {
800 momvsmassCanvas->cd(2);
801 TPaveLabel *pl = new TPaveLabel(-0.0591866,-3.17077,0.076363,-2.86857,"300 ps","br");
802 pl->SetFillColor(18);
803 pl->SetTextSize(0.99);
804 if (strstr(outputmode,"visual")) pl->Draw();
805 }
806 if (numfile !=4) momvsmassCanvas->cd();
807 if (numfile !=4 || indexOfFile==1 || indexOfFile==3) {
808 // hpi->PaintStat2(01);
809 hpi->SetMarkerColor(5);
810 if (strstr(outputmode,"visual")) hpi->Draw();
811 if(strstr(eventType,"pp")){
812 hel->SetMarkerColor(2);
813 if (strstr(outputmode,"visual")) hel->Draw("same");
814 }
815 hka->SetMarkerColor(4);
816 if (strstr(outputmode,"visual")) hka->Draw("same");
817 hpr->SetMarkerColor(3);
818 if (strstr(outputmode,"visual")) hpr->Draw("same");
819 if (strstr(outputmode,"visual")) {
820 fkaon->Draw();
821 fproton->Draw();
822 if(strstr(eventType,"pp")){
823 felectron->Draw();
824 fpion->Draw();
825 }
826 }
827 if(strstr(eventType,"pp")){
828 //TPaveText *ep = new TPaveText(-0.05,-0.5,0.05,-0.3);
829 //ep->AddText("e");
830 TPaveLabel *ep = new TPaveLabel(.42,.85,.52,1.05,"e");
831 if (strstr(outputmode,"visual")) ep->Draw();
832 }
833
834 TPaveText *pip = new TPaveText(0.15,-1.0,0.25,-0.8);
835 pip->AddText("#pi");
836 if (strstr(outputmode,"visual")) pip->Draw();
837 TPaveText *kp = new TPaveText(0.5,-2.0,0.6,-1.8);
838 kp->AddText("K");
839 if (strstr(outputmode,"visual")) kp->Draw();
840 TPaveText *prp = new TPaveText(0.9,-2.7,1.0,-2.5);
841 prp->AddText("p");
842 if (strstr(outputmode,"visual")) prp->Draw();
843 // TText *text2= new TText(.59,.06,"Momentum");
844 // text1->SetTextAngle(90);
845 // text1->Draw();
846 //pidCanvas->DrawText(.1,.2,"Contamination Efficiency");
847 momvsmassCanvas->Update();
848 if(strstr(outputsavemode,"asC")) momvsmassCanvas->Print("momvsmassCanvas.C");
849 if(strstr(outputsavemode,"asEPS")) momvsmassCanvas->Print("momvsmassCanvas.eps");
850 pidCanvas->cd();
851 pidCanvas->Update();
852 if(strstr(outputsavemode,"asC")) pidCanvas->Print("pidCanvas.C");
853 if(strstr(outputsavemode,"asEPS")) pidCanvas->Print("pidCanvas.eps");
854 char outFileName[100];
855 strcpy(outFileName,"histos");
856 strcat(outFileName,foutfileName);
857 TFile *houtfile = new TFile(outFileName,"recreate");
858 houtfile->cd();
859 // saving canvas
860 pidCanvas->Write(0,TObject::kOverwrite);
861 momvsmassCanvas->Write(0,TObject::kOverwrite);
862 // saving histos
863 pit->Write(0,TObject::kOverwrite);
864 pig->Write(0,TObject::kOverwrite);
865 pieff->Write(0,TObject::kOverwrite);
866 picon->Write(0,TObject::kOverwrite);
867 piid->Write(0,TObject::kOverwrite);
868 piall->Write(0,TObject::kOverwrite);
869 pigen->Write(0,TObject::kOverwrite);
870 kat->Write(0,TObject::kOverwrite);
871 kag->Write(0,TObject::kOverwrite);
872 kaeff->Write(0,TObject::kOverwrite);
873 kaid->Write(0,TObject::kOverwrite);
874 kaall->Write(0,TObject::kOverwrite);
875 kagen->Write(0,TObject::kOverwrite);
876 kacon->Write(0,TObject::kOverwrite);
877 prt->Write(0,TObject::kOverwrite);
878 prg->Write(0,TObject::kOverwrite);
879 preff->Write(0,TObject::kOverwrite);
880 prcon->Write(0,TObject::kOverwrite);
881 prid->Write(0,TObject::kOverwrite);
882 prall->Write(0,TObject::kOverwrite);
883 prgen->Write(0,TObject::kOverwrite);
884 // 2-D
885 hpi->Write(0,TObject::kOverwrite);
886 hka->Write(0,TObject::kOverwrite);
887 hpr->Write(0,TObject::kOverwrite);
888 // electron histos
889 if (hel && eleff && elcon && elid && elall){
890 hel->Write(0,TObject::kOverwrite);
891 eleff->Write(0,TObject::kOverwrite);
892 elcon->Write(0,TObject::kOverwrite);
893 elid->Write(0,TObject::kOverwrite);
894 elall->Write(0,TObject::kOverwrite);
895 }
896 cout << "file " << houtfile << " has been created" << endl;
897 cout << "it contains PID histos and canvas" << endl;
898 houtfile->Close();
899 houtfile->Write(0,TObject::kOverwrite);
900 }
901 }
902
903 if (strstr(outputmode,"novisual")){
904 // free used memory
905 delete pit ; pit=0;
906 delete pig ; pig=0;
907 delete pieff; pieff=0;
908 delete picon; picon=0;
909 delete piid ; piid=0;
910 delete piall; piall=0;
911 delete pigen; pigen=0;
912 delete kat ; kat=0;
913 delete kag ; kag=0;
914 delete kaeff; kaeff=0;
915 delete kaid; kaid=0;
916 delete kaall; kaall=0;
917 delete kagen; kagen=0;
918 delete kacon; kacon=0;
919 delete prt; prt=0;
920 delete prg; prg=0;
921 delete preff; preff=0;
922 delete prcon; prcon=0;
923 delete prid; prid=0;
924 delete prall; prall=0;
925 delete prgen; prgen=0;
926 // 2-D
927 delete hpi; hpi=0;
928 delete hka; hka=0;
929 delete hpr; hpr=0;
930 if (hel){
931 delete hel;
932 hel=0;
933 }
934 if (eleff){
935 delete eleff;
936 eleff=0;
937 }
938 if (elcon){
939 delete elcon;
940 elcon=0;
941 }
942 if (elid){
943 delete elid;
944 elid=0;
945 }
946 if (elall){
947 delete elall;
948 elall=0;
949 }
950 }
951}
952
953
954//__________________________________________________________________
955Bool_t AliTOFPID::operator==( AliTOFPID const & tofrec)const
956{
957 // dummy version of Equal operator.
958 // requested by coding conventions
959 return kTRUE;
960
961}