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"
64 fD.SetPtEtaPhiE(0,0,0,0);
70 for (
auto &jet :
fJets) {
71 jet.second.fMomentum.SetPtEtaPhiE(0,0,0,0);
72 jet.second.fNConstituents = 0;
74 jet.second.fMaxChargedPt = 0;
75 jet.second.fMaxNeutralPt = 0;
82 Printf(
"Printing D Meson Jet object.");
83 Printf(
"D Meson: pT = %.3f, eta = %.3f, phi = %.3f, inv. mass = %.3f", fD.Pt(), fD.Eta(), fD.Phi_0_2pi(), fD.M());
84 Printf(
"Soft pion pT: %.3f. 2-Prong Invariant mass = %.3f", fSoftPionPt, fInvMass2Prong);
85 for (
auto &jet : fJets) {
86 Printf(
"Jet %s: pT = %.3f, eta = %.3f, phi = %.3f", jet.first.c_str(), jet.second.Pt(), jet.second.Eta(), jet.second.Phi_0_2pi());
87 Printf(
"Jet N Consituents = %d", jet.second.fNConstituents);
96 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
97 if (it == fJets.end())
return 0;
101 if ((*it).second.Pt() > 0) {
102 TVector3 dvect = fD.Vect();
103 TVector3 jvect = (*it).second.fMomentum.Vect();
105 Double_t jetMom = jvect * jvect;
108 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetZ",
"Zero jet momentum!");
112 z = (dvect * jvect) / jetMom;
115 if (z == 1 || (z > 1 && z - 1 < 1e-3)) z = 0.999;
128 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
129 if (it == fJets.end())
return 0;
131 dphi = TVector2::Phi_mpi_pi(fD.Phi() - (*it).second.Phi());;
132 deta = fD.Eta() - (*it).second.Eta();
133 return TMath::Sqrt(dphi*dphi + deta*deta);
143 return GetDistance(n, deta, dphi);
152 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
153 if (it == fJets.end()) {
154 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!",
158 return &((*it).second);
167 std::map<std::string, AliJetInfo>::iterator it = fJets.find(n);
168 if (it == fJets.end()) {
169 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!",
173 return &((*it).second);
212 std::map<std::string, AliJetInfo>::const_iterator it = source.
fJets.find(n);
213 if (it == source.
fJets.end())
return;
215 fPt = (*it).second.Pt();
216 fEta = (*it).second.Eta();
217 fPhi = (*it).second.Phi_0_2pi();
244 fPt = source.
fD.Pt();
245 fEta = source.
fD.Eta();
268 fInvMass(source.fD.M())
277 fInvMass = source.
fD.M();
300 f2ProngInvMass(source.fInvMass2Prong),
301 fDeltaInvMass(source.fD.M() - source.fInvMass2Prong)
392 fJetType(source.fJetType),
393 fRadius(source.fRadius),
394 fJetAlgo(source.fJetAlgo),
395 fRecoScheme(source.fRecoScheme),
396 fAcceptance(source.fAcceptance),
397 fMinJetPt(source.fMinJetPt),
398 fMaxJetPt(source.fMaxJetPt),
399 fMinJetPhi(source.fMinJetPhi),
400 fMaxJetPhi(source.fMaxJetPhi),
401 fMinJetEta(source.fMinJetEta),
402 fMaxJetEta(source.fMaxJetEta),
403 fMinChargedPt(source.fMinChargedPt),
404 fMaxChargedPt(source.fMaxChargedPt),
405 fMinNeutralPt(source.fMinNeutralPt),
406 fMaxNeutralPt(source.fMaxNeutralPt)
435 if (fMinJetEta < fMaxJetEta && (jet.
Eta() < fMinJetEta || jet.
Eta() > fMaxJetEta))
return kFALSE;
436 if (fMinJetPhi < fMaxJetPhi && (jet.
Phi() < fMinJetPhi || jet.
Phi() > fMaxJetPhi))
return kFALSE;
437 if (jet.
Pt() > fMaxJetPt || jet.
Pt() < fMinJetPt)
return kFALSE;
451 if (!jet)
return kFALSE;
452 return IsJetInAcceptance((*jet));
462 switch (fAcceptance) {
468 SetJetEtaRange(-0.9 + r, 0.9 - r);
469 SetJetPhiRange(0, 0);
478 SetJetEtaRange(geom->GetArm1EtaMin() + r, geom->GetArm1EtaMax() - r);
480 if(run>=177295 && run<=197470) {
481 SetJetPhiRange(1.405 + r,3.135 - r);
484 SetJetPhiRange(geom->GetArm1PhiMin() * TMath::DegToRad() + r, geom->GetEMCALPhiMax() * TMath::DegToRad() - r);
488 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for EMCAL year 2011!!");
489 SetJetEtaRange(-0.7 + r, 0.7 - r);
490 SetJetPhiRange(1.405 + r, 3.135 - r);
500 SetJetEtaRange(geom->GetArm1EtaMin() + r, geom->GetArm1EtaMax() - r);
501 SetJetPhiRange(geom->GetDCALPhiMin() * TMath::DegToRad() + r, geom->GetDCALPhiMax() * TMath::DegToRad() - r);
504 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for DCAL year 2015!!");
505 SetJetEtaRange(-0.7 + r, 0.7 - r);
506 SetJetPhiRange(4.538 + r, 5.727 - r);
581 fCurrentDmesonJetInfo(0),
586 fClusterContainer(0),
602 fCandidateType(type),
609 fNMassBins(nMassBins),
621 fCurrentDmesonJetInfo(0),
626 fClusterContainer(0),
639 fCandidateType(source.fCandidateType),
640 fCandidateName(source.fCandidateName),
641 fCandidatePDG(source.fCandidatePDG),
642 fNDaughters(source.fNDaughters),
643 fPDGdaughters(source.fPDGdaughters),
644 fBranchName(source.fBranchName),
645 fMCMode(source.fMCMode),
646 fNMassBins(source.fNMassBins),
647 fMinMass(source.fMinMass),
648 fMaxMass(source.fMaxMass),
650 fRejectedOrigin(source.fRejectedOrigin),
651 fAcceptedDecay(source.fAcceptedDecay),
652 fInhibit(source.fInhibit),
653 fJetDefinitions(source.fJetDefinitions),
654 fPtBinWidth(source.fPtBinWidth),
655 fMaxPt(source.fMaxPt),
658 fCurrentDmesonJetInfo(0),
660 fCandidateArray(source.fCandidateArray),
661 fMCContainer(source.fMCContainer),
662 fTrackContainer(source.fTrackContainer),
663 fClusterContainer(source.fClusterContainer),
691 for (UInt_t i = 0; i < fJetDefinitions.size(); i++) {
692 if (fJetDefinitions[i].IsJetInAcceptance(dMesonJet, fJetDefinitions[i].GetName()))
return kTRUE;
701 for (Int_t i = 0; i < fJetDefinitions.size(); i++) {
702 fJetDefinitions[i].SetDetectorJetEtaPhiRange(geom, runNumber);
711 switch (fCandidateType) {
714 fCandidateName =
"D0";
716 fPDGdaughters.Set(fNDaughters);
717 fPDGdaughters.Reset();
718 fPDGdaughters[0] = 211;
719 fPDGdaughters[1] = 321;
720 fBranchName =
"D0toKpi";
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++;
900 DmesonJet.
fD.SetPtEtaPhiM(part->Pt(), part->Eta(), part->Phi(), part->M());
914 return ExtractD0Attributes(Dcand, DmesonJet, i);
917 return ExtractDstarAttributes(static_cast<const AliAODRecoCascadeHF*>(Dcand), DmesonJet, i);
933 Int_t MCtruthPdgCode = 0;
935 Double_t invMassD = 0;
938 Int_t mcLab = Dcand->MatchToMC(fCandidatePDG, fMCContainer->GetArray(), fNDaughters, fPDGdaughters.GetArray());
941 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
945 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
947 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
949 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);
1035 if (i > 0)
return kFALSE;
1037 Int_t MCtruthPdgCode = 0;
1039 Double_t invMassD = 0;
1042 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
1043 Int_t pdgDgD0toKpi[2] = { 321, 211 };
1045 Int_t mcLab = DstarCand->
MatchToMC(fCandidatePDG, 421, pdgDgDStartoD0pi, pdgDgD0toKpi, fMCContainer->GetArray());
1049 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
1053 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
1055 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
1058 MCtruthPdgCode = aodMcPart->PdgCode();
1064 Int_t absMCtruthPdgCode = TMath::Abs(MCtruthPdgCode);
1065 if (fMCMode ==
kNoMC ||
1066 (absMCtruthPdgCode == 413 && fMCMode ==
kSignalOnly) ||
1072 DmesonJet.
fD.SetPtEtaPhiM(DstarCand->Pt(), DstarCand->Eta(), DstarCand->Phi(), invMassD);
1093 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1095 if (part->GetNDaughters() == 2) {
1097 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1098 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1104 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1105 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1107 if (absPdgPart == 421) {
1109 if ((absPdg1 == 211 && absPdg2 == 321) ||
1110 (absPdg1 == 321 && absPdg2 == 211)) {
1115 if (absPdgPart == 413) {
1117 if (absPdg1 == 421 && absPdg2 == 211) {
1118 Int_t D0decay = CheckDecayChannel(d1, mcArray);
1124 if (absPdg1 == 211 && absPdg2 == 421) {
1125 Int_t D0decay = CheckDecayChannel(d2, mcArray);
1149 Int_t pdgGranma = 0;
1150 Int_t mother = part->GetMother();
1152 Int_t abspdgGranma = 0;
1153 Bool_t isFromB = kFALSE;
1154 Bool_t isQuarkFound = kFALSE;
1156 while (mother >= 0) {
1158 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1159 if (mcGranma >= 0) {
1160 pdgGranma = mcGranma->GetPdgCode();
1161 abspdgGranma = TMath::Abs(pdgGranma);
1162 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1166 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1167 mother = mcGranma->GetMother();
1170 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisParams::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1191 fDmesonJets.clear();
1194 RunParticleLevelAnalysis();
1197 RunDetectorLevelAnalysis();
1204 const Int_t nD = fCandidateArray->GetEntriesFast();
1208 Int_t nAccCharm = 0;
1209 for (Int_t icharm = 0; icharm < nD; icharm++) {
1210 Int_t isSelected = 0;
1213 if (!charmCand)
continue;
1215 Int_t nprongs = charmCand->GetNProngs();
1218 if (!charmCand->InheritsFrom(
"AliAODRecoCascadeHF")) {
1219 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisParams::RunDetectorLevelAnalysis",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
1225 if (!fRDHFCuts->IsInFiducialAcceptance(charmCand->Pt(), charmCand->Y(fCandidatePDG)))
continue;
1230 if (!isSelected)
continue;
1232 for (Int_t im = 0; im < 2; im++) {
1235 if (ExtractRecoDecayAttributes(charmCand, DmesonJet, im)) {
1236 for (std::vector<AliHFJetDefinition>::iterator itdef = fJetDefinitions.begin(); itdef != fJetDefinitions.end(); itdef++) {
1237 if (!FindJet(charmCand, DmesonJet, *itdef)) {
1238 AliWarning(Form(
"Could not find jet '%s' for D meson '%s': pT = %.3f, eta = %.3f, phi = %.3f",
1239 (*itdef).GetName(), GetName(), DmesonJet.
fD.Pt(), DmesonJet.
fD.Eta(), DmesonJet.
fD.
Phi_0_2pi()));
1242 fDmesonJets[icharm] = DmesonJet;
1250 hname = TString::Format(
"%s/fHistNAcceptedDmesons", GetName());
1253 hname = TString::Format(
"%s/fHistNDmesons", GetName());
1278 fTrackContainer->SetDMesonCandidate(Dcand);
1279 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", GetName(), jetDef.
GetName());
1282 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", GetName(), jetDef.
GetName());
1284 const TObjArray& daughters = fTrackContainer->GetDaughterList();
1285 for (Int_t i = 0; i < daughters.GetEntriesFast(); i++) {
1286 AliVParticle* daughter =
static_cast<AliVParticle*
>(daughters.At(i));
1287 if (!fTrackContainer->GetArray()->FindObject(daughter)) histDaughterNotInJet->Fill(daughter->Pt());
1292 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", GetName(), jetDef.
GetName());
1301 for (UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1304 Bool_t isDmesonJet = kFALSE;
1306 Double_t maxChPt = 0;
1307 Double_t maxNePt = 0;
1308 Double_t totalNeutralPt = 0;
1310 for (UInt_t ic = 0; ic < constituents.size(); ++ic) {
1311 if (constituents[ic].user_index() == 0) {
1312 isDmesonJet = kTRUE;
1314 else if (constituents[ic].user_index() >= 100) {
1315 if (constituents[ic].pt() > maxChPt) maxChPt = constituents[ic].pt();
1317 else if (constituents[ic].user_index() <= -100) {
1318 totalNeutralPt += constituents[ic].pt();
1319 if (constituents[ic].pt() > maxNePt) maxChPt = constituents[ic].pt();
1324 DmesonJet.
fJets[jetDef.
GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1325 DmesonJet.
fJets[jetDef.
GetName()].fNConstituents = constituents.size();
1326 DmesonJet.
fJets[jetDef.
GetName()].fMaxChargedPt = maxChPt;
1327 DmesonJet.
fJets[jetDef.
GetName()].fMaxNeutralPt = maxNePt;
1328 DmesonJet.
fJets[jetDef.
GetName()].fNEF = totalNeutralPt / jets_incl[ijet].pt();
1342 AliEmcalIterableMomentumContainer itcont = cont->all_momentum();
1343 for (AliEmcalIterableMomentumContainer::iterator it = itcont.begin(); it != itcont.end(); it++) {
1344 UInt_t rejectionReason = 0;
1345 if (!cont->AcceptObject(it.current_index(), rejectionReason)) {
1346 rejectHist->Fill(cont->GetRejectionReasonBitPosition(rejectionReason), it->first.Pt());
1349 Int_t uid = offset >= 0 ? it.current_index() + offset: -it.current_index() - offset;
1359 fMCContainer->SetSpecialPDG(fCandidatePDG);
1360 fMCContainer->SetRejectedOriginMap(fRejectedOrigin);
1361 fMCContainer->SetAcceptedDecayMap(fAcceptedDecay);
1363 if (!fMCContainer->IsSpecialPDGFound())
return;
1365 for (
auto &jetDef : fJetDefinitions) {
1372 hname = TString::Format(
"%s/%s/fHistMCParticleRejectionReason", GetName(), jetDef.GetName());
1379 for (UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1382 Bool_t isDmesonJet = kFALSE;
1384 for (UInt_t ic = 0; ic < constituents.size(); ++ic) {
1385 Int_t iPart = constituents[ic].user_index() - 100;
1386 AliVParticle* part = fMCContainer->GetParticle(iPart);
1388 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisEngine::RunParticleLevelAnalysis",
"Could not find jet constituent %d!", iPart);
1391 if (TMath::Abs(part->PdgCode()) == fCandidatePDG) {
1392 std::map<int, AliDmesonJetInfo>::iterator dMesonJetIt = fDmesonJets.find(iPart);
1393 if (dMesonJetIt == fDmesonJets.end()) {
1394 std::pair<int, AliDmesonJetInfo> element;
1395 element.first = iPart;
1397 dMesonJetIt = fDmesonJets.insert(element).first;
1398 (*dMesonJetIt).second.fD.SetPxPyPzE(part->Px(), part->Py(), part->Pz(), part->E());
1399 (*dMesonJetIt).second.fDmesonParticle = part;
1402 (*dMesonJetIt).second.fJets[jetDef.GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1403 (*dMesonJetIt).second.fJets[jetDef.GetName()].fNConstituents = constituents.size();
1416 switch (fCandidateType) {
1418 classname =
"AliAnalysisTaskDmesonJets::AliD0InfoSummary";
1422 classname =
"AliAnalysisTaskDmesonJets::AliDStarInfoSummary";
1426 TString treeName = TString::Format(
"%s_%s", taskName, GetName());
1427 fTree =
new TTree(treeName, treeName);
1428 fTree->Branch(
"DmesonJet", classname, &fCurrentDmesonJetInfo);
1430 for (Int_t i = 0; i < fJetDefinitions.size(); i++) {
1432 fTree->Branch(fJetDefinitions[i].GetName(),
"AliAnalysisTaskDmesonJets::AliJetInfoSummary", &fCurrentJetInfo[i]);
1445 Int_t
nPtBins = TMath::CeilNint(fMaxPt / fPtBinWidth);
1447 for (
auto &jetDef : fJetDefinitions) {
1449 AliDebug(2,Form(
"Now working on '%s'", jetDef.GetName()));
1451 Double_t radius = jetDef.fRadius;
1453 TString
title[30] = {
""};
1454 Int_t
nbins[30] = {0 };
1455 Double_t min [30] = {0.};
1456 Double_t max [30] = {0.};
1459 title[dim] =
"#it{p}_{T,D} (GeV/#it{c})";
1466 title[dim] =
"#eta_{D}";
1472 title[dim] =
"#phi_{D} (rad)";
1475 max[dim] = TMath::TwoPi();
1480 title[dim] =
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})";
1481 nbins[dim] = fNMassBins;
1482 min[dim] = fMinMass;
1483 max[dim] = fMaxMass;
1488 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1489 nbins[dim] = fNMassBins;
1490 min[dim] = fMinMass;
1491 max[dim] = fMaxMass;
1496 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1497 nbins[dim] = fNMassBins;
1503 title[dim] =
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})";
1504 nbins[dim] = fNMassBins*6;
1508 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1516 title[dim] =
"#it{p}_{T,#pi} (GeV/#it{c})";
1523 title[dim] =
"#it{z}_{D}";
1529 if ((enabledAxis &
kDeltaR) != 0) {
1530 title[dim] =
"#Delta R_{D-jet}";
1533 max[dim] = radius * 1.5;
1538 title[dim] =
"#eta_{D} - #eta_{jet}";
1540 min[dim] = -radius * 1.2;
1541 max[dim] = radius * 1.2;
1546 title[dim] =
"#phi_{D} - #phi_{jet} (rad)";
1548 min[dim] = -radius * 1.2;
1549 max[dim] = radius * 1.2;
1553 title[dim] =
"#it{p}_{T,jet} (GeV/#it{c})";
1560 title[dim] =
"#eta_{jet}";
1566 title[dim] =
"#phi_{jet} (rad)";
1569 max[dim] = TMath::TwoPi();
1574 title[dim] =
"No. of constituents";
1581 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef.GetName());
1583 for (Int_t j = 0; j < dim; j++) {
1584 h->GetAxis(j)->SetTitle(title[j]);
1596 for (
auto& dmeson_pair : fDmesonJets) {
1597 fCurrentDmesonJetInfo->Set(dmeson_pair.second);
1599 for (UInt_t ij = 0; ij < fJetDefinitions.size(); ij++) {
1600 fCurrentJetInfo[ij]->Reset();
1601 AliJetInfo* jet = dmeson_pair.second.GetJet(fJetDefinitions[ij].GetName());
1603 if (applyKinCuts && !fJetDefinitions[ij].IsJetInAcceptance(*jet)) {
1604 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), fJetDefinitions[ij].GetName());
1606 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), fJetDefinitions[ij].GetName());
1608 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), fJetDefinitions[ij].GetName());
1612 fCurrentJetInfo[ij]->Set(dmeson_pair.second, fJetDefinitions[ij].GetName());
1619 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1621 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1623 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1626 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", GetName());
1630 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", GetName());
1633 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", GetName());
1634 fHistManager->
FillTH1(hname, dmeson_pair.second.fD.M() - dmeson_pair.second.fInvMass2Prong);
1649 for (
auto& dmeson_pair : fDmesonJets) {
1651 for (UInt_t ij = 0; ij < fJetDefinitions.size(); ij++) {
1652 AliJetInfo* jet = dmeson_pair.second.GetJet(fJetDefinitions[ij].GetName());
1654 if (applyKinCuts && !fJetDefinitions[ij].IsJetInAcceptance(*jet)) {
1655 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), fJetDefinitions[ij].GetName());
1657 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), fJetDefinitions[ij].GetName());
1659 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), fJetDefinitions[ij].GetName());
1666 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1668 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1670 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1673 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", GetName());
1677 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", GetName());
1680 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", GetName());
1681 fHistManager->
FillTH1(hname, dmeson_pair.second.fD.M() - dmeson_pair.second.fInvMass2Prong);
1695 for (
auto& dmeson_pair : fDmesonJets) {
1696 if (!IsAnyJetInAcceptance(dmeson_pair.second)) {
1697 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1699 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1701 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1706 for (
auto &jetDef : fJetDefinitions) {
1708 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef.GetName());
1711 for (
auto& dmeson_pair : fDmesonJets) {
1712 const AliJetInfo* jet = dmeson_pair.second.GetJet(jetDef.GetName());
1714 if (!jetDef.IsJetInAcceptance(*jet)) {
1715 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), jetDef.GetName());
1717 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), jetDef.GetName());
1719 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), jetDef.GetName());
1723 FillHnSparse(h, dmeson_pair.second, jetDef.GetName());
1739 Double_t contents[30] = {0.};
1741 Double_t z = DmesonJet.
GetZ(n);
1742 Double_t deltaPhi = 0;
1743 Double_t deltaEta = 0;
1744 Double_t deltaR = DmesonJet.
GetDistance(n, deltaEta, deltaPhi);
1746 std::map<std::string, AliJetInfo>::const_iterator it = DmesonJet.
fJets.find(n);
1747 if (it == DmesonJet.
fJets.end())
return kFALSE;
1749 for (Int_t i = 0; i < h->GetNdimensions(); i++) {
1750 TString
title(h->GetAxis(i)->GetTitle());
1751 if (
title==
"#it{p}_{T,D} (GeV/#it{c})") contents[i] = DmesonJet.
fD.Pt();
1752 else if (
title==
"#eta_{D}") contents[i] = DmesonJet.
fD.Eta();
1755 else if (
title==
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M();
1756 else if (
title==
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M() - DmesonJet.
fInvMass2Prong;
1757 else if (
title==
"#it{p}_{T,#pi} (GeV/#it{c})") contents[i] = DmesonJet.
fSoftPionPt;
1758 else if (
title==
"#it{z}_{D}") contents[i] = z;
1759 else if (
title==
"#Delta R_{D-jet}") contents[i] = deltaR;
1760 else if (
title==
"#eta_{D} - #eta_{jet}") contents[i] = deltaEta;
1761 else if (
title==
"#phi_{D} - #phi_{jet} (rad)") contents[i] = deltaPhi;
1762 else if (
title==
"#it{p}_{T,jet} (GeV/#it{c})") contents[i] = (*it).second.Pt();
1763 else if (
title==
"#eta_{jet}") contents[i] = (*it).second.Eta();
1764 else if (
title==
"#phi_{jet} (rad)") contents[i] = (*it).second.Phi_0_2pi();
1765 else if (
title==
"No. of constituents") contents[i] = (*it).second.fNConstituents;
1766 else AliWarning(Form(
"Unable to fill dimension '%s'!",
title.Data()));
1801 fEnabledAxis(k2ProngInvMass),
1802 fOutputType(kTreeOutput),
1804 fApplyKinematicCuts(kTRUE),
1805 fNOutputTrees(nOutputTrees),
1810 for (Int_t i = 0; i < nOutputTrees; i++){
1811 DefineOutput(2+i, TTree::Class());
1830 TFile* filecuts = TFile::Open(cutfname);
1831 if (!filecuts || filecuts->IsZombie()) {
1832 ::Warning(
"AddTaskDmesonJets",
"Input file not found: will use std cuts.");
1837 analysiscuts =
dynamic_cast<AliRDHFCuts*
>(filecuts->Get(cutsname));
1838 if (!analysiscuts) {
1839 ::Warning(
"AddTaskDmesonJetCorr",
"Could not find analysis cuts '%s' in '%s'. Using std cuts.", cutsname.Data(), cutfname.Data());
1843 return analysiscuts;
1872 if (!cutfname.IsNull()) {
1877 cutsname =
"D0toKpiCuts";
1880 cutsname =
"DStartoKpipiCuts";
1896 ::Info(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"A new analysis engine '%s' has been added. The total number of analysis engines is %lu.", eng.
GetName(jetDef),
fAnalysisEngines.size());
1900 ::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());
1903 if (cuts && found_eng->
fRDHFCuts != 0) {
1904 ::Warning(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"D meson cuts were already defined for this D meson type. They will be overwritten.");
1922 ::Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
1934 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for task '%s' (%lu analysis engines)", GetName(),
fAnalysisEngines.size());
1936 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for analysis engine '%s' (%lu jet definitions)", param.GetName(), param.fJetDefinitions.size());
1942 hname = TString::Format(
"%s/fHistNAcceptedDmesons", param.GetName());
1943 htitle = hname +
";Number of D accepted meson candidates;counts";
1946 hname = TString::Format(
"%s/fHistNDmesons", param.GetName());
1947 htitle = hname +
";Number of D meson candidates;counts";
1950 hname = TString::Format(
"%s/fHistNEvents", param.GetName());
1951 htitle = hname +
";Event status;counts";
1953 h->GetXaxis()->SetBinLabel(1,
"Accepted");
1954 h->GetXaxis()->SetBinLabel(2,
"Rejected");
1956 hname = TString::Format(
"%s/fHistEventRejectionReasons", param.GetName());
1957 htitle = hname +
";Rejection reason;counts";
1960 hname = TString::Format(
"%s/fHistRejectedDMesonPt", param.GetName());
1961 htitle = hname +
";#it{p}_{T,D} (GeV/#it{c});counts";
1964 hname = TString::Format(
"%s/fHistRejectedDMesonEta", param.GetName());
1965 htitle = hname +
";#it{#eta}_{D};counts";
1968 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", param.GetName());
1969 htitle = hname +
";#it{#phi}_{D};counts";
1972 if (param.fCandidateType ==
kD0toKpi) {
1973 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", param.GetName());
1974 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1981 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", param.GetName());
1982 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1986 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1987 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", param.GetName());
1988 htitle = hname +
";#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1993 for (std::vector<AliHFJetDefinition>::iterator itdef = param.fJetDefinitions.begin(); itdef != param.fJetDefinitions.end(); itdef++) {
1995 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for jet definition '%s'", jetDef->
GetName());
1999 hname = TString::Format(
"%s/%s/fHistMCParticleRejectionReason", param.GetName(), jetDef->
GetName());
2000 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
2004 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", param.GetName(), jetDef->
GetName());
2005 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
2009 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", param.GetName(), jetDef->
GetName());
2010 htitle = hname +
";Cluster rejection reason;#it{p}_{T,cluster} (GeV/#it{c});counts";
2014 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", param.GetName(), jetDef->
GetName());
2015 htitle = hname +
";#it{p}_{T,track} (GeV/#it{c});counts";
2018 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", param.GetName(), jetDef->
GetName());
2019 htitle = hname +
";#it{p}_{T,jet} (GeV/#it{c});counts";
2022 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", param.GetName(), jetDef->
GetName());
2023 htitle = hname +
";#it{#eta}_{jet};counts";
2026 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", param.GetName(), jetDef->
GetName());
2027 htitle = hname +
";#it{#phi}_{jet};counts";
2032 param.BuildTree(GetName());
2034 param.AssignDataSlot(treeSlot+2);
2039 AliError(Form(
"Number of data output slots %d not sufficient. Tree of analysis engine %s will not be posted!",
fNOutputTrees, param.GetName()));
2062 fAodEvent =
dynamic_cast<AliAODEvent*
>(fInputEvent);
2070 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
2081 params.fCandidateArray =
dynamic_cast<TClonesArray*
>(
fAodEvent->GetList()->FindObject(params.fBranchName.Data()));
2083 if (params.fCandidateArray) {
2084 if (!params.fCandidateArray->GetClass()->InheritsFrom(
"AliAODRecoDecayHF2Prong")) {
2085 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2086 "%s: Objects of type %s in %s are not inherited from AliAODRecoDecayHF2Prong! Task will be disabled!",
2087 GetName(), params.fCandidateArray->GetClass()->GetName(), params.fCandidateArray->GetName());
2088 params.fCandidateArray = 0;
2089 params.fInhibit = kTRUE;
2093 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2094 "Could not find candidate array '%s', skipping the event. Analysis engine '%s' will be disabled!",
2095 params.fBranchName.Data(), params.GetName());
2096 params.fInhibit = kTRUE;
2100 if (params.fMCMode !=
kNoMC) {
2105 if (!params.fMCContainer) {
2106 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2107 "No MC particle container was provided. Analysis engine '%s' will be disabled!",
2109 params.fInhibit = kTRUE;
2119 if (!params.fTrackContainer && !params.fClusterContainer) {
2120 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
2121 "No track container and no cluster container were provided. Analysis engine '%s' will be disabled!",
2123 params.fInhibit = kTRUE;
2140 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001)
return kFALSE;
2144 if (eng.fInhibit)
continue;
2147 hname = TString::Format(
"%s/fHistNEvents", eng.GetName());
2148 Bool_t iseventselected = eng.fRDHFCuts->IsEventSelected(
fAodEvent);
2149 if (!iseventselected) {
2151 hname = TString::Format(
"%s/fHistEventRejectionReasons", eng.GetName());
2152 UInt_t bitmap = eng.fRDHFCuts->GetEventRejectionBitMap();
2156 if (label.IsNull())
break;
2165 AliDebug(2,
"Event selected");
2180 if (param.fInhibit)
continue;
2202 TParticlePDG* part = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg));
2204 Double_t
mass = part->Mass();
2207 if (nbins % 2 == 0) {
2208 minMass = mass - range / 2 - range / nbins / 2;
2209 maxMass = mass + range / 2 - range / nbins / 2;
2212 minMass = mass - range / 2;
2213 maxMass = mass + range / 2;
2224 static TString label;
2228 label =
"NotSelTrigger";
2230 return label.Data();
2235 return label.Data();
2238 label =
"TooFewVtxContrib";
2240 return label.Data();
2243 label =
"ZVtxOutFid";
2245 return label.Data();
2250 return label.Data();
2253 label =
"OutsideCentrality";
2255 return label.Data();
2258 label =
"PhysicsSelection";
2260 return label.Data();
2263 label =
"BadSPDVertex";
2265 return label.Data();
2268 label =
"ZVtxSPDOutFid";
2270 return label.Data();
2273 label =
"CentralityFlattening";
2275 return label.Data();
2278 label =
"BadTrackV0Correl";
2280 return label.Data();
2283 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.
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)
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
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.
EJetAcceptanceType_t fAcceptance
Jet acceptance.
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)
Bool_t ExtractParticleLevelHFAttributes(const AliAODMCParticle *part, AliDmesonJetInfo &DmesonJet)
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
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliParticleContainer * GetParticleContainer(Int_t i=0) const
virtual ~AnalysisEngine()
void RunParticleLevelAnalysis()
Run a particle level analysis.
Bool_t fApplyKinematicCuts
Apply jet kinematic cuts.
const char * GetName() const
Generate a name for this jet definition.
void SetDetectorJetEtaPhiRange(const AliEMCALGeometry *const geom, Int_t run)
Bool_t fReconstructed
! Whether this D meson was reconstructed (only for particle level D mesons)
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)
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)
void AddInputVectors(AliEmcalContainer *cont, Int_t offset, TH2 *rejectHist)
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)