@@ -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
15581638using JetTaggerQAChargedMCDJets = soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetFlavourDef>;
15591639using 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
15631643WorkflowSpec 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