ATLAS Offline Software
Public Member Functions | Private Types | Private Attributes | List of all members
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
62  if( ! tracks.isValid() ) {
63  ATH_MSG_ERROR ("Couldn't retrieve TrackParticles with key: " << m_containerName.key() );
64  return StatusCode::FAILURE;
65  }
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> >
74  track_decorators = createDecorators<xAOD::TrackParticleContainer,float>(m_trackFloatDecorKeys,ctx);
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  }

◆ 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  }
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  }

Member Data Documentation

◆ m_containerName

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

Definition at line 35 of file TrackToVertexWrapper.h.

◆ m_sgName

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

Definition at line 33 of file TrackToVertexWrapper.h.

◆ m_tool

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

Definition at line 31 of file TrackToVertexWrapper.h.

◆ 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.


The documentation for this class was generated from the following files:
DerivationFramework::TrackToVertexWrapper::m_vertexKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
Definition: TrackToVertexWrapper.h:38
DerivationFramework::TrackToVertexWrapper::kdecn_b_D0ErrDecor
@ kdecn_b_D0ErrDecor
Definition: TrackToVertexWrapper.h:52
DerivationFramework::TrackToVertexWrapper::kdecnD0ErrDecor
@ kdecnD0ErrDecor
Definition: TrackToVertexWrapper.h:43
DerivationFramework::createDecoratorKeys
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)
Definition: DecoratorUtils.h:20
DerivationFramework::TrackToVertexWrapper::kdecnZ0SinThetaDecor
@ kdecnZ0SinThetaDecor
Definition: TrackToVertexWrapper.h:42
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
Trk::ImpactParametersAndSigma::PVsigmaz0
double PVsigmaz0
Definition: ITrackToVertexIPEstimator.h:41
Trk::ImpactParametersAndSigma::PVsigmaz0SinTheta
double PVsigmaz0SinTheta
Definition: ITrackToVertexIPEstimator.h:42
DerivationFramework::TrackToVertexWrapper::kdecnZ0Decor
@ kdecnZ0Decor
Definition: TrackToVertexWrapper.h:41
Trk::ImpactParametersAndSigma::IPd0
double IPd0
Definition: ITrackToVertexIPEstimator.h:34
DerivationFramework::TrackToVertexWrapper::kdecn_b_PVD0ErrDecor
@ kdecn_b_PVD0ErrDecor
Definition: TrackToVertexWrapper.h:55
Trk::ImpactParametersAndSigma::IPz0SinTheta
double IPz0SinTheta
Definition: ITrackToVertexIPEstimator.h:36
DerivationFramework::TrackToVertexWrapper::kdecn_b_D0Decor
@ kdecn_b_D0Decor
Definition: TrackToVertexWrapper.h:49
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
DerivationFramework::TrackToVertexWrapper::kdecnZ0SinThetaErrDecor
@ kdecnZ0SinThetaErrDecor
Definition: TrackToVertexWrapper.h:45
DerivationFramework::TrackToVertexWrapper::kdecnPVD0ErrDecor
@ kdecnPVD0ErrDecor
Definition: TrackToVertexWrapper.h:46
DerivationFramework::TrackToVertexWrapper::kdecnPVZ0ErrDecor
@ kdecnPVZ0ErrDecor
Definition: TrackToVertexWrapper.h:47
DerivationFramework::TrackToVertexWrapper::kdecn_b_Z0SinThetaErrDecor
@ kdecn_b_Z0SinThetaErrDecor
Definition: TrackToVertexWrapper.h:54
DerivationFramework::TrackToVertexWrapper::m_trackFloatDecorKeys
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackFloatDecorKeys
Definition: TrackToVertexWrapper.h:59
Trk::ImpactParametersAndSigma::PVsigmad0
double PVsigmad0
Definition: ITrackToVertexIPEstimator.h:40
DerivationFramework::TrackToVertexWrapper::kdecnZ0ErrDecor
@ kdecnZ0ErrDecor
Definition: TrackToVertexWrapper.h:44
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
DerivationFramework::TrackToVertexWrapper::kNFloatDecor
@ kNFloatDecor
Definition: TrackToVertexWrapper.h:58
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
python.subdetectors.mmg.names
names
Definition: mmg.py:8
DerivationFramework::TrackToVertexWrapper::kdecn_b_Z0SinThetaDecor
@ kdecn_b_Z0SinThetaDecor
Definition: TrackToVertexWrapper.h:51
Trk::ImpactParametersAndSigma::IPz0
double IPz0
Definition: ITrackToVertexIPEstimator.h:35
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::TrackToVertexWrapper::m_containerName
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_containerName
Definition: TrackToVertexWrapper.h:36
Trk::ImpactParametersAndSigma::sigmad0
double sigmad0
Definition: ITrackToVertexIPEstimator.h:37
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DerivationFramework::TrackToVertexWrapper::kdecnPVZ0SinThetaErrDecor
@ kdecnPVZ0SinThetaErrDecor
Definition: TrackToVertexWrapper.h:48
DerivationFramework::TrackToVertexWrapper::kdecn_b_Z0ErrDecor
@ kdecn_b_Z0ErrDecor
Definition: TrackToVertexWrapper.h:53
DerivationFramework::TrackToVertexWrapper::kdecn_b_Z0Decor
@ kdecn_b_Z0Decor
Definition: TrackToVertexWrapper.h:50
DerivationFramework::TrackToVertexWrapper::kdecnD0Decor
@ kdecnD0Decor
Definition: TrackToVertexWrapper.h:40
DerivationFramework::TrackToVertexWrapper::kdecn_b_PVZ0ErrDecor
@ kdecn_b_PVZ0ErrDecor
Definition: TrackToVertexWrapper.h:56
Trk::ImpactParametersAndSigma::sigmaz0SinTheta
double sigmaz0SinTheta
Definition: ITrackToVertexIPEstimator.h:39
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
DerivationFramework::TrackToVertexWrapper::kdecn_b_PVZ0SinThetaErrDecor
@ kdecn_b_PVZ0SinThetaErrDecor
Definition: TrackToVertexWrapper.h:57
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DerivationFramework::TrackToVertexWrapper::m_sgName
Gaudi::Property< std::string > m_sgName
Definition: TrackToVertexWrapper.h:34
Trk::ImpactParametersAndSigma::sigmaz0
double sigmaz0
Definition: ITrackToVertexIPEstimator.h:38
DerivationFramework::TrackToVertexWrapper::m_tool
ToolHandle< Trk::ITrackToVertexIPEstimator > m_tool
Definition: TrackToVertexWrapper.h:32