Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 44 additions & 40 deletions PWGJE/Tasks/hfFragmentationFunction.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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"
//
Expand Down Expand Up @@ -237,8 +237,8 @@ struct HfFragmentationFunction {
PROCESS_SWITCH(HfFragmentationFunction, processDummy, "Dummy process function turned on by default", true);

template <typename TJets, typename TCandidates>
void analyzeData(aod::JetCollision const& collision,
TJets const& jets,
void analyzeData(aod::JetCollision const& collision,
TJets const& jets,
TCandidates const&,
aod::JetTracks const&)
{
Expand Down Expand Up @@ -290,17 +290,19 @@ struct HfFragmentationFunction {
} // end of analyzeData function

void processD0DataCharged(aod::JetCollision const& collision,
soa::Join<aod::D0ChargedJets, aod::D0ChargedJetConstituents> const& jets,
aod::CandidatesD0Data const& candidates,
aod::JetTracks const& jettracks) {
soa::Join<aod::D0ChargedJets, aod::D0ChargedJetConstituents> const& jets,
aod::CandidatesD0Data const& candidates,
aod::JetTracks const& jettracks)
{
analyzeData<soa::Join<aod::D0ChargedJets, aod::D0ChargedJetConstituents>, 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<aod::LcChargedJets, aod::LcChargedJetConstituents> const& jets,
aod::CandidatesLcData const& candidates,
aod::JetTracks const& jettracks) {
soa::Join<aod::LcChargedJets, aod::LcChargedJetConstituents> const& jets,
aod::CandidatesLcData const& candidates,
aod::JetTracks const& jettracks)
{
analyzeData<soa::Join<aod::LcChargedJets, aod::LcChargedJetConstituents>, aod::CandidatesLcData>(collision, jets, candidates, jettracks);
}
PROCESS_SWITCH(HfFragmentationFunction, processLcDataCharged, "Store kinematic charged Lc jet information from measured DATA", false);
Expand Down Expand Up @@ -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
Expand All @@ -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<TJetsMCD>()) {
registry.fill(HIST("h_jet_counter"), 2.0);

// apply collision sel8 selection on detector level jet's collision
//const auto& collision = mcdjet.get<aod::JetCollisionsMCD>();
// const auto& collision = mcdjet.get<aod::JetCollisionsMCD>();
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)) {
Expand Down Expand Up @@ -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<aod::JetParticles>().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<aod::JetTracks>().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<aod::JetParticles>().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<aod::JetTracks>().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<aod::JetParticles>().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<aod::JetParticles>().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<Preslice<JetD0MCPTable>, 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<Preslice<JetLcMCPTable>, 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)
Expand Down