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"
54 fD.SetPtEtaPhiE(0,0,0,0);
57 for (std::map<std::string, AliJetInfo>::iterator it =
fJets.begin(); it !=
fJets.end(); it++) {
58 (*it).second.fMomentum.SetPtEtaPhiE(0,0,0,0);
59 (*it).second.fNConstituents = 0;
60 (*it).second.fNEF = 0;
61 (*it).second.fMaxChargedPt = 0;
62 (*it).second.fMaxNeutralPt = 0;
69 Printf(
"Printing D Meson Jet object.");
70 Printf(
"D Meson: pT = %.3f, eta = %.3f, phi = %.3f, inv. mass = %.3f", fD.Pt(), fD.Eta(), fD.Phi_0_2pi(), fD.M());
71 Printf(
"Soft pion pT: %.3f. 2-Prong Invariant mass = %.3f", fSoftPionPt, fInvMass2Prong);
72 for (std::map<std::string, AliJetInfo>::const_iterator it = fJets.begin(); it != fJets.end(); it++) {
73 Printf(
"Jet %s: pT = %.3f, eta = %.3f, phi = %.3f", (*it).first.c_str(), (*it).second.Pt(), (*it).second.Eta(), (*it).second.Phi_0_2pi());
74 Printf(
"Jet N Consituents = %d", (*it).second.fNConstituents);
83 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
84 if (it == fJets.end())
return 0;
88 if ((*it).second.Pt() > 0) {
89 TVector3 dvect = fD.Vect();
90 TVector3 jvect = (*it).second.fMomentum.Vect();
92 Double_t jetMom = jvect * jvect;
95 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetZ",
"Zero jet momentum!");
99 z = (dvect * jvect) / jetMom;
102 if (z == 1 || (z > 1 && z - 1 < 1e-3)) z = 0.999;
115 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
116 if (it == fJets.end())
return 0;
118 dphi = TVector2::Phi_mpi_pi(fD.Phi() - (*it).second.Phi());;
119 deta = fD.Eta() - (*it).second.Eta();
120 return TMath::Sqrt(dphi*dphi + deta*deta);
130 return GetDistance(n, deta, dphi);
135 std::map<std::string, AliJetInfo>::const_iterator it = fJets.find(n);
136 if (it == fJets.end()) {
137 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!", n.c_str());
140 return &((*it).second);
145 std::map<std::string, AliJetInfo>::iterator it = fJets.find(n);
146 if (it == fJets.end()) {
147 ::Error(
"AliAnalysisTaskDmesonJets::AliDmesonJetInfo::GetJet",
"Could not find jet info for the jet definition '%s'!", n.c_str());
150 return &((*it).second);
189 std::map<std::string, AliJetInfo>::const_iterator it = source.
fJets.find(n);
190 if (it == source.
fJets.end())
return;
192 fPt = (*it).second.Pt();
193 fEta = (*it).second.Eta();
194 fPhi = (*it).second.Phi_0_2pi();
221 fPt = source.
fD.Pt();
222 fEta = source.
fD.Eta();
223 fPhi = source.
fD.Phi_0_2pi();
237 fInvMass(source.fD.M())
243 fInvMass = source.
fD.M();
258 f2ProngInvMass(source.fInvMass2Prong),
259 fDeltaInvMass(source.fD.M() - source.fInvMass2Prong)
336 fJetType(source.fJetType),
337 fRadius(source.fRadius),
338 fJetAlgo(source.fJetAlgo),
339 fRecoScheme(source.fRecoScheme),
340 fAcceptance(source.fAcceptance),
341 fMinJetPt(source.fMinJetPt),
342 fMinJetPhi(source.fMinJetPhi),
343 fMaxJetPhi(source.fMaxJetPhi),
344 fMinJetEta(source.fMinJetEta),
345 fMaxJetEta(source.fMaxJetEta),
346 fMinChargedPt(source.fMinChargedPt),
347 fMaxChargedPt(source.fMaxChargedPt),
348 fMinNeutralPt(source.fMinNeutralPt),
349 fMaxNeutralPt(source.fMaxNeutralPt)
378 if (fMinJetEta < fMaxJetEta && (jet.
Eta() < fMinJetEta || jet.
Eta() > fMaxJetEta))
return kFALSE;
379 if (fMinJetPhi < fMaxJetPhi && (jet.
Phi() < fMinJetPhi || jet.
Phi() > fMaxJetPhi))
return kFALSE;
380 if (jet.
Pt() < fMinJetPt)
return kFALSE;
394 if (!jet)
return kFALSE;
395 return IsJetInAcceptance((*jet));
405 switch (fAcceptance) {
411 SetJetEtaRange(-0.9 + r, 0.9 - r);
412 SetJetPhiRange(0, 0);
421 SetJetEtaRange(geom->GetArm1EtaMin() + r, geom->GetArm1EtaMax() - r);
423 if(run>=177295 && run<=197470) {
424 SetJetPhiRange(1.405 + r,3.135 - r);
427 SetJetPhiRange(geom->GetArm1PhiMin() * TMath::DegToRad() + r, geom->GetEMCALPhiMax() * TMath::DegToRad() - r);
431 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for EMCAL year 2011!!");
432 SetJetEtaRange(-0.7 + r, 0.7 - r);
433 SetJetPhiRange(1.405 + r, 3.135 - r);
443 SetJetEtaRange(geom->GetArm1EtaMin() + r, geom->GetArm1EtaMax() - r);
444 SetJetPhiRange(geom->GetDCALPhiMin() * TMath::DegToRad() + r, geom->GetDCALPhiMax() * TMath::DegToRad() - r);
447 AliWarning(
"Could not get instance of AliEMCALGeometry. Using manual settings for DCAL year 2015!!");
448 SetJetEtaRange(-0.7 + r, 0.7 - r);
449 SetJetPhiRange(4.538 + r, 5.727 - r);
520 fCurrentDmesonJetInfo(0),
525 fClusterContainer(0),
541 fCandidateType(type),
547 fNMassBins(nMassBins),
556 fCurrentDmesonJetInfo(0),
561 fClusterContainer(0),
574 fCandidateType(source.fCandidateType),
575 fCandidateName(source.fCandidateName),
576 fCandidatePDG(source.fCandidatePDG),
577 fNDaughters(source.fNDaughters),
578 fBranchName(source.fBranchName),
579 fMCMode(source.fMCMode),
580 fNMassBins(source.fNMassBins),
581 fMinMass(source.fMinMass),
582 fMaxMass(source.fMaxMass),
584 fRejectedOrigin(source.fRejectedOrigin),
585 fAcceptedDecay(source.fAcceptedDecay),
586 fInhibit(source.fInhibit),
587 fJetDefinitions(source.fJetDefinitions),
589 fCurrentDmesonJetInfo(0),
591 fCandidateArray(source.fCandidateArray),
592 fMCContainer(source.fMCContainer),
593 fTrackContainer(source.fTrackContainer),
594 fClusterContainer(source.fClusterContainer),
605 if (fRDHFCuts)
delete fRDHFCuts;
622 for (UInt_t i = 0; i < fJetDefinitions.size(); i++) {
623 if (fJetDefinitions[i].IsJetInAcceptance(dMesonJet, fJetDefinitions[i].GetName()))
return kTRUE;
632 for (Int_t i = 0; i < fJetDefinitions.size(); i++) {
633 fJetDefinitions[i].SetDetectorJetEtaPhiRange(geom, runNumber);
642 switch (fCandidateType) {
645 fCandidateName =
"D0";
647 fPDGdaughters.Set(fNDaughters);
648 fPDGdaughters.Reset();
649 fPDGdaughters[0] = 211;
650 fPDGdaughters[1] = 321;
651 fBranchName =
"D0toKpi";
655 fRDHFCuts->SetStandardCutsPP2010();
656 fRDHFCuts->SetUsePhysicsSelection(kFALSE);
657 fRDHFCuts->SetTriggerClass(
"",
"");
662 fCandidateName =
"DStar";
664 fPDGdaughters.Set(fNDaughters);
665 fPDGdaughters.Reset();
666 fPDGdaughters[0] = 211;
667 fPDGdaughters[1] = 211;
668 fPDGdaughters[2] = 321;
669 fBranchName =
"Dstar";
673 fRDHFCuts->SetStandardCutsPP2010();
674 fRDHFCuts->SetUsePhysicsSelection(kFALSE);
675 fRDHFCuts->SetTriggerClass(
"",
"");
679 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisEngine::SetCandidateProperties",
"Candidate %d unknown!", fCandidateType);
690 if (fRDHFCuts)
delete fRDHFCuts;
700 if (fRDHFCuts)
delete fRDHFCuts;
701 fRDHFCuts =
static_cast<AliRDHFCuts*
>(cuts->Clone());
711 name = TString::Format(
"%s_%s", GetName(), jetDef.
GetName());
723 name = fCandidateName;
726 name +=
"_kBackgroundOnly";
729 name +=
"_kSignalOnly";
749 std::vector<AliHFJetDefinition>::iterator it = FindJetDefinition(def);
751 if (it == fJetDefinitions.end() || *it != def) {
752 fJetDefinitions.push_back(def);
753 ::Info(
"AliAnalysisTaskDmesonJets::AnalysisEngine::AddJetDefinition",
"Jet definition '%s' has been added to analysis engine '%s'."
754 "Total number of jet definitions is now %lu.",
755 def.
GetName(), GetName(), fJetDefinitions.size());
757 if (fMCMode !=
kMCTruth) fJetDefinitions[fJetDefinitions.size()-1].SetChargedPtRange(0., 100.);
760 ::Warning(
"AliAnalysisTaskDmesonJets::AnalysisEngine::AddJetDefinition",
"The same jet definition '%s' was already added in analysis engine '%s'.", def.
GetName(), GetName());
780 return AddJetDefinition(def);
790 std::vector<AliHFJetDefinition>::iterator it = fJetDefinitions.begin();
791 while (it != fJetDefinitions.end() && (*it) != def) it++;
831 DmesonJet.
fD.SetPtEtaPhiM(part->Pt(), part->Eta(), part->Phi(), part->M());
845 return ExtractD0Attributes(Dcand, DmesonJet, i);
848 return ExtractDstarAttributes(static_cast<const AliAODRecoCascadeHF*>(Dcand), DmesonJet, i);
864 Int_t MCtruthPdgCode = 0;
866 Double_t invMassD = 0;
869 Int_t mcLab = Dcand->MatchToMC(fCandidatePDG, fMCContainer->GetArray(), fNDaughters, fPDGdaughters.GetArray());
871 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
875 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
877 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
879 MCtruthPdgCode = aodMcPart->PdgCode();
886 if (isSelected == 1) {
887 if (i > 0)
return kFALSE;
889 if (fMCMode ==
kNoMC ||
890 (MCtruthPdgCode == fCandidatePDG && fMCMode ==
kSignalOnly) ||
900 else if (isSelected == 2) {
901 if (i > 0)
return kFALSE;
903 if (fMCMode ==
kNoMC ||
904 (MCtruthPdgCode == -fCandidatePDG && fMCMode ==
kSignalOnly) ||
914 else if (isSelected == 3) {
918 if ((MCtruthPdgCode == fCandidatePDG && fMCMode ==
kSignalOnly) ||
920 if (i > 0)
return kFALSE;
924 else if ((MCtruthPdgCode == -fCandidatePDG && fMCMode ==
kSignalOnly) ||
926 if (i > 0)
return kFALSE;
952 DmesonJet.
fD.SetPtEtaPhiM(Dcand->Pt(), Dcand->Eta(), Dcand->Phi(), invMassD);
965 if (i > 0)
return kFALSE;
967 Int_t MCtruthPdgCode = 0;
969 Double_t invMassD = 0;
972 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
973 Int_t pdgDgD0toKpi[2] = { 321, 211 };
975 Int_t mcLab = DstarCand->
MatchToMC(fCandidatePDG, 421, pdgDgDStartoD0pi, pdgDgD0toKpi, fMCContainer->GetArray());
978 AliAODMCParticle* aodMcPart =
static_cast<AliAODMCParticle*
>(fMCContainer->GetArray()->At(mcLab));
982 EMesonOrigin_t origin = CheckOrigin(aodMcPart, fMCContainer->GetArray());
984 if ((origin & fRejectedOrigin) == origin)
return kFALSE;
987 MCtruthPdgCode = aodMcPart->PdgCode();
993 Int_t absMCtruthPdgCode = TMath::Abs(MCtruthPdgCode);
994 if (fMCMode ==
kNoMC ||
995 (absMCtruthPdgCode == 413 && fMCMode ==
kSignalOnly) ||
1001 DmesonJet.
fD.SetPtEtaPhiM(DstarCand->Pt(), DstarCand->Eta(), DstarCand->Phi(), invMassD);
1022 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1024 if (part->GetNDaughters() == 2) {
1026 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1027 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1033 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1034 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1036 if (absPdgPart == 421) {
1038 if ((absPdg1 == 211 && absPdg2 == 321) ||
1039 (absPdg1 == 321 && absPdg2 == 211)) {
1044 if (absPdgPart == 413) {
1046 if (absPdg1 == 421 && absPdg2 == 211) {
1047 Int_t D0decay = CheckDecayChannel(d1, mcArray);
1053 if (absPdg1 == 211 && absPdg2 == 421) {
1054 Int_t D0decay = CheckDecayChannel(d2, mcArray);
1078 Int_t pdgGranma = 0;
1079 Int_t mother = part->GetMother();
1081 Int_t abspdgGranma = 0;
1082 Bool_t isFromB = kFALSE;
1083 Bool_t isQuarkFound = kFALSE;
1085 while (mother >= 0) {
1087 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1088 if (mcGranma >= 0) {
1089 pdgGranma = mcGranma->GetPdgCode();
1090 abspdgGranma = TMath::Abs(pdgGranma);
1091 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1095 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1096 mother = mcGranma->GetMother();
1099 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisParams::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1120 fDmesonJets.clear();
1123 RunParticleLevelAnalysis();
1126 RunDetectorLevelAnalysis();
1133 const Int_t nD = fCandidateArray->GetEntriesFast();
1137 Int_t nAccCharm = 0;
1138 for (Int_t icharm = 0; icharm < nD; icharm++) {
1139 Int_t isSelected = 0;
1142 if (!charmCand)
continue;
1144 Int_t nprongs = charmCand->GetNProngs();
1147 if (!charmCand->InheritsFrom(
"AliAODRecoCascadeHF")) {
1148 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisParams::RunDetectorLevelAnalysis",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
1154 if (!fRDHFCuts->IsInFiducialAcceptance(charmCand->Pt(), charmCand->Y(fCandidatePDG)))
continue;
1159 if (!isSelected)
continue;
1161 for (Int_t im = 0; im < 2; im++) {
1163 if (ExtractRecoDecayAttributes(charmCand, DmesonJet, im)) {
1164 for (std::vector<AliHFJetDefinition>::iterator itdef = fJetDefinitions.begin(); itdef != fJetDefinitions.end(); itdef++) {
1165 if (!FindJet(charmCand, DmesonJet, *itdef)) {
1166 AliWarning(Form(
"Could not find jet '%s' for D meson '%s': pT = %.3f, eta = %.3f, phi = %.3f",
1167 (*itdef).GetName(), GetName(), DmesonJet.
fD.Pt(), DmesonJet.
fD.Eta(), DmesonJet.
fD.Phi_0_2pi()));
1170 fDmesonJets.push_back(DmesonJet);
1178 hname = TString::Format(
"%s/fHistNAcceptedDmesons", GetName());
1181 hname = TString::Format(
"%s/fHistNDmesons", GetName());
1206 fTrackContainer->SetDMesonCandidate(Dcand);
1207 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", GetName(), jetDef.
GetName());
1208 AddInputVectors(fTrackContainer, 100, static_cast<TH2*>(
fHistManager->FindObject(hname)));
1210 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", GetName(), jetDef.
GetName());
1211 TH1* histDaughterNotInJet =
static_cast<TH1*
>(
fHistManager->FindObject(hname));
1212 const TObjArray daughterNotInJet = fTrackContainer->GetDaughterList();
1213 for (Int_t i = 0; i < daughterNotInJet.GetEntriesFast(); i++) {
1214 AliVParticle* daughter =
static_cast<AliVParticle*
>(daughterNotInJet.At(i));
1215 if (!daughter)
continue;
1216 histDaughterNotInJet->Fill(daughter->Pt());
1221 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", GetName(), jetDef.
GetName());
1222 AddInputVectors(fClusterContainer, -100, static_cast<TH2*>(
fHistManager->FindObject(hname)));
1230 for (UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1233 Bool_t isDmesonJet = kFALSE;
1235 Double_t maxChPt = 0;
1236 Double_t maxNePt = 0;
1237 Double_t totalNeutralPt = 0;
1239 for (UInt_t ic = 0; ic < constituents.size(); ++ic) {
1240 if (constituents[ic].user_index() == 0) {
1241 isDmesonJet = kTRUE;
1243 else if (constituents[ic].user_index() >= 100) {
1244 if (constituents[ic].pt() > maxChPt) maxChPt = constituents[ic].pt();
1246 else if (constituents[ic].user_index() <= -100) {
1247 totalNeutralPt += constituents[ic].pt();
1248 if (constituents[ic].pt() > maxNePt) maxChPt = constituents[ic].pt();
1253 DmesonJet.
fJets[jetDef.
GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1254 DmesonJet.
fJets[jetDef.
GetName()].fNConstituents = constituents.size();
1255 DmesonJet.
fJets[jetDef.
GetName()].fMaxChargedPt = maxChPt;
1256 DmesonJet.
fJets[jetDef.
GetName()].fMaxNeutralPt = maxNePt;
1257 DmesonJet.
fJets[jetDef.
GetName()].fNEF = totalNeutralPt / jets_incl[ijet].pt();
1271 AliTLorentzVector part;
1274 UInt_t rejectionReason = 0;
1279 Int_t uid = offset >= 0 ? i : -i;
1290 fMCContainer->SetSpecialPDG(fCandidatePDG);
1291 fMCContainer->SetRejectedOriginMap(fRejectedOrigin);
1292 fMCContainer->SetAcceptedDecayMap(fAcceptedDecay);
1294 std::map<int, AliDmesonJetInfo> dMesonJets;
1296 for (std::vector<AliHFJetDefinition>::iterator itdef = fJetDefinitions.begin(); itdef != fJetDefinitions.end(); itdef++) {
1304 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", GetName(), jetDef->
GetName());
1305 AddInputVectors(fMCContainer, 100, static_cast<TH2*>(
fHistManager->FindObject(hname)));
1311 for (UInt_t ijet = 0; ijet < jets_incl.size(); ++ijet) {
1314 Bool_t isDmesonJet = kFALSE;
1316 for (UInt_t ic = 0; ic < constituents.size(); ++ic) {
1317 Int_t iPart = constituents[ic].user_index() - 100;
1318 AliVParticle* part = fMCContainer->GetParticle(iPart);
1320 ::Error(
"AliAnalysisTaskDmesonJets::AnalysisEngine::RunParticleLevelAnalysis",
"Could not find jet constituent %d!", iPart);
1323 if (part->PdgCode() == fCandidatePDG) {
1324 std::map<int, AliDmesonJetInfo>::iterator dMesonJetIt = dMesonJets.find(iPart);
1325 if (dMesonJetIt == dMesonJets.end()) {
1326 std::pair<int, AliDmesonJetInfo> element;
1327 element.first = iPart;
1329 dMesonJetIt = dMesonJets.insert(element).first;
1330 (*dMesonJetIt).second.fD.SetPxPyPzE(part->Px(), part->Py(), part->Pz(), part->E());
1333 (*dMesonJetIt).second.fJets[jetDef->
GetName()].fMomentum.SetPxPyPzE(jets_incl[ijet].px(), jets_incl[ijet].py(), jets_incl[ijet].pz(), jets_incl[ijet].E());
1340 for (std::map<int, AliDmesonJetInfo>::iterator dMesonJetIt = dMesonJets.begin();
1341 dMesonJetIt != dMesonJets.end();
1343 fDmesonJets.push_back((*dMesonJetIt).second);
1353 switch (fCandidateType) {
1355 classname =
"AliAnalysisTaskDmesonJets::AliD0InfoSummary";
1359 classname =
"AliAnalysisTaskDmesonJets::AliDStarInfoSummary";
1363 fTree =
new TTree(GetName(), GetName());
1364 fTree->Branch(
"DmesonJet", classname, &fCurrentDmesonJetInfo, 32000, 0);
1366 for (Int_t i = 0; i < fJetDefinitions.size(); i++) {
1368 fTree->Branch(fJetDefinitions[i].GetName(),
"AliAnalysisTaskDmesonJets::AliJetInfoSummary", &fCurrentJetInfo[i]);
1381 for (std::vector<AliHFJetDefinition>::const_iterator it = fJetDefinitions.begin(); it != fJetDefinitions.end(); it++) {
1384 AliDebug(2,Form(
"Now working on '%s'", jetDef->
GetName()));
1386 Double_t radius = jetDef->
fRadius;
1388 TString
title[30] = {
""};
1389 Int_t
nbins[30] = {0 };
1390 Double_t min [30] = {0.};
1391 Double_t max [30] = {0.};
1394 title[dim] =
"#it{p}_{T,D} (GeV/#it{c})";
1401 title[dim] =
"#eta_{D}";
1407 title[dim] =
"#phi_{D} (rad)";
1410 max[dim] = TMath::TwoPi();
1415 title[dim] =
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})";
1416 nbins[dim] = fNMassBins;
1417 min[dim] = fMinMass;
1418 max[dim] = fMaxMass;
1423 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1424 nbins[dim] = fNMassBins;
1425 min[dim] = fMinMass;
1426 max[dim] = fMaxMass;
1431 title[dim] =
"#it{M}_{K#pi} (GeV/#it{c}^{2})";
1432 nbins[dim] = fNMassBins;
1438 title[dim] =
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})";
1439 nbins[dim] = fNMassBins*6;
1443 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1451 title[dim] =
"#it{p}_{T,#pi} (GeV/#it{c})";
1458 title[dim] =
"#it{z}_{D}";
1464 if ((enabledAxis &
kDeltaR) != 0) {
1465 title[dim] =
"#Delta R_{D-jet}";
1468 max[dim] = radius * 1.5;
1473 title[dim] =
"#eta_{D} - #eta_{jet}";
1475 min[dim] = -radius * 1.2;
1476 max[dim] = radius * 1.2;
1481 title[dim] =
"#phi_{D} - #phi_{jet} (rad)";
1483 min[dim] = -radius * 1.2;
1484 max[dim] = radius * 1.2;
1488 title[dim] =
"#it{p}_{T,jet} (GeV/#it{c})";
1490 min[dim] = minBinPt;
1491 max[dim] = maxBinPt;
1495 title[dim] =
"#eta_{jet}";
1501 title[dim] =
"#phi_{jet} (rad)";
1504 max[dim] = TMath::TwoPi();
1509 title[dim] =
"No. of constituents";
1516 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef->
GetName());
1517 THnSparse* h =
fHistManager->CreateTHnSparse(hname,hname,dim,nbins,min,max);
1518 for (Int_t j = 0; j < dim; j++) {
1519 h->GetAxis(j)->SetTitle(title[j]);
1531 for (Int_t
id = 0;
id < fDmesonJets.size();
id++) {
1532 fCurrentDmesonJetInfo->Set(fDmesonJets[
id]);
1534 for (UInt_t ij = 0; ij < fJetDefinitions.size(); ij++) {
1535 fCurrentJetInfo[ij]->Reset();
1536 AliJetInfo* jet = fDmesonJets[id].GetJet(fJetDefinitions[ij].GetName());
1538 if (applyKinCuts && !fJetDefinitions[ij].IsJetInAcceptance(*jet)) {
1539 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), fJetDefinitions[ij].GetName());
1541 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), fJetDefinitions[ij].GetName());
1543 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), fJetDefinitions[ij].GetName());
1547 fCurrentJetInfo[ij]->Set(fDmesonJets[
id], fJetDefinitions[ij].GetName());
1554 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1556 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1557 fHistManager->FillTH1(hname, fDmesonJets[
id].fD.Phi_0_2pi());
1558 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1559 fHistManager->FillTH1(hname, fDmesonJets[
id].fD.Eta());
1561 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", GetName());
1565 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", GetName());
1566 fHistManager->FillTH1(hname, fDmesonJets[
id].fInvMass2Prong);
1568 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", GetName());
1569 fHistManager->FillTH1(hname, fDmesonJets[
id].fD.M() - fDmesonJets[id].fInvMass2Prong);
1583 for (Int_t
id = 0;
id < fDmesonJets.size();
id++) {
1584 if (!IsAnyJetInAcceptance(fDmesonJets[
id])) {
1585 hname = TString::Format(
"%s/fHistRejectedDMesonPt", GetName());
1587 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", GetName());
1588 fHistManager->FillTH1(hname, fDmesonJets[
id].fD.Phi_0_2pi());
1589 hname = TString::Format(
"%s/fHistRejectedDMesonEta", GetName());
1590 fHistManager->FillTH1(hname, fDmesonJets[
id].fD.Eta());
1594 for (std::vector<AliHFJetDefinition>::iterator itdef = fJetDefinitions.begin(); itdef != fJetDefinitions.end(); itdef++) {
1598 hname = TString::Format(
"%s/%s/fDmesonJets", GetName(), jetDef->
GetName());
1599 THnSparse* h =
static_cast<THnSparse*
>(
fHistManager->FindObject(hname));
1601 for (Int_t
id = 0;
id < fDmesonJets.size();
id++) {
1605 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", GetName(), jetDef->
GetName());
1607 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", GetName(), jetDef->
GetName());
1609 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", GetName(), jetDef->
GetName());
1613 FillHnSparse(h, fDmesonJets[
id], (*itdef).GetName());
1629 Double_t contents[30] = {0.};
1631 Double_t z = DmesonJet.
GetZ(n);
1632 Double_t deltaPhi = 0;
1633 Double_t deltaEta = 0;
1634 Double_t deltaR = DmesonJet.
GetDistance(n, deltaEta, deltaPhi);
1636 std::map<std::string, AliJetInfo>::const_iterator it = DmesonJet.
fJets.find(n);
1637 if (it == DmesonJet.
fJets.end())
return kFALSE;
1639 for (Int_t i = 0; i < h->GetNdimensions(); i++) {
1640 TString
title(h->GetAxis(i)->GetTitle());
1641 if (
title==
"#it{p}_{T,D} (GeV/#it{c})") contents[i] = DmesonJet.
fD.Pt();
1642 else if (
title==
"#eta_{D}") contents[i] = DmesonJet.
fD.Eta();
1643 else if (
title==
"#phi_{D} (rad)") contents[i] = DmesonJet.
fD.Phi_0_2pi();
1645 else if (
title==
"#it{M}_{K#pi#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M();
1646 else if (
title==
"#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2})") contents[i] = DmesonJet.
fD.M() - DmesonJet.
fInvMass2Prong;
1647 else if (
title==
"#it{p}_{T,#pi} (GeV/#it{c})") contents[i] = DmesonJet.
fSoftPionPt;
1648 else if (
title==
"#it{z}_{D}") contents[i] = z;
1649 else if (
title==
"#Delta R_{D-jet}") contents[i] = deltaR;
1650 else if (
title==
"#eta_{D} - #eta_{jet}") contents[i] = deltaEta;
1651 else if (
title==
"#phi_{D} - #phi_{jet} (rad)") contents[i] = deltaPhi;
1652 else if (
title==
"#it{p}_{T,jet} (GeV/#it{c})") contents[i] = (*it).second.Pt();
1653 else if (
title==
"#eta_{jet}") contents[i] = (*it).second.Eta();
1654 else if (
title==
"#phi_{jet} (rad)") contents[i] = (*it).second.Phi_0_2pi();
1655 else if (
title==
"No. of constituents") contents[i] = (*it).second.fNConstituents;
1656 else AliWarning(Form(
"Unable to fill dimension '%s'!",
title.Data()));
1690 fEnabledAxis(k2ProngInvMass),
1691 fTreeOutput(kFALSE),
1693 fApplyKinematicCuts(kTRUE),
1715 TFile* filecuts = TFile::Open(cutfname);
1716 if (!filecuts || filecuts->IsZombie()) {
1717 ::Warning(
"AddTaskDmesonJets",
"Input file not found: will use std cuts.");
1722 analysiscuts =
dynamic_cast<AliRDHFCuts*
>(filecuts->Get(cutsname));
1723 if (!analysiscuts) {
1724 ::Warning(
"AddTaskDmesonJetCorr",
"Could not find analysis cuts '%s' in '%s'. Using std cuts.", cutsname.Data(), cutfname.Data());
1728 return analysiscuts;
1757 if (!cutfname.IsNull()) {
1762 cutsname =
"D0toKpiCuts";
1765 cutsname =
"DStartoKpipiCuts";
1781 ::Info(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"A new analysis engine '%s' has been added. The total number of analysis engines is %lu.", eng.
GetName(jetDef),
fAnalysisEngines.size());
1785 ::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());
1788 if (cuts && found_eng->
fRDHFCuts != 0) {
1789 ::Warning(
"AliAnalysisTaskDmesonJets::AddAnalysisEngine",
"D meson cuts were already defined for this D meson type. They will be overwritten.");
1807 ::Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
1818 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for task '%s' (%lu analysis engines)", GetName(),
fAnalysisEngines.size());
1821 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for analysis engine '%s' (%lu jet definitions)", param->
GetName(), param->
fJetDefinitions.size());
1827 hname = TString::Format(
"%s/fHistNAcceptedDmesons", param->
GetName());
1828 htitle = hname +
";Number of D accepted meson candidates;counts";
1829 h =
fHistManager.CreateTH1(hname, htitle, 51, -0.5, 50.5);
1831 hname = TString::Format(
"%s/fHistNDmesons", param->
GetName());
1832 htitle = hname +
";Number of D meson candidates;counts";
1833 h =
fHistManager.CreateTH1(hname, htitle, 101, -0.5, 100.5);
1835 hname = TString::Format(
"%s/fHistNEvents", param->
GetName());
1836 htitle = hname +
";Event status;counts";
1838 h->GetXaxis()->SetBinLabel(1,
"Accepted");
1839 h->GetXaxis()->SetBinLabel(2,
"Rejected");
1841 hname = TString::Format(
"%s/fHistEventRejectionReasons", param->
GetName());
1842 htitle = hname +
";Rejection reason;counts";
1845 hname = TString::Format(
"%s/fHistRejectedDMesonPt", param->
GetName());
1846 htitle = hname +
";#it{p}_{T,D} (GeV/#it{c});counts";
1849 hname = TString::Format(
"%s/fHistRejectedDMesonEta", param->
GetName());
1850 htitle = hname +
";#it{#eta}_{D};counts";
1853 hname = TString::Format(
"%s/fHistRejectedDMesonPhi", param->
GetName());
1854 htitle = hname +
";#it{#phi}_{D};counts";
1855 fHistManager.CreateTH1(hname, htitle, 200, 0, TMath::TwoPi());
1858 hname = TString::Format(
"%s/fHistRejectedDMesonInvMass", param->
GetName());
1859 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1866 hname = TString::Format(
"%s/fHistRejectedDMeson2ProngInvMass", param->
GetName());
1867 htitle = hname +
";#it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1871 Double_t D0mass = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1872 hname = TString::Format(
"%s/fHistRejectedDMesonDeltaInvMass", param->
GetName());
1873 htitle = hname +
";#it{M}_{K#pi#pi} - #it{M}_{K#pi} (GeV/#it{c}^{2});counts";
1880 ::Info(
"AliAnalysisTaskDmesonJets::UserCreateOutputObjects",
"Allocating histograms for jet definition '%s'", jetDef->
GetName());
1884 hname = TString::Format(
"%s/%s/fHistMCParticleRejectionReason", param->
GetName(), jetDef->
GetName());
1885 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
1886 h =
fHistManager.CreateTH2(hname, htitle, 32, 0, 32, 150, 0, 150);
1889 hname = TString::Format(
"%s/%s/fHistTrackRejectionReason", param->
GetName(), jetDef->
GetName());
1890 htitle = hname +
";Track rejection reason;#it{p}_{T,track} (GeV/#it{c});counts";
1891 h =
fHistManager.CreateTH2(hname, htitle, 32, 0, 32, 150, 0, 150);
1894 hname = TString::Format(
"%s/%s/fHistClusterRejectionReason", param->
GetName(), jetDef->
GetName());
1895 htitle = hname +
";Cluster rejection reason;#it{p}_{T,cluster} (GeV/#it{c});counts";
1896 h =
fHistManager.CreateTH2(hname, htitle, 32, 0, 32, 150, 0, 150);
1899 hname = TString::Format(
"%s/%s/fHistDMesonDaughterNotInJet", param->
GetName(), jetDef->
GetName());
1900 htitle = hname +
";#it{p}_{T,track} (GeV/#it{c});counts";
1903 hname = TString::Format(
"%s/%s/fHistRejectedJetPt", param->
GetName(), jetDef->
GetName());
1904 htitle = hname +
";#it{p}_{T,jet} (GeV/#it{c});counts";
1907 hname = TString::Format(
"%s/%s/fHistRejectedJetEta", param->
GetName(), jetDef->
GetName());
1908 htitle = hname +
";#it{#eta}_{jet};counts";
1911 hname = TString::Format(
"%s/%s/fHistRejectedJetPhi", param->
GetName(), jetDef->
GetName());
1912 htitle = hname +
";#it{#phi}_{jet};counts";
1913 fHistManager.CreateTH1(hname, htitle, 200, 0, TMath::TwoPi());
1936 fAodEvent =
dynamic_cast<AliAODEvent*
>(fInputEvent);
1944 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
1959 if (!params->
fCandidateArray->GetClass()->InheritsFrom(
"AliAODRecoDecayHF2Prong")) {
1960 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
1961 "%s: Objects of type %s in %s are not inherited from AliAODRecoDecayHF2Prong! Task will be disabled!",
1968 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
1969 "Could not find candidate array '%s', skipping the event. Analysis engine '%s' will be disabled!",
1981 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
1982 "No MC particle container was provided. Analysis engine '%s' will be disabled!",
1995 ::Error(
"AliAnalysisTaskDmesonJets::ExecOnce",
1996 "No track container and no cluster container were provided. Analysis engine '%s' will be disabled!",
2015 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001)
return kFALSE;
2023 hname = TString::Format(
"%s/fHistNEvents", eng->
GetName());
2025 if (!iseventselected) {
2027 hname = TString::Format(
"%s/fHistEventRejectionReasons", eng->
GetName());
2032 if (label.IsNull())
break;
2041 AliDebug(2,
"Event selected");
2078 TParticlePDG* part = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg));
2080 Double_t
mass = part->Mass();
2083 if (nbins % 2 == 0) {
2084 minMass = mass - range / 2 - range / nbins / 2;
2085 maxMass = mass + range / 2 - range / nbins / 2;
2088 minMass = mass - range / 2;
2089 maxMass = mass + range / 2;
2100 static TString label;
2104 label =
"NotSelTrigger";
2106 return label.Data();
2111 return label.Data();
2114 label =
"TooFewVtxContrib";
2116 return label.Data();
2119 label =
"ZVtxOutFid";
2121 return label.Data();
2126 return label.Data();
2129 label =
"OutsideCentrality";
2131 return label.Data();
2134 label =
"PhysicsSelection";
2136 return label.Data();
2139 label =
"BadSPDVertex";
2141 return label.Data();
2144 label =
"ZVtxSPDOutFid";
2146 return label.Data();
2149 label =
"CentralityFlattening";
2151 return label.Data();
2154 label =
"BadTrackV0Correl";
2156 return label.Data();
2159 return label.Data();
void Print() const
Prints the content of this object in the standard output.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Bool_t FillTree(Bool_t applyKinCuts)
Analysis task for D meson jets.
virtual void Set(const AliDmesonJetInfo &source)
Invariant mass of the D0 meson candidate in GeV/c2.
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.
THistManager * fHistManager
! Histograms
void RunAnalysis()
Run the analysis.
Lightweight class that encapsulates D meson jets.
Bool_t FillHnSparse(Bool_t applyKinCuts)
Bool_t fTreeOutput
If true, output will be posted in a TTree rather than a THnSparse.
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, ...)
Base task in the EMCAL framework.
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 fMinBinPt
min pt in histograms
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
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 SetRecombScheme(const fastjet::RecombinationScheme &scheme)
const char * GetName() const
AnalysisEngine()
This is the default constructor, used for ROOT I/O purposes.
TList * fOutput
!output list
void Init(const AliEMCALGeometry *const geom, Int_t runNumber)
Initialize the analysis engine.
static FJRecoScheme ConvertToFJRecoScheme(ERecoScheme_t reco)
static TString GenerateJetName(EJetType_t jetType, EJetAlgo_t jetAlgo, ERecoScheme_t recoScheme, Double_t radius, AliParticleContainer *partCont, AliClusterContainer *clusCont, TString tag)
AliAODEvent * fAodEvent
! AOD event
Select tracks based on specific prescriptions of HF analysis.
ECandidateType_t fCandidateType
Candidate type.
static EMesonOrigin_t CheckOrigin(AliAODMCParticle *part, TClonesArray *mcArray)
Double_t GetDistance(std::string n, Double_t &deta, Double_t &dphi) const
AliParticleContainer * GetParticleContainer(Int_t i=0) const
virtual Bool_t AcceptObject(Int_t i, UInt_t &rejectionReason) const =0
virtual void Set(const AliDmesonJetInfo &source)
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
EJetType_t fJetType
Jet type (charged, full, neutral)
virtual void Set(const AliDmesonJetInfo &source)
AliTLorentzVector fD
! 4-momentum of the D meson candidate
UShort_t GetRejectionReasonBitPosition(UInt_t rejectionReason) const
AliAnalysisTaskDmesonJets()
This is the default constructor, used for ROOT I/O purposes.
AliClusterContainer * fClusterContainer
! Cluster container
virtual void Reset()
Reset the current object.
AliEMCALGeometry * fGeom
!emcal geometry
AnalysisEngine & operator=(const AnalysisEngine &source)
Struct that encapsulates analysis parameters.
std::vector< AliHFJetDefinition >::iterator FindJetDefinition(const AliHFJetDefinition &eng)
Double_t fRadius
Jet radius.
void SetAlgorithm(const fastjet::JetAlgorithm &algor)
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Base class for container structures within the EMCAL framework.
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)
virtual Bool_t GetMomentum(TLorentzVector &mom, Int_t i) const =0
static EMesonDecayChannel_t CheckDecayChannel(AliAODMCParticle *part, TClonesArray *mcArray)
Int_t fNMassBins
Mass number of bins.
EJetAcceptanceType_t fAcceptance
Jet acceptance.
Double_t fMaxMass
Max mass in histogram axis.
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)
virtual void Clear(const Option_t *="")
Bool_t fInhibit
Inhibit the task.
UInt_t GetEventRejectionBitMap() const
Bool_t ExtractDstarAttributes(const AliAODRecoCascadeHF *DstarCand, AliDmesonJetInfo &DmesonJet, UInt_t i)
const AliJetInfo * GetJet(std::string n) const
void BuildHnSparse(UInt_t enabledAxis, Int_t nBins, Double_t minBinPt, Double_t maxBinPt)
TClonesArray * fCandidateArray
! D meson candidate array
vector< AliHFJetDefinition > fJetDefinitions
Jet definitions.
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.
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)
Bool_t IsEventSelected(AliVEvent *event)
Class that encapsulates jets.
std::map< std::string, AliJetInfo > fJets
! list of jets
Double_t fMaxBinPt
max pt in histograms
virtual ~AnalysisEngine()
void RunParticleLevelAnalysis()
Run a particle level analysis.
void SetMakeGeneralHistograms(Bool_t g)
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 ExtractRecoDecayAttributes(const AliAODRecoDecayHF2Prong *Dcand, AliDmesonJetInfo &DmesonJet, UInt_t i)
Double_t InvMassD0() const
list< AnalysisEngine > fAnalysisEngines
Array of analysis parameters.
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="")
void SetRejectionReasonLabels(TAxis *axis)
void UserCreateOutputObjects()
Int_t GetNEntries() const
TString fBranchName
AOD branch where the D meson candidate are found.
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)
AliHFAODMCParticleContainer * fMCContainer
! MC particle container
AliFJWrapper * fFastJetWrapper
! Fastjet wrapper
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.
AliHFTrackContainer * fTrackContainer
! Track container
Bool_t IsAnyJetInAcceptance(const AliDmesonJetInfo &dMesonJet) const
Int_t fNbins
no. of pt bins
AliFJWrapper * fFastJetWrapper
! Fastjet wrapper
THistManager fHistManager
Histogram manager.
void Reset()
Reset all fields to their default values.
virtual void Set(const AliDmesonJetInfo &source, std::string n)
Double_t fMinMass
Min mass in histogram axis.