/************************************************************************** * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ ///////////////////////////////////////////////////////////// // // // Class to analyze ZDC data // // // ///////////////////////////////////////////////////////////// #include //#include #include #include #include #include "AliAnalysisManager.h" #include "AliInputEventHandler.h" #include "AliVEvent.h" #include "AliESD.h" #include "AliESDEvent.h" #include "AliESDHeader.h" #include "AliESDInputHandler.h" #include "AliESDZDC.h" #include "AliMultiplicity.h" #include "AliAODHandler.h" #include "AliAODEvent.h" #include "AliAODHeader.h" #include "AliAODVertex.h" #include "AliAODVZERO.h" #include "AliAODZDC.h" #include "AliAODMCHeader.h" #include "AliMCEventHandler.h" #include "AliMCEvent.h" #include "AliHeader.h" #include "AliAODMCParticle.h" #include "AliAnalysisTaskSE.h" #include "AliGenEventHeader.h" #include "AliGenHijingEventHeader.h" #include "AliPhysicsSelectionTask.h" #include "AliPhysicsSelection.h" #include "AliTriggerAnalysis.h" #include "AliCentrality.h" #include "AliAnalysisTaskZDCTreeMaker.h" ClassImp(AliAnalysisTaskZDCTreeMaker) //________________________________________________________________________ AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker(): AliAnalysisTaskSE(), fDebug(0), fAnalysisInput("ESD"), fIsMCInput(kFALSE), fUseSpecialOutput(kFALSE), fOutput(0x0), fCentralityTree(0x0), fIsEventSelected(kFALSE), fIsPileupFromSPD(kFALSE), /*fxVertex(0), fyVertex(0), fzVertex(0), fVertexer3d(kFALSE),*/ fNTracklets(0), fIsV0ATriggered(0), fIsV0CTriggered(0), fMultV0A(0), fMultV0C(0), fESDFlag(0), /*fZNCEnergy(0), fZPCEnergy(0), fZNAEnergy(0), fZPAEnergy(0),*/ fZEM1Energy(0), fZEM2Energy(0), //fCentralityV0M(0), fCentralityV0A(0), fCentralityV0C(0), fCentralityCL1(0), fCentralityZNA(0), fCentralityZPA(0), fCentralityZNC(0), fCentralityZPC(0) { // Default constructor for(int i=0; i<400; i++) fTracklEta[i] = -999.; fNClusters[0]=fNClusters[1]=0; for(int i=0; i<8; i++) fRingMultV0[i] = 0.; for(Int_t itow=0; itow<5; itow++){ fZNCtower[itow]=0.; fZPCtower[itow]=0.; fZNAtower[itow]=0.; fZPAtower[itow]=0.; fZNCtowerLG[itow]=0.; fZPCtowerLG[itow]=0.; fZNAtowerLG[itow]=0.; fZPAtowerLG[itow]=0.; } /*for(Int_t itdc=0; itdc<32; itdc++){ for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999; }*/ } //________________________________________________________________________ AliAnalysisTaskZDCTreeMaker::AliAnalysisTaskZDCTreeMaker(const char *name): AliAnalysisTaskSE(name), fDebug(0), fAnalysisInput("ESD"), fIsMCInput(kFALSE), fUseSpecialOutput(kFALSE), fOutput(0x0), fCentralityTree(0x0), fIsEventSelected(kFALSE), fIsPileupFromSPD(kFALSE), /*fxVertex(0), fyVertex(0), fzVertex(0), fVertexer3d(kFALSE),*/ fNTracklets(0), fIsV0ATriggered(0), fIsV0CTriggered(0), fMultV0A(0), fMultV0C(0), fESDFlag(0), /*fZNCEnergy(0), fZPCEnergy(0), fZNAEnergy(0), fZPAEnergy(0),*/ fZEM1Energy(0), fZEM2Energy(0), //fCentralityV0M(0), fCentralityV0A(0), fCentralityV0C(0), fCentralityCL1(0), fCentralityZNA(0), fCentralityZPA(0), fCentralityZNC(0), fCentralityZPC(0) { // Default constructor for(int i=0; i<400; i++) fTracklEta[i] = -999.; fNClusters[0]=fNClusters[1]=0; for(int i=0; i<8; i++) fRingMultV0[i] = 0.; for(Int_t itow=0; itow<5; itow++){ fZNCtower[itow]=0.; fZPCtower[itow]=0.; fZNAtower[itow]=0.; fZPAtower[itow]=0.; fZNCtowerLG[itow]=0.; fZPCtowerLG[itow]=0.; fZNAtowerLG[itow]=0.; fZPAtowerLG[itow]=0.; } /*for(Int_t itdc=0; itdc<32; itdc++){ for(Int_t ihit=0; ihit<4; ihit++) fTDCvalues[itdc][ihit]=9999; }*/ // Output slot #1 writes into a TList container DefineOutput(1, TList::Class()); //DefineOutput(1, TTree::Class()); } //________________________________________________________________________ AliAnalysisTaskZDCTreeMaker::~AliAnalysisTaskZDCTreeMaker() { // Destructor if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){ delete fOutput; fOutput=0; } /*if(fCentralityTree && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){ delete fCentralityTree; fCentralityTree=0; } */ } //________________________________________________________________________ void AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects() { // Create the output containers if(fDebug>1) printf("AliAnalysisTaskZDCTreeMaker::UserCreateOutputObjects() \n"); if (fUseSpecialOutput) OpenFile(1); // Several histograms are more conveniently managed in a TList fOutput = new TList; fOutput->SetOwner(); //fOutput->SetName("output"); fCentralityTree = new TTree("fCentralityTree", "Centrality vs. multiplicity tree"); // fCentralityTree->Branch("trigClass",&fTrigClass,"trigClass/C"); fCentralityTree->Branch("eventSelected",&fIsEventSelected,"eventSelected/O"); fCentralityTree->Branch("pileupSPD",&fIsPileupFromSPD,"pileupSPD/O"); /*fCentralityTree->Branch("xVertex", &fxVertex,"xVertex/D"); fCentralityTree->Branch("yVertex", &fyVertex,"yVertex/D"); fCentralityTree->Branch("zVertex", &fzVertex,"zVertex/D"); fCentralityTree->Branch("vertexer3d", &fVertexer3d,"vertexer3d/O");*/ fCentralityTree->Branch("nTracklets", &fNTracklets,"nTracklets/I"); fCentralityTree->Branch("tracklEta", fTracklEta,"tracklEta[400]/D"); fCentralityTree->Branch("nClusters", fNClusters,"nClusters[2]/I"); // fCentralityTree->Branch("isV0ATriggered", &fIsV0ATriggered,"isV0ATriggered/I"); fCentralityTree->Branch("isV0CTriggered", &fIsV0CTriggered,"isV0CTriggered/I"); fCentralityTree->Branch("multV0A", &fMultV0A,"multV0A/F"); fCentralityTree->Branch("multV0C", &fMultV0C,"multV0C/F"); fCentralityTree->Branch("ringmultV0", fRingMultV0,"ringmultV0[8]/F"); fCentralityTree->Branch("esdFlag", &fESDFlag,"esdFlag/i"); /*fCentralityTree->Branch("zncEnergy", &fZNCEnergy, "zncEnergy/F"); fCentralityTree->Branch("zpcEnergy", &fZPCEnergy, "zpcEnergy/F"); fCentralityTree->Branch("znaEnergy", &fZNAEnergy, "znaEnergy/F"); fCentralityTree->Branch("zpaEnergy", &fZPAEnergy, "zpaEnergy/F");*/ fCentralityTree->Branch("zem1Energy", &fZEM1Energy, "zem1Energy/F"); fCentralityTree->Branch("zem2Energy", &fZEM2Energy, "zem2Energy/F"); fCentralityTree->Branch("znctower", fZNCtower, "znctower[5]/F"); fCentralityTree->Branch("zpctower", fZPCtower, "zpctower[5]/F"); fCentralityTree->Branch("znatower", fZNAtower, "znatower[5]/F"); fCentralityTree->Branch("zpatower", fZPAtower, "zpatower[5]/F"); fCentralityTree->Branch("znctowerLG", fZNCtowerLG, "znctowerLG[5]/F"); fCentralityTree->Branch("zpctowerLG", fZPCtowerLG, "zpctowerLG[5]/F"); fCentralityTree->Branch("znatowerLG", fZNAtowerLG, "znatowerLG[5]/F"); fCentralityTree->Branch("zpatowerLG", fZPAtowerLG, "zpatowerLG[5]/F"); // fCentralityTree->Branch("tdc", fTDCvalues, "tdc[32][4]/I"); // fCentralityTree->Branch("tdcCorr", fTDCcorr, "tdcCorr[32][4]/F"); //fCentralityTree->Branch("centrV0mult", &fCentralityV0M, "centrV0mult/F"); fCentralityTree->Branch("centrV0Amult", &fCentralityV0A, "centrV0Amult/F"); fCentralityTree->Branch("centrV0Cmult", &fCentralityV0C, "centrV0Cmult/F"); fCentralityTree->Branch("centrSPDclu1", &fCentralityCL1, "centrSPDclu1/F"); fCentralityTree->Branch("centrZNA", &fCentralityZNA, "centrZNA/F"); fCentralityTree->Branch("centrZPA", &fCentralityZPA, "centrZPA/F"); fCentralityTree->Branch("centrZNC", &fCentralityZNC, "centrZNC/F"); fCentralityTree->Branch("centrZPC", &fCentralityZPC, "centrZPC/F"); fOutput->Add(fCentralityTree); PostData(1, fOutput); //PostData(1, fCentralityTree); } //________________________________________________________________________ void AliAnalysisTaskZDCTreeMaker::UserExec(Option_t */*option*/) { // Execute analysis for current event: if(fDebug>1) printf(" **** AliAnalysisTaskZDCTreeMaker::UserExec() \n"); if (!InputEvent()) { Printf("ERROR: InputEvent not available"); return; } if(fAnalysisInput.CompareTo("ESD")==0){ //printf(" \t ***Analizing ESD ev. %d\n",fNev); AliESDEvent* esd = dynamic_cast (InputEvent()); if(!esd) return; // Select PHYSICS events (type=7, for data) if(!fIsMCInput && esd->GetEventType()!=7) return; for(int ir=0; ir<8; ir++) fRingMultV0[ir]=0.; // ***** Trigger selection TString triggerClass = esd->GetFiredTriggerClasses(); sprintf(fTrigClass,"%s",triggerClass.Data()); // use response of AliPhysicsSelection fIsEventSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kAnyINT); fIsPileupFromSPD = esd->IsPileupFromSPD(6, 0.8); //fIsPileupFromSPD = esd->IsPileupFromSPDInMultBins(); AliCentrality *centrality = esd->GetCentrality(); //fCentralityV0M = centrality->GetCentralityPercentile("V0M"); fCentralityV0A = centrality->GetCentralityPercentile("V0A"); fCentralityV0C = centrality->GetCentralityPercentile("V0C"); fCentralityCL1 = centrality->GetCentralityPercentile("CL1"); fCentralityZNA = centrality->GetCentralityPercentile("ZNA"); fCentralityZPA = centrality->GetCentralityPercentile("ZPA"); fCentralityZNC = centrality->GetCentralityPercentile("ZNC"); fCentralityZPC = centrality->GetCentralityPercentile("ZPC"); /*const AliESDVertex *vertex = esd->GetPrimaryVertexSPD(); fxVertex = vertex->GetX(); fyVertex = vertex->GetY(); fzVertex = vertex->GetZ(); if(vertex->IsFromVertexer3D()) fVertexer3d = kTRUE; else fVertexer3d = kFALSE;*/ const AliMultiplicity *mult = esd->GetMultiplicity(); fNTracklets = mult->GetNumberOfTracklets(); for(int itr=0; itrGetEta(itr); } for(Int_t ilay=0; ilay<2; ilay++){ fNClusters[ilay] = mult->GetNumberOfITSClusters(ilay); } AliESDVZERO *vzeroESD = esd->GetVZEROData(); fMultV0A = vzeroESD->GetMTotV0A(); fMultV0C = vzeroESD->GetMTotV0C(); // fIsV0ATriggered = vzeroESD->GetV0ADecision(); fIsV0CTriggered = vzeroESD->GetV0CDecision(); // for(Int_t iRing = 0; iRing < 8; ++iRing) { for(Int_t i = 0; i < 8; ++i) { // fRingMultV0[iRing] += esd->GetVZEROEqMultiplicity(8*iRing+i); fRingMultV0[iRing] += vzeroESD->GetMultiplicity(8*iRing+i); } } AliESDZDC *esdZDC = esd->GetESDZDC(); fESDFlag = esdZDC->GetESDQuality(); /*fZNCEnergy = (Float_t) (esdZDC->GetZDCN1Energy()); fZPCEnergy = (Float_t) (esdZDC->GetZDCP1Energy()); fZNAEnergy = (Float_t) (esdZDC->GetZDCN2Energy()); fZPAEnergy = (Float_t) (esdZDC->GetZDCP2Energy());*/ fZEM1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0)); fZEM2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1)); const Double_t * towZNC = esdZDC->GetZN1TowerEnergy(); const Double_t * towZPC = esdZDC->GetZP1TowerEnergy(); const Double_t * towZNA = esdZDC->GetZN2TowerEnergy(); const Double_t * towZPA = esdZDC->GetZP2TowerEnergy(); // const Double_t * towZNCLG = esdZDC->GetZN1TowerEnergyLR(); const Double_t * towZPCLG = esdZDC->GetZP1TowerEnergyLR(); const Double_t * towZNALG = esdZDC->GetZN2TowerEnergyLR(); const Double_t * towZPALG = esdZDC->GetZP2TowerEnergyLR(); // for(Int_t it=0; it<5; it++){ fZNCtower[it] = (Float_t) (towZNC[it]); fZPCtower[it] = (Float_t) (towZPC[it]); fZNAtower[it] = (Float_t) (towZNA[it]); fZPAtower[it] = (Float_t) (towZPA[it]); fZNCtowerLG[it] = (Float_t) (towZNCLG[it]); fZPCtowerLG[it] = (Float_t) (towZPCLG[it]); fZNAtowerLG[it] = (Float_t) (towZNALG[it]); fZPAtowerLG[it] = (Float_t) (towZPALG[it]); } /*for(Int_t itdc=0; itdc<32; itdc++){ for(Int_t i=0; i<4; i++){ fTDCvalues[itdc][i] = esdZDC->GetZDCTDCData(itdc, i); } }*/ } else if(fAnalysisInput.CompareTo("AOD")==0){ printf("\n \t *** Analysis on AODs is NOT implemented\n\n"); } fCentralityTree->Fill(); PostData(1, fOutput); //PostData(1, fCentralityTree); } //________________________________________________________________________ void AliAnalysisTaskZDCTreeMaker::Terminate(Option_t */*option*/) { // Terminate analysis // printf(" **** AliAnalysisTaskZDCTreeMaker::Terminate() \n"); }