8ef800b44b53053fda5d7d62180957335ce72175
[u/mrichter/AliRoot.git] / ESDCheck / AliVZEROQATask.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 ESD VZERO data in simulated data
19 //
20 //////////////////////////////////////////////////////////////////////////////
21
22  
23 #include <TROOT.h>
24 #include <TChain.h>
25 #include <TH1.h>
26 #include <TH1F.h>
27 #include <TH1I.h>
28 #include <TCanvas.h>
29 #include <TLegend.h> 
30 #include <TVector3.h> 
31 #include <TFile.h> 
32
33 #include "AliVZEROQATask.h" 
34 #include "AliESD.h" 
35 #include "AliESDVZERO.h"
36 #include "AliLog.h"
37
38 //______________________________________________________________________________
39 AliVZEROQATask::AliVZEROQATask(const char *name) : 
40   AliAnalysisTask(name,""),  
41   fChain(0),
42   fESD(0),
43   fOutputContainer(0), 
44   fhVZERONbPMA(0),
45   fhVZERONbPMC(0),
46   fhVZEROMultA(0),
47   fhVZEROMultC(0)
48      
49 {
50   // Constructor.
51   // Input slot #0 works with an Ntuple
52   DefineInput(0, TChain::Class());
53   // Output slot #0 writes into a TH1 container
54   DefineOutput(0,  TObjArray::Class()) ; 
55 }
56
57 //______________________________________________________________________________
58 AliVZEROQATask::~AliVZEROQATask()
59 {
60   // dtor
61   
62   fOutputContainer->Clear(); 
63   delete fOutputContainer; 
64   
65   delete fhVZERONbPMA;
66   delete fhVZERONbPMC; 
67   delete fhVZEROMultA;
68   delete fhVZEROMultC;
69 }
70
71 //______________________________________________________________________________
72 void AliVZEROQATask::ConnectInputData(const Option_t*)
73 {
74   // Initialises branch container and histograms 
75     
76   AliInfo(Form("*** Initialization of %s", GetName())) ; 
77   
78   // Gets input data
79   fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
80   if (!fChain) {
81     AliError(Form("Input 0 for %s not found\n", GetName()));
82     return ;
83   }
84   
85   // One should first check if the branch address was taken by some other task
86   char ** address = (char **)GetBranchAddress(0, "ESD");
87   if (address) {
88     fESD = (AliESD*)(*address);
89   } else {
90     fESD = new AliESD();
91     SetBranchAddress(0, "ESD", &fESD);
92   }
93 }
94
95 //________________________________________________________________________
96 void AliVZEROQATask::CreateOutputObjects()
97 {  
98   // Creates histograms 
99      
100   fhVZERONbPMA  = new TH1I("Nb of fired PMs in V0A", "VZERONbPMA" ,100 ,0 ,99);
101   fhVZERONbPMC  = new TH1I("Nb of fired PMs in V0C", "VZERONbPMC" ,100 ,0 ,99);
102   fhVZEROMultA  = new TH1I("Multiplicity in V0A", "VZEROMultA" ,50 ,0 ,49);
103   fhVZEROMultC  = new TH1I("Multiplicity in V0C", "VZEROMultC" ,50 ,0 ,49);
104   
105   // Creates output container
106   
107   fOutputContainer = new TObjArray(4); 
108   fOutputContainer->SetName(GetName()) ; 
109   fOutputContainer->AddAt(fhVZERONbPMA, 0); 
110   fOutputContainer->AddAt(fhVZERONbPMC, 1); 
111   fOutputContainer->AddAt(fhVZEROMultA, 2); 
112   fOutputContainer->AddAt(fhVZEROMultC, 3); 
113    
114 }
115
116 //______________________________________________________________________________
117 void AliVZEROQATask::Exec(Option_t *) 
118 {
119   // Processing of one event
120   Long64_t entry = fChain->GetReadEntry() ;
121
122   if (!fESD) {
123     AliError("fESD is not connected to the input!") ; 
124     return ; 
125   }
126   
127   if ( !((entry-1)%100) ) 
128     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; 
129  
130   AliESDVZERO *esdVZERO=fESD->GetVZEROData();
131    
132   if (esdVZERO) { 
133     fhVZERONbPMA->Fill(esdVZERO->GetNbPMV0A());
134     fhVZERONbPMC->Fill(esdVZERO->GetNbPMV0C());  
135     fhVZEROMultA->Fill(esdVZERO->GetMTotV0A());
136     fhVZEROMultC->Fill(esdVZERO->GetMTotV0C());  
137   }
138   PostData(0, fOutputContainer);
139   
140 }
141
142 //______________________________________________________________________________
143 void AliVZEROQATask::Terminate(Option_t *)
144 {
145   // Processed when the event loop is ended
146   
147   fOutputContainer = (TObjArray*)GetOutputData(0);
148   fhVZERONbPMA     = (TH1I*)fOutputContainer->At(0);
149   fhVZERONbPMC     = (TH1I*)fOutputContainer->At(1);
150   fhVZEROMultA     = (TH1I*)fOutputContainer->At(2);
151   fhVZEROMultC     = (TH1I*)fOutputContainer->At(3);
152   
153   Bool_t problem = kFALSE ; 
154   AliInfo(Form(" *** %s Report:", GetName())) ; 
155   printf("        V0A Multiplicity Mean : %5.3f , RMS : %5.3f \n",fhVZEROMultA->GetMean(),fhVZEROMultA->GetRMS());
156   printf("        V0C Multiplicity Mean : %5.3f , RMS : %5.3f \n",fhVZEROMultC->GetMean(),fhVZEROMultC->GetRMS());
157
158   TCanvas  * c1 = new TCanvas("Number of PMs fired in V0A", "Number of PMs fired in V0A", 1);
159   fhVZERONbPMA->SetAxisRange(0, 99);
160   fhVZERONbPMA->SetLineColor(2);
161   fhVZERONbPMA->Draw("SAME");
162   c1->Update();
163  
164   TCanvas  * c2 = new TCanvas("Number of PMs fired in V0C", "Number of PMs fired in V0C", 1);
165   fhVZERONbPMC->SetAxisRange(0,99);
166   fhVZERONbPMC->SetLineColor(2);
167   fhVZERONbPMC->Draw("SAME");
168   c2->Update();
169
170   TCanvas  * c3 = new TCanvas("Multiplicity in V0A", "Multiplicity in V0A", 1);
171   fhVZEROMultA->SetAxisRange(0, 49);
172   fhVZEROMultA->SetLineColor(2);
173   fhVZEROMultA->Draw("SAME");
174   c3->Update();
175  
176   TCanvas  * c4 = new TCanvas("Multiplicity in V0C", "Multiplicity in V0C", 1);
177   fhVZEROMultC->SetAxisRange(0,49);
178   fhVZEROMultC->SetLineColor(2);
179   fhVZEROMultC->Draw("SAME");
180   c4->Update();
181
182   c1->Print("V0AMultiplicity.eps");
183   c2->Print("V0CMultiplicity.eps");
184   c3->Print("NumberV0APMs.eps");
185   c4->Print("NumberV0CPMs.eps");
186   
187   char line[1024] ; 
188   sprintf(line, ".!tar -zcf %s.tar.gz *.eps", GetName()) ; 
189   gROOT->ProcessLine(line);
190   sprintf(line, ".!rm -fR *.eps"); 
191   gROOT->ProcessLine(line);
192  
193   AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! ", GetName())) ;
194   
195   char * report ; 
196   if(problem)
197     report="Problems found, please check!!!";  
198   else 
199     report="OK";
200   
201   AliInfo(Form("*** %s Summary Report: %s\n",GetName(), report)) ; 
202   
203 }