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");
45 return Eigen::Vector3f(input_vector.data()).cast<
double>();
55 const TLorentzVector jet_fourVector =
jet.p4();
56 const Amg::Vector3D jet_threeVector(jet_fourVector.X(),jet_fourVector.Y(),jet_fourVector.Z());
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);
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);
80 std::hypot(track_displacement[
Amg::x], track_displacement[
Amg::y]),
81 track_momentum.cross(track_displacement)[
Amg::z]);
90 return track_displacement[
Amg::z] * std::sqrt(
91 1 - std::pow(track_momentum[
Amg::z],2) / track_momentum.squaredNorm());
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))) {
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))) {
size_t size() const
Number of registered mappings.
AE::ConstAccessor< std::vector< ElementLink< xAOD::TrackParticleContainer > > > m_ip2d_trackParticleLinks
AE::Decorator< float > m_ip3d_signed_d0
double d0Uncertainty(const xAOD::TrackParticle &track) const
AE::ConstAccessor< float > m_ip_z0_sigma
AE::Decorator< int > m_ip2d_grade
AE::ConstAccessor< std::vector< int > > m_ip3d_gradeOfTracks
AE::Decorator< float > m_ip3d_signed_z0_sin_theta
AE::ConstAccessor< std::vector< int > > m_ip2d_gradeOfTracks
AE::ConstAccessor< std::vector< float > > m_track_momentum
AE::Decorator< int > m_ip3d_grade
void augment(const xAOD::TrackParticle &track, const xAOD::IParticle &jet) const
AE::ConstAccessor< std::vector< float > > m_track_displacement
std::set< std::string > getTrackIpDataDependencyNames() const
double z0SinThetaUncertainty(const xAOD::TrackParticle &track) const
AE::Decorator< float > m_ip3d_signed_z0_sin_theta_significance
double d0(const xAOD::TrackParticle &track) const
AE::ConstAccessor< float > m_ip_d0_sigma
void augment_with_ip(const xAOD::TrackParticle &track, const xAOD::IParticle &jet) const
double z0SinTheta(const xAOD::TrackParticle &track) const
AE::Decorator< float > m_ip2d_signed_d0
AE::Decorator< float > m_ip3d_signed_d0_significance
void augment_with_grades(const xAOD::TrackParticle &track, const xAOD::IParticle &jet) const
AE::ConstAccessor< std::vector< ElementLink< xAOD::TrackParticleContainer > > > m_ip3d_trackParticleLinks
BTagTrackIpAccessor(const std::string &prefix)
BTagSignedIP getSignedIp(const xAOD::TrackParticle &track, const xAOD::IParticle &jet) const
Class providing the definition of the 4-vector interface.
Eigen::Matrix< double, 3, 1 > Vector3D
const std::string d0Uncertainty
const std::string z0SinThetaUncertainty
const std::string trackMomentum
const std::string trackDisplacement
const BTagging * getBTagging(const SG::AuxElement &part)
Access the default xAOD::BTagging object associated to an object.
BTagging_v1 BTagging
Definition of the current "BTagging version".
TrackParticle_v1 TrackParticle
Reference the current persistent version: