ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::TrackToVertexWrapper Class Reference

#include <TrackToVertexWrapper.h>

Inheritance diagram for DerivationFramework::TrackToVertexWrapper:
Collaboration diagram for DerivationFramework::TrackToVertexWrapper:

Public Member Functions

virtual StatusCode initialize () override final
virtual StatusCode addBranches (const EventContext &ctx) const override final

Private Types

enum  ETrackFloatDecor {
  kdecnD0Decor , kdecnZ0Decor , kdecnZ0SinThetaDecor , kdecnD0ErrDecor ,
  kdecnZ0ErrDecor , kdecnZ0SinThetaErrDecor , kdecnPVD0ErrDecor , kdecnPVZ0ErrDecor ,
  kdecnPVZ0SinThetaErrDecor , kdecn_b_D0Decor , kdecn_b_Z0Decor , kdecn_b_Z0SinThetaDecor ,
  kdecn_b_D0ErrDecor , kdecn_b_Z0ErrDecor , kdecn_b_Z0SinThetaErrDecor , kdecn_b_PVD0ErrDecor ,
  kdecn_b_PVZ0ErrDecor , kdecn_b_PVZ0SinThetaErrDecor , kNFloatDecor
}

Private Attributes

ToolHandle< Trk::ITrackToVertexIPEstimatorm_tool {this, "TrackToVertexIPEstimator", "Trk::TrackToVertexIPEstimator", ""}
Gaudi::Property< std::string > m_sgName {this, "DecorationPrefix", "", ""}
SG::ReadHandleKey< xAOD::TrackParticleContainerm_containerName {this, "ContainerName", "", ""}
SG::ReadHandleKey< xAOD::VertexContainerm_vertexKey {this, "VertexContainer", "PrimaryVertices", "primary vertex container"}
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackFloatDecorKeys

Detailed Description

Definition at line 22 of file TrackToVertexWrapper.h.

Member Enumeration Documentation

◆ ETrackFloatDecor

Enumerator
kdecnD0Decor 
kdecnZ0Decor 
kdecnZ0SinThetaDecor 
kdecnD0ErrDecor 
kdecnZ0ErrDecor 
kdecnZ0SinThetaErrDecor 
kdecnPVD0ErrDecor 
kdecnPVZ0ErrDecor 
kdecnPVZ0SinThetaErrDecor 
kdecn_b_D0Decor 
kdecn_b_Z0Decor 
kdecn_b_Z0SinThetaDecor 
kdecn_b_D0ErrDecor 
kdecn_b_Z0ErrDecor 
kdecn_b_Z0SinThetaErrDecor 
kdecn_b_PVD0ErrDecor 
kdecn_b_PVZ0ErrDecor 
kdecn_b_PVZ0SinThetaErrDecor 
kNFloatDecor 

Definition at line 40 of file TrackToVertexWrapper.h.

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::TrackToVertexWrapper::addBranches ( const EventContext & ctx) const
finaloverridevirtual

Definition at line 57 of file TrackToVertexWrapper.cxx.

58 {
59
60 // retrieve track container
61 SG::ReadHandle<xAOD::TrackParticleContainer> tracks(m_containerName, ctx );
62 if( ! tracks.isValid() ) {
63 ATH_MSG_ERROR ("Couldn't retrieve TrackParticles with key: " << m_containerName.key() );
64 return StatusCode::FAILURE;
65 }
66 SG::ReadHandle<xAOD::VertexContainer> vertices { m_vertexKey, ctx };
67 if ( !vertices.isValid() )
68 {
69 ATH_MSG_ERROR ("Couldn't retrieve Vertices with key: " << m_vertexKey.key());
70 return StatusCode::FAILURE;
71 }
72
73 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer,float> >
75 // Run tool for each element and calculate the impact parameters/errors
76 for (const auto *trItr : *tracks) {
77 std::unique_ptr<Trk::ImpactParametersAndSigma> iPandSigma;
78 std::unique_ptr<Trk::ImpactParametersAndSigma> iPandSigmaBiased;
79 const xAOD::Vertex* foundVertex { nullptr };
80 for (const auto *const vx : *vertices) {
81 for (const auto& tpLink : vx->trackParticleLinks()) {
82 if (*tpLink == trItr) {
83 foundVertex = vx;
84 break;
85 }
86 }
87 if (foundVertex) break;
88 }
89 if ( foundVertex ) {
90 iPandSigma= m_tool->estimate(trItr,foundVertex,true);
91 iPandSigmaBiased = m_tool->estimate(trItr,foundVertex,false);
92 if( !iPandSigma ) ATH_MSG_WARNING ("trackToVertexIPEstimator failed !");
93 if( !iPandSigmaBiased ) ATH_MSG_WARNING ("trackToVertexIPEstimator biased IP failed !");
94 }
95 else {
96 ATH_MSG_DEBUG("No vertex associated to the track. Skipping it.");
97 }
98
99 // Do the decoration for each track
100 if (iPandSigma) {
101 track_decorators[kdecnD0Decor]( *trItr ) = iPandSigma->IPd0;
102 track_decorators[kdecnZ0Decor]( *trItr ) = iPandSigma->IPz0;
103 track_decorators[kdecnZ0SinThetaDecor]( *trItr ) = iPandSigma->IPz0SinTheta;
104 track_decorators[kdecnD0ErrDecor]( *trItr ) = iPandSigma->sigmad0;
105 track_decorators[kdecnZ0ErrDecor]( *trItr ) = iPandSigma->sigmaz0;
106 track_decorators[kdecnZ0SinThetaErrDecor]( *trItr ) = iPandSigma->sigmaz0SinTheta;
107 track_decorators[kdecnPVD0ErrDecor] (*trItr ) = iPandSigma->PVsigmad0;
108 track_decorators[kdecnPVZ0ErrDecor] (*trItr ) = iPandSigma->PVsigmaz0;
109 track_decorators[kdecnPVZ0SinThetaErrDecor] (*trItr ) = iPandSigma->PVsigmaz0SinTheta;
110 }
111 else {
112 track_decorators[kdecnD0Decor]( *trItr ) = 999.;
113 track_decorators[kdecnZ0Decor]( *trItr ) = 999.;
114 track_decorators[kdecnZ0SinThetaDecor]( *trItr ) = 999.;
115 track_decorators[kdecnD0ErrDecor]( *trItr ) = 999.;
116 track_decorators[kdecnZ0ErrDecor]( *trItr ) = 999.;
117 track_decorators[kdecnZ0SinThetaErrDecor]( *trItr ) = 999.;
118 track_decorators[kdecnPVD0ErrDecor] (*trItr ) = 999.;
119 track_decorators[kdecnPVZ0ErrDecor] (*trItr ) = 999.;
120 track_decorators[kdecnPVZ0SinThetaErrDecor] (*trItr ) = 999.;
121 }
122
123 if (iPandSigmaBiased) {
124 track_decorators[kdecn_b_D0Decor]( *trItr ) = iPandSigmaBiased->IPd0;
125 track_decorators[kdecn_b_Z0Decor]( *trItr ) = iPandSigmaBiased->IPz0;
126 track_decorators[kdecn_b_Z0SinThetaDecor]( *trItr ) = iPandSigmaBiased->IPz0SinTheta;
127 track_decorators[kdecn_b_D0ErrDecor]( *trItr ) = iPandSigmaBiased->sigmad0;
128 track_decorators[kdecn_b_Z0ErrDecor]( *trItr ) = iPandSigmaBiased->sigmaz0;
129 track_decorators[kdecn_b_Z0SinThetaErrDecor]( *trItr ) = iPandSigmaBiased->sigmaz0SinTheta;
130 track_decorators[kdecn_b_PVD0ErrDecor] (*trItr ) = iPandSigmaBiased->PVsigmad0;
131 track_decorators[kdecn_b_PVZ0ErrDecor] (*trItr ) = iPandSigmaBiased->PVsigmaz0;
132 track_decorators[kdecn_b_PVZ0SinThetaErrDecor] (*trItr ) = iPandSigmaBiased->PVsigmaz0SinTheta;
133 }
134 else {
135 track_decorators[kdecn_b_D0Decor]( *trItr ) = 999.;
136 track_decorators[kdecn_b_Z0Decor]( *trItr ) = 999.;
137 track_decorators[kdecn_b_Z0SinThetaDecor]( *trItr ) = 999.;
138 track_decorators[kdecn_b_D0ErrDecor]( *trItr ) = 999.;
139 track_decorators[kdecn_b_Z0ErrDecor]( *trItr ) = 999.;
140 track_decorators[kdecn_b_Z0SinThetaErrDecor]( *trItr ) = 999.;
141 track_decorators[kdecn_b_PVD0ErrDecor] (*trItr ) = 999.;
142 track_decorators[kdecn_b_PVZ0ErrDecor] (*trItr ) = 999.;
143 track_decorators[kdecn_b_PVZ0SinThetaErrDecor] (*trItr ) = 999.;
144 }
145 } // end of loop over tracks
146
147 return StatusCode::SUCCESS;
148 }
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
ToolHandle< Trk::ITrackToVertexIPEstimator > m_tool
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackFloatDecorKeys
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_containerName
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::vector< SG::WriteDecorHandle< T_Cont, T > > createDecorators(const std::vector< SG::WriteDecorHandleKey< T_Cont > > &keys, const EventContext &ctx)
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ initialize()

StatusCode DerivationFramework::TrackToVertexWrapper::initialize ( )
finaloverridevirtual

Definition at line 16 of file TrackToVertexWrapper.cxx.

17 {
18 if (m_sgName.empty()) {
19 ATH_MSG_ERROR("No decoration prefix name provided for the output of TracktoVertexWrapper!");
20 return StatusCode::FAILURE;
21 }
22 if (m_containerName.key().empty()) {
23 ATH_MSG_ERROR("No TrackParticle collection provided for TracktoVertexWrapper!");
24 return StatusCode::FAILURE;
25 }
26 ATH_CHECK(m_containerName.initialize() );
27 ATH_CHECK(m_tool.retrieve());
28 ATH_CHECK(m_vertexKey.initialize());
29 {
30 // FIXME Properly configure WriteDecorHandleKeys in python
31 std::vector<std::string> names;
32 names.resize(kNFloatDecor);
33 names[kdecnD0Decor] = "unbiased_d0";
34 names[kdecnZ0Decor] = "unbiased_z0";
35 names[kdecnZ0SinThetaDecor] = "unbiased_z0SinTheta";
36 names[kdecnD0ErrDecor] = "unbiased_d0Sigma";
37 names[kdecnZ0ErrDecor] = "unbiased_z0Sigma";
38 names[kdecnZ0SinThetaErrDecor] = "unbiased_z0SigmaSinTheta";
39 names[kdecnPVD0ErrDecor] = "unbiased_PVd0Sigma";
40 names[kdecnPVZ0ErrDecor] = "unbiased_PVz0Sigma";
41 names[kdecnPVZ0SinThetaErrDecor] = "unbiased_PVz0SigmaSinTheta";
42 names[kdecn_b_D0Decor] = "biased_d0";
43 names[kdecn_b_Z0Decor] = "biased_z0";
44 names[kdecn_b_Z0SinThetaDecor] = "biased_z0SinTheta";
45 names[kdecn_b_D0ErrDecor] = "biased_d0Sigma";
46 names[kdecn_b_Z0ErrDecor] = "biased_z0Sigma";
47 names[kdecn_b_Z0SinThetaErrDecor] = "biased_z0SigmaSinTheta";
48 names[kdecn_b_PVD0ErrDecor] = "biased_PVd0Sigma";
49 names[kdecn_b_PVZ0ErrDecor] = "biased_PVz0Sigma";
50 names[kdecn_b_PVZ0SinThetaErrDecor] = "biased_PVz0SigmaSinTheta";
52 }
53 return StatusCode::SUCCESS;
54 }
#define ATH_CHECK
Evaluate an expression and check for errors.
void createDecoratorKeys(T_Parent &parent, const SG::ReadHandleKey< T_Cont > &container_key, const std::string &prefix, const std::vector< std::string > &decor_names, std::vector< SG::WriteDecorHandleKey< T_Cont > > &decor_out)

Member Data Documentation

◆ m_containerName

SG::ReadHandleKey<xAOD::TrackParticleContainer> DerivationFramework::TrackToVertexWrapper::m_containerName {this, "ContainerName", "", ""}
private

Definition at line 35 of file TrackToVertexWrapper.h.

36{this, "ContainerName", "", ""};

◆ m_sgName

Gaudi::Property<std::string> DerivationFramework::TrackToVertexWrapper::m_sgName {this, "DecorationPrefix", "", ""}
private

Definition at line 33 of file TrackToVertexWrapper.h.

34{this, "DecorationPrefix", "", ""};

◆ m_tool

ToolHandle< Trk::ITrackToVertexIPEstimator > DerivationFramework::TrackToVertexWrapper::m_tool {this, "TrackToVertexIPEstimator", "Trk::TrackToVertexIPEstimator", ""}
private

Definition at line 31 of file TrackToVertexWrapper.h.

32{this, "TrackToVertexIPEstimator", "Trk::TrackToVertexIPEstimator", ""};

◆ m_trackFloatDecorKeys

std::vector<SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> > DerivationFramework::TrackToVertexWrapper::m_trackFloatDecorKeys
private

Definition at line 59 of file TrackToVertexWrapper.h.

◆ m_vertexKey

SG::ReadHandleKey<xAOD::VertexContainer> DerivationFramework::TrackToVertexWrapper::m_vertexKey {this, "VertexContainer", "PrimaryVertices", "primary vertex container"}
private

Definition at line 37 of file TrackToVertexWrapper.h.

38{this, "VertexContainer", "PrimaryVertices", "primary vertex container"};

The documentation for this class was generated from the following files: