Adding includes now needed by ROOT
[u/mrichter/AliRoot.git] / ESDCheck / AliMUONQATask.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 /* $Id$ */
17
18 // An analysis task to check the MUON data in simulated data
19 //
20 //*-- Ivana Hrivnacova
21 //////////////////////////////////////////////////////////////////////////////
22 //////////////////////////////////////////////////////////////////////////////
23
24 #include <TCanvas.h>
25 #include <TChain.h>
26 #include <TFile.h> 
27 #include <TH1F.h>
28 #include <TROOT.h>
29
30 #include "AliMUONQATask.h" 
31 #include "AliESD.h" 
32 #include "AliLog.h"
33 #include "AliESDVertex.h" 
34 #include "AliESDMuonTrack.h"
35
36 //______________________________________________________________________________
37 AliMUONQATask::AliMUONQATask(const char *name) : 
38   AliAnalysisTask(name,""),  
39   fChain(0),
40   fESD(0), 
41   fnTrackTrig(0), 
42   ftracktot(0),
43   fnevents(0),
44   fSPLowpt(0),
45   fSPHighpt(0),
46   fSPAllpt(0),
47   fSMLowpt(0),
48   fSMHighpt(0),
49   fSMAllpt(0),
50   fSULowpt(0),
51   fSUHighpt(0),
52   fSUAllpt(0),
53   fUSLowpt(0),
54   fUSHighpt(0),
55   fUSAllpt(0), 
56   fLSLowpt(0),
57   fLSHighpt(0),
58   fLSAllpt(0),
59   fhMUONVertex(0),
60   fhMUONMult(0)
61 {
62   // Constructor.
63   // Input slot #0 works with an Ntuple
64   DefineInput(0, TChain::Class());
65   // Output slot #0 writes into a TH1 container
66   DefineOutput(0,  TObjArray::Class()) ; 
67 }
68
69 //______________________________________________________________________________
70 AliMUONQATask::~AliMUONQATask()
71
72   // dtor
73   fOutputContainer->Clear() ; 
74   delete fOutputContainer ; 
75   
76   delete fhMUONVertex ; 
77   delete fhMUONMult ; 
78 }
79
80 //______________________________________________________________________________
81 void AliMUONQATask::Init(const Option_t*)
82 {
83   // Initialisation of branch container and histograms 
84     
85   AliInfo(Form("*** Initialization of %s", GetName())) ; 
86   
87   // Get input data
88   fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
89   if (!fChain) {
90     AliError(Form("Input 0 for %s not found\n", GetName()));
91     return ;
92   }
93   
94   if (!fESD) {
95     // One should first check if the branch address was taken by some other task
96     char ** address = (char **)GetBranchAddress(0, "ESD") ;
97     if (address) 
98       fESD = (AliESD *)(*address) ; 
99     if (!fESD) 
100       fChain->SetBranchAddress("ESD", &fESD) ;  
101   }
102   // The output objects will be written to 
103   TDirectory * cdir = gDirectory ; 
104   // Open a file for output #0
105   char outputName[1024] ; 
106   sprintf(outputName, "%s.root", GetName() ) ; 
107   OpenFile(0, outputName , "RECREATE") ; 
108   if (cdir) 
109     cdir->cd() ; 
110   
111   // create histograms 
112   fhMUONVertex = new TH1F("hMUONVertex","ITS Vertex"                ,100, -25., 25.);
113   fhMUONMult   = new TH1F("hMUONMult"  ,"Multiplicity of ESD tracks",10,  -0.5, 9.5);
114
115   
116   // create output container
117   
118   fOutputContainer = new TObjArray(2) ; 
119   fOutputContainer->SetName(GetName()) ; 
120
121   fOutputContainer->AddAt(fhMUONVertex,             0) ; 
122   fOutputContainer->AddAt(fhMUONMult,               1) ; 
123 }
124
125 //______________________________________________________________________________
126 void AliMUONQATask::Exec(Option_t *) 
127 {
128   // Processing of one event
129     
130   fnevents++ ; 
131
132   Long64_t entry = fChain->GetReadEntry() ;
133   
134   if (!fESD) {
135     AliError("fESD is not connected to the input!") ; 
136     return ; 
137   }
138   
139   if ( !((entry-1)%100) ) 
140     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; 
141   
142   // ************************  MUON *************************************
143     
144   const AliESDVertex* vertex = dynamic_cast<const AliESDVertex*>(fESD->GetVertex()) ;
145
146   Double_t zVertex = 0. ;
147   if (vertex) 
148     zVertex = vertex->GetZv() ;
149   
150   Int_t nTracks = fESD->GetNumberOfMuonTracks() ;
151   
152   ULong64_t trigWord = fESD->GetTriggerMask() ;
153
154   if (trigWord & 0x01) 
155     fSPLowpt++;
156   if (trigWord & 0x02)
157     fSPHighpt++;
158   if (trigWord & 0x04)
159     fSPAllpt++;
160   if (trigWord & 0x08)
161     fSMLowpt++;
162   if (trigWord & 0x010)
163     fSMHighpt++;
164   if (trigWord & 0x020)
165     fSMAllpt++;
166   if (trigWord & 0x040)
167     fSULowpt++;
168   if (trigWord & 0x080)
169     fSUHighpt++; 
170   if (trigWord & 0x100)
171     fSUAllpt++;
172   if (trigWord & 0x200)
173     fUSLowpt++;     
174   if (trigWord & 0x400)
175     fUSHighpt++;
176   if (trigWord & 0x800)
177     fUSAllpt++;
178   if (trigWord & 0x1000)
179     fLSLowpt++;
180   if (trigWord & 0x2000)
181     fLSHighpt++;
182   if (trigWord & 0x4000)
183     fLSAllpt++;
184
185   Int_t tracktrig  = 0 ;
186   Int_t iTrack1 ; 
187   
188   for (iTrack1 = 0 ; iTrack1 < nTracks ; iTrack1++) { //1st loop
189     AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack1) ;
190     ftracktot++ ;
191     if(muonTrack->GetMatchTrigger()) {
192       fnTrackTrig++ ;
193       tracktrig++ ;
194     }
195   }
196
197   fhMUONVertex->Fill(zVertex) ;
198   fhMUONMult->Fill(Float_t(nTracks)) ;
199
200   PostData(0, fOutputContainer);  
201 }
202
203 //______________________________________________________________________________
204 void AliMUONQATask::Terminate(Option_t *)
205 {
206   // Processing when the event loop is ended
207
208   AliInfo(Form("Terminate %s:", GetName())) ;
209   
210   Int_t eff_match = -1 ; 
211   if (ftracktot) 
212     eff_match = 100 * fnTrackTrig / ftracktot ;
213
214   printf("===================================================\n") ;
215   printf("================  %s ESD SUMMARY    ==============\n", GetName()) ;
216   printf("                                                   \n") ;
217   printf("         Total number of processed events  %d      \n", fnevents) ;
218   printf("\n")  ;
219   printf("\n")  ;
220   printf("Table 4:                                         \n") ;
221   printf(" Global Trigger output       Low pt  High pt   All\n") ;
222   printf(" number of Single Plus      :\t");
223   printf("%i\t%i\t%i\t", fSPLowpt, fSPHighpt, fSPAllpt) ;
224   printf("\n");
225   printf(" number of Single Minus     :\t");
226   printf("%i\t%i\t%i\t", fSMLowpt, fSMHighpt, fSMAllpt) ;
227   printf("\n");
228   printf(" number of Single Undefined :\t"); 
229   printf("%i\t%i\t%i\t", fSULowpt, fSUHighpt, fSUAllpt) ;
230   printf("\n");
231   printf(" number of UnlikeSign pair  :\t"); 
232   printf("%i\t%i\t%i\t", fUSLowpt, fUSHighpt, fUSAllpt) ;
233   printf("\n");
234   printf(" number of LikeSign pair    :\t");  
235   printf("%i\t%i\t%i\t", fLSLowpt, fLSHighpt, fLSAllpt) ;
236   printf("\n");
237   printf("===================================================\n") ;
238   printf("\n") ;
239   printf("matching efficiency with the trigger for single tracks = %2d %% \n", eff_match);
240   
241   TCanvas * cMUON = new TCanvas("cMUON", "MUON ESD Test", 400, 10, 600, 700) ;
242   cMUON->Divide(1,2) ;
243   cMUON->cd(1) ;
244   fhMUONVertex->Draw() ;
245   cMUON->cd(2) ;
246   fhMUONMult->Draw() ;  
247   cMUON->Print("MUON.eps") ; 
248
249   char line[1024] ; 
250   sprintf(line, ".!tar -zcvf %s.tar.gz *.eps", GetName()) ; 
251   gROOT->ProcessLine(line);
252   sprintf(line, ".!rm -fR *.eps"); 
253   gROOT->ProcessLine(line);
254  
255   AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! \n", GetName())) ;
256 }