]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/PIDFluctuation/task/AliEbyEPidTTaskMC.cxx
AliAODEvent::GetHeader() returns AliVHeader
[u/mrichter/AliRoot.git] / PWGCF / EBYE / PIDFluctuation / task / AliEbyEPidTTaskMC.cxx
CommitLineData
027ebdf2 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: ALICE Offline. *
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// 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//=========================================================================//
23
24#include "TChain.h"
25#include "TList.h"
26#include "TFile.h"
27#include "TTree.h"
28#include "TH1D.h"
29#include "TH2F.h"
30#include "TH3F.h"
31#include "TCanvas.h"
32#include "AliAnalysisTask.h"
33#include "AliAnalysisManager.h"
34#include "AliVEvent.h"
35#include "AliESD.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"
9e4f5bb3 43#include "AliPIDCombined.h"
027ebdf2 44#include "AliHelperPID.h"
45using std::endl;
46using std::cout;
47#include "AliEbyEPidTTaskMC.h"
48
49ClassImp(AliEbyEPidTTaskMC)
50
51//-----------------------------------------------------------------------
52AliEbyEPidTTaskMC::AliEbyEPidTTaskMC( const char *name ) : AliAnalysisTaskSE( name ),
53 fThnList(NULL),
54 isMC(kFALSE),
55 fCentralityEstimator("V0M"),
56 fAODtrackCutBit(128),
57 fHelperPID(0x0),
58 fEventCounter(NULL),
59 fEventTree(NULL),
027ebdf2 60 fRunNumber(0),
61 fNumberOfTracks(8000),
62 fNumberOfTracksM(8000),
63 fFilterBit(99),
64 fCentPercentile(-1),
65 fVertexX(-99),
66 fVertexY(-99),
67 fVertexZ(-99) {
68 /*
69 fTrackPt[kTrack];
70 fTrackEta[kTrack];
71 fTrackPhi[kTrack];
72 fTrackPtM[kTrack];
73 fTrackEtaM[kTrack];
74 fTrackPhiM[kTrack];
75 fTrackCharge[kTrack];
76 fTrackPid[kTrack];
77 fTrackChargeM[kTrack];
78 fTrackPidM[kTrack];
79 */
50c07b57 80 DefineInput(0,TChain::Class());
81 DefineOutput(1, TList::Class());
82 DefineOutput(2, TTree::Class());
027ebdf2 83}
84
85AliEbyEPidTTaskMC::~AliEbyEPidTTaskMC() {
86 //! Cleaning up
50c07b57 87 if (fThnList) delete fThnList;
88 if (fHelperPID) delete fHelperPID;
89 if (fEventTree) delete fEventTree;
027ebdf2 90}
91
92//---------------------------------------------------------------------------------
93void AliEbyEPidTTaskMC::UserCreateOutputObjects() {
94 fThnList = new TList();
95 fThnList->SetOwner(kTRUE);
96
97 fEventCounter = new TH1D("fEventCounter","EventCounter", 70, 0.5,70.5);
98 fThnList->Add(fEventCounter);
99
100 TList *ll = (TList*)fHelperPID->GetOutputList();
101 for (Int_t ikey = 0; ikey < ll->GetEntries(); ikey++) {
102 fThnList->Add(ll->At(ikey));
103 }
50c07b57 104 TDirectory *owd = gDirectory;
105 OpenFile(1);
027ebdf2 106 fEventTree = new TTree("fEventTree","fEventTree");
50c07b57 107 owd->cd();
108
027ebdf2 109 fEventTree->Branch("fRunNumber", &fRunNumber, "fRunNumber/I");
110 fEventTree->Branch("fFilterBit", &fFilterBit, "fFilterBit/I");
111 fEventTree->Branch("fNumberOfTracks", &fNumberOfTracks,"fNumberOfTracks/I");
112 fEventTree->Branch("fCentPercentile", &fCentPercentile,"fCentPercentile/F");
113
114 fEventTree->Branch("fVertexX", &fVertexX, "fVertexX/F");
115 fEventTree->Branch("fVertexY", &fVertexY, "fVertexY/F");
116 fEventTree->Branch("fVertexZ", &fVertexZ, "fVertexZ/F");
117
118 fEventTree->Branch("fTrackPt", fTrackPt, "fTrackPt[fNumberOfTracks]/F");
119 fEventTree->Branch("fTrackPhi", fTrackPhi, "fTrackPhi[fNumberOfTracks]/F");
120 fEventTree->Branch("fTrackEta", fTrackEta, "fTrackEta[fNumberOfTracks]/F");
121 fEventTree->Branch("fTrackCharge", fTrackCharge, "fTrackCharge[fNumberOfTracks]/I");
122 fEventTree->Branch("fTrackPid", fTrackPid, "fTrackPid[fNumberOfTracks]/I");
123
124
125 fEventTree->Branch("fNumberOfTracksM", &fNumberOfTracksM, "fNumberOfTracksM/I");
126 fEventTree->Branch("fTrackPtM", fTrackPtM, "fTrackPtM[fNumberOfTracksM]/F");
127 fEventTree->Branch("fTrackPhiM", fTrackPhiM, "fTrackPhiM[fNumberOfTracksM]/F");
128 fEventTree->Branch("fTrackEtaM", fTrackEtaM, "fTrackEtaM[fNumberOfTracksM]/F");
129 fEventTree->Branch("fTrackChargeM", fTrackChargeM, "fTrackChargeM[fNumberOfTracksM]/I");
130 fEventTree->Branch("fTrackPidM", fTrackPidM, "fTrackPidM[fNumberOfTracksM]/I");
131
132 PostData(1, fThnList);
133 PostData(2, fEventTree);
134}
135
136//----------------------------------------------------------------------------------
137void AliEbyEPidTTaskMC::UserExec( Option_t * ){
138
50c07b57 139 fEventCounter->Fill(1);
140
027ebdf2 141 AliAODEvent* event = dynamic_cast<AliAODEvent*>(InputEvent());
142 if (!event) {
143 Printf("ERROR 01: AOD not found ");
144 return;
145 }
50c07b57 146
027ebdf2 147 fEventCounter->Fill(2);
148
149 Int_t gCent = -1;
638ae862 150 //Float_t gRefMul = -1;
027ebdf2 151
0a918d8d 152 AliAODHeader *aodHeader = dynamic_cast<AliAODHeader*>(event->GetHeader());
153 if(!aodHeader) AliFatal("Not a standard AOD");
027ebdf2 154 gCent = (Int_t)aodHeader->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());
638ae862 155 // gRefMul = aodHeader->GetRefMultiplicity();
027ebdf2 156 if (gCent < 0 || gCent > 100) return;
157 fEventCounter->Fill(3);
158
159 const AliAODVertex *vertex = event->GetPrimaryVertex();
160 if(!vertex) return;
161 fEventCounter->Fill(4);
162 Bool_t vtest = kFALSE;
163 Double32_t fCov[6];
164 vertex->GetCovarianceMatrix(fCov);
165 if(vertex->GetNContributors() > 0) {
166 if(fCov[5] != 0) {
167 vtest = kTRUE;
168 }
169 }
170 if(!vtest)return;
171
172 fEventCounter->Fill(5);
173
174 AliCentrality *centrality = event->GetCentrality();
175 if (centrality->GetQuality() != 0) return;
176
122cbc27 177 fEventCounter->Fill(21);
178
179 TClonesArray *arrayMC= 0;
180 arrayMC = dynamic_cast<TClonesArray*> (event->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
181 if (!arrayMC) {
182 Printf("Error: MC particles branch not found!\n");
183 return;
184 }
185 fEventCounter->Fill(22);
186 AliAODMCHeader *mcHdr=0;
187 mcHdr=(AliAODMCHeader*)event->GetList()->FindObject(AliAODMCHeader::StdBranchName());
188 if(!mcHdr) {
189 Printf("MC header branch not found!\n");
190 return;
191 }
192
027ebdf2 193 fEventCounter->Fill(6);
50c07b57 194
027ebdf2 195 fRunNumber = event->GetRunNumber();
196 fFilterBit = fAODtrackCutBit;
197 fCentPercentile = gCent;
198 fVertexX = vertex->GetX();
199 fVertexY = vertex->GetY();
200 fVertexZ = vertex->GetZ();
9e4f5bb3 201
202//Default TPC priors
203 if(fHelperPID->GetPIDType()==kBayes)fHelperPID->GetPIDCombined()->SetDefaultTPCPriors();//FIXME maybe this can go in the UserCreateOutputObject?
204
027ebdf2 205 Int_t iTracks = 0;
206 for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
207 AliAODTrack* track = dynamic_cast<AliAODTrack *>(event->GetTrack(itrk));
208 fEventCounter->Fill(10);
209 if (!track) continue;
210 fEventCounter->Fill(11);
211 if (!AcceptTrack(track)) continue;
212 fEventCounter->Fill(12);
213 Int_t a = fHelperPID->GetParticleSpecies((AliVTrack*) track,kTRUE);
9e4f5bb3 214 // if(a < 0 || a > 2) continue;
027ebdf2 215 fEventCounter->Fill(13);
122cbc27 216 //Int_t icharge = track->Charge() > 0 ? 0 : 1;
217 Int_t b = -999;
218 if (a == 0 ) b = 1;
219 else if (a == 1 ) b = 2;
220 else if (a == 2 ) b = 3;
221 else b = 4;
027ebdf2 222
122cbc27 223 if (track->Charge() < 0 ) b = -1*b;
224
225 Int_t isph=-999;
226 if (arrayMC) {
227 AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
228 if (!partMC) {
229 AliError("Cannot get MC particle");
230 continue;
231 }
232 isph=partMC->IsPhysicalPrimary();
233 }
234
9e4f5bb3 235 // cout << b << " " << track->Charge() << " " << isph << endl;
027ebdf2 236
237 fTrackPt[iTracks] = (Float_t)track->Pt();
238 fTrackPhi[iTracks] = (Float_t)track->Phi();
239 fTrackEta[iTracks] = (Float_t)track->Eta();
122cbc27 240 fTrackCharge[iTracks] = isph;
241 fTrackPid[iTracks] = b;
027ebdf2 242 iTracks++;
243 }
244 fNumberOfTracks = iTracks;
245
122cbc27 246
50c07b57 247 fEventCounter->Fill(23);
248
249
250 Int_t mTracks = 0;
251
252 Int_t nMC = arrayMC->GetEntries();
253
254 for (Int_t iMC = 0; iMC < nMC; iMC++) {
255 //fEventCounter->Fill(24);
256 AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);
257 // if(!partMC) continue;
258 if(!AcceptMCTrack(partMC)) continue;
259 // fEventCounter->Fill(25);
122cbc27 260 Int_t b = partMC->GetPdgCode();
261 Int_t k = -99;
262 k = partMC->IsPhysicalPrimary();
263
264 Int_t a = -999;
265 if (b == 211 ) a = 1;
266 else if (b == -211 ) a = -1;
267 else if (b == 2212 ) a = 3;
268 else if (b == -2212 ) a = -3;
269 else if (b == 321 ) a = 2;
270 else if (b == -321 ) a = -2;
271 else if (b > 0 ) a = 4;
272 else if (b < 0 ) a = -4;
273
50c07b57 274 //Int_t a = 0;
275 // Int_t a = fHelperPID->GetMCParticleSpecie((AliVEvent*) event,(AliVTrack*)partMC,1);
027ebdf2 276
50c07b57 277 //if(a < 0 || a > 2) continue;
122cbc27 278 // Int_t icharge = a > 0 ? 0 : 1;
279 // cout << a << " " << b << " " << iMC << " " << mTracks << " " << k << endl;
027ebdf2 280
50c07b57 281 fTrackPtM[mTracks] = (Float_t)partMC->Pt();
282 fTrackPhiM[mTracks] = (Float_t)partMC->Phi();
283 fTrackEtaM[mTracks] = (Float_t)partMC->Eta();
122cbc27 284 fTrackChargeM[mTracks] = k;
50c07b57 285 fTrackPidM[mTracks] = a;
286 mTracks++;
287 }
288 // cout << mTracks << " " << nMC << endl;
289 fEventCounter->Fill(26);
290 fNumberOfTracksM = mTracks;
027ebdf2 291
292 fEventCounter->Fill(30);
293 fEventTree->Fill();
294
295 if(isMC) fEventCounter->Fill(46);
296 else fEventCounter->Fill(48);
50c07b57 297
027ebdf2 298 PostData(1, fThnList);
299 PostData(2, fEventTree);
300}
301
302//___________________________________________________________
303void AliEbyEPidTTaskMC::Terminate( Option_t * ){
304 Info("AliEbyEPidTTaskMC"," Task Successfully finished");
305}
306
307//___________________________________________________________
308Bool_t AliEbyEPidTTaskMC::AcceptTrack(AliAODTrack *track) const {
309 if(!track) return kFALSE;
310 if (track->Charge() == 0 ) return kFALSE;
311 if (!track->TestFilterBit(fAODtrackCutBit)) return kFALSE;
122cbc27 312 if (TMath::Abs(track->Eta()) > 0.8) return kFALSE;
027ebdf2 313 return kTRUE;
314}
315
316
317//___________________________________________________________
318Bool_t AliEbyEPidTTaskMC::AcceptMCTrack(AliAODMCParticle *track) const {
319 if(!track) return kFALSE;
027ebdf2 320 if (track->Charge() == 0 ) return kFALSE;
122cbc27 321 if (TMath::Abs(track->Eta()) > 0.8) return kFALSE;
027ebdf2 322 return kTRUE;
323}