From 82b254a0e09530d5f77d890dd5fcadeb720dfdc9 Mon Sep 17 00:00:00 2001 From: Nima Zardoshti Date: Fri, 14 Jul 2023 17:25:58 +0200 Subject: [PATCH 1/2] PWGJE: refactory of jet QA task --- PWGJE/Tasks/jetfinderhfQA.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGJE/Tasks/jetfinderhfQA.cxx b/PWGJE/Tasks/jetfinderhfQA.cxx index d9aa2b4c9a4..6069c602ee9 100644 --- a/PWGJE/Tasks/jetfinderhfQA.cxx +++ b/PWGJE/Tasks/jetfinderhfQA.cxx @@ -48,7 +48,7 @@ struct JetFinderHFQATask { Configurable selectedJetsRadius{"selectedJetsRadius", 0.4, "resolution parameter for histograms without radius"}; Configurable vertexZCut{"vertexZCut", 10.0f, "Accepted z-vertex range"}; - Configurable> jetRadii{"jetRadii", std::vector{0.2, 0.3, 0.4, 0.5, 0.6}, "jet resolution parameters"}; + Configurable> jetRadii{"jetRadii", std::vector{0.4}, "jet resolution parameters"}; Configurable trackEtaMin{"trackEtaMin", -0.9, "minimum eta acceptance for tracks"}; Configurable trackEtaMax{"trackEtaMax", 0.9, "maximum eta acceptance for tracks"}; Configurable trackPtMin{"trackPtMin", 0.15, "minimum pT acceptance for tracks"}; From c5a0b4e28b8ef52841570cdfb466034fac3ef62a Mon Sep 17 00:00:00 2001 From: Nima Zardoshti Date: Sun, 16 Jul 2023 02:47:13 +0200 Subject: [PATCH 2/2] PWGJE : adding extra template parameters to a variety of jet tasks --- PWGJE/TableProducer/jetfinder.cxx | 24 +- PWGJE/TableProducer/jetfinder.h | 24 +- .../TableProducer/jetfinderD0DataCharged.cxx | 2 +- .../TableProducer/jetfinderLcDataCharged.cxx | 2 +- PWGJE/TableProducer/jetfinderhf.cxx | 67 ++---- PWGJE/Tasks/jetfinderQA.cxx | 2 +- PWGJE/Tasks/jetsubstructure.cxx | 54 ++--- PWGJE/Tasks/jetsubstructurehf.cxx | 212 +++++------------- PWGJE/Tasks/jetsubstructurehfoutput.cxx | 160 ++++--------- PWGJE/Tasks/jetsubstructureoutput.cxx | 23 +- 10 files changed, 180 insertions(+), 390 deletions(-) diff --git a/PWGJE/TableProducer/jetfinder.cxx b/PWGJE/TableProducer/jetfinder.cxx index c137055dc11..10cb9abe14a 100644 --- a/PWGJE/TableProducer/jetfinder.cxx +++ b/PWGJE/TableProducer/jetfinder.cxx @@ -57,7 +57,6 @@ struct JetFinderTask { Configurable jetPtMax{"jetPtMax", 1000.0, "maximum jet pT"}; Configurable jetEtaMin{"jetEtaMin", -99.0, "minimum jet pseudorapidity"}; Configurable jetEtaMax{"jetEtaMax", 99.0, "maximum jet pseudorapidity"}; - Configurable jetTypeParticleLevel{"jetTypeParticleLevel", 1, "Type of stored jets at MC particle leevel. 0 = full, 1 = charged, 2 = neutral"}; Configurable jetAlgorithm{"jetAlgorithm", 2, "jet clustering algorithm. 0 = kT, 1 = C/A, 2 = Anti-kT"}; Configurable jetRecombScheme{"jetRecombScheme", 0, "jet recombination scheme. 0 = E-scheme, 1 = pT-scheme, 2 = pT2-scheme"}; Configurable jetGhostArea{"jetGhostArea", 0.005, "jet ghost area"}; @@ -149,17 +148,32 @@ struct JetFinderTask { analyseClusters(inputParticles, &clusters); findJets(jetFinder, inputParticles, jetRadius, collision, jetsTable, constituentsTable, constituentsSubTable, DoConstSub); } - PROCESS_SWITCH(JetFinderTask, processFullJets, "Data jet finding for full and neutral jets", false); - void processParticleLevelJets(aod::McCollision const& collision, aod::McParticles const& particles) + void processParticleLevelChargedJets(aod::McCollision const& collision, aod::McParticles const& particles) + { + // TODO: MC event selection? + analyseParticles(inputParticles, trackEtaMin, trackEtaMax, 1, particles, pdg->Instance()); + findJets(jetFinder, inputParticles, jetRadius, collision, jetsTable, constituentsTable, constituentsSubTable, DoConstSub); + } + PROCESS_SWITCH(JetFinderTask, processParticleLevelChargedJets, "Particle level charged jet finding", false); + + void processParticleLevelNeutralJets(aod::McCollision const& collision, aod::McParticles const& particles) + { + // TODO: MC event selection? + analyseParticles(inputParticles, trackEtaMin, trackEtaMax, 2, particles, pdg->Instance()); + findJets(jetFinder, inputParticles, jetRadius, collision, jetsTable, constituentsTable, constituentsSubTable, DoConstSub); + } + PROCESS_SWITCH(JetFinderTask, processParticleLevelNeutralJets, "Particle level neutral jet finding", false); + + void processParticleLevelFullJets(aod::McCollision const& collision, aod::McParticles const& particles) { // TODO: MC event selection? - analyseParticles(inputParticles, trackEtaMin, trackEtaMax, jetTypeParticleLevel, particles, pdg->Instance()); + analyseParticles(inputParticles, trackEtaMin, trackEtaMax, 0, particles, pdg->Instance()); findJets(jetFinder, inputParticles, jetRadius, collision, jetsTable, constituentsTable, constituentsSubTable, DoConstSub); } - PROCESS_SWITCH(JetFinderTask, processParticleLevelJets, "Particle level jet finding", false); + PROCESS_SWITCH(JetFinderTask, processParticleLevelFullJets, "Particle level full jet finding", false); }; using JetFinderDataCharged = JetFinderTask; diff --git a/PWGJE/TableProducer/jetfinder.h b/PWGJE/TableProducer/jetfinder.h index 9e91fd83be6..362c1d57ab7 100644 --- a/PWGJE/TableProducer/jetfinder.h +++ b/PWGJE/TableProducer/jetfinder.h @@ -43,18 +43,18 @@ using JetTracks = soa::Filtered>; using JetClusters = o2::soa::Filtered; -using JetParticlesD0 = soa::Filtered>; -using JetParticlesLc = soa::Filtered>; -using JetParticlesBplus = soa::Filtered>; +using ParticlesD0 = soa::Filtered>; +using ParticlesLc = soa::Filtered>; +using ParticlesBplus = soa::Filtered>; -using CandidateD0Data = soa::Filtered>; -using CandidateD0MC = soa::Filtered>; +using CandidatesD0Data = soa::Filtered>; +using CandidatesD0MCD = soa::Filtered>; -using CandidateBplusData = soa::Filtered>; -using CandidateBplusMC = soa::Filtered>; +using CandidatesBplusData = soa::Filtered>; +using CandidatesBplusMCD = soa::Filtered>; -using CandidateLcData = soa::Filtered>; -using CandidateLcMC = soa::Filtered>; +using CandidatesLcData = soa::Filtered>; +using CandidatesLcMCD = soa::Filtered>; // functions for track, cluster and candidate selection @@ -83,19 +83,19 @@ void analyseTracks(std::vector& inputParticles, T const& tra } if (candidate != std::nullopt) { auto cand = candidate.value(); - if constexpr (std::is_same_v, CandidateD0Data::iterator> || std::is_same_v, CandidateD0Data::filtered_iterator> || std::is_same_v, CandidateD0MC::iterator> || std::is_same_v, CandidateD0MC::filtered_iterator>) { + if constexpr (std::is_same_v, CandidatesD0Data::iterator> || std::is_same_v, CandidatesD0Data::filtered_iterator> || std::is_same_v, CandidatesD0MCD::iterator> || std::is_same_v, CandidatesD0MCD::filtered_iterator>) { if (cand.template prong0_as().globalIndex() == track.globalIndex() || cand.template prong1_as().globalIndex() == track.globalIndex()) { continue; } } - if constexpr (std::is_same_v, CandidateLcData::iterator> || std::is_same_v, CandidateLcData::filtered_iterator> || std::is_same_v, CandidateLcMC::iterator> || std::is_same_v, CandidateLcMC::filtered_iterator>) { + if constexpr (std::is_same_v, CandidatesLcData::iterator> || std::is_same_v, CandidatesLcData::filtered_iterator> || std::is_same_v, CandidatesLcMCD::iterator> || std::is_same_v, CandidatesLcMCD::filtered_iterator>) { if (cand.template prong0_as().globalIndex() == track.globalIndex() || cand.template prong1_as().globalIndex() == track.globalIndex() || cand.template prong2_as().globalIndex() == track.globalIndex()) { continue; } } - if constexpr (std::is_same_v, CandidateBplusData::iterator> || std::is_same_v, CandidateBplusData::filtered_iterator> || std::is_same_v, CandidateBplusMC::iterator> || std::is_same_v, CandidateBplusMC::filtered_iterator>) { + if constexpr (std::is_same_v, CandidatesBplusData::iterator> || std::is_same_v, CandidatesBplusData::filtered_iterator> || std::is_same_v, CandidatesBplusMCD::iterator> || std::is_same_v, CandidatesBplusMCD::filtered_iterator>) { if (cand.template prong0_as().template prong0_as().globalIndex() == track.globalIndex() || cand.template prong0_as().template prong1_as().globalIndex() == track.globalIndex() || cand.template prong1_as().globalIndex() == track.globalIndex()) { continue; } diff --git a/PWGJE/TableProducer/jetfinderD0DataCharged.cxx b/PWGJE/TableProducer/jetfinderD0DataCharged.cxx index c6ccf8f5288..3ae0705d661 100644 --- a/PWGJE/TableProducer/jetfinderD0DataCharged.cxx +++ b/PWGJE/TableProducer/jetfinderD0DataCharged.cxx @@ -15,7 +15,7 @@ #include "PWGJE/TableProducer/jetfinderhf.cxx" -using JetFinderD0DataCharged = JetFinderHFTask; +using JetFinderD0DataCharged = JetFinderHFTask; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { diff --git a/PWGJE/TableProducer/jetfinderLcDataCharged.cxx b/PWGJE/TableProducer/jetfinderLcDataCharged.cxx index 44d1286bc75..096f48fdded 100644 --- a/PWGJE/TableProducer/jetfinderLcDataCharged.cxx +++ b/PWGJE/TableProducer/jetfinderLcDataCharged.cxx @@ -15,7 +15,7 @@ #include "PWGJE/TableProducer/jetfinderhf.cxx" -using JetFinderLcDataCharged = JetFinderHFTask; +using JetFinderLcDataCharged = JetFinderHFTask; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { diff --git a/PWGJE/TableProducer/jetfinderhf.cxx b/PWGJE/TableProducer/jetfinderhf.cxx index cec3081b807..f9366d9fe90 100644 --- a/PWGJE/TableProducer/jetfinderhf.cxx +++ b/PWGJE/TableProducer/jetfinderhf.cxx @@ -38,7 +38,7 @@ void customize(std::vector& workflowOptions) // NB: runDataProcessing.h must be included after customize! #include "Framework/runDataProcessing.h" -template +template struct JetFinderHFTask { Produces jetsTable; Produces constituentsTable; @@ -124,15 +124,15 @@ struct JetFinderHFTask { jetFinder.ghostArea = jetGhostArea; jetFinder.ghostRepeatN = ghostRepeat; - if (doprocessD0ChargedJetsData || doprocessD0ChargedJetsMCD || doprocessD0ChargedJetsMCP) { // Note : need to be careful if configurable workflow options are added later + if constexpr (std::is_same_v, CandidatesD0Data>) { // Note : need to be careful if configurable workflow options are added later candPDG = static_cast(pdg::Code::kD0); candDecay = static_cast(aod::hf_cand_2prong::DecayType::D0ToPiK); } - if (doprocessBplusChargedJetsData || doprocessBplusChargedJetsMCD || doprocessBplusChargedJetsMCP) { + if constexpr (std::is_same_v, CandidatesBplusData>) { candPDG = static_cast(pdg::Code::kBPlus); candDecay = static_cast(aod::hf_cand_bplus::DecayType::BplusToD0Pi); } - if (doprocessLcChargedJetsData || doprocessLcChargedJetsMCD || doprocessLcChargedJetsMCP) { + if constexpr (std::is_same_v, CandidatesLcData>) { candPDG = static_cast(pdg::Code::kLambdaCPlus); candDecay = static_cast(aod::hf_cand_3prong::DecayType::LcToPKPi); } @@ -216,57 +216,32 @@ struct JetFinderHFTask { } PROCESS_SWITCH(JetFinderHFTask, processDummy, "Dummy process function turned on by default", true); - void processD0ChargedJetsData(soa::Filtered>::iterator const& collision, JetTracks const& tracks, CandidateD0Data const& candidates) { analyseData(collision, tracks, candidates); } - PROCESS_SWITCH(JetFinderHFTask, processD0ChargedJetsData, "D0 jet finding on data", false); + void processChargedJetsData(soa::Filtered>::iterator const& collision, JetTracks const& tracks, CandidateTableData const& candidates) { analyseData(collision, tracks, candidates); } + PROCESS_SWITCH(JetFinderHFTask, processChargedJetsData, "charged hf jet finding on data", false); - void processD0ChargedJetsMCD(soa::Join::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 processChargedJetsMCD(soa::Join::iterator const& collision, JetTracks const& tracks, CandidateTableMCD const& candidates) { analyseMCD(collision, tracks, candidates); } + PROCESS_SWITCH(JetFinderHFTask, processChargedJetsMCD, "charged hf jet finding on MC detector level", false); - void processD0ChargedJetsMCP(aod::McCollision const& collision, - JetParticlesD0 const& particles) + void processChargedJetsMCP(aod::McCollision const& collision, + ParticleTable const& particles) { analyseMCP(collision, particles); } - PROCESS_SWITCH(JetFinderHFTask, processD0ChargedJetsMCP, "D0 jet finding on MC particle level", false); - - void processBplusChargedJetsData(soa::Filtered>::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::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>::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::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 processLcChargedJetsMCP(aod::McCollision const& collision, - JetParticlesLc const& particles) - { - analyseMCP(collision, particles); - } - PROCESS_SWITCH(JetFinderHFTask, processLcChargedJetsMCP, "Lc jet finding on MC particle level", false); + PROCESS_SWITCH(JetFinderHFTask, processChargedJetsMCP, "hf jet finding on MC particle level", false); }; /* -using JetFinderD0DataCharged = JetFinderHFTask; -using JetFinderD0MCDetectorLevelCharged = JetFinderHFTask; -using JetFinderD0MCParticleLevelCharged = JetFinderHFTask; -using JetFinderBplusDataCharged = JetFinderHFTask; -using JetFinderBplusMCDetectorLevelCharged = JetFinderHFTask; -using JetFinderBplusMCParticleLevelCharged = JetFinderHFTask; +using JetFinderD0DataCharged = JetFinderHFTask; +using JetFinderD0MCDetectorLevelCharged = JetFinderHFTask; +using JetFinderD0MCParticleLevelCharged = JetFinderHFTask; + +using JetFinderBplusDataCharged = JetFinderHFTask; +using JetFinderBplusMCDetectorLevelCharged = JetFinderHFTask; +using JetFinderBplusMCParticleLevelCharged = JetFinderHFTask; -using JetFinderLcDataCharged = JetFinderHFTask; -using JetFinderLcMCDetectorLevelCharged = JetFinderHFTask; -using JetFinderLcMCParticleLevelCharged = JetFinderHFTask; +using JetFinderLcDataCharged = JetFinderHFTask; +using JetFinderLcMCDetectorLevelCharged = JetFinderHFTask; +using JetFinderLcMCParticleLevelCharged = JetFinderHFTask; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { diff --git a/PWGJE/Tasks/jetfinderQA.cxx b/PWGJE/Tasks/jetfinderQA.cxx index 285a8d89636..1aedd572254 100644 --- a/PWGJE/Tasks/jetfinderQA.cxx +++ b/PWGJE/Tasks/jetfinderQA.cxx @@ -45,7 +45,7 @@ struct JetFinderQATask { Configurable selectedJetsRadius{"selectedJetsRadius", 0.4, "resolution parameter for histograms without radius"}; Configurable vertexZCut{"vertexZCut", 10.0f, "Accepted z-vertex range"}; - Configurable> jetRadii{"jetRadii", std::vector{0.2, 0.3, 0.4, 0.5, 0.6}, "jet resolution parameters"}; + Configurable> jetRadii{"jetRadii", std::vector{0.4}, "jet resolution parameters"}; Configurable trackEtaMin{"trackEtaMin", -0.9, "minimum eta acceptance for tracks"}; Configurable trackEtaMax{"trackEtaMax", 0.9, "maximum eta acceptance for tracks"}; Configurable trackPtMin{"trackPtMin", 0.15, "minimum pT acceptance for tracks"}; diff --git a/PWGJE/Tasks/jetsubstructure.cxx b/PWGJE/Tasks/jetsubstructure.cxx index 1405b32fd37..3de10b797ab 100644 --- a/PWGJE/Tasks/jetsubstructure.cxx +++ b/PWGJE/Tasks/jetsubstructure.cxx @@ -40,7 +40,7 @@ using namespace o2::framework::expressions; #include "Framework/runDataProcessing.h" -template +template struct JetSubstructureTask { Produces jetSubstructureTable; OutputObj hZg{"h_jet_zg_jet_pt"}; @@ -51,7 +51,6 @@ struct JetSubstructureTask { Configurable zCut{"zCut", 0.1, "soft drop z cut"}; Configurable beta{"beta", 0.0, "soft drop beta"}; Configurable jetR{"jetR", 0.4, "jet resolution parameter"}; - Configurable doConstSub{"doConstSub", false, "do constituent subtraction"}; std::vector jetConstituents; std::vector jetReclustered; @@ -111,58 +110,31 @@ struct JetSubstructureTask { } PROCESS_SWITCH(JetSubstructureTask, processDummy, "Dummy process function turned on by default", true); - void processData(soa::Filtered>::iterator const& jet, - aod::Tracks const& tracks, - aod::ChargedJetConstituentsSub const& constituentsSub) + void processChargedJets(typename JetTable::iterator const& jet, + aod::Tracks const& tracks) { jetConstituents.clear(); - - if (doConstSub) { - for (const auto& jetconstituentSub : constituentsSub) { - FastJetUtilities::fillTracks(jetconstituentSub, jetConstituents); - } - } else { - for (auto& jetConstituent : jet.tracks_as()) { - FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex()); - } - } - jetReclustering(jet); - } - PROCESS_SWITCH(JetSubstructureTask, processData, "jet substructure on data", false); - - void processMCD(soa::Filtered>::iterator const& jet, - aod::Tracks const& tracks, - aod::ChargedJetConstituentsSub const& constituentsSub) - { - jetConstituents.clear(); - - if (doConstSub) { - for (const auto& jetconstituentSub : constituentsSub) { - FastJetUtilities::fillTracks(jetconstituentSub, jetConstituents); - } - } else { - for (auto& jetConstituent : jet.tracks_as()) { - FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex()); - } + for (auto& jetConstituent : jet.template tracks_as()) { + FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex()); } jetReclustering(jet); } - PROCESS_SWITCH(JetSubstructureTask, processMCD, "jet substructure on MC detector level", false); + PROCESS_SWITCH(JetSubstructureTask, processChargedJets, "charged jet substructure", false); - void processMCP(soa::Filtered>::iterator const& jet, - aod::McParticles const& particles) + void processChargedJetsMCP(typename JetTableMCP::iterator const& jet, + aod::McParticles const& particles) { jetConstituents.clear(); - for (auto& jetConstituent : jet.tracks_as()) { + for (auto& jetConstituent : jet.template tracks_as()) { FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex(), static_cast(JetConstituentStatus::track), RecoDecay::getMassPDG(jetConstituent.pdgCode())); } jetReclustering(jet); } - PROCESS_SWITCH(JetSubstructureTask, processMCP, "jet substructure on MC particle level", false); + PROCESS_SWITCH(JetSubstructureTask, processChargedJetsMCP, "charged jet substructure on MC particle level", false); }; -using JetSubstructureDataLevel = JetSubstructureTask; -using JetSubstructureMCDetectorLevel = JetSubstructureTask; -using JetSubstructureMCParticleLevel = JetSubstructureTask; +using JetSubstructureDataLevel = JetSubstructureTask>, soa::Filtered>, o2::aod::ChargedJetSubstructures>; +using JetSubstructureMCDetectorLevel = JetSubstructureTask>, soa::Filtered>, o2::aod::ChargedMCDetectorLevelJetSubstructures>; +using JetSubstructureMCParticleLevel = JetSubstructureTask>, soa::Filtered>, o2::aod::ChargedMCParticleLevelJetSubstructures>; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { diff --git a/PWGJE/Tasks/jetsubstructurehf.cxx b/PWGJE/Tasks/jetsubstructurehf.cxx index 614ab146a8f..b6ed62f291b 100644 --- a/PWGJE/Tasks/jetsubstructurehf.cxx +++ b/PWGJE/Tasks/jetsubstructurehf.cxx @@ -43,22 +43,18 @@ using namespace o2::framework::expressions; // NB: runDataProcessing.h must be included after customize! #include "Framework/runDataProcessing.h" -template +template struct JetSubstructureHFTask { Produces jetSubstructurehfTable; OutputObj hZg{"h_jet_zg_jet_pt"}; OutputObj hRg{"h_jet_rg_jet_pt"}; OutputObj hNsd{"h_jet_nsd_jet_pt"}; - // HF candidate level configurables - Configurable candSpecie_s{"candSpecie_s", "D0", "options are D0, Lc, Bplus"}; - // Jet level configurables Configurable jetPtMin{"jetPtMin", 0.0, "minimum jet pT cut"}; Configurable zCut{"zCut", 0.1, "soft drop z cut"}; Configurable beta{"beta", 0.0, "soft drop beta"}; Configurable jetR{"jetR", 0.4, "jet resolution parameter"}; - Configurable doConstSub{"doConstSub", false, "do constituent subtraction"}; Service pdg; int candPDG; @@ -78,45 +74,19 @@ struct JetSubstructureHFTask { jetReclusterer.isReclustering = true; jetReclusterer.algorithm = fastjet::JetAlgorithm::cambridge_algorithm; - auto candSpecie = static_cast(candSpecie_s); - if (candSpecie == "D0") { + if constexpr (std::is_same_v, soa::Filtered>>) { candPDG = static_cast(pdg::Code::kD0); } - if (candSpecie == "Bplus") { + if constexpr (std::is_same_v, soa::Filtered>>) { candPDG = static_cast(pdg::Code::kBPlus); } - if (candSpecie == "Lc") { + if constexpr (std::is_same_v, soa::Filtered>>) { candPDG = static_cast(pdg::Code::kLambdaCPlus); } - if (candSpecie == "JPsi") { - candPDG = static_cast(pdg::Code::kJPsi); - } } Filter jetSelection = o2::aod::jet::r == nround(jetR.node() * 100.0f) && aod::jet::pt >= jetPtMin; - template - void processConstituents(T const& jet) - { - jetConstituents.clear(); - for (auto& jetConstituent : jet.template tracks_as()) { - FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex()); - } - } - - template - void processGenLevel(T const& jet) - { - jetConstituents.clear(); - for (auto& jetConstituent : jet.template tracks_as()) { - FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex(), static_cast(JetConstituentStatus::track), RecoDecay::getMassPDG(jetConstituent.pdgCode())); - } - for (auto& jetHFCandidate : jet.template hfcandidates_as()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(jetHFCandidate.pdgCode())); - } - jetReclustering(jet); - } - template void jetReclustering(T const& jet) { @@ -168,108 +138,46 @@ struct JetSubstructureHFTask { } PROCESS_SWITCH(JetSubstructureHFTask, processDummy, "Dummy process function turned on by default", true); - void processD0Data(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) + void processChargedJetsHF(typename JetTable::iterator const& jet, + CandidateTable const& candidates, + aod::Tracks const& tracks) { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); + jetConstituents.clear(); + for (auto& jetConstituent : jet.template tracks_as()) { + FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex()); } - jetReclustering(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processD0Data, "D0 jet substructure on data", false); - - void processD0MCD(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) - { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment + for (auto& jetHFCandidate : jet.template hfcandidates_as()) { // should only be one at the moment FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); } jetReclustering(jet); } - PROCESS_SWITCH(JetSubstructureHFTask, processD0MCD, "D0 jet substructure on MC detector level", false); + PROCESS_SWITCH(JetSubstructureHFTask, processChargedJetsHF, "HF jet substructure", false); - void processD0MCP(soa::Filtered>::iterator const& jet, - aod::McParticles const& particles) + void processChargedJetsHFMCP(typename JetTableMCP::iterator const& jet, + aod::McParticles const& particles) { - processGenLevel(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processD0MCP, "D0 jet substructure on MC particle level", false); - - void processLcData(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) - { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); - } - jetReclustering(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processLcData, "Lc jet substructure on data", false); - - void processLcMCD(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) - { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); + jetConstituents.clear(); + for (auto& jetConstituent : jet.template tracks_as()) { + FastJetUtilities::fillTracks(jetConstituent, jetConstituents, jetConstituent.globalIndex(), static_cast(JetConstituentStatus::track), RecoDecay::getMassPDG(jetConstituent.pdgCode())); } - jetReclustering(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processLcMCD, "Lc jet substructure on MC detector level", false); - - void processLcMCP(soa::Filtered>::iterator const& jet, - aod::McParticles const& particles) - { - processGenLevel(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processLcMCP, "Lc jet substructure on MC particle level", false); - - void processBplusData(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) - { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); + for (auto& jetHFCandidate : jet.template hfcandidates_as()) { // should only be one at the moment + FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(jetHFCandidate.pdgCode())); } jetReclustering(jet); } - PROCESS_SWITCH(JetSubstructureHFTask, processBplusData, "Bplus jet substructure on data", false); + PROCESS_SWITCH(JetSubstructureHFTask, processChargedJetsHFMCP, "HF jet substructure on MC particle level", false); +}; +using JetSubstructureD0 = JetSubstructureHFTask>, soa::Join, soa::Filtered>, o2::aod::D0ChargedJetSubstructures>; +// using MCDetectorLevelJetSubstructureD0 = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::D0ChargedMCDetectorLevelJetSubstructures>; +// using MCParticleLevelJetSubstructureD0 = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::D0ChargedMCParticleLevelJetSubstructures>; - void processBplusMCD(soa::Filtered>::iterator const& jet, - soa::Join const& candidates, - aod::Tracks const& tracks) - { - processConstituents(jet); - for (auto& jetHFCandidate : jet.hfcandidates_as>()) { // should only be one at the moment - FastJetUtilities::fillTracks(jetHFCandidate, jetConstituents, jetHFCandidate.globalIndex(), static_cast(JetConstituentStatus::candidateHF), RecoDecay::getMassPDG(candPDG)); - } - jetReclustering(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processBplusMCD, "Bplus jet substructure on MC detector level", false); +// using JetSubstructureBplus = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::BplusChargedJetSubstructures>; +// using MCDetectorLevelJetSubstructureBplus = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::BplusChargedMCDetectorLevelJetSubstructures>; +// using MCParticleLevelJetSubstructureBplus = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::BplusChargedMCParticleLevelJetSubstructures>; - void processBplusMCP(soa::Filtered>::iterator const& jet, - aod::McParticles const& particles) - { - processGenLevel(jet); - } - PROCESS_SWITCH(JetSubstructureHFTask, processBplusMCP, "Bplus jet substructure on MC particle level", false); -}; -using JetSubstructureD0 = JetSubstructureHFTask; -using MCDetectorLevelJetSubstructureD0 = JetSubstructureHFTask; -using MCParticleLevelJetSubstructureD0 = JetSubstructureHFTask; -using JetSubstructureLc = JetSubstructureHFTask; -using MCDetectorLevelJetSubstructureLc = JetSubstructureHFTask; -using MCParticleLevelJetSubstructureLc = JetSubstructureHFTask; -using JetSubstructureBplus = JetSubstructureHFTask; -using MCDetectorLevelJetSubstructureBplus = JetSubstructureHFTask; -using MCParticleLevelJetSubstructureBplus = JetSubstructureHFTask; +using JetSubstructureLc = JetSubstructureHFTask>, soa::Join, soa::Filtered>, o2::aod::LcChargedJetSubstructures>; +// using MCDetectorLevelJetSubstructureLc = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::LcChargedMCDetectorLevelJetSubstructures>; +// using MCParticleLevelJetSubstructureLc = JetSubstructureHFTask>,soa::Join,soa::Filtered>,o2::aod::LcChargedMCParticleLevelJetSubstructures>; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { @@ -278,38 +186,38 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) tasks.emplace_back(adaptAnalysisTask(cfgc, SetDefaultProcesses{}, TaskName{"jet-substructure-D0-data"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-D0-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-D0-mcp"})); - + /* + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-D0-mcd"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-D0-mcp"})); + */ tasks.emplace_back(adaptAnalysisTask(cfgc, SetDefaultProcesses{}, TaskName{"jet-substructure-Lc-data"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-Lc-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-Lc-mcp"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-Bplus-data"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-Bplus-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-Bplus-mcp"})); - + /* + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-Lc-mcd"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-Lc-mcp"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-Bplus-data"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-Bplus-mcd"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-Bplus-mcp"})); + */ return WorkflowSpec{tasks}; } diff --git a/PWGJE/Tasks/jetsubstructurehfoutput.cxx b/PWGJE/Tasks/jetsubstructurehfoutput.cxx index 7bb9c111354..bf216ee9858 100644 --- a/PWGJE/Tasks/jetsubstructurehfoutput.cxx +++ b/PWGJE/Tasks/jetsubstructurehfoutput.cxx @@ -41,7 +41,7 @@ using namespace o2::analysis::hf_cuts_d0_to_pi_k; // NB: runDataProcessing.h must be included after customize! #include "Framework/runDataProcessing.h" -template +template struct JetSubstructureHFOutputTask { Produces jetOutputTable; Produces jetSubstructureOutputTable; @@ -54,104 +54,32 @@ struct JetSubstructureHFOutputTask { jetSubstructureOutputTable(jet.globalIndex(), jet.zg(), jet.rg(), jet.nsd()); } - void processDummy(aod::Tracks const& track) + void processDummy(typename CollisionTable::iterator const& collision) { } PROCESS_SWITCH(JetSubstructureHFOutputTask, processDummy, "Dummy process function turned on by default", true); - void processD0Data(aod::Collision const& collision, soa::Join const& jets, // add template back - soa::Join const& candidates, aod::Tracks const& tracks) + void processOutput(typename CollisionTable::iterator const& collision, JetTable const& jets, // add template back + CandidateTable const& candidates, aod::Tracks const& tracks) { for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); + auto cands = jet.template hfcandidates_as(); fillTables(collision, jet, cands); } } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processD0Data, "D0 jet substructure output on data", false); - - void processD0MCD(aod::Collision const& collision, soa::Join const& jets, soa::Join const& candidates, aod::Tracks const& tracks) - { - for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); - fillTables(collision, jet, cands); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processD0MCD, "D0 jet substructure output on MC detector level", false); - - void processD0MCP(aod::McCollision const& collision, soa::Join const& jets, aod::McParticles const& particles) - { - for (const auto& jet : jets) { - auto hfparticles = jet.hfcandidates_as(); - fillTables(collision, jet, hfparticles); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processD0MCP, "D0 jet substructure output on MC particle level", false); - - void processLcData(aod::Collision const& collision, soa::Join const& jets, // add template back - soa::Join const& candidates, aod::Tracks const& tracks) - { - for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); - fillTables(collision, jet, cands); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processLcData, "Lc jet substructure output on data", false); - - void processLcMCD(aod::Collision const& collision, soa::Join const& jets, soa::Join const& candidates, aod::Tracks const& tracks) - { - for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); - fillTables(collision, jet, cands); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processLcMCD, "Lc jet substructure output on MC detector level", false); - - void processLcMCP(aod::McCollision const& collision, soa::Join const& jets, aod::McParticles const& particles) - { - for (const auto& jet : jets) { - auto hfparticles = jet.hfcandidates_as(); - fillTables(collision, jet, hfparticles); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processLcMCP, "Lc jet substructure output on MC particle level", false); - - void processBplusData(aod::Collision const& collision, soa::Join const& jets, // add template back - soa::Join const& candidates, aod::Tracks const& tracks) - { - for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); - fillTables(collision, jet, cands); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processBplusData, "B+ jet substructure output on data", false); + PROCESS_SWITCH(JetSubstructureHFOutputTask, processOutput, "HF jet substructure output on data", false); +}; +using JetSubstructureOutputDataD0 = JetSubstructureHFOutputTask, soa::Join, aod::D0ChargedJetOutput, aod::D0ChargedJetSubstructureOutput>; +// using JetSubstructureOutputMCDetectorLevelD0 = JetSubstructureHFOutputTask, soa::Join, aod::D0ChargedMCDetectorLevelJetOutput, aod::D0ChargedMCDetectorLevelJetSubstructureOutput>; +// using JetSubstructureOutputMCParticleLevelD0 = JetSubstructureHFOutputTask, aod::McParticles, aod::D0ChargedMCParticleLevelJetOutput, aod::D0ChargedMCParticleLevelJetSubstructureOutput>; - void processBplusMCD(aod::Collision const& collision, soa::Join const& jets, soa::Join const& candidates, aod::Tracks const& tracks) - { - for (const auto& jet : jets) { - auto cands = jet.hfcandidates_as>(); - fillTables(collision, jet, cands); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processBplusMCD, "B+ jet substructure output on MC detector level", false); +using JetSubstructureOutputDataLc = JetSubstructureHFOutputTask, soa::Join, aod::LcChargedJetOutput, aod::LcChargedJetSubstructureOutput>; +// using JetSubstructureOutputMCDetectorLevelLc = JetSubstructureHFOutputTask, soa::Join, aod::LcChargedMCDetectorLevelJetOutput, aod::LcChargedMCDetectorLevelJetSubstructureOutput>; +// using JetSubstructureOutputMCParticleLevelLc = JetSubstructureHFOutputTask, aod::McParticles, aod::LcChargedMCParticleLevelJetOutput, aod::LcChargedMCParticleLevelJetSubstructureOutput>; - void processBplusMCP(aod::McCollision const& collision, soa::Join const& jets, aod::McParticles const& particles) - { - for (const auto& jet : jets) { - auto hfparticles = jet.hfcandidates_as(); - fillTables(collision, jet, hfparticles); - } - } - PROCESS_SWITCH(JetSubstructureHFOutputTask, processBplusMCP, "B+ jet substructure output on MC particle level", false); -}; -using JetSubstructureOutputDataD0 = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCDetectorLevelD0 = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCParticleLevelD0 = JetSubstructureHFOutputTask; -using JetSubstructureOutputDataLc = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCDetectorLevelLc = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCParticleLevelLc = JetSubstructureHFOutputTask; -using JetSubstructureOutputDataBplus = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCDetectorLevelBplus = JetSubstructureHFOutputTask; -using JetSubstructureOutputMCParticleLevelBplus = JetSubstructureHFOutputTask; +// using JetSubstructureOutputDataBplus = JetSubstructureHFOutputTask , soa::Join, aod::BplusChargedJetOutput, aod::BplusChargedJetSubstructureOutput>; +// using JetSubstructureOutputMCDetectorLevelBplus = JetSubstructureHFOutputTask, soa::Join, aod::BplusChargedMCDetectorLevelJetOutput, aod::BplusChargedMCDetectorLevelJetSubstructureOutput>; +// using JetSubstructureOutputMCParticleLevelBplus = JetSubstructureHFOutputTask, aod::McParticles, aod::BplusChargedMCParticleLevelJetOutput, aod::BplusChargedMCParticleLevelJetSubstructureOutput>; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { @@ -161,37 +89,37 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) SetDefaultProcesses{}, TaskName{"jet-substructure-output-D0-data"})); - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-D0-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-D0-mcp"})); + /* tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-D0-mcd"})); + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-D0-mcp"})); + */ tasks.emplace_back(adaptAnalysisTask(cfgc, SetDefaultProcesses{}, TaskName{"jet-substructure-output-Lc-data"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-Lc-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-Lc-mcp"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-Bplus-data"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-Bplus-mcd"})); - - tasks.emplace_back(adaptAnalysisTask(cfgc, - SetDefaultProcesses{}, - TaskName{"jet-substructure-output-Bplus-mcp"})); - + /* + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-Lc-mcd"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-Lc-mcp"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-Bplus-data"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-Bplus-mcd"})); + + tasks.emplace_back(adaptAnalysisTask(cfgc, + SetDefaultProcesses{}, + TaskName{"jet-substructure-output-Bplus-mcp"})); + */ return WorkflowSpec{tasks}; } diff --git a/PWGJE/Tasks/jetsubstructureoutput.cxx b/PWGJE/Tasks/jetsubstructureoutput.cxx index acb90142529..5edba2f6948 100644 --- a/PWGJE/Tasks/jetsubstructureoutput.cxx +++ b/PWGJE/Tasks/jetsubstructureoutput.cxx @@ -36,7 +36,7 @@ using namespace o2::framework::expressions; // NB: runDataProcessing.h must be included after customize! #include "Framework/runDataProcessing.h" -template +template struct JetSubstructureOutputTask { Produces jetOutputTable; Produces jetSubstructureOutputTable; @@ -50,26 +50,19 @@ struct JetSubstructureOutputTask { } } - void processDummy(aod::Tracks const& track) {} + void processDummy(typename CollisionTable::iterator const& collision) {} PROCESS_SWITCH(JetSubstructureOutputTask, processDummy, "Dummy process function turned on by default", true); - void processData(aod::Collision const& collision, - soa::Join const& jets, - aod::Tracks const& tracks) + void processOutput(typename CollisionTable::iterator const& collision, + JetTable const& jets) { fillTables(collision, jets); } - PROCESS_SWITCH(JetSubstructureOutputTask, processData, "jet substructure output on data", false); - - void processMCD(aod::Collision const& collision, soa::Join const& jets, aod::Tracks const& tracks) { fillTables(collision, jets); } - PROCESS_SWITCH(JetSubstructureOutputTask, processMCD, "jet substructure output on MC detector level", false); - - void processMCP(aod::McCollision const& collision, soa::Join const& jets, aod::McParticles const& particles) { fillTables(collision, jets); } - PROCESS_SWITCH(JetSubstructureOutputTask, processMCP, "jet substructure output on MC particle level", false); + PROCESS_SWITCH(JetSubstructureOutputTask, processOutput, "jet substructure output", false); }; -using JetSubstructureOutputData = JetSubstructureOutputTask; -using JetSubstructureOutputMCDetectorLevel = JetSubstructureOutputTask; -using JetSubstructureOutputMCParticleLevel = JetSubstructureOutputTask; +using JetSubstructureOutputData = JetSubstructureOutputTask, aod::ChargedJetOutput, aod::ChargedJetSubstructureOutput>; +using JetSubstructureOutputMCDetectorLevel = JetSubstructureOutputTask, aod::ChargedMCDetectorLevelJetOutput, aod::ChargedMCDetectorLevelJetSubstructureOutput>; +using JetSubstructureOutputMCParticleLevel = JetSubstructureOutputTask, aod::ChargedMCParticleLevelJetOutput, aod::ChargedMCParticleLevelJetSubstructureOutput>; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) {