ATLAS Offline Software
V0MainDecorator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
6 #include "HepPDT/ParticleDataTable.hh"
7 #include "GaudiKernel/IPartPropSvc.h"
8 #include "xAODTracking/Vertex.h"
11 namespace InDet
12 {
13 V0MainDecorator::V0MainDecorator(const std::string& t, const std::string& n, const IInterface* p)
14  :
15  AthAlgTool(t,n,p), m_masses(1),
16  m_masspi(139.57),
17  m_massp(938.272),
18  m_masse(0.510999),
19  m_massK0S(497.672),
20  m_massLambda(1115.68)
21  {
22  declareProperty("masses", m_masses);
23  declareProperty("masspi", m_masspi);
24  declareProperty("massp", m_massp);
25  declareProperty("masse", m_masse);
26  declareProperty("massK0S", m_massK0S);
27  declareProperty("massLambda", m_massLambda);
28  }
29 
31 
32 StatusCode V0MainDecorator::initKey(const std::string &containerKey,
34  decokey = containerKey + decokey.key();
35  ATH_MSG_DEBUG(" : " << decokey.key());
36  ATH_CHECK(decokey.initialize(!containerKey.empty()));
37  return StatusCode::SUCCESS;
38 }
39 
41 
42  ATH_CHECK( m_V0Tools.retrieve() );
49 
56 
85 
86 
87 
88  if (m_masses == 1) {
89  // get the Particle Properties Service
90  IPartPropSvc* partPropSvc = nullptr;
91  ATH_CHECK( service("PartPropSvc", partPropSvc, true) );
92  auto *particleDataTable = partPropSvc->PDT();
93 
94  const HepPDT::ParticleData* pd_pi = particleDataTable->particle(MC::PIPLUS);
95  const HepPDT::ParticleData* pd_p = particleDataTable->particle(MC::PROTON);
96  const HepPDT::ParticleData* pd_e = particleDataTable->particle(MC::ELECTRON);
97  const HepPDT::ParticleData* pd_K = particleDataTable->particle(MC::K0S);
98  const HepPDT::ParticleData* pd_L = particleDataTable->particle(MC::LAMBDA0);
99 
100  m_masspi = pd_pi->mass();
101  m_massp = pd_p->mass();
102  m_masse = pd_e->mass();
103  m_massK0S = pd_K->mass();
104  m_massLambda = pd_L->mass();
105  }
106  return StatusCode::SUCCESS;
107 }
108 
109 StatusCode V0MainDecorator::decorateV0(xAOD::VertexContainer *container, const EventContext& ctx) const
110 {
111 
125 
126  for ( auto unconstrV0 : *container )
127  {
128  double mass_ks = m_V0Tools->invariantMass(unconstrV0,m_masspi,m_masspi);
129  double mass_error_ks = m_V0Tools->invariantMassError(unconstrV0,m_masspi,m_masspi);
130  double mass_la = m_V0Tools->invariantMass(unconstrV0,m_massp,m_masspi);
131  double mass_error_la = m_V0Tools->invariantMassError(unconstrV0,m_massp,m_masspi);
132  double mass_lb = m_V0Tools->invariantMass(unconstrV0,m_masspi,m_massp);
133  double mass_error_lb = m_V0Tools->invariantMassError(unconstrV0,m_masspi,m_massp);
134  double pt = m_V0Tools->pT(unconstrV0);
135  double ptError = m_V0Tools->pTError(unconstrV0);
136  double rxy = m_V0Tools->rxy(unconstrV0);
137  double rxyError = m_V0Tools->rxyError(unconstrV0);
138  Amg::Vector3D momentum = m_V0Tools->V0Momentum(unconstrV0);
139 
140  decorKsMass( *unconstrV0 ) = mass_ks;
141  decorLaMass( *unconstrV0 ) = mass_la;
142  decorLbMass( *unconstrV0 ) = mass_lb;
143  decorKsMassErr( *unconstrV0 ) = mass_error_ks;
144  decorLaMassErr( *unconstrV0 ) = mass_error_la;
145  decorLbMassErr( *unconstrV0 ) = mass_error_lb;
146  decorPt_v0( *unconstrV0 ) = pt;
147  decorPtErr_v0( *unconstrV0 ) =ptError;
148  decorRxy_v0( *unconstrV0 ) = rxy;
149  decorRxyErr_v0( *unconstrV0 ) =rxyError;
150  decorPx_v0( *unconstrV0 ) = momentum.x();
151  decorPy_v0( *unconstrV0 ) = momentum.y();
152  decorPz_v0( *unconstrV0 ) = momentum.z();
153  }
154  return StatusCode::SUCCESS;
155 }
156 
157 StatusCode V0MainDecorator::decorateks(xAOD::VertexContainer *container, const EventContext& ctx) const
158 {
159 
169 
170  for ( auto ksV0 : *container )
171  {
172  double mass_ks = m_V0Tools->invariantMass(ksV0,m_masspi,m_masspi);
173  double mass_error_ks = m_V0Tools->invariantMassError(ksV0,m_masspi,m_masspi);
174  double pt = m_V0Tools->pT(ksV0);
175  double ptError = m_V0Tools->pTError(ksV0);
176  double rxy = m_V0Tools->rxy(ksV0);
177  double rxyError = m_V0Tools->rxyError(ksV0);
178  Amg::Vector3D momentum = m_V0Tools->V0Momentum(ksV0);
179 
180  decorMass_ks( *ksV0 ) = mass_ks;
181  decorMassErr_ks( *ksV0 ) = mass_error_ks;
182  decorPt_ks( *ksV0 ) = pt;
183  decorPtErr_ks( *ksV0 ) = ptError;
184  decorRxy_ks( *ksV0 ) = rxy;
185  decorRxyErr_ks( *ksV0 ) = rxyError;
186  decorPx_ks( *ksV0 ) = momentum.x();
187  decorPy_ks( *ksV0 ) = momentum.y();
188  decorPz_ks( *ksV0 ) = momentum.z();
189  }
190  return StatusCode::SUCCESS;
191 }
192 
193 StatusCode V0MainDecorator::decoratela(xAOD::VertexContainer *container, const EventContext& ctx) const
194 {
204 
205  for ( auto laV0 : *container )
206  {
207  double mass_la = m_V0Tools->invariantMass(laV0,m_massp,m_masspi);
208  double mass_error_la = m_V0Tools->invariantMassError(laV0,m_massp,m_masspi);
209  double pt = m_V0Tools->pT(laV0);
210  double ptError = m_V0Tools->pTError(laV0);
211  double rxy = m_V0Tools->rxy(laV0);
212  double rxyError = m_V0Tools->rxyError(laV0);
213  Amg::Vector3D momentum = m_V0Tools->V0Momentum(laV0);
214 
215  decorMass_la( *laV0 ) = mass_la;
216  decorMassErr_la( *laV0 ) = mass_error_la;
217  decorPt_la( *laV0 ) = pt;
218  decorPtErr_la( *laV0 ) = ptError;
219  decorRxy_la( *laV0 ) = rxy;
220  decorRxyErr_la( *laV0 ) = rxyError;
221  decorPx_la( *laV0 ) = momentum.x();
222  decorPy_la( *laV0 ) = momentum.y();
223  decorPz_la( *laV0 ) = momentum.z();
224  }
225  return StatusCode::SUCCESS;
226 }
227 
228 StatusCode V0MainDecorator::decoratelb(xAOD::VertexContainer *container, const EventContext& ctx) const
229 {
239 
240  for ( auto lbV0 : *container )
241  {
242  double mass_lb = m_V0Tools->invariantMass(lbV0,m_masspi,m_massp);
243  double mass_error_lb = m_V0Tools->invariantMassError(lbV0,m_masspi,m_massp);
244  double pt = m_V0Tools->pT(lbV0);
245  double ptError = m_V0Tools->pTError(lbV0);
246  double rxy = m_V0Tools->rxy(lbV0);
247  double rxyError = m_V0Tools->rxyError(lbV0);
248  Amg::Vector3D momentum = m_V0Tools->V0Momentum(lbV0);
249 
250  decorMass_lb( *lbV0 ) = mass_lb;
251  decorMassErr_lb( *lbV0 ) = mass_error_lb;
252  decorPt_lb( *lbV0 ) = pt;
253  decorPtErr_lb( *lbV0 ) = ptError;
254  decorRxy_lb( *lbV0 ) = rxy;
255  decorRxyErr_lb( *lbV0 ) = rxyError;
256  decorPx_lb( *lbV0 ) = momentum.x();
257  decorPy_lb( *lbV0 ) = momentum.y();
258  decorPz_lb( *lbV0 ) = momentum.z();
259  }
260  return StatusCode::SUCCESS;
261 }
262 
263 }
InDet::V0MainDecorator::m_decorPx_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_v0
Definition: V0MainDecorator.h:68
InDet::V0MainDecorator::m_decorPy_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_ks
Definition: V0MainDecorator.h:90
SG::WriteDecorHandleKey
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Definition: StoreGate/StoreGate/WriteDecorHandleKey.h:89
InDet::V0MainDecorator::m_decorMass_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_la
Definition: V0MainDecorator.h:96
InDet::V0MainDecorator::m_decorLbMass
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLbMass
Definition: V0MainDecorator.h:56
InDet::V0MainDecorator::m_decorPz_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_v0
Definition: V0MainDecorator.h:72
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
InDet::V0MainDecorator::m_masspi
double m_masspi
pion mass (139.57 MeV)
Definition: V0MainDecorator.h:30
InDet::V0MainDecorator::m_decorMassErr_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_la
Definition: V0MainDecorator.h:98
InDet::V0MainDecorator::initKey
StatusCode initKey(const std::string &, SG::WriteDecorHandleKey< xAOD::VertexContainer > &decokey) const
Definition: V0MainDecorator.cxx:32
InDet::V0MainDecorator::m_masses
int m_masses
= 1 if using PDG values, = 2 if user set (1)
Definition: V0MainDecorator.h:29
InDet::V0MainDecorator::m_V0Tools
ToolHandle< Trk::V0Tools > m_V0Tools
Definition: V0MainDecorator.h:35
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::V0MainDecorator::m_decorKsMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorKsMassErr
Definition: V0MainDecorator.h:50
InDet::V0MainDecorator::m_decorLaMass
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLaMass
Definition: V0MainDecorator.h:52
InDet::V0MainDecorator::m_laKey
Gaudi::Property< std::string > m_laKey
Definition: V0MainDecorator.h:41
test_pyathena.pt
pt
Definition: test_pyathena.py:11
InDet::V0MainDecorator::m_decorPy_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_v0
Definition: V0MainDecorator.h:70
InDet::V0MainDecorator::m_decorPtErr_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_la
Definition: V0MainDecorator.h:102
InDet::V0MainDecorator::m_decorPx_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_la
Definition: V0MainDecorator.h:108
InDet::V0MainDecorator::m_decorPt_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_la
Definition: V0MainDecorator.h:100
InDet::V0MainDecorator::m_massLambda
double m_massLambda
Lambda mass (1115.68 MeV)
Definition: V0MainDecorator.h:34
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::V0MainDecorator::m_masse
double m_masse
electron mass (0.510999 MeV)
Definition: V0MainDecorator.h:32
InDet::V0MainDecorator::m_decorRxy_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_ks
Definition: V0MainDecorator.h:84
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::V0MainDecorator::m_decorRxy_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_v0
Definition: V0MainDecorator.h:64
InDet::V0MainDecorator::m_decorRxyErr_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_lb
Definition: V0MainDecorator.h:126
InDet::V0MainDecorator::m_decorPtErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_ks
Definition: V0MainDecorator.h:82
InDet::V0MainDecorator::m_lbKey
Gaudi::Property< std::string > m_lbKey
Definition: V0MainDecorator.h:43
InDet::V0MainDecorator::m_decorPy_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_lb
Definition: V0MainDecorator.h:130
InDet::V0MainDecorator::decoratela
StatusCode decoratela(xAOD::VertexContainer *container, const EventContext &ctx) const
Definition: V0MainDecorator.cxx:193
InDet::V0MainDecorator::decoratelb
StatusCode decoratelb(xAOD::VertexContainer *container, const EventContext &ctx) const
Definition: V0MainDecorator.cxx:228
InDet::V0MainDecorator::m_decorPt_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_lb
Definition: V0MainDecorator.h:120
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
InDet::V0MainDecorator::m_decorRxyErr_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_v0
Definition: V0MainDecorator.h:66
V0MainDecorator.h
InDet::V0MainDecorator::m_decorMassErr_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_lb
Definition: V0MainDecorator.h:118
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
WriteDecorHandle.h
Handle class for adding a decoration to an object.
InDet::V0MainDecorator::~V0MainDecorator
~V0MainDecorator()
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::V0MainDecorator::decorateV0
StatusCode decorateV0(xAOD::VertexContainer *container, const EventContext &ctx) const
Definition: V0MainDecorator.cxx:109
InDet::V0MainDecorator::m_decorPy_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPy_la
Definition: V0MainDecorator.h:110
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Vertex.h
InDet::V0MainDecorator::m_decorPtErr_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_v0
Definition: V0MainDecorator.h:62
InDet::V0MainDecorator::m_decorRxyErr_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_la
Definition: V0MainDecorator.h:106
InDet::V0MainDecorator::m_ksKey
Gaudi::Property< std::string > m_ksKey
Definition: V0MainDecorator.h:40
InDet::V0MainDecorator::m_decorPt_v0
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_v0
Definition: V0MainDecorator.h:60
InDet::V0MainDecorator::m_v0Key
Gaudi::Property< std::string > m_v0Key
Definition: V0MainDecorator.h:39
InDet::V0MainDecorator::m_decorPz_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_la
Definition: V0MainDecorator.h:112
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::V0MainDecorator::m_decorMass_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_ks
Definition: V0MainDecorator.h:76
InDet::V0MainDecorator::m_decorRxy_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_lb
Definition: V0MainDecorator.h:124
InDet::V0MainDecorator::m_decorRxy_la
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxy_la
Definition: V0MainDecorator.h:104
InDet::V0MainDecorator::m_decorLaMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLaMassErr
Definition: V0MainDecorator.h:54
VertexContainer.h
InDet::V0MainDecorator::m_decorRxyErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorRxyErr_ks
Definition: V0MainDecorator.h:86
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
InDet::V0MainDecorator::V0MainDecorator
V0MainDecorator(const std::string &t, const std::string &n, const IInterface *p)
Definition: V0MainDecorator.cxx:13
InDet::V0MainDecorator::m_massK0S
double m_massK0S
Kshort mass (497.672 MeV)
Definition: V0MainDecorator.h:33
InDet::V0MainDecorator::m_decorPt_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPt_ks
Definition: V0MainDecorator.h:80
InDet::V0MainDecorator::m_decorPz_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_ks
Definition: V0MainDecorator.h:92
InDet::V0MainDecorator::m_massp
double m_massp
proton mass (938.272 MeV)
Definition: V0MainDecorator.h:31
InDet::V0MainDecorator::m_decorPx_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_ks
Definition: V0MainDecorator.h:88
InDet::V0MainDecorator::m_decorMass_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMass_lb
Definition: V0MainDecorator.h:116
InDet::V0MainDecorator::m_decorLbMassErr
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorLbMassErr
Definition: V0MainDecorator.h:58
AthAlgTool
Definition: AthAlgTool.h:26
InDet::V0MainDecorator::m_decorPtErr_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPtErr_lb
Definition: V0MainDecorator.h:122
InDet::V0MainDecorator::decorateks
StatusCode decorateks(xAOD::VertexContainer *container, const EventContext &ctx) const
Definition: V0MainDecorator.cxx:157
InDet::V0MainDecorator::initialize
StatusCode initialize()
Definition: V0MainDecorator.cxx:40
HepMCHelpers.h
InDet::V0MainDecorator::m_decorMassErr_ks
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorMassErr_ks
Definition: V0MainDecorator.h:78
InDet::V0MainDecorator::m_decorPz_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPz_lb
Definition: V0MainDecorator.h:132
InDet::V0MainDecorator::m_decorKsMass
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorKsMass
Definition: V0MainDecorator.h:48
InDet::V0MainDecorator::m_decorPx_lb
SG::WriteDecorHandleKey< xAOD::VertexContainer > m_decorPx_lb
Definition: V0MainDecorator.h:128