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