Skip to content
Merged
Show file tree
Hide file tree
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
5 changes: 5 additions & 0 deletions PWGJE/TableProducer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ o2physics_add_dpl_workflow(jet-finder-d0-data-charged
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore O2::FrameworkPhysicsSupport
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(jet-finder-lc-data-charged
SOURCES jetfinderLcDataCharged.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore O2::FrameworkPhysicsSupport
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(jet-skimmer
SOURCES jetskimming.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
Expand Down
4 changes: 2 additions & 2 deletions PWGJE/TableProducer/jetfinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
using JetTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection>>;
using JetClusters = o2::soa::Filtered<o2::aod::EMCALClusters>;

using JetParticles2Prong = soa::Filtered<soa::Join<aod::McParticles, aod::HfCand2ProngMcGen>>;
using JetParticles3Prong = soa::Filtered<soa::Join<aod::McParticles, aod::HfCand3ProngMcGen>>;
using JetParticlesD0 = soa::Filtered<soa::Join<aod::McParticles, aod::HfCand2ProngMcGen>>;
using JetParticlesLc = soa::Filtered<soa::Join<aod::McParticles, aod::HfCand3ProngMcGen>>;
using JetParticlesBplus = soa::Filtered<soa::Join<aod::McParticles, aod::HfCandBplusMcGen>>;

using CandidateD0Data = soa::Filtered<soa::Join<aod::HfCand2Prong, aod::HfSelD0>>;
Expand Down
29 changes: 29 additions & 0 deletions PWGJE/TableProducer/jetfinderLcDataCharged.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

// jet finder lc data charged task
//
// Authors: Nima Zardoshti

#include "PWGJE/TableProducer/jetfinderhf.cxx"

using JetFinderLcDataCharged = JetFinderHFTask<o2::aod::LcChargedJets, o2::aod::LcChargedJetConstituents, o2::aod::LcChargedJetConstituentsSub>;

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
std::vector<o2::framework::DataProcessorSpec> tasks;

tasks.emplace_back(adaptAnalysisTask<JetFinderLcDataCharged>(cfgc,
SetDefaultProcesses{},
TaskName{"jet-finder-lc-data-charged"}));

return WorkflowSpec{tasks};
}
91 changes: 27 additions & 64 deletions PWGJE/TableProducer/jetfinderhf.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ struct JetFinderHFTask {
Configurable<float> clusterPhiMax{"clusterPhiMax", 999, "maximum cluster phi"};

// HF candidate level configurables
Configurable<std::string> candSpecie_s{"candSpecie_s", "D0", "options are D0, Lc, Bplus"};
Configurable<std::string> candDecayChannel_s{"candDecayChannel_s", "default", "look up in task"};
Configurable<float> candPtMin{"candPtMin", 0.0, "minimum candidate pT"};
Configurable<float> candPtMax{"candPtMax", 100.0, "maximum candidate pT"};
Configurable<float> candYMin{"candYMin", -0.8, "minimum candidate eta"};
Expand Down Expand Up @@ -126,29 +124,18 @@ struct JetFinderHFTask {
jetFinder.ghostArea = jetGhostArea;
jetFinder.ghostRepeatN = ghostRepeat;

auto candSpecie = static_cast<std::string>(candSpecie_s);
auto candDecayChannel = static_cast<std::string>(candDecayChannel_s);
if (candSpecie == "D0") {
if (doprocessD0ChargedJetsData || doprocessD0ChargedJetsMCD || doprocessD0ChargedJetsMCP) { // Note : need to be careful if configurable workflow options are added later
candPDG = static_cast<int>(pdg::Code::kD0);
candDecay = static_cast<int>(aod::hf_cand_2prong::DecayType::D0ToPiK);
}
if (candSpecie == "Bplus") {
if (doprocessBplusChargedJetsData || doprocessBplusChargedJetsMCD || doprocessBplusChargedJetsMCP) {
candPDG = static_cast<int>(pdg::Code::kBPlus);
candDecay = static_cast<int>(aod::hf_cand_bplus::DecayType::BplusToD0Pi);
}
if (candSpecie == "Lc") {
if (doprocessLcChargedJetsData || doprocessLcChargedJetsMCD || doprocessLcChargedJetsMCP) {
candPDG = static_cast<int>(pdg::Code::kLambdaCPlus);
candDecay = static_cast<int>(aod::hf_cand_3prong::DecayType::LcToPKPi);
}
if (candSpecie == "JPsi") {
candPDG = static_cast<int>(pdg::Code::kJPsi);
if (candDecayChannel == "default" || candDecayChannel == "ee") {
candDecay = static_cast<int>(aod::hf_cand_2prong::DecayType::JpsiToEE);
}
if (candDecayChannel == "mumu") {
candDecay = static_cast<int>(aod::hf_cand_2prong::DecayType::JpsiToMuMu);
}
}
}

o2::aod::EMCALClusterDefinition clusterDefinition = o2::aod::emcalcluster::getClusterDefinitionFromString(clusterDefinitionS.value);
Expand Down Expand Up @@ -198,9 +185,13 @@ struct JetFinderHFTask {
}

// function that generalically processes gen level events
template <typename T, typename U, typename M>
void analyseMCGenParticles(T const& collision, U const& particles, M& candidates)
template <typename T, typename U>
void analyseMCP(T const& collision, U const& particles)
{
inputParticles.clear();
std::vector<typename U::iterator> candidates;
candidates.clear();

for (auto const& particle : particles) {
if (std::abs(particle.flagMcMatchGen()) & (1 << candDecay)) {
auto particleY = RecoDecay::y(array{particle.px(), particle.py(), particle.pz()}, RecoDecay::getMassPDG(particle.pdgCode()));
Expand All @@ -220,34 +211,6 @@ struct JetFinderHFTask {
}
}

// check if type JetParticles2Prong can be templated. then you can just use one function everywhere
// function that is called for gen level events with 2 prong candidates
template <typename T, typename U>
void analyseMCGen2Prong(T const& collision, U const& particles)
{
inputParticles.clear();
std::vector<JetParticles2Prong::iterator> candidates;
candidates.clear();
analyseMCGenParticles(collision, particles, candidates);
}
// function that is called for gen level events with 3 prong candidates
template <typename T, typename U>
void analyseMCGen3Prong(T const& collision, U const& particles)
{
inputParticles.clear();
std::vector<JetParticles3Prong::iterator> candidates;
analyseMCGenParticles(collision, particles, candidates);
}
// function that is called for gen level events with B+ candidates
template <typename T, typename U>
void analyseMCGenBplus(T const& collision, U const& particles)
{
inputParticles.clear();
std::vector<JetParticlesBplus::iterator> candidates;
candidates.clear();
analyseMCGenParticles(collision, particles, candidates);
}

void processDummy(aod::Collisions const& collision)
{
}
Expand All @@ -259,38 +222,38 @@ struct JetFinderHFTask {
void processD0ChargedJetsMCD(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision, JetTracks const& tracks, CandidateD0MC const& candidates) { analyseMCD(collision, tracks, candidates); }
PROCESS_SWITCH(JetFinderHFTask, processD0ChargedJetsMCD, "D0 finding on MC detector level", false);

void processD0ChargedJetsMCP(aod::McCollision const& collision,
JetParticlesD0 const& particles)
{
analyseMCP(collision, particles);
}
PROCESS_SWITCH(JetFinderHFTask, processD0ChargedJetsMCP, "D0 jet finding on MC particle level", false);

void processBplusChargedJetsData(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, JetTracks const& tracks, CandidateBplusData const& candidates, aod::HfCand2Prong const& HFdaughters) { analyseData(collision, tracks, candidates); }
PROCESS_SWITCH(JetFinderHFTask, processBplusChargedJetsData, "B+ jet finding on data", false);

void processBplusChargedJetsMCD(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision, JetTracks const& tracks, CandidateBplusMC const& candidates, aod::HfCand2Prong const& HFdaughters) { analyseMCD(collision, tracks, candidates); }
PROCESS_SWITCH(JetFinderHFTask, processBplusChargedJetsMCD, "B+ finding on MC detector level", false);

void processBplusChargedJetsMCP(aod::McCollision const& collision,
JetParticlesBplus const& particles)
{
analyseMCP(collision, particles);
}
PROCESS_SWITCH(JetFinderHFTask, processBplusChargedJetsMCP, "B+ jet finding on MC particle level", false);

void processLcChargedJetsData(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, JetTracks const& tracks, CandidateLcData const& candidates) { analyseData(collision, tracks, candidates); }
PROCESS_SWITCH(JetFinderHFTask, processLcChargedJetsData, "Lc jet finding on data", false);

void processLcChargedJetsMCD(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision, JetTracks const& tracks, CandidateLcMC const& candidates) { analyseMCD(collision, tracks, candidates); }
PROCESS_SWITCH(JetFinderHFTask, processLcChargedJetsMCD, "Lc finding on MC detector level", false);

void process2ProngJetsMCP(aod::McCollision const& collision,
JetParticles2Prong const& particles)
{
analyseMCGen2Prong(collision, particles);
}
PROCESS_SWITCH(JetFinderHFTask, process2ProngJetsMCP, "2-prong HF jet finding on MC particle level", false);

void process3ProngJetsMCP(aod::McCollision const& collision,
JetParticles3Prong const& particles)
{
analyseMCGen3Prong(collision, particles);
}
PROCESS_SWITCH(JetFinderHFTask, process3ProngJetsMCP, "3-prong HF jet finding on MC particle level", false);

void processBplusJetsMCP(aod::McCollision const& collision,
JetParticlesBplus const& particles)
void processLcChargedJetsMCP(aod::McCollision const& collision,
JetParticlesLc const& particles)
{
analyseMCGenBplus(collision, particles);
analyseMCP(collision, particles);
}
PROCESS_SWITCH(JetFinderHFTask, processBplusJetsMCP, "B+ HF jet finding on MC particle level", false);
PROCESS_SWITCH(JetFinderHFTask, processLcChargedJetsMCP, "Lc jet finding on MC particle level", false);
};
/*
using JetFinderD0DataCharged = JetFinderHFTask<o2::aod::D0ChargedJets, o2::aod::D0ChargedJetConstituents, o2::aod::D0ChargedJetConstituentsSub>;
Expand Down
Loading