diff --git a/PWGJE/Tasks/jetTaggerHFQA.cxx b/PWGJE/Tasks/jetTaggerHFQA.cxx index 37ac50220e9..b47b81cf714 100644 --- a/PWGJE/Tasks/jetTaggerHFQA.cxx +++ b/PWGJE/Tasks/jetTaggerHFQA.cxx @@ -71,6 +71,7 @@ struct JetTaggerHFQA { Configurable pTHatMaxMCD{"pTHatMaxMCD", 999.0, "maximum fraction of hard scattering for jet acceptance in detector MC"}; Configurable pTHatMaxMCP{"pTHatMaxMCP", 999.0, "maximum fraction of hard scattering for jet acceptance in particle MC"}; Configurable pTHatExponent{"pTHatExponent", 6.0, "exponent of the event weight for the calculation of pTHat"}; + Configurable pTHatAbsoluteMin{"pTHatAbsoluteMin", -99.0, "minimum value of pTHat"}; Configurable jetAreaFractionMin{"jetAreaFractionMin", -99.0, "used to make a cut on the jet areas"}; Configurable leadingConstituentPtMin{"leadingConstituentPtMin", -99.0, "minimum pT selection on jet constituent"}; Configurable leadingConstituentPtMax{"leadingConstituentPtMax", 9999.0, "maximum pT selection on jet constituent"}; @@ -198,6 +199,17 @@ struct JetTaggerHFQA { registry.add("h3_part_jet_pt_flavour_const_hadron_part_flavour_dist_hadron", "", {HistType::kTH3F, {{axisJetPt}, {axisJetFlavour}, {axisJetFlavour}}}); registry.add("h3_part_jet_pt_flavour_const_quark_part_flavour_dist_quark", "", {HistType::kTH3F, {{axisJetPt}, {axisJetFlavour}, {axisJetFlavour}}}); } + if (doprocessResponseMatrix || doprocessResponseMatrixWeighted) { + registry.add("h2_jet_pt_flavour", "", {HistType::kTH2F, {{axisJetPt}, {axisJetFlavour}}}); + registry.add("h2_jet_eta_flavour", "", {HistType::kTH2F, {{axisEta}, {axisJetFlavour}}}); + registry.add("h2_jet_phi_flavour", "", {HistType::kTH2F, {{axisPhi}, {axisJetFlavour}}}); + registry.add("h3_jet_pt_jet_pt_part_matchedgeo_flavour", "", {HistType::kTH3F, {{axisMCDJetPt}, {axisMCPJetPt}, {axisJetFlavour}}}); + } + if (doprocessMCP || doprocessMCPWeighted) { + registry.add("h2_jet_pt_part_flavour", "", {HistType::kTH2F, {{axisJetPt}, {axisJetFlavour}}}); + registry.add("h2_jet_eta_part_flavour", "", {HistType::kTH2F, {{axisEta}, {axisJetFlavour}}}); + registry.add("h2_jet_phi_part_flavour", "", {HistType::kTH2F, {{axisPhi}, {axisJetFlavour}}}); + } if (doprocessIPsData) { registry.add("h_jet_pt", "", {HistType::kTH1F, {{axisJetPt}}}); registry.add("h_jet_eta", "", {HistType::kTH1F, {{axisEta}}}); @@ -305,14 +317,7 @@ struct JetTaggerHFQA { } } } - if (doprocessIPsMCP || doprocessIPsMCPWeighted) { - registry.add("h2_jet_pt_part_flavour", "", {HistType::kTH2F, {{axisJetPt}, {axisJetFlavour}}}); - registry.add("h2_jet_eta_part_flavour", "", {HistType::kTH2F, {{axisEta}, {axisJetFlavour}}}); - registry.add("h2_jet_phi_part_flavour", "", {HistType::kTH2F, {{axisPhi}, {axisJetFlavour}}}); - } - if (doprocessIPsMCPMCDMatched || doprocessIPsMCPMCDMatchedWeighted) { - registry.add("h3_jet_pt_jet_pt_part_matchedgeo_flavour", "", {HistType::kTH3F, {{axisMCDJetPt}, {axisMCPJetPt}, {axisJetFlavour}}}); - } + if (doprocessJPData) { if (!doprocessIPsData && !doprocessSV2ProngData && !doprocessSV3ProngData) { registry.add("h_jet_pt", "", {HistType::kTH1F, {{axisJetPt}}}); @@ -482,6 +487,7 @@ struct JetTaggerHFQA { // Filter trackCuts = (aod::jtrack::pt >= trackCuts->at(0) && aod::jtrack::pt < trackCuts->at(1) && aod::jtrack::eta > trackCuts->at(2) && aod::jtrack::eta < trackCuts->at(3)); Filter eventCuts = (nabs(aod::jcollision::posZ) < vertexZCut); PresliceUnsorted> collisionsPerMCPCollision = aod::jmccollisionlb::mcCollisionId; + PresliceUnsorted> McCollisionsPerMCPCollision = aod::jmccollision::mcCollisionId; Preslice particlesPerCollision = aod::jmcparticle::mcCollisionId; using JetTagTracksData = soa::Join; @@ -876,10 +882,9 @@ struct JetTaggerHFQA { } template - void fillHistogramIPsMCP(T const& mcpjet, float eventWeight = 1.0) + void fillHistogramMCP(T const& mcpjet, float eventWeight = 1.0, float pTHat = 999.) { - float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent)); - if (mcpjet.pt() > pTHatMaxMCP * pTHat) { + if (mcpjet.pt() > pTHatMaxMCP * pTHat || pTHat < pTHatAbsoluteMin) { return; } int jetflavour = mcpjet.origin(); @@ -944,13 +949,13 @@ struct JetTaggerHFQA { if (jet.pt() > pTHatMaxMCD * pTHat) { return; } - if (jet.template secondaryVertices_as().size() < 1) - return; if (!doprocessIPsData && !doprocessJPData && !doprocessSV3ProngData) { registry.fill(HIST("h_jet_pt"), jet.pt(), eventWeight); registry.fill(HIST("h_jet_eta"), jet.eta(), eventWeight); registry.fill(HIST("h_jet_phi"), jet.phi(), eventWeight); } + if (jet.template secondaryVertices_as().size() < 1) + return; if (fillGeneralSVQA) { registry.fill(HIST("h_2prong_nprongs"), jet.template secondaryVertices_as().size()); for (const auto& prong : jet.template secondaryVertices_as()) { @@ -999,13 +1004,13 @@ struct JetTaggerHFQA { if (jet.pt() > pTHatMaxMCD * pTHat) { return; } - if (jet.template secondaryVertices_as().size() < 1) - return; if (!doprocessIPsData && !doprocessJPData && !doprocessSV2ProngData) { registry.fill(HIST("h_jet_pt"), jet.pt(), eventWeight); registry.fill(HIST("h_jet_eta"), jet.eta(), eventWeight); registry.fill(HIST("h_jet_phi"), jet.phi(), eventWeight); } + if (jet.template secondaryVertices_as().size() < 1) + return; if (fillGeneralSVQA) { registry.fill(HIST("h_3prong_nprongs"), jet.template secondaryVertices_as().size()); for (const auto& prong : jet.template secondaryVertices_as()) { @@ -1098,13 +1103,13 @@ struct JetTaggerHFQA { return; } auto origin = mcdjet.origin(); - if (mcdjet.template secondaryVertices_as().size() < 1) - return; if (!((doprocessIPsMCD || doprocessIPsMCDWeighted || doprocessIPsMCPMCDMatched || doprocessIPsMCPMCDMatchedWeighted) && (doprocessJPMCD || doprocessJPMCDWeighted || doprocessJPMCPMCDMatched || doprocessJPMCPMCDMatchedWeighted) && (doprocessSV3ProngMCD || doprocessSV3ProngMCDWeighted || doprocessSV3ProngMCPMCDMatched || doprocessSV3ProngMCPMCDMatchedWeighted))) { registry.fill(HIST("h2_jet_pt_flavour"), mcdjet.pt(), origin, eventWeight); registry.fill(HIST("h2_jet_eta_flavour"), mcdjet.eta(), origin, eventWeight); registry.fill(HIST("h2_jet_phi_flavour"), mcdjet.phi(), origin, eventWeight); } + if (mcdjet.template secondaryVertices_as().size() < 1) + return; if (fillGeneralSVQA) { registry.fill(HIST("h2_2prong_nprongs_flavour"), mcdjet.template secondaryVertices_as().size(), origin, eventWeight); for (const auto& prong : mcdjet.template secondaryVertices_as()) { @@ -1154,13 +1159,13 @@ struct JetTaggerHFQA { return; } auto origin = mcdjet.origin(); - if (mcdjet.template secondaryVertices_as().size() < 1) - return; if (!((doprocessIPsMCD || doprocessIPsMCDWeighted || doprocessIPsMCPMCDMatched || doprocessIPsMCPMCDMatchedWeighted) && (doprocessJPMCD || doprocessJPMCDWeighted || doprocessJPMCPMCDMatched || doprocessJPMCPMCDMatchedWeighted) && (doprocessSV2ProngMCD || doprocessSV2ProngMCDWeighted || doprocessSV2ProngMCPMCDMatched || doprocessSV2ProngMCPMCDMatchedWeighted))) { registry.fill(HIST("h2_jet_pt_flavour"), mcdjet.pt(), origin, eventWeight); registry.fill(HIST("h2_jet_eta_flavour"), mcdjet.eta(), origin, eventWeight); registry.fill(HIST("h2_jet_phi_flavour"), mcdjet.phi(), origin, eventWeight); } + if (mcdjet.template secondaryVertices_as().size() < 1) + return; if (fillGeneralSVQA) { registry.fill(HIST("h2_3prong_nprongs_flavour"), mcdjet.template secondaryVertices_as().size(), origin); for (const auto& prong : mcdjet.template secondaryVertices_as()) { @@ -1307,11 +1312,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processTracksInJetsData, "Fill QA comtamination of secondary-track inside jets for data jets", false); - void processSecondaryContaminationMCD(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& /*tracks*/, aod::JetParticles const& /*particles*/) + void processSecondaryContaminationMCD(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& /*tracks*/, aod::JetParticles const& /*particles*/) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1319,7 +1327,8 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - float pTHat = 10. / (std::pow(mcdjet.eventWeight(), 1.0 / pTHatExponent)); + auto eventWeight = collision.mcCollision_as>().weight(); + float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent)); if (mcdjet.pt() > pTHatMaxMCD * pTHat) { continue; } @@ -1333,25 +1342,28 @@ struct JetTaggerHFQA { auto mcParticle = track.mcParticle(); totalJetPt += track.pt(); if (mcParticle.isPhysicalPrimary()) { - registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_physical_primary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, mcdjet.eventWeight()); + registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_physical_primary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, eventWeight); } else { - registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_secondary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, mcdjet.eventWeight()); + registry.fill(HIST("hn_jet_pt_track_pt_impact_parameter_xy_secondary_flavour"), mcdjet.pt(), track.pt(), varImpXY, jetflavour, eventWeight); secondaryPt += track.pt(); } } if (totalJetPt > 0) { float fracSecondary = secondaryPt / totalJetPt; - registry.fill(HIST("h3_jet_pt_frac_secondary_pt_per_jet_flavour"), mcdjet.pt(), fracSecondary, jetflavour, mcdjet.eventWeight()); + registry.fill(HIST("h3_jet_pt_frac_secondary_pt_per_jet_flavour"), mcdjet.pt(), fracSecondary, jetflavour, eventWeight); } } } PROCESS_SWITCH(JetTaggerHFQA, processSecondaryContaminationMCD, "Fill QA comtamination of secondary-track inside jets for mcd jets", false); - void processValFlavourDefMCD(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) + void processValFlavourDefMCD(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { auto const particlesPerColl = particles.sliceBy(particlesPerCollision, collision.mcCollisionId()); if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { @@ -1360,13 +1372,15 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillValidationFlavourDefMCD>(mcdjet, tracks, particles, particlesPerColl, mcdjet.eventWeight()); + auto eventWeight = collision.mcCollision_as>().weight(); + fillValidationFlavourDefMCD>(mcdjet, tracks, particles, particlesPerColl, eventWeight); } } PROCESS_SWITCH(JetTaggerHFQA, processValFlavourDefMCD, "to check the validation of jet-flavour definition when compared to distance for mcd jets", false); - void processValFlavourDefMCP(soa::Join const& mcpjets, aod::JetParticles const& particles, aod::JetMcCollisions const&) + void processValFlavourDefMCP(aod::JetMcCollisions::iterator const& mcCollision, JetTableMCP const& mcpjets, aod::JetParticles const& particles) { + int eventWeight = mcCollision.weight(); for (auto const& mcpjet : mcpjets) { auto const particlesPerColl = particles.sliceBy(particlesPerCollision, mcpjet.globalIndex()); if (!jetfindingutilities::isInEtaAcceptance(mcpjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { @@ -1375,7 +1389,6 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcpjet)) { continue; } - int eventWeight = mcpjet.eventWeight(); float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent)); if (mcpjet.pt() > pTHatMaxMCD * pTHat) { return; @@ -1385,28 +1398,40 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processValFlavourDefMCP, "to check the validation of jet-flavour definition when compared to distance for mcp jets", false); - void processIPsData(soa::Filtered::iterator const& collision, soa::Join const& jets, JetTagTracksData const& tracks) + void processResponseMatrix(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } - for (auto const& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { + for (auto const& mcdjet : mcdjets) { + if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; } - if (!isAcceptedJet(jet)) { + if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramIPsData(jet, tracks); + auto jetflavour = mcdjet.origin(); + registry.fill(HIST("h2_jet_pt_flavour"), mcdjet.pt(), jetflavour); + registry.fill(HIST("h2_jet_eta_flavour"), mcdjet.eta(), jetflavour); + registry.fill(HIST("h2_jet_phi_flavour"), mcdjet.phi(), jetflavour); + if (!mcdjet.has_matchedJetGeo()) + continue; + for (auto const& mcpjet : mcdjet.template matchedJetGeo_as>()) { + registry.fill(HIST("h3_jet_pt_jet_pt_part_matchedgeo_flavour"), mcdjet.pt(), mcpjet.pt(), mcdjet.origin()); + } } } - PROCESS_SWITCH(JetTaggerHFQA, processIPsData, "Fill impact parameter imformation for data jets", false); + PROCESS_SWITCH(JetTaggerHFQA, processResponseMatrix, "create response matrix with flavour", false); - void processIPsMCD(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& tracks, aod::JetParticles const&) + void processResponseMatrixWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } + auto eventWeight = collision.weight(); for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1414,26 +1439,27 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramIPsMCD(mcdjet, tracks); - } - } - PROCESS_SWITCH(JetTaggerHFQA, processIPsMCD, "Fill impact parameter imformation for mcd jets", false); - - void processIPsMCDWeighted(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& tracks, aod::JetParticles const&) - { - if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { - return; - } - for (auto const& mcdjet : mcdjets) { - if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { + float pTHat = 10. / (std::pow(eventWeight, 1.0 / pTHatExponent)); + if (mcdjet.pt() > pTHatMaxMCD * pTHat) { continue; } - fillHistogramIPsMCD(mcdjet, tracks, mcdjet.eventWeight()); + auto jetflavour = mcdjet.origin(); + registry.fill(HIST("h2_jet_pt_flavour"), mcdjet.pt(), jetflavour); + registry.fill(HIST("h2_jet_eta_flavour"), mcdjet.eta(), jetflavour); + registry.fill(HIST("h2_jet_phi_flavour"), mcdjet.phi(), jetflavour); + if (!mcdjet.has_matchedJetGeo()) + continue; + for (auto const& mcpjet : mcdjet.template matchedJetGeo_as>()) { + if (mcpjet.pt() > pTHatMaxMCP * pTHat) { + continue; + } + registry.fill(HIST("h3_jet_pt_jet_pt_part_matchedgeo_flavour"), mcdjet.pt(), mcpjet.pt(), mcdjet.origin(), eventWeight); + } } } - PROCESS_SWITCH(JetTaggerHFQA, processIPsMCDWeighted, "Fill impact parameter imformation for mcd jets", false); + PROCESS_SWITCH(JetTaggerHFQA, processResponseMatrixWeighted, "create response matrix with flavour weighted", false); - void processIPsMCP(JetTableMCP const& mcpjets, aod::JetParticles const&, aod::JetMcCollisions const&, soa::Filtered const& collisions) + void processMCP(JetTableMCP const& mcpjets, aod::JetParticles const&, soa::Join const& mcCollisions, soa::Filtered const& collisions) { for (auto const& mcpjet : mcpjets) { if (!jetfindingutilities::isInEtaAcceptance(mcpjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { @@ -1442,19 +1468,20 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcpjet)) { continue; } + auto mcCollision = mcCollisions.sliceBy(McCollisionsPerMCPCollision, mcpjet.mcCollisionId()); if (checkMcCollisionIsMatched) { auto collisionspermcpjet = collisions.sliceBy(collisionsPerMCPCollision, mcpjet.mcCollisionId()); if (collisionspermcpjet.size() >= 1 && jetderiveddatautilities::selectCollision(collisionspermcpjet.begin(), eventSelectionBits)) { - fillHistogramIPsMCP(mcpjet); + fillHistogramMCP(mcpjet, 1., mcCollision.begin().ptHard()); } } else { - fillHistogramIPsMCP(mcpjet); + fillHistogramMCP(mcpjet, 1., mcCollision.begin().ptHard()); } } } - PROCESS_SWITCH(JetTaggerHFQA, processIPsMCP, "Fill impact parameter imformation for mcp jets", false); + PROCESS_SWITCH(JetTaggerHFQA, processMCP, "Fill impact parameter imformation for mcp jets", false); - void processIPsMCPWeighted(soa::Join const& mcpjets, soa::Filtered const& collisions, aod::JetParticles const&) + void processMCPWeighted(JetTableMCP const& mcpjets, aod::JetParticles const&, soa::Join const& mcCollisions, soa::Filtered> const& collisions) { for (auto const& mcpjet : mcpjets) { if (!jetfindingutilities::isInEtaAcceptance(mcpjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { @@ -1463,19 +1490,70 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcpjet)) { continue; } - if (checkMcCollisionIsMatched) { - auto collisionspermcpjet = collisions.sliceBy(collisionsPerMCPCollision, mcpjet.mcCollisionId()); - if (collisionspermcpjet.size() >= 1 && jetderiveddatautilities::selectCollision(collisionspermcpjet.begin(), eventSelectionBits)) { - fillHistogramIPsMCP(mcpjet, mcpjet.eventWeight()); + auto mcCollision = mcCollisions.sliceBy(McCollisionsPerMCPCollision, mcpjet.mcCollisionId()); + if (mcCollision.size() == 1) { + if (checkMcCollisionIsMatched) { + auto collisionspermcpjet = collisions.sliceBy(collisionsPerMCPCollision, mcpjet.mcCollisionId()); + if (collisionspermcpjet.size() >= 1 && jetderiveddatautilities::selectCollision(collisionspermcpjet.begin(), eventSelectionBits) && !collisionspermcpjet.begin().isOutlier()) { + fillHistogramMCP(mcpjet, mcCollision.begin().weight(), mcCollision.begin().ptHard()); + } + } else { + fillHistogramMCP(mcpjet, mcCollision.begin().weight(), mcCollision.begin().ptHard()); } - } else { - fillHistogramIPsMCP(mcpjet, mcpjet.eventWeight()); } } } - PROCESS_SWITCH(JetTaggerHFQA, processIPsMCPWeighted, "Fill impact parameter imformation for mcp jets weighted", false); + PROCESS_SWITCH(JetTaggerHFQA, processMCPWeighted, "Fill impact parameter imformation for mcp jets weighted", false); + + void processIPsData(soa::Filtered::iterator const& collision, soa::Join const& jets, JetTagTracksData const& tracks) + { + if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { + return; + } + for (auto const& jet : jets) { + if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { + continue; + } + if (!isAcceptedJet(jet)) { + continue; + } + fillHistogramIPsData(jet, tracks); + } + } + PROCESS_SWITCH(JetTaggerHFQA, processIPsData, "Fill impact parameter imformation for data jets", false); + + void processIPsMCD(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& tracks, aod::JetParticles const&) + { + if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { + return; + } + for (auto const& mcdjet : mcdjets) { + if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { + continue; + } + if (!isAcceptedJet(mcdjet)) { + continue; + } + fillHistogramIPsMCD(mcdjet, tracks); + } + } + PROCESS_SWITCH(JetTaggerHFQA, processIPsMCD, "Fill impact parameter imformation for mcd jets", false); - void processIPsMCPMCDMatched(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) + void processIPsMCDWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const& tracks, aod::JetParticles const&) + { + if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { + return; + } + for (auto const& mcdjet : mcdjets) { + if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { + continue; + } + fillHistogramIPsMCD(mcdjet, tracks, collision.weight()); + } + } + PROCESS_SWITCH(JetTaggerHFQA, processIPsMCDWeighted, "Fill impact parameter imformation for mcd jets", false); + + void processIPsMCPMCDMatched(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; @@ -1490,20 +1568,20 @@ struct JetTaggerHFQA { } if (!mcdjet.has_matchedJetGeo()) continue; - for (auto const& mcpjet : mcdjet.template matchedJetGeo_as>()) { - registry.fill(HIST("h3_jet_pt_jet_pt_part_matchedgeo_flavour"), mcdjet.pt(), mcpjet.pt(), mcdjet.origin()); - } if (!doprocessIPsMCD) fillHistogramIPsMCD(mcdjet, tracks); } } PROCESS_SWITCH(JetTaggerHFQA, processIPsMCPMCDMatched, "Fill impact parameter imformation for mcp mcd matched jets", false); - void processIPsMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) + void processIPsMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const& tracks, aod::JetParticles const& particles) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { auto const particlesPerColl = particles.sliceBy(particlesPerCollision, collision.mcCollisionId()); if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { @@ -1514,18 +1592,12 @@ struct JetTaggerHFQA { } if (!mcdjet.has_matchedJetGeo()) continue; - float pTHat = 10. / (std::pow(mcdjet.eventWeight(), 1.0 / pTHatExponent)); + float pTHat = 10. / (std::pow(collision.weight(), 1.0 / pTHatExponent)); if (mcdjet.pt() > pTHatMaxMCD * pTHat) { continue; } - for (auto const& mcpjet : mcdjet.template matchedJetGeo_as>()) { - if (mcpjet.pt() > pTHatMaxMCP * pTHat) { - continue; - } - registry.fill(HIST("h3_jet_pt_jet_pt_part_matchedgeo_flavour"), mcdjet.pt(), mcpjet.pt(), mcdjet.origin(), mcdjet.eventWeight()); - } if (!doprocessIPsMCDWeighted) - fillHistogramIPsMCD(mcdjet, tracks, mcdjet.eventWeight()); + fillHistogramIPsMCD(mcdjet, tracks, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processIPsMCPMCDMatchedWeighted, "Fill impact parameter imformation for mcp mcd matched jets", false); @@ -1564,11 +1636,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processJPMCD, "Fill jet probability imformation for mcd jets", false); - void processJPMCDWeighted(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const&) + void processJPMCDWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, JetTagTracksMCD const&) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1576,7 +1651,7 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramJPMCD(mcdjet, mcdjet.eventWeight()); + fillHistogramJPMCD(mcdjet, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processJPMCDWeighted, "Fill jet probability imformation for mcd jets", false); @@ -1601,11 +1676,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processJPMCPMCDMatched, "Fill jet probability imformation for mcd jets", false); - void processJPMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const&) + void processJPMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, JetTagTracksMCD const&) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1616,7 +1694,7 @@ struct JetTaggerHFQA { if (!mcdjet.has_matchedJetGeo()) return; if (!doprocessJPMCDWeighted) - fillHistogramJPMCD(mcdjet, mcdjet.eventWeight()); + fillHistogramJPMCD(mcdjet, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processJPMCPMCDMatchedWeighted, "Fill jet probability imformation for mcd jets", false); @@ -1693,11 +1771,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV2ProngMCD, "Fill 2prong imformation for mcd jets", false); - void processSV2ProngMCDWeighted(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex2Prongs const& prongs) + void processSV2ProngMCDWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex2Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1705,7 +1786,7 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramSV2ProngMCD(mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV2ProngMCD(mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV2ProngMCDWeighted, "Fill 2prong imformation for mcd jets", false); @@ -1731,11 +1812,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV2ProngMCPMCDMatched, "Fill 2prong imformation for mcd jets", false); - void processSV2ProngMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex2Prongs const& prongs) + void processSV2ProngMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex2Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1747,7 +1831,7 @@ struct JetTaggerHFQA { continue; } if (!doprocessSV2ProngMCDWeighted) - fillHistogramSV2ProngMCD(mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV2ProngMCD(mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV2ProngMCPMCDMatchedWeighted, "Fill 2prong imformation for mcd jets", false); @@ -1769,11 +1853,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCD, "Fill 3prong imformation for mcd jets", false); - void processSV3ProngMCDWeighted(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex3Prongs const& prongs) + void processSV3ProngMCDWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex3Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1781,7 +1868,7 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramSV3ProngMCD(mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV3ProngMCD(mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCDWeighted, "Fill 3prong imformation for mcd jets", false); @@ -1807,11 +1894,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCPMCDMatched, "Fill 3prong imformation for mcd jets", false); - void processSV3ProngMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex3Prongs const& prongs) + void processSV3ProngMCPMCDMatchedWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex3Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } for (auto const& mcdjet : mcdjets) { if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaCuts->at(0), jetEtaCuts->at(1), trackCuts->at(2), trackCuts->at(3))) { continue; @@ -1823,7 +1913,7 @@ struct JetTaggerHFQA { continue; } if (!doprocessSV3ProngMCDWeighted) - fillHistogramSV3ProngMCD(mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV3ProngMCD(mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCPMCDMatchedWeighted, "Fill 3prong imformation for mcd jets", false); @@ -1849,11 +1939,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCDMult, "Fill 3prong imformation for mcd jets with multiplicity", false); - void processSV3ProngMCDMultWeighted(soa::Filtered::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex3Prongs const& prongs) + void processSV3ProngMCDMultWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, aod::MCDSecondaryVertex3Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } float multFT0A = collision.multFT0A(); float multFT0C = collision.multFT0C(); float scaledFT0M = getScaledFT0M(multFT0A, multFT0C); @@ -1865,7 +1958,7 @@ struct JetTaggerHFQA { if (!isAcceptedJet(mcdjet)) { continue; } - fillHistogramSV3ProngMCDMult(collision, mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV3ProngMCDMult(collision, mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCDMultWeighted, "Fill 3prong imformation for mcd jets with multiplicity weighted", false); @@ -1895,11 +1988,14 @@ struct JetTaggerHFQA { } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCPMCDMatchedMult, "Fill 3prong imformation for mcd jets matched with multiplicity", false); - void processSV3ProngMCPMCDMatchedMultWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex3Prongs const& prongs) + void processSV3ProngMCPMCDMatchedMultWeighted(soa::Filtered>::iterator const& collision, soa::Join const& mcdjets, soa::Join const& /*mcpjets*/, aod::MCDSecondaryVertex3Prongs const& prongs) { if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } + if (collision.isOutlier()) { + return; + } float multFT0A = collision.multFT0A(); float multFT0C = collision.multFT0C(); float scaledFT0M = getScaledFT0M(multFT0A, multFT0C); @@ -1915,7 +2011,7 @@ struct JetTaggerHFQA { continue; } if (!doprocessSV3ProngMCDMultWeighted) - fillHistogramSV3ProngMCDMult(collision, mcdjet, prongs, mcdjet.eventWeight()); + fillHistogramSV3ProngMCDMult(collision, mcdjet, prongs, collision.weight()); } } PROCESS_SWITCH(JetTaggerHFQA, processSV3ProngMCPMCDMatchedMultWeighted, "Fill 3prong imformation for mcd jets matched with multiplicity weightd", false);