Skip to content

Commit 5864e7d

Browse files
authored
Merge pull request #16 from hanseopark/241219-devHfTag
Add creation of HF jet definition table
2 parents 54e8603 + 457953c commit 5864e7d

File tree

3 files changed

+152
-4
lines changed

3 files changed

+152
-4
lines changed

PWGJE/DataModel/JetTagging.h

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12-
///
12+
/// \file JetTagging.h
1313
/// \brief Table definitions for hf jet tagging
1414
///
1515
/// \author Nima Zardoshti <nima.zardoshti@cern.ch>
16+
/// \author Hanseo Park <hanseo.park@cern.ch>
1617

1718
#ifndef PWGJE_DATAMODEL_JETTAGGING_H_
1819
#define PWGJE_DATAMODEL_JETTAGGING_H_
@@ -120,6 +121,13 @@ JETSV_TABLES_DEF(Charged, SecondaryVertex3Prong, "3PRONG");
120121
JETSV_TABLES_DEF(Charged, SecondaryVertex2Prong, "2PRONG");
121122

122123
// Defines the jet substrcuture table definition
124+
#define JETFLAVOURDEF_TABLE_DEF(_jet_type_, _name_, _description_) \
125+
namespace _name_##flavourdef \
126+
{ \
127+
DECLARE_SOA_COLUMN(Origin, origin, int); \
128+
} \
129+
DECLARE_SOA_TABLE(_jet_type_##FlavourDef, "AOD", _description_ "FlavourDef", _name_##flavourdef::Origin);
130+
123131
#define JETTAGGING_TABLE_DEF(_jet_type_, _name_, _description_) \
124132
namespace _name_##tagging \
125133
{ \
@@ -132,9 +140,11 @@ JETSV_TABLES_DEF(Charged, SecondaryVertex2Prong, "2PRONG");
132140
} \
133141
DECLARE_SOA_TABLE(_jet_type_##Tags, "AOD", _description_ "Tags", _name_##tagging::Origin, _name_##tagging::JetProb, _name_##tagging::FlagtaggedjetIP, _name_##tagging::FlagtaggedjetIPxyz, _name_##tagging::FlagtaggedjetSV, _name_##tagging::FlagtaggedjetSVxyz);
134142

135-
#define JETTAGGING_TABLES_DEF(_jet_type_, _description_) \
136-
JETTAGGING_TABLE_DEF(_jet_type_##Jet, _jet_type_##jet, _description_) \
137-
JETTAGGING_TABLE_DEF(_jet_type_##MCDetectorLevelJet, _jet_type_##mcdetectorleveljet, _description_ "MCD") \
143+
#define JETTAGGING_TABLES_DEF(_jet_type_, _description_) \
144+
JETTAGGING_TABLE_DEF(_jet_type_##Jet, _jet_type_##jet, _description_) \
145+
JETFLAVOURDEF_TABLE_DEF(_jet_type_##MCDetectorLevelJet, _jet_type_##mcdetectorleveljet, _description_ "MCD") \
146+
JETTAGGING_TABLE_DEF(_jet_type_##MCDetectorLevelJet, _jet_type_##mcdetectorleveljet, _description_ "MCD") \
147+
JETFLAVOURDEF_TABLE_DEF(_jet_type_##MCParticleLevelJet, _jet_type_##mcparticleleveljet, _description_ "MCP") \
138148
JETTAGGING_TABLE_DEF(_jet_type_##MCParticleLevelJet, _jet_type_##mcparticleleveljet, _description_ "MCP")
139149

140150
JETTAGGING_TABLES_DEF(Charged, "C");

PWGJE/TableProducer/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ o2physics_add_dpl_workflow(jet-track-derived
7878
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
7979
COMPONENT_NAME Analysis)
8080

81+
o2physics_add_dpl_workflow(jet-hf-definition
82+
SOURCES heavyFlavourDefinition.cxx
83+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
84+
COMPONENT_NAME Analysis)
85+
8186
o2physics_add_dpl_workflow(jet-taggerhf
8287
SOURCES jetTaggerHF.cxx
8388
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
/// \file heavyFlavourDefinition.cxx
13+
/// \brief Task to produce a table joinable to the jet tables for a flavour definition on MC
14+
/// \author Hanseo Park <hanseo.park@cern.ch>
15+
16+
#include <memory>
17+
#include <vector>
18+
19+
#include <TF1.h>
20+
#include <TH1.h>
21+
22+
#include "Framework/AnalysisTask.h"
23+
#include "Framework/AnalysisDataModel.h"
24+
#include "Framework/ASoA.h"
25+
#include "Framework/O2DatabasePDGPlugin.h"
26+
#include "Framework/runDataProcessing.h"
27+
#include "Common/Core/trackUtilities.h"
28+
29+
#include "PWGJE/DataModel/Jet.h"
30+
#include "PWGJE/DataModel/JetTagging.h"
31+
#include "PWGJE/Core/JetTaggingUtilities.h"
32+
#include "PWGJE/Core/JetDerivedDataUtilities.h"
33+
34+
using namespace o2;
35+
using namespace o2::framework;
36+
using namespace o2::framework::expressions;
37+
38+
template <typename JetTableMCD, typename JetTableMCP, typename JetFlavourDefMCD, typename JetFlavourDefMCP>
39+
struct HeavyFlavourDefinitionTask {
40+
41+
Produces<JetFlavourDefMCD> flavourTableMCD;
42+
Produces<JetFlavourDefMCP> flavourTableMCP;
43+
44+
Configurable<float> maxDeltaR{"maxDeltaR", 0.25, "maximum distance of jet axis from flavour initiating parton"};
45+
Configurable<bool> searchUpToQuark{"searchUpToQuark", true, "Finding first mother in particles to quark"};
46+
47+
using JetTracksMCD = soa::Join<aod::JetTracksMCD, aod::JTrackExtras, aod::JTrackPIs>;
48+
Preslice<aod::JetParticles> particlesPerCollision = aod::jmcparticle::mcCollisionId;
49+
50+
HistogramRegistry registry{"registry", {}, OutputObjHandlingPolicy::AnalysisObject};
51+
void init(InitContext const&)
52+
{
53+
}
54+
55+
void processDummy(aod::JetCollisions const&)
56+
{
57+
}
58+
PROCESS_SWITCH(HeavyFlavourDefinitionTask, processDummy, "Dummy process", true);
59+
60+
void processMCD(aod::JetCollision const& /*collision*/, JetTableMCD const& mcdjets, JetTracksMCD const& jtracks, aod::JetParticles const& particles)
61+
{
62+
for (auto const& mcdjet : mcdjets) {
63+
int origin = jettaggingutilities::mcdJetFromHFShower(mcdjet, jtracks, particles, maxDeltaR, searchUpToQuark);
64+
flavourTableMCD(origin);
65+
}
66+
}
67+
PROCESS_SWITCH(HeavyFlavourDefinitionTask, processMCD, "Fill definition of flavour for mcd jets", true);
68+
69+
void processMCDRun2(soa::Join<aod::JCollisions, aod::JCollisionPIs, aod::JMcCollisionLbs>::iterator const& collision, soa::Join<JetTableMCD, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets> const& mcdjets, soa::Join<JetTableMCP, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets> const& /*mcpjets*/, aod::JetParticles const& particles) // it used only for charged jets now
70+
{
71+
for (auto const& mcdjet : mcdjets) {
72+
auto const particlesPerColl = particles.sliceBy(particlesPerCollision, collision.mcCollisionId());
73+
int origin = -1;
74+
for (auto const& mcpjet : mcdjet.template matchedJetGeo_as<soa::Join<JetTableMCP, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets>>()) {
75+
if (searchUpToQuark) {
76+
origin = jettaggingutilities::getJetFlavor(mcpjet, particlesPerColl);
77+
} else {
78+
origin = jettaggingutilities::getJetFlavorHadron(mcpjet, particlesPerColl);
79+
}
80+
}
81+
flavourTableMCD(origin);
82+
}
83+
}
84+
PROCESS_SWITCH(HeavyFlavourDefinitionTask, processMCDRun2, "Fill definition of flavour for mcd jets (Run2)", false);
85+
86+
void processMCP(JetTableMCP const& mcpjets, aod::JetParticles const& particles)
87+
{
88+
for (auto const& mcpjet : mcpjets) {
89+
int origin = jettaggingutilities::mcpJetFromHFShower(mcpjet, particles, maxDeltaR, searchUpToQuark);
90+
flavourTableMCP(origin);
91+
}
92+
}
93+
PROCESS_SWITCH(HeavyFlavourDefinitionTask, processMCP, "Fill definition of flavour for mcp jets", true);
94+
95+
void processMCPRun2(JetTableMCP const& mcpjets, aod::JetParticles const& particles)
96+
{
97+
for (auto const& mcpjet : mcpjets) {
98+
auto const particlesPerColl = particles.sliceBy(particlesPerCollision, mcpjet.mcCollisionId());
99+
int origin = -1;
100+
if (searchUpToQuark) {
101+
origin = jettaggingutilities::getJetFlavor(mcpjet, particlesPerColl);
102+
} else {
103+
origin = jettaggingutilities::getJetFlavorHadron(mcpjet, particlesPerColl);
104+
}
105+
flavourTableMCP(origin);
106+
}
107+
}
108+
PROCESS_SWITCH(HeavyFlavourDefinitionTask, processMCPRun2, "Fill definition of flavour for mcp jets (Run2)", false);
109+
};
110+
111+
using JetFlavourDefCharged = HeavyFlavourDefinitionTask<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents>, soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>, aod::ChargedMCDetectorLevelJetFlavourDef, aod::ChargedMCParticleLevelJetFlavourDef>;
112+
using JetFlavourDefFull = HeavyFlavourDefinitionTask<soa::Join<aod::FullMCDetectorLevelJets, aod::FullMCDetectorLevelJetConstituents>, soa::Join<aod::FullMCParticleLevelJets, aod::FullMCParticleLevelJetConstituents>, aod::FullMCDetectorLevelJetFlavourDef, aod::FullMCParticleLevelJetFlavourDef>;
113+
// using JetTaggerhfNeutral = HeavyFlavourDefinitionTask<soa::Join<aod::NeutralMCDetectorLevelJets, aod::NeutralMCDetectorLevelJetConstituents>, aod::NeutralMCDetectorLevelJetTags, aod::NeutralMCParticleLevelJetFlavourDef>;
114+
115+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
116+
{
117+
118+
std::vector<o2::framework::DataProcessorSpec> tasks;
119+
120+
tasks.emplace_back(
121+
adaptAnalysisTask<JetFlavourDefCharged>(cfgc,
122+
SetDefaultProcesses{}));
123+
124+
tasks.emplace_back(
125+
adaptAnalysisTask<JetFlavourDefFull>(cfgc,
126+
SetDefaultProcesses{}));
127+
/*
128+
tasks.emplace_back(
129+
adaptAnalysisTask<JetFlavourDefNeutral>(cfgc,
130+
SetDefaultProcesses{}));
131+
*/
132+
return WorkflowSpec{tasks};
133+
}

0 commit comments

Comments
 (0)