ATLAS Offline Software
Loading...
Searching...
No Matches
GepJetAlg.cxx
Go to the documentation of this file.
1
2/*
3 * Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
4 */
5
6#include "./GepJetAlg.h"
7
8// Interface to jet reconstruction objects
9#include "./IJetMaker.h"
10
11// concrete jet reconstruction classes.
12#include "./ModAntikTJetMaker.h"
13#include "./ConeJetMaker.h"
14#include "./WTAConeJetMaker.h"
15#include "./JetTaggerLRJMaker.h"
16
17// input and output types
18#include "./Cluster.h"
19#include "./Jet.h"
21
24
25#include <tuple>
26#include <vector>
27
28GepJetAlg::GepJetAlg( const std::string& name, ISvcLocator* pSvcLocator ) :
29 AthReentrantAlgorithm( name, pSvcLocator ){
30
31}
32
33
35 ATH_MSG_INFO ("Initializing " << name() << "...");
36 ATH_MSG_INFO ("Jet alg " << m_jetAlgName);
37
38 // Initialize data access keys
39 CHECK(m_caloClustersKey.initialize());
40 CHECK(m_jFexSRJetsKey.initialize());
41 CHECK(m_outputGepJetsKey.initialize());
42
44 CHECK(m_lrjGFexSRJetsKey.initialize(!m_lrjGFexSRJetsKey.empty()));
45
46 // Build the JetTaggerLRJ configuration (and its deltaR LUT) once, so it is
47 // not recomputed per event. Gated on an explicit property (set by
48 // GepJetTaggerLRJAlgCfg) rather than the mode string; guard that the two
49 // agree so a misconfiguration fails loudly instead of silently skipping.
50 if (m_configureLRJMaker != (m_jetAlgName == "JetTaggerLRJ")) {
51 ATH_MSG_ERROR("EnableLRJMaker (" << m_configureLRJMaker.value()
52 << ") is inconsistent with jetAlgName '" << m_jetAlgName.value()
53 << "'; both must select JetTaggerLRJ together.");
54 return StatusCode::FAILURE;
55 }
58 }
59
60 return StatusCode::SUCCESS;
61}
62
63
65
66 // All JetTaggerLRJ settings are resolved in Python (GepJetTaggerLRJAlgCfg
67 // layers the BasicV2 / AdvancedV3 preset under any user overrides), so the
68 // properties are already concrete: copy them straight into the config.
70 cfg.algoVersion = m_LRJAlgoVersion;
71
72 // Geometry.
73 cfg.r2Cut = static_cast<double>(m_LRJJetR) * static_cast<double>(m_LRJJetR);
74 cfg.rMergeCut = m_LRJDSearch;
75
76 // Multiplicities.
77 cfg.nSeedsInput = m_LRJNSeedsInput;
78 cfg.nProtoSeeds = m_LRJNProtoSeeds;
79 cfg.nSeedsOutput = m_LRJNSeedsOutput;
80 cfg.maxObjectsConsidered = m_LRJMaxObjectsConsidered;
81
82 // Digitization bit lengths.
83 cfg.et_bit_length = m_LRJEtBitLength;
84 cfg.eta_bit_length = m_LRJEtaBitLength;
85 cfg.phi_bit_length = m_LRJPhiBitLength;
86 cfg.num_subjets_length = m_LRJNumSubjetsLength;
87 cfg.N_subjetiness_bit_length = m_LRJNSubjetinessBitLength;
88 cfg.mass_approx_bit_length = m_LRJMassApproxBitLength;
89 cfg.psi_R_bit_length = m_LRJPsiRBitLength;
90 cfg.deltaR_lut_length = m_LRJDeltaRLutLength;
91
92 // Physical ranges.
93 cfg.phi_min = m_LRJPhiMin;
94 cfg.phi_max = m_LRJPhiMax;
95 cfg.eta_min = m_LRJEtaMin;
96 cfg.eta_max = m_LRJEtaMax;
97 cfg.et_min = m_LRJEtMin;
98 cfg.et_max = m_LRJEtMax;
99 cfg.massApprox_max = m_LRJMassApproxMax;
100 cfg.inputEtToGeV = m_LRJInputEtToGeV;
101
102 // Thresholds.
103 cfg.subjetEtThresholdGeV = m_LRJSubjetEtThresholdGeV;
104 cfg.minEtSeedPosOptCutGeV = m_LRJMinEtSeedPosOptCutGeV;
105
106 // Flow / output toggles.
107 cfg.enableOverlapRemoval = m_LRJEnableOverlapRemoval;
108 cfg.enableEtWeightedMidpoint = m_LRJEnableEtWeightedMidpoint;
109 cfg.minEtSeedPosOptimization = m_LRJMinEtSeedPosOptimization;
110 cfg.writeSubstructure = m_LRJWriteSubstructure;
111 cfg.writeSubjetKinematics = m_LRJWriteSubjetKinematics;
112 cfg.writeConstituentIndices = m_LRJWriteConstituentIndices;
113
114 // Digitization must be fully specified (Python supplies the preset); a zero
115 // in these fields means the algorithm was built without GepJetTaggerLRJAlgCfg,
116 // which would make computeDerived() produce nonsense granularities
117 if (cfg.et_bit_length == 0 || cfg.eta_bit_length == 0 ||
118 cfg.phi_bit_length == 0 || cfg.deltaR_lut_length == 0) {
119 ATH_MSG_ERROR("JetTaggerLRJ digitization not configured (et/eta/phi/deltaR "
120 "bit length is 0); configure it via GepJetTaggerLRJAlgCfg.");
121 return StatusCode::FAILURE;
122 }
123
124 // Fill derived constants and build the deltaR LUT once.
125 cfg.computeDerived();
126 m_lrjMaker.m_cfg = cfg;
127
128 // Seed source: resolve the string to an enum once (no silent fallback) and
129 // require the matching input collection to be configured. Doing this here, in
130 // initialize(), means a bad seed/key combination fails at configure time
131 // rather than mid-event.
132 if (m_LRJSeedSource == "WTACone") {
134 if (m_lrjWTAConeSeedsKey.key().empty()) {
135 ATH_MSG_ERROR("LRJSeedSource=WTACone requires LRJWTAConeSeedsKey to be set");
136 return StatusCode::FAILURE;
137 }
138 } else if (m_LRJSeedSource == "jFexSRJ") {
140 if (m_jFexSRJetsKey.key().empty()) {
141 ATH_MSG_ERROR("LRJSeedSource=jFexSRJ requires jFexSRJetRoIs to be set");
142 return StatusCode::FAILURE;
143 }
144 } else if (m_LRJSeedSource == "gFexSRJ") {
146 if (m_lrjGFexSRJetsKey.key().empty()) {
147 ATH_MSG_ERROR("LRJSeedSource=gFexSRJ requires LRJgFexSRJetRoIs to be set");
148 return StatusCode::FAILURE;
149 }
150 } else {
151 ATH_MSG_ERROR("Unknown LRJSeedSource '" << m_LRJSeedSource.value() << "'");
152 return StatusCode::FAILURE;
153 }
154
155 // Constituent source: same explicit resolution (no silent fallback).
156 if (m_LRJConstSource == "WTACone") {
158 } else if (m_LRJConstSource == "Towers") {
160 } else {
161 ATH_MSG_ERROR("Unknown LRJConstSource '" << m_LRJConstSource.value() << "'");
162 return StatusCode::FAILURE;
163 }
164
165 ATH_MSG_INFO("Configured JetTaggerLRJ (v" << cfg.algoVersion
166 << ", seed=" << m_LRJSeedSource.value()
167 << ", const=" << m_LRJConstSource.value()
168 << "): r2Cut=" << cfg.r2Cut << ", rMergeCut=" << cfg.rMergeCut
169 << ", deltaR LUT size=" << cfg.lutR_8b.size());
170
171 return StatusCode::SUCCESS;
172}
173
174// Unified function for loading jet tagger LRJ seeds (WTA-cone, gFEX, or jFEX)
175template <typename Container, typename KinFn>
177 const EventContext& ctx,
178 KinFn&& kin,
179 std::vector<Gep::Jet>& seeds) const {
180 auto h = SG::makeHandle(key, ctx);
181 CHECK(h.isValid());
182 seeds.reserve(seeds.size() + h->size());
183 for (const auto* j : *h) {
184 const auto [pt, eta, phi, m] = kin(j);
185 Gep::Jet s;
186 s.vec.SetPtEtaPhiM(pt, eta, phi, m);
187 s.etaInput = eta; // raw, pre-round-trip (see Jet.h / JetTaggerLRJ)
188 s.phiInput = phi;
189 seeds.push_back(std::move(s));
190 }
191 return StatusCode::SUCCESS;
192}
193
194
195StatusCode GepJetAlg::execute(const EventContext& context) const {
196 ATH_MSG_DEBUG ("Executing " << name() << "...");
197
198
200 h_outputJets = SG::makeHandle(m_outputGepJetsKey, context);
201
202
203 CHECK(h_outputJets.record(std::make_unique<xAOD::JetContainer>(),
204 std::make_unique<xAOD::JetAuxContainer>()));
205
206 // read in clusters
207 auto h_caloClusters = SG::makeHandle(m_caloClustersKey, context);
208 CHECK(h_caloClusters.isValid());
209 ATH_MSG_DEBUG("Read in " << h_caloClusters->size() << " clusters");
210
211 const auto& clusters = *h_caloClusters;
212
213
214
215 std::vector<Gep::Cluster> gepClusters;
216 std::transform(clusters.cbegin(),
217 clusters.cend(),
218 std::back_inserter(gepClusters),
219 [](const auto& cluster){
220 Gep::Cluster c(cluster->p4());
221 // Keep the raw eta/phi (pre-TLorentzVector round-trip) so
222 // JetTaggerLRJ can digitize the same values the emulation reads.
223 c.etaInput = cluster->eta();
224 c.phiInput = cluster->phi();
225 return c;});
226
227
228
229 // create a jet maker
230 std::unique_ptr<Gep::IJetMaker> jetMaker{};
231
232
233 if ( m_jetAlgName=="ModAntikT" ) {
234 jetMaker.reset(new Gep::ModAntikTJetMaker());
235 }
236
237 else if ( m_jetAlgName=="Cone" ) {
238
239 // Use jJFexSR RoIs as seeds
240 auto h_seeds = SG::makeHandle(m_jFexSRJetsKey, context);
241 CHECK(h_seeds.isValid());
242 ATH_MSG_DEBUG("No of seeds "<< h_seeds->size());
243 jetMaker.reset(new Gep::ConeJetMaker(0.4, *h_seeds));
244
245 } else if(m_jetAlgName=="WTACone"){ // Large block for the WTACone
246
247 auto WTAConeJetMaker = std::make_unique<Gep::WTAConeJetMaker>(); // Default parameters for now
248
249 #ifdef FLOATING_POINT_SIMULATION
250 WTAConeJetMaker->m_GEPWTAParameters.SetConstEtCut(m_WTAConstEtCut * Athena::Units::GeV); // Set ConstEtCut to 2GeV
251 WTAConeJetMaker->m_GEPWTAParameters.SetSeedEtCut(m_WTASeedEtCut * Athena::Units::GeV); // Set SeedEtCut to 5GeV by default
252 WTAConeJetMaker->m_GEPWTAParameters.SetJet_dR(m_WTAJet_dR);
253 WTAConeJetMaker->m_GEPWTAParameters.SetIso_dR(m_WTAJet_dR); // Default is Jet_dR = Iso_dR
254 #else
255 // float to int/bitwise conversion
256 WTAConeJetMaker->m_GEPWTAParameters.SetConstEtCut(static_cast<unsigned int>(m_WTAConstEtCut * Athena::Units::GeV / LSB)); // Set ConstEtCut to 8 bits, LSB = 250 MeV
257 WTAConeJetMaker->m_GEPWTAParameters.SetSeedEtCut(static_cast<unsigned int>(m_WTASeedEtCut * Athena::Units::GeV / LSB)); // Set SeedEtCut to 20 bits by default
258 WTAConeJetMaker->m_GEPWTAParameters.SetJet_dR(static_cast<unsigned int>(m_WTAJet_dR * 10));
259 WTAConeJetMaker->m_GEPWTAParameters.SetIso_dR(static_cast<unsigned int>(m_WTAJet_dR * 10));
260 #endif
261
262 WTAConeJetMaker->m_GEPWTAParameters.SetMaxConstN(m_WTAMaxConstN);
263 WTAConeJetMaker->m_GEPWTAParameters.SetMaxSeedSortingN(m_WTAMaxSeedSortingN);
264 WTAConeJetMaker->SetBlockN(m_WTABlockN);
265
266 WTAConeJetMaker->SetSeedCleaningAlgo(0); // 0 = Baseline
267 if(m_WTASeedCleaningName=="TwoPass")WTAConeJetMaker->SetSeedCleaningAlgo(1); // 1 = TwoPass
268
269 jetMaker = std::move(WTAConeJetMaker);
270 } // WTACone loop, will be updated as the WTAConeJets
271 else if ( m_jetAlgName=="JetTaggerLRJ" ) {
272
273 // ------------------------------------------------------------------
274 // JetTaggerLRJ: modified seeded-cone large-R jet maker.
275 // ------------------------------------------------------------------
276
277 // ---- build seeds vector (Gep::Jet) ----
278 // Seed source is validated in initialize(); dispatch on the resolved enum.
279 // The sources differ only in the input collection and the (pt/et, mass)
280 // accessor, which each per-case lambda supplies to loadLRJSeeds().
281 std::vector<Gep::Jet> lrjSeeds;
282 switch (m_lrjMaker.GetSeedSource()) {
285 [](const xAOD::Jet* j) {
286 return std::tuple{j->pt(), j->eta(), j->phi(), j->m()};
287 }, lrjSeeds));
288 break;
291 [](const xAOD::jFexSRJetRoI* j) {
292 return std::tuple{static_cast<double>(j->et()), static_cast<double>(j->eta()), static_cast<double>(j->phi()), 0.0};
293 }, lrjSeeds));
294 break;
297 [](const xAOD::gFexJetRoI* j) {
298 return std::tuple{static_cast<double>(j->et()), static_cast<double>(j->eta()), static_cast<double>(j->phi()), 0.0};
299 }, lrjSeeds));
300 break;
301 }
302 ATH_MSG_DEBUG("JetTaggerLRJ loaded " << lrjSeeds.size() << " seeds ("
303 << m_LRJSeedSource.value() << ")");
304
305 // ---- build constituents vector (Gep::Cluster) ----
306 // Both "Towers" and "WTACone" constituent sources currently reuse the
307 // input m_caloClustersKey container; runConfig.py points it at the
308 // appropriate collection ("CellTower" or the WTACone output). When the
309 // two need to differ at run time the maker takes std::vector<Gep::Cluster>
310 // either way; adjust the wiring here without touching the maker.
311 const std::vector<Gep::Cluster>& lrjConstituents = gepClusters;
312
313 // Maker (and its deltaR LUT) is configured once in initialize().
314 std::vector<Gep::LargeRJet> lrjs = m_lrjMaker.makeLargeRJets(lrjSeeds, lrjConstituents);
315 ATH_MSG_DEBUG("JetTaggerLRJ produced " << lrjs.size() << " large-R jets");
316
317 if (!lrjs.empty()) {
318 for (const auto& lrj : lrjs) {
319 std::unique_ptr<xAOD::Jet> xAODJet{new xAOD::Jet()};
320 xAOD::Jet* p = xAODJet.get();
321 h_outputJets->push_back(std::move(xAODJet));
322
324 p4.SetPt (lrj.vec.Pt());
325 p4.SetEta(lrj.vec.Eta());
326 p4.SetPhi(lrj.vec.Phi());
327 p4.SetM (lrj.vec.M());
328 p->setJetP4(p4);
329
330 p->setAttribute("RCut", lrj.radius);
331 p->setAttribute("SeedEt", lrj.seedEt);
332 p->setAttribute("SeedEta", lrj.seedEta);
333 p->setAttribute("SeedPhi", lrj.seedPhi);
334 p->setAttribute("NSubjets", lrj.nSubjets);
335 p->setAttribute("Psi_R", lrj.psi_R);
336 p->setAttribute("Tau_1", lrj.tau_1);
337 p->setAttribute("Tau_2", lrj.tau_2);
338 p->setAttribute("Tau_21", lrj.tau_21);
339 p->setAttribute("MassApprox", lrj.massApprox);
340 // Per-subjet kinematics as indexed SCALAR attributes (SubjetEt0,
341 // SubjetEt1, ...). std::vector<float> jet attributes do not round-trip
342 // to the reader here (neither setAttribute nor auxdata), whereas
343 // scalar attributes do; the reader reads back NSubjets of them.
344 for (size_t is = 0; is < lrj.subjet_et.size(); ++is) {
345 const std::string s = std::to_string(is);
346 p->setAttribute(std::string("SubjetEt") + s, lrj.subjet_et[is]);
347 p->setAttribute(std::string("SubjetEta") + s, lrj.subjet_eta[is]);
348 p->setAttribute(std::string("SubjetPhi") + s, lrj.subjet_phi[is]);
349 }
350
351 // Attach constituents (indices into the input cluster container) so the
352 // reader's numConstituents()/getConstituents() populate, mirroring the
353 // generic maker path below.
354 for (const int i : lrj.constituentsIndices) {
355 p->addConstituent(clusters.at(i));
356 }
357 }
358 }
359 return StatusCode::SUCCESS;
360 }
361 else {
362 ATH_MSG_ERROR( "Unknown JetMaker " << m_jetAlgName);
363 return StatusCode::FAILURE;
364 }
365
366 ATH_MSG_DEBUG( "jet maker: " << jetMaker->toString());
367
368 std::vector<Gep::Jet> gepJets = jetMaker->makeJets( gepClusters );
369
370 ATH_MSG_DEBUG("Number of jets found for " <<
371 m_jetAlgName << " " <<gepJets.size());
372
373 // if no jets were found, skip event
374 if( gepJets.empty() ){
375 return StatusCode::SUCCESS;
376 }
377
378 // store gep jets in athena format
379 for(const auto& gjet: gepJets){
380
381 std::unique_ptr<xAOD::Jet> xAODJet{new xAOD::Jet()};
382 xAOD::Jet* p_xAODJet = xAODJet.get();
383
384 // store the xAOD::Jet in the output container to prepare the Aux container
385 // The move invalids the unique_ptr, but we still have the bare pointer
386 // which allows the updating of the xAODJet from the gep jet data.
387 h_outputJets->push_back(std::move(xAODJet));
388
390 p4.SetPt(gjet.vec.Pt());
391 p4.SetEta(gjet.vec.Eta());
392 p4.SetPhi(gjet.vec.Phi());
393 p4.SetM(gjet.vec.M());
394
395 p_xAODJet->setJetP4(p4);
396
397 p_xAODJet->setAttribute("RCut", gjet.radius);
398 p_xAODJet->setAttribute("SeedEta", gjet.seedEta); // < gep attributes
399 p_xAODJet->setAttribute("SeedPhi", gjet.seedPhi); //
400 p_xAODJet->setAttribute("SeedEt", gjet.seedEt); //
401 p_xAODJet->setAttribute("Ring0_Et", gjet.ring0_Et);
402 p_xAODJet->setAttribute("Ring1_Et", gjet.ring1_Et);
403 p_xAODJet->setAttribute("Ring2_Et", gjet.ring2_Et);
404 p_xAODJet->setAttribute("Ring3_Et", gjet.ring3_Et);
405 p_xAODJet->setAttribute("Ring4_Et", gjet.ring4_Et);
406 p_xAODJet->setAttribute("Total_TobN", gjet.total_TobN);
407 p_xAODJet->setAttribute("Ring0_TobN", gjet.ring0_TobN);
408 p_xAODJet->setAttribute("Ring1_TobN", gjet.ring1_TobN);
409 p_xAODJet->setAttribute("Ring2_TobN", gjet.ring2_TobN);
410 p_xAODJet->setAttribute("Ring3_TobN", gjet.ring3_TobN);
411 p_xAODJet->setAttribute("Ring4_TobN", gjet.ring4_TobN);
412
413 for (const auto& i: gjet.constituentsIndices) {
414 p_xAODJet->addConstituent(clusters.at(i));
415 }
416
417 }
418
419 return StatusCode::SUCCESS;
420}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
Header file for AthHistogramAlgorithm.
An algorithm that can be simultaneously executed in multiple threads.
Gaudi::Property< unsigned int > m_LRJEtBitLength
Definition GepJetAlg.h:132
Gaudi::Property< unsigned int > m_LRJNumSubjetsLength
Definition GepJetAlg.h:138
Gaudi::Property< float > m_LRJEtMax
Definition GepJetAlg.h:155
Gaudi::Property< bool > m_LRJWriteSubjetKinematics
Definition GepJetAlg.h:183
Gaudi::Property< float > m_LRJEtMin
Definition GepJetAlg.h:154
StatusCode configureLRJMaker()
Definition GepJetAlg.cxx:64
Gaudi::Property< float > m_LRJPhiMin
Definition GepJetAlg.h:150
Gaudi::Property< float > m_LRJInputEtToGeV
Definition GepJetAlg.h:157
Gaudi::Property< unsigned int > m_LRJNSeedsOutput
Definition GepJetAlg.h:125
Gaudi::Property< float > m_LRJPhiMax
Definition GepJetAlg.h:151
Gaudi::Property< bool > m_LRJMinEtSeedPosOptimization
Definition GepJetAlg.h:177
StatusCode loadLRJSeeds(const SG::ReadHandleKey< Container > &key, const EventContext &ctx, KinFn &&kin, std::vector< Gep::Jet > &seeds) const
Gaudi::Property< float > m_WTAJet_dR
Definition GepJetAlg.h:70
SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > m_jFexSRJetsKey
Definition GepJetAlg.h:56
Gaudi::Property< float > m_WTASeedEtCut
Definition GepJetAlg.h:67
Gaudi::Property< float > m_WTAConstEtCut
Definition GepJetAlg.h:64
Gaudi::Property< bool > m_LRJWriteConstituentIndices
Definition GepJetAlg.h:185
Gaudi::Property< std::string > m_jetAlgName
Definition GepJetAlg.h:46
Gaudi::Property< unsigned int > m_LRJEtaBitLength
Definition GepJetAlg.h:134
virtual StatusCode initialize() override
Definition GepJetAlg.cxx:34
Gaudi::Property< unsigned int > m_LRJNSeedsInput
Definition GepJetAlg.h:119
Gaudi::Property< unsigned int > m_LRJMassApproxBitLength
Definition GepJetAlg.h:142
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_caloClustersKey
Definition GepJetAlg.h:53
SG::ReadHandleKey< xAOD::gFexJetRoIContainer > m_lrjGFexSRJetsKey
Definition GepJetAlg.h:94
virtual StatusCode execute(const EventContext &) const override
Gaudi::Property< std::string > m_WTASeedCleaningName
Definition GepJetAlg.h:82
Gaudi::Property< unsigned int > m_WTABlockN
Definition GepJetAlg.h:79
Gaudi::Property< unsigned int > m_WTAMaxConstN
Definition GepJetAlg.h:73
Gaudi::Property< std::string > m_LRJSeedSource
Definition GepJetAlg.h:100
Gaudi::Property< unsigned int > m_WTAMaxSeedSortingN
Definition GepJetAlg.h:76
Gaudi::Property< unsigned int > m_LRJAlgoVersion
Definition GepJetAlg.h:107
Gaudi::Property< float > m_LRJEtaMax
Definition GepJetAlg.h:153
Gaudi::Property< unsigned int > m_LRJNSubjetinessBitLength
Definition GepJetAlg.h:140
Gaudi::Property< float > m_LRJSubjetEtThresholdGeV
Definition GepJetAlg.h:160
SG::WriteHandleKey< xAOD::JetContainer > m_outputGepJetsKey
Definition GepJetAlg.h:59
Gaudi::Property< unsigned int > m_LRJNProtoSeeds
Definition GepJetAlg.h:122
Gaudi::Property< float > m_LRJJetR
Definition GepJetAlg.h:111
GepJetAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition GepJetAlg.cxx:28
Gaudi::Property< bool > m_LRJWriteSubstructure
Definition GepJetAlg.h:181
Gaudi::Property< bool > m_LRJEnableEtWeightedMidpoint
Definition GepJetAlg.h:175
Gaudi::Property< unsigned int > m_LRJPsiRBitLength
Definition GepJetAlg.h:144
Gaudi::Property< std::string > m_LRJConstSource
Definition GepJetAlg.h:103
Gaudi::Property< float > m_LRJMassApproxMax
Definition GepJetAlg.h:156
Gaudi::Property< bool > m_LRJEnableOverlapRemoval
Definition GepJetAlg.h:173
Gaudi::Property< float > m_LRJDSearch
Definition GepJetAlg.h:114
Gaudi::Property< float > m_LRJMinEtSeedPosOptCutGeV
Definition GepJetAlg.h:163
Gaudi::Property< bool > m_configureLRJMaker
Definition GepJetAlg.h:49
Gaudi::Property< unsigned int > m_LRJPhiBitLength
Definition GepJetAlg.h:136
Gep::JetTaggerLRJMaker m_lrjMaker
Definition GepJetAlg.h:189
Gaudi::Property< unsigned int > m_LRJDeltaRLutLength
Definition GepJetAlg.h:146
Gaudi::Property< float > m_LRJEtaMin
Definition GepJetAlg.h:152
Gaudi::Property< unsigned int > m_LRJMaxObjectsConsidered
Definition GepJetAlg.h:128
SG::ReadHandleKey< xAOD::JetContainer > m_lrjWTAConeSeedsKey
Definition GepJetAlg.h:90
Property holding a SG store/key/clid from which a ReadHandle is made.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
void setAttribute(const std::string &name, const T &v)
void addConstituent(const ElementLink< IParticleContainer > &link, float weight=1.0)
Add a constituent directly in the ElementLink format.
Definition Jet_v1.cxx:113
void setJetP4(const JetFourMom_t &p4)
Definition Jet_v1.cxx:182
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Jet_v1 Jet
Definition of the current "jet version".
gFexJetRoI_v1 gFexJetRoI
Define the latest version of the gFexJetRoI class.
Definition gFexJetRoI.h:16
jFexSRJetRoI_v1 jFexSRJetRoI
Define the latest version of the jFexSRJetRoI class.
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition JetTypes.h:17