Skip to content

Commit 0587298

Browse files
authored
[PWGJE] Add secondary track's contamination inside jet (#12514)
1 parent 8fecdfa commit 0587298

File tree

1 file changed

+92
-12
lines changed

1 file changed

+92
-12
lines changed

PWGJE/Tasks/jetTaggerHFQA.cxx

Lines changed: 92 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ struct JetTaggerHFQA {
127127
// Axis
128128
AxisSpec axisJetFlavour = {binJetFlavour, "Jet flavour"};
129129
AxisSpec axisJetPt = {binJetPt, "#it{p}_{T, jet}"};
130+
AxisSpec axisMCDJetPt = {binJetPt, "#it{p}_{T, jet}^{rec}"};
131+
AxisSpec axisMCPJetPt = {binJetPt, "#it{p}_{T, jet}^{gen}"};
130132
AxisSpec axisEta = {binEta, "#eta"};
131133
AxisSpec axisPhi = {binPhi, "#phi"};
132134
AxisSpec axisNTracks = {binNtracks, "#it{N}_{tracks}"};
@@ -149,6 +151,7 @@ struct JetTaggerHFQA {
149151
AxisSpec axisMass = {binMass, "#it{m}_{SV}"};
150152
AxisSpec axisSigmaLxy = {binSigmaLxy, "#sigma_{L_{XY}} [cm]"};
151153
AxisSpec axisSigmaLxyz = {binSigmaLxyz, "#sigma_{L_{XYZ}} [cm]"};
154+
AxisSpec axisFracSecPt = {100, 0, 1, "#frac{#Sigma#it{p}_{T}^{secondary track}}{#it{p}_{T, jet}}"};
152155

153156
if (doprocessTracksDca) {
154157
if (fillIPxy) {
@@ -164,6 +167,14 @@ struct JetTaggerHFQA {
164167
registry.add("h_impact_parameter_xyz_significance", "", {HistType::kTH1F, {{axisImpactParameterXYZSignificance}}});
165168
}
166169
}
170+
if (doprocessTracksInJetsData) {
171+
registry.add("h3_track_pt_impact_parameter_xy", "", {HistType::kTH3F, {{axisJetPt}, {axisTrackPt}, {axisImpactParameterXY}}});
172+
}
173+
if (doprocessSecondaryContaminationMCD) {
174+
registry.add("hn_jet_pt_track_pt_impact_parameter_xy_physical_primary_flavour", "", {HistType::kTHnSparseF, {{axisJetPt}, {axisTrackPt}, {axisImpactParameterXY}, {axisJetFlavour}}});
175+
registry.add("hn_jet_pt_track_pt_impact_parameter_xy_secondary_flavour", "", {HistType::kTHnSparseF, {{axisJetPt}, {axisTrackPt}, {axisImpactParameterXY}, {axisJetFlavour}}});
176+
registry.add("h3_jet_pt_frac_secondary_pt_per_jet_flavour", "", {HistType::kTH3F, {{axisJetPt}, {axisFracSecPt}, {axisJetFlavour}}});
177+
}
167178
if (doprocessValFlavourDefMCD) {
168179
registry.add("h2_flavour_dist_quark_flavour_dist_hadron", "", {HistType::kTH2F, {{axisJetFlavour}, {axisJetFlavour}}});
169180
registry.add("h2_flavour_const_quark_flavour_const_hadron", "", {HistType::kTH2F, {{axisJetFlavour}, {axisJetFlavour}}});
@@ -289,7 +300,7 @@ struct JetTaggerHFQA {
289300
registry.add("h2_jet_phi_part_flavour", "", {HistType::kTH2F, {{axisPhi}, {axisJetFlavour}}});
290301
}
291302
if (doprocessIPsMCPMCDMatched || doprocessIPsMCPMCDMatchedWeighted) {
292-
registry.add("h3_jet_pt_jet_pt_part_matchedgeo_flavour", "", {HistType::kTH3F, {{axisJetPt}, {axisJetPt}, {axisJetFlavour}}});
303+
registry.add("h3_jet_pt_jet_pt_part_matchedgeo_flavour", "", {HistType::kTH3F, {{axisMCDJetPt}, {axisMCPJetPt}, {axisJetFlavour}}});
293304
}
294305
if (doprocessJPData) {
295306
if (!doprocessIPsData && !doprocessSV2ProngData && !doprocessSV3ProngData) {
@@ -435,14 +446,17 @@ struct JetTaggerHFQA {
435446
template <typename T, typename U>
436447
bool isAcceptedJet(U const& jet)
437448
{
438-
if (jetAreaFractionMin > -98.0) {
449+
const float noJetAreaFractionFilter = -98.0;
450+
const float noConstituentPtMinFilter = -98.0;
451+
const float noConstituentPtMaxFilter = 9998.0;
452+
if (jetAreaFractionMin > noJetAreaFractionFilter) {
439453
if (jet.area() < jetAreaFractionMin * o2::constants::math::PI * (jet.r() / 100.0) * (jet.r() / 100.0)) {
440454
return false;
441455
}
442456
}
443457
bool checkConstituentPt = true;
444-
bool checkConstituentMinPt = (leadingConstituentPtMin > -98.0);
445-
bool checkConstituentMaxPt = (leadingConstituentPtMax < 9998.0);
458+
bool checkConstituentMinPt = (leadingConstituentPtMin > noConstituentPtMinFilter);
459+
bool checkConstituentMaxPt = (leadingConstituentPtMax < noConstituentPtMaxFilter);
446460
if (!checkConstituentMinPt && !checkConstituentMaxPt) {
447461
checkConstituentPt = false;
448462
}
@@ -520,6 +534,9 @@ struct JetTaggerHFQA {
520534
template <typename T, typename U>
521535
void fillHistogramIPsData(T const& jet, U const& /*tracks*/)
522536
{
537+
std::size_t firstTaggerForTrackCounting = 0;
538+
std::size_t secondTaggerForTrackCounting = 1;
539+
std::size_t thirdTaggerForTrackCounting = 2;
523540
float eventWeight = 1.0;
524541
float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent));
525542
if (jet.pt() > pTHatMaxMCD * pTHat) {
@@ -585,23 +602,23 @@ struct JetTaggerHFQA {
585602
if (fillIPxyz)
586603
std::sort(vecSignImpXYZSig.begin(), vecSignImpXYZSig.end(), sortImp);
587604

588-
if (vecSignImpXYSig.size() > 0) { // N1
605+
if (vecSignImpXYSig.size() > firstTaggerForTrackCounting) { // N1
589606
if (fillIPxy)
590607
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_xy_significance_N1"), jet.pt(), vecSignImpXYSig[0][0]);
591608
if (fillIPz)
592609
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_z_significance_N1"), jet.pt(), vecSignImpZSig[0][0]);
593610
if (fillIPxyz)
594611
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_xyz_significance_N1"), jet.pt(), vecSignImpXYZSig[0][0]);
595612
}
596-
if (vecSignImpXYSig.size() > 1) { // N2
613+
if (vecSignImpXYSig.size() > secondTaggerForTrackCounting) { // N2
597614
if (fillIPxy)
598615
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_xy_significance_N2"), jet.pt(), vecSignImpXYSig[1][0]);
599616
if (fillIPz)
600617
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_z_significance_N2"), jet.pt(), vecSignImpZSig[1][0]);
601618
if (fillIPxyz)
602619
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_xyz_significance_N2"), jet.pt(), vecSignImpXYZSig[1][0]);
603620
}
604-
if (vecSignImpXYSig.size() > 2) { // N3
621+
if (vecSignImpXYSig.size() > thirdTaggerForTrackCounting) { // N3
605622
if (fillIPxy)
606623
registry.fill(HIST("h2_jet_pt_sign_impact_parameter_xy_significance_N3"), jet.pt(), vecSignImpXYSig[2][0]);
607624
if (fillIPz)
@@ -638,6 +655,9 @@ struct JetTaggerHFQA {
638655
template <typename T, typename U>
639656
void fillHistogramIPsMCD(T const& mcdjet, U const& /*tracks*/, float eventWeight = 1.0)
640657
{
658+
std::size_t firstTaggerForTrackCounting = 0;
659+
std::size_t secondTaggerForTrackCounting = 1;
660+
std::size_t thirdTaggerForTrackCounting = 2;
641661
float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent));
642662
if (mcdjet.pt() > pTHatMaxMCD * pTHat) {
643663
return;
@@ -739,23 +759,23 @@ struct JetTaggerHFQA {
739759
sort(vecSignImpZSig[jetflavour].begin(), vecSignImpZSig[jetflavour].end(), std::greater<float>());
740760
sort(vecSignImpXYZSig[jetflavour].begin(), vecSignImpXYZSig[jetflavour].end(), std::greater<float>());
741761

742-
if (vecImpXY[jetflavour].size() > 0) { // N1
762+
if (vecImpXY[jetflavour].size() > firstTaggerForTrackCounting) { // N1
743763
if (fillIPxy)
744764
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_xy_significance_flavour_N1"), mcdjet.pt(), vecSignImpXYSig[jetflavour][0], jetflavour, eventWeight);
745765
if (fillIPz)
746766
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_z_significance_flavour_N1"), mcdjet.pt(), vecSignImpZSig[jetflavour][0], jetflavour, eventWeight);
747767
if (fillIPxyz)
748768
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_xyz_significance_flavour_N1"), mcdjet.pt(), vecSignImpXYZSig[jetflavour][0], jetflavour, eventWeight);
749769
}
750-
if (vecImpXY[jetflavour].size() > 1) { // N2
770+
if (vecImpXY[jetflavour].size() > secondTaggerForTrackCounting) { // N2
751771
if (fillIPxy)
752772
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_xy_significance_flavour_N2"), mcdjet.pt(), vecSignImpXYSig[jetflavour][1], jetflavour, eventWeight);
753773
if (fillIPz)
754774
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_z_significance_flavour_N2"), mcdjet.pt(), vecSignImpZSig[jetflavour][1], jetflavour, eventWeight);
755775
if (fillIPxyz)
756776
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_xyz_significance_flavour_N2"), mcdjet.pt(), vecSignImpXYZSig[jetflavour][1], jetflavour, eventWeight);
757777
}
758-
if (vecImpXY[jetflavour].size() > 2) { // N3
778+
if (vecImpXY[jetflavour].size() > thirdTaggerForTrackCounting) { // N3
759779
if (fillIPxy)
760780
registry.fill(HIST("h3_jet_pt_sign_impact_parameter_xy_significance_flavour_N3"), mcdjet.pt(), vecSignImpXYSig[jetflavour][2], jetflavour, eventWeight);
761781
if (fillIPz)
@@ -1093,6 +1113,66 @@ struct JetTaggerHFQA {
10931113
}
10941114
PROCESS_SWITCH(JetTaggerHFQA, processTracksDca, "Fill inclusive tracks' imformation for data", false);
10951115

1116+
void processTracksInJetsData(soa::Filtered<aod::JetCollisions>::iterator const& collision, soa::Join<JetTableData, TagTableData> const& jets)
1117+
{
1118+
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
1119+
return;
1120+
}
1121+
for (auto const& jet : jets) {
1122+
if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) {
1123+
continue;
1124+
}
1125+
if (!isAcceptedJet<aod::JetTracks>(jet)) {
1126+
continue;
1127+
}
1128+
for (auto const& track : jet.template tracks_as<JetTagTracksMCD>()) {
1129+
float varImpXY = track.dcaXY() * jettaggingutilities::cmTomum;
1130+
registry.fill(HIST("h2_track_pt_impact_parameter_xy"), track.pt(), varImpXY);
1131+
}
1132+
}
1133+
}
1134+
PROCESS_SWITCH(JetTaggerHFQA, processTracksInJetsData, "Fill QA comtamination of secondary-track inside jets for data jets", false);
1135+
1136+
void processSecondaryContaminationMCD(soa::Filtered<soa::Join<aod::JetCollisions, aod::JCollisionPIs, aod::JMcCollisionLbs>>::iterator const& collision, soa::Join<JetTableMCD, TagTableMCD, weightMCD> const& mcdjets, JetTagTracksMCD const& /*tracks*/, aod::JetParticles const& /*particles*/)
1137+
{
1138+
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
1139+
return;
1140+
}
1141+
for (auto const& mcdjet : mcdjets) {
1142+
if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) {
1143+
continue;
1144+
}
1145+
if (!isAcceptedJet<aod::JetTracks>(mcdjet)) {
1146+
continue;
1147+
}
1148+
float pTHat = 10. / (std::pow(mcdjet.eventWeight(), 1.0 / pTHatExponent));
1149+
if (mcdjet.pt() > pTHatMaxMCD * pTHat) {
1150+
continue;
1151+
}
1152+
int jetflavour = mcdjet.origin();
1153+
float secondaryPt = 0;
1154+
float totalJetPt = 0;
1155+
for (auto const& track : mcdjet.template tracks_as<JetTagTracksMCD>()) {
1156+
float varImpXY = track.dcaXY() * jettaggingutilities::cmTomum;
1157+
if (!track.has_mcParticle())
1158+
continue;
1159+
auto mcParticle = track.mcParticle();
1160+
totalJetPt += track.pt();
1161+
if (mcParticle.isPhysicalPrimary()) {
1162+
registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_physical_primary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, mcdjet.eventWeight());
1163+
} else {
1164+
registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_secondary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, mcdjet.eventWeight());
1165+
secondaryPt += track.pt();
1166+
}
1167+
}
1168+
if (totalJetPt > 0) {
1169+
float fracSecondary = secondaryPt / totalJetPt;
1170+
registry.fill(HIST("h3_jet_pt_frac_secondary_pt_per_jet_flavour"), mcdjet.pt(), fracSecondary, jetflavour, mcdjet.eventWeight());
1171+
}
1172+
}
1173+
}
1174+
PROCESS_SWITCH(JetTaggerHFQA, processSecondaryContaminationMCD, "Fill QA comtamination of secondary-track inside jets for mcd jets", false);
1175+
10961176
void processValFlavourDefMCD(soa::Filtered<soa::Join<aod::JCollisions, aod::JCollisionPIs, aod::JMcCollisionLbs>>::iterator const& collision, soa::Join<JetTableMCD, TagTableMCD, JetTableMCDMCP, weightMCD> const& mcdjets, soa::Join<JetTableMCP, JetTableMCPMCD> const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles)
10971177
{
10981178
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
@@ -1558,10 +1638,10 @@ using JetTaggerQAChargedDataJets = soa::Join<aod::ChargedJets, aod::ChargedJetCo
15581638
using JetTaggerQAChargedMCDJets = soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetFlavourDef>;
15591639
using JetTaggerQAChargedMCPJets = soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetFlavourDef>;
15601640

1561-
using JetTaggerhfQACharged = JetTaggerHFQA<JetTaggerQAChargedDataJets, aod::ChargedJetTags, JetTaggerQAChargedMCDJets, aod::ChargedMCDetectorLevelJetEventWeights, aod::ChargedMCDetectorLevelJetTags, JetTaggerQAChargedMCPJets, aod::ChargedMCParticleLevelJetEventWeights, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>;
1641+
using JetTaggerhfQaCharged = JetTaggerHFQA<JetTaggerQAChargedDataJets, aod::ChargedJetTags, JetTaggerQAChargedMCDJets, aod::ChargedMCDetectorLevelJetEventWeights, aod::ChargedMCDetectorLevelJetTags, JetTaggerQAChargedMCPJets, aod::ChargedMCParticleLevelJetEventWeights, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>;
15621642

15631643
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
15641644
{
15651645
return WorkflowSpec{
1566-
adaptAnalysisTask<JetTaggerhfQACharged>(cfgc, TaskName{"jet-taggerhf-qa-charged"})}; // o2-linter: disable=name/o2-task
1646+
adaptAnalysisTask<JetTaggerhfQaCharged>(cfgc, TaskName{"jet-taggerhf-qa-charged"})}; // o2-linter: disable=name/o2-task (templated struct)
15671647
}

0 commit comments

Comments
 (0)