81e7a0a7990613d266354000675ccc37bfd71a18
[u/mrichter/AliRoot.git] / TOF / AliTOFPID.cxx
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 #include "TStyle.h"
54 #include "TTask.h"
55 #include "TTree.h"
56 #include "TSystem.h"
57 #include "TFile.h"
58 #include "TCanvas.h"
59 #include "TPad.h"
60 #include "TText.h"
61 #include "TLine.h"
62 #include "TPaveLabel.h"
63 #include "TPaveText.h"
64 #include "TFile.h"
65 #include <TF1.h>
66 #include <TF2.h>
67 #include "TTask.h"
68 #include "TTree.h"
69 #include "TSystem.h"
70 #include "TROOT.h"
71 #include "TFolder.h"
72 #include "TNtuple.h"
73 #include "TLeaf.h"
74
75 #include "AliConst.h"
76 #include "AliTOFGeometry.h"
77 #include "AliTOFPID.h"
78
79 #include <stdlib.h>
80 #include <Riostream.h>
81 #include <Riostream.h>
82
83 ClassImp(AliTOFPID)
84
85 //____________________________________________________________________________ 
86   AliTOFPID::AliTOFPID():TTask("AliTOFPID","") 
87 {
88   // default ctor - set the pointer member vars to zero
89   felectron = 0;
90   fpion     = 0;
91   fkaon     = 0;
92   fproton   = 0;
93   fcut      = 0;
94   fhfile    = 0;
95   fNtuple   = 0;
96   fgen      = 0;
97   foutfileName  = 0;
98
99 }
100            
101 //____________________________________________________________________________ 
102   AliTOFPID::AliTOFPID(char* headerFile, char *cutsFile, const Option_t* opt):TTask("AliTOFPID","") 
103 {
104   felectron = 0;
105   fpion     = 0;
106   fkaon     = 0;
107   fproton   = 0;
108   fhfile = TFile::Open(headerFile); // connect file with ntuple
109   fcut = TFile::Open(cutsFile); // connect file for cuts
110   foutfileName=headerFile;
111   fNtuple   = 0;
112   fgen      = 0;
113
114   Init(opt);
115   // add Task to //root/Tasks folder
116   TTask * roottasks = (TTask*)gROOT->GetRootFolder()->FindObject("Tasks") ; 
117   roottasks->Add(this) ; 
118
119 }
120 //____________________________________________________________________________ 
121 void AliTOFPID::Init(const Option_t* opt)
122 {
123   if(strstr(opt,"pp")){ 
124     if(fcut->GetKey("electron")) felectron = (TCutG*)fcut->Get("electron");
125     fcut->Print();
126     if(fcut->GetKey("pion")) fpion = (TCutG*)fcut->Get("pion");
127     fcut->Print();
128   }
129   if(fcut->GetKey("kaon")) fkaon = (TCutG*)fcut->Get("kaon");
130   fcut->Print();
131   if(fcut->GetKey("proton")) fproton = (TCutG*)fcut->Get("proton");
132
133   gFile->ls();
134   fNtuple= (TNtuple*)fhfile->Get("Ntuple"); // get ntuple from file
135   Int_t nvar = fNtuple->GetNvar(); cout <<"N of var.="<< nvar << endl;
136   fNtuple->GetEvent(0);
137
138 }
139
140 //____________________________________________________________________________ 
141   AliTOFPID::~AliTOFPID()
142 {
143   //
144   // dtor (free used memory)
145   //
146
147   if (felectron)
148     {
149       delete felectron;
150       felectron = 0;
151     }
152
153   if (fpion)
154     {
155       delete fpion;
156       fpion = 0;
157     }
158
159   if (fkaon)
160     {
161       delete fkaon;
162       fkaon = 0;
163     }
164
165   if (fproton)
166     {
167       delete fproton;
168       fproton = 0;
169     }
170
171   if (fcut)
172     {
173       delete fcut;
174       fcut = 0;
175     }
176
177
178   if (fhfile)
179     {
180       delete fhfile;
181       fhfile = 0;
182     }
183
184
185   if (fNtuple)
186     {
187       delete fNtuple;
188       fNtuple = 0;
189     }
190
191   if (fgen)
192     {
193       delete fgen;
194       fgen = 0;
195     }
196
197   if (foutfileName)
198     {
199       delete foutfileName;
200       foutfileName = 0;
201     }
202 }
203
204
205 //____________________________________________________________________________
206 void AliTOFPID::Exec(const Option_t *eventType, const Option_t *outputmode, const Option_t *outputsavemode) 
207
208   //
209   // Performs PID for TOF detector
210   // 
211
212   fTask=1;
213   TAxis *xaxis;
214   ////////// Create histograms /////////////////
215   // for electron only in pp case
216   TH1F* eleff=0;
217   TH1F* eleffls=0;
218   TH1F *elcon=0;
219   TH1F *elid=0;
220   TH1F *elmatch=0;
221   TH1F *elall=0;
222
223   if(strstr(eventType,"pp")){
224     eleff = new TH1F("eleff","",10,0,0.6);
225     xaxis=eleff->GetYaxis();
226     xaxis->SetLabelSize(.08);
227     eleffls = new TH1F("eleffls","",10,0,0.6);
228     xaxis=eleffls->GetYaxis();
229     xaxis->SetLabelSize(.08);
230     elcon = new TH1F("elcon","",10,0,0.6);
231     xaxis=elcon->GetXaxis();
232     xaxis->SetLabelSize(.09);
233     xaxis=elcon->GetYaxis();
234     xaxis->SetLabelSize(.08);
235     elid = new TH1F("elid","Identified electrons",10,0,0.6);
236     elmatch = new TH1F("elmatch","N(e)",10,0,0.6);
237     elall = new TH1F("elall","Electrons",10,0,0.6);
238   }
239
240   // pions
241   TH1F *pit  = new TH1F("pit","",15,0,2.5); //part. with tracks
242   TH1F *pig  = new TH1F("pig","",15,0,2.5); //part. in geometry acceptance
243   TH1F *pieff = new TH1F("pieff","",15,0,2.5); //efficiency
244   TH1F *pieffls = new TH1F("pieffls","",15,0,2.5); //efficiency (last step)
245   xaxis=pieff->GetYaxis();
246   xaxis->SetLabelSize(.08);
247   xaxis=pieffls->GetYaxis();
248   xaxis->SetLabelSize(.08);
249   TH1F *picon = new TH1F("picon","",15,0,2.5); //contamination
250   xaxis=picon->GetXaxis();
251   xaxis->SetLabelSize(.09);
252   xaxis=picon->GetYaxis();
253   xaxis->SetLabelSize(.08);
254   TH1F *piid  = new TH1F("piid","Identified pions",15,0,2.5);
255   TH1F *piall = new TH1F("piall","Pions",15,0,2.5);
256   TH1F *pimatch = new TH1F("pimatch","N(Pions)",15,0,2.5);
257   TH1F *pigen = new TH1F("pigen","Pions",15,0,2.5);
258   xaxis=pigen->GetXaxis();
259   xaxis->SetLabelSize(.09);
260   pigen->SetXTitle("P?t! (GeV/c)");
261   xaxis->SetTitleSize(.09);
262   xaxis=pigen->GetYaxis();
263   xaxis->SetLabelSize(.08);
264   //pigen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
265   xaxis->SetTitleSize(.09);
266
267   // kaons
268   TH1F *kat  = new TH1F("kat","",15,0,2.5);
269   TH1F *kag  = new TH1F("kag","",15,0,2.5);
270   TH1F *kaeff = new TH1F("kaeff","",15,0,2.5);
271   xaxis=kaeff->GetYaxis();
272   xaxis->SetLabelSize(.08);
273   TH1F *kaeffls = new TH1F("kaeffls","",15,0,2.5);
274   xaxis=kaeffls->GetYaxis();
275   xaxis->SetLabelSize(.08);
276   TH1F *kacon = new TH1F("kacon","",15,0,2.5);
277   xaxis=kacon->GetXaxis();
278   xaxis->SetLabelSize(.09);
279   xaxis=kacon->GetYaxis();
280   xaxis->SetLabelSize(.08);
281   TH1F *kaid  = new TH1F("kaid","Identified kaons",15,0,2.5);
282   TH1F *kamatch  = new TH1F("kamatch","N(K)",15,0,2.5);
283   TH1F *kaall = new TH1F("kaall","Kaons",15,0,2.5);
284   TH1F *kagen = new TH1F("kagen","Kaons",15,0,2.5);
285   xaxis=kagen->GetXaxis();
286   xaxis->SetLabelSize(.09);
287   kagen->SetXTitle("P?t! (GeV/c)");
288   xaxis->SetTitleSize(.09);
289   xaxis=kagen->GetYaxis();
290   xaxis->SetLabelSize(.08);
291   //kagen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
292   xaxis->SetTitleSize(.09);
293
294   // protons
295   TH1F *prt  = new TH1F("prt","",15,0,4.4);
296   TH1F *prg  = new TH1F("prg","",15,0,4.4);
297   TH1F *preff = new TH1F("preff","",15,0,4.4);
298   xaxis=preff->GetYaxis();
299   xaxis->SetLabelSize(.08);
300   TH1F *preffls = new TH1F("preffls","",15,0,4.4);
301   xaxis=preffls->GetYaxis();
302   xaxis->SetLabelSize(.08);
303   TH1F *prcon = new TH1F("prcon","",15,0,4.4);
304   xaxis=prcon->GetXaxis();
305   xaxis->SetLabelSize(.09);
306   xaxis=prcon->GetYaxis();
307   xaxis->SetLabelSize(.08);
308   TH1F *prid  = new TH1F("prid","Identified protons",15,0,4.4);
309   TH1F *prmatch  = new TH1F("prmatch","N(p)",15,0,4.4);
310   TH1F *prall = new TH1F("prall","Protons",15,0,4.4);
311   TH1F *prgen = new TH1F("prgen","Protons",15,0,4.4);
312   xaxis=prgen->GetXaxis();
313   xaxis->SetLabelSize(.09);
314   prgen->SetXTitle("P?t! (GeV/c)");
315   xaxis->SetTitleSize(.09);
316   xaxis=prgen->GetYaxis();
317   xaxis->SetLabelSize(.08);
318   //prgen->SetYTitle("1/P?t!dN/dP?t! (GeV/c)^-2!");
319   xaxis->SetTitleSize(.09);
320
321   // 2-D histos (extrapolated mass vs momentum)
322   TH2F* hel=0;
323   if(strstr(eventType,"pp")){
324     hel = new TH2F("hel","",1000,-.2,1.2,1000,-4.2,0.);
325     hel->SetXTitle("Mass (GeV/c^{2})");
326     hel->SetYTitle("Momentum (GeV/c)");
327   }
328   TH2F *hpi = new TH2F("hpi","",1000,-.2,1.2,1000,-4.2,0.);
329   hpi->SetXTitle("Mass (GeV/c^{2})");
330   hpi->SetYTitle("Momentum (GeV/c)");
331   TH2F *hka = new TH2F("hka","",1000,-.2,1.2,1000,-4.2,0.);
332   hka->SetXTitle("Mass (GeV/c^{2})");
333   hka->SetYTitle("Momentum (GeV/c)");
334   TH2F *hpr = new TH2F("hpr","",1000,-.2,1.2,1000,-4.2,0.);
335   hpr->SetXTitle("Mass (GeV/c^{2})");
336   hpr->SetYTitle("Momentum (GeV/c)");
337   
338
339   fhfile->cd();
340   Int_t nparticles = (Int_t)fNtuple->GetEntries();
341   cout << " Number of nparticles =" << nparticles << endl;
342   if (nparticles <= 0) return;
343
344   Float_t ka=0, pi=0, pr=0, kaal=0, pial=0, pral=0;
345   Float_t pitrack=0, pimag=0, pigeom=0;
346   Float_t katrack=0, kamag=0, kageom=0;
347   Float_t prtrack=0, prmag=0, prgeom=0;
348   Float_t pif=0, kaf=0, prf=0, pin=0, kan=0, prn=0;
349   Float_t px, py, pz, x, y, z, mass;
350   Int_t event, matc, imam, pdgcode;
351   Int_t indexOfFile=0, numfile=0;
352   //////// Loop over tracks (particles)///////////////////////
353   
354   for (Int_t i=0; i < nparticles; i++) {
355     fNtuple->GetEvent(i);
356     event=(Int_t)(fNtuple->GetLeaf("event")->GetValue());
357     pdgcode=(Int_t)(fNtuple->GetLeaf("ipart")->GetValue());
358     mass=fNtuple->GetLeaf("mext")->GetValue(0);
359     matc=(Int_t)(fNtuple->GetLeaf("matc")->GetValue(0));
360     imam=(Int_t)(fNtuple->GetLeaf("imam")->GetValue(0));
361     px=fNtuple->GetLeaf("pxvtx")->GetValue(0);
362     py=fNtuple->GetLeaf("pyvtx")->GetValue(0);
363     pz=fNtuple->GetLeaf("pzvtx")->GetValue(0);
364     x=fNtuple->GetLeaf("xvtx")->GetValue(0);
365     y=fNtuple->GetLeaf("yvtx")->GetValue(0);
366     z=fNtuple->GetLeaf("zvtx")->GetValue(0);
367     Float_t pvtx=TMath::Sqrt(px*px+py*py+pz*pz);
368     Float_t ptvtx=TMath::Sqrt(px*px+py*py);
369     Float_t mt=0.;
370     Bool_t isSelected=(imam == 0 && pz !=0 && TMath::ATan(TMath::Abs(ptvtx/pz))>TMath::Pi()*45./180.);
371     Int_t abspdgcode=TMath::Abs(pdgcode);
372     switch(abspdgcode){
373     case 321:
374       if(isSelected && (matc==3 || matc==4)) kamatch->Fill(pvtx);
375       mt=TMath::Sqrt(AliTOFGeometry::KaonMass()*AliTOFGeometry::KaonMass()+px*px+py*py);
376       break;
377     case 2212:
378       if(isSelected && (matc==2 || matc==3 || matc==4)) prmatch->Fill(pvtx);
379       mt=TMath::Sqrt(AliTOFGeometry::ProtonMass()*AliTOFGeometry::ProtonMass()+px*px+py*py);
380       break;
381     case 11:
382       if(strstr(eventType,"pp") && (matc==3 || matc==4)) elmatch->Fill(pvtx); //  as in kaon case
383       mt=TMath::Sqrt(AliTOFGeometry::ElectronMass()*AliTOFGeometry::ElectronMass()+px*px+py*py);
384       break;
385     default:
386       if(isSelected && matc>0) pimatch->Fill(pvtx);
387       mt=TMath::Sqrt(AliTOFGeometry::PionMass()*AliTOFGeometry::PionMass()+px*px+py*py);
388       break;
389     }
390
391     if (isSelected)
392       {//only primary +/-45  
393         if (fkaon->IsInside(mass,-pvtx) && matc>2) {
394           ka++;
395           if (fTask!=2) kaid->Fill(pvtx); else {kaid->Fill(ptvtx);}
396           if (TMath::Abs(pdgcode)==321) {kaf++; kaeff->Fill(pvtx); kaeffls->Fill(pvtx);} else {kan++; kacon->Fill(pvtx);}
397         } else if (fproton->IsInside(mass,-pvtx) && matc>1) {
398           pr++;
399           if (fTask!=2) prid->Fill(pvtx); else 
400             {prid->Fill(ptvtx);}
401           if (TMath::Abs(pdgcode)==2212) {prf++; preff->Fill(pvtx); preffls->Fill(pvtx);} else {prn++; prcon->Fill(pvtx);}
402         } else  if (strstr(eventType,"pp") && felectron->IsInside(mass,-pvtx) && matc>2) {elid->Fill(pvtx);
403         if (strstr(eventType,"pp") && TMath::Abs(pdgcode)==11) {eleff->Fill(pvtx); eleffls->Fill(pvtx);} else {elcon->Fill(pvtx);}
404         } else if (matc>0) {
405           //||matc==-4&&fpion->IsInside(mass,-pvtx)
406           pi++;
407           if (fTask!=2) piid->Fill(pvtx); else {piid->Fill(ptvtx);}
408           if (TMath::Abs(pdgcode)==211) {pif++; pieff->Fill(pvtx); pieffls->Fill(pvtx);} else {pin++; picon->Fill(pvtx);}
409         }
410
411         //////////////// Normalization histograms ////////////////////
412         if (strstr(eventType,"pp") && TMath::Abs(pdgcode)==11) {
413           if (fTask!=2) elall->Fill(pvtx); else elall->Fill(ptvtx);
414           if (fTask==1) hel->Fill(mass,-pvtx);
415           
416         } else if (TMath::Abs(pdgcode)==211) {
417           pial++;
418           if (matc!=0) {
419             pitrack++; 
420             pit->Fill(pvtx);
421             if (matc!=-1) {
422               pimag++;
423               if (matc>-2 || matc==-4) {
424                 pigeom++;
425                 pig->Fill(pvtx);
426               }
427             }
428           }
429           if (fTask!=2) piall->Fill(pvtx); 
430           else {
431             piall->Fill(ptvtx,1/ptvtx);
432           }
433           if (fTask==1) hpi->Fill(mass,-pvtx); 
434           
435         } else if (TMath::Abs(pdgcode)==321) {
436           kaal++;
437           if (matc!=0) {
438             katrack++;
439             kat->Fill(pvtx);
440             if (matc!=-1) {
441               kamag++;
442               if (matc>-2 || matc==-4) {
443                 kageom++;
444                 kag->Fill(pvtx);
445               }
446             }
447           }
448           if (fTask!=2) kaall->Fill(pvtx); 
449           else {
450             kaall->Fill(ptvtx,1/ptvtx);
451           }
452           if (fTask==1) hka->Fill(mass,-pvtx);
453           
454         } else if (TMath::Abs(pdgcode)==2212) {
455           pral++;
456           if (matc!=0) {
457             prtrack++;
458             prt->Fill(pvtx);
459             if (matc!=-1) {
460               prmag++;
461               if (matc>-2 || matc==-4) {
462                 prgeom++;
463                 prg->Fill(pvtx);
464               }
465             }
466           }
467           if (fTask!=2) prall->Fill(pvtx); 
468           else {
469             prall->Fill(ptvtx,1/ptvtx);
470           }
471           if (fTask==1) hpr->Fill(mass,-pvtx);}
472         
473       }// End of cuts appling
474   }// End of loop over particles
475
476   // display results
477   cout<< "Pions in 45-135 deg.     "<< pial <<" (100%)"<< endl;
478   cout<< "Pions that have track    "<< pitrack/pial*100 <<" %"<<endl;
479   cout<< "Magnetic field           "<< pimag/pial*100 <<" %"<<endl;
480   cout<< "Geometry efficiency      "<< pigeom/pial*100 <<" %"<<endl;
481   cout<< "PID procedure            "<< pif/pial*100 <<" %"<<endl;
482   cout<< "Contamination            "<< pin/pi*100 <<" %"<<endl;
483   cout<<endl;
484   cout<< "Kaons in 45-135 deg.     "<< kaal <<" (100%)"<< endl;
485   cout<< "Kaons that have track    "<< katrack/kaal*100 <<" %"<<endl;
486   cout<< "Magnetic field           "<< kamag/kaal*100 <<" %"<<endl;
487   cout<< "Geometry efficiency      "<< kageom/kaal*100 <<" %"<<endl;
488   cout<< "PID procedure(+decays)   "<< kaf/kaal*100 <<" %"<<endl;
489   cout<< "Contamination            "<< kan/ka*100 <<" %"<<endl;
490   cout<<endl;
491   cout<< "Protons in 45-135 deg.   "<< pral <<" (100%)"<< endl;
492   cout<< "Protons that have track  "<< prtrack/pral*100 <<" %"<<endl;
493   cout<< "Magnetic field           "<< prmag/pral*100 <<" %"<<endl;
494   cout<< "Geometry efficiency      "<< prgeom/pral*100 <<" %"<<endl;
495   cout<< "PID procedure            "<< prf/pral*100 <<" %"<<endl;
496   cout<< "Contamination            "<< prn/pr*100 <<" %"<<endl;
497   cout<<endl;
498   cout<< "All part. in 45-135 deg.  "<< pial+kaal+pral <<" (100%)"<< endl;
499   cout<< "All part. that have track "<< (pitrack+katrack+prtrack)/(pial+kaal+pral)*100 <<" %"<<endl;
500   cout<< "Magnetic field            "<< (pimag+kamag+prmag)/(pial+kaal+pral)*100 <<" %"<<endl;
501   cout<< "Geometry efficiency       "<< (pigeom+kageom+prgeom)/(pial+kaal+pral)*100 <<" %"<<endl;
502   cout<< "PID procedure             "<< (pif+kaf+prf)/(pial+kaal+pral)*100 <<" %"<<endl;
503   cout<< "Contamination             "<< (pin+kan+prn)/(pi+ka+pr)*100 <<" %"<<endl;
504   cout<<endl;
505   
506   TCanvas *pidCanvas=0;   // overall
507   TCanvas *pidCanvasls=0; // last step of PID
508   TCanvas *momvsmassCanvas=0;
509   // overall Efficiency
510   TPad  *tp=0;
511   TPad  *pad1=0;
512   TPad  *pad2=0;
513   TPad  *pad3=0;
514   TPad  *pad4=0;
515   TPad  *pad5=0;
516   TPad  *pad6=0;
517   TPad  *pad7=0;
518   TPad  *pad8=0;
519
520   // last step Efficiency
521   TPad  *tpls=0;
522   TPad  *pad1ls=0;
523   TPad  *pad2ls=0;
524   TPad  *pad3ls=0;
525   TPad  *pad4ls=0;
526   TPad  *pad5ls=0;
527   TPad  *pad6ls=0;
528   TPad  *pad7ls=0;
529   TPad  *pad8ls=0;
530
531   //////////////////////// For fTask 1 ///////////////////////////
532   if (fTask==1) {
533     if (strstr(eventType,"pp")){
534       eleff->Divide(elall);
535       eleffls->Divide(elmatch);
536     }
537     // overall efficiency
538     pieff->Divide(piall);
539     kaeff->Divide(kaall);
540     preff->Divide(prall);
541
542     // last step efficiency
543     pieffls->Divide(pimatch);
544     kaeffls->Divide(kamatch);
545     preffls->Divide(prmatch);
546
547     pit->Divide(piall);
548     kat->Divide(kaall);
549     prt->Divide(prall);
550     pig->Divide(piall);
551     kag->Divide(kaall);
552     prg->Divide(prall);
553     if (strstr(eventType,"pp")){
554       elcon->Divide(elid);
555     }
556     // contamination
557     picon->Divide(piid);
558     kacon->Divide(kaid);
559     prcon->Divide(prid);
560
561     //Create a canvas, set the view range, show histograms
562     // for overall PID
563     if (indexOfFile==0) {
564       // overall Efficiency canvas
565       pidCanvas = new TCanvas("pidCanvas","PID (Overall)",10,100,800,500);
566       pidCanvas->SetBorderMode(0);
567       pidCanvas->SetBorderSize(0);
568       pidCanvas->SetFillColor(0);
569       pidCanvas->SetFillStyle(0);
570
571       // last step Efficiency canvas
572       pidCanvasls = new TCanvas("pidCanvasls","PID (Last Step)",10,100,800,500);
573       pidCanvasls->SetBorderMode(0);
574       pidCanvasls->SetBorderSize(0);
575       pidCanvasls->SetFillColor(0);
576       pidCanvasls->SetFillStyle(0);
577
578       if (strstr(outputmode,"visual")) {
579         pidCanvas->Draw();
580         pidCanvasls->Draw();
581       }
582
583       Float_t pxs=0.25+0.125; //X size of pad
584       Float_t pys=0.5+0.055;  //y size of pad
585       // overall
586       tp   = new TPad("histo","Histograms",.1,.1,.9,.9);
587       // last step
588       tpls = new TPad("histo","Histograms",.1,.1,.9,.9);
589
590       if (strstr(eventType,"Pb-Pb")){
591         // overall efficiency
592         //pad1 = new TPad("pad1","electron efficiency",0.,.5-.055,0.+pxs,.5-.055+pys-.00001,0,0,0);
593         pad2 = new TPad("pad2","pion efficiency",0.,0.5-.055,0.+pxs,0.5-.055+pys-.00001,0,0,0);
594         pad3 = new TPad("pad3","kaon efficiency",0.3,0.5-.055,0.3+pxs,0.5-.055+pys-.00001,0,0,0);
595         pad4 = new TPad("pad4","proton efficiency",0.6,0.5-.055,0.6+pxs,0.5-.055+pys-.00001,0,0,0);
596
597         // contamination
598         //pad5 = new TPad("pad5","electron contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
599         pad6 = new TPad("pad6","pion contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
600         pad7 = new TPad("pad7","kaon contamination",.3,0.,0.3+pxs,0.+pys,0,0,0);
601         pad8 = new TPad("pad8","proton contamination",.6,0.,0.6+pxs,0.+pys,0,0,0);
602
603         // we repeat the same for the last step of PID
604         //pad1ls = new TPad("pad1ls","electron efficiency",0.,.5-.055,0.+pxs,.5-.055+pys-.00001,0,0,0);
605         pad2ls = new TPad("pad2ls","pion efficiency",0.,0.5-.055,0.+pxs,0.5-.055+pys-.00001,0,0,0);
606         pad3ls = new TPad("pad3ls","kaon efficiency",0.3,0.5-.055,0.3+pxs,0.5-.055+pys-.00001,0,0,0);
607         pad4ls = new TPad("pad4ls","proton efficiency",0.6,0.5-.055,0.6+pxs,0.5-.055+pys-.00001,0,0,0);
608
609         // contamination
610         //pad5 = new TPad("pad5","electron contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
611         pad6ls = new TPad("pad6ls","pion contamination",0.,0.,0.+pxs,0.+pys,0,0,0);
612         pad7ls = new TPad("pad7ls","kaon contamination",.3,0.,0.3+pxs,0.+pys,0,0,0);
613         pad8ls = new TPad("pad8ls","proton contamination",.6,0.,0.6+pxs,0.+pys,0,0,0);
614
615       }
616
617       if (strstr(eventType,"pp")){
618         // overall Efficiency
619         pad1 = new TPad("pad1","electron efficiency",0.,.5-.055,0.25+0.045,1.,0,0,0);
620         pad2 = new TPad("pad2","pion efficiency",0.25-0.015,0.5-.055,0.5+0.03,1.,0,0,0);
621         pad3 = new TPad("pad3","kaon efficiency",0.5-0.03,0.5-.055,0.75+0.015,1.,0,0,0);
622         pad4 = new TPad("pad4","proton efficiency",0.75-0.045,0.5-.055,1.,1.,0,0,0);
623
624         // contamination
625         pad5 = new TPad("pad5","electron contamination",0.,0.,.25+.045,.5+.055,0,0,0);
626         pad6 = new TPad("pad6","pion contamination",.25-.015,0.,.5+.03,.5+.055,0,0,0);
627         pad7 = new TPad("pad7","kaon contamination",.5-.03,0.,.75+.015,.5+.055,0,0,0);
628         pad8 = new TPad("pad8","proton contamination",.75-.045,0.,1.,.5+.055,0,0,0);
629
630
631         // we repeat the same for the last step of PID
632         pad1ls = new TPad("pad1ls","electron efficiency",0.,.5-.055,0.25+0.045,1.,0,0,0);
633         pad2ls = new TPad("pad2ls","pion efficiency",0.25-0.015,0.5-.055,0.5+0.03,1.,0,0,0);
634         pad3ls = new TPad("pad3ls","kaon efficiency",0.5-0.03,0.5-.055,0.75+0.015,1.,0,0,0);
635         pad4ls = new TPad("pad4ls","proton efficiency",0.75-0.045,0.5-.055,1.,1.,0,0,0);
636
637         // contamination
638         pad5ls = new TPad("pad5ls","electron contamination",0.,0.,.25+.045,.5+.055,0,0,0);
639         pad6ls = new TPad("pad6ls","pion contamination",.25-.015,0.,.5+.03,.5+.055,0,0,0);
640         pad7ls = new TPad("pad7ls","kaon contamination",.5-.03,0.,.75+.015,.5+.055,0,0,0);
641         pad8ls = new TPad("pad8ls","proton contamination",.75-.045,0.,1.,.5+.055,0,0,0);
642
643
644       }
645
646       // last step of PID
647       gStyle->SetOptStat(0);
648       tpls->SetFillStyle(0);
649       tpls->SetFillColor(0);
650       tpls->SetBorderSize(0);
651       pidCanvasls->cd();
652       TText *text1ls= new TText(.1,.2,"Contamination              Efficiency"); 
653       text1ls->SetTextAngle(90);
654       if (strstr(outputmode,"visual")) text1ls->Draw();
655       //tp->DrawText(.3,.0,"p (GeV/c");
656       pidCanvasls->cd();
657       TText *text2ls= new TText(.8,.0,"p (GeV/c)"); 
658       if (strstr(outputmode,"visual")) {
659         text2ls->Draw();
660         tpls->Draw();
661       }
662
663       // overall
664       gStyle->SetOptStat(0);
665       tp->SetFillStyle(0);
666       tp->SetFillColor(0);
667       tp->SetBorderSize(0);
668       pidCanvas->cd();
669       TText *text1= new TText(.1,.2,"Contamination              Efficiency"); 
670       text1->SetTextAngle(90);
671       if (strstr(outputmode,"visual")) text1->Draw();
672       //tp->DrawText(.3,.0,"p (GeV/c");
673       pidCanvas->cd();
674       TText *text2= new TText(.8,.0,"p (GeV/c)"); 
675       if (strstr(outputmode,"visual")) {
676         text2->Draw();
677         tp->Draw();
678       }
679
680     }
681
682
683     // drawing histos for overall case
684     if (strstr(eventType,"pp")){
685       pad1->SetFillStyle(0);
686       pad1->SetFillColor(10);
687       tp->cd();
688       if (strstr(outputmode,"visual")) pad1->Draw();
689       pad1->cd();
690       //eleff->SetLineWidth(15);
691       eleff->SetLineWidth(3);
692       eleff->SetMaximum(1.);
693       if (indexOfFile==0) {
694         //eleff->SetFillColor(33);
695         //eleff->SetFillColor(30);
696         //eleff->SetFillColor(0);
697         //eleff->SetLineColor(4);
698         eleff->SetLineColor(1);
699         if (strstr(outputmode,"visual")) eleff->Draw();
700       } else {
701         eleff->SetFillStyle(0);
702         eleff->SetFillColor(30);
703         if (indexOfFile==2) {
704           eleff->SetLineColor(3);
705           eleff->SetLineWidth(3);
706         } else {
707           //eleff->SetLineColor(2);
708           eleff->SetLineColor(1);
709           eleff->SetLineStyle(2);}
710         if (strstr(outputmode,"visual")) eleff->Draw("same");
711       }
712       //   eleff->Fit("pol1");
713       TPaveLabel *ellab = new TPaveLabel(.42,.85,.52,1.05,"e");
714       if (strstr(outputmode,"visual")) ellab->Draw();
715     }
716     
717     pad2->SetFillStyle(0);
718     pad2->SetFillColor(10);
719     tp->cd();
720     if (strstr(outputmode,"visual")) pad2->Draw();
721     pad2->cd();
722     pieff->SetLineWidth(3);
723     pieff->SetMaximum(1.);
724     if (indexOfFile==0) {
725       pieff->SetLineColor(1);
726       if (strstr(outputmode,"visual")) pieff->Draw();
727     } else {
728       pieff->SetFillStyle(0);
729       pieff->SetFillColor(30);
730       if (indexOfFile==1) {
731         pieff->SetLineStyle(2);
732       } else if (indexOfFile==2) {
733         pieff->SetLineStyle(3);
734       } else {
735         pieff->SetLineStyle(4);}
736       if (strstr(outputmode,"visual")) pieff->Draw("same");
737     }
738     TPaveLabel *pilab = new TPaveLabel(1.7,.85,2.2,1.05,"#pi");
739     if (strstr(outputmode,"visual")) pilab->Draw();
740     
741     pad3->SetFillStyle(0);
742     pad3->SetFillColor(10);
743     tp->cd();
744     if (strstr(outputmode,"visual")) pad3->Draw();
745     pad3->cd();
746     kaeff->SetLineWidth(3);
747     kaeff->SetMaximum(1.);
748     if (indexOfFile==0) {
749       kaeff->SetLineColor(1);
750       if (strstr(outputmode,"visual")) kaeff->Draw();
751     } else {
752       kaeff->SetFillStyle(0);
753       kaeff->SetFillColor(30);
754       if (indexOfFile==1) { 
755         kaeff->SetLineStyle(2);
756       } else if (indexOfFile==2) {
757         kaeff->SetLineStyle(3);
758       } else {
759         kaeff->SetLineStyle(4);}
760       if (strstr(outputmode,"visual")) kaeff->Draw("same");
761     }
762     TPaveLabel *kalab = new TPaveLabel(1.7,.85,2.2,1.05,"K");
763     if (strstr(outputmode,"visual")) kalab->Draw();
764     
765     pad4->SetFillStyle(0);
766     pad4->SetFillColor(10);
767     tp->cd();
768     if (strstr(outputmode,"visual")) pad4->Draw();
769     pad4->cd();
770     preff->SetLineWidth(3);
771     preff->SetMaximum(1.);
772     if (indexOfFile==0) {
773       preff->SetLineColor(1);
774       if (strstr(outputmode,"visual")) preff->Draw();
775     } else {
776       preff->SetFillStyle(0);
777       preff->SetFillColor(30);
778       if (indexOfFile==1) {
779         preff->SetLineStyle(2);
780       } else if (indexOfFile==2) {
781         preff->SetLineStyle(3);
782       } else {
783         preff->SetLineStyle(4);}
784       if (strstr(outputmode,"visual")) preff->Draw("same");
785     }
786     TPaveLabel *prlab = new TPaveLabel(3.2,.85,4.1,1.05,"p");
787     if (strstr(outputmode,"visual")) prlab->Draw();
788
789     if (strstr(eventType,"pp")){
790       pad5->SetFillStyle(0);
791       pad5->SetFillColor(10);
792       tp->cd();
793       if (strstr(outputmode,"visual")) pad5->Draw();
794       pad5->cd();
795       //elcon->SetLineWidth(5);
796       elcon->SetLineWidth(3);
797       elcon->SetMaximum(1.);
798       if (indexOfFile==0) {
799         //elcon->SetFillColor(33);
800         //elcon->SetFillColor(30);
801         //elcon->SetLineColor(4);
802         elcon->SetLineColor(1);
803         if (strstr(outputmode,"visual")) elcon->Draw();
804       } else {
805         elcon->SetFillStyle(4000);
806         elcon->SetFillColor(30);
807         if (indexOfFile==2) {
808           elcon->SetLineColor(3);
809           elcon->SetLineWidth(3);
810         } else {
811           elcon->SetLineColor(2);
812           elcon->SetLineStyle(2);}
813         if (strstr(outputmode,"visual")) elcon->Draw("same");
814       }
815     }
816
817
818     pad6->SetFillStyle(0);
819     pad6->SetFillColor(10);
820     tp->cd();
821     if (strstr(outputmode,"visual")) pad6->Draw();
822     pad6->cd();
823     picon->SetLineWidth(3);
824     picon->SetMaximum(1.);
825     if (indexOfFile==0) {
826       picon->SetLineColor(1);
827       if (strstr(outputmode,"visual")) picon->Draw();
828     } else {
829       picon->SetFillStyle(0);
830       picon->SetFillColor(30);
831       if (indexOfFile==1) { 
832         picon->SetLineStyle(2);
833       } else if (indexOfFile==2) {
834         picon->SetLineStyle(3);
835       } else {
836         picon->SetLineStyle(4);
837         TLine* line;
838         line = new TLine(0.2,0.85,0.9,0.85);
839         line->SetLineStyle(2);
840         line->SetLineWidth(1);
841         if (strstr(outputmode,"visual")) line->Draw();
842         line = new TLine(0.2,0.65,0.9,0.65);
843         line->SetLineWidth(2);
844         if (strstr(outputmode,"visual")) line->Draw();
845         line = new TLine(0.2,0.45,0.9,0.45);
846         line->SetLineStyle(3);
847         line->SetLineWidth(1);
848         if (strstr(outputmode,"visual")) line->Draw();
849         line = new TLine(0.2,0.25,0.9,0.25);
850         line->SetLineStyle(4);
851         line->SetLineWidth(1);
852         if (strstr(outputmode,"visual")) line->Draw();
853         TPaveLabel *pl = new TPaveLabel(1.1,0.8,1.9,0.9,"100 ps","br");
854         pl->SetFillColor(18);
855         pl->SetTextSize(0.99);
856         if (strstr(outputmode,"visual")) pl->Draw();
857         pl = new TPaveLabel(1.1,0.6,1.9,0.7,"150 ps","br");
858         pl->SetFillColor(18);
859         pl->SetTextSize(0.99);
860         if (strstr(outputmode,"visual")) pl->Draw();
861         pl = new TPaveLabel(1.1,0.4,1.9,0.5,"200 ps","br");
862         pl->SetFillColor(18);
863         pl->SetTextSize(0.99);
864         if (strstr(outputmode,"visual")) pl->Draw();
865         pl = new TPaveLabel(1.1,0.2,1.9,0.3,"300 ps","br");
866         pl->SetFillColor(18);
867         pl->SetTextSize(0.99);
868         if (strstr(outputmode,"visual")) pl->Draw();
869       }
870       if (strstr(outputmode,"visual")) picon->Draw("same");
871     }
872     
873     pad7->SetFillStyle(0);
874     pad7->SetFillColor(10);
875     tp->cd();
876     if (strstr(outputmode,"visual")) pad7->Draw();
877     pad7->cd();
878     kacon->SetLineWidth(3);
879     kacon->SetMaximum(1.);
880     if (indexOfFile==0) {
881       kacon->SetLineColor(1);
882       if (strstr(outputmode,"visual")) kacon->Draw();
883     } else {
884       kacon->SetFillStyle(0);
885       kacon->SetFillColor(30);
886       if (indexOfFile==1) {
887         kacon->SetLineStyle(2);
888       } else if (indexOfFile==2) {
889         kacon->SetLineStyle(3);
890       } else {
891         kacon->SetLineStyle(4);}
892       if (strstr(outputmode,"visual")) kacon->Draw("same");
893     }
894     
895     pad8->SetFillStyle(0);
896     pad8->SetFillColor(10);
897     tp->cd();
898     if (strstr(outputmode,"visual")) pad8->Draw();
899     pad8->cd();
900     prcon->SetLineWidth(3);
901     prcon->SetMaximum(1.);
902     if (indexOfFile==0) {
903       prcon->SetLineColor(1);
904       if (strstr(outputmode,"visual")) prcon->Draw();
905     } else {
906       prcon->SetFillStyle(0);
907       prcon->SetFillColor(30);
908       if (indexOfFile==1) {
909         prcon->SetLineStyle(2);
910       } else if (indexOfFile==2) {
911         prcon->SetLineStyle(3);
912       } else {
913         prcon->SetLineStyle(4);}
914       if (strstr(outputmode,"visual")) prcon->Draw("same");
915     }
916
917
918
919     // last step case (it is just a copy of the previous lines)
920     // moving to pidCanvasls canvas
921     pidCanvasls->cd();
922     // drawing histos for overall case
923     if (strstr(eventType,"pp")){
924       pad1ls->SetFillStyle(0);
925       pad1ls->SetFillColor(10);
926       tpls->cd();
927       if (strstr(outputmode,"visual")) pad1ls->Draw();
928       pad1ls->cd();
929       //eleff->SetLineWidth(15);
930       eleffls->SetLineWidth(3);
931       eleffls->SetMaximum(1.);
932       if (indexOfFile==0) {
933         //eleff->SetFillColor(33);
934         //eleff->SetFillColor(30);
935         //eleff->SetFillColor(0);
936         //eleff->SetLineColor(4);
937         eleffls->SetLineColor(1);
938         if (strstr(outputmode,"visual")) eleffls->Draw();
939       } else {
940         eleffls->SetFillStyle(0);
941         eleffls->SetFillColor(30);
942         if (indexOfFile==2) {
943           eleffls->SetLineColor(3);
944           eleffls->SetLineWidth(3);
945         } else {
946           //eleff->SetLineColor(2);
947           eleffls->SetLineColor(1);
948           eleffls->SetLineStyle(2);}
949         if (strstr(outputmode,"visual")) eleffls->Draw("same");
950       }
951       //   eleff->Fit("pol1");
952       TPaveLabel *ellabls = new TPaveLabel(.42,.85,.52,1.05,"e");
953       if (strstr(outputmode,"visual")) ellabls->Draw();
954     }
955     
956     pad2ls->SetFillStyle(0);
957     pad2ls->SetFillColor(10);
958     tpls->cd();
959     if (strstr(outputmode,"visual")) pad2ls->Draw();
960     pad2ls->cd();
961     pieffls->SetLineWidth(3);
962     pieffls->SetMaximum(1.);
963     if (indexOfFile==0) {
964       pieffls->SetLineColor(1);
965       if (strstr(outputmode,"visual")) pieffls->Draw();
966     } else {
967       pieffls->SetFillStyle(0);
968       pieffls->SetFillColor(30);
969       if (indexOfFile==1) {
970         pieffls->SetLineStyle(2);
971       } else if (indexOfFile==2) {
972         pieffls->SetLineStyle(3);
973       } else {
974         pieffls->SetLineStyle(4);}
975       if (strstr(outputmode,"visual")) pieffls->Draw("same");
976     }
977     TPaveLabel *pilabls = new TPaveLabel(1.7,.85,2.2,1.05,"#pi");
978     if (strstr(outputmode,"visual")) pilabls->Draw();
979     
980     pad3ls->SetFillStyle(0);
981     pad3ls->SetFillColor(10);
982     tpls->cd();
983     if (strstr(outputmode,"visual")) pad3ls->Draw();
984     pad3ls->cd();
985     kaeffls->SetLineWidth(3);
986     kaeffls->SetMaximum(1.);
987     if (indexOfFile==0) {
988       kaeffls->SetLineColor(1);
989       if (strstr(outputmode,"visual")) kaeffls->Draw();
990     } else {
991       kaeffls->SetFillStyle(0);
992       kaeffls->SetFillColor(30);
993       if (indexOfFile==1) { 
994         kaeffls->SetLineStyle(2);
995       } else if (indexOfFile==2) {
996         kaeffls->SetLineStyle(3);
997       } else {
998         kaeffls->SetLineStyle(4);}
999       if (strstr(outputmode,"visual")) kaeffls->Draw("same");
1000     }
1001     TPaveLabel *kalabls = new TPaveLabel(1.7,.85,2.2,1.05,"K");
1002     if (strstr(outputmode,"visual")) kalabls->Draw();
1003     
1004     pad4ls->SetFillStyle(0);
1005     pad4ls->SetFillColor(10);
1006     tpls->cd();
1007     if (strstr(outputmode,"visual")) pad4ls->Draw();
1008     pad4ls->cd();
1009     preffls->SetLineWidth(3);
1010     preffls->SetMaximum(1.);
1011     if (indexOfFile==0) {
1012       preffls->SetLineColor(1);
1013       if (strstr(outputmode,"visual")) preffls->Draw();
1014     } else {
1015       preffls->SetFillStyle(0);
1016       preffls->SetFillColor(30);
1017       if (indexOfFile==1) {
1018         preffls->SetLineStyle(2);
1019       } else if (indexOfFile==2) {
1020         preffls->SetLineStyle(3);
1021       } else {
1022         preffls->SetLineStyle(4);}
1023       if (strstr(outputmode,"visual")) preffls->Draw("same");
1024     }
1025     TPaveLabel *prlabls = new TPaveLabel(3.2,.85,4.1,1.05,"p");
1026     if (strstr(outputmode,"visual")) prlabls->Draw();
1027
1028     if (strstr(eventType,"pp")){
1029       pad5ls->SetFillStyle(0);
1030       pad5ls->SetFillColor(10);
1031       tpls->cd();
1032       if (strstr(outputmode,"visual")) pad5ls->Draw();
1033       pad5ls->cd();
1034       //elcon->SetLineWidth(5);
1035       elcon->SetLineWidth(3);
1036       elcon->SetMaximum(1.);
1037       if (indexOfFile==0) {
1038         //elcon->SetFillColor(33);
1039         //elcon->SetFillColor(30);
1040         //elcon->SetLineColor(4);
1041         elcon->SetLineColor(1);
1042         if (strstr(outputmode,"visual")) elcon->Draw();
1043       } else {
1044         elcon->SetFillStyle(4000);
1045         elcon->SetFillColor(30);
1046         if (indexOfFile==2) {
1047           elcon->SetLineColor(3);
1048           elcon->SetLineWidth(3);
1049         } else {
1050           elcon->SetLineColor(2);
1051           elcon->SetLineStyle(2);}
1052         if (strstr(outputmode,"visual")) elcon->Draw("same");
1053       }
1054     }
1055
1056
1057     pad6ls->SetFillStyle(0);
1058     pad6ls->SetFillColor(10);
1059     tpls->cd();
1060     if (strstr(outputmode,"visual")) pad6ls->Draw();
1061     pad6ls->cd();
1062     picon->SetLineWidth(3);
1063     picon->SetMaximum(1.);
1064     if (indexOfFile==0) {
1065       picon->SetLineColor(1);
1066       if (strstr(outputmode,"visual")) picon->Draw();
1067     } else {
1068       picon->SetFillStyle(0);
1069       picon->SetFillColor(30);
1070       if (indexOfFile==1) { 
1071         picon->SetLineStyle(2);
1072       } else if (indexOfFile==2) {
1073         picon->SetLineStyle(3);
1074       } else {
1075         picon->SetLineStyle(4);
1076         TLine* line;
1077         line = new TLine(0.2,0.85,0.9,0.85);
1078         line->SetLineStyle(2);
1079         line->SetLineWidth(1);
1080         if (strstr(outputmode,"visual")) line->Draw();
1081         line = new TLine(0.2,0.65,0.9,0.65);
1082         line->SetLineWidth(2);
1083         if (strstr(outputmode,"visual")) line->Draw();
1084         line = new TLine(0.2,0.45,0.9,0.45);
1085         line->SetLineStyle(3);
1086         line->SetLineWidth(1);
1087         if (strstr(outputmode,"visual")) line->Draw();
1088         line = new TLine(0.2,0.25,0.9,0.25);
1089         line->SetLineStyle(4);
1090         line->SetLineWidth(1);
1091         if (strstr(outputmode,"visual")) line->Draw();
1092         TPaveLabel *pl = new TPaveLabel(1.1,0.8,1.9,0.9,"100 ps","br");
1093         pl->SetFillColor(18);
1094         pl->SetTextSize(0.99);
1095         if (strstr(outputmode,"visual")) pl->Draw();
1096         pl = new TPaveLabel(1.1,0.6,1.9,0.7,"150 ps","br");
1097         pl->SetFillColor(18);
1098         pl->SetTextSize(0.99);
1099         if (strstr(outputmode,"visual")) pl->Draw();
1100         pl = new TPaveLabel(1.1,0.4,1.9,0.5,"200 ps","br");
1101         pl->SetFillColor(18);
1102         pl->SetTextSize(0.99);
1103         if (strstr(outputmode,"visual")) pl->Draw();
1104         pl = new TPaveLabel(1.1,0.2,1.9,0.3,"300 ps","br");
1105         pl->SetFillColor(18);
1106         pl->SetTextSize(0.99);
1107         if (strstr(outputmode,"visual")) pl->Draw();
1108       }
1109       if (strstr(outputmode,"visual")) picon->Draw("same");
1110     }
1111     
1112     pad7ls->SetFillStyle(0);
1113     pad7ls->SetFillColor(10);
1114     tpls->cd();
1115     if (strstr(outputmode,"visual")) pad7ls->Draw();
1116     pad7ls->cd();
1117     kacon->SetLineWidth(3);
1118     kacon->SetMaximum(1.);
1119     if (indexOfFile==0) {
1120       kacon->SetLineColor(1);
1121       if (strstr(outputmode,"visual")) kacon->Draw();
1122     } else {
1123       kacon->SetFillStyle(0);
1124       kacon->SetFillColor(30);
1125       if (indexOfFile==1) {
1126         kacon->SetLineStyle(2);
1127       } else if (indexOfFile==2) {
1128         kacon->SetLineStyle(3);
1129       } else {
1130         kacon->SetLineStyle(4);}
1131       if (strstr(outputmode,"visual")) kacon->Draw("same");
1132     }
1133     
1134     pad8ls->SetFillStyle(0);
1135     pad8ls->SetFillColor(10);
1136     tpls->cd();
1137     if (strstr(outputmode,"visual")) pad8ls->Draw();
1138     pad8ls->cd();
1139     prcon->SetLineWidth(3);
1140     prcon->SetMaximum(1.);
1141     if (indexOfFile==0) {
1142       prcon->SetLineColor(1);
1143       if (strstr(outputmode,"visual")) prcon->Draw();
1144     } else {
1145       prcon->SetFillStyle(0);
1146       prcon->SetFillColor(30);
1147       if (indexOfFile==1) {
1148         prcon->SetLineStyle(2);
1149       } else if (indexOfFile==2) {
1150         prcon->SetLineStyle(3);
1151       } else {
1152         prcon->SetLineStyle(4);}
1153       if (strstr(outputmode,"visual")) prcon->Draw("same");
1154     }
1155
1156
1157
1158
1159
1160
1161
1162     // momentum vs mass 2-D histos
1163
1164     if (indexOfFile==0) {
1165       momvsmassCanvas = new TCanvas("momvsmassCanvas","Momentum vs mass disribution",500,10,700,700);
1166       momvsmassCanvas->SetFillColor(0);
1167       momvsmassCanvas->SetBorderMode(0);
1168       gPad->SetFillStyle(0);
1169       gPad->SetBorderMode(0);
1170       gPad->SetFillColor(0);
1171       //   gStyle->SetOptStat(11);
1172       if (numfile==4) momvsmassCanvas->Divide(1,2,0,0); 
1173     } else if (indexOfFile==1 && numfile == 4) {
1174       momvsmassCanvas->cd(1);
1175       TPaveLabel *pl = new TPaveLabel(-0.0376218,-3.03586,0.0979277,-2.70158,"100 ps","br");
1176       pl->SetFillColor(18);
1177       pl->SetTextSize(0.99);
1178       if (strstr(outputmode,"visual")) pl->Draw();
1179     } else if (indexOfFile==3 && numfile == 4) {
1180       momvsmassCanvas->cd(2);
1181       TPaveLabel *pl = new TPaveLabel(-0.0591866,-3.17077,0.076363,-2.86857,"300 ps","br");
1182       pl->SetFillColor(18);
1183       pl->SetTextSize(0.99);
1184       if (strstr(outputmode,"visual")) pl->Draw();
1185     }
1186     if (numfile !=4) momvsmassCanvas->cd();
1187     if (numfile !=4 || indexOfFile==1 || indexOfFile==3) {
1188       //   hpi->PaintStat2(01);
1189       hpi->SetMarkerColor(5);
1190       if (strstr(outputmode,"visual")) hpi->Draw();
1191       if(strstr(eventType,"pp")){
1192         hel->SetMarkerColor(2);
1193         if (strstr(outputmode,"visual")) hel->Draw("same");
1194       }
1195       hka->SetMarkerColor(4);
1196       if (strstr(outputmode,"visual")) hka->Draw("same");
1197       hpr->SetMarkerColor(3);
1198       if (strstr(outputmode,"visual")) hpr->Draw("same");
1199       if (strstr(outputmode,"visual")) {
1200         fkaon->Draw();
1201         fproton->Draw();
1202         if(strstr(eventType,"pp")){
1203           felectron->Draw();
1204           fpion->Draw();
1205         }
1206       }
1207       if(strstr(eventType,"pp")){
1208         //TPaveText *ep = new TPaveText(-0.05,-0.5,0.05,-0.3);
1209         //ep->AddText("e");
1210         TPaveLabel *ep = new TPaveLabel(.42,.85,.52,1.05,"e");
1211         if (strstr(outputmode,"visual")) ep->Draw();
1212       }
1213
1214       TPaveText *pip = new TPaveText(0.15,-1.0,0.25,-0.8);
1215       pip->AddText("#pi");
1216       if (strstr(outputmode,"visual")) pip->Draw();
1217       TPaveText *kp = new TPaveText(0.5,-2.0,0.6,-1.8);
1218       kp->AddText("K");
1219       if (strstr(outputmode,"visual")) kp->Draw();
1220       TPaveText *prp = new TPaveText(0.9,-2.7,1.0,-2.5);
1221       prp->AddText("p");
1222       if (strstr(outputmode,"visual")) prp->Draw();
1223       //   TText *text2= new TText(.59,.06,"Momentum"); 
1224       //   text1->SetTextAngle(90);
1225       //   text1->Draw();
1226       //pidCanvas->DrawText(.1,.2,"Contamination               Efficiency");
1227       momvsmassCanvas->Update();
1228       if(strstr(outputsavemode,"asC")) momvsmassCanvas->Print("momvsmassCanvas.C");
1229       if(strstr(outputsavemode,"asEPS")) momvsmassCanvas->Print("momvsmassCanvas.eps");
1230       pidCanvas->cd();
1231       pidCanvas->Update();
1232       if(strstr(outputsavemode,"asC")) pidCanvas->Print("pidCanvas.C");
1233       if(strstr(outputsavemode,"asEPS")) pidCanvas->Print("pidCanvas.eps");
1234       char outFileName[100];
1235       strcpy(outFileName,"histos");
1236       strcat(outFileName,foutfileName);
1237       TFile *houtfile = new TFile(outFileName,"recreate");
1238       houtfile->cd();
1239       // saving canvas
1240       pidCanvas->Write(0,TObject::kOverwrite);
1241       momvsmassCanvas->Write(0,TObject::kOverwrite);
1242       // saving 1-D histos
1243       pit->Write(0,TObject::kOverwrite);
1244       pig->Write(0,TObject::kOverwrite);
1245       pieff->Write(0,TObject::kOverwrite);
1246       pieffls->Write(0,TObject::kOverwrite);
1247       picon->Write(0,TObject::kOverwrite);
1248       piid->Write(0,TObject::kOverwrite);
1249       pimatch->Write(0,TObject::kOverwrite);
1250       piall->Write(0,TObject::kOverwrite);
1251       pigen->Write(0,TObject::kOverwrite);
1252       kat->Write(0,TObject::kOverwrite);
1253       kag->Write(0,TObject::kOverwrite);
1254       kaeff->Write(0,TObject::kOverwrite);
1255       kaeffls->Write(0,TObject::kOverwrite);
1256       kaid->Write(0,TObject::kOverwrite);
1257       kamatch->Write(0,TObject::kOverwrite);
1258       kaall->Write(0,TObject::kOverwrite);
1259       kagen->Write(0,TObject::kOverwrite);
1260       kacon->Write(0,TObject::kOverwrite);
1261       prt->Write(0,TObject::kOverwrite);
1262       prg->Write(0,TObject::kOverwrite);
1263       preff->Write(0,TObject::kOverwrite);
1264       preffls->Write(0,TObject::kOverwrite);
1265       prcon->Write(0,TObject::kOverwrite);
1266       prid->Write(0,TObject::kOverwrite);
1267       prmatch->Write(0,TObject::kOverwrite);
1268       prall->Write(0,TObject::kOverwrite);
1269       prgen->Write(0,TObject::kOverwrite);
1270       // saving 2-D histos
1271       hpi->Write(0,TObject::kOverwrite);
1272       hka->Write(0,TObject::kOverwrite);
1273       hpr->Write(0,TObject::kOverwrite);
1274       // electron histos
1275       if (hel && eleff && elcon && elid && elall){
1276         hel->Write(0,TObject::kOverwrite);
1277         eleff->Write(0,TObject::kOverwrite);
1278         elcon->Write(0,TObject::kOverwrite);
1279         elid->Write(0,TObject::kOverwrite);
1280         elmatch->Write(0,TObject::kOverwrite);
1281         elall->Write(0,TObject::kOverwrite);
1282       }
1283       cout << "file " << houtfile << " has been created" << endl;
1284       cout << "it contains PID histos and canvas" << endl;
1285       houtfile->Close();
1286       houtfile->Write(0,TObject::kOverwrite);
1287     }
1288   }
1289
1290   if (strstr(outputmode,"novisual")){
1291     // free used memory
1292     delete pit  ; pit=0;
1293     delete pig  ; pig=0;
1294     delete pieff; pieff=0;
1295     delete pieffls; pieffls=0;
1296     delete picon; picon=0;
1297     delete piid ; piid=0;
1298     delete pimatch; pimatch=0;
1299     delete piall; piall=0;
1300     delete pigen; pigen=0;
1301     delete kat  ; kat=0;
1302     delete kag  ; kag=0;
1303     delete kaeff; kaeff=0;
1304     delete kaeffls; kaeffls=0;
1305     delete kaid;  kaid=0;
1306     delete kamatch; kamatch=0;
1307     delete kaall; kaall=0;
1308     delete kagen; kagen=0;
1309     delete kacon; kacon=0;
1310     delete prt;   prt=0;
1311     delete prg;   prg=0;
1312     delete preff; preff=0;
1313     delete preffls; preffls=0;
1314     delete prcon; prcon=0;
1315     delete prid;  prid=0;
1316     delete prmatch; prmatch=0;
1317     delete prall; prall=0;
1318     delete prgen; prgen=0;
1319     // 2-D
1320     delete hpi; hpi=0;
1321     delete hka; hka=0;
1322     delete hpr; hpr=0;
1323     if (hel){ 
1324       delete hel;
1325       hel=0;
1326     }
1327     if (eleff){ 
1328       delete eleff;
1329       eleff=0;
1330     }
1331     if (eleffls){ 
1332       delete eleffls;
1333       eleffls=0;
1334     }
1335     if (elcon){ 
1336       delete elcon;
1337       elcon=0;
1338     }
1339     if (elid){ 
1340       delete elid;
1341       elid=0;
1342     }
1343     if (elmatch){ 
1344       delete elmatch;
1345       elmatch=0;
1346     }
1347     if (elall){ 
1348       delete elall;
1349       elall=0;
1350     }
1351   }
1352 }
1353
1354
1355 //__________________________________________________________________
1356 Bool_t AliTOFPID::operator==( AliTOFPID const & /*tofrec*/)const
1357 {
1358   // dummy version of Equal operator.
1359   // requested by coding conventions
1360   return kTRUE;
1361
1362 }