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