1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: ALICE Offline. *
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 **************************************************************************/
17 //=========================================================================//
18 // AliEbyE Analysis for Particle Ratio Fluctuation //
19 // Deepika Rathee | Satyajit Jena //
20 // drathee@cern.ch | sjena@cern.ch //
21 // Dealing with Wide pT Addition (Test Only - not for use)
22 //=========================================================================//
32 #include "AliAnalysisTask.h"
33 #include "AliAnalysisManager.h"
34 #include "AliVEvent.h"
36 #include "AliESDEvent.h"
37 #include "AliAODEvent.h"
38 #include "AliAODMCParticle.h"
39 #include "AliAODMCHeader.h"
40 #include "AliPIDResponse.h"
41 #include "AliAODHeader.h"
42 #include "AliAODpidUtil.h"
43 #include "AliHelperPID.h"
46 #include "AliEbyEPidTTask.h"
48 ClassImp(AliEbyEPidTTask)
50 //-----------------------------------------------------------------------
51 AliEbyEPidTTask::AliEbyEPidTTask( const char *name ) : AliAnalysisTaskSE( name ),
54 fCentralityEstimator("V0M"),
62 fNumberOfTracks(8000),
63 fNumberOfTracksM(8000),
78 fTrackChargeM[kTrack];
82 DefineOutput(1, TList::Class()); //! Connect Outpput....
83 DefineOutput(2, TTree::Class()); //! Connect Outpput....
86 AliEbyEPidTTask::~AliEbyEPidTTask() {
88 if (fThnList) delete fThnList;
89 if (fHelperPID) delete fHelperPID;
90 // if (fEventTree) delete fEventTree;
93 //---------------------------------------------------------------------------------
94 void AliEbyEPidTTask::UserCreateOutputObjects() {
95 fThnList = new TList();
96 fThnList->SetOwner(kTRUE);
98 fEventCounter = new TH1D("fEventCounter","EventCounter", 70, 0.5,70.5);
99 fThnList->Add(fEventCounter);
101 TList *ll = (TList*)fHelperPID->GetOutputList();
102 for (Int_t ikey = 0; ikey < ll->GetEntries(); ikey++) {
103 fThnList->Add(ll->At(ikey));
106 fEventTree = new TTree("fEventTree","fEventTree");
108 fEventTree->Branch("fRunNumber", &fRunNumber, "fRunNumber/I");
109 fEventTree->Branch("fFilterBit", &fFilterBit, "fFilterBit/I");
110 fEventTree->Branch("fNumberOfTracks", &fNumberOfTracks,"fNumberOfTracks/I");
111 fEventTree->Branch("fCentPercentile", &fCentPercentile,"fCentPercentile/F");
113 fEventTree->Branch("fVertexX", &fVertexX, "fVertexX/F");
114 fEventTree->Branch("fVertexY", &fVertexY, "fVertexY/F");
115 fEventTree->Branch("fVertexZ", &fVertexZ, "fVertexZ/F");
117 fEventTree->Branch("fTrackPt", fTrackPt, "fTrackPt[fNumberOfTracks]/F");
118 fEventTree->Branch("fTrackPhi", fTrackPhi, "fTrackPhi[fNumberOfTracks]/F");
119 fEventTree->Branch("fTrackEta", fTrackEta, "fTrackEta[fNumberOfTracks]/F");
120 fEventTree->Branch("fTrackCharge", fTrackCharge, "fTrackCharge[fNumberOfTracks]/I");
121 fEventTree->Branch("fTrackPid", fTrackPid, "fTrackPid[fNumberOfTracks]/I");
124 fEventTree->Branch("fNumberOfTracksM", &fNumberOfTracksM, "fNumberOfTracksM/I");
125 fEventTree->Branch("fTrackPtM", fTrackPtM, "fTrackPtM[fNumberOfTracksM]/F");
126 fEventTree->Branch("fTrackPhiM", fTrackPhiM, "fTrackPhiM[fNumberOfTracksM]/F");
127 fEventTree->Branch("fTrackEtaM", fTrackEtaM, "fTrackEtaM[fNumberOfTracksM]/F");
128 fEventTree->Branch("fTrackChargeM", fTrackChargeM, "fTrackChargeM[fNumberOfTracksM]/I");
129 fEventTree->Branch("fTrackPidM", fTrackPidM, "fTrackPidM[fNumberOfTracksM]/I");
132 PostData(1, fThnList);
133 PostData(2, fEventTree);
136 //----------------------------------------------------------------------------------
137 void AliEbyEPidTTask::UserExec( Option_t * ){
139 fEventCounter->Fill(1);
141 AliAODEvent* event = dynamic_cast<AliAODEvent*>(InputEvent());
143 Printf("ERROR 01: AOD not found ");
147 fEventCounter->Fill(2);
150 Float_t gRefMul = -1;
152 AliAODHeader *aodHeader = event->GetHeader();
153 gCent = (Int_t)aodHeader->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());
154 gRefMul = aodHeader->GetRefMultiplicity();
155 if (gCent < 0 || gCent > 100) return;
156 fEventCounter->Fill(3);
158 const AliAODVertex *vertex = event->GetPrimaryVertex();
160 fEventCounter->Fill(4);
161 Bool_t vtest = kFALSE;
163 vertex->GetCovarianceMatrix(fCov);
164 if(vertex->GetNContributors() > 0) {
171 fEventCounter->Fill(5);
173 AliCentrality *centrality = event->GetCentrality();
174 if (centrality->GetQuality() != 0) return;
176 fEventCounter->Fill(6);
178 fRunNumber = event->GetRunNumber();
179 fFilterBit = fAODtrackCutBit;
180 fCentPercentile = gCent;
181 fVertexX = vertex->GetX();
182 fVertexY = vertex->GetY();
183 fVertexZ = vertex->GetZ();
186 for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
187 AliAODTrack* track = dynamic_cast<AliAODTrack *>(event->GetTrack(itrk));
188 fEventCounter->Fill(10);
189 if (!track) continue;
190 fEventCounter->Fill(11);
191 if (!AcceptTrack(track)) continue;
192 fEventCounter->Fill(12);
193 Int_t a = fHelperPID->GetParticleSpecies((AliVTrack*) track,kTRUE);
194 if(a < 0 || a > 2) continue;
195 fEventCounter->Fill(13);
196 Int_t icharge = track->Charge() > 0 ? 0 : 1;
198 // cout << icharge << " " << track->Charge() << endl;
200 fTrackPt[iTracks] = (Float_t)track->Pt();
201 fTrackPhi[iTracks] = (Float_t)track->Phi();
202 fTrackEta[iTracks] = (Float_t)track->Eta();
203 fTrackCharge[iTracks] = icharge;
204 fTrackPid[iTracks] = a;
207 fNumberOfTracks = iTracks;
210 fEventCounter->Fill(21);
211 TClonesArray *arrayMC= 0;
212 arrayMC = dynamic_cast<TClonesArray*> (event->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
214 Printf("Error: MC particles branch not found!\n");
217 fEventCounter->Fill(22);
218 AliAODMCHeader *mcHdr=0;
219 mcHdr=(AliAODMCHeader*)event->GetList()->FindObject(AliAODMCHeader::StdBranchName());
221 Printf("MC header branch not found!\n");
225 fEventCounter->Fill(23);
227 Int_t nMC = arrayMC->GetEntries();
229 for (Int_t iMC = 0; iMC < nMC; iMC++) {
230 fEventCounter->Fill(24);
231 AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
232 if(!AcceptMCTrack(partMC)) continue;
234 fEventCounter->Fill(25);
235 Int_t a = partMC->GetPdgCode();
237 // Int_t a = fHelperPID->GetMCParticleSpecie((AliVEvent*) event,(AliVTrack*)partMC,1);
239 //if(a < 0 || a > 2) continue;
240 Int_t icharge = a > 0 ? 0 : 1;
242 // cout << a << " " << icharge << endl;
244 fTrackPtM[mTracks] = (Float_t)partMC->Pt();
245 fTrackPhiM[mTracks] = (Float_t)partMC->Phi();
246 fTrackEtaM[mTracks] = (Float_t)partMC->Eta();
247 fTrackChargeM[mTracks] = icharge;
248 fTrackPidM[mTracks] = a;
252 fEventCounter->Fill(26);
253 fNumberOfTracksM = mTracks;
256 fEventCounter->Fill(30);
259 PostData(1, fThnList);
260 PostData(2, fEventTree);
263 //___________________________________________________________
264 void AliEbyEPidTTask::Terminate( Option_t * ){
265 Info("AliEbyEPidTTask"," Task Successfully finished");
268 //___________________________________________________________
269 Bool_t AliEbyEPidTTask::AcceptTrack(AliAODTrack *track) const {
270 if(!track) return kFALSE;
271 if (track->Charge() == 0 ) return kFALSE;
272 if (!track->TestFilterBit(fAODtrackCutBit)) return kFALSE;
277 //___________________________________________________________
278 Bool_t AliEbyEPidTTask::AcceptMCTrack(AliAODMCParticle *track) const {
279 if(!track) return kFALSE;
280 if(!track->IsPhysicalPrimary()) return kFALSE;
281 if (track->Charge() == 0 ) return kFALSE;