ATLAS Offline Software
Loading...
Searching...
No Matches
V0MainDecorator.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
10namespace InDet
11{
12V0MainDecorator::V0MainDecorator(const std::string& t, const std::string& n, const IInterface* p)
13 :
14 AthAlgTool(t,n,p){}
15
17
18StatusCode V0MainDecorator::initKey(const std::string &containerKey,
20 decokey = containerKey + decokey.key();
21 ATH_MSG_DEBUG(" : " << decokey.key());
22 ATH_CHECK(decokey.initialize(!containerKey.empty()));
23 return StatusCode::SUCCESS;
24}
25
27
28 ATH_CHECK( m_V0Tools.retrieve() );
35
42
71
72
73
74 if (m_masses == 1) {
75 auto gendata = std::make_shared<GenData>();
76 m_masspi = gendata->particleMass(MC::PIPLUS).value();
77 m_massp = gendata->particleMass(MC::PROTON).value();
78 m_masse = gendata->particleMass(MC::ELECTRON).value();
79 m_massK0S = gendata->particleMass(MC::K0S).value();
80 m_massLambda = gendata->particleMass(MC::LAMBDA0).value();
81 }
82 return StatusCode::SUCCESS;
83}
84
85StatusCode V0MainDecorator::decorateV0(xAOD::VertexContainer *container, const EventContext& ctx) const
86{
87
101
102 for ( auto unconstrV0 : *container )
103 {
104 double mass_ks = m_V0Tools->invariantMass(unconstrV0,m_masspi,m_masspi);
105 double mass_error_ks = m_V0Tools->invariantMassError(unconstrV0,m_masspi,m_masspi);
106 double mass_la = m_V0Tools->invariantMass(unconstrV0,m_massp,m_masspi);
107 double mass_error_la = m_V0Tools->invariantMassError(unconstrV0,m_massp,m_masspi);
108 double mass_lb = m_V0Tools->invariantMass(unconstrV0,m_masspi,m_massp);
109 double mass_error_lb = m_V0Tools->invariantMassError(unconstrV0,m_masspi,m_massp);
110 double pt = m_V0Tools->pT(unconstrV0);
111 double ptError = m_V0Tools->pTError(unconstrV0);
112 double rxy = m_V0Tools->rxy(unconstrV0);
113 double rxyError = m_V0Tools->rxyError(unconstrV0);
114 Amg::Vector3D momentum = m_V0Tools->V0Momentum(unconstrV0);
115
116 decorKsMass( *unconstrV0 ) = mass_ks;
117 decorLaMass( *unconstrV0 ) = mass_la;
118 decorLbMass( *unconstrV0 ) = mass_lb;
119 decorKsMassErr( *unconstrV0 ) = mass_error_ks;
120 decorLaMassErr( *unconstrV0 ) = mass_error_la;
121 decorLbMassErr( *unconstrV0 ) = mass_error_lb;
122 decorPt_v0( *unconstrV0 ) = pt;
123 decorPtErr_v0( *unconstrV0 ) =ptError;
124 decorRxy_v0( *unconstrV0 ) = rxy;
125 decorRxyErr_v0( *unconstrV0 ) =rxyError;
126 decorPx_v0( *unconstrV0 ) = momentum.x();
127 decorPy_v0( *unconstrV0 ) = momentum.y();
128 decorPz_v0( *unconstrV0 ) = momentum.z();
129 }
130 return StatusCode::SUCCESS;
131}
132
133StatusCode V0MainDecorator::decorateks(xAOD::VertexContainer *container, const EventContext& ctx) const
134{
135
145
146 for ( auto ksV0 : *container )
147 {
148 double mass_ks = m_V0Tools->invariantMass(ksV0,m_masspi,m_masspi);
149 double mass_error_ks = m_V0Tools->invariantMassError(ksV0,m_masspi,m_masspi);
150 double pt = m_V0Tools->pT(ksV0);
151 double ptError = m_V0Tools->pTError(ksV0);
152 double rxy = m_V0Tools->rxy(ksV0);
153 double rxyError = m_V0Tools->rxyError(ksV0);
154 Amg::Vector3D momentum = m_V0Tools->V0Momentum(ksV0);
155
156 decorMass_ks( *ksV0 ) = mass_ks;
157 decorMassErr_ks( *ksV0 ) = mass_error_ks;
158 decorPt_ks( *ksV0 ) = pt;
159 decorPtErr_ks( *ksV0 ) = ptError;
160 decorRxy_ks( *ksV0 ) = rxy;
161 decorRxyErr_ks( *ksV0 ) = rxyError;
162 decorPx_ks( *ksV0 ) = momentum.x();
163 decorPy_ks( *ksV0 ) = momentum.y();
164 decorPz_ks( *ksV0 ) = momentum.z();
165 }
166 return StatusCode::SUCCESS;
167}
168
169StatusCode V0MainDecorator::decoratela(xAOD::VertexContainer *container, const EventContext& ctx) const
170{
180
181 for ( auto laV0 : *container )
182 {
183 double mass_la = m_V0Tools->invariantMass(laV0,m_massp,m_masspi);
184 double mass_error_la = m_V0Tools->invariantMassError(laV0,m_massp,m_masspi);
185 double pt = m_V0Tools->pT(laV0);
186 double ptError = m_V0Tools->pTError(laV0);
187 double rxy = m_V0Tools->rxy(laV0);
188 double rxyError = m_V0Tools->rxyError(laV0);
189 Amg::Vector3D momentum = m_V0Tools->V0Momentum(laV0);
190
191 decorMass_la( *laV0 ) = mass_la;
192 decorMassErr_la( *laV0 ) = mass_error_la;
193 decorPt_la( *laV0 ) = pt;
194 decorPtErr_la( *laV0 ) = ptError;
195 decorRxy_la( *laV0 ) = rxy;
196 decorRxyErr_la( *laV0 ) = rxyError;
197 decorPx_la( *laV0 ) = momentum.x();
198 decorPy_la( *laV0 ) = momentum.y();
199 decorPz_la( *laV0 ) = momentum.z();
200 }
201 return StatusCode::SUCCESS;
202}
203
204StatusCode V0MainDecorator::decoratelb(xAOD::VertexContainer *container, const EventContext& ctx) const
205{
215
216 for ( auto lbV0 : *container )
217 {
218 double mass_lb = m_V0Tools->invariantMass(lbV0,m_masspi,m_massp);
219 double mass_error_lb = m_V0Tools->invariantMassError(lbV0,m_masspi,m_massp);
220 double pt = m_V0Tools->pT(lbV0);
221 double ptError = m_V0Tools->pTError(lbV0);
222 double rxy = m_V0Tools->rxy(lbV0);
223 double rxyError = m_V0Tools->rxyError(lbV0);
224 Amg::Vector3D momentum = m_V0Tools->V0Momentum(lbV0);
225
226 decorMass_lb( *lbV0 ) = mass_lb;
227 decorMassErr_lb( *lbV0 ) = mass_error_lb;
228 decorPt_lb( *lbV0 ) = pt;
229 decorPtErr_lb( *lbV0 ) = ptError;
230 decorRxy_lb( *lbV0 ) = rxy;
231 decorRxyErr_lb( *lbV0 ) = rxyError;
232 decorPx_lb( *lbV0 ) = momentum.x();
233 decorPy_lb( *lbV0 ) = momentum.y();
234 decorPz_lb( *lbV0 ) = momentum.z();
235 }
236 return StatusCode::SUCCESS;
237}
238
239}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
ATLAS-specific HepMC functions.
Handle class for adding a decoration to an object.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_ks
DoubleProperty m_masse
electron mass (0.510999 MeV)
StatusCode decorateV0(xAOD::VertexContainer *container, const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_v0
StatusCode decoratela(xAOD::VertexContainer *container, const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_v0
Gaudi::Property< std::string > m_v0Key
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_v0
DoubleProperty m_massK0S
Kshort mass (497.672 MeV).
Gaudi::Property< std::string > m_lbKey
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_la
DoubleProperty m_massp
proton mass (938.272 MeV)
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLbMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLbMass
DoubleProperty m_massLambda
Lambda mass (1115.68 MeV).
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorKsMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorKsMass
V0MainDecorator(const std::string &t, const std::string &n, const IInterface *p)
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_v0
StatusCode decoratelb(xAOD::VertexContainer *container, const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_la
StatusCode initKey(const std::string &, SG::WriteDecorHandleKey< xAOD::VertexContainer > &decokey) const
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_lb
IntegerProperty m_masses
= 1 if using PDG values, = 2 if user set (1)
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLaMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_lb
Gaudi::Property< std::string > m_laKey
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_ks
DoubleProperty m_masspi
pion mass (139.57 MeV)
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_lb
Gaudi::Property< std::string > m_ksKey
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLaMass
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_lb
StatusCode decorateks(xAOD::VertexContainer *container, const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_ks
PublicToolHandle< Trk::V0Tools > m_V0Tools
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_ks
const std::string & key() const
Return the StoreGate ID for the referenced object.
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Handle class for adding a decoration to an object.
Eigen::Matrix< double, 3, 1 > Vector3D
Primary Vertex Finder.
static const int ELECTRON
static const int K0S
static const int PIPLUS
static const int LAMBDA0
static const int PROTON
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".