@@ -52,6 +52,10 @@ using namespace o2::framework::expressions;
5252
5353struct JetHadronRecoil {
5454
55+ using JetParticlesWithOriginal = soa::Join<aod::JetParticles, aod::JMcParticlePIs>;
56+
57+ Preslice<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> perColJetMC = aod::jet::mcCollisionId;
58+
5559 std::vector<fastjet::PseudoJet> jetConstituents;
5660 std::vector<fastjet::PseudoJet> jetReclustered;
5761 JetFinder jetReclusterer;
@@ -617,9 +621,11 @@ struct JetHadronRecoil {
617621 }
618622
619623 template <typename T, typename U, typename X, typename Y>
620- void fillMatchedHistograms (T const &, U const & jetsTag, X const & tracks, Y const & particles, float weight = 1.0 , float rho = 0.0 , float pTHat = 999.0 )
624+ void fillMatchedHistograms (T const & jetsBase , U const & jetsTag, X const & tracks, Y const & particles, float weight = 1.0 , float rho = 0.0 , float pTHat = 999.0 , auto collisionID = 0 )
621625 {
622- for (const auto & jetTag : jetsTag) {
626+ const auto jetsTagColl = jetsTag.sliceBy (perColJetMC, collisionID);
627+
628+ for (const auto & jetTag : jetsTagColl) {
623629
624630 if (jetTag.pt () > pTHatMaxMCP * pTHat) {
625631 if (outlierRejectEvent) {
@@ -630,19 +636,30 @@ struct JetHadronRecoil {
630636 }
631637
632638 registry.fill (HIST (" hPtTruth1D" ), jetTag.pt (), weight);
639+ }
633640
634- double dR = getWTAaxisDifference (jetTag, particles);
635- if (jetTag.has_matchedJetGeo ()) {
636- for (const auto & jetBase : jetTag.template matchedJetGeo_as <std::decay_t <T>>()) {
637- if (jetBase.pt () > pTHatMaxMCD * pTHat) {
641+ for (const auto & jetBase : jetsBase) {
642+
643+ if (jetBase.pt () > pTHatMaxMCD * pTHat) {
644+ if (outlierRejectEvent) {
645+ return ;
646+ } else {
647+ continue ;
648+ }
649+ }
650+
651+ double dR = getWTAaxisDifference (jetBase, tracks);
652+ if (jetBase.has_matchedJetGeo ()) {
653+ for (const auto & jetTag : jetBase.template matchedJetGeo_as <std::decay_t <U>>()) {
654+ if (jetTag.pt () > pTHatMaxMCP * pTHat) {
638655 if (outlierRejectEvent) {
639656 return ;
640657 } else {
641658 continue ;
642659 }
643660 }
644661
645- double dRp = getWTAaxisDifference (jetBase, tracks );
662+ double dRp = getWTAaxisDifference (jetTag, particles );
646663
647664 registry.fill (HIST (" hPtMatched" ), jetBase.pt () - (rho * jetBase.area ()), jetTag.pt (), weight);
648665 registry.fill (HIST (" hPhiMatched" ), jetBase.phi (), jetTag.phi (), weight);
@@ -944,131 +961,99 @@ struct JetHadronRecoil {
944961 }
945962 PROCESS_SWITCH (JetHadronRecoil, processMCPOnTheFlyWeighted, " process MC particle level for on-the-fly simulations with event weights" , false );
946963
947- void processJetsMCPMCDMatched (aod::JetMcCollisions:: iterator const & mccollision ,
948- soa::SmallGroups< aod::JetCollisionsMCD> const & collisions ,
964+ void processJetsMCPMCDMatched (soa::Filtered<soa::Join< aod::JetCollisions, aod::JMcCollisionLbs>>:: iterator const & collision ,
965+ aod::JMcCollisions const &,
949966 soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const & mcdjets,
950- soa::Filtered<aod::JetParticles> const & particles,
951967 soa::Filtered<aod::JetTracksMCD> const & tracks,
952- soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets)
968+ soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets,
969+ JetParticlesWithOriginal const & particles)
953970 {
954- if (std::abs (mccollision. posZ ()) > vertexZCut ) {
971+ if (! jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections) ) {
955972 return ;
956973 }
957- if (!jetderiveddatautilities::selectMcCollision (mccollision, skipMBGapEvents, applyRCTSelections )) {
974+ if (!collision. has_mcCollision ( )) {
958975 return ;
959976 }
960- if (mccollision .ptHard () < pTHatMinEvent) {
977+ if (collision. mcCollision () .ptHard () < pTHatMinEvent) {
961978 return ;
962979 }
963- if (collisions. size () < 1 ) {
980+ if (! jetderiveddatautilities::selectTrigger (collision, triggerMaskBits) ) {
964981 return ;
965982 }
966- for (auto const & collision : collisions) {
967- if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
968- return ;
969- }
970- if (!jetderiveddatautilities::selectTrigger (collision, triggerMaskBits)) {
971- return ;
972- }
973- }
974- registry.fill (HIST (" hZvtxSelected" ), mccollision.posZ ());
975- fillMatchedHistograms (mcdjets, mcpjets, tracks, particles);
983+ registry.fill (HIST (" hZvtxSelected" ), collision.posZ ());
984+ fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, 1.0 , 0.0 , collision.mcCollision ().ptHard (), collision.mcCollisionId ());
976985 }
977986 PROCESS_SWITCH (JetHadronRecoil, processJetsMCPMCDMatched, " process MC matched (inc jets)" , false );
978987
979- void processJetsMCPMCDMatchedWithRhoSubtraction (soa::Join<aod::JetMcCollisions , aod::BkgChargedRhos>::iterator const & mccollision ,
980- soa::SmallGroups< aod::JetCollisionsMCD> const & collisions ,
988+ void processJetsMCPMCDMatchedWithRhoSubtraction (soa::Filtered<soa:: Join<aod::JetCollisions , aod::JMcCollisionLbs, aod:: BkgChargedRhos>> ::iterator const & collision ,
989+ aod::JMcCollisions const &,
981990 soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const & mcdjets,
982991 soa::Filtered<aod::JetTracksMCD> const & tracks,
983- soa::Filtered<aod::JetParticles> const & particles ,
984- soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets )
992+ soa::Filtered<soa::Join< aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets ,
993+ JetParticlesWithOriginal const & particles )
985994 {
986- if (std::abs (mccollision. posZ ()) > vertexZCut ) {
995+ if (! jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections) ) {
987996 return ;
988997 }
989- if (!jetderiveddatautilities::selectMcCollision (mccollision, skipMBGapEvents, applyRCTSelections )) {
998+ if (!collision. has_mcCollision ( )) {
990999 return ;
9911000 }
992- if (mccollision .ptHard () < pTHatMinEvent) {
1001+ if (collision. mcCollision () .ptHard () < pTHatMinEvent) {
9931002 return ;
9941003 }
995- if (collisions. size () < 1 ) {
1004+ if (! jetderiveddatautilities::selectTrigger (collision, triggerMaskBits) ) {
9961005 return ;
9971006 }
998- for (auto const & collision : collisions) {
999- if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
1000- return ;
1001- }
1002- if (!jetderiveddatautilities::selectTrigger (collision, triggerMaskBits)) {
1003- return ;
1004- }
1005- }
1006- registry.fill (HIST (" hZvtxSelected" ), mccollision.posZ ());
1007- fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, 1.0 , 0.0 , mccollision.ptHard ());
1007+ registry.fill (HIST (" hZvtxSelected" ), collision.posZ ());
1008+ fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, 1.0 , collision.rho (), collision.mcCollision ().ptHard (), collision.mcCollisionId ());
10081009 }
10091010 PROCESS_SWITCH (JetHadronRecoil, processJetsMCPMCDMatchedWithRhoSubtraction, " process MC matched (inc jets) with rho subtraction" , false );
10101011
1011- void processJetsMCPMCDMatchedWeighted (aod::JetMcCollisions:: iterator const & mccollision ,
1012- soa::SmallGroups< aod::JetCollisionsMCD> const & collisions ,
1012+ void processJetsMCPMCDMatchedWeighted (soa::Filtered<soa::Join< aod::JetCollisions, aod::JMcCollisionLbs>>:: iterator const & collision ,
1013+ aod::JMcCollisions const &,
10131014 soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const & mcdjets,
10141015 soa::Filtered<aod::JetTracksMCD> const & tracks,
1015- soa::Filtered<aod::JetParticles> const & particles ,
1016- soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets )
1016+ soa::Filtered<soa::Join< aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets ,
1017+ JetParticlesWithOriginal const & particles )
10171018 {
1018- if (std::abs (mccollision. posZ ()) > vertexZCut ) {
1019+ if (! jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections) ) {
10191020 return ;
10201021 }
1021- if (!jetderiveddatautilities::selectMcCollision (mccollision, skipMBGapEvents, applyRCTSelections )) {
1022+ if (!collision. has_mcCollision ( )) {
10221023 return ;
10231024 }
1024- if (mccollision .ptHard () < pTHatMinEvent) {
1025+ if (collision. mcCollision () .ptHard () < pTHatMinEvent) {
10251026 return ;
10261027 }
1027- if (collisions. size () < 1 ) {
1028+ if (! jetderiveddatautilities::selectTrigger (collision, triggerMaskBits) ) {
10281029 return ;
10291030 }
1030- for (auto const & collision : collisions) {
1031- if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
1032- return ;
1033- }
1034- if (!jetderiveddatautilities::selectTrigger (collision, triggerMaskBits)) {
1035- return ;
1036- }
1037- }
1038- registry.fill (HIST (" hZvtxSelected" ), mccollision.posZ (), mccollision.weight ());
1039- fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, mccollision.weight (), 0.0 , mccollision.ptHard ());
1031+ registry.fill (HIST (" hZvtxSelected" ), collision.posZ ());
1032+ fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, collision.mcCollision ().weight (), 0.0 , collision.mcCollision ().ptHard (), collision.mcCollisionId ());
10401033 }
10411034 PROCESS_SWITCH (JetHadronRecoil, processJetsMCPMCDMatchedWeighted, " process MC matched with event weights (inc jets)" , false );
10421035
1043- void processJetsMCPMCDMatchedWeightedWithRhoSubtraction (soa::Join<aod::JetMcCollisions , aod::BkgChargedRhos>::iterator const & mccollision ,
1044- soa::SmallGroups< aod::JetCollisionsMCD> const & collisions ,
1036+ void processJetsMCPMCDMatchedWeightedWithRhoSubtraction (soa::Filtered<soa:: Join<aod::JetCollisions , aod::JMcCollisionLbs, aod:: BkgChargedRhos>> ::iterator const & collision ,
1037+ aod::JMcCollisions const &,
10451038 soa::Filtered<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>> const & mcdjets,
10461039 soa::Filtered<aod::JetTracksMCD> const & tracks,
1047- soa::Filtered<aod::JetParticles> const & particles ,
1048- soa::Filtered<soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets )
1040+ soa::Filtered<soa::Join< aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>> const & mcpjets ,
1041+ JetParticlesWithOriginal const & particles )
10491042 {
1050- if (std::abs (mccollision. posZ ()) > vertexZCut ) {
1043+ if (! jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections) ) {
10511044 return ;
10521045 }
1053- if (!jetderiveddatautilities::selectMcCollision (mccollision, skipMBGapEvents, applyRCTSelections )) {
1046+ if (!collision. has_mcCollision ( )) {
10541047 return ;
10551048 }
1056- if (mccollision .ptHard () < pTHatMinEvent) {
1049+ if (collision. mcCollision () .ptHard () < pTHatMinEvent) {
10571050 return ;
10581051 }
1059- if (collisions. size () < 1 ) {
1052+ if (! jetderiveddatautilities::selectTrigger (collision, triggerMaskBits) ) {
10601053 return ;
10611054 }
1062- for (auto const & collision : collisions) {
1063- if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits)) {
1064- return ;
1065- }
1066- if (!jetderiveddatautilities::selectTrigger (collision, triggerMaskBits)) {
1067- return ;
1068- }
1069- }
1070- registry.fill (HIST (" hZvtxSelected" ), mccollision.posZ (), mccollision.weight ());
1071- fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, mccollision.weight (), mccollision.rho (), mccollision.ptHard ());
1055+ registry.fill (HIST (" hZvtxSelected" ), collision.posZ ());
1056+ fillMatchedHistograms (mcdjets, mcpjets, tracks, particles, collision.mcCollision ().weight (), collision.rho (), collision.mcCollision ().ptHard (), collision.mcCollisionId ());
10721057 }
10731058 PROCESS_SWITCH (JetHadronRecoil, processJetsMCPMCDMatchedWeightedWithRhoSubtraction, " process MC matched with event weights (inc jets) and rho subtraction" , false );
10741059
0 commit comments