ATLAS Offline Software
BTagTrackIpAccessor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 #include <cmath>
9 #include <cstddef>
10 
11 namespace str {
12  const std::string d0Uncertainty = "d0Uncertainty";
13  const std::string z0SinThetaUncertainty = "z0SinThetaUncertainty";
14  const std::string trackDisplacement = "trackDisplacement";
15  const std::string trackMomentum = "trackMomentum";
16 }
17 
19  m_ip_d0_sigma(prefix + str::d0Uncertainty),
20  m_ip_z0_sigma(prefix + str::z0SinThetaUncertainty),
21  m_track_displacement(prefix + str::trackDisplacement),
22  m_track_momentum(prefix + str::trackMomentum),
23  m_ip2d_trackParticleLinks("IP2D_TrackParticleLinks"),
24  m_ip3d_trackParticleLinks("IP3D_TrackParticleLinks"),
25  m_ip2d_gradeOfTracks("IP2D_gradeOfTracks"),
26  m_ip3d_gradeOfTracks("IP3D_gradeOfTracks"),
27  m_ip2d_signed_d0("IP2D_signed_d0"),
28  m_ip3d_signed_d0("IP3D_signed_d0"),
29  m_ip3d_signed_z0_sin_theta("IP3D_signed_z0"),
30  m_ip3d_signed_d0_significance("IP3D_signed_d0_significance"),
31  m_ip3d_signed_z0_sin_theta_significance("IP3D_signed_z0_significance"),
32  m_ip2d_grade("IP2D_grade"),
33  m_ip3d_grade("IP3D_grade"),
34  m_prefix(prefix)
35 {
36 }
37 
38 namespace {
39  Amg::Vector3D get_vector3d(const std::vector<float> &input_vector) {
40  if (input_vector.size() != 3) {
41  std::string size = std::to_string(input_vector.size());
42  throw std::logic_error(
43  "Tried to build an Eigen 3-vector from " + size + " elements");
44  }
45  return Eigen::Vector3f(input_vector.data()).cast<double>();
46  }
47 }
48 
52 }
53 
55  const TLorentzVector jet_fourVector = jet.p4();
56  const Amg::Vector3D jet_threeVector(jet_fourVector.X(),jet_fourVector.Y(),jet_fourVector.Z());
57  const Amg::Vector3D track_displacement = get_vector3d(m_track_displacement(track));
58  const Amg::Vector3D track_momentum = get_vector3d(m_track_momentum(track));
59 
61  const double ip_d0 = d0(track);
62  ip.ip2d_signed_d0 = std::copysign(ip_d0, std::sin(jet_threeVector.phi() - track_momentum.phi()) * ip_d0);
63  const double ip3d_signed_d0 = std::copysign(ip_d0, jet_threeVector.cross(track_momentum).dot(track_momentum.cross(-track_displacement)));
64  ip.ip3d_signed_d0 = ip3d_signed_d0;
65  ip.ip3d_signed_d0_significance = ip3d_signed_d0 / m_ip_d0_sigma(track);
66 
67  const double ip_z0 = z0SinTheta(track);
68  const double signed_z0_sin_theta = std::copysign(ip_z0, (jet_threeVector.eta() - track_momentum.eta()) * ip_z0);
69  ip.ip3d_signed_z0_sin_theta = signed_z0_sin_theta;
70  ip.ip3d_signed_z0_sin_theta_significance = signed_z0_sin_theta / m_ip_z0_sigma(track);
71  ip.ip2d_grade = 0;
72  ip.ip3d_grade = 0;
73  return ip;
74 }
75 
77  const Amg::Vector3D track_displacement = get_vector3d(m_track_displacement(track));
78  const Amg::Vector3D track_momentum = get_vector3d(m_track_momentum(track));
79  return std::copysign(
80  std::hypot(track_displacement[Amg::x], track_displacement[Amg::y]),
81  track_momentum.cross(track_displacement)[Amg::z]);
82 }
84  const {
85  return m_ip_d0_sigma(track);
86 }
88  const Amg::Vector3D track_displacement = get_vector3d(m_track_displacement(track));
89  const Amg::Vector3D track_momentum = get_vector3d(m_track_momentum(track));
90  return track_displacement[Amg::z] * std::sqrt(
91  1 - std::pow(track_momentum[Amg::z],2) / track_momentum.squaredNorm());
92 }
94  return m_ip_z0_sigma(track);
95 }
96 
99  m_ip2d_signed_d0(track) = ip.ip2d_signed_d0;
100  m_ip3d_signed_d0(track) = ip.ip3d_signed_d0;
101  m_ip3d_signed_d0_significance(track) = ip.ip3d_signed_d0_significance;
102  m_ip3d_signed_z0_sin_theta(track) = ip.ip3d_signed_z0_sin_theta;
103  m_ip3d_signed_z0_sin_theta_significance(track) = ip.ip3d_signed_z0_sin_theta_significance;
104 }
106  int ip3d_grade = -1;
108  const std::vector<ElementLink<xAOD::TrackParticleContainer> > ip3d_tracks = m_ip3d_trackParticleLinks(btagging);
109  for (std::size_t ip3d_track_index = 0; ip3d_track_index < ip3d_tracks.size(); ++ip3d_track_index) {
110  if (&track == *(ip3d_tracks.at(ip3d_track_index))) {
111  ip3d_grade = m_ip3d_gradeOfTracks(btagging).at(ip3d_track_index);
112  break;
113  }
114  }
115  m_ip3d_grade(track) = ip3d_grade;
116 
117  int ip2d_grade = -1;
118  const std::vector<ElementLink<xAOD::TrackParticleContainer> > ip2d_tracks = m_ip2d_trackParticleLinks(btagging);
119  for (std::size_t ip2d_track_index = 0; ip2d_track_index < ip2d_tracks.size(); ++ip2d_track_index) {
120  if (&track == *(ip2d_tracks.at(ip2d_track_index))) {
121  ip2d_grade = m_ip2d_gradeOfTracks(btagging).at(ip2d_track_index);
122  break;
123  }
124  }
125  m_ip2d_grade(track) = ip2d_grade;
126 }
127 
129 {
130  return {
135 }
136 
str::trackMomentum
const std::string trackMomentum
Definition: BTagTrackIpAccessor.cxx:15
BTaggingUtilities.h
BTagTrackIpAccessor.h
BTagTrackIpAccessor::m_ip3d_signed_z0_sin_theta_significance
AE::Decorator< float > m_ip3d_signed_z0_sin_theta_significance
Definition: BTagTrackIpAccessor.h:72
BTagTrackIpAccessor::m_track_displacement
AE::ConstAccessor< std::vector< float > > m_track_displacement
Definition: BTagTrackIpAccessor.h:62
BTagTrackIpAccessor::d0
double d0(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:76
Amg::y
@ y
Definition: GeoPrimitives.h:35
str::z0SinThetaUncertainty
const std::string z0SinThetaUncertainty
Definition: BTagTrackIpAccessor.cxx:13
BTagTrackIpAccessor::augment
void augment(const xAOD::TrackParticle &track, const xAOD::Jet &jet) const
Definition: BTagTrackIpAccessor.cxx:49
BTagSignedIP
Definition: BTagTrackIpAccessor.h:19
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Amg::z
@ z
Definition: GeoPrimitives.h:36
BTagTrackIpAccessor::augment_with_ip
void augment_with_ip(const xAOD::TrackParticle &track, const xAOD::Jet &jet) const
Definition: BTagTrackIpAccessor.cxx:97
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
BTagTrackIpAccessor::m_ip3d_gradeOfTracks
AE::ConstAccessor< std::vector< int > > m_ip3d_gradeOfTracks
Definition: BTagTrackIpAccessor.h:67
BTagTrackIpAccessor::getTrackIpDataDependencyNames
std::set< std::string > getTrackIpDataDependencyNames() const
Definition: BTagTrackIpAccessor.cxx:128
Amg::x
@ x
Definition: GeoPrimitives.h:34
BTagTrackIpAccessor::m_prefix
std::string m_prefix
Definition: BTagTrackIpAccessor.h:76
str::trackDisplacement
const std::string trackDisplacement
Definition: BTagTrackIpAccessor.cxx:14
BTagTrackIpAccessor::d0Uncertainty
double d0Uncertainty(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:83
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
BTagTrackIpAccessor::m_ip2d_signed_d0
AE::Decorator< float > m_ip2d_signed_d0
Definition: BTagTrackIpAccessor.h:68
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
BTagTrackIpAccessor::m_ip_d0_sigma
AE::ConstAccessor< float > m_ip_d0_sigma
Definition: BTagTrackIpAccessor.h:60
BTagTrackIpAccessor::m_ip2d_trackParticleLinks
AE::ConstAccessor< std::vector< ElementLink< xAOD::TrackParticleContainer > > > m_ip2d_trackParticleLinks
Definition: BTagTrackIpAccessor.h:64
BTagTrackIpAccessor::BTagTrackIpAccessor
BTagTrackIpAccessor(const std::string &prefix)
Definition: BTagTrackIpAccessor.cxx:18
xAOD::BTagging_v1
Definition: BTagging_v1.h:39
BTagTrackIpAccessor::m_ip3d_signed_d0
AE::Decorator< float > m_ip3d_signed_d0
Definition: BTagTrackIpAccessor.h:69
BTagTrackIpAccessor::z0SinThetaUncertainty
double z0SinThetaUncertainty(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:93
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
BTagTrackIpAccessor::z0SinTheta
double z0SinTheta(const xAOD::TrackParticle &track) const
Definition: BTagTrackIpAccessor.cxx:87
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
BTagTrackIpAccessor::m_ip3d_signed_d0_significance
AE::Decorator< float > m_ip3d_signed_d0_significance
Definition: BTagTrackIpAccessor.h:71
BTagTrackIpAccessor::m_ip_z0_sigma
AE::ConstAccessor< float > m_ip_z0_sigma
Definition: BTagTrackIpAccessor.h:61
xAOD::BTaggingUtilities::getBTagging
const BTagging * getBTagging(const SG::AuxElement &part)
Access the default xAOD::BTagging object associated to an object.
Definition: BTaggingUtilities.cxx:37
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
BTagTrackIpAccessor::m_ip2d_grade
AE::Decorator< int > m_ip2d_grade
Definition: BTagTrackIpAccessor.h:73
str
Definition: BTagTrackIpAccessor.cxx:11
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
BTagTrackIpAccessor::m_track_momentum
AE::ConstAccessor< std::vector< float > > m_track_momentum
Definition: BTagTrackIpAccessor.h:63
BTagTrackIpAccessor::m_ip3d_signed_z0_sin_theta
AE::Decorator< float > m_ip3d_signed_z0_sin_theta
Definition: BTagTrackIpAccessor.h:70
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
BTagTrackIpAccessor::m_ip3d_trackParticleLinks
AE::ConstAccessor< std::vector< ElementLink< xAOD::TrackParticleContainer > > > m_ip3d_trackParticleLinks
Definition: BTagTrackIpAccessor.h:65
BTagTrackIpAccessor::m_ip2d_gradeOfTracks
AE::ConstAccessor< std::vector< int > > m_ip2d_gradeOfTracks
Definition: BTagTrackIpAccessor.h:66
BTagTrackIpAccessor::m_ip3d_grade
AE::Decorator< int > m_ip3d_grade
Definition: BTagTrackIpAccessor.h:74
BTagTrackIpAccessor::augment_with_grades
void augment_with_grades(const xAOD::TrackParticle &track, const xAOD::Jet &jet) const
Definition: BTagTrackIpAccessor.cxx:105
str::d0Uncertainty
const std::string d0Uncertainty
Definition: BTagTrackIpAccessor.cxx:12
BTagTrackIpAccessor::getSignedIp
BTagSignedIP getSignedIp(const xAOD::TrackParticle &track, const xAOD::Jet &jet) const
Definition: BTagTrackIpAccessor.cxx:54