33 return StatusCode::SUCCESS;
40 const EventContext& ctx,
49 return StatusCode::SUCCESS;
53 std::vector<const xAOD::TrackParticle*> xaodTracks;
55 std::vector<const Trk::Track*> origTracks;
57 std::vector<const Trk::TrackParameters*> origTrackParameters;
60 xaodTracks.push_back(track->track());
62 if(track->track()->track()) {
63 origTracks.push_back(track->track()->track());
66 const Trk::Perigee& perigee = track->track()->perigeeParameters();
73 if(!origTracks.empty() && !origTrackParameters.empty()) {
74 ATH_MSG_ERROR(
"Inconsistent mix of Trk::Track and Trk::TrackParameter");
75 return StatusCode::FAILURE;
78 std::unique_ptr<xAOD::Vertex> xAODvertex;
80 if(!origTracks.empty()) {
84 xAODvertex =
m_fitTool->fit(ctx, xaodTracks, seedPoint);
86 else if (!origTrackParameters.empty()) {
90 xAODvertex =
m_fitTool->fit(ctx, xaodTracks, seedPoint);
95 return StatusCode::SUCCESS;
105 ATH_MSG_VERBOSE(
"secondary vertex recorded! x="<<xAODvertex->position().x()<<
", y="<<xAODvertex->position().y()<<
", perp="<<xAODvertex->position().perp());
107 pSecVtxContainer.
push_back(std::move(xAODvertex));
111 return StatusCode::SUCCESS;
120 if (pVertex==
nullptr) {
121 ATH_MSG_WARNING(
"No primary vertex information for calculation of transverse flight path significance");
135 double sigma_fpt2 = (fpx * fpx * secVertex.covariancePosition()(
Trk::x,
Trk::x) +
136 fpx * fpy * secVertex.covariancePosition()(
Trk::x,
Trk::y) +
137 fpy * fpx * secVertex.covariancePosition()(
Trk::y,
Trk::x) +
138 fpy * fpy * secVertex.covariancePosition()(
Trk::y,
Trk::y)) / (fpt * fpt);
140 if (sigma_fpt2 <= 0.) {
145 double sign = (fpx * pTau.
p4().Px() + fpy * pTau.
p4().Py() > 0.) ? 1. : -1.;
147 return sign * fpt / std::sqrt(sigma_fpt2);
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
static const Attributes_t empty
const T * back() const
Access the last element in the collection as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
ElementLink implementation for ROOT usage.
virtual StatusCode executeTool(xAOD::TauJet &pTau, const EventContext &ctx, xAOD::VertexContainer &pVertexContainer) const override
double trFlightPathSig(const xAOD::TauJet &pTau, const xAOD::Vertex &secVertex) const
determines the transverse flight path significance from the primary vertex and the secondary vertex o...
ToolHandle< Trk::IVertexFitter > m_fitTool
TauVertexVariables(const std::string &name)
ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder
virtual StatusCode initialize() override
Tool initializer.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
void setSecondaryVertexLink(const VertexLink_t &vertexLink)
void setDetail(TauJetParameters::Detail detail, int value)
const Vertex * vertex() const
void setSecondaryVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *vertex)
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
std::vector< const TauTrack * > tracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Get the v<const pointer> to a given tauTrack collection associated with this tau.
const Amg::Vector3D & position() const
Returns the 3-pos.
Eigen::Matrix< double, 3, 1 > Vector3D
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ NotSpecified
Default value, no explicit type set.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauTrack_v1 TauTrack
Definition of the current version.
TauJet_v3 TauJet
Definition of the current "tau version".