diff --git a/PWGJE/Tasks/hfFragmentationFunction.cxx b/PWGJE/Tasks/hfFragmentationFunction.cxx index 7e8d67b5cc7..4234cb955d3 100644 --- a/PWGJE/Tasks/hfFragmentationFunction.cxx +++ b/PWGJE/Tasks/hfFragmentationFunction.cxx @@ -18,8 +18,8 @@ /// profile and/or jet momentum fraction for charmed hadrons #include "PWGJE/Core/JetDerivedDataUtilities.h" -#include "PWGJE/Core/JetUtilities.h" #include "PWGJE/Core/JetHFUtilities.h" +#include "PWGJE/Core/JetUtilities.h" #include "PWGJE/DataModel/Jet.h" #include "PWGJE/DataModel/JetReducedData.h" // @@ -237,8 +237,8 @@ struct HfFragmentationFunction { PROCESS_SWITCH(HfFragmentationFunction, processDummy, "Dummy process function turned on by default", true); template - void analyzeData(aod::JetCollision const& collision, - TJets const& jets, + void analyzeData(aod::JetCollision const& collision, + TJets const& jets, TCandidates const&, aod::JetTracks const&) { @@ -290,17 +290,19 @@ struct HfFragmentationFunction { } // end of analyzeData function void processD0DataCharged(aod::JetCollision const& collision, - soa::Join const& jets, - aod::CandidatesD0Data const& candidates, - aod::JetTracks const& jettracks) { + soa::Join const& jets, + aod::CandidatesD0Data const& candidates, + aod::JetTracks const& jettracks) + { analyzeData, aod::CandidatesD0Data>(collision, jets, candidates, jettracks); } PROCESS_SWITCH(HfFragmentationFunction, processD0DataCharged, "Store kinematic charged D0 jet information from measured DATA", false); void processLcDataCharged(aod::JetCollision const& collision, - soa::Join const& jets, - aod::CandidatesLcData const& candidates, - aod::JetTracks const& jettracks) { + soa::Join const& jets, + aod::CandidatesLcData const& candidates, + aod::JetTracks const& jettracks) + { analyzeData, aod::CandidatesLcData>(collision, jets, candidates, jettracks); } PROCESS_SWITCH(HfFragmentationFunction, processLcDataCharged, "Store kinematic charged Lc jet information from measured DATA", false); @@ -404,7 +406,8 @@ struct HfFragmentationFunction { TCandidatesMCD const&, TCandidatesMCP const&, aod::JetTracks const&, - aod::JetParticles const&) { + aod::JetParticles const&) + { for (const auto& mccollision : mccollisions) { registry.fill(HIST("h_collision_counter"), 0.0); // skip collisions outside of |z| < vertexZCut @@ -424,13 +427,13 @@ struct HfFragmentationFunction { if (mcpjet.has_matchedJetCand()) { registry.fill(HIST("h_jet_counter"), 1.0); - + // loop over detector level matched to current particle level for (const auto& mcdjet : mcpjet.template matchedJetCand_as()) { registry.fill(HIST("h_jet_counter"), 2.0); // apply collision sel8 selection on detector level jet's collision - //const auto& collision = mcdjet.get(); + // const auto& collision = mcdjet.get(); const auto& collision = collisions.iteratorAt(mcdjet.collisionId()); registry.fill(HIST("h_collision_counter"), 2.0); if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits) || !(std::abs(collision.posZ()) < vertexZCut)) { @@ -462,52 +465,53 @@ struct HfFragmentationFunction { } else if (mcdcand.candidateSelFlag() & BIT(1)) { // CandidateSelFlag == BIT(1) -> selected as HFbar selectedAs = -1; } - + // store matched particle and detector level data in one single table (calculate angular distance in eta-phi plane on the fly) - matchJetTable(jetutilities::deltaR(mcpjet, mcpcand), mcpjet.pt(), mcpjet.eta(), mcpjet.phi(), mcpjet.template tracks_as().size(), // particle level jet - mcpcand.pt(), mcpcand.eta(), mcpcand.phi(), mcpcand.y(), (mcpcand.originMcGen() == RecoDecay::OriginType::Prompt), // particle level HF - jetutilities::deltaR(mcdjet, mcdcand), mcdjet.pt(), mcdjet.eta(), mcdjet.phi(), mcdjet.template tracks_as().size(), // detector level jet - mcdcand.pt(), mcdcand.eta(), mcdcand.phi(), mcdcand.m(), mcdcand.y(), (mcdcand.originMcRec() == RecoDecay::OriginType::Prompt), // detector level HF - mcdcand.mlScores()[0], mcdcand.mlScores()[1], mcdcand.mlScores()[2], // Machine Learning PID scores: background, prompt, non-prompt - matchedFrom, selectedAs); // HF = +1, HFbar = -1, neither = 0 + matchJetTable(jetutilities::deltaR(mcpjet, mcpcand), mcpjet.pt(), mcpjet.eta(), mcpjet.phi(), mcpjet.template tracks_as().size(), // particle level jet + mcpcand.pt(), mcpcand.eta(), mcpcand.phi(), mcpcand.y(), (mcpcand.originMcGen() == RecoDecay::OriginType::Prompt), // particle level HF + jetutilities::deltaR(mcdjet, mcdcand), mcdjet.pt(), mcdjet.eta(), mcdjet.phi(), mcdjet.template tracks_as().size(), // detector level jet + mcdcand.pt(), mcdcand.eta(), mcdcand.phi(), mcdcand.m(), mcdcand.y(), (mcdcand.originMcRec() == RecoDecay::OriginType::Prompt), // detector level HF + mcdcand.mlScores()[0], mcdcand.mlScores()[1], mcdcand.mlScores()[2], // Machine Learning PID scores: background, prompt, non-prompt + matchedFrom, selectedAs); // HF = +1, HFbar = -1, neither = 0 } } else { // store matched particle and detector level data in one single table (calculate angular distance in eta-phi plane on the fly) - matchJetTable(jetutilities::deltaR(mcpjet, mcpcand), mcpjet.pt(), mcpjet.eta(), mcpjet.phi(), mcpjet.template tracks_as().size(), // particle level jet - mcpcand.pt(), mcpcand.eta(), mcpcand.phi(), mcpcand.y(), (mcpcand.originMcGen() == RecoDecay::OriginType::Prompt), // particle level HF - -2, -2, -2, -2, -2, // detector level jet - -2, -2, -2, -2, -2, -2, // detector level HF - -2, -2, -2, // Machine Learning PID scores: background, prompt, non-prompt - -2, -2); // HF = +1, HFbar = -1, neither = 0 + matchJetTable(jetutilities::deltaR(mcpjet, mcpcand), mcpjet.pt(), mcpjet.eta(), mcpjet.phi(), mcpjet.template tracks_as().size(), // particle level jet + mcpcand.pt(), mcpcand.eta(), mcpcand.phi(), mcpcand.y(), (mcpcand.originMcGen() == RecoDecay::OriginType::Prompt), // particle level HF + -2, -2, -2, -2, -2, // detector level jet + -2, -2, -2, -2, -2, -2, // detector level HF + -2, -2, -2, // Machine Learning PID scores: background, prompt, non-prompt + -2, -2); // HF = +1, HFbar = -1, neither = 0 } } // end of mcpjets loop } // end of mccollisions loop } // end of analyzeMC function void processD0MC(aod::JetMcCollisions const& mccollisions, - aod::JetCollisionsMCD const& collisions, - JetD0MCDTable const& mcdjets, - JetD0MCPTable const& mcpjets, - aod::CandidatesD0MCD const& mcdcands, - aod::CandidatesD0MCP const& mcpcands, - aod::JetTracks const& jettracks, - aod::JetParticles const& jetparticles) { + aod::JetCollisionsMCD const& collisions, + JetD0MCDTable const& mcdjets, + JetD0MCPTable const& mcpjets, + aod::CandidatesD0MCD const& mcdcands, + aod::CandidatesD0MCP const& mcpcands, + aod::JetTracks const& jettracks, + aod::JetParticles const& jetparticles) + { analyzeMC, JetD0MCDTable, JetD0MCPTable, aod::CandidatesD0MCD, aod::CandidatesD0MCP>(d0MCPJetsPerMCCollisionPreslice, mccollisions, collisions, mcdjets, mcpjets, mcdcands, mcpcands, jettracks, jetparticles); } PROCESS_SWITCH(HfFragmentationFunction, processD0MC, "Store all simulated D0 jets information with matched candidate (if any found)", false); void processLcMC(aod::JetMcCollisions const& mccollisions, - aod::JetCollisionsMCD const& collisions, - JetLcMCDTable const& mcdjets, - JetLcMCPTable const& mcpjets, - aod::CandidatesLcMCD const& mcdcands, - aod::CandidatesLcMCP const& mcpcands, - aod::JetTracks const& jettracks, - aod::JetParticles const& jetparticles) { + aod::JetCollisionsMCD const& collisions, + JetLcMCDTable const& mcdjets, + JetLcMCPTable const& mcpjets, + aod::CandidatesLcMCD const& mcdcands, + aod::CandidatesLcMCP const& mcpcands, + aod::JetTracks const& jettracks, + aod::JetParticles const& jetparticles) + { analyzeMC, JetLcMCDTable, JetLcMCPTable, aod::CandidatesLcMCD, aod::CandidatesLcMCP>(lcMCPJetsPerMCCollisionPreslice, mccollisions, collisions, mcdjets, mcpjets, mcdcands, mcpcands, jettracks, jetparticles); } PROCESS_SWITCH(HfFragmentationFunction, processLcMC, "Store all simulated Lc jets information with matched candidate (if any found)", false); - }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)