17 #include <TClonesArray.h>
18 #include <TDatabasePDG.h>
19 #include <TParticlePDG.h>
21 #include <THnSparse.h>
22 #include <TParticle.h>
24 #include <THashList.h>
29 #include "AliEMCALGeometry.h"
63 dphi = TVector2::Phi_mpi_pi(
fMomentum.Phi() - jet.
Phi());;
65 return TMath::Sqrt(dphi*dphi + deta*deta);
76 return GetDistance(jet, deta, dphi);
88 fD.SetPtEtaPhiE(0,0,0,0);
93 fReconstructed = kFALSE;
94 for (
auto &jet : fJets) {
95 jet.second.fMomentum.SetPtEtaPhiE(0,0,0,0);
96 jet.second.fNConstituents = 0;
98 jet.second.fMaxChargedPt = 0;
99 jet.second.fMaxNeutralPt = 0;
106 Printf(
"Printing D Meson Jet object.");
107 Printf(
"D Meson: pT = %.3f, eta = %.3f, phi = %.3f, inv. mass = %.3f", fD.Pt(), fD.Eta(), fD.Phi_0_2pi(), fD.M());
108 Printf(
"Soft pion pT: %.3f. 2-Prong Invariant mass = %.3f", fSoftPionPt, fInvMass2Prong);
109 for (
auto &jet : fJets) {
110 Printf(
"Jet %s: pT = %.3f, eta = %.3f, phi = %.3f", jet.first.c_str(), jet.second.Pt(), jet.second.Eta(), jet.second.Phi_0_2pi());
111 Printf(
"Jet N Consituents = %d", jet.second.fNConstituents);
120 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
121 if (it == fJets.end())
return 0;
125 if ((*it).second.Pt() > 0) {
126 TVector3 dvect = fD.Vect();
127 TVector3 jvect = (*it).second.fMomentum.Vect();
132 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetZ",
"Zero jet momentum!");
136 z = (dvect * jvect) / jetMom;
139 if (z == 1 || (z > 1 && z - 1 < 1e-3)) z = 0.999;
153 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
154 if (it == fJets.end())
return 0;
156 return GetDistance((*it).second, deta, dphi);
167 return GetDistance(n, deta, dphi);
178 dphi = TVector2::Phi_mpi_pi(fD.Phi() - jet.
Phi());;
179 deta = fD.Eta() - jet.
Eta();
180 return TMath::Sqrt(dphi*dphi + deta*deta);
191 return GetDistance(jet, deta, dphi);
200 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
201 if (it == fJets.end()) {
202 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!",
206 return &((*it).second);
215 std::map<std::string, AliJetInfo>::iterator it = fJets.find(n);
216 if (it == fJets.end()) {
217 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!",
221 return &((*it).second);
260 std::map<std::string, AliJetInfo>::const_iterator it = source.
fJets.find(n);
261 if (it == source.
fJets.end())
return;
263 fPt = (*it).second.Pt();
264 fEta = (*it).second.Eta();
265 fPhi = (*it).second.Phi_0_2pi();
304 fPt = source.
fD.Pt();
305 fEta = source.
fD.Eta();
328 fInvMass(source.fD.M())
337 fInvMass = source.
fD.M();
360 f2ProngInvMass(source.fInvMass2Prong),
361 fDeltaInvMass(source.fD.M() - source.fInvMass2Prong)
440 fJetType(source.fJetType),
441 fRadius(source.fRadius),
442 fJetAlgo(source.fJetAlgo),
443 fRecoScheme(source.fRecoScheme),
444 fMinJetPt(source.fMinJetPt),
445 fMaxJetPt(source.fMaxJetPt),
446 fMinJetPhi(source.fMinJetPhi),
447 fMaxJetPhi(source.fMaxJetPhi),
448 fMinJetEta(source.fMinJetEta),
449 fMaxJetEta(source.fMaxJetEta),
450 fMinChargedPt(source.fMinChargedPt),
451 fMaxChargedPt(source.fMaxChargedPt),
452 fMinNeutralPt(source.fMinNeutralPt),
453 fMaxNeutralPt(source.fMaxNeutralPt)
482 if (fMinJetEta < fMaxJetEta && (jet.
Eta() < fMinJetEta || jet.
Eta() > fMaxJetEta))
return kFALSE;
483 if (fMinJetPhi < fMaxJetPhi && (jet.
Phi() < fMinJetPhi || jet.
Phi() > fMaxJetPhi))
return kFALSE;
484 if (jet.
Pt() > fMaxJetPt || jet.
Pt() < fMinJetPt)
return kFALSE;
498 if (!jet)
return kFALSE;
499 return IsJetInAcceptance((*jet));
567 fCurrentDmesonJetInfo(0),
572 fClusterContainer(0),
588 fCandidateType(type),
595 fNMassBins(nMassBins),
607 fCurrentDmesonJetInfo(0),
612 fClusterContainer(0),
625 fCandidateType(source.fCandidateType),
626 fCandidateName(source.fCandidateName),
627 fCandidatePDG(source.fCandidatePDG),
628 fNDaughters(source.fNDaughters),
629 fPDGdaughters(source.fPDGdaughters),
630 fBranchName(source.fBranchName),
631 fMCMode(source.fMCMode),
632 fNMassBins(source.fNMassBins),
633 fMinMass(source.fMinMass),
634 fMaxMass(source.fMaxMass),
636 fRejectedOrigin(source.fRejectedOrigin),
637 fAcceptedDecay(source.fAcceptedDecay),
638 fInhibit(source.fInhibit),
639 fJetDefinitions(source.fJetDefinitions),
640 fPtBinWidth(source.fPtBinWidth),
641 fMaxPt(source.fMaxPt),
644 fCurrentDmesonJetInfo(0),
646 fCandidateArray(source.fCandidateArray),
647 fMCContainer(source.fMCContainer),
648 fTrackContainer(source.fTrackContainer),
649 fClusterContainer(source.fClusterContainer),
677 for (
UInt_t i = 0; i < fJetDefinitions.size(); i++) {
678 if (fJetDefinitions[i].IsJetInAcceptance(dMesonJet, fJetDefinitions[i].GetName()))
return kTRUE;
694 switch (fCandidateType) {
697 fCandidateName =
"D0";
699 fPDGdaughters.Set(fNDaughters);
700 fPDGdaughters.Reset();
701 fPDGdaughters[0] = 211;
702 fPDGdaughters[1] = 321;
703 fBranchName =
"D0toKpi";
707 fRDHFCuts->SetStandardCutsPP2010();
708 fRDHFCuts->SetUsePhysicsSelection(kFALSE);
709 fRDHFCuts->SetTriggerClass(
"",
"");
714 fCandidateName =
"2ProngLikeSign";
716 fPDGdaughters.Set(fNDaughters);
717 fPDGdaughters.Reset();
718 fPDGdaughters[0] = 211;
719 fPDGdaughters[1] = 321;
720 fBranchName =
"LikeSign2Prong";
724 fRDHFCuts->SetStandardCutsPP2010();
725 fRDHFCuts->SetUsePhysicsSelection(kFALSE);
726 fRDHFCuts->SetTriggerClass(
"",
"");
731 fCandidateName =
"DStar";
733 fPDGdaughters.Set(fNDaughters);
734 fPDGdaughters.Reset();
735 fPDGdaughters[0] = 211;
736 fPDGdaughters[1] = 211;
737 fPDGdaughters[2] = 321;
738 fBranchName =
"Dstar";
742 fRDHFCuts->SetStandardCutsPP2010();
743 fRDHFCuts->SetUsePhysicsSelection(kFALSE);
744 fRDHFCuts->SetTriggerClass(
"",
"");
748 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisEngine::SetCandidateProperties",
"Candidate %d unknown!", fCandidateType);
759 if (fRDHFCuts)
delete fRDHFCuts;
769 if (fRDHFCuts)
delete fRDHFCuts;
770 fRDHFCuts =
static_cast<AliRDHFCuts*
>(cuts->Clone());
780 name = TString::Format(
"%s_%s", GetName(), jetDef.
GetName());
792 name = fCandidateName;
795 name +=
"_kBackgroundOnly";
798 name +=
"_kSignalOnly";
818 std::vector<AliHFJetDefinition>::iterator it = FindJetDefinition(def);
820 if (it == fJetDefinitions.end() || *it != def) {
821 fJetDefinitions.push_back(def);
822 ::Info(
"AliAnalysisTaskDmesonJets::AnalysisEngine::AddJetDefinition",
"Jet definition '%s' has been added to analysis engine '%s'."
823 "Total number of jet definitions is now %lu.",
824 def.
GetName(), GetName(), fJetDefinitions.size());
826 if (fMCMode !=
kMCTruth) fJetDefinitions[fJetDefinitions.size()-1].SetChargedPtRange(0., 100.);
829 ::Warning(
"AliAnalysisTaskDmesonJets::AnalysisEngine::AddJetDefinition",
"The same jet definition '%s' was already added in analysis engine '%s'.", def.
GetName(), GetName());
849 return AddJetDefinition(def);
859 std::vector<AliHFJetDefinition>::iterator it = fJetDefinitions.begin();
860 while (it != fJetDefinitions.end() && (*it) != def) it++;
901 return ExtractD0Attributes(Dcand, DmesonJet, i);
904 return ExtractDstarAttributes(static_cast<const AliAODRecoCascadeHF*>(Dcand), DmesonJet, i);
922 if (isSelected == 0)
return kFALSE;
924 Int_t MCtruthPdgCode = 0;
931 Int_t mcLab = Dcand->MatchToMC(fCandidatePDG, fMCContainer->GetArray(), fNDaughters, fPDGdaughters.GetArray());
936 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
940 if (fRejectedOrigin) {
941 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
945 while (rs >>= 1) { p++; }
946 TString hname = TString::Format(
"%s/fHistDmesonOrigin", GetName());
949 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
951 MCtruthPdgCode = aodMcPart->PdgCode();
956 if (isSelected == 1) {
957 if (i > 0)
return kFALSE;
959 if (fMCMode ==
kNoMC ||
960 (MCtruthPdgCode == fCandidatePDG && fMCMode ==
kSignalOnly) ||
970 else if (isSelected == 2) {
971 if (i > 0)
return kFALSE;
973 if (fMCMode ==
kNoMC ||
974 (MCtruthPdgCode == -fCandidatePDG && fMCMode ==
kSignalOnly) ||
984 else if (isSelected == 3) {
988 if ((MCtruthPdgCode == fCandidatePDG && fMCMode ==
kSignalOnly) ||
990 if (i > 0)
return kFALSE;
994 else if ((MCtruthPdgCode == -fCandidatePDG && fMCMode ==
kSignalOnly) ||
996 if (i > 0)
return kFALSE;
1022 DmesonJet.
fD.SetPtEtaPhiM(Dcand->Pt(), Dcand->Eta(), Dcand->Phi(), invMassD);
1037 if (isSelected == 0)
return kFALSE;
1039 if (i > 0)
return kFALSE;
1041 Int_t MCtruthPdgCode = 0;
1046 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
1047 Int_t pdgDgD0toKpi[2] = { 321, 211 };
1049 Int_t mcLab = DstarCand->
MatchToMC(fCandidatePDG, 421, pdgDgDStartoD0pi, pdgDgD0toKpi, fMCContainer->GetArray());
1053 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
1056 if (fRejectedOrigin) {
1057 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
1061 while (rs >>= 1) { p++; }
1062 TString hname = TString::Format(
"%s/fHistDmesonOrigin", GetName());
1065 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
1068 MCtruthPdgCode = aodMcPart->PdgCode();
1074 Int_t absMCtruthPdgCode = TMath::Abs(MCtruthPdgCode);
1075 if (fMCMode ==
kNoMC ||
1076 (absMCtruthPdgCode == 413 && fMCMode ==
kSignalOnly) ||
1082 DmesonJet.
fD.SetPtEtaPhiM(DstarCand->Pt(), DstarCand->Eta(), DstarCand->Phi(), invMassD);
1103 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1105 if (part->GetNDaughters() == 2) {
1107 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1108 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1114 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1115 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1117 if (absPdgPart == 421) {
1118 if ((absPdg1 == 211 && absPdg2 == 321) ||
1119 (absPdg1 == 321 && absPdg2 == 211)) {
1124 if (absPdgPart == 413) {
1125 if (absPdg1 == 421 && absPdg2 == 211) {
1126 Int_t D0decay = CheckDecayChannel(d1, mcArray);
1131 else if (absPdg1 == 211 && absPdg2 == 421) {
1132 Int_t D0decay = CheckDecayChannel(d2, mcArray);
1156 Int_t mother = part->GetMother();
1157 while (mother >= 0) {
1158 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1160 Int_t abspdgGranma = TMath::Abs(mcGranma->GetPdgCode());
1162 if (abspdgGranma == 1)
return kFromDown;
1163 if (abspdgGranma == 2)
return kFromUp;
1167 if (abspdgGranma == 6)
return kFromTop;
1169 mother = mcGranma->GetMother();
1172 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisParams::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1183 fDmesonJets.clear();
1185 for (
auto& jetDef : fJetDefinitions) {
1186 jetDef.fJets.clear();
1190 RunParticleLevelAnalysis();
1193 RunDetectorLevelAnalysis();
1209 fTrackContainer->SetDMesonCandidate(0);
1210 AddInputVectors(fTrackContainer, 100);
1214 AddInputVectors(fClusterContainer, -100);
1222 for (
UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1229 for (
UInt_t ic = 0; ic < constituents.size(); ++ic) {
1230 if (constituents[ic].user_index() >= 100) {
1231 if (constituents[ic].pt() > maxChPt) maxChPt = constituents[ic].pt();
1233 else if (constituents[ic].user_index() <= -100) {
1234 totalNeutralPt += constituents[ic].pt();
1235 if (constituents[ic].pt() > maxNePt) maxChPt = constituents[ic].pt();
1239 jetDef.
fJets.push_back(
1240 AliJetInfo(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E(),
1241 constituents.size(), totalNeutralPt / jets_incl[ijet].pt(), maxChPt, maxNePt)
1255 if (jetDef.
fJets.size() == 0) FindJets(jetDef);
1267 for (
auto& jet : jetDef.
fJets) {
1270 if (d > dMax)
continue;
1271 if (d < d_closest) {
1277 if (jet_closest && applyKinCuts) {
1282 AliDebug(2, Form(
"Found closest jet (pt=%.3f, eta=%.3f, phi=%.3f) to d meson (pt=%.3f, eta=%.3f, phi=%.3f) with d = %.3f",
1294 const Int_t nD = fCandidateArray->GetEntriesFast();
1298 Int_t nAccCharm = 0;
1299 for (
Int_t icharm = 0; icharm < nD; icharm++) {
1301 if (!charmCand)
continue;
1304 if (!fRDHFCuts->IsInFiducialAcceptance(charmCand->Pt(), charmCand->Y(fCandidatePDG)))
continue;
1306 for (
Int_t im = 0; im < 2; im++) {
1309 if (ExtractRecoDecayAttributes(charmCand, DmesonJet, im)) {
1310 for (std::vector<AliHFJetDefinition>::iterator itdef = fJetDefinitions.begin(); itdef != fJetDefinitions.end(); itdef++) {
1311 if (!FindJet(charmCand, DmesonJet, *itdef)) {
1312 AliWarning(Form(
"Could not find jet '%s' for D meson '%s': pT = %.3f, eta = %.3f, phi = %.3f",
1313 (*itdef).GetName(), GetName(), DmesonJet.
fD.Pt(), DmesonJet.
fD.Eta(), DmesonJet.
fD.
Phi_0_2pi()));
1316 fDmesonJets[icharm] = DmesonJet;
1324 hname = TString::Format(
"%s/fHistNAcceptedDmesons", GetName());
1327 hname = TString::Format(
"%s/fHistNDmesons", GetName());
1352 fTrackContainer->SetDMesonCandidate(Dcand);
1353 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", GetName(), jetDef.
GetName());
1356 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", GetName(), jetDef.
GetName());
1358 const TObjArray& daughters = fTrackContainer->GetDaughterList();
1359 for (
Int_t i = 0; i < daughters.GetEntriesFast(); i++) {
1360 AliVParticle* daughter =
static_cast<AliVParticle*
>(daughters.At(i));
1361 if (!fTrackContainer->GetArray()->FindObject(daughter)) histDaughterNotInJet->Fill(daughter->Pt());
1366 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", GetName(), jetDef.
GetName());
1375 for (
UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1378 Bool_t isDmesonJet = kFALSE;
1384 for (
UInt_t ic = 0; ic < constituents.size(); ++ic) {
1385 if (constituents[ic].user_index() == 0) {
1386 isDmesonJet = kTRUE;
1388 else if (constituents[ic].user_index() >= 100) {
1389 if (constituents[ic].pt() > maxChPt) maxChPt = constituents[ic].pt();
1391 else if (constituents[ic].user_index() <= -100) {
1392 totalNeutralPt += constituents[ic].pt();
1393 if (constituents[ic].pt() > maxNePt) maxChPt = constituents[ic].pt();
1398 DmesonJet.
fJets[jetDef.
GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1399 DmesonJet.
fJets[jetDef.
GetName()].fNConstituents = constituents.size();
1400 DmesonJet.
fJets[jetDef.
GetName()].fMaxChargedPt = maxChPt;
1401 DmesonJet.
fJets[jetDef.
GetName()].fMaxNeutralPt = maxNePt;
1402 DmesonJet.
fJets[jetDef.
GetName()].fNEF = totalNeutralPt / jets_incl[ijet].pt();
1416 AliEmcalIterableMomentumContainer itcont = cont->all_momentum();
1417 for (AliEmcalIterableMomentumContainer::iterator it = itcont.begin(); it != itcont.end(); it++) {
1418 UInt_t rejectionReason = 0;
1419 if (!cont->AcceptObject(it.current_index(), rejectionReason)) {
1420 if (rejectHist) rejectHist->Fill(AliEmcalContainer::GetRejectionReasonBitPosition(rejectionReason), it->first.Pt());
1423 Int_t uid = offset >= 0 ? it.current_index() + offset: -it.current_index() - offset;
1433 fMCContainer->SetSpecialPDG(fCandidatePDG);
1434 fMCContainer->SetRejectedOriginMap(fRejectedOrigin);
1435 fMCContainer->SetAcceptedDecayMap(fAcceptedDecay);
1437 if (!fMCContainer->IsSpecialPDGFound())
return;
1439 for (
auto &jetDef : fJetDefinitions) {
1440 switch (jetDef.fJetType) {
1442 fMCContainer->SetCharge(AliParticleContainer::EChargeCut_t::kNoChargeCut);
1445 fMCContainer->SetCharge(AliParticleContainer::EChargeCut_t::kCharged);
1448 fMCContainer->SetCharge(AliParticleContainer::EChargeCut_t::kNeutral);
1457 hname = TString::Format(
"%s/fHistDmesonOrigin", GetName());
1459 hname = TString::Format(
"%s/%s/fHistMCParticleRejectionReason", GetName(), jetDef.GetName());
1461 fMCContainer->SetHistOrigin(0);
1467 for (
UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1470 Bool_t isDmesonJet = kFALSE;
1472 for (
UInt_t ic = 0; ic < constituents.size(); ++ic) {
1473 Int_t iPart = constituents[ic].user_index() - 100;
1474 AliVParticle* part = fMCContainer->GetParticle(iPart);
1476 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisEngine::RunParticleLevelAnalysis",
"Could not find jet constituent %d!", iPart);
1479 if (TMath::Abs(part->PdgCode()) == fCandidatePDG) {
1480 std::map<int, AliDmesonJetInfo>::iterator dMesonJetIt = fDmesonJets.find(iPart);
1481 if (dMesonJetIt == fDmesonJets.end()) {
1482 std::pair<int, AliDmesonJetInfo> element;
1483 element.first = iPart;
1485 dMesonJetIt = fDmesonJets.insert(element).first;
1486 (*dMesonJetIt).second.fD.SetPxPyPzE(part->Px(), part->Py(), part->Pz(), part->E());
1487 (*dMesonJetIt).second.fDmesonParticle = part;
1490 (*dMesonJetIt).second.fJets[jetDef.GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1491 (*dMesonJetIt).second.fJets[jetDef.GetName()].fNConstituents = constituents.size();
1504 switch (fCandidateType) {
1507 classname =
"AliAnalysisTaskDmesonJets::AliD0InfoSummary";
1511 classname =
"AliAnalysisTaskDmesonJets::AliDStarInfoSummary";
1515 TString treeName = TString::Format(
"%s_%s", taskName, GetName());
1516 fTree =
new TTree(treeName, treeName);
1517 fTree->Branch(
"DmesonJet", classname, &fCurrentDmesonJetInfo);
1519 for (
Int_t i = 0; i < fJetDefinitions.size(); i++) {
1521 fTree->Branch(fJetDefinitions[i].GetName(),
"AliAnalysisTaskDmesonJets::AliJetInfoSummary", &fCurrentJetInfo[i]);
1536 for (
auto &jetDef : fJetDefinitions) {
1538 AliDebug(2,Form(
"Now working on '%s'", jetDef.GetName()));
1548 title[dim] =
"#it{p}_{T,D} (GeV/#it{c})";
1555 title[dim] =
"#eta_{D}";
1561 title[dim] =
"#phi_{D} (rad)";
1564 max[dim] = TMath::TwoPi();
1569 title[dim] =
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})";
1570 nbins[dim] = fNMassBins;
1571 min[dim] = fMinMass;
1572 max[dim] = fMaxMass;
1577 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1578 nbins[dim] = fNMassBins;
1579 min[dim] = fMinMass;
1580 max[dim] = fMaxMass;
1585 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1586 nbins[dim] = fNMassBins;
1592 title[dim] =
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})";
1593 nbins[dim] = fNMassBins*6;
1597 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1605 title[dim] =
"#it{p}_{T,#pi} (GeV/#it{c})";
1612 title[dim] =
"#it{z}_{D}";
1618 if ((enabledAxis &
kDeltaR) != 0) {
1619 title[dim] =
"#Delta R_{D-jet}";
1622 max[dim] = radius * 1.5;
1627 title[dim] =
"#eta_{D} - #eta_{jet}";
1629 min[dim] = -radius * 1.2;
1630 max[dim] = radius * 1.2;
1635 title[dim] =
"#phi_{D} - #phi_{jet} (rad)";
1637 min[dim] = -radius * 1.2;
1638 max[dim] = radius * 1.2;
1642 title[dim] =
"#it{p}_{T,jet} (GeV/#it{c})";
1649 title[dim] =
"#eta_{jet}";
1655 title[dim] =
"#phi_{jet} (rad)";
1658 max[dim] = TMath::TwoPi();
1663 title[dim] =
"No. of constituents";
1670 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef.GetName());
1672 for (
Int_t j = 0; j < dim; j++) {
1673 h->GetAxis(j)->SetTitle(title[j]);
1685 for (
auto& dmeson_pair : fDmesonJets) {
1686 fCurrentDmesonJetInfo->Set(dmeson_pair.second);
1688 for (
UInt_t ij = 0; ij < fJetDefinitions.size(); ij++) {
1689 fCurrentJetInfo[ij]->Reset();
1690 AliJetInfo* jet = dmeson_pair.second.GetJet(fJetDefinitions[ij].GetName());
1692 if (applyKinCuts && !fJetDefinitions[ij].IsJetInAcceptance(*jet)) {
1693 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), fJetDefinitions[ij].GetName());
1695 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), fJetDefinitions[ij].GetName());
1697 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), fJetDefinitions[ij].GetName());
1701 fCurrentJetInfo[ij]->Set(dmeson_pair.second, fJetDefinitions[ij].GetName());
1708 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1710 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1712 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1715 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", GetName());
1719 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", GetName());
1722 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", GetName());
1723 fHistManager->
FillTH1(hname, dmeson_pair.second.fD.M() - dmeson_pair.second.fInvMass2Prong);
1738 for (
auto& dmeson_pair : fDmesonJets) {
1740 for (
UInt_t ij = 0; ij < fJetDefinitions.size(); ij++) {
1741 AliJetInfo* jet = dmeson_pair.second.GetJet(fJetDefinitions[ij].GetName());
1743 if (applyKinCuts && !fJetDefinitions[ij].IsJetInAcceptance(*jet)) {
1744 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), fJetDefinitions[ij].GetName());
1746 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), fJetDefinitions[ij].GetName());
1748 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), fJetDefinitions[ij].GetName());
1755 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1757 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1759 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1762 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", GetName());
1766 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", GetName());
1769 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", GetName());
1770 fHistManager->
FillTH1(hname, dmeson_pair.second.fD.M() - dmeson_pair.second.fInvMass2Prong);
1784 for (
auto& dmeson_pair : fDmesonJets) {
1785 if (!IsAnyJetInAcceptance(dmeson_pair.second)) {
1786 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1788 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1790 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1795 for (
auto &jetDef : fJetDefinitions) {
1797 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef.GetName());
1800 for (
auto& dmeson_pair : fDmesonJets) {
1801 const AliJetInfo* jet = dmeson_pair.second.GetJet(jetDef.GetName());
1803 if (!jetDef.IsJetInAcceptance(*jet)) {
1804 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), jetDef.GetName());
1806 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), jetDef.GetName());
1808 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), jetDef.GetName());
1812 FillHnSparse(h, dmeson_pair.second, jetDef.GetName());
1835 std::map<std::string, AliJetInfo>::const_iterator it = DmesonJet.
fJets.find(n);
1836 if (it == DmesonJet.
fJets.end())
return kFALSE;
1838 for (
Int_t i = 0; i < h->GetNdimensions(); i++) {
1840 if (
title==
"#it{p}_{T,D} (GeV/#it{c})") contents[i] = DmesonJet.
fD.Pt();
1841 else if (
title==
"#eta_{D}") contents[i] = DmesonJet.
fD.Eta();
1844 else if (
title==
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M();
1845 else if (
title==
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M() - DmesonJet.
fInvMass2Prong;
1846 else if (
title==
"#it{p}_{T,#pi} (GeV/#it{c})") contents[i] = DmesonJet.
fSoftPionPt;
1847 else if (
title==
"#it{z}_{D}") contents[i] = z;
1848 else if (
title==
"#Delta R_{D-jet}") contents[i] = deltaR;
1849 else if (
title==
"#eta_{D} - #eta_{jet}") contents[i] = deltaEta;
1850 else if (
title==
"#phi_{D} - #phi_{jet} (rad)") contents[i] = deltaPhi;
1851 else if (
title==
"#it{p}_{T,jet} (GeV/#it{c})") contents[i] = (*it).second.Pt();
1852 else if (
title==
"#eta_{jet}") contents[i] = (*it).second.Eta();
1853 else if (
title==
"#phi_{jet} (rad)") contents[i] = (*it).second.Phi_0_2pi();
1854 else if (
title==
"No. of constituents") contents[i] = (*it).second.fNConstituents;
1855 else AliWarning(Form(
"Unable to fill dimension '%s'!",
title.Data()));
1890 fEnabledAxis(k2ProngInvMass),
1891 fOutputType(kTreeOutput),
1893 fApplyKinematicCuts(kTRUE),
1894 fNOutputTrees(nOutputTrees),
1899 for (
Int_t i = 0; i < nOutputTrees; i++){
1900 DefineOutput(2+i, TTree::Class());
1919 TFile* filecuts = TFile::Open(cutfname);
1920 if (!filecuts || filecuts->IsZombie()) {
1921 ::Warning(
"AddTaskDmesonJets",
"Input file not found: will use std cuts.");
1926 analysiscuts =
dynamic_cast<AliRDHFCuts*
>(filecuts->Get(cutsname));
1927 if (!analysiscuts) {
1928 ::Warning(
"AddTaskDmesonJetCorr",
"Could not find analysis cuts '%s' in '%s'. Using std cuts.", cutsname.Data(), cutfname.Data());
1932 return analysiscuts;
1961 if (!cutfname.IsNull()) {
1967 cutsname =
"D0toKpiCuts";
1970 cutsname =
"DStartoKpipiCuts";
1986 ::Info(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"A new analysis engine '%s' has been added. The total number of analysis engines is %lu.", eng.
GetName(),
fAnalysisEngines.size());
1990 ::Info(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"An analysis engine '%s' with %lu jet definitions has been found. The total number of analysis engines is %lu. A new jet definition '%s' is being added.", found_eng->
GetName(), found_eng->
fJetDefinitions.size(),
fAnalysisEngines.size(), jetDef.
GetName());
1993 if (cuts && found_eng->
fRDHFCuts != 0) {
1994 ::Warning(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"D meson cuts were already defined for this D meson type. They will be overwritten.");
2012 ::Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
2024 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for task '%s' (%lu analysis engines)", GetName(),
fAnalysisEngines.size());
2026 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for analysis engine '%s' (%lu jet definitions)", param.GetName(), param.fJetDefinitions.size());
2032 hname = TString::Format(
"%s/fHistNAcceptedDmesons", param.GetName());
2033 htitle = hname +
";Number of D accepted meson candidates;counts";
2036 hname = TString::Format(
"%s/fHistNDmesons", param.GetName());
2037 htitle = hname +
";Number of D meson candidates;counts";
2040 hname = TString::Format(
"%s/fHistNEvents", param.GetName());
2041 htitle = hname +
";Event status;counts";
2043 h->GetXaxis()->SetBinLabel(1,
"Accepted");
2044 h->GetXaxis()->SetBinLabel(2,
"Rejected");
2046 hname = TString::Format(
"%s/fHistEventRejectionReasons", param.GetName());
2047 htitle = hname +
";Rejection reason;counts";
2050 hname = TString::Format(
"%s/fHistRejectedDMesonPt", param.GetName());
2051 htitle = hname +
";#it{p}_{T,D} (GeV/#it{c});counts";
2054 hname = TString::Format(
"%s/fHistRejectedDMesonEta", param.GetName());
2055 htitle = hname +
";#it{#eta}_{D};counts";
2058 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", param.GetName());
2059 htitle = hname +
";#it{#phi}_{D};counts";
2063 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", param.GetName());
2064 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
2071 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", param.GetName());
2072 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
2076 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2077 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", param.GetName());
2078 htitle = hname +
";#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2});counts";
2084 hname = TString::Format(
"%s/fHistDmesonOrigin", param.GetName());
2085 htitle = hname +
";origin;counts";
2089 for (std::vector<AliHFJetDefinition>::iterator itdef = param.fJetDefinitions.begin(); itdef != param.fJetDefinitions.end(); itdef++) {
2091 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for jet definition '%s'", jetDef->
GetName());
2095 hname = TString::Format(
"%s/%s/fHistMCParticleRejectionReason", param.GetName(), jetDef->
GetName());
2096 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
2100 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", param.GetName(), jetDef->
GetName());
2101 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
2105 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", param.GetName(), jetDef->
GetName());
2106 htitle = hname +
";Cluster rejection reason;#it{p}_{T,cluster} (GeV/#it{c});counts";
2110 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", param.GetName(), jetDef->
GetName());
2111 htitle = hname +
";#it{p}_{T,track} (GeV/#it{c});counts";
2114 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", param.GetName(), jetDef->
GetName());
2115 htitle = hname +
";#it{p}_{T,jet} (GeV/#it{c});counts";
2118 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", param.GetName(), jetDef->
GetName());
2119 htitle = hname +
";#it{#eta}_{jet};counts";
2122 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", param.GetName(), jetDef->
GetName());
2123 htitle = hname +
";#it{#phi}_{jet};counts";
2128 param.BuildTree(GetName());
2130 param.AssignDataSlot(treeSlot+2);
2135 AliError(Form(
"Number of data output slots %d not sufficient. Tree of analysis engine %s will not be posted!",
fNOutputTrees, param.GetName()));
2166 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
2177 params.fCandidateArray =
dynamic_cast<TClonesArray*
>(
fAodEvent->GetList()->FindObject(params.fBranchName.Data()));
2179 if (params.fCandidateArray) {
2182 className =
"AliAODRecoDecayHF2Prong";
2185 className =
"AliAODRecoCascadeHF";
2187 if (!params.fCandidateArray->GetClass()->InheritsFrom(className)) {
2188 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2189 "%s: Objects of type %s in %s are not inherited from %s! Task will be disabled!",
2190 GetName(), params.fCandidateArray->GetClass()->GetName(), params.fCandidateArray->GetName(), className.Data());
2191 params.fCandidateArray = 0;
2192 params.fInhibit = kTRUE;
2196 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2197 "Could not find candidate array '%s', skipping the event. Analysis engine '%s' will be disabled!",
2198 params.fBranchName.Data(), params.GetName());
2199 params.fInhibit = kTRUE;
2203 if (params.fMCMode !=
kNoMC) {
2208 if (!params.fMCContainer) {
2209 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2210 "No MC particle container was provided. Analysis engine '%s' will be disabled!",
2212 params.fInhibit = kTRUE;
2222 if (!params.fTrackContainer && !params.fClusterContainer) {
2223 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2224 "No track container and no cluster container were provided. Analysis engine '%s' will be disabled!",
2226 params.fInhibit = kTRUE;
2244 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001) {
2246 if (eng.fInhibit)
continue;
2247 hname = TString::Format(
"%s/fHistEventRejectionReasons", eng.GetName());
2255 if (eng.fInhibit)
continue;
2258 hname = TString::Format(
"%s/fHistNEvents", eng.GetName());
2260 if (!iseventselected) {
2262 hname = TString::Format(
"%s/fHistEventRejectionReasons", eng.GetName());
2263 UInt_t bitmap = eng.fRDHFCuts->GetEventRejectionBitMap();
2267 if (label.IsNull())
break;
2276 AliDebug(2,
"Event selected");
2291 if (param.fInhibit)
continue;
2313 TParticlePDG* part = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg));
2318 if (nbins % 2 == 0) {
2319 minMass = mass - range / 2 - range / nbins / 2;
2320 maxMass = mass + range / 2 - range / nbins / 2;
2323 minMass = mass - range / 2;
2324 maxMass = mass + range / 2;
2339 label =
"NotSelTrigger";
2341 return label.Data();
2346 return label.Data();
2349 label =
"TooFewVtxContrib";
2351 return label.Data();
2354 label =
"ZVtxOutFid";
2356 return label.Data();
2361 return label.Data();
2364 label =
"OutsideCentrality";
2366 return label.Data();
2369 label =
"PhysicsSelection";
2371 return label.Data();
2374 label =
"BadSPDVertex";
2376 return label.Data();
2379 label =
"ZVtxSPDOutFid";
2381 return label.Data();
2384 label =
"CentralityFlattening";
2386 return label.Data();
2389 label =
"BadTrackV0Correl";
2391 return label.Data();
2394 return label.Data();
void SetRejectionReasonLabels(TAxis *axis)
void Print() const
Prints the content of this object in the standard output.
void UserCreateOutputObjects()
std::list< AnalysisEngine > fAnalysisEngines
Array of analysis parameters.
Bool_t FillTree(Bool_t applyKinCuts)
AliEMCALGeometry * fGeom
!emcal geometry
Analysis task for D meson jets.
virtual void Set(const AliDmesonJetInfo &source)
Invariant mass of the D0 meson candidate in GeV/c2.
virtual void Reset()
Reset the object.
TList * fOutput
!output list
Bool_t IsJetInAcceptance(const AliJetInfo &jet) const
Double_t fSoftPionPt
! Transverse momentum of the soft pion of the D* candidate
AliRDHFCuts * fRDHFCuts
D meson candidates cuts.
void RunAnalysis()
Run the analysis.
Lightweight class that encapsulates D meson jets.
Bool_t FillHnSparse(Bool_t applyKinCuts)
Int_t MatchToMC(Int_t pdgabs, Int_t pdgabs2prong, Int_t *pdgDg, Int_t *pdgDg2prong, TClonesArray *mcArray, Bool_t isV0=kFALSE) const
ERecoScheme_t fRecoScheme
Jet recombination scheme (pt scheme, E scheme, ...)
void SetRDHFCuts(AliRDHFCuts *cuts)
Double_t fMaxNeutralPt
Transverse momentum of the leading neutral particle (or cluster)
void RunDetectorLevelAnalysis()
Run a detector level analysis.
jet_distance_pair FindJetMacthedToGeneratedDMeson(const AliDmesonJetInfo &dmeson, AliHFJetDefinition &jetDef, Double_t dMax, Bool_t applyKinCuts)
virtual void UserCreateOutputObjects()
Creates the output containers.
Lightweight class that encapsulates D meson jets.
Double_t fInvMass2Prong
! 2-prong mass of the D* candidate (w/o the soft pion)
static void CalculateMassLimits(Double_t range, Int_t pdg, Int_t nbins, Double_t &minMass, Double_t &maxMass)
AliAODEvent * fAodEvent
! AOD event
virtual void Reset()
Reset the object.
Bool_t FindJet(AliAODRecoDecayHF2Prong *Dcand, AliDmesonJetInfo &DmesonJet, AliHFJetDefinition &jetDef)
UInt_t fEnabledAxis
Use bit defined in EAxis_t to enable axis in the THnSparse.
EMCMode_t fMCMode
MC mode: No MC (data and MC detector level), background-only (MC), signal-only (MC), MC truth (particle level)
Double_t InvMassD0() const
void BuildHnSparse(UInt_t enabledAxis)
void SetRecombScheme(const fastjet::RecombinationScheme &scheme)
const char * GetName() const
AnalysisEngine()
This is the default constructor, used for ROOT I/O purposes.
void Init(const AliEMCALGeometry *const geom, Int_t runNumber)
Initialize the analysis engine.
static FJRecoScheme ConvertToFJRecoScheme(ERecoScheme_t reco)
AliVParticle * fDmesonParticle
! pointer to the particle object
static TString GenerateJetName(EJetType_t jetType, EJetAlgo_t jetAlgo, ERecoScheme_t recoScheme, Double_t radius, AliParticleContainer *partCont, AliClusterContainer *clusCont, TString tag)
Select tracks based on specific prescriptions of HF analysis.
ECandidateType_t fCandidateType
Candidate type.
Double_t GetDistance(std::string n, Double_t &deta, Double_t &dphi) const
Int_t fMCLabel
! MC label, i.e. index of the generator level D meson (only for detector level D meson candidates) ...
THashList * CreateHistoGroup(const char *groupname, const char *parent="/")
virtual void Set(const AliDmesonJetInfo &source)
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
EJetType_t fJetType
Jet type (charged, full, neutral)
std::pair< AliJetInfo *, Double_t > jet_distance_pair
TH2 * CreateTH2(const char *name, const char *title, int nbinsx, double xmin, double xmax, int nbinsy, double ymin, double ymax, Option_t *opt="")
virtual void Set(const AliDmesonJetInfo &source)
AliTLorentzVector fD
! 4-momentum of the D meson candidate
Double_t GetDistance(const AliJetInfo &jet, Double_t &deta, Double_t &dphi) const
TObject * FindObject(const char *name) const
THashList * GetListOfHistograms() const
AliAnalysisTaskDmesonJets()
This is the default constructor, used for ROOT I/O purposes.
virtual void Reset()
Reset the current object.
AnalysisEngine & operator=(const AnalysisEngine &source)
Struct that encapsulates analysis parameters.
std::vector< AliHFJetDefinition >::iterator FindJetDefinition(const AliHFJetDefinition &eng)
Base task in the EMCAL framework (lighter version of AliAnalysisTaskEmcal)
Double_t Phi_0_2pi() const
Int_t GetDataSlotNumber() const
Double_t fRadius
Jet radius.
void SetAlgorithm(const fastjet::JetAlgorithm &algor)
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
AliClusterContainer * GetClusterContainer(Int_t i=0) const
AliAODTrack * GetBachelor() const
AliRDHFCuts * LoadDMesonCutsFromFile(TString cutfname, TString cutsname)
bool operator<(const AliAnalysisTaskDmesonJets::AliHFJetDefinition &lhs, const AliAnalysisTaskDmesonJets::AliHFJetDefinition &rhs)
std::list< AnalysisEngine >::iterator FindAnalysisEngine(const AnalysisEngine &eng)
std::vector< AliHFJetDefinition > fJetDefinitions
Jet definitions.
Double_t InvMassD0bar() const
EJetAlgo_t fJetAlgo
Jet algorithm (kt, anti-kt,...)
Double_t GetZ(std::string n) const
static const char * GetHFEventRejectionReasonLabel(UInt_t &bitmap)
Lightweight class that encapsulates D*.
virtual void Clear(const Option_t *="")
virtual void Reset()
Reset the object.
Bool_t ExtractDstarAttributes(const AliAODRecoCascadeHF *DstarCand, AliDmesonJetInfo &DmesonJet, UInt_t i)
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
const AliJetInfo * GetJet(std::string n) const
virtual ~AliAnalysisTaskDmesonJets()
This is the standard destructor.
void SetCandidateProperties(Double_t range)
Bool_t ExtractD0Attributes(const AliAODRecoDecayHF2Prong *Dcand, AliDmesonJetInfo &DmesonJet, UInt_t i)
std::vector< AliJetInfo > fJets
! Inclusive jets reconstructed in the current event (includes D meson candidate daughters, if any)
Double_t Phi_0_2pi() const
Select MC particles based on specific prescriptions of HF analysis.
static EMesonDecayChannel_t CheckDecayChannel(const AliAODMCParticle *part, TClonesArray *mcArray)
void SetGhostArea(Double_t gharea)
Double_t fMaxChargedPt
Transverse momentum of the leading charged particle (or track)
std::vector< fastjet::PseudoJet > GetJetConstituents(UInt_t idx) const
static FJJetAlgo ConvertToFJAlgo(EJetAlgo_t algo)
void AdoptRDHFCuts(AliRDHFCuts *cuts)
Class that encapsulates jets.
std::map< std::string, AliJetInfo > fJets
! list of jets
void AddInputVectors(AliEmcalContainer *cont, Int_t offset, TH2 *rejectHist=0)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliParticleContainer * GetParticleContainer(Int_t i=0) const
virtual ~AnalysisEngine()
void RunParticleLevelAnalysis()
Run a particle level analysis.
void FindJets(AliHFJetDefinition &jetDef)
Bool_t fApplyKinematicCuts
Apply jet kinematic cuts.
const char * GetName() const
Generate a name for this jet definition.
Bool_t ExtractRecoDecayAttributes(const AliAODRecoDecayHF2Prong *Dcand, AliDmesonJetInfo &DmesonJet, UInt_t i)
Double_t InvMassD0() const
EOutputType_t fOutputType
Output type: none, TTree or THnSparse.
virtual void AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
bool operator==(const AliAnalysisTaskDmesonJets::AliHFJetDefinition &lhs, const AliAnalysisTaskDmesonJets::AliHFJetDefinition &rhs)
Double_t InvMassDstarKpipi() const
AnalysisEngine * AddAnalysisEngine(ECandidateType_t type, EMCMode_t bkgMode, EJetType_t jettype, Double_t jetradius, TString cutfname="")
Int_t fNOutputTrees
Maximum number of output trees.
virtual Bool_t FillHistograms()
AliHFJetDefinition()
This is the default constructor, used for ROOT I/O purposes.
AliHFJetDefinition & operator=(const AliHFJetDefinition &source)
void SetAreaType(const fastjet::AreaType &atype)
AliTLorentzVector fMomentum
4-momentum of the jet
THnSparse * CreateTHnSparse(const char *name, const char *title, int ndim, const int *nbins, const double *min, const double *max, Option_t *opt="")
AliHFJetDefinition * AddJetDefinition(EJetType_t type, Double_t r, EJetAlgo_t algo, ERecoScheme_t reco)
Lightweight class that encapsulates D0.
void SetMakeGeneralHistograms(Bool_t g)
Bool_t IsAnyJetInAcceptance(const AliDmesonJetInfo &dMesonJet) const
Container for jet within the EMCAL jet framework.
Int_t PostDataFromAnalysisEngine(const AnalysisEngine &eng)
static EMesonOrigin_t CheckOrigin(const AliAODMCParticle *part, TClonesArray *mcArray)
AliFJWrapper * fFastJetWrapper
! Fastjet wrapper
THistManager fHistManager
Histogram manager.
void Reset()
Reset all fields to their default values.
TTree * BuildTree(const char *taskName)
virtual void Set(const AliDmesonJetInfo &source, std::string n)
Bool_t FillQA(Bool_t applyKinCuts)