58 {
59 std::vector<Trk::VxCascadeInfo*> cascadeinfoContainer;
60 constexpr int topoN = 3;
61 std::array<xAOD::VertexContainer*, topoN> Vtxwritehandles;
62 std::array<xAOD::VertexAuxContainer*, topoN> Vtxwritehandlesaux;
64
65 for(
int i =0;
i<topoN;
i++){
68 Vtxwritehandles[
i]->setStore(Vtxwritehandlesaux[i]);
71 }
72
73
74
75
80
81 if (pvContainer->size()==0){
82 ATH_MSG_WARNING(
"You have no primary vertices: " << pvContainer->size());
83 return StatusCode::RECOVERABLE;
84 } else {
85 primaryVertex = (*pvContainer)[0];
86 }
87
88
89
90
95
98 } else {
99
102 refPvContainer->setStore(refPvAuxContainer);
105 }
106 }
107
109
114
115
116 SG::AuxElement::Decorator<VertexLinkVector> CascadeV1LinksDecor("CascadeVertex1Links");
117 SG::AuxElement::Decorator<VertexLinkVector> CascadeV2LinksDecor("CascadeVertex2Links");
118 SG::AuxElement::Decorator<VertexLinkVector> JpsipiLinksDecor("JpsipiVertexLinks");
119 SG::AuxElement::Decorator<VertexLinkVector> D0LinksDecor("D0VertexLinks");
120 SG::AuxElement::Decorator<VertexLinkVector> K0LinksDecor("K0VertexLinks");
121 SG::AuxElement::Decorator<float> chi2_decor("ChiSquared");
122 SG::AuxElement::Decorator<float> ndof_decor("NumberDoF");
123 SG::AuxElement::Decorator<float> Pt_decor("Pt");
124 SG::AuxElement::Decorator<float> PtErr_decor("PtErr");
125 SG::AuxElement::Decorator<float> Mass_svdecor("D0_mass");
126 SG::AuxElement::Decorator<float> MassErr_svdecor("D0_massErr");
127 SG::AuxElement::Decorator<float> Pt_svdecor("D0_Pt");
128 SG::AuxElement::Decorator<float> PtErr_svdecor("D0_PtErr");
129 SG::AuxElement::Decorator<float> Lxy_svdecor("D0_Lxy");
130 SG::AuxElement::Decorator<float> LxyErr_svdecor("D0_LxyErr");
131 SG::AuxElement::Decorator<float> Tau_svdecor("D0_Tau");
132 SG::AuxElement::Decorator<float> TauErr_svdecor("D0_TauErr");
133
134 SG::AuxElement::Decorator<float> Mass_sv2decor("K0_mass");
135 SG::AuxElement::Decorator<float> MassErr_sv2decor("K0_massErr");
136 SG::AuxElement::Decorator<float> Pt_sv2decor("K0_Pt");
137 SG::AuxElement::Decorator<float> PtErr_sv2decor("K0_PtErr");
138 SG::AuxElement::Decorator<float> Lxy_sv2decor("K0_Lxy");
139 SG::AuxElement::Decorator<float> LxyErr_sv2decor("K0_LxyErr");
140 SG::AuxElement::Decorator<float> Tau_sv2decor("K0_Tau");
141 SG::AuxElement::Decorator<float> TauErr_sv2decor("K0_TauErr");
142
143 SG::AuxElement::Decorator<float> MassJpsi_decor("Jpsi_mass");
144 SG::AuxElement::Decorator<float> MassPiD0_decor("PiD0_mass");
145 SG::AuxElement::Decorator<float> MassPiD0K0_decor("PiD0K0_mass");
146
147 SG::AuxElement::Decorator<float> MassMumu_decor("Mumu_mass");
148 SG::AuxElement::Decorator<float> MassKpi_svdecor("Kpi_mass");
149 SG::AuxElement::Decorator<float> MassPipi_sv2decor("Pipi_mass");
150
151 ATH_MSG_DEBUG(
"cascadeinfoContainer size " << cascadeinfoContainer.size());
152
153
156
159
162
163 for (Trk::VxCascadeInfo*
x : cascadeinfoContainer) {
166
167 return StatusCode::FAILURE;
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188 const std::vector<xAOD::Vertex*> &cascadeVertices =
x->vertices();
189 if(cascadeVertices.size()!=topoN)
191 if(cascadeVertices[0] ==
nullptr || cascadeVertices[1] ==
nullptr || cascadeVertices[2] ==
nullptr)
ATH_MSG_ERROR(
"Error null vertex");
192
193 for(
int i =0;
i<topoN;
i++) Vtxwritehandles[i]->
push_back(cascadeVertices[i]);
194
195 x->setSVOwnership(
false);
196 const auto mainVertex = cascadeVertices[2];
197 const std::vector< std::vector<TLorentzVector> > &moms =
x->getParticleMoms();
198
199
200 std::vector<const xAOD::Vertex*> verticestoLink;
201 verticestoLink.push_back(cascadeVertices[0]);
202
203 if(Vtxwritehandles[2] ==
nullptr)
ATH_MSG_ERROR(
"Vtxwritehandles[2] is null");
206
207 verticestoLink.clear();
208 verticestoLink.push_back(cascadeVertices[1]);
211
212
214 ATH_MSG_DEBUG(
"1 pt Jpsi+pi tracks " << cascadeVertices[2]->trackParticle(0)->
pt() <<
", " << cascadeVertices[2]->trackParticle(1)->
pt() <<
", " << cascadeVertices[2]->trackParticle(2)->
pt());
216
217
219 ATH_MSG_DEBUG(
"1 pt D0 tracks " << cascadeVertices[1]->trackParticle(0)->
pt() <<
", " << cascadeVertices[1]->trackParticle(1)->
pt());
221
222
224 ATH_MSG_DEBUG(
"1 pt K_S0 tracks " << cascadeVertices[0]->trackParticle(0)->
pt() <<
", " << cascadeVertices[0]->trackParticle(1)->
pt());
226
227
228 std::vector<const xAOD::Vertex*> jpsipiVerticestoLink;
229 if (jpsipiVertex) jpsipiVerticestoLink.push_back(jpsipiVertex);
233
234 std::vector<const xAOD::Vertex*> d0VerticestoLink;
235 if (d0Vertex) d0VerticestoLink.push_back(d0Vertex);
239
240 std::vector<const xAOD::Vertex*> k0VerticestoLink;
241 if (k0Vertex) k0VerticestoLink.push_back(k0Vertex);
245
246 bool tagD0(true);
247 if (jpsipiVertex){
249 }
250
254 std::vector<double> massesJpsipi;
258 std::vector<double> massesD0;
259 if(tagD0){
262 }else{
265 }
266 std::vector<double> massesK0;
269 std::vector<double> Masses;
275
276
277
278
279
280 xAOD::BPhysHypoHelper vtx(
m_hypoName, mainVertex);
281
283
284
285
286
289
291 PtErr_decor(*mainVertex) =
m_CascadeTools->pTError(moms[2],
x->getCovariance()[2]);
292
293 chi2_decor(*mainVertex) =
x->fitChi2();
294 ndof_decor(*mainVertex) =
x->nDoF();
295
296 float massMumu = 0.;
297 if (jpsipiVertex) {
298 TLorentzVector p4_mu1, p4_mu2;
305 massMumu = (p4_mu1 + p4_mu2).M();
306 }
307 MassMumu_decor(*mainVertex) = massMumu;
308
309 float massKpi = 0.;
310 if (d0Vertex) {
311 TLorentzVector p4_ka, p4_pi;
312 if(tagD0){
319 }else{
326 }
327 massKpi = (p4_ka + p4_pi).M();
328 }
329 MassKpi_svdecor(*mainVertex) = massKpi;
330
331 float massPipi = 0.;
332 if (k0Vertex) {
333 TLorentzVector p4_pip, p4_pim;
340 massPipi = (p4_pip + p4_pim).M();
341 }
342 MassPipi_sv2decor(*mainVertex) = massPipi;
343
344 MassJpsi_decor(*mainVertex) = (moms[2][0] + moms[2][1]).M();
345 MassPiD0_decor(*mainVertex) = (moms[2][2] + moms[2][4]).M();
346 MassPiD0K0_decor(*mainVertex) = (moms[2][2] + moms[2][4] + moms[2][3]).M();
347
350
351
352
353 Mass_svdecor(*mainVertex) =
m_CascadeTools->invariantMass(moms[1]);
354 MassErr_svdecor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
356 PtErr_svdecor(*mainVertex) =
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1]);
357 Lxy_svdecor(*mainVertex) =
m_CascadeTools->lxy(moms[1],cascadeVertices[1],cascadeVertices[2]);
358 LxyErr_svdecor(*mainVertex) =
m_CascadeTools->lxyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2]);
359 Tau_svdecor(*mainVertex) =
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2]);
360 TauErr_svdecor(*mainVertex) =
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2]);
361
362
363
364 Mass_sv2decor(*mainVertex) =
m_CascadeTools->invariantMass(moms[0]);
365 MassErr_sv2decor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
367 PtErr_sv2decor(*mainVertex) =
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0]);
368 Lxy_sv2decor(*mainVertex) =
m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[2]);
369 LxyErr_sv2decor(*mainVertex) =
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2]);
370 Tau_sv2decor(*mainVertex) =
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2]);
371 TauErr_sv2decor(*mainVertex) =
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2]);
372
373
375 <<
" chi2_1 " <<
m_V0Tools->chisq(cascadeVertices[0])
376 <<
" chi2_2 " <<
m_V0Tools->chisq(cascadeVertices[1])
377 <<
" chi2_3 " <<
m_V0Tools->chisq(cascadeVertices[2])
381 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[0],massesK0)
382 <<
" mass_d0 " <<
m_V0Tools->invariantMass(cascadeVertices[1],massesD0)
383 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[1],massesD0)
384 <<
" mass_J " <<
m_V0Tools->invariantMass(cascadeVertices[2],massesJpsipi)
385 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[2],massesJpsipi));
386
390 double Mass_B_err =
m_CascadeTools->invariantMassError(moms[2],
x->getCovariance()[2]);
391 double Mass_D0_err =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
392 double Mass_K0_err =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
393 ATH_MSG_DEBUG(
"Mass_B " << Mass_B <<
" Mass_D0 " << Mass_D0 <<
" Mass_K0 " << Mass_K0);
394 ATH_MSG_DEBUG(
"Mass_B_err " << Mass_B_err <<
" Mass_D0_err " << Mass_D0_err <<
" Mass_K0_err " << Mass_K0_err);
395 double mprob_B =
m_CascadeTools->massProbability(mass_b,Mass_B,Mass_B_err);
396 double mprob_D0 =
m_CascadeTools->massProbability(mass_d0,Mass_D0,Mass_D0_err);
397 double mprob_K0 =
m_CascadeTools->massProbability(mass_k0,Mass_K0,Mass_K0_err);
398 ATH_MSG_DEBUG(
"mprob_B " << mprob_B <<
" mprob_D0 " << mprob_D0 <<
" mprob_K0 " << mprob_K0);
399
402 <<
" Mass_k0 " <<
m_CascadeTools->invariantMass(moms[0],massesD0));
404 <<
" Mass_d0_err " <<
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1],massesD0)
405 <<
" Mass_k0_err " <<
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0],massesK0));
408 <<
" pt_d0 " <<
m_V0Tools->pT(cascadeVertices[1])
410 <<
" pt_k0 " <<
m_V0Tools->pT(cascadeVertices[0]));
412 <<
" ptErr_d " <<
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1])
413 <<
" ptErr_d0 " <<
m_V0Tools->pTError(cascadeVertices[1])
414 <<
" ptErr_k " <<
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0])
415 <<
" ptErr_k0 " <<
m_V0Tools->pTError(cascadeVertices[0]));
416 ATH_MSG_DEBUG(
"lxy_B " <<
m_V0Tools->lxy(cascadeVertices[2],primaryVertex) <<
" lxy_D " <<
m_V0Tools->lxy(cascadeVertices[1],cascadeVertices[2]) <<
" lxy_K " <<
m_V0Tools->lxy(cascadeVertices[0],cascadeVertices[2]));
419 <<
" lxyErr_d " <<
m_CascadeTools->lxyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
420 <<
" lxyErr_d0 " <<
m_V0Tools->lxyError(cascadeVertices[1],cascadeVertices[2])
421 <<
" lxyErr_k " <<
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
422 <<
" lxyErr_k0 " <<
m_V0Tools->lxyError(cascadeVertices[0],cascadeVertices[2]));
424 <<
" tau_d0 " <<
m_V0Tools->tau(cascadeVertices[1],cascadeVertices[2],massesD0)
425 <<
" tau_k0 " <<
m_V0Tools->tau(cascadeVertices[0],cascadeVertices[2],massesK0));
427 <<
" tau_d " <<
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2])
428 <<
" tau_D " <<
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2],mass_d0)
429 <<
" tau_k " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2])
430 <<
" tau_K " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2],mass_k0));
432 <<
" tauErr_d " <<
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
433 <<
" tauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[1],cascadeVertices[2],massesD0)
434 <<
" tauErr_k " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
435 <<
" tauErr_k0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[2],massesK0));
437 <<
" TauErr_d " <<
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2],mass_d0)
438 <<
" TauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[1],cascadeVertices[2],massesD0,mass_d0)
439 <<
" TauErr_k " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2],mass_k0)
440 <<
" TauErr_k0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[2],massesD0,mass_k0));
441
442 ATH_MSG_DEBUG(
"CascadeTools main vert wrt PV " <<
" CascadeTools SV " <<
" V0Tools SV");
444 <<
", " <<
m_CascadeTools->a0z(moms[1],cascadeVertices[1],cascadeVertices[2])
445 <<
", " <<
m_CascadeTools->a0z(moms[0],cascadeVertices[0],cascadeVertices[2])
446 <<
", " <<
m_V0Tools->a0z(cascadeVertices[1],cascadeVertices[2])
447 <<
", " <<
m_V0Tools->a0z(cascadeVertices[0],cascadeVertices[2]));
449 <<
", " <<
m_CascadeTools->a0zError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
450 <<
", " <<
m_CascadeTools->a0zError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
451 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[1],cascadeVertices[2])
452 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[0],cascadeVertices[2]));
454 <<
", " <<
m_CascadeTools->a0xy(moms[1],cascadeVertices[1],cascadeVertices[2])
455 <<
", " <<
m_CascadeTools->a0xy(moms[0],cascadeVertices[0],cascadeVertices[2])
456 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[1],cascadeVertices[2])
457 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[0],cascadeVertices[2]));
459 <<
", " <<
m_CascadeTools->a0xyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
460 <<
", " <<
m_CascadeTools->a0xyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
461 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[1],cascadeVertices[2])
462 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[0],cascadeVertices[2]));
464 <<
", " <<
m_CascadeTools->a0(moms[1],cascadeVertices[1],cascadeVertices[2])
465 <<
", " <<
m_CascadeTools->a0(moms[0],cascadeVertices[0],cascadeVertices[2])
466 <<
", " <<
m_V0Tools->a0(cascadeVertices[1],cascadeVertices[2])
467 <<
", " <<
m_V0Tools->a0(cascadeVertices[0],cascadeVertices[2]));
469 <<
", " <<
m_CascadeTools->a0Error(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
470 <<
", " <<
m_CascadeTools->a0Error(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
471 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[1],cascadeVertices[2])
472 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[0],cascadeVertices[2]));
476 ATH_MSG_DEBUG(
"X0 " << primaryVertex->x() <<
" Y0 " << primaryVertex->y() <<
" Z0 " << primaryVertex->z());
480 ATH_MSG_DEBUG(
"Rxy0 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[0],primaryVertex) <<
" RxyErr0 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[0],primaryVertex));
481 ATH_MSG_DEBUG(
"Rxy1 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[1],primaryVertex) <<
" RxyErr1 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[1],primaryVertex));
482 ATH_MSG_DEBUG(
"Rxy2 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[2],primaryVertex) <<
" RxyErr2 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[2],primaryVertex));
483 ATH_MSG_DEBUG(
"number of covariance matrices " << (
x->getCovariance()).size());
484 }
485
486
487
488 for (
auto x : cascadeinfoContainer)
delete x;
489
490 return StatusCode::SUCCESS;
491 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
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.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
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.