ATLAS Offline Software
TracksLoader.cxx
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 namespace FlavorTagDiscriminants {
11  // factory for functions which return the sort variable we
12  // use to order tracks
15  const FTagOptions& options)
16  {
17  typedef xAOD::TrackParticle Tp;
18  typedef xAOD::Jet Jet;
19  BTagTrackIpAccessor aug(options.track_prefix);
20  switch(config) {
22  return [aug](const Tp* tp, const Jet&) {
23  return std::abs(aug.d0(*tp) / aug.d0Uncertainty(*tp));
24  };
26  return [aug](const Tp* tp, const Jet& j) {
28  };
30  return [](const Tp* tp, const Jet&) {return tp->pt();};
32  return [aug](const Tp* tp, const Jet&) {
33  return std::abs(aug.d0(*tp));
34  };
35 
36  default: {
37  throw std::logic_error("Unknown sort function");
38  }
39  }
40  } // end of track sort getter
41 
42  // factory for functions that return true for tracks we want to
43  // use, false for those we don't want
44  std::pair<TracksLoader::TrackFilter,std::set<std::string>> TracksLoader::trackFilter(
46  const FTagOptions& options)
47  {
48 
49  typedef xAOD::TrackParticle Tp;
50  typedef SG::AuxElement AE;
51  BTagTrackIpAccessor aug(options.track_prefix);
52  auto data_deps = aug.getTrackIpDataDependencyNames();
53 
54  // make sure we record accessors as data dependencies
55  std::set<std::string> track_deps;
56  auto addAccessor = [&track_deps](const std::string& n) {
58  track_deps.insert(n);
59  return a;
60  };
61  auto pix_hits = addAccessor("numberOfPixelHits");
62  auto pix_holes = addAccessor("numberOfPixelHoles");
63  auto pix_shared = addAccessor("numberOfPixelSharedHits");
64  auto pix_dead = addAccessor("numberOfPixelDeadSensors");
65  auto sct_hits = addAccessor("numberOfSCTHits");
66  auto sct_holes = addAccessor("numberOfSCTHoles");
67  auto sct_shared = addAccessor("numberOfSCTSharedHits");
68  auto sct_dead = addAccessor("numberOfSCTDeadSensors");
69 
70  // data deps is all possible dependencies. We insert here to
71  // avoid removing them from track_deps (as merge would).
72  data_deps.insert(track_deps.begin(), track_deps.end());
73 
74  switch (config) {
75  case ConstituentsSelection::ALL: return {[](const Tp*) {return true;}, {} };
76  // the following numbers come from Nicole, Dec 2018:
77  // pt > 1 GeV
78  // abs(d0) < 1 mm
79  // abs(z0 sin(theta)) < 1.5 mm
80  // >= 7 si hits
81  // <= 2 si holes
82  // <= 1 pix holes
84  return {
85  [=](const Tp* tp) {
86  // from the track selector tool
87  if (std::abs(tp->eta()) > 2.5) return false;
88  double n_module_shared = (pix_shared(*tp) + sct_shared(*tp) / 2);
89  if (n_module_shared > 1) return false;
90  if (tp->pt() <= 1e3) return false;
91  if (std::abs(aug.d0(*tp)) >= 1.0) return false;
92  if (std::abs(aug.z0SinTheta(*tp)) >= 1.5) return false;
93  if (pix_hits(*tp) + pix_dead(*tp) + sct_hits(*tp) + sct_dead(*tp) < 7) return false;
94  if ((pix_holes(*tp) + sct_holes(*tp)) > 2) return false;
95  if (pix_holes(*tp) > 1) return false;
96  return true;
97  }, data_deps
98  };
99  // Tight track selection for DIPS upgrade config
100  // abs(eta) < 4
101  // pt > 1 GeV
102  // abs(d0) < 1 mm
103  // abs(z0 sin(theta)) < 1.5 mm
104  // No cuts for si hits, si holes and pix holes - only reconstruction selection is applied
106  return {
107  [=](const Tp* tp) {
108  // from the track selector tool
109  if (std::abs(tp->eta()) > 4.0) return false;
110  if (tp->pt() <= 1e3) return false;
111  if (std::abs(aug.d0(*tp)) >= 1.0) return false;
112  if (std::abs(aug.z0SinTheta(*tp)) >= 1.5) return false;
113  return true;
114  }, data_deps
115  };
116  // Loose track selection for DIPS upgrade config
117  // abs(eta) < 4
118  // pt > 0.5 GeV
119  // abs(d0) < 3.5 mm
120  // abs(z0 sin(theta)) < 5.0 mm
121  // No cuts for si hits, si holes and pix holes - only reconstruction selection is applied
123  return {
124  [=](const Tp* tp) {
125  // from the track selector tool
126  if (std::abs(tp->eta()) > 4.0) return false;
127  if (tp->pt() <= 0.5e3) return false;
128  if (std::abs(aug.d0(*tp)) >= 3.5) return false;
129  if (std::abs(aug.z0SinTheta(*tp)) >= 5.0) return false;
130  return true;
131  }, data_deps
132  };
133  // Loose track selection for DIPS
134  // pt > 0.5 GeV
135  // abs(d0) < 3.5 mm
136  // abs(z0 sin(theta)) < 5.0 mm
137  // >= 7 si hits
138  // <= 2 si holes
139  // <= 1 pix holes
141  return {
142  [=](const Tp* tp) {
143  // from the track selector tool
144  if (std::abs(tp->eta()) > 2.5) return false;
145  double n_module_shared = (pix_shared(*tp) + sct_shared(*tp) / 2);
146  if (n_module_shared > 1) return false;
147  if (tp->pt() <= 0.5e3) return false;
148  if (std::abs(aug.d0(*tp)) >= 3.5) return false;
149  if (std::abs(aug.z0SinTheta(*tp)) >= 5.0) return false;
150  if (pix_hits(*tp) + pix_dead(*tp) + sct_hits(*tp) + sct_dead(*tp) < 7) return false;
151  if ((pix_holes(*tp) + sct_holes(*tp)) > 2) return false;
152  if (pix_holes(*tp) > 1) return false;
153  return true;
154  }, data_deps
155  };
157  return {
158  [=](const Tp* tp) {
159  if (std::abs(tp->eta()) > 2.5) return false;
160  double n_module_shared = (pix_shared(*tp) + sct_shared(*tp) / 2);
161  if (n_module_shared > 1) return false;
162  if (tp->pt() <= 0.5e3) return false;
163  if (pix_hits(*tp) + pix_dead(*tp) + sct_hits(*tp) + sct_dead(*tp) < 7) return false;
164  if ((pix_holes(*tp) + sct_holes(*tp)) > 2) return false;
165  if (pix_holes(*tp) > 1) return false;
166  return true;
167  }, track_deps
168  };
169  // R22_DEFAULT is similar to DIPS_LOOSE_202102, but modifies the min Si hit cut to 8,
170  // which is the default tracking CP recommendation for r22, see
171  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TrackingCPRecsRun2R22#Selection_Criteria
173  return {
174  [=](const Tp* tp) {
175  // from the track selector tool
176  if (std::abs(tp->eta()) > 2.5) return false;
177  double n_module_shared = (pix_shared(*tp) + sct_shared(*tp) / 2);
178  if (n_module_shared > 1) return false;
179  if (tp->pt() <= 0.5e3) return false;
180  if (std::abs(aug.d0(*tp)) >= 3.5) return false;
181  if (std::abs(aug.z0SinTheta(*tp)) >= 5.0) return false;
182  if (pix_hits(*tp) + pix_dead(*tp) + sct_hits(*tp) + sct_dead(*tp) < 8) return false;
183  if ((pix_holes(*tp) + sct_holes(*tp)) > 2) return false;
184  if (pix_holes(*tp) > 1) return false;
185  return true;
186  }, data_deps
187  };
188  // R22_LOOSE is similar to R22_DEFAULT, but removes the shared module cut
189  // and loosens the d0 cut
191  return {
192  [=](const Tp* tp) {
193  // from the track selector tool
194  if (std::abs(tp->eta()) > 2.5) return false;
195  if (tp->pt() <= 0.5e3) return false;
196  if (std::abs(aug.d0(*tp)) >= 5.0) return false;
197  if (std::abs(aug.z0SinTheta(*tp)) >= 5.0) return false;
198  if (pix_hits(*tp) + pix_dead(*tp) + sct_hits(*tp) + sct_dead(*tp) < 8) return false;
199  if ((pix_holes(*tp) + sct_holes(*tp)) > 2) return false;
200  if (pix_holes(*tp) > 1) return false;
201  return true;
202  }, data_deps
203  };
204  default:
205  throw std::logic_error("unknown track selection function");
206  }
207  }
208 
209  // here we define filters for the "flip" taggers
210  //
211  // start by defining the raw functions, there's a factory
212  // function below to convert the configuration enums to a
213  // std::function
214  Tracks negativeIpOnly(BTagTrackIpAccessor& aug, const Tracks& tracks, const xAOD::Jet& j)
215  {
216  Tracks filtered;
217  // we want to reverse the order of the tracks as part of the
218  // flipping
219  for (auto ti = tracks.crbegin(); ti != tracks.crend(); ti++) {
220  const xAOD::TrackParticle* tp = *ti;
221  double sip = aug.getSignedIp(*tp, j).ip3d_signed_d0_significance;
222  if (sip < 0) filtered.push_back(tp);
223  }
224  return filtered;
225  }
226 
227  // factory function
228  std::pair<TracksLoader::TrackSequenceFilter,std::set<std::string>> TracksLoader::trackFlipper(
229  const FTagOptions& options)
230  {
231  namespace ph = std::placeholders; // for _1, _2, _3
232  BTagTrackIpAccessor aug(options.track_prefix);
233  switch(options.flip) {
235  // flips order and removes tracks with negative IP
236  return {
237  std::bind(&negativeIpOnly, aug, ph::_1, ph::_2),
239  };
241  // Just flips the order
242  return {
243  [](const Tracks& tr, const xAOD::Jet& ) {
244  return Tracks(tr.crbegin(), tr.crend());},
245  {}
246  };
248  // Just flips the order
249  return {
250  [](const Tracks& tr, const xAOD::Jet& ) {
251  return Tracks(tr.crbegin(), tr.crend());},
252  {}
253  };
254 
256  return {[](const Tracks& tr, const xAOD::Jet& ) { return tr; }, {}};
257  default: {
258  throw std::logic_error("Unknown flip config");
259  }
260  }
261  }
262 
265  const FTagOptions& options
266  ):
268  m_trackSortVar(TracksLoader::trackSortVar(cfg.order, options)),
269  m_trackFilter(TracksLoader::trackFilter(cfg.selection, options).first),
270  m_trackFlipper(TracksLoader::trackFlipper(options).first),
271  m_seqGetter(getter_utils::SeqGetter<xAOD::TrackParticle>(
272  cfg.inputs, options))
273  {
274  // We have several ways to get tracks: either we retrieve an
275  // IParticleContainer and cast the pointers to TrackParticle, or
276  // we retrieve a TrackParticleContainer directly. Unfortunately
277  // the way tracks are stored isn't consistent across the EDM, so
278  // we allow configuration for both setups.
279  //
280  if (options.track_link_type == TrackLinkType::IPARTICLE) {
282  m_associator = [acc](const SG::AuxElement& btag) -> Tracks {
283  Tracks tracks;
284  for (const ElementLink<IPC>& link: acc(btag)) {
285  if (!link.isValid()) {
286  throw std::logic_error("invalid particle link");
287  }
288  const auto* trk = dynamic_cast<const xAOD::TrackParticle*>(*link);
289  if (!trk) {
290  throw std::logic_error("iparticle does not cast to Track");
291  }
292  tracks.push_back(trk);
293  }
294  return tracks;
295  };
296  } else if (options.track_link_type == TrackLinkType::TRACK_PARTICLE){
298  m_associator = [acc](const SG::AuxElement& btag) -> Tracks {
299  Tracks tracks;
300  for (const ElementLink<TPC>& link: acc(btag)) {
301  if (!link.isValid()) {
302  throw std::logic_error("invalid track link");
303  }
304  tracks.push_back(*link);
305  }
306  return tracks;
307  };
308  } else {
309  throw std::logic_error("Unknown TrackLinkType");
310  }
311  auto track_data_deps = trackFilter(cfg.selection, options).second;
312  track_data_deps.merge(trackFlipper(options).second);
313  track_data_deps.merge(m_seqGetter.getDependencies());
314  m_deps.trackInputs.merge(track_data_deps);
315  m_deps.bTagInputs.insert(options.track_link_name);
316  m_used_remap = m_seqGetter.getUsedRemap();
317  m_name = cfg.name;
318  }
319 
321  const xAOD::Jet& jet,
322  const SG::AuxElement& btag) const
323  {
324  std::vector<std::pair<double, const Track*>> tracks;
325  for (const Track *tp : m_associator(btag)) {
326  if (m_trackFilter(tp)) {
327  tracks.push_back({m_trackSortVar(tp, jet), tp});
328  };
329  }
330  std::sort(tracks.begin(), tracks.end(), std::greater<>());
331  std::vector<const Track*> only_tracks;
332  only_tracks.reserve(tracks.size());
333  for (const auto& trk: tracks) {
334  only_tracks.push_back(trk.second);
335  }
336  return only_tracks;
337  }
338 
339  std::tuple<std::string, Inputs, std::vector<const xAOD::IParticle*>>
340  TracksLoader::getData(const xAOD::Jet& jet, [[maybe_unused]] const SG::AuxElement& btag) const
341  {
342  Tracks sorted_tracks = getTracksFromJet(jet, btag);
343  Tracks flipped_tracks = m_trackFlipper(sorted_tracks, jet);
344 
345  // cast to IParticle for aux task decoration
346  // this could probably be templated since we cast back again later
347  std::vector<const xAOD::IParticle*> flipped_iparticles;
348  for (const auto& trk: flipped_tracks) {
349  flipped_iparticles.push_back(trk);
350  }
351 
352  Inputs features = m_seqGetter.getFeats(jet, flipped_tracks);
353  return std::make_tuple(m_config.output_name, features, flipped_iparticles);
354  }
355 
356  std::tuple<char, std::map<std::string, std::vector<double>>> TracksLoader::getDL2Data(
357  const xAOD::Jet& jet,
358  const SG::AuxElement& btag,
359  std::function<char(const Tracks&)> ip_checker) const{
360  char invalid = 0;
361  Tracks flipped_tracks;
362  std::vector<const xAOD::IParticle*> flipped_tracks_ip;
363 
364  Tracks sorted_tracks = getTracksFromJet(jet, btag);
365  if (ip_checker(sorted_tracks)) invalid = 1;
366  flipped_tracks = m_trackFlipper(sorted_tracks, jet);
367 
368  auto feats = m_seqGetter.getDL2Feats(jet, flipped_tracks);
369  return std::make_tuple(invalid, feats);
370  };
371 
373  return m_deps;
374  }
375  std::set<std::string> TracksLoader::getUsedRemap() const {
376  return m_used_remap;
377  }
378  std::string TracksLoader::getName() const {
379  return m_name;
380  }
382  return m_config.type;
383  }
384 }
FlavorTagDiscriminants::FlipTagConfig::SIMPLE_FLIP
@ SIMPLE_FLIP
FlavorTagDiscriminants::ConstituentsSortOrder
ConstituentsSortOrder
Definition: ConstituentsLoader.h:32
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
FlavorTagDiscriminants::ConstituentsSelection::IP3D_2018
@ IP3D_2018
FlavorTagDiscriminants::TracksLoader::trackSortVar
TrackSortVar trackSortVar(ConstituentsSortOrder, const FTagOptions &)
Definition: TracksLoader.cxx:13
FlavorTagDiscriminants::ConstituentsInputConfig
Definition: ConstituentsLoader.h:59
FlavorTagDiscriminants::FlipTagConfig::STANDARD
@ STANDARD
FlavorTagDiscriminants
This file contains "getter" functions used for accessing tagger inputs from the EDM.
Definition: AssociationEnums.h:11
FlavorTagDiscriminants::Inputs
std::pair< std::vector< float >, std::vector< int64_t > > Inputs
Definition: FlavorTagDiscriminants/FlavorTagDiscriminants/OnnxUtil.h:28
FlavorTagDiscriminants::IConstituentsLoader
Definition: ConstituentsLoader.h:75
FlavorTagDiscriminants::ConstituentsInputConfig::type
ConstituentsType type
Definition: ConstituentsLoader.h:62
SG::AuxElement
Base class for elements of a container that can have aux data.
Definition: AuxElement.h:446
FlavorTagDiscriminants::TracksLoader::m_trackFlipper
TrackSequenceFilter m_trackFlipper
Definition: TracksLoader.h:88
BTagTrackIpAccessor::d0
double d0(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:76
FlavorTagDiscriminants::FlipTagConfig::NEGATIVE_IP_ONLY
@ NEGATIVE_IP_ONLY
ParticleTest.tp
tp
Definition: ParticleTest.py:25
FlavorTagDiscriminants::TracksLoader::getDependencies
FTagDataDependencyNames getDependencies() const override
Definition: TracksLoader.cxx:372
FlavorTagDiscriminants::TracksLoader::trackFlipper
std::pair< TrackSequenceFilter, std::set< std::string > > trackFlipper(const FTagOptions &)
Definition: TracksLoader.cxx:228
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
FlavorTagDiscriminants::TracksLoader::AE
SG::AuxElement AE
Definition: TracksLoader.h:72
FlipTagEnums.h
postInclude.inputs
inputs
Definition: postInclude.SortInput.py:15
FlavorTagDiscriminants::FTagDataDependencyNames::bTagInputs
std::set< std::string > bTagInputs
Definition: FTagDataDependencyNames.h:14
FlavorTagDiscriminants::IConstituentsLoader::m_name
std::string m_name
Definition: ConstituentsLoader.h:93
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
FlavorTagDiscriminants::TracksLoader::TrackSortVar
std::function< double(const Track *, const Jet &)> TrackSortVar
Definition: TracksLoader.h:66
FlavorTagDiscriminants::IConstituentsLoader::m_used_remap
std::set< std::string > m_used_remap
Definition: ConstituentsLoader.h:92
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
BTagTrackIpAccessor
Definition: BTagTrackIpAccessor.h:29
FlavorTagDiscriminants::ConstituentsSortOrder::ABS_D0_SIGNIFICANCE_DESCENDING
@ ABS_D0_SIGNIFICANCE_DESCENDING
FlavorTagDiscriminants::ConstituentsSelection::DIPS_TIGHT_UPGRADE
@ DIPS_TIGHT_UPGRADE
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
FlavorTagDiscriminants::FTagDataDependencyNames
Definition: FTagDataDependencyNames.h:12
BTagTrackIpAccessor::getTrackIpDataDependencyNames
std::set< std::string > getTrackIpDataDependencyNames() const
Definition: BTagTrackIpAccessor.cxx:128
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
FlavorTagDiscriminants::TracksLoader::trackFilter
std::pair< TrackFilter, std::set< std::string > > trackFilter(ConstituentsSelection, const FTagOptions &)
Definition: TracksLoader.cxx:44
FlavorTagDiscriminants::TracksLoader::getDL2Data
std::tuple< char, std::map< std::string, std::vector< double > > > getDL2Data(const xAOD::Jet &jet, const SG::AuxElement &btag, std::function< char(const Tracks &)> ip_checker) const
Definition: TracksLoader.cxx:356
FlavorTagDiscriminants::FlipTagConfig::FLIP_SIGN
@ FLIP_SIGN
FlavorTagDiscriminants::TracksLoader::m_associator
std::function< Tracks(const SG::AuxElement &)> m_associator
Definition: TracksLoader.h:89
beamspotman.n
n
Definition: beamspotman.py:731
mc.order
order
Configure Herwig7.
Definition: mc.Herwig7_Dijet.py:12
FlavorTagDiscriminants::TracksLoader::getTracksFromJet
Tracks getTracksFromJet(const Jet &jet, const AE &btag) const
Definition: TracksLoader.cxx:320
BTagTrackIpAccessor::d0Uncertainty
double d0Uncertainty(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:83
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
FlavorTagDiscriminants::TracksLoader::Jet
xAOD::Jet Jet
Definition: TracksLoader.h:62
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
FlavorTagDiscriminants::ConstituentsSortOrder::ABS_D0_DESCENDING
@ ABS_D0_DESCENDING
selection
std::string selection
Definition: fbtTestBasics.cxx:73
FlavorTagDiscriminants::ConstituentsSelection
ConstituentsSelection
Definition: ConstituentsLoader.h:38
TracksLoader.h
FlavorTagDiscriminants::TracksLoader
Definition: TracksLoader.h:45
FlavorTagDiscriminants::ConstituentsSelection::DIPS_LOOSE_UPGRADE
@ DIPS_LOOSE_UPGRADE
FlavorTagDiscriminants::IConstituentsLoader::m_deps
FTagDataDependencyNames m_deps
Definition: ConstituentsLoader.h:90
FlavorTagDiscriminants::TracksLoader::getName
std::string getName() const override
Definition: TracksLoader.cxx:378
FlavorTagDiscriminants::ConstituentsInputConfig::output_name
std::string output_name
Definition: ConstituentsLoader.h:61
FlavorTagDiscriminants::ConstituentsSelection::ALL
@ ALL
FlavorTagDiscriminants::ConstituentsSortOrder::PT_DESCENDING
@ PT_DESCENDING
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
BTagTrackIpAccessor::z0SinTheta
double z0SinTheta(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:87
FlavorTagDiscriminants::ConstituentsSelection::R22_DEFAULT
@ R22_DEFAULT
FlavorTagDiscriminants::FTagOptions
Definition: DataPrepUtilities.h:45
FlavorTagDiscriminants::TrackLinkType::IPARTICLE
@ IPARTICLE
FlavorTagDiscriminants::IConstituentsLoader::m_config
ConstituentsInputConfig m_config
Definition: ConstituentsLoader.h:91
FlavorTagDiscriminants::ConstituentsSelection::R22_LOOSE
@ R22_LOOSE
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
FlavorTagDiscriminants::FTagDataDependencyNames::trackInputs
std::set< std::string > trackInputs
Definition: FTagDataDependencyNames.h:13
a
TList * a
Definition: liststreamerinfos.cxx:10
FlavorTagDiscriminants::ConstituentsSelection::DIPS_LOOSE_202102
@ DIPS_LOOSE_202102
FlavorTagDiscriminants::TracksLoader::getType
ConstituentsType getType() const override
Definition: TracksLoader.cxx:381
DeMoScan.first
bool first
Definition: DeMoScan.py:534
FlavorTagDiscriminants::TracksLoader::m_trackFilter
TrackFilter m_trackFilter
Definition: TracksLoader.h:87
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
FlavorTagDiscriminants::Tracks
std::vector< const xAOD::TrackParticle * > Tracks
Definition: TracksLoader.h:36
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
FlavorTagDiscriminants::TracksLoader::m_seqGetter
getter_utils::SeqGetter< xAOD::TrackParticle > m_seqGetter
Definition: TracksLoader.h:90
FlavorTagDiscriminants::TracksLoader::getUsedRemap
std::set< std::string > getUsedRemap() const override
Definition: TracksLoader.cxx:375
FlavorTagDiscriminants::negativeIpOnly
Tracks negativeIpOnly(BTagTrackIpAccessor &aug, const Tracks &tracks, const xAOD::Jet &j)
Definition: TracksLoader.cxx:214
FlavorTagDiscriminants::ConstituentsType
ConstituentsType
Definition: ConstituentsLoader.h:48
BTagSignedIP::ip3d_signed_d0_significance
double ip3d_signed_d0_significance
Definition: BTagTrackIpAccessor.h:23
FlavorTagDiscriminants::ConstituentsSelection::LOOSE_202102_NOIP
@ LOOSE_202102_NOIP
FlavorTagDiscriminants::TracksLoader::TracksLoader
TracksLoader(ConstituentsInputConfig, const FTagOptions &options)
Definition: TracksLoader.cxx:263
AssociationEnums.h
StringUtils.h
FlavorTagDiscriminants::TracksLoader::getData
std::tuple< std::string, Inputs, std::vector< const xAOD::IParticle * > > getData(const xAOD::Jet &jet, [[maybe_unused]] const SG::AuxElement &btag) const override
Definition: TracksLoader.cxx:340
FlavorTagDiscriminants::ConstituentsSortOrder::D0_SIGNIFICANCE_DESCENDING
@ D0_SIGNIFICANCE_DESCENDING
FlavorTagDiscriminants::TracksLoader::m_trackSortVar
TrackSortVar m_trackSortVar
Definition: TracksLoader.h:86
FlavorTagDiscriminants::TrackLinkType::TRACK_PARTICLE
@ TRACK_PARTICLE
BTagTrackIpAccessor::getSignedIp
BTagSignedIP getSignedIp(const xAOD::TrackParticle &track, const xAOD::Jet &jet) const
Definition: BTagTrackIpAccessor.cxx:54