20 #include <TClonesArray.h>
22 #include <THashList.h>
32 #include "AliAnalysisManager.h"
33 #include "AliAnalysisUtils.h"
34 #include "AliAODMCHeader.h"
35 #include "AliAODMCParticle.h"
36 #include "AliAODTrack.h"
38 #include "AliEMCALGeometry.h"
39 #include "AliEMCALRecoUtils.h"
40 #include "AliESDtrackCuts.h"
41 #include "AliESDEvent.h"
42 #include "AliESDtrack.h"
43 #include "AliGenPythiaEventHeader.h"
44 #include "AliInputEventHandler.h"
45 #include "AliMCEvent.h"
46 #include "AliVVertex.h"
55 namespace EMCalTriggerPtAnalysis {
60 AliAnalysisTaskChargedParticlesRefMC::AliAnalysisTaskChargedParticlesRefMC():
79 for(
int itrg = 0; itrg <
kCPRntrig; itrg++){
89 AliAnalysisTaskSE(name),
107 for(
int itrg = 0; itrg <
kCPRntrig; itrg++){
110 DefineOutput(1, TList::Class());
127 fTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(
true, 1);
130 fTrackCuts->SetMaxDCAToVertexXYPtDep(
"0.0182+0.0350/pt^1.01");
132 TArrayD oldbinning, newbinning;
139 fHistos->
CreateTH1(
"hNtrialsNoSelect",
"Number of trials (without event selection)", 1, 0.5, 1.5);
140 fHistos->
CreateTH1(
"hNtrialsEvent",
"Number of trials (from header, after event selection)", 1, 0.5, 1.5);
141 fHistos->
CreateTProfile(
"hCrossSectionEvent",
"PYTHIA cross section (from header, after event selection)", 1, 0.5, 1.5);
143 fHistos->
CreateTH1(
"hTriggerJetPtNoCut",
"pt of trigger jets wihtout cuts", 1000, 0., 500);
144 fHistos->
CreateTH1(
"hRatioPtJetPtHardNoCut",
"Ratio of pt jet / pt hard without cut", 1000, 0., 20.);
145 fHistos->
CreateTH1(
"hTriggerJetPtWithCut",
"pt of trigger jets after cuts", 1000, 0., 500);
146 fHistos->
CreateTH1(
"hRatioPtJetPtHardWithCut",
"Ratio of pt jet / pt hard with cut on this ratio", 1000, 0., 20.);
147 TString triggers[16] = {
"True",
"MB",
"EMC7",
"EJ1",
"EJ2",
"EG1",
"EG2",
"MBexcl",
"EJ2excl",
"EG2excl",
"E1combined",
"E1Jonly",
"E1Gonly",
"E2combined",
"E2Jonly",
"E2Gonly"};
148 Double_t ptcuts[5] = {1., 2., 5., 10., 20.};
149 for(TString *trg = triggers; trg < triggers +
sizeof(triggers)/
sizeof(TString); trg++){
150 fHistos->
CreateTH1(Form(
"hEventCount%s", trg->Data()), Form(
"Event Counter for trigger class %s", trg->Data()), 1, 0.5, 1.5);
151 fHistos->
CreateTH1(Form(
"hVertexBefore%s", trg->Data()), Form(
"Vertex distribution before z-cut for trigger class %s", trg->Data()), 500, -50, 50);
152 fHistos->
CreateTH1(Form(
"hVertexAfter%s", trg->Data()), Form(
"Vertex distribution after z-cut for trigger class %s", trg->Data()), 100, -10, 10);
153 fHistos->
CreateTH1(Form(
"hPtEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
154 fHistos->
CreateTH1(Form(
"hPtEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
155 fHistos->
CreateTH1(Form(
"hPtEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
156 fHistos->
CreateTH1(Form(
"hPtEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
157 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
158 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentOldBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
159 fHistos->
CreateTH1(Form(
"hPtEMCALEtaAllNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
160 fHistos->
CreateTH1(Form(
"hPtEMCALEtaCentNewBinning%s", trg->Data()), Form(
"Charged particle in EMCAL pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
161 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);
162 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);
163 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);
164 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);
165 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);
166 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);
167 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);
168 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);
169 for(
int ipt = 0; ipt < 5; ipt++){
171 Form(
"hEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
172 Form(
"Eta (lab) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
178 Form(
"hEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
179 Form(
"Eta (lab) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
185 Form(
"hEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
186 Form(
"Eta (cent) distribution without etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
192 Form(
"hEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
193 Form(
"Eta (cent) distribution with etacut for tracks with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
199 Form(
"hEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
200 Form(
"Eta (lab) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
206 Form(
"hEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
207 Form(
"Eta (lab) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
213 Form(
"hEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
214 Form(
"Eta (cent) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
220 Form(
"hEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
221 Form(
"Eta (cent) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
227 Form(
"hPhiDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
228 Form(
"#phi distribution of particles with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
239 if(!fMCEvent)
return;
254 TClonesArray *fTriggerPatches =
dynamic_cast<TClonesArray *
>(fInputEvent->FindListObject(
"EmcalTriggers"));
255 if(!fTriggerPatches)
return;
258 Bool_t isMinBias = fInputHandler->IsEventSelected() & AliVEvent::kINT7,
264 if(!(isMinBias || isEG1 || isEG2 || isEJ1 || isEJ2))
return;
265 const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
267 if(vtx->GetNContributors() < 1)
return;
276 if(!
fAnalysisUtil->IsVertexSelected2013pA(fInputEvent))
return;
279 if(vtx->GetZ() < -10. || vtx->GetZ() > 10.)
return;
288 if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
327 if(!(isEJ1 || isEJ2)){
340 if(!(isEJ1 || isEJ2)){
362 AliVParticle *truepart = NULL;
363 Bool_t isEMCAL(kFALSE);
364 for(
int ipart = 0; ipart < fMCEvent->GetNumberOfTracks(); ipart++){
365 truepart = fMCEvent->GetTrack(ipart);
369 if(TMath::Abs(truepart->Pt()) < 0.1)
continue;
370 if(!truepart->Charge())
continue;
373 isEMCAL = (truepart->Phi() > 1.5 && truepart->Phi() < 3.1) ? kTRUE : kFALSE;
378 Double_t etacent = -1. * truepart->Eta() - TMath::Abs(
fYshift);
384 FillTrackHistos(
"True", truepart->Pt(), truepart->Eta() *
fEtaSign, etacent, truepart->Phi(), etacentcut, isEMCAL, kFALSE);
396 AliVTrack *checktrack(NULL);
397 AliVParticle *assocMC(NULL);
398 double ptparticle(-1.), etaparticle(-100.), etaEMCAL(0.), phiEMCAL(0.);
399 Bool_t hasTRD = kFALSE;
400 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
401 checktrack =
dynamic_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
402 if(!checktrack)
continue;
404 assocMC = fMCEvent->GetTrack(TMath::Abs(checktrack->GetLabel()));
405 if(!assocMC)
continue;
410 if(TMath::Abs(checktrack->Pt()) < 0.1)
continue;
411 if(checktrack->IsA() == AliESDtrack::Class()){
412 AliESDtrack copytrack(*(static_cast<AliESDtrack *>(checktrack)));
413 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
414 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
415 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
417 AliAODTrack copytrack(*(static_cast<AliAODTrack *>(checktrack)));
418 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(©track);
419 etaEMCAL = copytrack.GetTrackEtaOnEMCal();
420 phiEMCAL = copytrack.GetTrackPhiOnEMCal();
422 Int_t supermoduleID = -1;
423 isEMCAL =
fGeometry->SuperModuleNumberFromEtaPhi(etaEMCAL, phiEMCAL, supermoduleID);
425 isEMCAL = isEMCAL && supermoduleID < 10;
426 hasTRD = isEMCAL && supermoduleID >= 4;
429 AliESDtrack *esdtrack(NULL);
430 AliAODTrack *aodtrack(NULL);
431 if((esdtrack = dynamic_cast<AliESDtrack *>(checktrack))){
433 }
else if((aodtrack = dynamic_cast<AliAODTrack *>(checktrack))){
439 ptparticle = TMath::Abs(assocMC->Pt());
440 etaparticle = assocMC->Eta();
445 Double_t etacent = -1. * checktrack->Eta() - TMath::Abs(
fYshift);
452 FillTrackHistos(
"MB", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
454 if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
455 FillTrackHistos(
"MBexcl", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
459 FillTrackHistos(
"EMC7", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
462 FillTrackHistos(
"EJ1", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
464 FillTrackHistos(
"E1combined", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
466 FillTrackHistos(
"E1Jonly", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
470 FillTrackHistos(
"EJ2", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
473 FillTrackHistos(
"EJ2excl", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
476 FillTrackHistos(
"E2combined", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
478 FillTrackHistos(
"E2Jonly", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
482 FillTrackHistos(
"EG1", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
483 if(!(isEJ1 || isEJ2)){
484 FillTrackHistos(
"E1Gonly", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
488 FillTrackHistos(
"EG2", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
491 FillTrackHistos(
"EG2excl", ptparticle, checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
493 if(!(isEJ1 || isEJ2)){
494 FillTrackHistos(
"E2Gonly", checktrack->Pt(), checktrack->Eta() *
fEtaSign, etacent, checktrack->Phi(), etacentcut, isEMCAL, hasTRD);
513 const char *eventclass,
523 fHistos->
FillTH1(Form(
"hPtEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
524 fHistos->
FillTH1(Form(
"hPtEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
526 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
527 fHistos->
FillTH1(Form(
"hPtEMCALEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
529 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
530 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
532 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
533 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
537 int ptmin[5] = {1,2,5,10,20};
538 for(
int icut = 0; icut < 5; icut++){
539 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
540 fHistos->
FillTH1(Form(
"hPhiDistAllPt%d%s", ptmin[icut], eventclass), phi);
541 fHistos->
FillTH1(Form(
"hEtaLabDistAllPt%d%s", ptmin[icut], eventclass), etalab);
542 fHistos->
FillTH1(Form(
"hEtaCentDistAllPt%d%s", ptmin[icut], eventclass), etacent);
544 fHistos->
FillTH1(Form(
"hEtaLabDistAllEMCALPt%d%s", ptmin[icut], eventclass), etalab);
545 fHistos->
FillTH1(Form(
"hEtaCentDistAllEMCALPt%d%s", ptmin[icut], eventclass), etacent);
551 fHistos->
FillTH1(Form(
"hPtEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
552 fHistos->
FillTH1(Form(
"hPtEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
554 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
555 fHistos->
FillTH1(Form(
"hPtEMCALEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
557 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
558 fHistos->
FillTH1(Form(
"hPtEMCALWithTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
560 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
561 fHistos->
FillTH1(Form(
"hPtEMCALNoTRDEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
564 for(
int icut = 0; icut < 5; icut++){
565 if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
566 fHistos->
FillTH1(Form(
"hEtaLabDistCutPt%d%s", ptmin[icut], eventclass), etalab);
567 fHistos->
FillTH1(Form(
"hEtaCentDistCutPt%d%s", ptmin[icut], eventclass), etacent);
569 fHistos->
FillTH1(Form(
"hEtaLabDistCutEMCALPt%d%s", ptmin[icut], eventclass), etalab);
570 fHistos->
FillTH1(Form(
"hEtaCentDistCutEMCALPt%d%s", ptmin[icut], eventclass), etacent);
583 TString ending = aftercut ?
"WithCut" :
"NoCut";
585 TLorentzVector jetvec;
586 TString hnameSpec =
"hTriggerJetPt" + ending,
587 hnameptratio =
"hRatioPtJetPtHard" + ending;
588 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
589 memset(pbuf, 0,
sizeof(Float_t) * 4);
590 header->TriggerJet(ijet, pbuf);
591 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
593 fHistos->
FillTH1(hnameptratio.Data(), TMath::Abs(jetvec.Pt()/header->GetPtHard()));
605 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
607 AliError(Form(
"%s - UserNotify: No current tree!",GetName()));
611 Float_t xsection = 0;
615 TFile *curfile = tree->GetCurrentFile();
617 AliError(Form(
"%s - UserNotify: No current file!",GetName()));
621 TChain *chain =
dynamic_cast<TChain*
>(tree);
622 if (chain) tree = chain->GetTree();
624 Int_t
nevents = tree->GetEntriesFast();
649 TString
file(currFile);
653 if (file.Contains(
".zip#")) {
654 Ssiz_t pos1 = file.Index(
"root_archive",12,0,TString::kExact);
655 Ssiz_t pos = file.Index(
"#",1,pos1,TString::kExact);
656 Ssiz_t pos2 = file.Index(
".root",5,TString::kExact);
657 file.Replace(pos+1,pos2-pos1,
"");
660 file.ReplaceAll(
gSystem->BaseName(file.Data()),
"");
662 AliDebug(1,Form(
"File name: %s",file.Data()));
665 TString strPthard(file);
667 strPthard.Remove(strPthard.Last(
'/'));
668 strPthard.Remove(strPthard.Last(
'/'));
669 if (strPthard.Contains(
"AOD")) strPthard.Remove(strPthard.Last(
'/'));
670 strPthard.Remove(0,strPthard.Last(
'/')+1);
671 if (strPthard.IsDec())
672 pthard = strPthard.Atoi();
674 AliWarning(Form(
"Could not extract file number from path %s", strPthard.Data()));
677 TFile *fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec.root"));
681 fxsec = TFile::Open(Form(
"%s%s",file.Data(),
"pyxsec_hists.root"));
687 TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
692 TList *
list =
dynamic_cast<TList*
>(key->ReadObj());
697 fXsec = ((TProfile*)list->FindObject(
"h1Xsec"))->GetBinContent(1);
698 fTrials = ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1);
702 TTree *xtree = (TTree*)fxsec->Get(
"Xsection");
708 Double_t xsection = 0;
709 xtree->SetBranchAddress(
"xsection",&xsection);
710 xtree->SetBranchAddress(
"ntrials",&ntrials);
724 AliGenPythiaEventHeader *pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
727 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
729 for (UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++) {
730 pythiaHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
731 if (pythiaHeader)
break;
743 std::vector<double> mybinning;
744 std::map<double,double> definitions;
745 definitions.insert(std::pair<double,double>(2.5, 0.1));
746 definitions.insert(std::pair<double,double>(7., 0.25));
747 definitions.insert(std::pair<double,double>(15., 0.5));
748 definitions.insert(std::pair<double,double>(25., 1.));
749 definitions.insert(std::pair<double,double>(40., 2.5));
750 definitions.insert(std::pair<double,double>(50., 5.));
751 definitions.insert(std::pair<double,double>(100., 10.));
752 double currentval = 0;
753 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
754 double limit =
id->first, binwidth =
id->second;
755 while(currentval < limit){
756 currentval += binwidth;
757 mybinning.push_back(currentval);
760 binning.Set(mybinning.size());
762 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
771 std::vector<double> mybinning;
772 std::map<double,double> definitions;
773 definitions.insert(std::pair<double, double>(1, 0.05));
774 definitions.insert(std::pair<double, double>(2, 0.1));
775 definitions.insert(std::pair<double, double>(4, 0.2));
776 definitions.insert(std::pair<double, double>(7, 0.5));
777 definitions.insert(std::pair<double, double>(16, 1));
778 definitions.insert(std::pair<double, double>(36, 2));
779 definitions.insert(std::pair<double, double>(40, 4));
780 definitions.insert(std::pair<double, double>(50, 5));
781 definitions.insert(std::pair<double, double>(100, 10));
782 definitions.insert(std::pair<double, double>(200, 20));
783 double currentval = 0.;
784 mybinning.push_back(currentval);
785 for(std::map<double,double>::iterator
id = definitions.begin();
id != definitions.end(); ++id){
786 double limit =
id->first, binwidth =
id->second;
787 while(currentval < limit){
788 currentval += binwidth;
789 mybinning.push_back(currentval);
792 binning.Set(mybinning.size());
794 for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
813 if(!track->TestFilterBit(AliAODTrack::kTrkGlobal))
return false;
814 if(track->GetTPCNCrossedRows() < 120)
return false;
831 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
850 TString triggerstring =
"";
851 Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0;
852 double minADC_EJ1 = 260.,
856 for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
864 if(nEJ1) triggerstring +=
"EJ1";
866 if(triggerstring.Length()) triggerstring +=
",";
867 triggerstring +=
"EJ2";
870 if(triggerstring.Length()) triggerstring +=
",";
871 triggerstring +=
"EG1";
874 if(triggerstring.Length()) triggerstring +=
",";
875 triggerstring +=
"EG2";
877 return triggerstring;
889 Bool_t physprim =
false;
890 const AliAODMCParticle *aodmc =
dynamic_cast<const AliAODMCParticle *
>(part);
892 physprim = aodmc->IsPhysicalPrimary();
894 physprim = mcevent->IsPhysicalPrimary(part->GetLabel());
905 Bool_t hasOutlier = kFALSE;
907 TLorentzVector jetvec;
908 for(
int ijet = 0; ijet < header->NTriggerJets(); ijet++){
909 memset(pbuf, 0,
sizeof(Float_t) * 4);
910 header->TriggerJet(ijet, pbuf);
911 jetvec.SetPxPyPzE(pbuf[0], pbuf[1], pbuf[2], pbuf[3]);
912 if(TMath::Abs(jetvec.Pt()) >= this->
fFracPtHard * header->GetPtHard()){
AliEMCalHistoContainer * fHistos
Histogram manager.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t IsGammaHighSimple() const
AliAnalysisTaskChargedParticlesRefMC()
AliESDtrackCuts * fTrackCuts
Standard track selection.
Double_t fEtaLabCut[2]
Cut applied in Eta Lab frame.
Bool_t IsJetHighSimple() const
void FillTriggerJetHistograms(Bool_t aftercut, AliGenPythiaEventHeader *const header)
Bool_t IsOfflineSelected(EmcalTriggerClass trgcls, const TClonesArray *const triggerpatches) const
Double_t fOfflineEnergyThreshold[kCPRntrig]
Double_t fEtaCmsCut[2]
Cut applied in Eta centre-of-mass frame.
THashList * GetListOfHistograms()
AliGenPythiaEventHeader * GetPythiaHeader() const
void CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Double_t fYshift
Rapidity shift.
Container class for histograms for the high- charged particle analysis.
Double_t fFracPtHard
Cut on the maximum fraction of pt hard of any trigger jet.
Bool_t IsOutlier(AliGenPythiaEventHeader *const header) const
Main data structure storing all relevant information of EMCAL/DCAL trigger patches.
void CreateOldPtBinning(TArrayD &binning) const
Declarartion of class AliEMCalHistoContainer.
Bool_t IsPhysicalPrimary(const AliVParticle *const part, AliMCEvent *const mcevent)
void FillTrackHistos(const char *eventclass, Double_t pt, Double_t eta, Double_t etacent, Double_t phi, Bool_t etacut, Bool_t inEmcal, Bool_t hasTRD)
Double_t GetPatchE() const
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard) const
virtual ~AliAnalysisTaskChargedParticlesRefMC()
void CreateTProfile(const char *name, const char *title, int nbinsX, double xmin, double xmax, Option_t *opt="")
Unit test class for charged particle distributions (MC case)
AliEMCALGeometry * fGeometry
EMCAL geometry methods.
Bool_t TrackSelectionESD(AliESDtrack *track)
Int_t GetADCOfflineAmp() const
TString GetFiredTriggerClasses(const TClonesArray *triggerpatches)
Double_t fEtaSign
Sign of the eta distribution (swaps when beam directions swap): p-Pb: +1, Pb-p: -1.
Bool_t IsGammaLowSimple() const
void CreateNewPtBinning(TArrayD &binning) const
Class to make array of trigger patch objects in AOD/ESD events.
Int_t GetRunNumber(TString)
AliAnalysisUtils * fAnalysisUtil
Event selection.
void UserExec(Option_t *)
void FillTH1(const char *hname, double x, double weight=1.)
void UserCreateOutputObjects()
Bool_t IsJetLowSimple() const
Bool_t TrackSelectionAOD(AliAODTrack *track)
void FillProfile(const char *name, double x, double y, double weight=1.)
Bool_t IsOfflineSimple() const