]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/FORWARD/GEO/AliAnalysisTaskZDCTreeMaker.cxx
Fixes for coverity
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / GEO / AliAnalysisTaskZDCTreeMaker.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2008, 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 //                                                         //
18 //      Class to analyze ZDC data                          //
19 //                                                         //
20 /////////////////////////////////////////////////////////////
21
22 #include <TTree.h>
23 //#include <TList.h>
24 #include <TFile.h>
25 #include <TString.h>
26 #include <TCanvas.h>
27
28 #include "AliAnalysisManager.h"
29 #include "AliInputEventHandler.h"
30 #include "AliVEvent.h"
31 #include "AliESD.h"
32 #include "AliESDEvent.h"
33 #include "AliESDHeader.h"
34 #include "AliESDInputHandler.h"
35 #include "AliESDZDC.h"
36 #include "AliMultiplicity.h"
37 #include "AliAODHandler.h"
38 #include "AliAODEvent.h"
39 #include "AliAODHeader.h"
40 #include "AliAODVertex.h"
41 #include "AliAODVZERO.h"
42 #include "AliAODZDC.h"
43 #include "AliAODMCHeader.h"
44 #include "AliMCEventHandler.h"
45 #include "AliMCEvent.h"
46 #include "AliHeader.h"
47 #include "AliAODMCParticle.h"
48 #include "AliAnalysisTaskSE.h"
49 #include "AliGenEventHeader.h"
50 #include "AliGenHijingEventHeader.h"
51 #include "AliPhysicsSelectionTask.h"
52 #include "AliPhysicsSelection.h"
53 #include "AliTriggerAnalysis.h"
54 #include "AliCentrality.h"
55 #include "AliAnalysisTaskZDCTreeMaker.h"
56
57 ClassImp(AliAnalysisTaskZDCTreeMaker)
58
59
60 //________________________________________________________________________
61 AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker():
62   AliAnalysisTaskSE(),
63     fDebug(0),
64     fAnalysisInput("ESD"),
65     fIsMCInput(kFALSE),
66     fUseSpecialOutput(kFALSE),
67     fOutput(0x0),
68     fCentralityTree(0x0),
69     fTrigClass(""),
70     fIsEventSelected(kFALSE),
71     fIsPileupFromSPD(kFALSE),
72     fxVertex(0),         
73     fyVertex(0),         
74     fzVertex(0),         
75     fVertexer3d(kFALSE),
76     fNTracklets(0),
77     fIsV0ATriggered(0),
78     fIsV0CTriggered(0),
79     fMultV0A(0),         
80     fMultV0C(0), 
81     fESDFlag(0),         
82     fZNCEnergy(0), 
83     fZPCEnergy(0),  
84     fZNAEnergy(0),  
85     fZPAEnergy(0),
86     fZEM1Energy(0), 
87     fZEM2Energy(0),
88     fCentralityV0M(0),
89     fCentralityV0A(0),
90     fCentralityV0C(0),
91     fCentralityCL1(0),
92     fCentralityZNA(0),
93     fCentralityZPA(0),    
94     fCentralityZNC(0),
95     fCentralityZPC(0)    
96 {   
97    // Default constructor
98
99   fNClusters[0]=fNClusters[1]=0;
100   for(Int_t itow=0; itow<5; itow++){
101      fZNCtower[itow]=0.;  
102      fZPCtower[itow]=0.;  
103      fZNAtower[itow]=0.;  
104      fZPAtower[itow]=0.;  
105      fZNCtowerLG[itow]=0.;
106      fZPCtowerLG[itow]=0.;
107      fZNAtowerLG[itow]=0.;
108      fZPAtowerLG[itow]=0.;
109
110   }
111   /*for(Int_t ihit=0; ihit<4; ihit++) {
112      fTDCZNC[ihit] = 0;
113      fTDCZPC[ihit] = 0;
114      fTDCZNA[ihit] = 0;
115      fTDCZPA[ihit] = 0;
116      fTDCZEM1[ihit] = 0;
117      fTDCZEM2[ihit] = 0;
118   }*/
119   for(Int_t itdc=0; itdc<32; itdc++){
120     for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999;
121   }
122   
123 }   
124
125 //________________________________________________________________________
126 AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker(const char *name):
127   AliAnalysisTaskSE(name),
128     fDebug(0),
129     fAnalysisInput("ESD"),
130     fIsMCInput(kFALSE),
131     fUseSpecialOutput(kFALSE),
132     fOutput(0x0),
133     fCentralityTree(0x0),
134     fTrigClass(""),
135     fIsEventSelected(kFALSE),
136     fIsPileupFromSPD(kFALSE),
137     fxVertex(0),         
138     fyVertex(0),         
139     fzVertex(0),         
140     fVertexer3d(kFALSE),
141     fNTracklets(0),
142     fIsV0ATriggered(0),
143     fIsV0CTriggered(0),
144     fMultV0A(0),         
145     fMultV0C(0), 
146     fESDFlag(0),         
147     fZNCEnergy(0), 
148     fZPCEnergy(0),  
149     fZNAEnergy(0),  
150     fZPAEnergy(0),
151     fZEM1Energy(0), 
152     fZEM2Energy(0),
153     fCentralityV0M(0),
154     fCentralityV0A(0),
155     fCentralityV0C(0),
156     fCentralityCL1(0),
157     fCentralityZNA(0),
158     fCentralityZPA(0),    
159     fCentralityZNC(0),
160     fCentralityZPC(0)    
161     
162 {
163   // Default constructor
164   fNClusters[0]=fNClusters[1]=0;
165  
166   for(Int_t itow=0; itow<5; itow++){
167      fZNCtower[itow]=0.;  
168      fZPCtower[itow]=0.;  
169      fZNAtower[itow]=0.;  
170      fZPAtower[itow]=0.;  
171      fZNCtowerLG[itow]=0.;
172      fZPCtowerLG[itow]=0.;
173      fZNAtowerLG[itow]=0.;
174      fZPAtowerLG[itow]=0.;
175
176   }
177   /*for(Int_t ihit=0; ihit<4; ihit++) {
178      fTDCZNC[ihit] = 0;
179      fTDCZPC[ihit] = 0;
180      fTDCZNA[ihit] = 0;
181      fTDCZPA[ihit] = 0;
182      fTDCZEM1[ihit] = 0;
183      fTDCZEM2[ihit] = 0;
184   }*/
185   //for(Int_t itdc=0; itdc<32; itdc++){
186   //  for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999;
187   //}
188   
189   // Output slot #1 writes into a TList container
190   DefineOutput(1, TList::Class()); 
191   //DefineOutput(1, TTree::Class()); 
192   
193 }
194  
195 //________________________________________________________________________
196 AliAnalysisTaskZDCTreeMaker::~AliAnalysisTaskZDCTreeMaker()
197 {
198   // Destructor
199   if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
200     delete fOutput; fOutput=0;
201   } 
202   /*if(fCentralityTree && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
203     delete fCentralityTree; fCentralityTree=0;
204   } 
205   */ 
206 }  
207
208 //________________________________________________________________________
209 void AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects()
210 {
211   // Create the output containers
212   if(fDebug>1) printf("AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects() \n");
213
214   if (fUseSpecialOutput) OpenFile(1);
215
216   // Several histograms are more conveniently managed in a TList
217   fOutput = new TList;
218   fOutput->SetOwner();
219   //fOutput->SetName("output");
220
221     fCentralityTree = new TTree("fCentralityTree", "Centrality vs. multiplicity tree");
222     //
223     fCentralityTree->Branch("trigClass",&fTrigClass,"trigClass/C");
224     fCentralityTree->Branch("eventSelected",&fIsEventSelected,"eventSelected/O");
225     fCentralityTree->Branch("pileupSPD",&fIsPileupFromSPD,"pileupSPD/O");
226     fCentralityTree->Branch("xVertex", &fxVertex,"xVertex/D");
227     fCentralityTree->Branch("yVertex", &fyVertex,"yVertex/D");
228     fCentralityTree->Branch("zVertex", &fzVertex,"zVertex/D");
229     fCentralityTree->Branch("vertexer3d", &fVertexer3d,"vertexer3d/O");
230     fCentralityTree->Branch("nTracklets", &fNTracklets,"nTracklets/I");
231     fCentralityTree->Branch("nClusters", fNClusters,"nClusters[2]/I");
232
233     fCentralityTree->Branch("isV0ATriggered", &fIsV0ATriggered,"isV0ATriggered/I");
234     fCentralityTree->Branch("isV0CTriggered", &fIsV0CTriggered,"isV0CTriggered/I");
235     fCentralityTree->Branch("multV0A", &fMultV0A,"multV0A/F");
236     fCentralityTree->Branch("multV0C", &fMultV0C,"multV0C/F");
237     
238     fCentralityTree->Branch("esdFlag", &fESDFlag,"esdFlag/i");
239     fCentralityTree->Branch("zncEnergy",  &fZNCEnergy,  "zncEnergy/F");
240     fCentralityTree->Branch("zpcEnergy",  &fZPCEnergy,  "zpcEnergy/F");
241     fCentralityTree->Branch("znaEnergy",  &fZNAEnergy,  "znaEnergy/F");
242     fCentralityTree->Branch("zpaEnergy",  &fZPAEnergy,  "zpaEnergy/F");
243     fCentralityTree->Branch("zem1Energy", &fZEM1Energy, "zem1Energy/F");
244     fCentralityTree->Branch("zem2Energy", &fZEM2Energy, "zem2Energy/F");
245
246     fCentralityTree->Branch("znctower", fZNCtower, "znctower[5]/F");
247     fCentralityTree->Branch("zpctower", fZPCtower, "zpctower[5]/F");
248     fCentralityTree->Branch("znatower", fZNAtower, "znatower[5]/F");
249     fCentralityTree->Branch("zpatower", fZPAtower, "zpatower[5]/F");
250     fCentralityTree->Branch("znctowerLG", fZNCtowerLG, "znctowerLG[5]/F");
251     fCentralityTree->Branch("zpctowerLG", fZPCtowerLG, "zpctowerLG[5]/F");
252     fCentralityTree->Branch("znatowerLG", fZNAtowerLG, "znatowerLG[5]/F");
253     fCentralityTree->Branch("zpatowerLG", fZPAtowerLG, "zpatowerLG[5]/F");
254
255     fCentralityTree->Branch("tdc", fTDCvalues, "tdc[32][4]/I");
256 //    fCentralityTree->Branch("tdcCorr", fTDCcorr, "tdcCorr[32][4]/F");
257     /*fCentralityTree->Branch("tdcZNC", fTDCZNC, "tdcZNC[4]/I");
258     fCentralityTree->Branch("tdcZPC", fTDCZPC, "tdcZPC[4]/I");
259     fCentralityTree->Branch("tdcZNA", fTDCZNA, "tdcZNA[4]/I");
260     fCentralityTree->Branch("tdcZPA", fTDCZPA, "tdcZPA[4]/I");
261     fCentralityTree->Branch("tdcZEM1", fTDCZEM1, "tdcZEM1[4]/I");
262     fCentralityTree->Branch("tdcZEM2", fTDCZEM2, "tdcZEM2[4]/I");*/
263     
264     fCentralityTree->Branch("centrV0mult", &fCentralityV0M, "centrV0mult/F");
265     fCentralityTree->Branch("centrV0Amult", &fCentralityV0A, "centrV0Amult/F");
266     fCentralityTree->Branch("centrV0Cmult", &fCentralityV0C, "centrV0Cmult/F");
267     fCentralityTree->Branch("centrSPDclu1", &fCentralityCL1, "centrSPDclu1/F");
268     fCentralityTree->Branch("centrZNA", &fCentralityZNA, "centrZNA/F");
269     fCentralityTree->Branch("centrZPA", &fCentralityZPA, "centrZPA/F");
270     fCentralityTree->Branch("centrZNC", &fCentralityZNA, "centrZNC/F");
271     fCentralityTree->Branch("centrZPC", &fCentralityZPA, "centrZPC/F");
272   
273     fOutput->Add(fCentralityTree);      
274     PostData(1, fOutput);
275   
276   //PostData(1, fCentralityTree);
277 }
278
279 //________________________________________________________________________
280 void AliAnalysisTaskZDCTreeMaker::UserExec(Option_t */*option*/)
281 {
282   // Execute analysis for current event:
283   if(fDebug>1) printf(" **** AliAnalysisTaskZDCTreeMaker::UserExec() \n");
284   
285   if (!InputEvent()) {
286     Printf("ERROR: InputEvent not available");
287     return;
288   }
289
290   if(fAnalysisInput.CompareTo("ESD")==0){
291       
292       //printf(" \t ***Analizing ESD ev. %d\n",fNev);
293       
294       AliESDEvent* esd = dynamic_cast<AliESDEvent*> (InputEvent());
295       if(!esd) return;
296       
297       // Select PHYSICS events (type=7, for data)
298       if(!fIsMCInput && esd->GetEventType()!=7) return; 
299       
300       // ***** Trigger selection
301       fTrigClass = esd->GetFiredTriggerClasses();
302       //TString triggerClass = esd->GetFiredTriggerClasses();
303       //sprintf(fTrigClass,"%s",triggerClass.Data());
304       
305       // use response of AliPhysicsSelection
306       fIsEventSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kAnyINT);       
307       fIsPileupFromSPD = esd->IsPileupFromSPD(7,0.8);
308       //fIsPileupFromSPD = esd->IsPileupFromSPDInMultBins();
309
310       AliCentrality *centrality = esd->GetCentrality();
311       fCentralityV0M = centrality->GetCentralityPercentile("V0M");
312       fCentralityV0A = centrality->GetCentralityPercentile("V0A");
313       fCentralityV0C = centrality->GetCentralityPercentile("V0C");
314       fCentralityCL1 = centrality->GetCentralityPercentile("CL1");
315       fCentralityZNA = centrality->GetCentralityPercentile("ZNA");
316       fCentralityZPA = centrality->GetCentralityPercentile("ZPA");
317       fCentralityZNC = centrality->GetCentralityPercentile("ZNC");
318       fCentralityZPC = centrality->GetCentralityPercentile("ZPC");
319                 
320       const AliESDVertex *vertex = esd->GetPrimaryVertexSPD();
321       fxVertex = vertex->GetX();
322       fyVertex = vertex->GetY();
323       fzVertex = vertex->GetZ();
324       if(vertex->IsFromVertexer3D()) fVertexer3d = kTRUE;
325       else fVertexer3d = kFALSE;
326       
327       const AliMultiplicity *mult = esd->GetMultiplicity();
328       fNTracklets = mult->GetNumberOfTracklets();
329       
330       for(Int_t ilay=0; ilay<2; ilay++){
331         fNClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
332       }
333           
334       AliESDVZERO *vzeroAOD = esd->GetVZEROData();
335       fMultV0A = vzeroAOD->GetMTotV0A();
336       fMultV0C = vzeroAOD->GetMTotV0C();
337       //
338       fIsV0ATriggered = vzeroAOD->GetV0ADecision();
339       fIsV0CTriggered = vzeroAOD->GetV0CDecision();
340         
341       AliESDZDC *esdZDC = esd->GetESDZDC();
342       
343       fESDFlag =  esdZDC->GetESDQuality();   
344       
345       fZNCEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
346       fZPCEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
347       fZNAEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
348       fZPAEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
349       fZEM1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
350       fZEM2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
351        
352       const Double_t * towZNC = esdZDC->GetZN1TowerEnergy();
353       const Double_t * towZPC = esdZDC->GetZP1TowerEnergy();
354       const Double_t * towZNA = esdZDC->GetZN2TowerEnergy();
355       const Double_t * towZPA = esdZDC->GetZP2TowerEnergy();
356       //
357       const Double_t * towZNCLG = esdZDC->GetZN1TowerEnergyLR();
358       const Double_t * towZPCLG = esdZDC->GetZP1TowerEnergyLR();
359       const Double_t * towZNALG = esdZDC->GetZN2TowerEnergyLR();
360       const Double_t * towZPALG = esdZDC->GetZP2TowerEnergyLR();
361       //
362       for(Int_t it=0; it<5; it++){
363          fZNCtower[it] = (Float_t) (towZNC[it]);
364          fZPCtower[it] = (Float_t) (towZPC[it]);
365          fZNAtower[it] = (Float_t) (towZNA[it]); 
366          fZPAtower[it] = (Float_t) (towZPA[it]);  
367          fZNCtowerLG[it] = (Float_t) (towZNCLG[it]);
368          fZPCtowerLG[it] = (Float_t) (towZPCLG[it]);
369          fZNAtowerLG[it] = (Float_t) (towZNALG[it]); 
370          fZPAtowerLG[it] = (Float_t) (towZPALG[it]);  
371       }
372       
373       /*for(int itdc=0; itdc<4; itdc++){
374          int tdcL0 = 0;
375          if(esdZDC->GetZDCTDCData(15, 0)!=0.) tdcL0 = esdZDC->GetZDCTDCData(15, 0);
376          if(esdZDC->GetZDCTDCData(8, itdc)!=0.) fTDCZEM1[itdc] = esdZDC->GetZDCTDCData(8, itdc)-tdcL0;
377          if(esdZDC->GetZDCTDCData(9, itdc)!=0.) fTDCZEM2[itdc] = esdZDC->GetZDCTDCData(9, itdc)-tdcL0;
378          if(esdZDC->GetZDCTDCData(10, itdc)!=0.) fTDCZNC[itdc] = esdZDC->GetZDCTDCData(10, itdc)-tdcL0;
379          if(esdZDC->GetZDCTDCData(11, itdc)!=0.) fTDCZPC[itdc] = esdZDC->GetZDCTDCData(11, itdc)-tdcL0;
380          if(esdZDC->GetZDCTDCData(11, itdc)!=0.) fTDCZPC[itdc] = esdZDC->GetZDCTDCData(11, itdc)-tdcL0;
381          if(esdZDC->GetZDCTDCData(13, itdc)!=0.) fTDCZPA[itdc] = esdZDC->GetZDCTDCData(13, itdc)-tdcL0;
382       }*/
383       for(Int_t itdc=0; itdc<32; itdc++){
384          for(Int_t i=0; i<4; i++){
385            fTDCvalues[itdc][i] = esdZDC->GetZDCTDCData(itdc, i);
386          }
387       }      
388
389   }   
390   else if(fAnalysisInput.CompareTo("AOD")==0){
391
392       printf("\n \t *** Running analysis on AODs\n\n");
393       
394       AliAODEvent *aod =  dynamic_cast<AliAODEvent*> (InputEvent());
395       if(!aod) return;
396       
397       // Select PHYSICS events (type=7, for data)
398       if(!fIsMCInput && aod->GetEventType()!=7) return; 
399       
400       // use response of AliPhysicsSelection
401       fIsEventSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCINT5);       
402       fIsPileupFromSPD = aod->IsPileupFromSPD(5);
403       
404       AliCentrality *centrality = aod->GetCentrality();
405       fCentralityV0M = centrality->GetCentralityPercentile("V0M");
406       fCentralityV0A = centrality->GetCentralityPercentile("V0A");
407       fCentralityV0C = centrality->GetCentralityPercentile("V0C");
408       fCentralityCL1 = centrality->GetCentralityPercentile("CL1");
409       fCentralityZNA = centrality->GetCentralityPercentile("ZNA");
410       fCentralityZPA = centrality->GetCentralityPercentile("ZPA");
411       fCentralityZNC = centrality->GetCentralityPercentile("ZNC");
412       fCentralityZPC = centrality->GetCentralityPercentile("ZPC");
413       
414       // ***** Trigger selection
415       fTrigClass = aod->GetFiredTriggerClasses();
416       //TString triggerClass = aod->GetFiredTriggerClasses();
417       //sprintf(fTrigClass,"%s",triggerClass.Data());
418       
419       const AliAODVertex *vertex = aod->GetPrimaryVertexSPD();
420       fxVertex = vertex->GetX();
421       fyVertex = vertex->GetY();
422       fzVertex = vertex->GetZ();
423
424       AliAODTracklets *trackl = aod->GetTracklets();
425       fNTracklets = trackl->GetNumberOfTracklets();
426           
427       AliAODVZERO *vzeroAOD = aod->GetVZEROData();
428       fMultV0A = vzeroAOD->GetMTotV0A();
429       fMultV0C = vzeroAOD->GetMTotV0C();
430         
431       AliAODZDC *aodZDC = aod->GetZDCData();
432             
433       fZNCEnergy = (Float_t) (aodZDC->GetZNCEnergy());
434       fZPCEnergy = (Float_t) (aodZDC->GetZPCEnergy());
435       fZNAEnergy = (Float_t) (aodZDC->GetZNAEnergy());
436       fZPAEnergy = (Float_t) (aodZDC->GetZPAEnergy());
437       fZEM1Energy = (Float_t) (aodZDC->GetZEM1Energy());
438       fZEM2Energy = (Float_t) (aodZDC->GetZEM2Energy());
439       
440       const Double_t * towZNC = aodZDC->GetZNCTowerEnergy();
441       const Double_t * towZPC = aodZDC->GetZPCTowerEnergy();
442       const Double_t * towZNA = aodZDC->GetZNATowerEnergy();
443       const Double_t * towZPA = aodZDC->GetZPATowerEnergy();
444       //
445       for(Int_t it=0; it<5; it++){
446          fZNCtower[it] = (Float_t) (towZNC[it]);
447          fZPCtower[it] = (Float_t) (towZPC[it]);
448          fZNAtower[it] = (Float_t) (towZNA[it]); 
449          fZPAtower[it] = (Float_t) (towZPA[it]);  
450       }
451
452   }
453   
454   fCentralityTree->Fill();
455  
456   PostData(1, fOutput);
457   
458   //PostData(1, fCentralityTree);
459    
460 }
461
462
463
464 //________________________________________________________________________
465 void AliAnalysisTaskZDCTreeMaker::Terminate(Option_t */*option*/)
466 {
467   // Terminate analysis
468   //
469   printf(" **** AliAnalysisTaskZDCTreeMaker::Terminate() \n");
470 }