57 {
58 std::vector<Trk::VxCascadeInfo*> cascadeinfoContainer;
59 constexpr int topoN = 2;
60 std::array<xAOD::VertexContainer*, topoN> Vtxwritehandles;
61 std::array<xAOD::VertexAuxContainer*, topoN> Vtxwritehandlesaux;
63
64 for(
int i =0;
i<topoN;
i++){
67 Vtxwritehandles[
i]->setStore(Vtxwritehandlesaux[i]);
70 }
71
72
73
74
79
80 if (pvContainer->
size()==0){
82 return StatusCode::RECOVERABLE;
83 } else {
84 primaryVertex = (*pvContainer)[0];
85 }
86
87
88
89
94
97 } else {
98
101 refPvContainer->setStore(refPvAuxContainer);
104 }
105 }
106
108
113
114
115 SG::AuxElement::Decorator<VertexLinkVector> CascadeLinksDecor("CascadeVertexLinks");
116 SG::AuxElement::Decorator<VertexLinkVector> JpsipiLinksDecor("JpsipiVertexLinks");
117 SG::AuxElement::Decorator<VertexLinkVector> D0LinksDecor("D0VertexLinks");
118 SG::AuxElement::Decorator<float> chi2_decor("ChiSquared");
119 SG::AuxElement::Decorator<float> ndof_decor("NumberDoF");
120 SG::AuxElement::Decorator<float> Pt_decor("Pt");
121 SG::AuxElement::Decorator<float> PtErr_decor("PtErr");
122 SG::AuxElement::Decorator<float> Mass_svdecor("D0_mass");
123 SG::AuxElement::Decorator<float> MassErr_svdecor("D0_massErr");
124 SG::AuxElement::Decorator<float> Pt_svdecor("D0_Pt");
125 SG::AuxElement::Decorator<float> PtErr_svdecor("D0_PtErr");
126 SG::AuxElement::Decorator<float> Lxy_svdecor("D0_Lxy");
127 SG::AuxElement::Decorator<float> LxyErr_svdecor("D0_LxyErr");
128 SG::AuxElement::Decorator<float> Tau_svdecor("D0_Tau");
129 SG::AuxElement::Decorator<float> TauErr_svdecor("D0_TauErr");
130
131 SG::AuxElement::Decorator<float> MassMumu_decor("Mumu_mass");
132 SG::AuxElement::Decorator<float> MassKpi_svdecor("Kpi_mass");
133 SG::AuxElement::Decorator<float> MassJpsi_decor("Jpsi_mass");
134 SG::AuxElement::Decorator<float> MassPiD0_decor("PiD0_mass");
135
136 ATH_MSG_DEBUG(
"cascadeinfoContainer size " << cascadeinfoContainer.size());
137
138
143
144 for (Trk::VxCascadeInfo*
x : cascadeinfoContainer) {
147
148 return StatusCode::FAILURE;
149 }
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169 const std::vector<xAOD::Vertex*> &cascadeVertices =
x->vertices();
170 if(cascadeVertices.size()!=topoN)
172 if(cascadeVertices[0] ==
nullptr || cascadeVertices[1] ==
nullptr)
ATH_MSG_ERROR(
"Error null vertex");
173
174 for(
int i =0;
i<topoN;
i++) Vtxwritehandles[i]->
push_back(cascadeVertices[i]);
175
176 x->setSVOwnership(
false);
177 const auto mainVertex = cascadeVertices[1];
178 const std::vector< std::vector<TLorentzVector> > &moms =
x->getParticleMoms();
179
180
181 std::vector<const xAOD::Vertex*> verticestoLink;
182 verticestoLink.push_back(cascadeVertices[0]);
183 if(Vtxwritehandles[1] ==
nullptr)
ATH_MSG_ERROR(
"Vtxwritehandles[1] is null");
186
187
189 ATH_MSG_DEBUG(
"1 pt Jpsi+pi tracks " << cascadeVertices[1]->trackParticle(0)->
pt() <<
", " << cascadeVertices[1]->trackParticle(1)->
pt() <<
", " << cascadeVertices[1]->trackParticle(2)->
pt());
191
192
194 ATH_MSG_DEBUG(
"1 pt D0 tracks " << cascadeVertices[0]->trackParticle(0)->
pt() <<
", " << cascadeVertices[0]->trackParticle(1)->
pt());
196
197
198 std::vector<const xAOD::Vertex*> jpsipiVerticestoLink;
199 if (jpsipiVertex) jpsipiVerticestoLink.push_back(jpsipiVertex);
203
204 std::vector<const xAOD::Vertex*> d0VerticestoLink;
205 if (d0Vertex) d0VerticestoLink.push_back(d0Vertex);
209
210 bool tagD0(true);
211 if (jpsipiVertex){
213 }
214
217 std::vector<double> massesJpsipi;
221 std::vector<double> massesD0;
222 if(tagD0){
225 }else{
228 }
229 std::vector<double> Masses;
234
235
236
237
238
239 xAOD::BPhysHypoHelper vtx(
m_hypoName, mainVertex);
240
241
243
244
245
246
249
251 PtErr_decor(*mainVertex) =
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1]);
252
253 chi2_decor(*mainVertex) =
x->fitChi2();
254 ndof_decor(*mainVertex) =
x->nDoF();
255
256 float massMumu = 0.;
257 if (jpsipiVertex) {
258 TLorentzVector p4_mu1, p4_mu2;
265 massMumu = (p4_mu1 + p4_mu2).M();
266 }
267 MassMumu_decor(*mainVertex) = massMumu;
268
269 float massKpi = 0.;
270 if (d0Vertex) {
271 TLorentzVector p4_ka, p4_pi;
272 if(tagD0){
279 }else{
286 }
287 massKpi = (p4_ka + p4_pi).M();
288 }
289 MassKpi_svdecor(*mainVertex) = massKpi;
290 MassJpsi_decor(*mainVertex) = (moms[1][0] + moms[1][1]).M();
291 MassPiD0_decor(*mainVertex) = (moms[1][2] + moms[1][3]).M();
292
293
296
297
298
299 Mass_svdecor(*mainVertex) =
m_CascadeTools->invariantMass(moms[0]);
300 MassErr_svdecor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
302 PtErr_svdecor(*mainVertex) =
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0]);
303 Lxy_svdecor(*mainVertex) =
m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[1]);
304 LxyErr_svdecor(*mainVertex) =
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
305 Tau_svdecor(*mainVertex) =
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1]);
306 TauErr_svdecor(*mainVertex) =
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
307
308
310 <<
" chi2_1 " <<
m_V0Tools->chisq(cascadeVertices[0])
311 <<
" chi2_2 " <<
m_V0Tools->chisq(cascadeVertices[1])
315 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[0],massesD0)
316 <<
" mass_J " <<
m_V0Tools->invariantMass(cascadeVertices[1],massesJpsipi)
317 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[1],massesJpsipi));
318
321 double Mass_B_err =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
322 double Mass_D0_err =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
323 ATH_MSG_DEBUG(
"Mass_B " << Mass_B <<
" Mass_D0 " << Mass_D0);
324 ATH_MSG_DEBUG(
"Mass_B_err " << Mass_B_err <<
" Mass_D0_err " << Mass_D0_err);
325 double mprob_B =
m_CascadeTools->massProbability(mass_b,Mass_B,Mass_B_err);
326 double mprob_D0 =
m_CascadeTools->massProbability(mass_d0,Mass_D0,Mass_D0_err);
327 ATH_MSG_DEBUG(
"mprob_B " << mprob_B <<
" mprob_D0 " << mprob_D0);
328
330 <<
" Mass_d0 " <<
m_CascadeTools->invariantMass(moms[0],massesD0));
332 <<
" Mass_d0_err " <<
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0],massesD0));
335 <<
" pt_d0 " <<
m_V0Tools->pT(cascadeVertices[0]));
337 <<
" ptErr_d " <<
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0])
338 <<
" ptErr_d0 " <<
m_V0Tools->pTError(cascadeVertices[0]));
342 <<
" lxyErr_d " <<
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
343 <<
" lxyErr_d0 " <<
m_V0Tools->lxyError(cascadeVertices[0],cascadeVertices[1]));
345 <<
" tau_d0 " <<
m_V0Tools->tau(cascadeVertices[0],cascadeVertices[1],massesD0));
347 <<
" tau_d " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1])
348 <<
" tau_D " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1],mass_d0));
350 <<
" tauErr_d " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
351 <<
" tauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesD0));
353 <<
" TauErr_d " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1],mass_d0)
354 <<
" TauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesD0,mass_d0));
355
356 ATH_MSG_DEBUG(
"CascadeTools main vert wrt PV " <<
" CascadeTools SV " <<
" V0Tools SV");
358 <<
", " <<
m_CascadeTools->a0z(moms[0],cascadeVertices[0],cascadeVertices[1])
359 <<
", " <<
m_V0Tools->a0z(cascadeVertices[0],cascadeVertices[1]));
361 <<
", " <<
m_CascadeTools->a0zError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
362 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[0],cascadeVertices[1]));
364 <<
", " <<
m_CascadeTools->a0xy(moms[0],cascadeVertices[0],cascadeVertices[1])
365 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[0],cascadeVertices[1]));
367 <<
", " <<
m_CascadeTools->a0xyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
368 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[0],cascadeVertices[1]));
370 <<
", " <<
m_CascadeTools->a0(moms[0],cascadeVertices[0],cascadeVertices[1])
371 <<
", " <<
m_V0Tools->a0(cascadeVertices[0],cascadeVertices[1]));
373 <<
", " <<
m_CascadeTools->a0Error(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
374 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[0],cascadeVertices[1]));
377 ATH_MSG_DEBUG(
"X0 " << primaryVertex->
x() <<
" Y0 " << primaryVertex->
y() <<
" Z0 " << primaryVertex->
z());
380 ATH_MSG_DEBUG(
"Rxy0 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[0],primaryVertex) <<
" RxyErr0 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[0],primaryVertex));
381 ATH_MSG_DEBUG(
"Rxy1 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[1],primaryVertex) <<
" RxyErr1 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[1],primaryVertex));
382 ATH_MSG_DEBUG(
"number of covariance matrices " << (
x->getCovariance()).size());
383 }
384
385
386
387 for (
auto x : cascadeinfoContainer)
delete x;
388
389 return StatusCode::SUCCESS;
390 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
size_type size() const noexcept
Returns the number of elements in the collection.
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
StatusCode performSearch(std::vector< Trk::VxCascadeInfo * > *cascadeinfoContainer, const EventContext &ctx) const
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
float charge() const
Returns the charge.
float z() const
Returns the z position.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
float y() const
Returns the y position.
float x() const
Returns the x position.
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
VertexAuxContainer_v1 VertexAuxContainer
Definition of the current jet auxiliary container.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.