19 #include <TClonesArray.h> 25 #include <TLorentzVector.h> 28 #include "AliMCEvent.h" 29 #include "AliESDVertex.h" 30 #include "AliAODVertex.h" 31 #include "AliAODPid.h" 35 #include "AliVTrack.h" 36 #include "AliVHeader.h" 41 #include "AliAODTrack.h" 42 #include "AliVParticle.h" 46 #include "AliHFJetsTaggingVertex.h" 60 AliEmcalJetTree::
AliEmcalJetTree() :
TNamed("CustomTree", "CustomTree"), fJetTree(0), fInitialized(0), fSaveEventProperties(0), fSaveConstituents(0), fSaveConstituentsIP(0), fSaveConstituentPID(0), fSaveJetShapes(0), fSaveMCInformation(0), fSaveSecondaryVertices(0), fExtractionPercentages(), fExtractionPercentagePtBins(), fExtractionJetTypes_HM(), fExtractionJetTypes_PM()
73 AliEmcalJetTree::AliEmcalJetTree(
const char* name) :
TNamed(name, name), fJetTree(0), fInitialized(0), fSaveEventProperties(0), fSaveConstituents(0), fSaveConstituentsIP(0), fSaveConstituentPID(0), fSaveJetShapes(0), fSaveMCInformation(0), fSaveSecondaryVertices(0), fExtractionPercentages(), fExtractionPercentagePtBins(), fExtractionJetTypes_HM(), fExtractionJetTypes_PM()
97 AliFatal(
"Tree is not initialized.");
108 Bool_t inPtRange = kFALSE;
146 AliVParticle* particle =
static_cast<AliVParticle*
>(jet->
TrackAt(i, trackCont->GetArray()));
147 if(!particle)
continue;
169 fJetTree->SetBranchAddress(
"Jet_Const_CovIPd", trackIP_d0cov);
170 fJetTree->SetBranchAddress(
"Jet_Const_CovIPz", trackIP_z0cov);
171 fJetTree->SetBranchAddress(
"Jet_Const_IPd", trackIP_d0);
172 fJetTree->SetBranchAddress(
"Jet_Const_IPz", trackIP_z0);
177 fJetTree->SetBranchAddress(
"Jet_Const_PID_ITS", trackPID_ITS);
178 fJetTree->SetBranchAddress(
"Jet_Const_PID_TPC", trackPID_TPC);
179 fJetTree->SetBranchAddress(
"Jet_Const_PID_TOF", trackPID_TOF);
180 fJetTree->SetBranchAddress(
"Jet_Const_PID_TRD", trackPID_TRD);
181 fJetTree->SetBranchAddress(
"Jet_Const_PID_Reconstructed", trackPID_Reco);
183 fJetTree->SetBranchAddress(
"Jet_Const_PID_Truth", trackPID_Truth);
190 fJetTree->SetBranchAddress(
"Jet_SecVtx_X", secVtx_X);
191 fJetTree->SetBranchAddress(
"Jet_SecVtx_Y", secVtx_Y);
192 fJetTree->SetBranchAddress(
"Jet_SecVtx_Z", secVtx_Z);
193 fJetTree->SetBranchAddress(
"Jet_SecVtx_Mass", secVtx_Mass);
194 fJetTree->SetBranchAddress(
"Jet_SecVtx_Lxy", secVtx_Lxy);
195 fJetTree->SetBranchAddress(
"Jet_SecVtx_SigmaLxy", secVtx_SigmaLxy);
196 fJetTree->SetBranchAddress(
"Jet_SecVtx_Chi2", secVtx_Chi2);
197 fJetTree->SetBranchAddress(
"Jet_SecVtx_Dispersion", secVtx_Dispersion);
228 AliFatal(
"Tree is already initialized.");
263 fJetTree->Branch(
"Jet_Const_IPd",&dummy,
"Jet_Const_IPd[Jet_NumConstituents]/F");
264 fJetTree->Branch(
"Jet_Const_IPz",&dummy,
"Jet_Const_IPz[Jet_NumConstituents]/F");
265 fJetTree->Branch(
"Jet_Const_CovIPd",&dummy,
"Jet_Const_CovIPd[Jet_NumConstituents]/F");
266 fJetTree->Branch(
"Jet_Const_CovIPz",&dummy,
"Jet_Const_CovIPz[Jet_NumConstituents]/F");
275 fJetTree->Branch(
"Jet_Const_PID_ITS",&dummy,
"Jet_Const_PID_ITS[Jet_NumConstituents]/F");
276 fJetTree->Branch(
"Jet_Const_PID_TPC",&dummy,
"Jet_Const_PID_TPC[Jet_NumConstituents]/F");
277 fJetTree->Branch(
"Jet_Const_PID_TOF",&dummy,
"Jet_Const_PID_TOF[Jet_NumConstituents]/F");
278 fJetTree->Branch(
"Jet_Const_PID_TRD",&dummy,
"Jet_Const_PID_TRD[Jet_NumConstituents]/F");
280 fJetTree->Branch(
"Jet_Const_PID_Reconstructed",&dummy,
"Jet_Const_PID_Reconstructed[Jet_NumConstituents]/S");
282 fJetTree->Branch(
"Jet_Const_PID_Truth",&dummy,
"Jet_Const_PID_Truth[Jet_NumConstituents]/S");
303 fJetTree->Branch(
"Jet_SecVtx_X",&dummy,
"Jet_SecVtx_X[Jet_NumSecVertices]/F");
304 fJetTree->Branch(
"Jet_SecVtx_Y",&dummy,
"Jet_SecVtx_Y[Jet_NumSecVertices]/F");
305 fJetTree->Branch(
"Jet_SecVtx_Z",&dummy,
"Jet_SecVtx_Z[Jet_NumSecVertices]/F");
306 fJetTree->Branch(
"Jet_SecVtx_Mass",&dummy,
"Jet_SecVtx_Mass[Jet_NumSecVertices]/F");
307 fJetTree->Branch(
"Jet_SecVtx_Lxy",&dummy,
"Jet_SecVtx_Lxy[Jet_NumSecVertices]/F");
308 fJetTree->Branch(
"Jet_SecVtx_SigmaLxy",&dummy,
"Jet_SecVtx_SigmaLxy[Jet_NumSecVertices]/F");
309 fJetTree->Branch(
"Jet_SecVtx_Chi2",&dummy,
"Jet_SecVtx_Chi2[Jet_NumSecVertices]/F");
310 fJetTree->Branch(
"Jet_SecVtx_Dispersion",&dummy,
"Jet_SecVtx_Dispersion[Jet_NumSecVertices]/F");
321 fHadronMatchingRadius(0.4),
322 fSecondaryVertexMaxChi2(1e10),
323 fSecondaryVertexMaxDispersion(0.05),
324 fCalculateSecondaryVertices(kTRUE),
326 fSetEmcalJetFlavour(0),
329 fTruthParticleArray(0),
330 fTruthJetsArrayName(
""),
331 fTruthJetsRhoName(
""),
332 fTruthParticleArrayName(
"mcparticles")
339 DefineOutput(2, TTree::Class());
365 DefineOutput(2, TTree::Class());
382 AliFatal(
"Jet input container not found!");
386 AliFatal(
"Particle input container not found attached to jets!");
396 AddHistogram2D<TH2D>(
"hTrackCount",
"Number of tracks in acceptance vs. centrality",
"COLZ", 500, 0., 5000., 100, 0, 100,
"N tracks",
"Centrality",
"dN^{Events}/dN^{Tracks}");
397 AddHistogram2D<TH2D>(
"hBackgroundPt",
"Background p_{T} distribution",
"", 150, 0., 150., 100, 0, 100,
"Background p_{T} (GeV/c)",
"Centrality",
"dN^{Events}/dp_{T}");
399 AddHistogram2D<TH2D>(
"hJetPtRaw",
"Jets p_{T} distribution (raw)",
"COLZ", 300, 0., 300., 100, 0, 100,
"p_{T, jet} (GeV/c)",
"Centrality",
"dN^{Jets}/dp_{T}");
400 AddHistogram2D<TH2D>(
"hJetPt",
"Jets p_{T} distribution (background subtracted)",
"COLZ", 400, -100., 300., 100, 0, 100,
"p_{T, jet} (GeV/c)",
"Centrality",
"dN^{Jets}/dp_{T}");
401 AddHistogram2D<TH2D>(
"hJetPtExtracted",
"Extracted jets p_{T} distribution (background subtracted)",
"COLZ", 400, -100., 300., 100, 0, 100,
"p_{T, jet} (GeV/c)",
"Centrality",
"dN^{Jets}/dp_{T}");
402 AddHistogram2D<TH2D>(
"hJetPhiEta",
"Jet angular distribution #phi/#eta",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Jets}/d#phi d#eta");
403 AddHistogram2D<TH2D>(
"hJetArea",
"Jet area",
"COLZ", 200, 0., 2., 100, 0, 100,
"Jet A",
"Centrality",
"dN^{Jets}/dA");
405 AddHistogram2D<TH2D>(
"hDeltaPt",
"#delta p_{T} distribution",
"", 400, -100., 300., 100, 0, 100,
"p_{T, cone} (GeV/c)",
"Centrality",
"dN^{Tracks}/dp_{T}");
407 AddHistogram2D<TH2D>(
"hConstituentPt",
"Jet constituent p_{T} distribution",
"COLZ", 400, 0., 300., 100, 0, 100,
"p_{T, const} (GeV/c)",
"Centrality",
"dN^{Const}/dp_{T}");
408 AddHistogram2D<TH2D>(
"hConstituentPhiEta",
"Jet constituent relative #phi/#eta distribution",
"COLZ", 120, -0.6, 0.6, 120, -0.6, 0.6,
"#Delta#phi",
"#Delta#eta",
"dN^{Const}/d#phi d#eta");
410 AddHistogram1D<TH1D>(
"hExtractionPercentage",
"Extracted jets p_{T} distribution (background subtracted)",
"COLZ", 400, -100., 300.,
"p_{T, jet} (GeV/c)",
"Extracted percentage");
413 AddHistogram2D<TH2D>(
"hTrackPt",
"Tracks p_{T} distribution",
"", 300, 0., 300., 100, 0, 100,
"p_{T} (GeV/c)",
"Centrality",
"dN^{Tracks}/dp_{T}");
414 AddHistogram2D<TH2D>(
"hTrackPhi",
"Track angular distribution in #phi",
"LEGO2", 180, 0., 2*TMath::Pi(), 100, 0, 100,
"#phi",
"Centrality",
"dN^{Tracks}/(d#phi)");
415 AddHistogram2D<TH2D>(
"hTrackEta",
"Track angular distribution in #eta",
"LEGO2", 100, -2.5, 2.5, 100, 0, 100,
"#eta",
"Centrality",
"dN^{Tracks}/(d#eta)");
416 AddHistogram2D<TH2D>(
"hTrackPhiEta",
"Track angular distribution #phi/#eta",
"COLZ", 180, 0., 2*TMath::Pi(), 100, -2.5, 2.5,
"#phi",
"#eta",
"dN^{Tracks}/d#phi d#eta");
418 AddHistogram2D<TH2D>(
"hTrackEtaPt",
"Track angular distribution in #eta vs. p_{T}",
"LEGO2", 100, -2.5, 2.5, 300, 0., 300.,
"#eta",
"p_{T} (GeV/c)",
"dN^{Tracks}/(d#eta dp_{T})");
419 AddHistogram2D<TH2D>(
"hTrackPhiPt",
"Track angular distribution in #phi vs. p_{T}",
"LEGO2", 180, 0, 2*TMath::Pi(), 300, 0., 300.,
"#phi",
"p_{T} (GeV/c)",
"dN^{Tracks}/(d#phi dp_{T})");
435 AliFatal(
"VertexerCuts not given but secondary vertex calculation turned on.");
444 for(
Int_t i=0; i<static_cast<Int_t>(extractionPercentages.size()); i++)
446 Double_t percentage = extractionPercentages[i];
447 for(
Int_t pt=static_cast<Int_t>(extractionPtBins[i*2]); pt<static_cast<Int_t>(extractionPtBins[i*2+1]); pt++)
465 const AliVVertex* myVertex = InputEvent()->GetPrimaryVertex();
466 if(!myVertex && MCEvent())
467 myVertex = MCEvent()->GetPrimaryVertex();
470 vtxX = myVertex->GetX();
471 vtxY = myVertex->GetY();
472 vtxZ = myVertex->GetZ();
475 AliVHeader* eventIDHeader = InputEvent()->GetHeader();
477 eventID = eventIDHeader->GetEventIdAsLong();
487 Int_t currentJetType_HM = 0;
488 Int_t currentJetType_PM = 0;
492 GetJetType(jet, currentJetType_HM, currentJetType_PM);
498 std::vector<Float_t> vecSigITS; std::vector<Float_t> vecSigTPC; std::vector<Float_t> vecSigTRD; std::vector<Float_t> vecSigTOF; std::vector<Short_t> vecRecoPID; std::vector<Short_t> vecTruePID;
499 std::vector<Float_t> vec_d0; std::vector<Float_t> vec_d0cov; std::vector<Float_t> vec_z0; std::vector<Float_t> vec_z0cov;
502 for(
Int_t i = 0; i < jet->GetNumberOfTracks(); i++)
504 AliVParticle* particle =
static_cast<AliVParticle*
>(jet->TrackAt(i,
fTracksCont->GetArray()));
505 if(!particle)
continue;
510 vecSigITS.push_back(sigITS); vecSigTPC.push_back(sigTPC); vecSigTOF.push_back(sigTOF); vecSigTRD.push_back(sigTRD); vecRecoPID.push_back(recoPID); vecTruePID.push_back(truePID);
516 vec_d0.push_back(d0); vec_d0cov.push_back(d0cov); vec_z0.push_back(z0); vec_z0cov.push_back(z0cov);
521 std::vector<Float_t> secVtx_X; std::vector<Float_t> secVtx_Y; std::vector<Float_t> secVtx_Z; std::vector<Float_t> secVtx_Mass; std::vector<Float_t> secVtx_Lxy; std::vector<Float_t> secVtx_SigmaLxy; std::vector<Float_t> secVtx_Chi2; std::vector<Float_t> secVtx_Dispersion;
523 ReconstructSecondaryVertices(myVertex, jet, secVtx_X, secVtx_Y, secVtx_Z, secVtx_Mass, secVtx_Lxy, secVtx_SigmaLxy, secVtx_Chi2, secVtx_Dispersion);
527 currentJetType_PM,currentJetType_HM,matchedJetPt,truePtFraction,
fPtHard,
528 vecSigITS, vecSigTPC, vecSigTOF, vecSigTRD, vecRecoPID, vecTruePID,
529 vec_d0, vec_z0, vec_d0cov, vec_z0cov,
530 secVtx_X, secVtx_Y, secVtx_Z, secVtx_Mass, secVtx_Lxy, secVtx_SigmaLxy, secVtx_Chi2, secVtx_Dispersion);
555 trueRho = rho->GetVal();
557 TClonesArray* truthArray =
static_cast<TClonesArray*
>(InputEvent()->FindListObject(Form(
"%s",
fTruthJetsArrayName.Data())));
563 for(
Int_t i=0; i<truthArray->GetEntries(); i++)
566 if(truthJet->
Pt() < 1.0)
570 Double_t deltaPhi = TMath::Min(TMath::Abs(truthJet->
Phi()-jet->
Phi()),TMath::TwoPi() - TMath::Abs(truthJet->
Phi()-jet->
Phi()));
571 Double_t deltaR = TMath::Sqrt(deltaEta*deltaEta + deltaPhi*deltaPhi);
578 if(deltaR < bestMatchDeltaR)
580 bestMatchDeltaR = deltaR;
581 matchedJetPt = truthJet->
Pt() - truthJet->
Area()* trueRho;
595 AliVParticle* particle =
static_cast<AliVParticle*
>(jet->
TrackAt(iConst,
fTracksCont->GetArray()));
596 if(!particle)
continue;
597 if(particle->Pt() < 1e-6)
continue;
600 if(particle->GetLabel() < 100000)
601 pt_nonMC += particle->Pt();
602 pt_all += particle->Pt();
605 truePtFraction = (pt_nonMC/pt_all);
620 AliAODMCParticle* parton[2];
625 Int_t pdg = TMath::Abs(parton[0]->PdgCode());
638 Int_t pdg = TMath::Abs(parton[1]->PdgCode());
640 else if (
fVtxTagger->IsBMeson(pdg)) typeHM = 5;
645 jet->
AddFlavourTag(static_cast<Int_t>(TMath::Power(2, typeHM)));
654 Bool_t isDCA=track->PropagateToDCA(vtx,InputEvent()->GetMagneticField(),3.0,d0rphiz,covd0);
666 void AliAnalysisTaskJetExtractor::ReconstructSecondaryVertices(
const AliVVertex* primVtx,
const AliEmcalJet* jet, std::vector<Float_t>& secVtx_X, std::vector<Float_t>& secVtx_Y, std::vector<Float_t>& secVtx_Z, std::vector<Float_t>& secVtx_Mass, std::vector<Float_t>& secVtx_Lxy, std::vector<Float_t>& secVtx_SigmaLxy, std::vector<Float_t>& secVtx_Chi2, std::vector<Float_t>& secVtx_Dispersion)
672 Double_t vtxPos[3] = {primVtx->GetX(), primVtx->GetY(), primVtx->GetZ()};
674 primVtx->GetCovarianceMatrix(covMatrix);
675 AliESDVertex* esdVtx =
new AliESDVertex(vtxPos, covMatrix, primVtx->GetChi2(), primVtx->GetNContributors());
677 TClonesArray* secVertexArr = 0;
678 vctr_pair_dbl_int arrDispersion;
679 arrDispersion.reserve(5);
685 secVertexArr =
new TClonesArray(
"AliAODVertex");
686 Int_t nDauRejCount = 0;
691 InputEvent()->GetMagneticField(),
700 secVertexArr->Clear();
708 secVertexArr =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(
"VerticesHF"));
714 for(
Int_t i=0; i<secVertexArr->GetEntriesFast(); i++)
716 AliAODVertex* secVtx = (AliAODVertex*)(secVertexArr->UncheckedAt(i));
718 if((strcmp(secVtx->GetParent()->ClassName(),
"AliAODRecoDecayHF3Prong")))
722 Double_t effX = secVtx->GetX() - esdVtx->GetX();
723 Double_t effY = secVtx->GetY() - esdVtx->GetY();
728 Double_t dispersion = arrDispersion[i].first;
734 Double_t Lxy = TMath::Sqrt(effX*effX + effY*effY);
736 Double_t signLxy = effX * jetP[0] + effY * jetP[1];
737 if (signLxy < 0.) Lxy *= -1.;
740 AliAODVertex* aodVtx = (AliAODVertex*)(primVtx);
742 sigmaLxy = aodVtx->ErrorDistanceXYToVertex(secVtx);
748 secVtx_X.push_back(secVtx->GetX()); secVtx_Y.push_back(secVtx->GetY()); secVtx_Z.push_back(secVtx->GetZ()); secVtx_Chi2.push_back(secVtx->GetChi2perNDF());
749 secVtx_Dispersion.push_back(dispersion); secVtx_Mass.push_back(mass); secVtx_Lxy.push_back(Lxy); secVtx_SigmaLxy.push_back(sigmaLxy);
754 secVertexArr->Clear();
773 Int_t absPDG = TMath::Abs(part->PdgCode());
774 if ((absPDG > 300 && absPDG < 400) || (absPDG > 3000 && absPDG < 4000))
777 Double_t rsquared = (part->Eta() - jet->
Eta())*(part->Eta() - jet->
Eta()) + (part->Phi() - jet->
Phi())*(part->Phi() - jet->
Phi());
786 else if(MCEvent() && (MCEvent()->Stack()))
788 AliStack*
stack = MCEvent()->Stack();
790 for(
Int_t i=0; i<stack->GetNtrack(); i++)
792 TParticle *part = stack->Particle(i);
796 Int_t absPDG = TMath::Abs(part->GetPdgCode());
797 if ((absPDG > 300 && absPDG < 400) || (absPDG > 3000 && absPDG < 4000))
800 Double_t rsquared = (part->Eta() - jet->
Eta())*(part->Eta() - jet->
Eta()) + (part->Phi() - jet->
Phi())*(part->Phi() - jet->
Phi());
831 AliVParticle* jetConst =
static_cast<AliVParticle*
>(jet->
TrackAt(i,
fTracksCont->GetArray()));
832 if(!jetConst)
continue;
836 Double_t deltaPhi = TMath::Min(TMath::Abs(jet->
Phi() - jetConst->Phi()), TMath::TwoPi() - TMath::Abs(jet->
Phi() - jetConst->Phi()));
837 if(!((jet->
Phi() - jetConst->Phi() < 0) && (jet->
Phi() - jetConst->Phi() <= TMath::Pi())))
838 deltaPhi = -deltaPhi;
845 const Int_t kNumRandomConesPerEvent = 4;
846 for(
Int_t iCone=0; iCone<kNumRandomConesPerEvent; iCone++)
856 tmpRandConePt += track->Pt();
878 if(!particle)
return;
881 AliAODTrack* aodtrack =
dynamic_cast<AliAODTrack*
>(particle);
886 recoPID = aodtrack->GetMostProbablePID();
887 AliAODPid* pidObj = aodtrack->GetDetPid();
891 sigITS = pidObj->GetITSsignal();
892 sigTPC = pidObj->GetTPCsignal();
893 sigTOF = pidObj->GetTOFsignal();
894 sigTRD = pidObj->GetTRDsignal();
902 AliAODMCParticle* mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fTruthParticleArray->At(i));
903 if(!mcParticle)
continue;
905 if (mcParticle->GetLabel() == particle->GetLabel())
908 if(TMath::Abs(mcParticle->PdgCode()) == 2212)
910 else if (TMath::Abs(mcParticle->PdgCode()) == 211)
912 else if (TMath::Abs(mcParticle->PdgCode()) == 321)
914 else if (TMath::Abs(mcParticle->PdgCode()) == 11)
916 else if (TMath::Abs(mcParticle->PdgCode()) == 13)
918 else if (TMath::Abs(mcParticle->PdgCode()) == 700201)
920 else if (TMath::Abs(mcParticle->PdgCode()) == 700301)
922 else if (TMath::Abs(mcParticle->PdgCode()) == 700302)
924 else if (TMath::Abs(mcParticle->PdgCode()) == 700202)
945 if (track->Phi() > (TMath::TwoPi() - (radius-phi)))
946 trackPhi = track->Phi() - TMath::TwoPi();
947 else if (track->Phi() < (phi+radius - TMath::TwoPi()))
948 trackPhi = track->Phi() + TMath::TwoPi();
950 trackPhi = track->Phi();
952 if ( TMath::Abs(trackPhi-phi)*TMath::Abs(trackPhi-phi) + TMath::Abs(track->Eta()-eta)*TMath::Abs(track->Eta()-eta) <= radius*radius)
964 AliError(Form(
"Cannot find histogram <%s> ",key)) ;
977 AliError(Form(
"Cannot find histogram <%s> ",key));
981 if (tmpHist->IsA()->GetBaseClass(
"TH1"))
982 static_cast<TH1*>(tmpHist)->Fill(x,y);
983 else if (tmpHist->IsA()->GetBaseClass(
"TH2"))
984 static_cast<TH2*>(tmpHist)->Fill(x,y);
993 AliError(Form(
"Cannot find histogram <%s> ",key));
997 tmpHist->Fill(x,y,add);
1006 AliError(Form(
"Cannot find histogram <%s> ",key));
1011 tmpHist->Fill(x,y,z,add);
1013 tmpHist->Fill(x,y,z);
1020 T* tmpHist =
new T(name, title, xBins, xMin, xMax);
1022 tmpHist->GetXaxis()->SetTitle(xTitle);
1023 tmpHist->GetYaxis()->SetTitle(yTitle);
1024 tmpHist->SetOption(options);
1025 tmpHist->SetMarkerStyle(kFullCircle);
1034 template <
class T>
T*
AliAnalysisTaskJetExtractor::AddHistogram2D(
const char* name,
const char*
title,
const char* options,
Int_t xBins,
Double_t xMin,
Double_t xMax,
Int_t yBins,
Double_t yMin,
Double_t yMax,
const char* xTitle,
const char* yTitle,
const char* zTitle)
1036 T* tmpHist =
new T(name, title, xBins, xMin, xMax, yBins, yMin, yMax);
1037 tmpHist->GetXaxis()->SetTitle(xTitle);
1038 tmpHist->GetYaxis()->SetTitle(yTitle);
1039 tmpHist->GetZaxis()->SetTitle(zTitle);
1040 tmpHist->SetOption(options);
1041 tmpHist->SetMarkerStyle(kFullCircle);
1050 template <
class T>
T*
AliAnalysisTaskJetExtractor::AddHistogram3D(
const char* name,
const char*
title,
const char* options,
Int_t xBins,
Double_t xMin,
Double_t xMax,
Int_t yBins,
Double_t yMin,
Double_t yMax,
Int_t zBins,
Double_t zMin,
Double_t zMax,
const char* xTitle,
const char* yTitle,
const char* zTitle)
1052 T* tmpHist =
new T(name, title, xBins, xMin, xMax, yBins, yMin, yMax, zBins, zMin, zMax);
1053 tmpHist->GetXaxis()->SetTitle(xTitle);
1054 tmpHist->GetYaxis()->SetTitle(yTitle);
1055 tmpHist->GetZaxis()->SetTitle(zTitle);
1056 tmpHist->SetOption(options);
1057 tmpHist->SetMarkerStyle(kFullCircle);
Bool_t fSaveConstituentsIP
save arrays of constituent impact parameters
Bool_t fSaveSecondaryVertices
save reconstructed sec. vertex properties
Bool_t GetSaveConstituentPID()
void AddFlavourTag(Int_t tag)
void SetSaveConstituents(Bool_t val)
Double_t GetRhoVal() const
Double_t GetJetEtaMin() const
AliJetContainer * GetJetContainer(Int_t i=0) const
TTree * fJetTree
! tree structure
Bool_t GetSaveConstituentsIP()
Float_t fBuffer_Event_BackgroundDensity
! array buffer
std::vector< Float_t > GetExtractionPercentages()
Bool_t fSaveMCInformation
save MC information
Container with name, TClonesArray and cuts for particles.
Double_t GetJetEtaMax() const
std::vector< Float_t > GetExtractionPercentagePtBins()
Bool_t fSaveEventProperties
save general event properties (bgrd. etc.)
Bool_t fSaveJetShapes
save jet shapes
Bool_t fSaveConstituentPID
save arrays of constituent PID parameters
std::vector< Int_t > fExtractionJetTypes_HM
Jet-types that will be extracted with this tree (hadron matching)
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
UShort_t T(UShort_t m, UShort_t t)
Float_t * fBuffer_Const_Phi
! array buffer
Float_t fBuffer_Jet_MC_MatchedPt
! array buffer
AliParticleContainer * GetParticleContainer() const
std::vector< Float_t > fExtractionPercentages
Percentages which will be extracted for a given pT bin.
Int_t fBuffer_Jet_MC_MotherParton
! array buffer
Float_t fBuffer_Event_PtHard
! array buffer
Int_t fBuffer_NumSecVertices
void SetSaveJetShapes(Bool_t val)
Float_t * fBuffer_Const_Charge
! array buffer
Float_t fBuffer_JetPhi
! array buffer
Bool_t GetSaveSecondaryVertices()
Float_t fBuffer_JetArea
! array buffer
std::vector< Int_t > fExtractionJetTypes_PM
Jet-types that will be extracted with this tree (parton matching)
std::vector< Float_t > fExtractionPercentagePtBins
pT-bins associated with fExtractionPercentages
Double_t fCent
!event centrality
Long64_t fBuffer_Event_ID
! array buffer
Float_t fBuffer_Event_Centrality
! array buffer
Float_t * fBuffer_Const_ProdVtx_X
! array buffer
Bool_t fInitialized
init state of tree
AliEmcalJet * GetNextAcceptJet()
void SetSaveEventProperties(Bool_t val)
Float_t fPtHard
!event -hard
Float_t GetJetRadius() const
AliEmcalList * fOutput
!output list
Float_t fBuffer_JetPt
! array buffer
Float_t fBuffer_Event_Vertex_Y
! array buffer
Float_t * fBuffer_Const_ProdVtx_Y
! array buffer
Bool_t fSaveConstituents
save arrays of constituent basic properties
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Float_t * fBuffer_Const_Pt
! array buffer
Represent a jet reconstructed using the EMCal jet framework.
Bool_t PxPyPz(Double_t p[3]) const
Float_t * fBuffer_Const_Eta
! array buffer
Float_t fBuffer_JetEta
! array buffer
Bool_t AddJetToTree(AliEmcalJet *jet, Float_t bgrdDensity=0, Float_t vertexX=0, Float_t vertexY=0, Float_t vertexZ=0, Float_t centrality=0, Long64_t eventID=0, Float_t magField=0, AliTrackContainer *trackCont=0, Int_t motherParton=0, Int_t motherHadron=0, Float_t matchedPt=0, Float_t truePtFraction=0, Float_t ptHard=0, std::vector< Float_t > &trackPID_ITS=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackPID_TPC=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackPID_TOF=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackPID_TRD=DEFAULT_VECTOR_FLOAT, std::vector< Short_t > &trackPID_Reco=DEFAULT_VECTOR_SHORT, std::vector< Short_t > &trackPID_Truth=DEFAULT_VECTOR_SHORT, std::vector< Float_t > &trackIP_d0=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackIP_z0=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackIP_d0cov=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &trackIP_z0cov=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_X=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Y=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Z=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Mass=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Lxy=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_SigmaLxy=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Chi2=DEFAULT_VECTOR_FLOAT, std::vector< Float_t > &secVtx_Dispersion=DEFAULT_VECTOR_FLOAT)
Int_t fBuffer_NumConstituents
! array buffer
void UserCreateOutputObjects()
Main initialization function on the worker.
Float_t fBuffer_Event_Vertex_X
! array buffer
virtual AliVParticle * GetNextAcceptParticle()
Bool_t GetSaveMCInformation()
Int_t GetNAcceptedParticles() const
Int_t fBuffer_Jet_MC_MotherHadron
! array buffer
Float_t fBuffer_Shape_Mass
! array buffer
Float_t * fBuffer_Const_ProdVtx_Z
! array buffer
Float_t fBuffer_Jet_MC_TruePtFraction
! array buffer
Class managing creation of a tree containing jets.
TList * OpenFile(const char *fname)
Float_t fBuffer_Event_Vertex_Z
! array buffer
Float_t fBuffer_Event_MagneticField
! array buffer