QA library for detector checks from ESD
[u/mrichter/AliRoot.git] / ESDCheck / AliTOFQATask.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 // An analysis task to check the TOF data in simulated data
17 //
18 //*-- Silvia Arcelli
19 //////////////////////////////////////////////////////////////////////////////
20
21 #include <TChain.h>
22 #include <TCanvas.h>
23 #include <TFile.h> 
24
25 #include "AliTOFQATask.h" 
26 #include "AliESD.h" 
27 #inclued "AliESDtrack.h" 
28 #include "AliLog.h"
29
30 //______________________________________________________________________________
31 AliTOFQATask::AliTOFQATask(const char *name) : 
32   AliAnalysisTask(name,""),  
33   fChain(0),
34   fESD(0), 
35   fhTOF(0),
36   fhTOFEnergy(0),
37   fhTOFDigits(0),
38   fhTOFRecParticles(0),
39   fhTOFPhotons(0),
40   fhTOFInvariantMass(0),
41   fhTOFDigitsEvent(0)
42 {
43   // Constructor.
44   // Input slot #0 works with an Ntuple
45   DefineInput(0, TChain::Class());
46   // Output slot #0 writes into a TH1 container
47   DefineOutput(0,  TObjArray::Class()) ; 
48 }
49
50 //______________________________________________________________________________
51 void AliTOFQATask::Init(const Option_t*)
52 {
53   // Initialisation of branch container and histograms 
54     
55   AliInfo(Form("*** Initialization of %s", GetName())) ; 
56   
57   // Get input data
58   fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
59   if (!fChain) {
60     AliError(Form("Input 0 for %s not found\n", GetName()));
61     return ;
62   }
63   
64   if (!fESD) {
65     // One should first check if the branch address was taken by some other task
66     char ** address = (char **)GetBranchAddress(0, "ESD") ;
67     if (address) 
68       fESD = (AliESD *)(*address) ; 
69     if (!fESD) 
70       fChain->SetBranchAddress("ESD", &fESD) ;  
71   }
72   // The output objects will be written to 
73   TDirectory * cdir = gDirectory ; 
74   // Open a file for output #0
75   char outputName[1024] ; 
76   sprintf(outputName, "%s.root", GetName() ) ; 
77   OpenFile(0, outputName , "RECREATE") ; 
78   if (cdir) 
79     cdir->cd() ; 
80   
81   // create histograms 
82   fhTOFSector   = new TH1F("hSector",   " TOF TrackRefs, sector # ",  18, 0., 18.) ;
83   fhTOFSectorM  = new TH1F("hSectorM",  " TOF Matched, sector # ",    18, 0., 18.) ;
84   fhTOFSectorMF = new TH1F("hSectorMF", " TOF Matched G, sector # ",  18, 0., 18.) ;
85   fhTOFSectorMG = new TH1F("hSectorMG", " TOF Matched F , sector # ", 18, 0., 18.) ;
86   fhTOFprimP    = new TH1F("hprimP",    " TPC mom  tracks",           20, 0., 4.) ;
87   fhTOFprimPpi  = new TH1F("hprimPpi",  " TPC mom  tracks",           20, 0., 4.) ;
88   fhTOFprimPka  = new TH1F("hprimPka",  " TPC mom  tracks",           20, 0., 4.) ;
89   fhTOFprimPpr  = new TH1F("hprimPpr",  " TPC mom  tracks",           20, 0., 4.) ;
90
91
92    // Reaching TOF,prim
93   fhTOFprimPTOF   = new TH1F("hprimPTOF",   " TPC mom  tracks", 20, 0., 4.) ;
94   fhTOFprimPTOFpi = new TH1F("hprimPTOFpi", " TPC mom  tracks", 20, 0., 4.) ;
95   fhTOFprimPTOFka = new TH1F("hprimPTOFka", " TPC mom  tracks", 20, 0., 4.) ;
96   fhTOFprimPTOFpr = new TH1F("hprimPTOFpr", " TPC mom  tracks", 20, 0., 4.) ;
97
98
99    // Well matched,prim
100   fhTOFprimPTOF3   = new TH1F("hprimPTOF3",   " TPC mom  tracks", 20, 0., 4.) ;
101   fhTOFprimPTOFpi3 = new TH1F("hprimPTOFpi3", " TPC mom  tracks", 20, 0., 4.) ;
102   fhTOFprimPTOFka3 = new TH1F("hprimPTOFka3", " TPC mom  tracks", 20, 0., 4.) ;
103   fhTOFprimPTOFpr3 = new TH1F("hprimPTOFpr3", " TPC mom  tracks", 20, 0., 4.) ;
104
105    // bad matched,prim
106   fhTOFprimPTOF4   = new TH1F("hprimPTOF4",   " TPC mom  tracks", 20, 0., 4.) ;
107   fhTOFprimPTOFpi4 = new TH1F("hprimPTOFpi4", " TPC mom  tracks", 20, 0., 4.) ;
108   fhTOFprimPTOFka4 = new TH1F("hprimPTOFka4", " TPC mom  tracks", 20, 0., 4.) ;
109   fhTOFprimPTOFpr4 = new TH1F("hprimPTOFpr4", " TPC mom  tracks", 20, 0., 4.) ;
110
111    // matched,prim
112   fhTOFprimPTOF34   = new TH1F("hprimPTOF34",   " TPC mom  tracks", 20, 0., 4.) ;
113   fhTOFprimPTOFpi34 = new TH1F("hprimPTOFpi34", " TPC mom  tracks", 20, 0., 4.) ;
114   fhTOFprimPTOFka34 = new TH1F("hprimPTOFka34", " TPC mom  tracks", 20, 0., 4.) ;
115   fhTOFprimPTOFpr34 = new TH1F("hprimPTOFpr34", " TPC mom  tracks", 20,0 ., 4.) ;
116   
117   // create output container
118   
119   fOutputContainer = new TObjArray(24) ; 
120   fOutputContainer->SetName(GetName()) ; 
121
122   fOutputContainer->AddAt(fhTOFSector,            0) ; 
123   fOutputContainer->AddAt(fhTOFSectorM,           1) ; 
124   fOutputContainer->AddAt(fhTOFSectorMF,          2) ; 
125   fOutputContainer->AddAt(fhTOFSectorMG,          3) ; 
126   fOutputContainer->AddAt(fhTOFprimP,             4) ; 
127   fOutputContainer->AddAt(fhTOFprimPpi,           5) ; 
128   fOutputContainer->AddAt(fhTOFprimPka,           6) ; 
129   fOutputContainer->AddAt(fhTOFprimPpr,           7) ; 
130   fOutputContainer->AddAt(fhTOFprimPTOF,          8) ; 
131   fOutputContainer->AddAt(fhTOFprimPTOFpi,        9) ; 
132   fOutputContainer->AddAt(fhTOFprimPTOFka,       10) ; 
133   fOutputContainer->AddAt(fhTOFprimPTOFpr,       11) ; 
134   fOutputContainer->AddAt(fhTOFprimPTOF3,        12) ; 
135   fOutputContainer->AddAt(fhTOFprimPTOFpi3,      13) ; 
136   fOutputContainer->AddAt(fhTOFprimPTOFka3,      14) ; 
137   fOutputContainer->AddAt(fhTOFprimPTOFpr3,      15) ; 
138   fOutputContainer->AddAt(fhTOFprimPTOF4,        16) ; 
139   fOutputContainer->AddAt(fhTOFprimPTOFpi4,      17) ; 
140   fOutputContainer->AddAt(fhTOFprimPTOFka4,      18) ; 
141   fOutputContainer->AddAt(fhTOFprimPTOFpr4,      19) ; 
142   fOutputContainer->AddAt(fhTOFprimPTOF34,       20) ; 
143   fOutputContainer->AddAt(fhTOFprimPTOFpi34,     21) ; 
144   fOutputContainer->AddAt(fhTOFprimPTOFka34,     22) ; 
145   fOutputContainer->AddAt(fhTOFprimPTOFpr34,     23) ; 
146  
147 }
148
149 //______________________________________________________________________________
150 void AliTOFQATask::Exec(Option_t *) 
151 {
152   // Processing of one event
153     
154   Long64_t entry = fChain->GetReadEntry() ;
155   
156   if (!fESD) {
157     AliError("fESD is not connected to the input!") ; 
158     return ; 
159   }
160   
161   if ( !((entry-1)%100) ) 
162     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; 
163   
164   // ************************  TOF *************************************
165   const Int_t knCalinSec = 8736 ;
166   
167   Int_t ntrk = fESD->GetNumberOfTracks() ;
168   while ( ntrk-- ) {
169     AliESDtrack * t = fESD->GetTrack(ntrk) ;
170     if ( (t->GetStatus() & AliESDtrack::kTIME)==0 )
171       continue;
172     Int_t label               = TMath::Abs(t->GetLabel()) ;
173     Double_t p                = t->GetP() ; 
174     UInt_t assignedTOFcluster = t->GetTOFcluster() ;    //index of the assigned TOF cluster, >0 ?
175     Int_t detid               = t->GetTOFCalChannel() ; //index of the assigned TOF cluster, >0 ?
176     
177     Int_t sector = detid / knCalinSec ;
178     
179     if(assignedTOFcluster){ //matched
180       hSectorM->Fill(sector);
181     }
182   }
183  
184   PostData(0, fOutputContainer);
185
186   
187 }
188
189 //______________________________________________________________________________
190 void AliTOFQATask::Terminate(Option_t *)
191 {
192   // Processing when the event loop is ended
193   
194   // some plots
195
196   char line[1024] ; 
197   sprintf(line, ".!tar -zcvf %s.tar.gz *.eps", GetName()) ; 
198   gROOT->ProcessLine(line);
199   sprintf(line, ".!rm -fR *.eps"); 
200   gROOT->ProcessLine(line);
201  
202   AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! \n", GetName())) ;
203 }