20 #include <TClonesArray.h>
22 #include <THashList.h>
34 #include "AliAnalysisManager.h"
35 #include "AliAnalysisUtils.h"
36 #include "AliAODMCHeader.h"
37 #include "AliAODInputHandler.h"
38 #include "AliAODMCParticle.h"
39 #include "AliAODTrack.h"
43 #include "AliEMCALTriggerPatchInfo.h"
44 #include "AliEMCALGeometry.h"
45 #include "AliEMCALRecoUtils.h"
46 #include "AliESDEvent.h"
47 #include "AliESDtrack.h"
48 #include "AliGenPythiaEventHeader.h"
49 #include "AliInputEventHandler.h"
50 #include "AliMCEvent.h"
51 #include "AliVVertex.h"
60 namespace EMCalTriggerPtAnalysis {
65 AliAnalysisTaskChargedParticlesRefMC::AliAnalysisTaskChargedParticlesRefMC():
69 fTriggerSelection(NULL),
73 fUsePythiaHard(kFALSE),
94 AliAnalysisTaskSE(name),
97 fTriggerSelection(NULL),
100 fWeightHandler(NULL),
101 fUsePythiaHard(kFALSE),
115 DefineOutput(1, TList::Class());
141 fHistos->
CreateTH1(
"hNtrialsNoSelect",
"Number of trials (without event selection)", 1, 0.5, 1.5);
142 fHistos->
CreateTH1(
"hNtrialsEvent",
"Number of trials (from header, after event selection)", 1, 0.5, 1.5);
143 fHistos->
CreateTProfile(
"hCrossSectionEvent",
"PYTHIA cross section (from header, after event selection)", 1, 0.5, 1.5);
145 fHistos->
CreateTH1(
"hTriggerJetPtNoCut",
"pt of trigger jets wihtout cuts", 1000, 0., 500);
146 fHistos->
CreateTH1(
"hRatioPtJetPtHardNoCut",
"Ratio of pt jet / pt hard without cut", 1000, 0., 20.);
147 fHistos->
CreateTH1(
"hTriggerJetPtWithCut",
"pt of trigger jets after cuts", 1000, 0., 500);
148 fHistos->
CreateTH1(
"hRatioPtJetPtHardWithCut",
"Ratio of pt jet / pt hard with cut on this ratio", 1000, 0., 20.);
149 TString triggers[7] = {
"True",
"MB",
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2"};
150 Double_t ptcuts[5] = {1., 2., 5., 10., 20.};
151 TString species[6] = {
"El",
"Mu",
"Pi",
"Ka",
"Pr",
"Ot"};
152 for(TString *trg = triggers; trg < triggers +
sizeof(triggers)/
sizeof(TString); trg++){
153 fHistos->
CreateTH1(Form(
"hEventCount%s", trg->Data()), Form(
"Event Counter for trigger class %s", trg->Data()), 1, 0.5, 1.5);
154 fHistos->
CreateTH1(Form(
"hVertexBefore%s", trg->Data()), Form(
"Vertex distribution before z-cut for trigger class %s", trg->Data()), 500, -50, 50);
155 fHistos->
CreateTH1(Form(
"hVertexAfter%s", trg->Data()), Form(
"Vertex distribution after z-cut for trigger class %s", trg->Data()), 100, -10, 10);
156 fHistos->
CreateTH1(Form(
"hPtEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
157 fHistos->
CreateTH1(Form(
"hPtEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
158 fHistos->
CreateTH1(Form(
"hPtEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
159 fHistos->
CreateTH1(Form(
"hPtEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
160 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
161 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
162 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
163 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
164 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
165 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
166 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
167 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (no TRD in front) pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
168 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
169 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
170 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
171 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL (with TRD in front) pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
172 for(TString *piditer = species; piditer < species +
sizeof(species)/
sizeof(TString); ++piditer){
173 fHistos->
CreateTH1(Form(
"hPtEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
174 fHistos->
CreateTH1(Form(
"hPtEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
175 fHistos->
CreateTH1(Form(
"hPtEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
176 fHistos->
CreateTH1(Form(
"hPtEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
177 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
178 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
179 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
180 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
181 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
182 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
183 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
184 fHistos->
CreateTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (no TRD in front) pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
185 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution all eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
186 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution central eta old binning trigger %s", piditer->Data(), trg->Data()), oldbinning);
187 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution all eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
188 fHistos->
CreateTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s%s", piditer->Data(), trg->Data()), Form(
"Charged %s in EMCAL (with TRD in front) pt distribution central eta new binning trigger %s", piditer->Data(), trg->Data()), newbinning);
190 for(
int ipt = 0; ipt < 5; ipt++){
192 Form(
"hEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
193 Form(
"Eta (lab) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
199 Form(
"hEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
200 Form(
"Eta (lab) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
206 Form(
"hEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
207 Form(
"Eta (cent) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
213 Form(
"hEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
214 Form(
"Eta (cent) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
220 Form(
"hEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
221 Form(
"Eta (lab) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
227 Form(
"hEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
228 Form(
"Eta (lab) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
234 Form(
"hEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
235 Form(
"Eta (cent) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
241 Form(
"hEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
242 Form(
"Eta (cent) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
248 Form(
"hPhiDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
249 Form(
"#phi distribution of particles with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
261 if(!fMCEvent)
return;
280 Bool_t isMinBias = fInputHandler->IsEventSelected() & AliVEvent::kINT7,
281 isEMC7 = kFALSE, isEJ1 = kFALSE, isEJ2 = kFALSE, isEG1 = kFALSE, isEG2 = kFALSE;
282 TClonesArray *fTriggerPatches =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
"EmcalTriggers"));
291 if(!(isMinBias || isEG1 || isEG2 || isEJ1 || isEJ2))
return;
292 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
294 if(vtx->GetNContributors() < 1)
return;
297 if(isMinBias)
fHistos->
FillTH1(
"hVertexBeforeMB", vtx->GetZ(), weight);
298 if(isEMC7)
fHistos->
FillTH1(
"hVertexBeforeEMC7", vtx->GetZ(), weight);
299 if(isEJ1)
fHistos->
FillTH1(
"hVertexBeforeEJ1", vtx->GetZ(), weight);
300 if(isEJ2)
fHistos->
FillTH1(
"hVertexBeforeEJ2", vtx->GetZ(), weight);
301 if(isEG1)
fHistos->
FillTH1(
"hVertexBeforeEG1", vtx->GetZ(), weight);
302 if(isEG2)
fHistos->
FillTH1(
"hVertexBeforeEG2", vtx->GetZ(), weight);
303 if(!
fAnalysisUtil->IsVertexSelected2013pA(fInputEvent))
return;
306 if(vtx->GetZ() < -10. || vtx->GetZ() > 10.)
return;
352 AliVParticle *truepart = NULL;
353 Bool_t isEMCAL(kFALSE);
354 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
355 truepart = fMCEvent->GetTrack(ipart);
359 if(TMath::Abs(truepart->Pt()) < 0.1)
continue;
360 if(!truepart->Charge())
continue;
363 isEMCAL = (truepart->Phi() > 1.5 && truepart->Phi() < 3.1) ? kTRUE : kFALSE;
368 Double_t etacent = -1. * truepart->Eta() - TMath::Abs(
fYshift);
375 switch(TMath::Abs(truepart->PdgCode())){
376 case kPiPlus: pid =
"Pi";
break;
377 case kMuonMinus: pid =
"Mu";
break;
378 case kElectron: pid =
"El";
break;
379 case kKPlus: pid =
"Ka";
break;
380 case kProton: pid =
"Pr";
break;
381 default: pid =
"Ot";
break;
385 FillTrackHistos(
"True", weight, truepart->Pt(), truepart->Eta() *
fEtaSign, etacent, truepart->Phi(), etacentcut, isEMCAL, kFALSE, pid);
397 AliVTrack *checktrack(NULL);
398 AliVParticle *assocMC(NULL);
399 double ptparticle(-1.), etaparticle(-100.), etaEMCAL(0.), phiEMCAL(0.);
400 Bool_t hasTRD = kFALSE;
401 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
402 checktrack =
dynamic_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
403 if(!checktrack)
continue;
405 assocMC = fMCEvent->GetTrack(TMath::Abs(checktrack->GetLabel()));
406 if(!assocMC)
continue;
411 if(TMath::Abs(checktrack->Pt()) < 0.1)
continue;
412 if(checktrack->IsA() == AliESDtrack::Class()){
413 AliESDtrack copytrack(*(static_cast<AliESDtrack *>(checktrack)));
414 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
415 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
416 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
418 AliAODTrack copytrack(*(static_cast<AliAODTrack *>(checktrack)));
419 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
420 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
421 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
423 Int_t supermoduleID = -1;
424 isEMCAL =
fGeometry->SuperModuleNumberFromEtaPhi(etaEMCAL, phiEMCAL, supermoduleID);
426 isEMCAL = isEMCAL && supermoduleID < 10;
427 hasTRD = isEMCAL && supermoduleID >= 4;
431 ptparticle = TMath::Abs(assocMC->Pt());
432 etaparticle = assocMC->Eta();
437 Double_t etacent = -1. * checktrack->Eta() - TMath::Abs(
fYshift);
443 TString assocpid =
"";
444 switch(TMath::Abs(assocMC->PdgCode())){
445 case kPiPlus: assocpid =
"Pi";
break;
446 case kMuonMinus: assocpid =
"Mu";
break;
447 case kElectron: assocpid =
"El";
break;
448 case kKPlus: assocpid =
"Ka";
break;
449 case kProton: assocpid =
"Pr";
break;
450 default: assocpid =
"Ot";
break;
455 FillTrackHistos(
"MB", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
458 FillTrackHistos(
"EMC7", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
461 FillTrackHistos(
"EJ1", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
464 FillTrackHistos(
"EJ2", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
467 FillTrackHistos(
"EG1", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
470 FillTrackHistos(
"EG2", weight, ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD, assocpid);
489 const char *eventclass,
501 fHistos->
FillTH1(Form(
"hPtEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
502 fHistos->
FillTH1(Form(
"hPtEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
503 fHistos->
FillTH1(Form(
"hPtEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
504 fHistos->
FillTH1(Form(
"hPtEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
506 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
507 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
508 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
509 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
511 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
512 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
513 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
514 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
516 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt), weight);
517 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt), weight);
518 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
519 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
523 int ptmin[5] = {1,2,5,10,20};
524 for(
int icut = 0; icut < 5; icut++){
525 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
526 fHistos->
FillTH1(Form(
"hPhiDistAllPt%d%s", ptmin[icut], eventclass), phi, weight);
527 fHistos->
FillTH1(Form(
"hEtaLabDistAllPt%d%s", ptmin[icut], eventclass), etalab, weight);
528 fHistos->
FillTH1(Form(
"hEtaCentDistAllPt%d%s", ptmin[icut], eventclass), etacent, weight);
530 fHistos->
FillTH1(Form(
"hEtaLabDistAllEMCALPt%d%s", ptmin[icut], eventclass), etalab, weight);
531 fHistos->
FillTH1(Form(
"hEtaCentDistAllEMCALPt%d%s", ptmin[icut], eventclass), etacent, weight);
537 fHistos->
FillTH1(Form(
"hPtEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
538 fHistos->
FillTH1(Form(
"hPtEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
539 fHistos->
FillTH1(Form(
"hPtEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
540 fHistos->
FillTH1(Form(
"hPtEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
542 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
543 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
544 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
545 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
547 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
548 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
549 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
550 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
552 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt), weight);
553 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt), weight);
554 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
555 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s%s", pid, eventclass), TMath::Abs(pt), weight);
558 for(
int icut = 0; icut < 5; icut++){
559 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
560 fHistos->
FillTH1(Form(
"hEtaLabDistCutPt%d%s", ptmin[icut], eventclass), etalab, weight);
561 fHistos->
FillTH1(Form(
"hEtaCentDistCutPt%d%s", ptmin[icut], eventclass), etacent, weight);
563 fHistos->
FillTH1(Form(
"hEtaLabDistCutEMCALPt%d%s", ptmin[icut], eventclass), etalab, weight);
564 fHistos->
FillTH1(Form(
"hEtaCentDistCutEMCALPt%d%s", ptmin[icut], eventclass), etacent, weight);
577 TString ending = aftercut ?
"WithCut" :
"NoCut";
579 TLorentzVector jetvec;
580 TString hnameSpec =
"hTriggerJetPt" + ending,
581 hnameptratio =
"hRatioPtJetPtHard" + ending;
582 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
583 memset(pbuf, 0,
sizeof(Float_t) * 4);
584 header->TriggerJet(ijet, pbuf);
585 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
587 fHistos->
FillTH1(hnameptratio.Data(), TMath::Abs(jetvec.Pt()/header->GetPtHard()));
600 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
602 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
606 Float_t xsection = 0;
610 TFile *curfile = tree->GetCurrentFile();
612 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
616 TChain *chain =
dynamic_cast<TChain*
>(tree);
617 if (chain) tree = chain->GetTree();
619 Int_t
nevents = tree->GetEntriesFast();
644 TString
file(currFile);
648 if (file.Contains(
".zip#")) {
649 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
650 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
651 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
652 file.Replace(pos+1,pos2-pos1,
"");
655 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
657 AliDebug(1,Form(
"File name: %s",file.Data()));
660 TString strPthard(file);
662 strPthard.Remove(strPthard.Last(
'/'));
663 strPthard.Remove(strPthard.Last(
'/'));
664 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
665 strPthard.Remove(0,strPthard.Last(
'/')+1);
666 if (strPthard.IsDec())
667 pthard = strPthard.Atoi();
669 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
672 TFile *fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root"));
676 fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root"));
682 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
687 TList *
list =
dynamic_cast<TList*
>(key->ReadObj());
692 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
693 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
697 TTree *xtree = (TTree*)fxsec->Get(
"Xsection");
703 Double_t xsection = 0;
704 xtree->SetBranchAddress(
"xsection",&xsection);
705 xtree->SetBranchAddress(
"ntrials",&ntrials);
719 AliGenPythiaEventHeader *pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
722 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
724 for (UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
725 pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
726 if (pythiaHeader)
break;
750 TString triggerstring =
"";
751 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0;
752 double minADC_EJ1 = 260.,
756 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
757 AliEMCALTriggerPatchInfo *patch =
dynamic_cast<AliEMCALTriggerPatchInfo *
>(*patchIter);
758 if(!patch->IsOfflineSimple())
continue;
759 if(patch->IsJetHighSimple() && patch->GetADCOfflineAmp() > minADC_EJ1) nEJ1++;
760 if(patch->IsJetLowSimple() && patch->GetADCOfflineAmp() > minADC_EJ2) nEJ2++;
761 if(patch->IsGammaHighSimple() && patch->GetADCOfflineAmp() > minADC_EG1) nEG1++;
762 if(patch->IsGammaLowSimple() && patch->GetADCOfflineAmp() > minADC_EG2) nEG2++;
764 if(nEJ1) triggerstring +=
"EJ1";
766 if(triggerstring.Length()) triggerstring +=
",";
767 triggerstring +=
"EJ2";
770 if(triggerstring.Length()) triggerstring +=
",";
771 triggerstring +=
"EG1";
774 if(triggerstring.Length()) triggerstring +=
",";
775 triggerstring +=
"EG2";
777 return triggerstring;
789 Bool_t physprim =
false;
790 const AliAODMCParticle *aodmc =
dynamic_cast<const AliAODMCParticle *
>(part);
792 physprim = aodmc->IsPhysicalPrimary();
794 physprim = mcevent->IsPhysicalPrimary(part->GetLabel());
805 Bool_t hasOutlier = kFALSE;
807 TLorentzVector jetvec;
808 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
809 memset(pbuf, 0,
sizeof(Float_t) * 4);
810 header->TriggerJet(ijet, pbuf);
811 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
812 if(TMath::Abs(jetvec.Pt()) >= this->
fFracPtHard * header->GetPtHard()){
const AliEMCalTriggerWeightHandler * fWeightHandler
Weight handler (optional)
AliAnalysisTaskChargedParticlesRefMC()
Double_t fEtaLabCut[2]
Cut applied in Eta Lab frame.
void FillTriggerJetHistograms(Bool_t aftercut, AliGenPythiaEventHeader *const header)
static AliEmcalTrackSelection * TrackCutsFactory(TString name, Bool_t isAOD)
Double_t fEtaCmsCut[2]
Cut applied in Eta centre-of-mass frame.
void AddStep(Double_t max, Double_t binwidth)
AliGenPythiaEventHeader * GetPythiaHeader() const
Double_t fYshift
Rapidity shift.
Double_t fFracPtHard
Cut on the maximum fraction of pt hard of any trigger jet.
AliEmcalTriggerOfflineSelection * fTriggerSelection
Offline trigger selection.
Bool_t IsOutlier(AliGenPythiaEventHeader *const header) const
void CreateTProfile(const char *name, const char *title, int nbinsX, double xmin, double xmax, Option_t *opt="")
Bool_t fUsePythiaHard
flag whether using PYTHIA Hard
THashList * GetListOfHistograms() const
THistManager * fHistos
Histogram manager.
Bool_t IsPhysicalPrimary(const AliVParticle *const part, AliMCEvent *const mcevent)
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Helper class creating user defined custom binning.
void FillProfile(const char *name, double x, double y, double weight=1.)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard) const
virtual ~AliAnalysisTaskChargedParticlesRefMC()
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const TClonesArray *const triggerpatches) const
Unit test class for charged particle distributions (MC case)
AliEMCALGeometry * fGeometry
EMCAL geometry methods.
double GetEventWeight(const AliMCEvent *const event) const
void FillTrackHistos(const char *eventclass, Double_t weight, Double_t pt, Double_t eta, Double_t etacent, Double_t phi, Bool_t etacut, Bool_t inEmcal, Bool_t hasTRD, const char *pid)
AliEmcalTrackSelection * fTrackCuts
Standard track selection.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TString GetFiredTriggerClasses(const TClonesArray *triggerpatches)
Double_t fEtaSign
Sign of the eta distribution (swaps when beam directions swap): p-Pb: +1, Pb-p: -1.
Container class for histograms for the high- charged particle analysis.
Int_t GetRunNumber(TString)
AliAnalysisUtils * fAnalysisUtil
Event selection.
void UserExec(Option_t *)
void UserCreateOutputObjects()
void InitializeTrackCuts(TString cutname, bool isAOD)
void SetTrackSelection(AliEmcalTrackSelection *sel)
virtual bool IsTrackAccepted(AliVTrack *const trk)=0
void SetMinimum(Double_t min)