20 #include <TClonesArray.h> 27 #include <TLorentzVector.h> 33 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,0,0) 37 #include "AliMCEvent.h" 38 #include "AliESDVertex.h" 39 #include "AliAODVertex.h" 40 #include "AliAODPid.h" 44 #include "AliVTrack.h" 45 #include "AliVHeader.h" 51 #include "AliAODTrack.h" 52 #include "AliVParticle.h" 56 #include "AliAnalysisManager.h" 61 #include "AliGenHepMCEventHeader.h" 62 #include "AliGenHijingEventHeader.h" 63 #include "AliHFJetsTaggingVertex.h" 64 #include "AliRDHFJetsCutsVertex.h" 77 AliEmcalJetTree::
AliEmcalJetTree() :
TNamed("CustomTree", "CustomTree"), fJetTree(0), fInitialized(0), fExtractionPercentages(), fExtractionPercentagePtBins(), fExtractionJetTypes_HM(), fExtractionJetTypes_PM()
99 AliEmcalJetTree::AliEmcalJetTree(
const char* name) :
TNamed(name, name), fJetTree(0), fInitialized(0), fExtractionPercentages(), fExtractionPercentagePtBins(), fExtractionJetTypes_HM(), fExtractionJetTypes_PM()
121 Bool_t AliEmcalJetTree::AddJetToTree(
AliEmcalJet* jet,
Bool_t saveConstituents,
Bool_t saveConstituentsIP,
Bool_t saveCaloClusters,
Double_t* vertex,
Float_t rho,
Float_t rhoMass,
Float_t centrality,
Int_t multiplicity,
Long64_t eventID,
Float_t magField)
124 AliFatal(
"Tree is not initialized.");
135 Bool_t inPtRange = kFALSE;
167 if(saveConstituents || saveConstituentsIP)
171 if(!particle)
continue;
181 if(saveConstituentsIP)
196 if(!cluster)
continue;
199 TLorentzVector clusterMomentum;
200 cluster->GetMomentum(clusterMomentum, vertex);
224 fJetTree->SetBranchAddress(
"Jet_TriggerTrack_Pt", triggerTrackPt.data());
225 fJetTree->SetBranchAddress(
"Jet_TriggerTrack_dEta", triggerTrackDeltaEta.data());
226 fJetTree->SetBranchAddress(
"Jet_TriggerTrack_dPhi", triggerTrackDeltaPhi.data());
232 fJetTree->SetBranchAddress(
"Jet_Track_CovIPd", trackIP_d0cov.data());
233 fJetTree->SetBranchAddress(
"Jet_Track_CovIPz", trackIP_z0cov.data());
234 fJetTree->SetBranchAddress(
"Jet_Track_IPd", trackIP_d0.data());
235 fJetTree->SetBranchAddress(
"Jet_Track_IPz", trackIP_z0.data());
239 void AliEmcalJetTree::FillBuffer_MonteCarlo(
Int_t motherParton,
Int_t motherHadron,
Int_t partonInitialCollision,
Float_t matchedJetDistance,
Float_t matchedJetPt,
Float_t matchedJetMass,
Float_t truePtFraction,
Float_t truePtFraction_mcparticles,
Float_t ptHard,
Float_t eventWeight,
Float_t impactParameter)
257 void AliEmcalJetTree::FillBuffer_PID(std::vector<Float_t>& trackPID_ITS, std::vector<Float_t>& trackPID_TPC, std::vector<Float_t>& trackPID_TOF, std::vector<Float_t>& trackPID_TRD, std::vector<Short_t>& trackPID_Reco, std::vector<Int_t>& trackPID_Truth)
259 fJetTree->SetBranchAddress(
"Jet_Track_PID_ITS", trackPID_ITS.data());
260 fJetTree->SetBranchAddress(
"Jet_Track_PID_TPC", trackPID_TPC.data());
261 fJetTree->SetBranchAddress(
"Jet_Track_PID_TOF", trackPID_TOF.data());
262 fJetTree->SetBranchAddress(
"Jet_Track_PID_TRD", trackPID_TRD.data());
263 fJetTree->SetBranchAddress(
"Jet_Track_PID_Reconstructed", trackPID_Reco.data());
264 if(trackPID_Truth.data())
265 fJetTree->SetBranchAddress(
"Jet_Track_PID_Truth", trackPID_Truth.data());
292 void AliEmcalJetTree::FillBuffer_Splittings(std::vector<Float_t>& splittings_radiatorE, std::vector<Float_t>& splittings_kT, std::vector<Float_t>& splittings_theta,
Bool_t saveSecondaryVertices, std::vector<Int_t>& splittings_secVtx_rank, std::vector<Int_t>& splittings_secVtx_index)
295 fJetTree->SetBranchAddress(
"Jet_Splitting_RadiatorE", splittings_radiatorE.data());
296 fJetTree->SetBranchAddress(
"Jet_Splitting_kT", splittings_kT.data());
297 fJetTree->SetBranchAddress(
"Jet_Splitting_Theta", splittings_theta.data());
298 if(saveSecondaryVertices)
300 fJetTree->SetBranchAddress(
"Jet_Splitting_SecVtx_Rank", splittings_secVtx_rank.data());
301 fJetTree->SetBranchAddress(
"Jet_Splitting_SecVtx_Index", splittings_secVtx_index.data());
306 void AliEmcalJetTree::FillBuffer_SecVertices(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)
309 fJetTree->SetBranchAddress(
"Jet_SecVtx_X", secVtx_X.data());
310 fJetTree->SetBranchAddress(
"Jet_SecVtx_Y", secVtx_Y.data());
311 fJetTree->SetBranchAddress(
"Jet_SecVtx_Z", secVtx_Z.data());
312 fJetTree->SetBranchAddress(
"Jet_SecVtx_Mass", secVtx_Mass.data());
313 fJetTree->SetBranchAddress(
"Jet_SecVtx_Lxy", secVtx_Lxy.data());
314 fJetTree->SetBranchAddress(
"Jet_SecVtx_SigmaLxy", secVtx_SigmaLxy.data());
315 fJetTree->SetBranchAddress(
"Jet_SecVtx_Chi2", secVtx_Chi2.data());
316 fJetTree->SetBranchAddress(
"Jet_SecVtx_Dispersion", secVtx_Dispersion.data());
328 AliFatal(
"Tree is already initialized.");
351 if(saveMCInformation)
364 if(saveMCInformation)
376 if(saveMCInformation)
380 if(saveConstituentsIP)
382 fJetTree->Branch(
"Jet_Track_IPd",&dummy,
"Jet_Track_IPd[Jet_NumTracks]/F");
383 fJetTree->Branch(
"Jet_Track_IPz",&dummy,
"Jet_Track_IPz[Jet_NumTracks]/F");
384 fJetTree->Branch(
"Jet_Track_CovIPd",&dummy,
"Jet_Track_CovIPd[Jet_NumTracks]/F");
385 fJetTree->Branch(
"Jet_Track_CovIPz",&dummy,
"Jet_Track_CovIPz[Jet_NumTracks]/F");
392 if(saveConstituentPID)
394 fJetTree->Branch(
"Jet_Track_PID_ITS",&dummy,
"Jet_Track_PID_ITS[Jet_NumTracks]/F");
395 fJetTree->Branch(
"Jet_Track_PID_TPC",&dummy,
"Jet_Track_PID_TPC[Jet_NumTracks]/F");
396 fJetTree->Branch(
"Jet_Track_PID_TOF",&dummy,
"Jet_Track_PID_TOF[Jet_NumTracks]/F");
397 fJetTree->Branch(
"Jet_Track_PID_TRD",&dummy,
"Jet_Track_PID_TRD[Jet_NumTracks]/F");
399 fJetTree->Branch(
"Jet_Track_PID_Reconstructed",&dummy,
"Jet_Track_PID_Reconstructed[Jet_NumTracks]/S");
400 if(saveMCInformation)
401 fJetTree->Branch(
"Jet_Track_PID_Truth",&dummy,
"Jet_Track_PID_Truth[Jet_NumTracks]/I");
429 fJetTree->Branch(
"Jet_Splitting_Theta",&dummy,
"Jet_Splitting_Theta[Jet_NumSplittings]/F");
430 fJetTree->Branch(
"Jet_Splitting_RadiatorE",&dummy,
"Jet_Splitting_RadiatorE[Jet_NumSplittings]/F");
431 fJetTree->Branch(
"Jet_Splitting_kT",&dummy,
"Jet_Splitting_kT[Jet_NumSplittings]/F");
432 if(saveSecondaryVertices)
434 fJetTree->Branch(
"Jet_Splitting_SecVtx_Rank",&dummy,
"Jet_Splitting_SecVtx_Rank[Jet_NumSplittings]/I");
435 fJetTree->Branch(
"Jet_Splitting_SecVtx_Index",&dummy,
"Jet_Splitting_SecVtx_Index[Jet_NumSplittings]/I");
439 if(saveMCInformation)
451 if(saveSecondaryVertices)
455 fJetTree->Branch(
"Jet_SecVtx_X",&dummy,
"Jet_SecVtx_X[Jet_NumSecVertices]/F");
456 fJetTree->Branch(
"Jet_SecVtx_Y",&dummy,
"Jet_SecVtx_Y[Jet_NumSecVertices]/F");
457 fJetTree->Branch(
"Jet_SecVtx_Z",&dummy,
"Jet_SecVtx_Z[Jet_NumSecVertices]/F");
458 fJetTree->Branch(
"Jet_SecVtx_Mass",&dummy,
"Jet_SecVtx_Mass[Jet_NumSecVertices]/F");
459 fJetTree->Branch(
"Jet_SecVtx_Lxy",&dummy,
"Jet_SecVtx_Lxy[Jet_NumSecVertices]/F");
460 fJetTree->Branch(
"Jet_SecVtx_SigmaLxy",&dummy,
"Jet_SecVtx_SigmaLxy[Jet_NumSecVertices]/F");
461 fJetTree->Branch(
"Jet_SecVtx_Chi2",&dummy,
"Jet_SecVtx_Chi2[Jet_NumSecVertices]/F");
462 fJetTree->Branch(
"Jet_SecVtx_Dispersion",&dummy,
"Jet_SecVtx_Dispersion[Jet_NumSecVertices]/F");
466 if(saveTriggerTracks)
469 fJetTree->Branch(
"Jet_TriggerTrack_Pt",&dummy,
"Jet_TriggerTrack_Pt[Jet_NumTriggerTracks]/F");
470 fJetTree->Branch(
"Jet_TriggerTrack_dEta",&dummy,
"Jet_TriggerTrack_dEta[Jet_NumTriggerTracks]/F");
471 fJetTree->Branch(
"Jet_TriggerTrack_dPhi",&dummy,
"Jet_TriggerTrack_dPhi[Jet_NumTriggerTracks]/F");
480 fSaveConstituents(0), fSaveConstituentsIP(0), fSaveConstituentPID(0), fSaveJetShapes(0), fSaveJetSplittings(0), fSaveMCInformation(0), fSaveSecondaryVertices(0), fSaveTriggerTracks(0), fSaveCaloClusters(0),
481 fEventPercentage(1.0),
482 fEventCut_TriggerTrackMinPt(0),
483 fEventCut_TriggerTrackMaxPt(0),
484 fEventCut_TriggerTrackMinLabel(-9999999),
485 fEventCut_TriggerTrackMaxLabel(+9999999),
486 fEventCut_TriggerTrackOrigin(-1),
488 fTruthMaxLabel(100000),
489 fHadronMatchingRadius(0.4),
490 fMatchedJetsArrayName(
""),
491 fMatchedJetsRhoName(
""),
492 fMatchedJetsRhoMassName(
""),
493 fMCParticleArrayName(
"mcparticles"),
497 fSecondaryVertexMaxChi2(1e10),
498 fSecondaryVertexMaxDispersion(0.05),
499 fCustomStartupScript(),
500 fSetEmcalJetFlavour(0),
501 fSaveTrackPDGCode(kTRUE),
504 fImpactParameter(0.),
507 fTriggerTracks_Eta(),
508 fTriggerTracks_Phi(),
511 fRandomGeneratorCones(0),
513 fIsEmbeddedEvent(kFALSE),
521 DefineOutput(2, TTree::Class());
568 DefineOutput(2, TTree::Class());
584 AliFatal(
"Jet input container not found!");
587 AliFatal(
"At least one particle input container needs to be added");
589 AliFatal(
"Cluster input container not found although cluster extraction demanded!");
605 AddHistogram2D<TH2D>(
"hTrackCount",
"Number of tracks in acceptance vs. centrality",
"COLZ", 500, 0., 5000., 100, 0, 100,
"N tracks",
"Centrality",
"dN^{Events}/dN^{Tracks}");
606 AddHistogram2D<TH2D>(
"hBackgroundPt",
"Background p_{T} distribution",
"", 150, 0., 150., 100, 0, 100,
"Background p_{T} (GeV/c)",
"Centrality",
"dN^{Events}/dp_{T}");
608 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}");
609 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}");
610 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}");
611 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");
612 AddHistogram2D<TH2D>(
"hJetArea",
"Jet area",
"COLZ", 200, 0., 2., 100, 0, 100,
"Jet A",
"Centrality",
"dN^{Jets}/dA");
613 AddHistogram2D<TH2D>(
"hDeltaPt",
"#delta p_{T} distribution",
"", 400, -100., 300., 100, 0, 100,
"p_{T, cone} (GeV/c)",
"Centrality",
"dN^{Tracks}/dp_{T}");
614 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}");
615 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");
616 AddHistogram1D<TH1D>(
"hExtractionPercentage",
"Extracted jets p_{T} distribution (background subtracted)",
"e1p", 400, -100., 300.,
"p_{T, jet} (GeV/c)",
"Extracted percentage");
619 AddHistogram2D<TH2D>(
"hTrackPt",
"Tracks p_{T} distribution",
"", 300, 0., 300., 100, 0, 100,
"p_{T} (GeV/c)",
"Centrality",
"dN^{Tracks}/dp_{T}");
620 AddHistogram2D<TH2D>(
"hTrackPhi",
"Track angular distribution in #phi",
"LEGO2", 180, 0., 2*TMath::Pi(), 100, 0, 100,
"#phi",
"Centrality",
"dN^{Tracks}/(d#phi)");
621 AddHistogram2D<TH2D>(
"hTrackEta",
"Track angular distribution in #eta",
"LEGO2", 100, -2.5, 2.5, 100, 0, 100,
"#eta",
"Centrality",
"dN^{Tracks}/(d#eta)");
622 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");
624 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})");
625 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})");
659 AliFatal(
"VertexerCuts not given but secondary vertex calculation turned on.");
668 for(
Int_t i=0; i<static_cast<Int_t>(extractionPercentages.size()); i++)
670 Double_t percentage = extractionPercentages[i];
671 for(
Int_t pt=static_cast<Int_t>(extractionPtBins[i*2]); pt<static_cast<Int_t>(extractionPtBins[i*2+1]); pt++)
680 if(dynamic_cast<AliGenHijingEventHeader*>(MCEvent()->GenEventHeader()))
681 AddHistogram1D<TH1D>(
"hHIJING_Ncoll",
"N_{coll} from HIJING",
"e1p", 1000, 0., 5000,
"N_{coll}",
"dN^{Events}/dN^{N_{coll}}");
683 if(dynamic_cast<AliGenHepMCEventHeader*>(MCEvent()->GenEventHeader()))
685 AddHistogram1D<TH1D>(
"hJEWEL_NProduced",
"NProduced from JEWEL",
"e1p", 1000, 0., 1000,
"Nproduced",
"dN^{Events}/dN^{Nproduced}");
686 AddHistogram1D<TH1D>(
"hJEWEL_ImpactParameter",
"Impact parameter from JEWEL",
"e1p", 1000, 0., 1,
"IP",
"dN^{Events}/dN^{IP}");
687 TProfile* evweight =
new TProfile(
"hJEWEL_EventWeight",
"Event weight from JEWEL", 1, 0,1);
695 TGrid::Connect(
"alien://");
697 gSystem->Exec(
"bash ./myScript.sh");
719 const AliVVertex* myVertex = InputEvent()->GetPrimaryVertex();
720 if(!myVertex && MCEvent())
721 myVertex = MCEvent()->GetPrimaryVertex();
725 vtx[0] = myVertex->GetX(); vtx[1] = myVertex->GetY(); vtx[2] = myVertex->GetZ();
729 AliVHeader* eventIDHeader = InputEvent()->GetHeader();
731 eventID = eventIDHeader->GetEventIdAsLong();
736 if(AliGenHijingEventHeader* mcHeader = dynamic_cast<AliGenHijingEventHeader*>(MCEvent()->GenEventHeader()))
738 Double_t ncoll = mcHeader->NN() + mcHeader->NNw() + mcHeader->NwN() + mcHeader->NwNw();
741 if(AliGenHepMCEventHeader* mcHeader = dynamic_cast<AliGenHepMCEventHeader*>(MCEvent()->GenEventHeader()))
746 TProfile* tmpHist =
static_cast<TProfile*
>(
fOutput->FindObject(
"hJEWEL_EventWeight"));
759 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<Int_t> vecTruePID;
760 std::vector<Float_t> vec_d0; std::vector<Float_t> vec_d0cov; std::vector<Float_t> vec_z0; std::vector<Float_t> vec_z0cov;
761 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;
764 std::vector<Float_t> splittings_radiatorE; std::vector<Float_t> splittings_kT; std::vector<Float_t> splittings_theta; std::vector<Int_t> splittings_secVtx_rank; std::vector<Int_t> splittings_secVtx_index;
773 Double_t truePtFraction_mcparticles = 0;
774 Int_t currentJetType_HM = 0;
775 Int_t currentJetType_PM = 0;
776 Int_t currentJetType_IC = 0;
778 GetJetType(jet, currentJetType_HM, currentJetType_PM, currentJetType_IC);
782 fJetTree->
FillBuffer_MonteCarlo(currentJetType_PM,currentJetType_HM,currentJetType_IC,matchedJetDistance,matchedJetPt,matchedJetMass,truePtFraction,truePtFraction_mcparticles,
fPtHard,
fEventWeight,
fImpactParameter);
788 for(
Int_t i = 0; i < jet->GetNumberOfParticleConstituents(); i++)
790 const AliVParticle* particle = jet->GetParticleConstituents()[i].GetParticle();
791 if(!particle)
continue;
795 AddPIDInformation(const_cast<AliVParticle*>(particle), sigITS, sigTPC, sigTOF, sigTRD, recoPID, truePID);
796 vecSigITS.push_back(sigITS); vecSigTPC.push_back(sigTPC); vecSigTOF.push_back(sigTOF); vecSigTRD.push_back(sigTRD); vecRecoPID.push_back(recoPID); vecTruePID.push_back(truePID);
803 vec_d0.push_back(d0); vec_d0cov.push_back(d0cov); vec_z0.push_back(z0); vec_z0cov.push_back(z0cov);
812 ReconstructSecondaryVertices(myVertex, jet, secVtx_X, secVtx_Y, secVtx_Z, secVtx_Mass, secVtx_Lxy, secVtx_SigmaLxy, secVtx_Chi2, secVtx_Dispersion);
819 for(
UInt_t i=0; i<triggerTracks_dEta.size(); i++)
825 triggerTracks_dPhi[i] = -triggerTracks_dPhi[i];
838 CalculateJetShapes(jet, leSub_noCorr, angularity, momentumDispersion, trackPtMean, trackPtMedian);
844 GetJetSplittings(jet, splittings_radiatorE, splittings_kT, splittings_theta, splittings_secVtx_rank, splittings_secVtx_index);
849 Bool_t accepted =
fJetTree->
AddJetToTree(jet,
fSaveConstituents,
fSaveConstituentsIP,
fSaveCaloClusters, vtx,
GetJetContainer(0)->
GetRhoVal(),
GetJetContainer(0)->GetRhoMassVal(),
fCent,
fMultiplicity, eventID, InputEvent()->GetMagneticField());
859 while(AliVTrack *track = static_cast<AliVTrack*>(
GetParticleContainer(iCont)->GetNextAcceptParticle()))
910 Double_t jetLeadingHadronPt = -999.;
911 Double_t jetSubleadingHadronPt = -999.;
917 momentumDispersion = 0;
919 std::sort(tracks_sorted.rbegin(), tracks_sorted.rend());
920 Int_t numTracks = tracks_sorted.size();
921 if(!numTracks)
return;
925 for (
Int_t i=0;i<numTracks;i++)
927 const AliVParticle* particle = tracks_sorted[i].GetParticle();
928 trackPtMean += particle->Pt();
929 constPts[i] = particle->Pt();
930 if(particle->Pt() > jetLeadingHadronPt)
932 jetSubleadingHadronPt = jetLeadingHadronPt;
933 jetLeadingHadronPt = particle->Pt();
935 else if(particle->Pt() > jetSubleadingHadronPt)
936 jetSubleadingHadronPt = particle->Pt();
939 jetSummedPt += particle->Pt();
940 jetSummedPt2 += particle->Pt()*particle->Pt();
941 angularity += particle->Pt() * deltaR;
946 trackPtMean /= numTracks;
947 trackPtMedian = TMath::Median(numTracks, constPts);
951 leSub_noCorr = jetLeadingHadronPt - jetSubleadingHadronPt;
953 leSub_noCorr = jetLeadingHadronPt;
957 momentumDispersion = TMath::Sqrt(jetSummedPt2)/jetSummedPt;
958 angularity /= jetSummedPt;
971 truePtFraction_mcparticles = 0;
977 if(!particle)
continue;
978 if(particle->Pt() < 1e-6)
continue;
983 pt_truth += particle->Pt();
984 pt_all += particle->Pt();
991 if(!cluster)
continue;
992 if(cluster->E() < 1e-6)
continue;
998 const AliVVertex* myVertex = InputEvent()->GetPrimaryVertex();
999 if(!myVertex && MCEvent())
1000 myVertex = MCEvent()->GetPrimaryVertex();
1003 vtxX = myVertex->GetX();
1004 vtxY = myVertex->GetY();
1005 vtxZ = myVertex->GetZ();
1008 Double_t primVtx[3] = {vtxX, vtxY, vtxZ};
1009 TLorentzVector clusterMomentum;
1010 cluster->GetMomentum(clusterMomentum, primVtx);
1011 Double_t ClusterPt = clusterMomentum.Perp();
1017 pt_truth += ClusterPt;
1018 pt_all += ClusterPt;
1030 if(!part->IsPhysicalPrimary())
continue;
1031 if(!fulljets && !part->Charge())
continue;
1032 if(part->Pt() < 1e-6)
continue;
1035 pt_truth_mcparticles += part->Pt();
1040 truePtFraction = (pt_truth/pt_all);
1041 truePtFraction_mcparticles = (pt_truth_mcparticles/pt_all);
1050 matchedJetDistance = 8.;
1057 trueRho = rho->GetVal();
1061 TClonesArray* matchedJetArray =
static_cast<TClonesArray*
>(InputEvent()->FindListObject(Form(
"%s",
fMatchedJetsArrayName.Data())));
1068 for(
Int_t i=0; i<matchedJetArray->GetEntries(); i++)
1071 if(matchedJet->
Pt() < 0.15)
1075 if(deltaR < matchedJetDistance)
1077 matchedJetDistance = deltaR;
1078 matchedJetPt = matchedJet->
Pt() - matchedJet->
Area()* trueRho;
1082 matchedJetMass = matchedJet->
M();
1099 AliAODMCParticle* parton[2];
1104 Int_t pdg = TMath::Abs(parton[0]->PdgCode());
1117 Int_t pdg = TMath::Abs(parton[1]->PdgCode());
1119 else if (
fVtxTagger->IsBMeson(pdg)) typeHM = 5;
1124 jet->
AddFlavourTag(static_cast<Int_t>(TMath::Power(2, typeHM)));
1145 if(delta1R < delta2R)
1158 AliAODTrack localTrack(*track);
1160 Bool_t isDCA=localTrack.PropagateToDCA(vtx,InputEvent()->GetMagneticField(),3.0,d0rphiz,covd0);
1172 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)
1178 Double_t vtxPos[3] = {primVtx->GetX(), primVtx->GetY(), primVtx->GetZ()};
1180 primVtx->GetCovarianceMatrix(covMatrix);
1181 AliESDVertex* esdVtx =
new AliESDVertex(vtxPos, covMatrix, primVtx->GetChi2(), primVtx->GetNContributors());
1183 TClonesArray* secVertexArr = 0;
1184 vctr_pair_dbl_int arrDispersion;
1185 arrDispersion.reserve(5);
1189 secVertexArr =
new TClonesArray(
"AliAODVertex");
1190 Int_t nDauRejCount = 0;
1195 InputEvent()->GetMagneticField(),
1203 secVertexArr->Clear();
1204 delete secVertexArr;
1211 for(
Int_t i=0; i<secVertexArr->GetEntriesFast(); i++)
1213 AliAODVertex* secVtx = (AliAODVertex*)(secVertexArr->UncheckedAt(i));
1216 Double_t effX = secVtx->GetX() - esdVtx->GetX();
1217 Double_t effY = secVtx->GetY() - esdVtx->GetY();
1222 Double_t dispersion = arrDispersion[i].first;
1228 Double_t Lxy = TMath::Sqrt(effX*effX + effY*effY);
1230 Double_t signLxy = effX * jetP[0] + effY * jetP[1];
1231 if (signLxy < 0.) Lxy *= -1.;
1234 AliAODVertex* aodVtx = (AliAODVertex*)(primVtx);
1236 sigmaLxy = aodVtx->ErrorDistanceXYToVertex(secVtx);
1245 vtx.
fIndex = secVtx_X.size();
1246 vtx.
fLxy = TMath::Abs(Lxy);
1247 vtx.
fDaughter1 =
static_cast<AliVParticle*
>(secVtx->GetDaughter(0));
1248 vtx.
fDaughter2 =
static_cast<AliVParticle*
>(secVtx->GetDaughter(1));
1249 vtx.
fDaughter3 =
static_cast<AliVParticle*
>(secVtx->GetDaughter(2));
1252 secVtx_X.push_back(secVtx->GetX()); secVtx_Y.push_back(secVtx->GetY()); secVtx_Z.push_back(secVtx->GetZ()); secVtx_Chi2.push_back(secVtx->GetChi2perNDF());
1253 secVtx_Dispersion.push_back(dispersion); secVtx_Mass.push_back(mass); secVtx_Lxy.push_back(Lxy); secVtx_SigmaLxy.push_back(sigmaLxy);
1260 secVertexArr->Clear();
1261 delete secVertexArr;
1278 Int_t absPDG = TMath::Abs(part->PdgCode());
1279 if ((absPDG > 300 && absPDG < 400) || (absPDG > 3000 && absPDG < 4000))
1282 Double_t rsquared = (part->Eta() - jet->
Eta())*(part->Eta() - jet->
Eta()) + (part->Phi() - jet->
Phi())*(part->Phi() - jet->
Phi());
1291 else if(MCEvent() && (MCEvent()->Stack()))
1293 AliStack*
stack = MCEvent()->Stack();
1295 for(
Int_t i=0; i<stack->GetNtrack(); i++)
1297 TParticle *part = stack->Particle(i);
1301 Int_t absPDG = TMath::Abs(part->GetPdgCode());
1302 if ((absPDG > 300 && absPDG < 400) || (absPDG > 3000 && absPDG < 4000))
1305 Double_t rsquared = (part->Eta() - jet->
Eta())*(part->Eta() - jet->
Eta()) + (part->Phi() - jet->
Phi())*(part->Phi() - jet->
Phi());
1342 if(!particle)
continue;
1346 Double_t deltaPhi = TMath::Min(TMath::Abs(jet->
Phi() - particle->Phi()), TMath::TwoPi() - TMath::Abs(jet->
Phi() - particle->Phi()));
1347 if(!((jet->
Phi() - particle->Phi() < 0) && (jet->
Phi() - particle->Phi() <= TMath::Pi())))
1348 deltaPhi = -deltaPhi;
1355 const Int_t kNumRandomConesPerEvent = 4;
1356 for(
Int_t iCone=0; iCone<kNumRandomConesPerEvent; iCone++)
1367 while(AliVTrack *track = static_cast<AliVTrack*>(
GetParticleContainer(iCont)->GetNextAcceptParticle()))
1369 tmpRandConePt += track->Pt();
1392 if(!particle)
return;
1395 const AliAODTrack* aodtrack =
dynamic_cast<const AliAODTrack*
>(particle);
1400 recoPID = aodtrack->GetMostProbablePID();
1401 AliAODPid* pidObj = aodtrack->GetDetPid();
1405 sigITS = pidObj->GetITSsignal();
1406 sigTPC = pidObj->GetTPCsignal();
1407 sigTOF = pidObj->GetTOFsignal();
1408 sigTRD = pidObj->GetTRDsignal();
1416 AliAODMCParticle* mcParticle =
dynamic_cast<AliAODMCParticle*
>(
fMCParticleArray->At(i));
1417 if(!mcParticle)
continue;
1419 if (mcParticle->GetLabel() == particle->GetLabel())
1423 truePID = mcParticle->PdgCode();
1427 if(TMath::Abs(mcParticle->PdgCode()) == 2212)
1429 else if (TMath::Abs(mcParticle->PdgCode()) == 211)
1431 else if (TMath::Abs(mcParticle->PdgCode()) == 321)
1433 else if (TMath::Abs(mcParticle->PdgCode()) == 11)
1435 else if (TMath::Abs(mcParticle->PdgCode()) == 13)
1437 else if (TMath::Abs(mcParticle->PdgCode()) == 700201)
1439 else if (TMath::Abs(mcParticle->PdgCode()) == 700301)
1441 else if (TMath::Abs(mcParticle->PdgCode()) == 700302)
1443 else if (TMath::Abs(mcParticle->PdgCode()) == 700202)
1461 fastjet::JetAlgorithm jetAlgo(fastjet::cambridge_algorithm);
1463 fastjet::JetDefinition jetDefinition(jetAlgo, jetRadius_CA,static_cast<fastjet::RecombinationScheme>(0), fastjet::Best);
1467 std::vector<fastjet::PseudoJet> particles;
1472 constituent->PxPyPz(p);
1473 fastjet::PseudoJet pseudoJet = fastjet::PseudoJet(p[0], p[1], p[2], constituent->E());
1480 pseudoJet.set_user_index(iVtx);
1484 particles.push_back(pseudoJet);
1488 fastjet::ClusterSequence clusterSeq_CA(particles, jetDefinition);
1489 std::vector<fastjet::PseudoJet> jets_CA = clusterSeq_CA.inclusive_jets(0);
1490 jets_CA = sorted_by_pt(jets_CA);
1491 fastjet::PseudoJet radiator = jets_CA[0];
1492 fastjet::PseudoJet leadingSubJet;
1493 fastjet::PseudoJet subleadingSubJet;
1496 while(radiator.has_parents(leadingSubJet,subleadingSubJet))
1498 if(leadingSubJet.perp() < subleadingSubJet.perp())
1499 std::swap(leadingSubJet,subleadingSubJet);
1502 Float_t theta = leadingSubJet.delta_R(subleadingSubJet);
1504 Float_t radiatorEnergy = leadingSubJet.e()+subleadingSubJet.e();
1506 Float_t kT = subleadingSubJet.perp()*theta;
1509 Int_t secVtx_rank = -1;
1510 Int_t secVtx_index = -1;
1513 std::vector<fastjet::PseudoJet> leadingConsts = leadingSubJet.constituents();
1514 for(
UInt_t iLeadingConst=0; iLeadingConst<leadingConsts.size(); iLeadingConst++)
1516 if(leadingConsts[iLeadingConst].user_index()>=0)
1518 secVtx_rank = leadingConsts[iLeadingConst].user_index();
1525 splittings_radiatorE.push_back(radiatorEnergy);
1526 splittings_theta.push_back(theta);
1527 splittings_kT.push_back(kT);
1528 splittings_secVtx_rank.push_back(secVtx_rank);
1529 splittings_secVtx_index.push_back(secVtx_index);
1532 radiator=leadingSubJet;
1534 }
catch (fastjet::Error) { }
1541 std::cout <<
"#########################################\n";
1542 std::cout <<
"Settings for extractor task " << GetName() << std::endl;
1543 std::cout << std::endl;
1545 std::cout <<
"### Event cuts ###" << std::endl;
1546 std::cout << std::endl;
1550 std::cout << Form(
"* Trigger track event cut: %s", (
fEventCut_TriggerTrackOrigin==1)?
"From embedded event" :
"Not from embedded event") << std::endl;
1552 std::cout << Form(
"* Artificially lowered event efficiency: %f",
fEventPercentage) << std::endl;
1554 std::cout << Form(
"* Random seeds explicitly set: %lu (for event/jet eff.), %lu (RCs)",
fRandomSeed,
fRandomSeedCones) << std::endl;
1555 std::cout << std::endl;
1557 std::cout <<
"### Jet properties ###" << std::endl;
1561 std::cout << std::endl;
1563 std::cout <<
"### Tree extraction properties ###" << std::endl;
1568 if(extractionPercentages.size())
1570 std::cout <<
"* Extraction bins: (";
1571 for(
Int_t i=0; i<static_cast<Int_t>(extractionPercentages.size()-1); i++)
1572 std::cout << extractionPtBins[i*2] <<
"-" << extractionPtBins[i*2+1] <<
" = " << extractionPercentages[i] <<
", ";
1573 std::cout << extractionPtBins[(extractionPercentages.size()-1)*2] <<
"-" << extractionPtBins[(extractionPercentages.size()-1)*2+1] <<
" = " << extractionPercentages[(extractionPercentages.size()-1)];
1575 std::cout <<
")" << std::endl;
1577 if(extractionHM.size())
1579 std::cout <<
"* Extraction of hadron-matched jets with types: (";
1580 for(
Int_t i=0; i<static_cast<Int_t>(extractionHM.size()-1); i++)
1581 std::cout << extractionHM[i] <<
", ";
1582 std::cout << extractionHM[extractionHM.size()-1];
1583 std::cout <<
")" << std::endl;
1585 if(extractionPM.size())
1587 std::cout <<
"* Extraction of parton-matched jets with types: (";
1588 for(
Int_t i=0; i<static_cast<Int_t>(extractionPM.size()-1); i++)
1589 std::cout << extractionPM[i] <<
", ";
1590 std::cout << extractionPM[extractionPM.size()-1];
1591 std::cout <<
")" << std::endl;
1593 std::cout << std::endl;
1595 std::cout <<
"### Extracted data groups ###" << std::endl;
1596 std::cout <<
"* Basic event properties (ID, vertex, centrality, bgrd. densities, ...)" << std::endl;
1598 std::cout <<
"* Jet constituents, basic properties (pt, eta, phi, charge, ...)" << std::endl;
1600 std::cout <<
"* Jet constituents, IPs" << std::endl;
1602 std::cout <<
"* Jet constituents, PID" << std::endl;
1604 std::cout <<
"* Jet calorimeter clusters" << std::endl;
1606 std::cout <<
"* MC information (origin, matched jets, ...)" << std::endl;
1608 std::cout <<
"* Secondary vertices" << std::endl;
1610 std::cout <<
"* Jet shapes (jet mass, LeSub, pTD, ...)" << std::endl;
1612 std::cout <<
"* Jet splittings (kT, theta, E from iterative CA reclustering)" << std::endl;
1614 std::cout <<
"* Trigger tracks" << std::endl;
1615 std::cout << std::endl;
1616 std::cout <<
"### Further settings ###" << std::endl;
1618 std::cout << Form(
"* EMCal embedding framework will be used (at least on container has IsEmbedded() true)") << std::endl;
1622 std::cout << Form(
"* Particle level information available (for jet origin calculation, particle code): %s",
fMCParticleArrayName.Data()) << std::endl;
1623 if(extractionHM.size())
1628 std::cout << Form(
"* Particle PID codes will be PDG codes") << std::endl;
1630 std::cout << Form(
"* Particle PID codes will follow AliAODPid convention") << std::endl;
1632 std::cout << Form(
"* AliEmcalJet flavour tag is set from HF-jet tagging") << std::endl;
1634 std::cout <<
"#########################################\n\n";
1646 if(deltaR <= radius)
1658 AliError(Form(
"Cannot find histogram <%s> ",key)) ;
1671 AliError(Form(
"Cannot find histogram <%s> ",key));
1675 if (tmpHist->IsA()->GetBaseClass(
"TH1"))
1676 static_cast<TH1*>(tmpHist)->Fill(x,y);
1677 else if (tmpHist->IsA()->GetBaseClass(
"TH2"))
1678 static_cast<TH2*>(tmpHist)->Fill(x,y);
1687 AliError(Form(
"Cannot find histogram <%s> ",key));
1691 tmpHist->Fill(x,y,add);
1700 AliError(Form(
"Cannot find histogram <%s> ",key));
1705 tmpHist->Fill(x,y,z,add);
1707 tmpHist->Fill(x,y,z);
1714 T* tmpHist =
new T(name, title, xBins, xMin, xMax);
1716 tmpHist->GetXaxis()->SetTitle(xTitle);
1717 tmpHist->GetYaxis()->SetTitle(yTitle);
1718 tmpHist->SetOption(options);
1719 tmpHist->SetMarkerStyle(kFullCircle);
1728 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)
1730 T* tmpHist =
new T(name, title, xBins, xMin, xMax, yBins, yMin, yMax);
1731 tmpHist->GetXaxis()->SetTitle(xTitle);
1732 tmpHist->GetYaxis()->SetTitle(yTitle);
1733 tmpHist->GetZaxis()->SetTitle(zTitle);
1734 tmpHist->SetOption(options);
1735 tmpHist->SetMarkerStyle(kFullCircle);
1744 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)
1746 T* tmpHist =
new T(name, title, xBins, xMin, xMax, yBins, yMin, yMax, zBins, zMin, zMax);
1747 tmpHist->GetXaxis()->SetTitle(xTitle);
1748 tmpHist->GetYaxis()->SetTitle(yTitle);
1749 tmpHist->GetZaxis()->SetTitle(zTitle);
1750 tmpHist->SetOption(options);
1751 tmpHist->SetMarkerStyle(kFullCircle);
1775 if(taskNameSuffix != 0)
1776 suffix = taskNameSuffix;
1779 TString name(
"AliAnalysisTaskJetExtractor");
1780 if (jetArray !=
"") {
1784 if (rhoObject !=
"") {
1800 if(trackArray ==
"mcparticles")
1802 else if(trackArray ==
"mctracks")
1810 if(clusterArray !=
"")
1815 AliESDtrackCuts* esdTrackCuts =
new AliESDtrackCuts(
"AliESDtrackCuts",
"default");
1816 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
1817 esdTrackCuts->SetMinNClustersTPC(90);
1818 esdTrackCuts->SetMaxChi2PerClusterTPC(4);
1819 esdTrackCuts->SetRequireTPCRefit(kTRUE);
1820 esdTrackCuts->SetRequireITSRefit(kTRUE);
1821 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1822 esdTrackCuts->SetMinDCAToVertexXY(0.);
1823 esdTrackCuts->SetEtaRange(-0.8, 0.8);
1824 esdTrackCuts->SetPtRange(1.0, 1.e10);
1825 vertexerCuts->AddTrackCuts(esdTrackCuts);
1826 vertexerCuts->SetNprongs(3);
1827 vertexerCuts->SetMinPtHardestTrack(1.0);
1828 vertexerCuts->SetSecVtxWithKF(kFALSE);
1829 vertexerCuts->SetImpParCut(0.);
1830 vertexerCuts->SetDistPrimSec(0.);
1831 vertexerCuts->SetCospCut(-1);
1849 mgr->AddTask(myTask);
1852 mgr->ConnectInput (myTask, 0, mgr->GetCommonInputContainer() );
1853 mgr->ConnectOutput (myTask, 1, mgr->CreateContainer(Form(
"%s_histos", name.Data()), AliEmcalList::Class(), AliAnalysisManager::kOutputContainer, Form(
"%s:ChargedJetsHadronCF", mgr->GetCommonFileName())) );
1854 mgr->ConnectOutput (myTask, 2, mgr->CreateContainer(Form(
"%s_tree", name.Data()), TTree::Class(), AliAnalysisManager::kOutputContainer, mgr->GetCommonFileName()) );
Float_t fBuffer_Shape_MomentumDispersion
! array buffer
void FillBuffer_Splittings(std::vector< Float_t > &splittings_radiatorE, std::vector< Float_t > &splittings_kT, std::vector< Float_t > &splittings_theta, Bool_t saveSecondaryVertices, std::vector< Int_t > &splittings_secVtx_rank, std::vector< Int_t > &splittings_secVtx_index)
Double_t GetFirstOrderSubtractedAngularity() const
void AddFlavourTag(Int_t tag)
static const AliVEvent * GetEvent(const AliVEvent *inputEvent, bool isEmbedding=false)
Float_t fBuffer_Jet_MC_TruePtFraction_mcparticles
! array buffer
Float_t * fBuffer_Track_ProdVtx_Z
! array buffer
void SetParticlePtCut(Double_t cut)
virtual AliVParticle * GetNextAcceptParticle()
Double_t GetRhoVal() const
void FillBuffer_MonteCarlo(Int_t motherParton, Int_t motherHadron, Int_t partonInitialCollision, Float_t matchJetDistance, Float_t matchedJetPt, Float_t matchedJetMass, Float_t truePtFraction, Float_t truePtFraction_mcparticles, Float_t ptHard, Float_t eventWeight, Float_t impactParameter)
const TString & GetRhoName() const
Double_t GetSecondOrderSubtractedSigma2() const
Int_t fBuffer_NumTriggerTracks
Float_t fBuffer_Jet_MC_MatchedJet_Pt
! array buffer
Float_t fBuffer_Shape_LeSub_DerivCorr
! array buffer
Double_t GetJetEtaMin() const
Float_t GetPartonEta6() const
AliJetContainer * GetJetContainer(Int_t i=0) const
Float_t GetPartonEta7() const
TTree * fJetTree
! tree structure
Double_t GetSecondOrderSubtractedConstituent() const
void FillBuffer_TriggerTracks(std::vector< Float_t > &triggerTrackPt, std::vector< Float_t > &triggerTrackDeltaEta, std::vector< Float_t > &triggerTrackDeltaPhi)
Float_t fBuffer_Event_BackgroundDensity
! array buffer
void SetLeadingHadronType(Int_t t)
Float_t fBuffer_Shape_Mass_DerivCorr_1
! array buffer
Float_t fBuffer_Jet_MC_MatchedJet_Mass
! array buffer
std::vector< Float_t > GetExtractionPercentages()
void SetPtBiasJetTrack(Float_t b)
Float_t * fBuffer_Cluster_M02
! array buffer
Double_t GetJetEtaMax() const
void FillBuffer_JetShapes(AliEmcalJet *jet, Double_t leSub_noCorr, Double_t angularity, Double_t momentumDispersion, Double_t trackPtMean, Double_t trackPtMedian)
Float_t GetPartonPhi7() const
AliJetContainer * AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius=0.4)
const std::vector< PWG::JETFW::AliEmcalParticleJetConstituent > & GetParticleConstituents() const
Get container with particle (track / MC particle) constituents.
std::vector< Float_t > GetExtractionPercentagePtBins()
Int_t * fBuffer_Track_Label
! array buffer
Float_t fBuffer_Shape_Circularity_DerivCorr_1
! array buffer
Double_t GetSecondOrderSubtractedpTD() const
Float_t fBuffer_Shape_pTD_DerivCorr_2
! array buffer
void LoadRhoMass(const AliVEvent *event)
void SetPercAreaCut(Float_t p)
void SetVzRange(Double_t min, Double_t max)
Set pre-configured event cut object.
Float_t * fBuffer_Track_Eta
! array buffer
EJetType_t GetJetType() const
AliClusterContainer * AddClusterContainer(const char *n)
Create new cluster container and attach it to the task.
Int_t GetPartonFlag7() const
std::vector< Int_t > fExtractionJetTypes_HM
Jet-types that will be extracted with this tree (hadron matching)
Container for particles within the EMCAL framework.
Float_t GetPartonPhi6() const
Double_t GetFirstOrderSubtractedpTD() const
UShort_t T(UShort_t m, UShort_t t)
TObjArray fParticleCollArray
particle/track collection array
Float_t fBuffer_Shape_Mass_DerivCorr_2
! array buffer
Float_t fBuffer_Event_ImpactParameter
! array buffer
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
const TString & GetRhoMassName() const
Double_t GetSecondOrderSubtractedLeSub() const
Int_t GetPartonFlag6() const
void SetRhoName(const char *n)
TRandom3 * fRandomGenerator
! random generator
std::vector< Float_t > fExtractionPercentages
Percentages which will be extracted for a given pT bin.
Float_t * fBuffer_Cluster_Time
! array buffer
Float_t fBuffer_Shape_Sigma2_DerivCorr_2
! array buffer
Int_t fBuffer_Jet_MC_MotherParton
! array buffer
Float_t fBuffer_Event_PtHard
! array buffer
Int_t fBuffer_NumSecVertices
void SetJetPtCut(Float_t cut)
Float_t * fBuffer_Track_Charge
! array buffer
Float_t * fBuffer_Cluster_Phi
! array buffer
Float_t fBuffer_Event_Weight
! array buffer
Bool_t GetIsEmbedding() const
Get embedding status.
Float_t fBuffer_Shape_Sigma2_DerivCorr_1
! array buffer
void InitializeTree(Bool_t saveCaloClusters, Bool_t saveMCInformation, Bool_t saveConstituents, Bool_t saveConstituentsIP, Bool_t saveConstituentPID, Bool_t saveJetShapes, Bool_t saveSplittings, Bool_t saveSecondaryVertices, Bool_t saveTriggerTracks)
AliParticleContainer * AddParticleContainer(const char *n)
Create new particle container and attach it to the task.
Int_t fBuffer_Event_Multiplicity
! array buffer
Float_t fBuffer_JetPhi
! array buffer
Double_t GetSecondOrderSubtractedAngularity() const
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
Float_t fBuffer_Shape_TrackPtMedian
! array buffer
void FillBuffer_PID(std::vector< Float_t > &trackPID_ITS, std::vector< Float_t > &trackPID_TPC, std::vector< Float_t > &trackPID_TOF, std::vector< Float_t > &trackPID_TRD, std::vector< Short_t > &trackPID_Reco, std::vector< Int_t > &trackPID_Truth)
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
Float_t * fBuffer_Track_Phi
! array buffer
Long64_t fBuffer_Event_ID
! array buffer
int GetNumberOfClusterConstituents() const
Get the number of cluster constituents.
Float_t fBuffer_Event_Centrality
! array buffer
Int_t fBuffer_Jet_MC_MotherIC
! array buffer
Float_t * fBuffer_Track_ProdVtx_X
! array buffer
Float_t fBuffer_Shape_Mass_NoCorr
! array buffer
Double_t GetSecondOrderSubtracted() const
Bool_t fInitialized
init state of tree
AliMCParticleContainer * AddMCParticleContainer(const char *n)
Create new container for MC particles and attach it to the task.
std::vector< Int_t > GetExtractionJetTypes_PM()
std::vector< Int_t > GetExtractionJetTypes_HM()
Float_t fBuffer_Event_BackgroundDensityMass
! array buffer
void FillBuffer_ImpactParameters(std::vector< Float_t > &trackIP_d0, std::vector< Float_t > &trackIP_z0, std::vector< Float_t > &trackIP_d0cov, std::vector< Float_t > &trackIP_z0cov)
void ConnectParticleContainer(AliParticleContainer *c)
Double_t GetRhoVal(Int_t i=0) const
Double_t GetFirstOrderSubtractedCircularity() const
Float_t * fBuffer_Cluster_Eta
! array buffer
Float_t fBuffer_Shape_NumTracks_DerivCorr
! array buffer
Int_t fBuffer_NumClusters
! array buffer
const char * GetName() const
Float_t fPtHard
!event -hard
Float_t GetJetRadius() const
const std::vector< PWG::JETFW::AliEmcalClusterJetConstituent > & GetClusterConstituents() const
Get container with cluster constituents.
AliEmcalList * fOutput
!output list
Int_t fBuffer_NumSplittings
Float_t fBuffer_JetPt
! array buffer
Float_t fBuffer_Event_Vertex_Y
! array buffer
void FillBuffer_SecVertices(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)
AliTrackContainer * AddTrackContainer(const char *n)
Create new track container and attach it to the task.
Int_t fBuffer_NumTracks
! array buffer
Double_t GetSecondOrderSubtractedCircularity() const
Store some informaion about a Pythia eventThis class is used to store some information about a Pythia...
void SetMakeGeneralHistograms(Bool_t g)
Enable general histograms.
Float_t * fBuffer_Cluster_E
! array buffer
int GetNumberOfParticleConstituents() const
Get the number of particle constituents assigned to the given jet.
void SetNeedEmcalGeom(Bool_t n)
Float_t * fBuffer_Track_ProdVtx_Y
! array buffer
Base task in the EMCAL jet framework.
Float_t fBuffer_Shape_Angularity_DerivCorr_2
! array buffer
Represent a jet reconstructed using the EMCal jet framework.
const AliEmcalPythiaInfo * GetPythiaInfo() const
Bool_t PxPyPz(Double_t p[3]) const
Float_t * fBuffer_Cluster_Pt
! array buffer
Float_t fBuffer_JetEta
! array buffer
Int_t * fBuffer_Cluster_Label
! array buffer
Declaration of class AliEmcalPythiaInfo.
Float_t fBuffer_Shape_TrackPtMean
! array buffer
void UserCreateOutputObjects()
Main initialization function on the worker.
Double_t GetFirstOrderSubtractedSigma2() const
Float_t fBuffer_Event_Vertex_X
! array buffer
AliEmcalJetShapeProperties * GetShapeProperties() const
Int_t GetNAcceptedParticles() const
void ConnectClusterContainer(AliClusterContainer *c)
void SetRandomGenerator(TRandom3 *gen)
void SetMaxTrackPt(Float_t b)
Float_t fBuffer_Shape_Circularity_DerivCorr_2
! array buffer
void SetJetEtaLimits(Float_t min, Float_t max)
Int_t fBuffer_Jet_MC_MotherHadron
! array buffer
Container structure for EMCAL clusters.
Bool_t AddJetToTree(AliEmcalJet *jet, Bool_t saveConstituents, Bool_t saveConstituentsIP, Bool_t saveCaloClusters, Double_t *vertex, Float_t rho, Float_t rhoMass, Float_t centrality, Int_t multiplicity, Long64_t eventID, Float_t magField)
Float_t fBuffer_Jet_MC_MatchedJet_Distance
! array buffer
void ResetCurrentID(Int_t i=-1)
Reset the iterator to a given index.
Float_t fBuffer_Shape_LeSub_NoCorr
! array buffer
Float_t fBuffer_Shape_Angularity_DerivCorr_1
! array buffer
Double_t GetFirstOrderSubtracted() const
Container for jet within the EMCAL jet framework.
Float_t fBuffer_Jet_MC_TruePtFraction
! array buffer
Class managing creation of a tree containing jets.
Float_t fBuffer_Shape_Angularity_NoCorr
! array buffer
Float_t fBuffer_Shape_pTD_DerivCorr_1
! array buffer
TList * OpenFile(const char *fname)
Float_t fBuffer_Event_Vertex_Z
! array buffer
Float_t * fBuffer_Track_Pt
! array buffer
Float_t fBuffer_Event_MagneticField
! array buffer