1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /////////////////////////////////////////////////////////////
18 // Class to analyze ZDC data //
20 /////////////////////////////////////////////////////////////
28 #include "AliAnalysisManager.h"
29 #include "AliInputEventHandler.h"
30 #include "AliVEvent.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"
57 ClassImp(AliAnalysisTaskZDCTreeMaker)
60 //________________________________________________________________________
61 AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker():
64 fAnalysisInput("ESD"),
66 fUseSpecialOutput(kFALSE),
70 fIsEventSelected(kFALSE),
71 fIsPileupFromSPD(kFALSE),
97 // Default constructor
99 fNClusters[0]=fNClusters[1]=0;
100 for(Int_t itow=0; itow<5; itow++){
105 fZNCtowerLG[itow]=0.;
106 fZPCtowerLG[itow]=0.;
107 fZNAtowerLG[itow]=0.;
108 fZPAtowerLG[itow]=0.;
111 /*for(Int_t ihit=0; ihit<4; ihit++) {
119 for(Int_t itdc=0; itdc<32; itdc++){
120 for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999;
125 //________________________________________________________________________
126 AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker(const char *name):
127 AliAnalysisTaskSE(name),
129 fAnalysisInput("ESD"),
131 fUseSpecialOutput(kFALSE),
133 fCentralityTree(0x0),
135 fIsEventSelected(kFALSE),
136 fIsPileupFromSPD(kFALSE),
163 // Default constructor
164 fNClusters[0]=fNClusters[1]=0;
166 for(Int_t itow=0; itow<5; itow++){
171 fZNCtowerLG[itow]=0.;
172 fZPCtowerLG[itow]=0.;
173 fZNAtowerLG[itow]=0.;
174 fZPAtowerLG[itow]=0.;
177 /*for(Int_t ihit=0; ihit<4; ihit++) {
185 //for(Int_t itdc=0; itdc<32; itdc++){
186 // for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999;
189 // Output slot #1 writes into a TList container
190 DefineOutput(1, TList::Class());
191 //DefineOutput(1, TTree::Class());
195 //________________________________________________________________________
196 AliAnalysisTaskZDCTreeMaker::~AliAnalysisTaskZDCTreeMaker()
199 if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
200 delete fOutput; fOutput=0;
202 /*if(fCentralityTree && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
203 delete fCentralityTree; fCentralityTree=0;
208 //________________________________________________________________________
209 void AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects()
211 // Create the output containers
212 if(fDebug>1) printf("AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects() \n");
214 if (fUseSpecialOutput) OpenFile(1);
216 // Several histograms are more conveniently managed in a TList
219 //fOutput->SetName("output");
221 fCentralityTree = new TTree("fCentralityTree", "Centrality vs. multiplicity tree");
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");
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");
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");
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");
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");*/
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");
273 fOutput->Add(fCentralityTree);
274 PostData(1, fOutput);
276 //PostData(1, fCentralityTree);
279 //________________________________________________________________________
280 void AliAnalysisTaskZDCTreeMaker::UserExec(Option_t */*option*/)
282 // Execute analysis for current event:
283 if(fDebug>1) printf(" **** AliAnalysisTaskZDCTreeMaker::UserExec() \n");
286 Printf("ERROR: InputEvent not available");
290 if(fAnalysisInput.CompareTo("ESD")==0){
292 //printf(" \t ***Analizing ESD ev. %d\n",fNev);
294 AliESDEvent* esd = dynamic_cast<AliESDEvent*> (InputEvent());
297 // Select PHYSICS events (type=7, for data)
298 if(!fIsMCInput && esd->GetEventType()!=7) return;
300 // ***** Trigger selection
301 fTrigClass = esd->GetFiredTriggerClasses();
302 //TString triggerClass = esd->GetFiredTriggerClasses();
303 //sprintf(fTrigClass,"%s",triggerClass.Data());
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();
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");
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;
327 const AliMultiplicity *mult = esd->GetMultiplicity();
328 fNTracklets = mult->GetNumberOfTracklets();
330 for(Int_t ilay=0; ilay<2; ilay++){
331 fNClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
334 AliESDVZERO *vzeroAOD = esd->GetVZEROData();
335 fMultV0A = vzeroAOD->GetMTotV0A();
336 fMultV0C = vzeroAOD->GetMTotV0C();
338 fIsV0ATriggered = vzeroAOD->GetV0ADecision();
339 fIsV0CTriggered = vzeroAOD->GetV0CDecision();
341 AliESDZDC *esdZDC = esd->GetESDZDC();
343 fESDFlag = esdZDC->GetESDQuality();
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));
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();
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();
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]);
373 /*for(int itdc=0; itdc<4; itdc++){
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;
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);
390 else if(fAnalysisInput.CompareTo("AOD")==0){
392 printf("\n \t *** Running analysis on AODs\n\n");
394 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
397 // Select PHYSICS events (type=7, for data)
398 if(!fIsMCInput && aod->GetEventType()!=7) return;
400 // use response of AliPhysicsSelection
401 fIsEventSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCINT5);
402 fIsPileupFromSPD = aod->IsPileupFromSPD(5);
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");
414 // ***** Trigger selection
415 fTrigClass = aod->GetFiredTriggerClasses();
416 //TString triggerClass = aod->GetFiredTriggerClasses();
417 //sprintf(fTrigClass,"%s",triggerClass.Data());
419 const AliAODVertex *vertex = aod->GetPrimaryVertexSPD();
420 fxVertex = vertex->GetX();
421 fyVertex = vertex->GetY();
422 fzVertex = vertex->GetZ();
424 AliAODTracklets *trackl = aod->GetTracklets();
425 fNTracklets = trackl->GetNumberOfTracklets();
427 AliAODVZERO *vzeroAOD = aod->GetVZEROData();
428 fMultV0A = vzeroAOD->GetMTotV0A();
429 fMultV0C = vzeroAOD->GetMTotV0C();
431 AliAODZDC *aodZDC = aod->GetZDCData();
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());
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();
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]);
454 fCentralityTree->Fill();
456 PostData(1, fOutput);
458 //PostData(1, fCentralityTree);
464 //________________________________________________________________________
465 void AliAnalysisTaskZDCTreeMaker::Terminate(Option_t */*option*/)
467 // Terminate analysis
469 printf(" **** AliAnalysisTaskZDCTreeMaker::Terminate() \n");