23#include "CLHEP/Vector/LorentzVector.h"
45 declareInterface<IMSVVariablesFactory>(
this);
49 ATH_MSG_DEBUG(
" Initialization of MSVVariablesFactory succesfull");
50 return StatusCode::SUCCESS;
54 ATH_MSG_DEBUG(
" Finalization of MSVVariablesFactory succesfull");
55 return StatusCode::SUCCESS;
65 std::vector< ElementLink< xAOD::VertexContainer > > MSVVertexLinks;
66 const std::vector<xAOD::Vertex*> myVertices = myVertexInfoVKal->
vertices();
67 if(myVertices.empty()){
68 ATH_MSG_DEBUG(
"#BTAG# no MSV vertices...fill default values only... ");
70 VertexContainer->push_back(vertex);
78 return StatusCode::SUCCESS;
83 for (
const auto& vertex : myVertexInfoVKal->
vertices()){
84 VertexContainer->push_back(vertex);
90 const std::vector<ElementLink<xAOD::TrackParticleContainer> > myTrackLinks = vertex->trackParticleLinks();
91 if (myTrackLinks.empty()) {
92 ATH_MSG_WARNING(
"#BTAG# No Track Links attached to the track at the sec vertex... ");
95 const std::vector<Trk::VxTrackAtVertex> myTracks=vertex->vxTrackAtVertex();
96 if (!myTracks.empty()) {
97 npsec=myTracks.size();
98 for (
const auto& track : myTracks) {
111 CLHEP::HepLorentzVector vtxp4(sumpx,sumpy,sumpz,sume);
112 float efrac = (jetenergy>0) ? vtxp4.e()/jetenergy : 0;
121 double localdistnrm = 0;
122 std::vector<const xAOD::Vertex*> vecVtxHolder;
123 vecVtxHolder.push_back(vertex);
126 ATH_MSG_DEBUG(
"Factory PVX x = " << priVtx->
x() <<
" y = " << priVtx->
y() <<
" z = " << priVtx->
z());
129 ATH_MSG_WARNING(
"#BTAG# Tagging requested, but no primary vertex supplied.");
133 vertex->setTrackParticleLinks(myTrackLinks);
137 return StatusCode::SUCCESS;
148 float jetenergy = 0.;
152 std::vector< ElementLink< xAOD::VertexContainer > > MSVVertexLinks;
153 const std::vector<xAOD::Vertex*> myVertices = myVertexInfoVKal->
vertices();
154 if(myVertices.empty()){
155 ATH_MSG_DEBUG(
"#BTAG# no MSV vertices...fill default values only... ");
156 BTag->setVariable<
int>(
basename,
"N2Tpair", n2t);
157 BTag->setVariable<
float>(
basename,
"energyTrkInJet", jetenergy);
158 BTag->setVariable<
int>(
basename,
"nvsec", nvsec);
159 BTag->setVariable<
float>(
basename,
"normdist", distnrm);
160 BTag->setVariable<std::vector<ElementLink<xAOD::VertexContainer> > >(
basename,
"vertices", MSVVertexLinks);
161 BTag->setDynVxELName(
basename,
"vertices");
163 VertexContainer->push_back(vertex);
171 return StatusCode::SUCCESS;
176 BTag->setVariable<
int>(
basename,
"N2Tpair", n2t);
177 BTag->setVariable<
float>(
basename,
"energyTrkInJet", jetenergy);
179 std::vector<const xAOD::Vertex*> vecVertices;
180 for (
const auto& vertex : myVertexInfoVKal->
vertices()) {
181 VertexContainer->push_back(vertex);
183 vecVertices.push_back(vertex);
188 const std::vector<ElementLink<xAOD::TrackParticleContainer> > myTrackLinks = vertex->trackParticleLinks();
189 if (myTrackLinks.empty()) {
190 ATH_MSG_WARNING(
"#BTAG# No Track Links attached to the track at the sec vertex... ");
193 const std::vector<Trk::VxTrackAtVertex> myTracks=vertex->vxTrackAtVertex();
194 if (!myTracks.empty()) {
195 npsec=myTracks.size();
196 for (
const auto& track : myTracks) {
209 CLHEP::HepLorentzVector vtxp4(sumpx,sumpy,sumpz,sume);
210 float efrac = (jetenergy>0) ? vtxp4.e()/jetenergy : 0;
219 double localdistnrm = 0;
220 std::vector<const xAOD::Vertex*> vecVtxHolder;
221 vecVtxHolder.push_back(vertex);
225 ATH_MSG_DEBUG(
"Factory PVX x = " << priVtx->
x() <<
" y = " << priVtx->
y() <<
" z = " << priVtx->
z());
228 ATH_MSG_WARNING(
"#BTAG# Tagging requested, but no primary vertex supplied.");
232 vertex->setTrackParticleLinks(myTrackLinks);
236 MSVVertexLinks.push_back(linkBTagVertex);
239 BTag->setVariable<std::vector<ElementLink<xAOD::VertexContainer> > >(
basename,
"vertices", MSVVertexLinks);
240 BTag->setDynVxELName(
basename,
"vertices");
245 ATH_MSG_WARNING(
"#BTAG# Tagging requested, but no primary vertex supplied.");
248 nvsec = vecVertices.size();
249 BTag->setVariable<
int>(
basename,
"nvsec", nvsec);
250 BTag->setVariable<
float>(
basename,
"normdist", distnrm);
252 return StatusCode::SUCCESS;
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_WARNING(x,...)
virtual StatusCode initialize() override
virtual StatusCode createMSVContainer(const xAOD::Jet &, const Trk::VxSecVKalVertexInfo *myInfoVKal, xAOD::VertexContainer *btagVertex, const xAOD::Vertex &PV) const override
virtual StatusCode fillMSVVariables(const xAOD::Jet &, xAOD::BTagging *BTag, const Trk::VxSecVKalVertexInfo *myInfoVKal, xAOD::VertexContainer *btagVertex, const xAOD::Vertex &PV, std::string basename) const override
virtual StatusCode finalize() override
MSVVariablesFactory(const std::string &name, const std::string &n, const IInterface *p)
ElementLink implementation for ROOT usage.
bool toContainedElement(BaseConstReference container, ElementType element)
Set link to point to given element (slowest).
const Amg::Vector3D & momentum() const
Access method for the momentum.
double energyTrkInJet() const
int n2trackvertices() const
const std::vector< xAOD::Vertex * > & vertices() const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
float z() const
Returns the z position.
float y() const
Returns the y position.
float x() const
Returns the x position.
Eigen::Matrix< double, 3, 1 > Vector3D
The namespace of all packages in PhysicsAnalysis/JetTagging.
double get3DSignificance(const xAOD::Vertex &priVertex, const std::vector< const xAOD::Vertex * > &secVertex, const Amg::Vector3D &jetDirection)
Signed decay length significance of the weighted mean of the secondary vertices with respect to the p...
constexpr double chargedPionMassInMeV
the mass of the charged pion (in MeV)
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
void setVtxeta(xAOD::Vertex *, float value)
void setVertexMass(xAOD::Vertex *, float value)
void setVtxNtrk(xAOD::Vertex *, int value)
void setVtxpt(xAOD::Vertex *, float value)
void setVtxnormDist(xAOD::Vertex *, float value)
void setEnergyFraction(xAOD::Vertex *, float value)
void setVtxphi(xAOD::Vertex *, float value)
Jet_v1 Jet
Definition of the current "jet version".
BTagging_v1 BTagging
Definition of the current "BTagging version".
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
std::string basename(std::string name)