63f018b9c5460ee8f319bfd5d904e65e0782b8d7
[u/mrichter/AliRoot.git] / ESDCheck / AliT0QATask.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 //______________________________________________________________________________
19 // An analysis task to check the T0 data in simulated data
20 //
21 //*-- Alla Maevskaya
22 //////////////////////////////////////////////////////////////////////////////
23
24 #include <TCanvas.h>
25 #include <TChain.h>
26 #include <TFile.h> 
27 #include <TH1F.h>
28 #include <TLegend.h> 
29 #include <TROOT.h>
30
31 #include "AliT0QATask.h" 
32 #include "AliESD.h" 
33 #include "AliLog.h"
34 #include "AliESDVertex.h" 
35
36 //______________________________________________________________________________
37 AliT0QATask::AliT0QATask(const char *name) : 
38   AliAnalysisTask(name,""),  
39   fChain(0),
40   fESD(0), 
41   fhT01(0),
42   fhT02(0),
43   fhT03(0)
44 {
45   // Constructor.
46   // Input slot #0 works with an Ntuple
47   DefineInput(0, TChain::Class());
48   // Output slot #0 writes into a TH1 container
49   DefineOutput(0,  TObjArray::Class()) ; 
50 }
51
52 //______________________________________________________________________________
53 AliT0QATask::~AliT0QATask()
54 {
55   // dtor
56   fOutputContainer->Clear() ; 
57   delete fOutputContainer ;
58  
59   delete fhT01 ; 
60   delete fhT02 ;
61   delete fhT03 ; 
62 }
63
64 //______________________________________________________________________________
65 void AliT0QATask::Init(const Option_t*)
66 {
67   // Initialisation of branch container and histograms 
68     
69   AliInfo(Form("*** Initialization of %s", GetName())) ; 
70   
71   // Get input data
72   fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
73   if (!fChain) {
74     AliError(Form("Input 0 for %s not found\n", GetName()));
75     return ;
76   }
77   
78   if (!fESD) {
79     // One should first check if the branch address was taken by some other task
80     char ** address = (char **)GetBranchAddress(0, "ESD") ;
81     if (address) 
82       fESD = (AliESD *)(*address) ; 
83     if (!fESD) 
84       fChain->SetBranchAddress("ESD", &fESD) ;  
85   }
86   // The output objects will be written to 
87   TDirectory * cdir = gDirectory ; 
88   // Open a file for output #0
89   char outputName[1024] ; 
90   sprintf(outputName, "%s.root", GetName() ) ; 
91   OpenFile(0, outputName , "RECREATE") ; 
92   if (cdir) 
93     cdir->cd() ; 
94   
95   // create histograms 
96   
97   fhT01 = new TH1F("hRealVertex", "Primary vertex", 100,   -20,    20);
98   fhT02 = new TH1F("hT0start",    "T0 start time",  100, 12400, 12600);
99   fhT03 = new TH1F("hT0vertex",   "T0vertex",       100,   -20,    20);
100
101
102   // create output container
103   
104   fOutputContainer = new TObjArray(3) ; 
105   fOutputContainer->SetName(GetName()) ; 
106
107   fOutputContainer->AddAt(fhT01,             0) ; 
108   fOutputContainer->AddAt(fhT02,             1) ; 
109   fOutputContainer->AddAt(fhT03,             2) ; 
110 }
111
112 //______________________________________________________________________________
113 void AliT0QATask::Exec(Option_t *) 
114 {
115   // Processing of one event
116     
117   Long64_t entry = fChain->GetReadEntry() ;
118   
119   if (!fESD) {
120     AliError("fESD is not connected to the input!") ; 
121     return ; 
122   }
123   
124   if ( !((entry-1)%100) ) 
125     AliInfo(Form("%s ----> Processing event # %lld",  (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; 
126   
127   // ************************  T0 *************************************
128   
129   const AliESDVertex * vertex = fESD->GetPrimaryVertex() ; 
130   Double_t posZ = vertex->GetZv() ; 
131   fhT01->Fill( posZ ) ;
132
133   fhT02->Fill( fESD->GetT0() ) ;
134   
135   fhT03->Fill( fESD->GetT0zVertex() / 2. ) ;
136   
137   PostData(0, fOutputContainer);
138   
139 }
140
141 //______________________________________________________________________________
142 void AliT0QATask::Terminate(Option_t *)
143 {
144   // Processing when the event loop is ended
145   
146   Float_t mean = fhT02->GetMean();
147
148   printf ("mean time T0 ps %f\n", mean) ;
149
150   if ( mean > 12600 || mean < 12400 ) 
151    AliWarning (" !!!!!!!!!!-----events sample is WRONG - T0 unreal -------");  
152
153   TCanvas  * cTO1 = new TCanvas("cT01", "T0 ESD Test", 400, 10, 600, 700) ;
154   cTO1->Divide(2, 2) ;
155
156   cTO1->cd(1) ; 
157   fhT01->Draw() ; 
158     
159   cTO1->cd(2) ; 
160   fhT02->Draw() ;
161
162   cTO1->cd(3) ; 
163   fhT03->Draw() ; 
164
165
166   cTO1->Print("T0.eps");
167
168   char line[1024] ; 
169   sprintf(line, ".!tar -zcvf %s.tar.gz *.eps", GetName()) ; 
170   gROOT->ProcessLine(line);
171   sprintf(line, ".!rm -fR *.eps"); 
172   gROOT->ProcessLine(line);
173  
174   AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! \n", GetName())) ;
175 }