]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/hfe/AliAnalysisTaskElecHadronCorrel.cxx
Add INT7 on the trigger counter for QA purposes (D. Caffarri)
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliAnalysisTaskElecHadronCorrel.cxx
CommitLineData
57189f04 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
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// //
19// Task for Heavy Flavour Electron-Hadron DeltaPhi Correlation //
20// Non-Photonic Electron identified with Invariant mass //
21// analysis methos in function SelectPhotonicElectron //
22// DeltaPhi calculated in function ElectronHadCorrel //
23// //
24// Author: Deepa Thomas (Utrecht University) //
25// //
26////////////////////////////////////////////////////////////////////////
27
28#include "TChain.h"
29#include "TTree.h"
30#include "TH2F.h"
31#include "TMath.h"
32#include "TCanvas.h"
33#include "THnSparse.h"
34#include "TLorentzVector.h"
35#include "TString.h"
36#include "TFile.h"
37
38#include "AliAnalysisTask.h"
39#include "AliAnalysisManager.h"
40
41#include "AliESDEvent.h"
42#include "AliESDHandler.h"
43#include "AliAODEvent.h"
44#include "AliAODHandler.h"
45
46#include "AliAnalysisTaskElecHadronCorrel.h"
47#include "TGeoGlobalMagField.h"
48#include "AliLog.h"
49#include "AliAnalysisTaskSE.h"
50#include "TRefArray.h"
51#include "TVector.h"
987053ce 52
57189f04 53#include "AliESDInputHandler.h"
987053ce 54#include "AliAODInputHandler.h"
57189f04 55#include "AliESDpid.h"
987053ce 56#include "AliAODPid.h"
57189f04 57#include "AliESDtrackCuts.h"
58#include "AliPhysicsSelection.h"
987053ce 59#include "AliCentralitySelectionTask.h"
57189f04 60#include "AliESDCaloCluster.h"
61#include "AliAODCaloCluster.h"
520a29a8 62#include "AliESDCaloTrigger.h"
57189f04 63#include "AliEMCALRecoUtils.h"
64#include "AliEMCALGeometry.h"
65#include "AliGeomManager.h"
66#include "stdio.h"
67#include "TGeoManager.h"
68#include "iostream"
69#include "fstream"
3c56855b 70
71//#include "AliEventPoolManager.h"
72
520a29a8 73#include "AliCentrality.h"
57189f04 74#include "AliMagF.h"
75
76#include "AliKFParticle.h"
77#include "AliKFVertex.h"
78
79#include "AliPID.h"
80#include "AliPIDResponse.h"
81#include "AliHFEcontainer.h"
82#include "AliHFEcuts.h"
83#include "AliHFEpid.h"
84#include "AliHFEpidBase.h"
85#include "AliHFEpidQAmanager.h"
86#include "AliHFEtools.h"
87#include "AliCFContainer.h"
88#include "AliCFManager.h"
987053ce 89#include "AliVEvent.h"
90#include "AliStack.h"
91#include "AliMCEvent.h"
92#include "TProfile.h"
93#include "AliESDVZERO.h"
94#include "AliAODVZERO.h"
95#include "TVector3.h"
96#include "TRandom2.h"
57189f04 97
98ClassImp(AliAnalysisTaskElecHadronCorrel)
3c56855b 99//ClassImp(AliehDPhiBasicParticle)
57189f04 100//________________________________________________________________________
520a29a8 101 AliAnalysisTaskElecHadronCorrel::AliAnalysisTaskElecHadronCorrel(const char *name)
57189f04 102 : AliAnalysisTaskSE(name)
987053ce 103 ,fVevent(0)
57189f04 104 ,fESD(0)
987053ce 105 ,fAOD(0)
57189f04 106 ,fGeom(0)
107 ,fOutputList(0)
520a29a8 108 ,fTrackCuts1(new AliESDtrackCuts)
109 ,fTrackCuts2(new AliESDtrackCuts)
57189f04 110 ,fCuts(0)
111 ,fIdentifiedAsOutInz(kFALSE)
112 ,fPassTheEventCut(kFALSE)
113 ,fRejectKinkMother(kFALSE)
114 ,fVz(0.0)
115 ,fCFM(0)
116 ,fPID(0)
117 ,fPIDqa(0)
57189f04 118 ,fInvmassCut(0.01)
3c56855b 119 ,fCentrality(0)
120 ,fCentralityMin(0)
121 ,fCentralityMax(0)
122 ,fkCentralityMethod(0)
4e01b68c 123// ,fPoolMgr(0x0)
57189f04 124 ,fNoEvents(0)
3c56855b 125// ,fTrkpt(0)
57189f04 126 ,fTrkEovPBef(0)
520a29a8 127 ,fTrkEovPBefHad(0)
987053ce 128 // ,fdEdxBef(0)
129 ,fSemiIncElecDphi(0)
487ae960 130 ,fSemiIncElecDphi1(0)
131 ,fSemiIncElecDphi2(0)
132 ,fSemiIncElecDphi3(0)
133 ,fSemiIncElecDphi4(0)
57189f04 134 ,fPhotElecDphi(0)
487ae960 135 ,fPhotElecDphi1(0)
136 ,fPhotElecDphi2(0)
137 ,fPhotElecDphi3(0)
138 ,fPhotElecDphi4(0)
57189f04 139 ,fInclusiveElecDphi(0)
487ae960 140 ,fInclusiveElecDphi1(0)
141 ,fInclusiveElecDphi2(0)
142 ,fInclusiveElecDphi3(0)
143 ,fInclusiveElecDphi4(0)
57189f04 144 ,fDphiULSMassLow(0)
487ae960 145 ,fDphiULSMassLow1(0)
146 ,fDphiULSMassLow2(0)
147 ,fDphiULSMassLow3(0)
148 ,fDphiULSMassLow4(0)
57189f04 149 ,fDphiLSMassLow(0)
487ae960 150 ,fDphiLSMassLow1(0)
151 ,fDphiLSMassLow2(0)
152 ,fDphiLSMassLow3(0)
153 ,fDphiLSMassLow4(0)
520a29a8 154 ,fDphiULSMassLowNoPartner(0)
487ae960 155 ,fDphiULSMassLowNoPartner1(0)
156 ,fDphiULSMassLowNoPartner2(0)
157 ,fDphiULSMassLowNoPartner3(0)
158 ,fDphiULSMassLowNoPartner4(0)
520a29a8 159 ,fDphiLSMassLowNoPartner(0)
487ae960 160 ,fDphiLSMassLowNoPartner1(0)
161 ,fDphiLSMassLowNoPartner2(0)
162 ,fDphiLSMassLowNoPartner3(0)
163 ,fDphiLSMassLowNoPartner4(0)
57189f04 164 ,fPhotoElecPt(0)
165 ,fSemiInclElecPt(0)
520a29a8 166 ,fInclusiveElecPt(0)
167 ,fULSElecPt(0)
168 ,fLSElecPt(0)
987053ce 169 ,fTrackPtBefTrkCuts(0)
170 ,fTrackPtAftTrkCuts(0)
520a29a8 171 ,fTPCnsigma(0)
520a29a8 172 ,fNCellv1(0)
173 ,fClsEv1(0)
174 ,fNClusv1(0)
987053ce 175 ,fInvmassLS1(0)
487ae960 176 ,fInvmassLS2(0)
177 ,fInvmassLS3(0)
178 ,fInvmassLS4(0)
179 ,fInvmassLS5(0)
520a29a8 180 ,fInvmassULS1(0)
487ae960 181 ,fInvmassULS2(0)
182 ,fInvmassULS3(0)
183 ,fInvmassULS4(0)
184 ,fInvmassULS5(0)
520a29a8 185 ,fcentrality(0)
186 ,fElecPhi(0)
3c56855b 187 ,fElecPhiTPChalf(0)
188 ,fElecPhiPt(0)
189// ,fElecPhiTPC(0)
190// ,fElecPhiTPCEovP(0)
520a29a8 191 ,fHadronPhi(0)
3c56855b 192 ,fHadronPhiTPChalf(0)
193 ,fHadronPhiPt(0)
194/* ,fTrackHFEcuts(0)
4e01b68c 195 ,fTrakPhiSPD1(0)
196 ,fTrakPhiSPD2(0)
197 ,fTrakPhiSPDOr(0)
198 ,fTrakPhiSPDAnd(0)
199 ,fTrackHFEcutsITS(0)
3c56855b 200*/
4e01b68c 201/* ,fNoMixedEvents(0)
202 ,fMixStat(0)
203 ,fMixStat1(0)
204 ,fMixedIncElecDphi(0)
3c56855b 205 ,fMixedIncElecDphi1(0)
206 ,fMixedIncElecDphi2(0)
4e01b68c 207 ,fMixedPhotElecDphi(0)
3c56855b 208 ,fMixedPhotElecDphi1(0)
209 ,fMixedPhotElecDphi2(0)
4e01b68c 210 ,fMixedSemiIncElecDphi(0)
3c56855b 211 ,fMixedSemiIncElecDphi1(0)
212 ,fMixedSemiIncElecDphi2(0)
4e01b68c 213 ,fMixedDphiULSMassLow(0)
3c56855b 214 ,fMixedDphiULSMassLow1(0)
215 ,fMixedDphiULSMassLow2(0)
4e01b68c 216 ,fMixedDphiLSMassLow(0)
3c56855b 217 ,fMixedDphiLSMassLow1(0)
218 ,fMixedDphiLSMassLow2(0)
987053ce 219*/
3c56855b 220 ,fHadronPt(0)
221 ,fCentralityPass(0)
222 ,fCentralityNoPass(0)
0841d73f 223 ,fHadronDphi(0)
224 ,fHadronDphi1(0)
225 ,fHadronDphi2(0)
226 ,fHadronDphi3(0)
227 ,fHadronDphi4(0)
228 ,fPiPt(0)
229 // ,fSparseElectron(0)
230 // ,fvalueElectron(0)
57189f04 231{
232 //Named constructor
520a29a8 233
57189f04 234 fPID = new AliHFEpid("hfePid");
520a29a8 235// fvalueElectron = new Double_t[8];
57189f04 236
237 // Define input and output slots here
238 // Input slot #0 works with a TChain
239 DefineInput(0, TChain::Class());
240 // Output slot #0 id reserved by the base class for AOD
241 // Output slot #1 writes into a TH1 container
242 // DefineOutput(1, TH1I::Class());
243 DefineOutput(1, TList::Class());
244 // DefineOutput(3, TTree::Class());
245}
246
247//________________________________________________________________________
248AliAnalysisTaskElecHadronCorrel::AliAnalysisTaskElecHadronCorrel()
249 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisElecHadCorrel")
987053ce 250 ,fVevent(0)
57189f04 251 ,fESD(0)
987053ce 252 ,fAOD(0)
57189f04 253 ,fGeom(0)
254 ,fOutputList(0)
520a29a8 255 ,fTrackCuts1(new AliESDtrackCuts)
256 ,fTrackCuts2(new AliESDtrackCuts)
57189f04 257 ,fCuts(0)
258 ,fIdentifiedAsOutInz(kFALSE)
259 ,fPassTheEventCut(kFALSE)
260 ,fRejectKinkMother(kFALSE)
4e01b68c 261 ,fVz(0.0)
262 ,fCFM(0)
263 ,fPID(0)
264 ,fPIDqa(0)
57189f04 265 ,fInvmassCut(0.01)
3c56855b 266 ,fCentrality(0)
267 ,fCentralityMin(0)
268 ,fCentralityMax(0)
269 ,fkCentralityMethod(0)
4e01b68c 270// ,fPoolMgr(0x0)
57189f04 271 ,fNoEvents(0)
3c56855b 272// ,fTrkpt(0)
57189f04 273 ,fTrkEovPBef(0)
520a29a8 274 ,fTrkEovPBefHad(0)
987053ce 275// ,fdEdxBef(0)
276 ,fSemiIncElecDphi(0)
487ae960 277 ,fSemiIncElecDphi1(0)
278 ,fSemiIncElecDphi2(0)
279 ,fSemiIncElecDphi3(0)
280 ,fSemiIncElecDphi4(0)
57189f04 281 ,fPhotElecDphi(0)
487ae960 282 ,fPhotElecDphi1(0)
283 ,fPhotElecDphi2(0)
284 ,fPhotElecDphi3(0)
285 ,fPhotElecDphi4(0)
57189f04 286 ,fInclusiveElecDphi(0)
487ae960 287 ,fInclusiveElecDphi1(0)
288 ,fInclusiveElecDphi2(0)
289 ,fInclusiveElecDphi3(0)
290 ,fInclusiveElecDphi4(0)
57189f04 291 ,fDphiULSMassLow(0)
487ae960 292 ,fDphiULSMassLow1(0)
293 ,fDphiULSMassLow2(0)
294 ,fDphiULSMassLow3(0)
295 ,fDphiULSMassLow4(0)
57189f04 296 ,fDphiLSMassLow(0)
487ae960 297 ,fDphiLSMassLow1(0)
298 ,fDphiLSMassLow2(0)
299 ,fDphiLSMassLow3(0)
300 ,fDphiLSMassLow4(0)
520a29a8 301 ,fDphiULSMassLowNoPartner(0)
487ae960 302 ,fDphiULSMassLowNoPartner1(0)
303 ,fDphiULSMassLowNoPartner2(0)
304 ,fDphiULSMassLowNoPartner3(0)
305 ,fDphiULSMassLowNoPartner4(0)
520a29a8 306 ,fDphiLSMassLowNoPartner(0)
487ae960 307 ,fDphiLSMassLowNoPartner1(0)
308 ,fDphiLSMassLowNoPartner2(0)
309 ,fDphiLSMassLowNoPartner3(0)
310 ,fDphiLSMassLowNoPartner4(0)
57189f04 311 ,fPhotoElecPt(0)
312 ,fSemiInclElecPt(0)
520a29a8 313 ,fInclusiveElecPt(0)
314 ,fULSElecPt(0)
315 ,fLSElecPt(0)
987053ce 316 ,fTrackPtBefTrkCuts(0)
317 ,fTrackPtAftTrkCuts(0)
520a29a8 318 ,fTPCnsigma(0)
520a29a8 319 ,fNCellv1(0)
320 ,fClsEv1(0)
321 ,fNClusv1(0)
987053ce 322 ,fInvmassLS1(0)
487ae960 323 ,fInvmassLS2(0)
324 ,fInvmassLS3(0)
325 ,fInvmassLS4(0)
326 ,fInvmassLS5(0)
520a29a8 327 ,fInvmassULS1(0)
487ae960 328 ,fInvmassULS2(0)
329 ,fInvmassULS3(0)
330 ,fInvmassULS4(0)
331 ,fInvmassULS5(0)
520a29a8 332 ,fcentrality(0)
333 ,fElecPhi(0)
3c56855b 334 ,fElecPhiTPChalf(0)
335 ,fElecPhiPt(0)
336// ,fElecPhiTPC(0)
337// ,fElecPhiTPCEovP(0)
520a29a8 338 ,fHadronPhi(0)
3c56855b 339 ,fHadronPhiTPChalf(0)
340 ,fHadronPhiPt(0)
341/* ,fTrackHFEcuts(0)
4e01b68c 342 ,fTrakPhiSPD1(0)
343 ,fTrakPhiSPD2(0)
344 ,fTrakPhiSPDOr(0)
345 ,fTrakPhiSPDAnd(0)
346 ,fTrackHFEcutsITS(0)
3c56855b 347*/
4e01b68c 348/* ,fNoMixedEvents(0)
349 ,fMixStat(0)
350 ,fMixStat1(0)
351 ,fMixedIncElecDphi(0)
3c56855b 352 ,fMixedIncElecDphi1(0)
353 ,fMixedIncElecDphi2(0)
4e01b68c 354 ,fMixedPhotElecDphi(0)
3c56855b 355 ,fMixedPhotElecDphi1(0)
356 ,fMixedPhotElecDphi2(0)
4e01b68c 357 ,fMixedSemiIncElecDphi(0)
3c56855b 358 ,fMixedSemiIncElecDphi1(0)
359 ,fMixedSemiIncElecDphi2(0)
4e01b68c 360 ,fMixedDphiULSMassLow(0)
3c56855b 361 ,fMixedDphiULSMassLow1(0)
362 ,fMixedDphiULSMassLow2(0)
4e01b68c 363 ,fMixedDphiLSMassLow(0)
3c56855b 364 ,fMixedDphiLSMassLow1(0)
365 ,fMixedDphiLSMassLow2(0)
366*/
3c56855b 367 ,fHadronPt(0)
368 ,fCentralityPass(0)
369 ,fCentralityNoPass(0)
0841d73f 370 ,fHadronDphi(0)
371 ,fHadronDphi1(0)
372 ,fHadronDphi2(0)
373 ,fHadronDphi3(0)
374 ,fHadronDphi4(0)
375 ,fPiPt(0)
4e01b68c 376 // ,fSparseElectron(0)
377 // ,fvalueElectron(0)
57189f04 378{
520a29a8 379 //Default constructor
380 fPID = new AliHFEpid("hfePid");
4e01b68c 381 // fvalueElectron = new Double_t[8];
57189f04 382
520a29a8 383 // Constructor
4e01b68c 384 // Define input and output slots here
385 // Input slot #0 works with a TChain
386 DefineInput(0, TChain::Class());
387 // Output slot #0 id reserved by the base class for AOD
388 // Output slot #1 writes into a TH1 container
389 // DefineOutput(1, TH1I::Class());
390 DefineOutput(1, TList::Class());
391 //DefineOutput(3, TTree::Class());
57189f04 392}
393//_________________________________________
394
395AliAnalysisTaskElecHadronCorrel::~AliAnalysisTaskElecHadronCorrel()
396{
4e01b68c 397 //Destructor
398
399 delete fOutputList;
400 delete fGeom;
401 delete fPID;
402 delete fCFM;
403 delete fPIDqa;
404 delete fTrackCuts1;
405 delete fTrackCuts2;
406 // delete fSparseElectron;
407 // delete []fvalueElectron;
57189f04 408}
409//_________________________________________
410
411void AliAnalysisTaskElecHadronCorrel::UserExec(Option_t*)
412{
4e01b68c 413 //Main loop
414 //Called for each event
415
416 // create pointer to event
987053ce 417 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
4e01b68c 418 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
987053ce 419
420 if(!(fESD || fAOD)){
421 printf("ERROR: fESD & fAOD not available\n");
422 return;
423 }
424 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
425 if (!fVevent) {
426 printf("ERROR: fVEvent not available\n");
4e01b68c 427 return;
428 }
520a29a8 429
4e01b68c 430 if(!fCuts){
431 AliError("HFE cuts not available");
432 return;
433 }
434
435 if(!fPID->IsInitialized()){
436 // Initialize PID with the given run number
437 AliWarning("PID not initialised, get from Run no");
987053ce 438
439 if(IsAODanalysis())fPID->InitializePID(fAOD->GetRunNumber());
440 else fPID->InitializePID(fESD->GetRunNumber());
4e01b68c 441 }
442
987053ce 443 // trigger selection
4e01b68c 444 if(!(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kCentral))) return;
520a29a8 445
987053ce 446 // centrality selection
0841d73f 447 SetCentralityParameters(0., 7., "V0M");
987053ce 448 Bool_t pass = kFALSE;
449 CheckCentrality(fVevent,pass);
e4b0faf2 450 if(!pass)return;
451
987053ce 452 Int_t fNOtrks = fVevent->GetNumberOfTracks();
453 const AliVVertex *pVtx = fVevent->GetPrimaryVertex();
520a29a8 454
4e01b68c 455 Double_t pVtxZ = -999;
456 pVtxZ = pVtx->GetZ();
520a29a8 457
4e01b68c 458 if(TMath::Abs(pVtxZ)>10) return;
459 fNoEvents->Fill(0);
460
461 if(fNOtrks<2) return;
462
463 AliPIDResponse *pidResponse = fInputHandler->GetPIDResponse();
464 if(!pidResponse){
465 AliDebug(1, "Using default PID Response");
520a29a8 466 pidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
467 }
468
469 fPID->SetPIDResponse(pidResponse);
470
987053ce 471 fCFM->SetRecEventInfo(fVevent);
472
473 /*
4e01b68c 474 //Event mixing
475 AliEventPool* pool = fPoolMgr->GetEventPool(centvalue, pVtxZ); // Get the buffer associated with the current centrality and z-vtx
476 if (!pool)
987053ce 477 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", centvalue, pVtxZ));
478*/
479
480 // Look for kink mother for AOD
481 Double_t *listofmotherkink =0;
482 Int_t numberofvertices = 0, numberofmotherkink = 0;
483 if(IsAODanalysis()){
484 numberofvertices = fAOD->GetNumberOfVertices();
485 listofmotherkink = new Double_t[numberofvertices];
486 for(Int_t ivertex=0; ivertex < numberofvertices; ivertex++) {
487 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
488 if(!aodvertex) continue;
489 if(aodvertex->GetType()==AliAODVertex::kKink) {
490 AliAODTrack *mother = (AliAODTrack *) aodvertex->GetParent();
491 if(!mother) continue;
492 Int_t idmother = mother->GetID();
493 listofmotherkink[numberofmotherkink] = idmother;
494 numberofmotherkink++;
495 }
496 }
497 }
4e01b68c 498
520a29a8 499 // Track loop
987053ce 500 for (Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++) {
501 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
502 if (!Vtrack) {
520a29a8 503 printf("ERROR: Could not receive track %d\n", iTracks);
504 continue;
505 }
987053ce 506 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
507 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
508 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
509
510 if(IsAODanalysis())
511 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
4e01b68c 512
513 if(track->Pt()<1) continue;
520a29a8 514
987053ce 515 fTrackPtBefTrkCuts->Fill(track->Pt());
4e01b68c 516
520a29a8 517 // RecKine: ITSTPC cuts
518 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
519
987053ce 520 // Reject kink mother
520a29a8 521 if(fRejectKinkMother) { // Quick and dirty fix to reject both kink mothers and daughters
987053ce 522 if(IsAODanalysis()){
523 Bool_t kinkmotherpass = kTRUE;
524 for(Int_t kinkmother = 0; kinkmother < numberofmotherkink; kinkmother++) {
525 if(track->GetID() == listofmotherkink[kinkmother]) {
526 kinkmotherpass = kFALSE;
527 continue;
528 }
529 }
530 if(!kinkmotherpass) continue;
531 }
532 else{
533 if(etrack->GetKinkIndex(0) != 0) continue;
534 }
535 }
520a29a8 536 // RecPrim
987053ce 537 // if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue; //gives warning for AOD, so not using
520a29a8 538
4e01b68c 539 // HFE cuts: TPC PID cleanup
540 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
541
987053ce 542 // fTrackHFEcuts->Fill(track->Phi());
4e01b68c 543
520a29a8 544 // HFEcuts: ITS layers cuts
545 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
546
987053ce 547 // fTrackHFEcutsITS->Fill(track->Phi());
548 fTrackPtAftTrkCuts->Fill(track->Pt());
4e01b68c 549
520a29a8 550 Double_t fClsE = -999, p = -999, fEovP=-999, pt = -999, dEdx=-999, fTPCnSigma=0;
4e01b68c 551 pt = track->Pt();
552 p = track->P();
553 dEdx = track->GetTPCsignal();
554 fTPCnSigma = fPID->GetPIDResponse() ? fPID->GetPIDResponse()->NumberOfSigmasTPC(track, AliPID::kElectron) : 1000;
555
556 //TPC electron phi
987053ce 557 // if(fTPCnSigma >= -2 && fTPCnSigma <= 2){
558 // fElecPhiTPC->Fill(track->Phi());
559 // }
4e01b68c 560
561 //eta cut (-0.7,0.7)
562 if(track->Eta() < -0.7 || track->Eta() > 0.7) continue;
563
564 // Track extrapolation to EMCAL
520a29a8 565 Int_t fClsId = track->GetEMCALcluster();
566 if(fClsId <0) continue;
987053ce 567 AliVCluster *cluster = fVevent->GetCaloCluster(fClsId);
568 if(!cluster->IsEMCAL()) continue;
520a29a8 569 if(TMath::Abs(cluster->GetTrackDx())>0.05 || TMath::Abs(cluster->GetTrackDz())>0.05) continue;
987053ce 570 // fdEdxBef->Fill(p,dEdx);
4e01b68c 571 fTPCnsigma->Fill(p,fTPCnSigma);
520a29a8 572
987053ce 573 // fTrkpt->Fill(pt);
520a29a8 574 fClsE = cluster->E();
520a29a8 575 fEovP = fClsE/p;
4e01b68c 576 /*
577 fvalueElectron[0] = pt;
578 fvalueElectron[1] = p;
579 fvalueElectron[2] = fTPCnSigma;
580 fvalueElectron[3] = dEdx;
581 fvalueElectron[4] = fEovP;
582 fvalueElectron[5] = cluster->GetM20();
583 fvalueElectron[6] = cluster->GetM02();
584 fvalueElectron[7] = cluster->GetDispersion();
585
586 fSparseElectron->Fill(fvalueElectron);
587 */
0841d73f 588 if(fTPCnSigma >= -2 && fTPCnSigma <= 2 && cluster->GetM20()>0.03 && cluster->GetM20()<0.3 && cluster->GetM02()>0.03 && cluster->GetM02()<0.5 && cluster->GetDispersion()<1)
4e01b68c 589 fTrkEovPBef->Fill(pt,fEovP);
4e01b68c 590
0841d73f 591 //hadron E/p and Dphi distribution
592 if(fTPCnSigma < -3.5){
593 fTrkEovPBefHad->Fill(pt,fEovP);
594 ElectronHadCorrel(iTracks, track, fHadronDphi, fHadronDphi1,fHadronDphi2,fHadronDphi3,fHadronDphi4);
595 fPiPt->Fill(pt);
596 }
4e01b68c 597 //Electron id with TPC and E/p
598 if(fTPCnSigma >= -2 && fTPCnSigma <= 2 && fEovP >= 0.8 && fEovP <=1.2) {
987053ce 599 // fElecPhiTPCEovP->Fill(track->Phi());
4e01b68c 600
601 //Electron id with shower shape
0841d73f 602 if(cluster->GetM20()>0.03 && cluster->GetM20()<0.3 && cluster->GetM02()>0.03 && cluster->GetM02()< 0.5 && cluster->GetDispersion()<1){
987053ce 603
3db00c72 604 fElecPhi->Fill(track->Phi());
3c56855b 605 fElecPhiPt->Fill(track->Phi(),track->Pt());
606 if (track->Eta() >0 && track->Eta() <0.7) fElecPhiTPChalf->Fill(track->Phi());
987053ce 607
3c56855b 608 HadronInfo(iTracks);
3db00c72 609
610 Bool_t fFlagPhotonicElec = kFALSE;
611 // select photonic electron
612 SelectPhotonicElectron(iTracks,track,fFlagPhotonicElec);
987053ce 613
3db00c72 614 //Inclusive electron-hadron correlation
487ae960 615 ElectronHadCorrel(iTracks, track, fInclusiveElecDphi, fInclusiveElecDphi1,fInclusiveElecDphi2,fInclusiveElecDphi3,fInclusiveElecDphi4);
3db00c72 616 fInclusiveElecPt->Fill(pt);
987053ce 617 // MixedEvent(track,fMixedIncElecDphi, fMixedIncElecDphi1,fMixedIncElecDphi2);
618
3db00c72 619 // photonic electron
620 if(fFlagPhotonicElec){
987053ce 621 //Electron hadron correlation
622 ElectronHadCorrel(iTracks, track, fPhotElecDphi,fPhotElecDphi1,fPhotElecDphi2,fPhotElecDphi3,fPhotElecDphi4);
623 fPhotoElecPt->Fill(pt);
624 // MixedEvent(track,fMixedPhotElecDphi, fMixedPhotElecDphi1,fMixedPhotElecDphi2);
3db00c72 625 }
626
627 // Semi inclusive electron
628 if(!fFlagPhotonicElec){
629 //Electron hadron correlation
487ae960 630 ElectronHadCorrel(iTracks, track, fSemiIncElecDphi, fSemiIncElecDphi1,fSemiIncElecDphi2,fSemiIncElecDphi3,fSemiIncElecDphi4);
3db00c72 631 fSemiInclElecPt->Fill(pt);
987053ce 632 // MixedEvent(track,fMixedSemiIncElecDphi,fMixedSemiIncElecDphi1,fMixedSemiIncElecDphi2);
3db00c72 633 }
4e01b68c 634
520a29a8 635 }
636 }
637 }
987053ce 638
520a29a8 639 //EMC clusters
987053ce 640 Int_t clsNo = fVevent->GetNumberOfCaloClusters();
520a29a8 641 fNClusv1->Fill(clsNo);
642 for(Int_t iclus=0; iclus<clsNo ; iclus++){
987053ce 643 AliVCluster* clus = fVevent->GetCaloCluster(iclus);
520a29a8 644 if(!clus->IsEMCAL()) continue;
645 fNCellv1->Fill(clus->GetNCells());
646 fClsEv1->Fill(clus->E());
647 }
987053ce 648
3c56855b 649/*
650 TObjArray* tracksClone = CloneAndReduceTrackList();
651 tracksClone->SetOwner();
652 pool->UpdatePool(tracksClone);
987053ce 653 */
654 delete listofmotherkink;
520a29a8 655 PostData(1, fOutputList);
57189f04 656}
657//_________________________________________
658void AliAnalysisTaskElecHadronCorrel::UserCreateOutputObjects()
659{
660 //Create histograms
987053ce 661
662 AliDebug(3, "Creating Output Objects");
663 // Automatic determination of the analysis mode
664 AliVEventHandler *inputHandler = dynamic_cast<AliVEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
665 if(!TString(inputHandler->IsA()->GetName()).CompareTo("AliAODInputHandler")){
666 SetAODAnalysis();
667 } else {
668 SetESDAnalysis();
669 }
670 printf("Analysis Mode: %s Analysis\n", IsAODanalysis() ? "AOD" : "ESD");
520a29a8 671
57189f04 672 //--------Initialize PID
673 fPID->SetHasMCData(kFALSE);
674 if(!fPID->GetNumberOfPIDdetectors())
520a29a8 675 {
676 fPID->AddDetector("TPC", 0);
677 fPID->AddDetector("EMCAL", 1);
678 }
679
57189f04 680 fPID->SortDetectors();
681 fPIDqa = new AliHFEpidQAmanager();
682 fPIDqa->Initialize(fPID);
520a29a8 683
57189f04 684 //--------Initialize correction Framework and Cuts
685 fCFM = new AliCFManager;
686 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
687 fCFM->SetNStepParticle(kNcutSteps);
688 for(Int_t istep = 0; istep < kNcutSteps; istep++)
689 fCFM->SetParticleCutsList(istep, NULL);
520a29a8 690
57189f04 691 if(!fCuts){
692 AliWarning("Cuts not available. Default cuts will be used");
693 fCuts = new AliHFEcuts;
694 fCuts->CreateStandardCuts();
695 }
987053ce 696
697 if(IsAODanalysis()) fCuts->SetAOD();
57189f04 698 fCuts->Initialize(fCFM);
987053ce 699 /*
4e01b68c 700 //Mixed event initialising
701 Int_t trackDepth = 2000;
702 Int_t poolsize = 1000;
703
704 Int_t nCentralityBins = 5;
705 Double_t CentralityBins[] = {0,2,4,6,8,10};
520a29a8 706
487ae960 707 Int_t nZvtxBins = 4;
708 Double_t vertexBins[] = {-10,-5,0,5,10};
4e01b68c 709
710 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) CentralityBins, nZvtxBins, (Double_t*) vertexBins);
711*/
57189f04 712 //---------Output Tlist
713 fOutputList = new TList();
714 fOutputList->SetOwner();
715 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
520a29a8 716
57189f04 717 fNoEvents = new TH1F("fNoEvents","",1,0,1) ;
718 fOutputList->Add(fNoEvents);
520a29a8 719
720 fcentrality = new TH1F("fcentrality","centrality", 100,0,100);
721 fOutputList->Add(fcentrality);
987053ce 722
723// fTrkpt = new TH1F("fTrkpt","track pt",1000,0,50);
724// fOutputList->Add(fTrkpt);
520a29a8 725
57189f04 726 fTrackPtBefTrkCuts = new TH1F("fTrackPtBefTrkCuts","track pt before track cuts",1000,0,50);
727 fOutputList->Add(fTrackPtBefTrkCuts);
520a29a8 728
57189f04 729 fTrackPtAftTrkCuts = new TH1F("fTrackPtAftTrkCuts","track pt after track cuts",1000,0,50);
730 fOutputList->Add(fTrackPtAftTrkCuts);
987053ce 731
57189f04 732 fTPCnsigma = new TH2F("fTPCnsigma", "TPC - n sigma",1000,0,50,200,-10,10);
733 fOutputList->Add(fTPCnsigma);
987053ce 734
57189f04 735 fTrkEovPBef = new TH2F("fTrkEovPBef","track E/p before HFE pid",1000,0,50,100,0,2);
736 fOutputList->Add(fTrkEovPBef);
520a29a8 737
738 fTrkEovPBefHad = new TH2F("fTrkEovPBefHad","track E/p for TPCnsig < 3.5",1000,0,50,100,0,2);
739 fOutputList->Add(fTrkEovPBefHad);
520a29a8 740
987053ce 741// fdEdxBef = new TH2F("fdEdxBef","track dEdx vs p before HFE pid",1000,0,50,150,0,150);
742// fOutputList->Add(fdEdxBef);
520a29a8 743
520a29a8 744 fElecPhi = new TH1F("fElecPhi", "Electron phi",1000,0,6.28);
745 fOutputList->Add(fElecPhi);
746
3c56855b 747 fElecPhiPt = new TH2F("fElecPhiPt", "Electron phi vs pt; Electron phi; pt (GeV/c)",1000,0,6.28,1000,0,100);
748 fOutputList->Add(fElecPhiPt);
749
750 fElecPhiTPChalf = new TH1F("fElecPhiTPChalf", "Electron phi for 0<eta<0.7",1000,0,6.28);
751 fOutputList->Add(fElecPhiTPChalf);
752
753/* fElecPhiTPC = new TH1F("fElecPhiTPC", "Electron phi after TPC cut",1000,0,6.28);
4e01b68c 754 fOutputList->Add(fElecPhiTPC);
755
756 fElecPhiTPCEovP = new TH1F("fElecPhiTPCEovP", "Electron phi after TPC and E/p cut",1000,0,6.28);
757 fOutputList->Add(fElecPhiTPCEovP);
3c56855b 758*/
520a29a8 759 fHadronPhi = new TH1F("fHadronPhi", "Hadron phi",1000,0,6.28);
760 fOutputList->Add(fHadronPhi);
761
3c56855b 762 fHadronPhiTPChalf = new TH1F("fHadronPhiTPChalf", "Hadron phi for 0<eta<0.9",1000,0,6.28);
763 fOutputList->Add(fHadronPhiTPChalf);
764
765 fHadronPhiPt = new TH2F("fHadronPhiPt", "Hadron phi vs pt; hadron phi; pt (GeV/c)",1000,0,6.28,1000,0,100);
766 fOutputList->Add(fHadronPhiPt);
767
768/*
4e01b68c 769 fTrackHFEcuts = new TH1F("fTrackHFEcuts","Track phi for HFE cuts",1000,0,6.28);
770 fOutputList->Add(fTrackHFEcuts);
771
772 fTrakPhiSPD1 = new TH1F("fTrakPhiSPD1","Track phi for hit in SPD layer 1",1000,0,6.28);
773 fOutputList->Add(fTrakPhiSPD1);
774
775 fTrakPhiSPD2 = new TH1F("fTrakPhiSPD2","Track phi for hit in SPD layer 2",1000,0,6.28);
776 fOutputList->Add(fTrakPhiSPD2);
777
778 fTrakPhiSPDOr = new TH1F("fTrakPhiSPDOr","Track phi for hit in any SPD layer",1000,0,6.28);
779 fOutputList->Add(fTrakPhiSPDOr);
780
781 fTrakPhiSPDAnd = new TH1F("fTrakPhiSPDAnd","Track phi for hit in both SPD layer",1000,0,6.28);
782 fOutputList->Add(fTrakPhiSPDAnd);
783
784 fTrackHFEcutsITS = new TH1F("fTrackHFEcutsITS","Track phi for HFE cuts + ITS HFE cuts",1000,0,6.28);
785 fOutputList->Add(fTrackHFEcutsITS);
3c56855b 786*/
0523ddd5 787 fSemiIncElecDphi = new TH2F("fSemiIncElecDphi", "Semi Inclusive elec-had Dphi correlation",200,0,20,64,-1.57,4.71);
57189f04 788 fOutputList->Add(fSemiIncElecDphi);
520a29a8 789
0523ddd5 790 fSemiIncElecDphi1 = new TH2F("fSemiIncElecDphi1", "Semi Inclusive elec-had Dphi correlation for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
487ae960 791 fOutputList->Add(fSemiIncElecDphi1);
792
0523ddd5 793 fSemiIncElecDphi2 = new TH2F("fSemiIncElecDphi2", "Semi Inclusive elec-had Dphi correlation for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
487ae960 794 fOutputList->Add(fSemiIncElecDphi2);
795
0523ddd5 796 fSemiIncElecDphi3 = new TH2F("fSemiIncElecDphi3", "Semi Inclusive elec-had Dphi correlation for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
487ae960 797 fOutputList->Add(fSemiIncElecDphi3);
798
0523ddd5 799 fSemiIncElecDphi4 = new TH2F("fSemiIncElecDphi4", "Semi Inclusive elec-had Dphi correlation for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
487ae960 800 fOutputList->Add(fSemiIncElecDphi4);
801
0523ddd5 802 fPhotElecDphi = new TH2F("fPhotElecDphi", "Photon elec-had Dphi correlation",200,0,20,64,-1.57,4.71);
57189f04 803 fOutputList->Add(fPhotElecDphi);
520a29a8 804
0523ddd5 805 fPhotElecDphi1 = new TH2F("fPhotElecDphi1", "Photon elec-had Dphi correlation for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
487ae960 806 fOutputList->Add(fPhotElecDphi1);
807
0523ddd5 808 fPhotElecDphi2 = new TH2F("fPhotElecDphi2", "Photon elec-had Dphi correlation for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
487ae960 809 fOutputList->Add(fPhotElecDphi2);
810
0523ddd5 811 fPhotElecDphi3 = new TH2F("fPhotElecDphi3", "Photon elec-had Dphi correlation for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
487ae960 812 fOutputList->Add(fPhotElecDphi3);
813
0523ddd5 814 fPhotElecDphi4 = new TH2F("fPhotElecDphi4", "Photon elec-had Dphi correlation for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
487ae960 815 fOutputList->Add(fPhotElecDphi4);
816
0523ddd5 817 fInclusiveElecDphi = new TH2F("fInclusiveElecDphi", "Inclusive elec-had Dphi correlation",200,0,20,64,-1.57,4.71);
57189f04 818 fOutputList->Add(fInclusiveElecDphi);
520a29a8 819
0523ddd5 820 fInclusiveElecDphi1 = new TH2F("fInclusiveElecDphi1", "Inclusive elec-had Dphi correlation for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
487ae960 821 fOutputList->Add(fInclusiveElecDphi1);
822
0523ddd5 823 fInclusiveElecDphi2 = new TH2F("fInclusiveElecDphi2", "Inclusive elec-had Dphi correlation for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
487ae960 824 fOutputList->Add(fInclusiveElecDphi2);
825
0523ddd5 826 fInclusiveElecDphi3 = new TH2F("fInclusiveElecDphi3", "Inclusive elec-had Dphi correlation for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
487ae960 827 fOutputList->Add(fInclusiveElecDphi3);
828
0523ddd5 829 fInclusiveElecDphi4 = new TH2F("fInclusiveElecDphi4", "Inclusive elec-had Dphi correlation for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
487ae960 830 fOutputList->Add(fInclusiveElecDphi4);
831
0523ddd5 832 fDphiULSMassLow = new TH2F("fDphiULSMassLow", "e-h Dphi ULS, mass<cut",200,0,20,64,-1.57,4.71);
57189f04 833 fOutputList->Add(fDphiULSMassLow);
520a29a8 834
0523ddd5 835 fDphiULSMassLow1 = new TH2F("fDphiULSMassLow1", "e-h Dphi ULS, mass<cut for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
487ae960 836 fOutputList->Add(fDphiULSMassLow1);
837
0523ddd5 838 fDphiULSMassLow2 = new TH2F("fDphiULSMassLow2", "e-h Dphi ULS, mass<cut for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
487ae960 839 fOutputList->Add(fDphiULSMassLow2);
840
0523ddd5 841 fDphiULSMassLow3 = new TH2F("fDphiULSMassLow3", "e-h Dphi ULS, mass<cut for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
487ae960 842 fOutputList->Add(fDphiULSMassLow3);
843
0523ddd5 844 fDphiULSMassLow4 = new TH2F("fDphiULSMassLow4", "e-h Dphi ULS, mass<cut for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
487ae960 845 fOutputList->Add(fDphiULSMassLow4);
846
0523ddd5 847 fDphiLSMassLow = new TH2F("fDphiLSMassLow", "e-h Dphi LS, mass<cut",200,0,20,64,-1.57,4.71);
57189f04 848 fOutputList->Add(fDphiLSMassLow);
520a29a8 849
0523ddd5 850 fDphiLSMassLow1 = new TH2F("fDphiLSMassLow1", "e-h Dphi LS, mass<cut for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
487ae960 851 fOutputList->Add(fDphiLSMassLow1);
852
0523ddd5 853 fDphiLSMassLow2 = new TH2F("fDphiLSMassLow2", "e-h Dphi LS, mass<cut for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
487ae960 854 fOutputList->Add(fDphiLSMassLow2);
855
0523ddd5 856 fDphiLSMassLow3 = new TH2F("fDphiLSMassLow3", "e-h Dphi LS, mass<cut for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
487ae960 857 fOutputList->Add(fDphiLSMassLow3);
858
0523ddd5 859 fDphiLSMassLow4 = new TH2F("fDphiLSMassLow4", "e-h Dphi LS, mass<cut for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
487ae960 860 fOutputList->Add(fDphiLSMassLow4);
861
0523ddd5 862 fDphiULSMassLowNoPartner = new TH2F("fDphiULSMassLowNoPartner", "e-h Dphi ULS with no partner, mass<mass cut,",200,0,20,64,-1.57,4.71);
520a29a8 863 fOutputList->Add(fDphiULSMassLowNoPartner);
864
0523ddd5 865 fDphiULSMassLowNoPartner1 = new TH2F("fDphiULSMassLowNoPartner1", "e-h Dphi ULS with no partner, mass<mass cut for 1<pt^{asso}<3,",200,0,20,64,-1.57,4.71);
487ae960 866 fOutputList->Add(fDphiULSMassLowNoPartner1);
867
0523ddd5 868 fDphiULSMassLowNoPartner2 = new TH2F("fDphiULSMassLowNoPartner2", "e-h Dphi ULS with no partner, mass<mass cut for 3<pt^{asso}<5,",200,0,20,64,-1.57,4.71);
487ae960 869 fOutputList->Add(fDphiULSMassLowNoPartner2);
870
0523ddd5 871 fDphiULSMassLowNoPartner3 = new TH2F("fDphiULSMassLowNoPartner3", "e-h Dphi ULS with no partner, mass<mass cut for 5<pt^{asso}<7,",200,0,20,64,-1.57,4.71);
487ae960 872 fOutputList->Add(fDphiULSMassLowNoPartner3);
873
0523ddd5 874 fDphiULSMassLowNoPartner4 = new TH2F("fDphiULSMassLowNoPartner4", "e-h Dphi ULS with no partner, mass<mass cut for 7<pt^{asso}<9,",200,0,20,64,-1.57,4.71);
487ae960 875 fOutputList->Add(fDphiULSMassLowNoPartner4);
876
0523ddd5 877 fDphiLSMassLowNoPartner = new TH2F("fDphiLSMassLowNoPartner", "e-h Dphi LS with no partner, mass<mass cut",200,0,20,64,-1.57,4.71);
520a29a8 878 fOutputList->Add(fDphiLSMassLowNoPartner);
879
0523ddd5 880 fDphiLSMassLowNoPartner1 = new TH2F("fDphiLSMassLowNoPartner1", "e-h Dphi LS with no partner, mass<mass cut for 1<pt^{asso}<3,",200,0,20,64,-1.57,4.71);
487ae960 881 fOutputList->Add(fDphiLSMassLowNoPartner1);
882
0523ddd5 883 fDphiLSMassLowNoPartner2 = new TH2F("fDphiLSMassLowNoPartner2", "e-h Dphi LS with no partner, mass<mass cut for 3<pt^{asso}<5,",200,0,20,64,-1.57,4.71);
487ae960 884 fOutputList->Add(fDphiLSMassLowNoPartner2);
885
0523ddd5 886 fDphiLSMassLowNoPartner3 = new TH2F("fDphiLSMassLowNoPartner3", "e-h Dphi LS with no partner, mass<mass cut for 5<pt^{asso}<7,",200,0,20,64,-1.57,4.71);
487ae960 887 fOutputList->Add(fDphiLSMassLowNoPartner3);
888
0523ddd5 889 fDphiLSMassLowNoPartner4 = new TH2F("fDphiLSMassLowNoPartner4", "e-h Dphi LS with no partner, mass<mass cut for 7<pt^{asso}<9,",200,0,20,64,-1.57,4.71);
487ae960 890 fOutputList->Add(fDphiLSMassLowNoPartner4);
891
57189f04 892 fPhotoElecPt = new TH1F("fPhotoElecPt", "photonic electron pt",1000,0,100);
893 fOutputList->Add(fPhotoElecPt);
520a29a8 894
57189f04 895 fSemiInclElecPt = new TH1F("fSemiInclElecPt", "Semi-inclusive electron pt",1000,0,100);
896 fOutputList->Add(fSemiInclElecPt);
520a29a8 897
898 fInclusiveElecPt = new TH1F("fInclElecPt", "Inclusive electron pt",1000,0,100);
899 fOutputList->Add(fInclusiveElecPt);
900
901 fULSElecPt = new TH1F("fULSElecPt", "ULS electron pt",1000,0,100);
902 fOutputList->Add(fULSElecPt);
903
904 fLSElecPt = new TH1F("fLSElecPt", "LS electron pt",1000,0,100);
905 fOutputList->Add(fLSElecPt);
987053ce 906
520a29a8 907 fNCellv1 = new TH1F("fNCellv1","Ncell in clus (v1); NCell; count",100,0,100) ;
908 fOutputList->Add(fNCellv1);
909
910 fClsEv1 = new TH1F("fClsEv1", "Clus E(v1); Cls E; count",1000,0,100);
911 fOutputList->Add(fClsEv1);
912
913 fNClusv1 = new TH1F("fNClusv1","Nclus in event (v1); NClus; count",500,0,500) ;
914 fOutputList->Add(fNClusv1);
915
520a29a8 916 fInvmassLS1 = new TH1F("fInvmassLS1", "Inv mass of LS (e,e); mass(GeV/c^2); counts;", 1000,0,1.0);
917 fOutputList->Add(fInvmassLS1);
918
919 fInvmassULS1 = new TH1F("fInvmassULS1", "Inv mass of ULS (e,e); mass(GeV/c^2); counts;", 1000,0,1.0);
920 fOutputList->Add(fInvmassULS1);
487ae960 921
922 fInvmassLS2 = new TH1F("fInvmassLS2", "Inv mass of LS (e,e) for pt^{e}>1; mass(GeV/c^2); counts;", 1000,0,1.0);
923 fOutputList->Add(fInvmassLS2);
924
925 fInvmassULS2 = new TH1F("fInvmassULS2", "Inv mass of ULS (e,e) for pt^{e}>1; mass(GeV/c^2); counts;", 1000,0,1.0);
926 fOutputList->Add(fInvmassULS2);
927
928 fInvmassLS3 = new TH1F("fInvmassLS3", "Inv mass of LS (e,e) for pt^{e}>2; mass(GeV/c^2); counts;", 1000,0,1.0);
929 fOutputList->Add(fInvmassLS3);
930
931 fInvmassULS3 = new TH1F("fInvmassULS3", "Inv mass of ULS (e,e) for pt^{e}>2; mass(GeV/c^2); counts;", 1000,0,1.0);
932 fOutputList->Add(fInvmassULS3);
933
934 fInvmassLS4 = new TH1F("fInvmassLS4", "Inv mass of LS (e,e) for pt^{e}>3; mass(GeV/c^2); counts;", 1000,0,1.0);
935 fOutputList->Add(fInvmassLS4);
936
937 fInvmassULS4 = new TH1F("fInvmassULS4", "Inv mass of ULS (e,e) for pt^{e}>3; mass(GeV/c^2); counts;", 1000,0,1.0);
938 fOutputList->Add(fInvmassULS4);
939
940 fInvmassLS5 = new TH1F("fInvmassLS5", "Inv mass of LS (e,e) for pt^{e}>4; mass(GeV/c^2); counts;", 1000,0,1.0);
941 fOutputList->Add(fInvmassLS5);
942
943 fInvmassULS5 = new TH1F("fInvmassULS5", "Inv mass of ULS (e,e) for pt^{e}>4; mass(GeV/c^2); counts;", 1000,0,1.0);
944 fOutputList->Add(fInvmassULS5);
987053ce 945
946/* fNoMixedEvents = new TH1F("fNoMixedEvents","",1,0,1) ;
4e01b68c 947 fOutputList->Add(fNoMixedEvents);
948
3c56855b 949 fMixStat = new TH2F("fMixStat","no of events in pool vs Centrality;Nevent in pool;Centrality",200,0,200,5,0,10);
4e01b68c 950 fOutputList->Add(fMixStat);
951
3c56855b 952 fMixStat1 = new TH2F("fMixStat1","no of events in pool vs zvtx;Nevents in pool;zvtx",200,0,200,4,-10,10);
4e01b68c 953 fOutputList->Add(fMixStat1);
954
487ae960 955 fMixedIncElecDphi = new TH2F("fMixedIncElecDphi", "Mixed event - Inclusive elec-had Dphi correlation",200,0,20,100,-1.57,4.71);
4e01b68c 956 fOutputList->Add(fMixedIncElecDphi);
957
3c56855b 958 fMixedIncElecDphi1 = new TH2F("fMixedIncElecDphi1", "Mixed event - Inclusive elec-had Dphi correlation 1<pt<3",200,0,20,100,-1.57,4.71);
959 fOutputList->Add(fMixedIncElecDphi1);
960
961 fMixedIncElecDphi2 = new TH2F("fMixedIncElecDphi2", "Mixed event - Inclusive elec-had Dphi correlation 3<pt<5",200,0,20,100,-1.57,4.71);
962 fOutputList->Add(fMixedIncElecDphi2);
963
487ae960 964 fMixedSemiIncElecDphi = new TH2F("fMixedSemiIncElecDphi", "Mixed event - Semi Inclusive elec-had Dphi correlation",200,0,20,100,-1.57,4.71);
4e01b68c 965 fOutputList->Add(fMixedSemiIncElecDphi);
966
3c56855b 967 fMixedSemiIncElecDphi1 = new TH2F("fMixedSemiIncElecDphi1", "Mixed event - Semi Inclusive elec-had Dphi correlation 1<pt<3",200,0,20,100,-1.57,4.71);
968 fOutputList->Add(fMixedSemiIncElecDphi1);
969
970 fMixedSemiIncElecDphi2 = new TH2F("fMixedSemiIncElecDphi2", "Mixed event - Semi Inclusive elec-had Dphi correlation 3<pt<5",200,0,20,100,-1.57,4.71);
971 fOutputList->Add(fMixedSemiIncElecDphi2);
972
487ae960 973 fMixedPhotElecDphi = new TH2F("fMixedPhotElecDphi", "Mixed event - Photo elec-had Dphi correlation",200,0,20,100,-1.57,4.71);
4e01b68c 974 fOutputList->Add(fMixedPhotElecDphi);
975
3c56855b 976 fMixedPhotElecDphi1 = new TH2F("fMixedPhotElecDphi1", "Mixed event - Photo elec-had Dphi correlation 1<pt<3",200,0,20,100,-1.57,4.71);
977 fOutputList->Add(fMixedPhotElecDphi1);
978
979 fMixedPhotElecDphi2 = new TH2F("fMixedPhotElecDphi2", "Mixed event - Photo elec-had Dphi correlation 3<pt<5",200,0,20,100,-1.57,4.71);
980 fOutputList->Add(fMixedPhotElecDphi2);
981
487ae960 982 fMixedDphiULSMassLow = new TH2F("fMixedDphiULSMassLow", "Mixed event - ULS mass < cut elec-had Dphi correlation",200,0,20,100,-1.57,4.71);
4e01b68c 983 fOutputList->Add(fMixedDphiULSMassLow);
984
3c56855b 985 fMixedDphiULSMassLow1 = new TH2F("fMixedDphiULSMassLow1", "Mixed event - ULS mass < cut elec-had Dphi correlation 1<pt<3",200,0,20,100,-1.57,4.71);
986 fOutputList->Add(fMixedDphiULSMassLow1);
987
988 fMixedDphiULSMassLow2 = new TH2F("fMixedDphiULSMassLow2", "Mixed event - ULS mass < cut elec-had Dphi correlation 3<pt<5",200,0,20,100,-1.57,4.71);
989 fOutputList->Add(fMixedDphiULSMassLow2);
990
487ae960 991 fMixedDphiLSMassLow = new TH2F("fMixedDphiLSMassLow", "Mixed event - LS mass < cut elec-had Dphi correlation",200,0,20,100,-1.57,4.71);
4e01b68c 992 fOutputList->Add(fMixedDphiLSMassLow);
3c56855b 993
994 fMixedDphiLSMassLow1 = new TH2F("fMixedDphiLSMassLow1", "Mixed event - LS mass < cut elec-had Dphi correlation 1<pt<3",200,0,20,100,-1.57,4.71);
995 fOutputList->Add(fMixedDphiLSMassLow1);
996
997 fMixedDphiLSMassLow2 = new TH2F("fMixedDphiLSMassLow2", "Mixed event - LS mass < cut elec-had Dphi correlation 3<pt<5",200,0,20,100,-1.57,4.71);
998 fOutputList->Add(fMixedDphiLSMassLow2);
487ae960 999*/
3c56855b 1000 fHadronPt = new TH1F("fHadronPt","hadron pt distribution",1000,0,100);
1001 fOutputList->Add(fHadronPt);
1002
1003 fCentralityPass = new TH1F("fCentralityPass", "Centrality Pass", 101, -1, 100);
1004 fOutputList->Add(fCentralityPass);
1005
1006 fCentralityNoPass = new TH1F("fCentralityNoPass", "Centrality No Pass", 101, -1, 100);
1007 fOutputList->Add(fCentralityNoPass);
1008
0841d73f 1009 fHadronDphi = new TH2F("fHadronDphi", "Hadron-had Dphi correlation",200,0,20,64,-1.57,4.71);
1010 fOutputList->Add(fHadronDphi);
1011
1012 fHadronDphi1 = new TH2F("fHadronDphi1", "Hadron-had Dphi correlation for 1<pt^{asso}<3",200,0,20,64,-1.57,4.71);
1013 fOutputList->Add(fHadronDphi1);
1014
1015 fHadronDphi2 = new TH2F("fHadronDphi2", "Hadron-had Dphi correlation for 3<pt^{asso}<5",200,0,20,64,-1.57,4.71);
1016 fOutputList->Add(fHadronDphi2);
1017
1018 fHadronDphi3 = new TH2F("fHadronDphi3", "Hadron-had Dphi correlation for 5<pt^{asso}<7",200,0,20,64,-1.57,4.71);
1019 fOutputList->Add(fHadronDphi3);
1020
1021 fHadronDphi4 = new TH2F("fHadronDphi4", "Hadron-had Dphi correlation for 7<pt^{asso}<9",200,0,20,64,-1.57,4.71);
1022 fOutputList->Add(fHadronDphi4);
1023
1024 fPiPt = new TH1F("fPiPt","Pi (TPC nsig < 3.5) pt distribution",1000,0,100);
1025 fOutputList->Add(fPiPt);
1026
520a29a8 1027 /*
1028 Int_t binsv1[8]={1000,1000,200,150,100,100,100,100}; //pt, p, TPCnsig, dEdx, E/p, M20, M02, dispersion
1029 Double_t xminv1[8]={0,0,-10,0,0,0,0,0};
1030 Double_t xmaxv1[8]={50,50,10,150,2,2,2,2};
1031 fSparseElectron = new THnSparseD ("Electron","Electron",8,binsv1,xminv1,xmaxv1);
1032 fOutputList->Add(fSparseElectron);
1033 */
57189f04 1034 PostData(1,fOutputList);
1035}
1036
1037//________________________________________________________________________
1038void AliAnalysisTaskElecHadronCorrel::Terminate(Option_t *)
1039{
1040 // Info("Terminate");
520a29a8 1041 AliAnalysisTaskSE::Terminate();
57189f04 1042}
1043
1044//________________________________________________________________________
1045Bool_t AliAnalysisTaskElecHadronCorrel::ProcessCutStep(Int_t cutStep, AliVParticle *track)
1046{
1047 // Check single track cuts for a given cut step
1048 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
1049 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
1050 return kTRUE;
1051}
987053ce 1052
57189f04 1053//_________________________________________
987053ce 1054void AliAnalysisTaskElecHadronCorrel::SelectPhotonicElectron(Int_t itrack, AliVTrack *track, Bool_t &fFlagPhotonicElec)
57189f04 1055{
1056 //Identify non-heavy flavour electrons using Invariant mass method
520a29a8 1057
57189f04 1058 fTrackCuts1->SetAcceptKinkDaughters(kFALSE);
1059 fTrackCuts1->SetRequireTPCRefit(kTRUE);
e4b0faf2 1060 fTrackCuts1->SetRequireITSRefit(kTRUE);
57189f04 1061 fTrackCuts1->SetEtaRange(-0.9,0.9);
1062 fTrackCuts1->SetRequireSigmaToVertex(kTRUE);
e4b0faf2 1063 fTrackCuts1->SetMaxChi2PerClusterTPC(4);
57189f04 1064 fTrackCuts1->SetMinNClustersTPC(80);
987053ce 1065 fTrackCuts1->SetMaxDCAToVertexZ(3.2);
1066 fTrackCuts1->SetMaxDCAToVertexXY(2.4);
1067 fTrackCuts1->SetDCAToVertex2D(kTRUE);
520a29a8 1068
57189f04 1069 Bool_t flagPhotonicElec = kFALSE;
520a29a8 1070
987053ce 1071 for(Int_t jTracks = 0; jTracks<fVevent->GetNumberOfTracks(); jTracks++){
1072 AliVParticle* VtrackAsso = fVevent->GetTrack(jTracks);
1073 if (!VtrackAsso) {
57189f04 1074 printf("ERROR: Could not receive track %d\n", jTracks);
1075 continue;
1076 }
987053ce 1077
1078 AliVTrack *trackAsso = dynamic_cast<AliVTrack*>(VtrackAsso);
1079
1080 //track cuts applied
1081 if(IsAODanalysis()) {
1082 AliAODTrack *atrackAsso = dynamic_cast<AliAODTrack*>(VtrackAsso);
1083 if(!atrackAsso->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
1084 if(atrackAsso->GetTPCNcls() < 80) continue;
1085 if((!(atrackAsso->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrackAsso->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
1086 }
1087 else{
1088 AliESDtrack *etrackAsso = dynamic_cast<AliESDtrack*>(VtrackAsso);
1089 if(!fTrackCuts1->AcceptTrack(etrackAsso)) continue;
1090 }
1091
e4b0faf2 1092 if(jTracks==itrack) continue;
520a29a8 1093
987053ce 1094 Double_t dEdxAsso = -999., ptAsso=-999., nsigma=-999.0;
520a29a8 1095 Double_t mass=-999., width = -999;
57189f04 1096 Bool_t fFlagLS=kFALSE, fFlagULS=kFALSE;
520a29a8 1097
57189f04 1098 dEdxAsso = trackAsso->GetTPCsignal();
487ae960 1099 nsigma = fPID->GetPIDResponse() ? fPID->GetPIDResponse()->NumberOfSigmasTPC(trackAsso, AliPID::kElectron) : 1000;
57189f04 1100 ptAsso = trackAsso->Pt();
1101 Int_t chargeAsso = trackAsso->Charge();
1102 Int_t charge = track->Charge();
520a29a8 1103
57189f04 1104 if(ptAsso <0.3) continue;
3c56855b 1105 if(trackAsso->Eta()<-0.9 || trackAsso->Eta()>0.9) continue;
487ae960 1106 if(nsigma < -3 || nsigma > 3) continue;
520a29a8 1107
57189f04 1108 Int_t fPDGe1 = 11; Int_t fPDGe2 = 11;
1109 if(charge>0) fPDGe1 = -11;
1110 if(chargeAsso>0) fPDGe2 = -11;
520a29a8 1111
57189f04 1112 if(charge == chargeAsso) fFlagLS = kTRUE;
1113 if(charge != chargeAsso) fFlagULS = kTRUE;
520a29a8 1114
1115 AliKFParticle ge1 = AliKFParticle(*track, fPDGe1);
1116 AliKFParticle ge2 = AliKFParticle(*trackAsso, fPDGe2);
57189f04 1117 AliKFParticle recg(ge1, ge2);
3c56855b 1118
57189f04 1119 if(recg.GetNDF()<1) continue;
1120 Double_t chi2recg = recg.GetChi2()/recg.GetNDF();
1121 if(TMath::Sqrt(TMath::Abs(chi2recg))>3.) continue;
520a29a8 1122
3c56855b 1123 Int_t MassCorrect;
1124 MassCorrect = recg.GetMass(mass,width);
520a29a8 1125
487ae960 1126 if(fFlagLS) {
1127 fInvmassLS1->Fill(mass);
1128 if(track->Pt()> 1) fInvmassLS2->Fill(mass);
1129 if(track->Pt()>2) fInvmassLS3->Fill(mass);
1130 if(track->Pt()>3) fInvmassLS4->Fill(mass);
1131 if(track->Pt()>4) fInvmassLS5->Fill(mass);
1132 }
1133 if(fFlagULS) {
1134 fInvmassULS1->Fill(mass);
1135 if(track->Pt() >1) fInvmassULS2->Fill(mass);
1136 if(track->Pt() >2) fInvmassULS3->Fill(mass);
1137 if(track->Pt() >3) fInvmassULS4->Fill(mass);
1138 if(track->Pt() >4) fInvmassULS5->Fill(mass);
1139 }
520a29a8 1140
520a29a8 1141 if(mass<fInvmassCut){
1142 if(fFlagULS)
1143 {
487ae960 1144 ElectronHadCorrel(itrack,track,fDphiULSMassLow, fDphiULSMassLow1,fDphiULSMassLow2,fDphiULSMassLow3,fDphiULSMassLow4);
520a29a8 1145 fULSElecPt->Fill(track->Pt());
987053ce 1146 // MixedEvent(track,fMixedDphiULSMassLow,fMixedDphiULSMassLow1,fMixedDphiULSMassLow2);
520a29a8 1147 }
1148 if(fFlagLS)
1149 {
487ae960 1150 ElectronHadCorrel(itrack,track,fDphiLSMassLow,fDphiLSMassLow1,fDphiLSMassLow2,fDphiLSMassLow3,fDphiLSMassLow4);
520a29a8 1151 fLSElecPt->Fill(track->Pt());
987053ce 1152 // MixedEvent(track,fMixedDphiLSMassLow,fMixedDphiLSMassLow1,fMixedDphiLSMassLow2);
520a29a8 1153 }
487ae960 1154 if(fFlagLS) ElectronHadCorrelNoPartner(itrack,jTracks,track,fDphiLSMassLowNoPartner, fDphiLSMassLowNoPartner1,fDphiLSMassLowNoPartner2,fDphiLSMassLowNoPartner3,fDphiLSMassLowNoPartner4);
1155 if(fFlagULS) ElectronHadCorrelNoPartner(itrack,jTracks,track,fDphiULSMassLowNoPartner, fDphiULSMassLowNoPartner1,fDphiULSMassLowNoPartner2,fDphiULSMassLowNoPartner3,fDphiULSMassLowNoPartner4);
57189f04 1156 }
520a29a8 1157
57189f04 1158 if(mass<fInvmassCut && fFlagULS && !flagPhotonicElec){
1159 flagPhotonicElec = kTRUE;
1160 }
520a29a8 1161 // }
1162
987053ce 1163}
1164fFlagPhotonicElec = flagPhotonicElec;
57189f04 1165}
1166//_________________________________________
987053ce 1167void AliAnalysisTaskElecHadronCorrel::ElectronHadCorrel(Int_t itrack, AliVTrack *track, TH2F *DphiPt, TH2F *DphiPt1,TH2F *DphiPt2,TH2F *DphiPt3,TH2F *DphiPt4)
57189f04 1168{
1169 //Construct Delta Phi between electrons and hadrons
520a29a8 1170
57189f04 1171 fTrackCuts2->SetAcceptKinkDaughters(kFALSE);
1172 fTrackCuts2->SetRequireTPCRefit(kTRUE);
1173 fTrackCuts2->SetRequireITSRefit(kTRUE);
1174 fTrackCuts2->SetEtaRange(-0.9,0.9);
1175 fTrackCuts2->SetRequireSigmaToVertex(kTRUE);
e4b0faf2 1176 fTrackCuts2->SetMaxChi2PerClusterTPC(4);
57189f04 1177 fTrackCuts2->SetMinNClustersTPC(80);
987053ce 1178 fTrackCuts2->SetMaxDCAToVertexZ(3.2);
1179 fTrackCuts2->SetMaxDCAToVertexXY(2.4);
1180 fTrackCuts2->SetDCAToVertex2D(kTRUE);
520a29a8 1181
987053ce 1182 for(Int_t ktracks = 0; ktracks<fVevent->GetNumberOfTracks(); ktracks++){
1183 AliVParticle* VtrackHad = fVevent->GetTrack(ktracks);
1184 if (!VtrackHad) {
57189f04 1185 printf("ERROR: Could not receive track %d\n", ktracks);
1186 continue;
1187 }
987053ce 1188
1189 AliVTrack *trackHad = dynamic_cast<AliVTrack*>(VtrackHad);
1190
1191 if(IsAODanalysis()) {
1192 AliAODTrack *atrackHad = dynamic_cast<AliAODTrack*>(VtrackHad);
1193 if(!atrackHad->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
1194 if((!(atrackHad->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrackHad->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
1195 if(atrackHad->GetTPCNcls() < 80) continue;
1196 }
1197 else{
1198 AliESDtrack *etrackHad = dynamic_cast<AliESDtrack*>(VtrackHad);
1199 if(!fTrackCuts2->AcceptTrack(etrackHad)) continue;
1200 }
1201
57189f04 1202 if(ktracks == itrack) continue; //do not select the same electron
520a29a8 1203
57189f04 1204 Double_t ptHad= -999, pHad=-999., dEdxHad = -999;
1205 Double_t ptEle = -999;
1206 Double_t phiEle = -999, phiHad = -999, Dphi = -999;
1207 Double_t pi = 3.14;
520a29a8 1208
57189f04 1209 dEdxHad = trackHad->GetTPCsignal();
1210 ptHad = trackHad->Pt();
1211 pHad = trackHad->P();
4e01b68c 1212 ptEle = track->Pt();
520a29a8 1213
987053ce 1214 // if(ptHad <2) continue;
4e01b68c 1215 if(ptHad > ptEle) continue;
3c56855b 1216 if(trackHad->Eta()<-0.9 || trackHad->Eta()>0.9) continue;
3c56855b 1217
57189f04 1218 phiEle = track->Phi();
1219 phiHad = trackHad->Phi();
1220 Dphi = phiEle - phiHad;
520a29a8 1221 if (Dphi > 3*pi/2)
57189f04 1222 Dphi = Dphi - 2*pi;
520a29a8 1223 if (Dphi < -pi/2)
57189f04 1224 Dphi = Dphi + 2*pi;
520a29a8 1225
487ae960 1226 if(ptHad>2) DphiPt->Fill(ptEle,Dphi);
1227 if(ptHad>2 && ptHad<4) DphiPt1->Fill(ptEle,Dphi);
1228 if(ptHad>4 && ptHad<6) DphiPt2->Fill(ptEle,Dphi);
1229 if(ptHad>6 && ptHad<8) DphiPt3->Fill(ptEle,Dphi);
1230 if(ptHad>8 && ptHad<10) DphiPt4->Fill(ptEle,Dphi);
4e01b68c 1231
57189f04 1232 }
1233}
1234//_________________________________________
987053ce 1235void AliAnalysisTaskElecHadronCorrel::ElectronHadCorrelNoPartner(Int_t itrack,Int_t jtrack, AliVTrack *track, TH2F *DphiPtNew, TH2F *DphiPtNew1,TH2F *DphiPtNew2,TH2F *DphiPtNew3,TH2F *DphiPtNew4)
57189f04 1236{
520a29a8 1237 //Construct Delta Phi between electrons and hadrons for electrons from invariant mass calculation excluding associated track
57189f04 1238
520a29a8 1239 fTrackCuts2->SetAcceptKinkDaughters(kFALSE);
1240 fTrackCuts2->SetRequireTPCRefit(kTRUE);
1241 fTrackCuts2->SetRequireITSRefit(kTRUE);
1242 fTrackCuts2->SetEtaRange(-0.9,0.9);
1243 fTrackCuts2->SetRequireSigmaToVertex(kTRUE);
e4b0faf2 1244 fTrackCuts2->SetMaxChi2PerClusterTPC(4);
520a29a8 1245 fTrackCuts2->SetMinNClustersTPC(80);
987053ce 1246 fTrackCuts2->SetMaxDCAToVertexZ(3.2);
1247 fTrackCuts2->SetMaxDCAToVertexXY(2.4);
1248 fTrackCuts2->SetDCAToVertex2D(kTRUE);
520a29a8 1249
987053ce 1250 for(Int_t ktracks = 0; ktracks<fVevent->GetNumberOfTracks(); ktracks++){
1251 AliVParticle* VtrackHad = fVevent->GetTrack(ktracks);
1252 if (!VtrackHad) {
520a29a8 1253 printf("ERROR: Could not receive track %d\n", ktracks);
1254 continue;
1255 }
987053ce 1256
1257 AliVTrack *trackHad = dynamic_cast<AliVTrack*>(VtrackHad);
520a29a8 1258
987053ce 1259 if(IsAODanalysis()) {
1260 AliAODTrack *atrackHad = dynamic_cast<AliAODTrack*>(VtrackHad);
1261 if(!atrackHad->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
1262 if((!(atrackHad->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrackHad->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
1263 if(atrackHad->GetTPCNcls() < 80) continue;
1264 }
1265 else{
1266 AliESDtrack *etrackHad = dynamic_cast<AliESDtrack*>(VtrackHad);
1267 if(!fTrackCuts2->AcceptTrack(etrackHad)) continue;
1268 }
1269
1270 if(ktracks == itrack || ktracks == jtrack) continue; //do not select the same electron and associated track from inv mass cal
520a29a8 1271
1272 Double_t ptHad= -999, pHad=-999., dEdxHad = -999;
1273 Double_t ptEle = -999;
1274 Double_t phiEle = -999, phiHad = -999, Dphi = -999;
1275 Double_t pi = 3.14;
1276
1277 dEdxHad = trackHad->GetTPCsignal();
1278 ptHad = trackHad->Pt();
1279 pHad = trackHad->P();
4e01b68c 1280 ptEle = track->Pt();
520a29a8 1281
3c56855b 1282// if(ptHad <2) continue;
4e01b68c 1283 if(ptHad > ptEle) continue;
3c56855b 1284 if(trackHad->Eta()<-0.9 || trackHad->Eta()>0.9) continue;
520a29a8 1285
1286 phiEle = track->Phi();
1287 phiHad = trackHad->Phi();
1288 Dphi = phiEle - phiHad;
1289 if (Dphi > 3*pi/2)
1290 Dphi = Dphi - 2*pi;
1291 if (Dphi < -pi/2)
1292 Dphi = Dphi + 2*pi;
57189f04 1293
487ae960 1294 if(ptHad>2) DphiPtNew->Fill(ptEle,Dphi);
1295 if(ptHad>2 && ptHad<4) DphiPtNew1->Fill(ptEle,Dphi);
1296 if(ptHad>4 && ptHad<6) DphiPtNew2->Fill(ptEle,Dphi);
1297 if(ptHad>6 && ptHad<8) DphiPtNew3->Fill(ptEle,Dphi);
1298 if(ptHad>8 && ptHad<10) DphiPtNew4->Fill(ptEle,Dphi);
520a29a8 1299 }
1300}
987053ce 1301
4e01b68c 1302/*
1303//_________________________________________
987053ce 1304void AliAnalysisTaskElecHadronCorrel::MixedEvent(AliAODTrack *track, TH2F *DphiPt, TH2F *DphiPt1,TH2F *DphiPt2)
4e01b68c 1305{
1306
987053ce 1307 const AliAODVertex *pVtx = fAOD->GetPrimaryVertex();
4e01b68c 1308 Double_t zVtx;
1309 zVtx = pVtx->GetZ();
1310
1311
987053ce 1312 AliCentrality *fCentrality = (AliCentrality*)fAOD->GetCentrality();
4e01b68c 1313 Double_t centvalue = fCentrality->GetCentralityPercentile("V0M");
1314
1315 AliEventPool* pool = fPoolMgr->GetEventPool(centvalue, zVtx); // Get the buffer associated with the current centrality and z-vtx
1316 if (!pool)
1317 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", centvalue, zVtx));
1318
1319 // pool->PrintInfo();
1320 if (pool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
1321 {
1322 Int_t nMix = pool->GetCurrentNEvents();
1323 fNoMixedEvents->Fill(0);
1324 fMixStat->Fill(pool->GetCurrentNEvents(),centvalue);
1325 fMixStat1->Fill(pool->GetCurrentNEvents(),zVtx);
1326
487ae960 1327 // cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << endl;
3c56855b 1328 for (Int_t jMix=0; jMix<nMix; jMix++) // mix with each event in the buffer
4e01b68c 1329 {
1330 TObjArray* bgTracks = pool->GetEvent(jMix);
1331 for (Int_t i=0;i<bgTracks->GetEntriesFast(); i++)
1332 {
1333 AliVParticle* mixtrk = (AliVParticle*) bgTracks->At(i);
1334
1335 Double_t mixtrkPhi = -999;
1336 Double_t ptEle = -999;
1337 Double_t phiEle = -999, Dphi = -999;
1338 Double_t pi = 3.14;
1339 Double_t ptmixtrk = -999;
1340
1341 ptEle = track->Pt();
3c56855b 1342 ptmixtrk = mixtrk->Pt();
4e01b68c 1343 if(ptmixtrk > ptEle) continue;
1344
1345 mixtrkPhi = mixtrk->Phi();
1346 phiEle = track->Phi();
1347 Dphi = phiEle - mixtrkPhi;
1348
1349 if (Dphi > 3*pi/2)
1350 Dphi = Dphi - 2*pi;
1351 if (Dphi < -pi/2)
1352 Dphi = Dphi + 2*pi;
987053ce 1353 if(ptmixtrk>2) DphiPt->Fill(ptEle,Dphi);
3c56855b 1354 if(ptmixtrk>2 && ptmixtrk<4) DphiPt1->Fill(ptEle,Dphi);
1355 if(ptmixtrk>4 && ptmixtrk<6) DphiPt2->Fill(ptEle,Dphi);
4e01b68c 1356 }
1357 }
1358
1359 }
1360
1361}
1362//___________________________________________
1363TObjArray* AliAnalysisTaskElecHadronCorrel::CloneAndReduceTrackList()
1364{
3c56855b 1365 // clones a track list by using AliehDPhiBasicParticle which uses much less memory (used for event mixing)
4e01b68c 1366
1367 fTrackCuts2->SetAcceptKinkDaughters(kFALSE);
1368 fTrackCuts2->SetRequireTPCRefit(kTRUE);
1369 fTrackCuts2->SetRequireITSRefit(kTRUE);
1370 fTrackCuts2->SetEtaRange(-0.9,0.9);
1371 fTrackCuts2->SetRequireSigmaToVertex(kTRUE);
1372 fTrackCuts2->SetMaxChi2PerClusterTPC(3.5);
1373 fTrackCuts2->SetMinNClustersTPC(80);
1374
1375 TObjArray* tracksClone = new TObjArray;
1376 tracksClone->SetOwner(kTRUE);
1377
987053ce 1378 for(Int_t ktracks = 0; ktracks<fAOD->GetNumberOfTracks(); ktracks++){
1379 AliAODTrack* track = fAOD->GetTrack(ktracks);
4e01b68c 1380 if (!track) {
1381 printf("ERROR: Could not receive track %d\n", ktracks);
1382 continue;
1383 }
987053ce 1384 if(!track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
4e01b68c 1385
1386 // if(ktracks == iTrack) continue;
3c56855b 1387 Double_t eta=-999,ptHad= -999, pHad=-999., phi=-999.0;
1388 Int_t label=-9999, id=-999;
1389 eta = track->Eta();
4e01b68c 1390 ptHad = track->Pt();
1391 pHad = track->P();
3c56855b 1392 phi= track->Phi();
1393 label= track->GetLabel();
1394 id=track->GetID();
4e01b68c 1395
987053ce 1396 if(track->Eta()<-0.9 || track->Eta()>0.9) continue;
1397 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1398 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
4e01b68c 1399 if(ptHad <2) continue;
987053ce 1400// if(!fTrackCuts2->AcceptTrack(track)) continue;
4e01b68c 1401
987053ce 1402 AliVParticle* particle = (AliVParticle*) fAOD->GetTrack(ktracks);
3c56855b 1403 tracksClone->Add(new AliehDPhiBasicParticle(particle->Eta(), particle->Phi(), particle->Pt(), particle->Charge()));
1404
4e01b68c 1405 }
1406
1407 return tracksClone;
1408}
1409*/
3c56855b 1410//___________________________________________
1411void AliAnalysisTaskElecHadronCorrel::HadronInfo(Int_t itrack)
1412{
1413 //Hadron information
987053ce 1414
3c56855b 1415 fTrackCuts2->SetAcceptKinkDaughters(kFALSE);
1416 fTrackCuts2->SetRequireTPCRefit(kTRUE);
1417 fTrackCuts2->SetRequireITSRefit(kTRUE);
1418 fTrackCuts2->SetEtaRange(-0.9,0.9);
1419 fTrackCuts2->SetRequireSigmaToVertex(kTRUE);
e4b0faf2 1420 fTrackCuts2->SetMaxChi2PerClusterTPC(4);
3c56855b 1421 fTrackCuts2->SetMinNClustersTPC(80);
987053ce 1422 fTrackCuts2->SetMaxDCAToVertexZ(3.2);
1423 fTrackCuts2->SetMaxDCAToVertexXY(2.4);
1424 fTrackCuts2->SetDCAToVertex2D(kTRUE);
3c56855b 1425
987053ce 1426 for(Int_t ktracks = 0; ktracks<fVevent->GetNumberOfTracks(); ktracks++){
1427 AliVParticle* VtrackHad = fVevent->GetTrack(ktracks);
1428 if (!VtrackHad) {
3c56855b 1429 printf("ERROR: Could not receive track %d\n", ktracks);
1430 continue;
1431 }
987053ce 1432
1433 AliVTrack *trackHad = dynamic_cast<AliVTrack*>(VtrackHad);
1434
1435 if(IsAODanalysis()) {
1436 AliAODTrack *atrackHad = dynamic_cast<AliAODTrack*>(VtrackHad);
1437 if(!atrackHad->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
1438 if((!(atrackHad->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrackHad->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
1439 if(atrackHad->GetTPCNcls() < 80) continue;
1440 }
1441 else{
1442 AliESDtrack *etrackHad = dynamic_cast<AliESDtrack*>(VtrackHad);
1443 if(!fTrackCuts2->AcceptTrack(etrackHad)) continue;
1444 }
1445
3c56855b 1446 if(ktracks == itrack) continue; //do not select the same electron
1447
1448 Double_t ptHad= -999;
3c56855b 1449 ptHad = trackHad->Pt();
3c56855b 1450
1451 if(trackHad->Eta()<-0.9 || trackHad->Eta()>0.9) continue;
987053ce 1452 // cout << "pt had = " << ptHad <<endl;
3c56855b 1453
3c56855b 1454 if(ptHad<2) continue;
1455
1456 fHadronPhi->Fill(trackHad->Phi());
1457 fHadronPhiPt->Fill(trackHad->Phi(),ptHad);
1458 if (trackHad->Eta() >0 && trackHad->Eta() <0.9) fHadronPhiTPChalf->Fill(trackHad->Phi());
1459
3c56855b 1460 fHadronPt->Fill(ptHad);
1461 }
1462}
1463//_________________________________________
987053ce 1464void AliAnalysisTaskElecHadronCorrel::CheckCentrality(AliVEvent* event, Bool_t &centralitypass)
3c56855b 1465{
1466 // Check if event is within the set centrality range. Falls back to V0 centrality determination if no method is set
1467 if (!fkCentralityMethod) AliFatal("No centrality method set! FATAL ERROR!");
1468 fCentrality = event->GetCentrality()->GetCentralityPercentile(fkCentralityMethod);
987053ce 1469 // cout << "Centrality evaluated-------------------------: " << fCentrality <<endl;
3c56855b 1470
1471 if ((fCentrality <= fCentralityMin) || (fCentrality > fCentralityMax))
1472 {
1473 fCentralityNoPass->Fill(fCentrality);
987053ce 1474 // cout << "--------------Fill no pass-------------------------"<<endl;
3c56855b 1475 centralitypass = kFALSE;
1476 }else
1477 {
1478 fCentralityPass->Fill(fCentrality);
987053ce 1479 // cout << "--------------Fill pass-------------------------"<<endl;
3c56855b 1480 centralitypass = kTRUE;
1481 }
1482
1483}
1484//_____________________________________________________________________________
1485void AliAnalysisTaskElecHadronCorrel::SetCentralityParameters(Double_t CentralityMin, Double_t CentralityMax, const char* CentralityMethod)
1486{
1487 // Set a centrality range ]min, max] and define the method to use for centrality selection
1488 fCentralityMin = CentralityMin;
1489 fCentralityMax = CentralityMax;
1490 fkCentralityMethod = CentralityMethod;
1491}