71 std::vector<Trk::VxCascadeInfo*> cascadeinfoContainer;
72 constexpr
int topoN = 3;
73 std::array<xAOD::VertexContainer*, topoN> Vtxwritehandles;
74 std::array<xAOD::VertexAuxContainer*, topoN> Vtxwritehandlesaux;
77 for(
int i =0;
i<topoN;
i++){
80 Vtxwritehandles[
i]->setStore(Vtxwritehandlesaux[
i]);
93 if (pvContainer->size()==0){
94 ATH_MSG_WARNING(
"You have no primary vertices: " << pvContainer->size());
95 return StatusCode::RECOVERABLE;
97 primaryVertex = (*pvContainer)[0];
114 refPvContainer->setStore(refPvAuxContainer);
163 ATH_MSG_DEBUG(
"cascadeinfoContainer size " << cascadeinfoContainer.size());
179 return StatusCode::FAILURE;
200 const std::vector<xAOD::Vertex*> &cascadeVertices =
x->vertices();
201 if(cascadeVertices.size()!=topoN)
203 if(cascadeVertices[0] ==
nullptr || cascadeVertices[1] ==
nullptr || cascadeVertices[2] ==
nullptr)
ATH_MSG_ERROR(
"Error null vertex");
205 for(
int i =0;
i<topoN;
i++) Vtxwritehandles[
i]->push_back(cascadeVertices[
i]);
207 x->setSVOwnership(
false);
208 const auto mainVertex = cascadeVertices[2];
209 const std::vector< std::vector<TLorentzVector> > &moms =
x->getParticleMoms();
212 std::vector<const xAOD::Vertex*> verticestoLink;
213 verticestoLink.push_back(cascadeVertices[0]);
215 if(Vtxwritehandles[2] ==
nullptr)
ATH_MSG_ERROR(
"Vtxwritehandles[2] is null");
219 verticestoLink.clear();
220 verticestoLink.push_back(cascadeVertices[1]);
225 const xAOD::Vertex* jpsipiVertex = BPhysPVCascadeTools::FindVertex<3>(jpsipiContainer, cascadeVertices[2]);
226 ATH_MSG_DEBUG(
"1 pt Jpsi+pi tracks " << cascadeVertices[2]->trackParticle(0)->
pt() <<
", " << cascadeVertices[2]->trackParticle(1)->
pt() <<
", " << cascadeVertices[2]->trackParticle(2)->
pt());
230 const xAOD::Vertex* d0Vertex = BPhysPVCascadeTools::FindVertex<2>(d0Container, cascadeVertices[1]);;
231 ATH_MSG_DEBUG(
"1 pt D0 tracks " << cascadeVertices[1]->trackParticle(0)->
pt() <<
", " << cascadeVertices[1]->trackParticle(1)->
pt());
235 const xAOD::Vertex* k0Vertex = BPhysPVCascadeTools::FindVertex<2>(k0Container, cascadeVertices[0]);;
236 ATH_MSG_DEBUG(
"1 pt K_S0 tracks " << cascadeVertices[0]->trackParticle(0)->
pt() <<
", " << cascadeVertices[0]->trackParticle(1)->
pt());
240 std::vector<const xAOD::Vertex*> jpsipiVerticestoLink;
241 if (jpsipiVertex) jpsipiVerticestoLink.push_back(jpsipiVertex);
246 std::vector<const xAOD::Vertex*> d0VerticestoLink;
247 if (d0Vertex) d0VerticestoLink.push_back(d0Vertex);
252 std::vector<const xAOD::Vertex*> k0VerticestoLink;
253 if (k0Vertex) k0VerticestoLink.push_back(k0Vertex);
266 std::vector<double> massesJpsipi;
270 std::vector<double> massesD0;
278 std::vector<double> massesK0;
281 std::vector<double> Masses;
303 PtErr_decor(*mainVertex) =
m_CascadeTools->pTError(moms[2],
x->getCovariance()[2]);
305 chi2_decor(*mainVertex) =
x->fitChi2();
306 ndof_decor(*mainVertex) =
x->nDoF();
310 TLorentzVector p4_mu1, p4_mu2;
317 massMumu = (p4_mu1 + p4_mu2).M();
319 MassMumu_decor(*mainVertex) = massMumu;
323 TLorentzVector p4_ka, p4_pi;
339 massKpi = (p4_ka + p4_pi).M();
341 MassKpi_svdecor(*mainVertex) = massKpi;
345 TLorentzVector p4_pip, p4_pim;
352 massPipi = (p4_pip + p4_pim).M();
354 MassPipi_sv2decor(*mainVertex) = massPipi;
356 MassJpsi_decor(*mainVertex) = (moms[2][0] + moms[2][1]).M();
357 MassPiD0_decor(*mainVertex) = (moms[2][2] + moms[2][4]).M();
358 MassPiD0K0_decor(*mainVertex) = (moms[2][2] + moms[2][4] + moms[2][3]).M();
365 Mass_svdecor(*mainVertex) =
m_CascadeTools->invariantMass(moms[1]);
366 MassErr_svdecor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
368 PtErr_svdecor(*mainVertex) =
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1]);
369 Lxy_svdecor(*mainVertex) =
m_CascadeTools->lxy(moms[1],cascadeVertices[1],cascadeVertices[2]);
370 LxyErr_svdecor(*mainVertex) =
m_CascadeTools->lxyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2]);
371 Tau_svdecor(*mainVertex) =
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2]);
372 TauErr_svdecor(*mainVertex) =
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2]);
376 Mass_sv2decor(*mainVertex) =
m_CascadeTools->invariantMass(moms[0]);
377 MassErr_sv2decor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
379 PtErr_sv2decor(*mainVertex) =
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0]);
380 Lxy_sv2decor(*mainVertex) =
m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[2]);
381 LxyErr_sv2decor(*mainVertex) =
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2]);
382 Tau_sv2decor(*mainVertex) =
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2]);
383 TauErr_sv2decor(*mainVertex) =
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2]);
387 <<
" chi2_1 " <<
m_V0Tools->chisq(cascadeVertices[0])
388 <<
" chi2_2 " <<
m_V0Tools->chisq(cascadeVertices[1])
389 <<
" chi2_3 " <<
m_V0Tools->chisq(cascadeVertices[2])
393 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[0],massesK0)
394 <<
" mass_d0 " <<
m_V0Tools->invariantMass(cascadeVertices[1],massesD0)
395 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[1],massesD0)
396 <<
" mass_J " <<
m_V0Tools->invariantMass(cascadeVertices[2],massesJpsipi)
397 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[2],massesJpsipi));
402 double Mass_B_err =
m_CascadeTools->invariantMassError(moms[2],
x->getCovariance()[2]);
403 double Mass_D0_err =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
404 double Mass_K0_err =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
405 ATH_MSG_DEBUG(
"Mass_B " << Mass_B <<
" Mass_D0 " << Mass_D0 <<
" Mass_K0 " << Mass_K0);
406 ATH_MSG_DEBUG(
"Mass_B_err " << Mass_B_err <<
" Mass_D0_err " << Mass_D0_err <<
" Mass_K0_err " << Mass_K0_err);
408 double mprob_D0 =
m_CascadeTools->massProbability(mass_d0,Mass_D0,Mass_D0_err);
409 double mprob_K0 =
m_CascadeTools->massProbability(mass_k0,Mass_K0,Mass_K0_err);
410 ATH_MSG_DEBUG(
"mprob_B " << mprob_B <<
" mprob_D0 " << mprob_D0 <<
" mprob_K0 " << mprob_K0);
414 <<
" Mass_k0 " <<
m_CascadeTools->invariantMass(moms[0],massesD0));
416 <<
" Mass_d0_err " <<
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1],massesD0)
417 <<
" Mass_k0_err " <<
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0],massesK0));
420 <<
" pt_d0 " <<
m_V0Tools->pT(cascadeVertices[1])
422 <<
" pt_k0 " <<
m_V0Tools->pT(cascadeVertices[0]));
424 <<
" ptErr_d " <<
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1])
425 <<
" ptErr_d0 " <<
m_V0Tools->pTError(cascadeVertices[1])
426 <<
" ptErr_k " <<
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0])
427 <<
" ptErr_k0 " <<
m_V0Tools->pTError(cascadeVertices[0]));
428 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]));
431 <<
" lxyErr_d " <<
m_CascadeTools->lxyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
432 <<
" lxyErr_d0 " <<
m_V0Tools->lxyError(cascadeVertices[1],cascadeVertices[2])
433 <<
" lxyErr_k " <<
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
434 <<
" lxyErr_k0 " <<
m_V0Tools->lxyError(cascadeVertices[0],cascadeVertices[2]));
436 <<
" tau_d0 " <<
m_V0Tools->tau(cascadeVertices[1],cascadeVertices[2],massesD0)
437 <<
" tau_k0 " <<
m_V0Tools->tau(cascadeVertices[0],cascadeVertices[2],massesK0));
439 <<
" tau_d " <<
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2])
440 <<
" tau_D " <<
m_CascadeTools->tau(moms[1],cascadeVertices[1],cascadeVertices[2],mass_d0)
441 <<
" tau_k " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2])
442 <<
" tau_K " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[2],mass_k0));
444 <<
" tauErr_d " <<
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
445 <<
" tauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[1],cascadeVertices[2],massesD0)
446 <<
" tauErr_k " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
447 <<
" tauErr_k0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[2],massesK0));
449 <<
" TauErr_d " <<
m_CascadeTools->tauError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2],mass_d0)
450 <<
" TauErr_d0 " <<
m_V0Tools->tauError(cascadeVertices[1],cascadeVertices[2],massesD0,mass_d0)
451 <<
" TauErr_k " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2],mass_k0)
452 <<
" TauErr_k0 " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[2],massesD0,mass_k0));
454 ATH_MSG_DEBUG(
"CascadeTools main vert wrt PV " <<
" CascadeTools SV " <<
" V0Tools SV");
456 <<
", " <<
m_CascadeTools->a0z(moms[1],cascadeVertices[1],cascadeVertices[2])
457 <<
", " <<
m_CascadeTools->a0z(moms[0],cascadeVertices[0],cascadeVertices[2])
458 <<
", " <<
m_V0Tools->a0z(cascadeVertices[1],cascadeVertices[2])
459 <<
", " <<
m_V0Tools->a0z(cascadeVertices[0],cascadeVertices[2]));
461 <<
", " <<
m_CascadeTools->a0zError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
462 <<
", " <<
m_CascadeTools->a0zError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
463 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[1],cascadeVertices[2])
464 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[0],cascadeVertices[2]));
466 <<
", " <<
m_CascadeTools->a0xy(moms[1],cascadeVertices[1],cascadeVertices[2])
467 <<
", " <<
m_CascadeTools->a0xy(moms[0],cascadeVertices[0],cascadeVertices[2])
468 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[1],cascadeVertices[2])
469 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[0],cascadeVertices[2]));
471 <<
", " <<
m_CascadeTools->a0xyError(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
472 <<
", " <<
m_CascadeTools->a0xyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
473 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[1],cascadeVertices[2])
474 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[0],cascadeVertices[2]));
476 <<
", " <<
m_CascadeTools->a0(moms[1],cascadeVertices[1],cascadeVertices[2])
477 <<
", " <<
m_CascadeTools->a0(moms[0],cascadeVertices[0],cascadeVertices[2])
478 <<
", " <<
m_V0Tools->a0(cascadeVertices[1],cascadeVertices[2])
479 <<
", " <<
m_V0Tools->a0(cascadeVertices[0],cascadeVertices[2]));
481 <<
", " <<
m_CascadeTools->a0Error(moms[1],
x->getCovariance()[1],cascadeVertices[1],cascadeVertices[2])
482 <<
", " <<
m_CascadeTools->a0Error(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[2])
483 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[1],cascadeVertices[2])
484 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[0],cascadeVertices[2]));
488 ATH_MSG_DEBUG(
"X0 " << primaryVertex->x() <<
" Y0 " << primaryVertex->y() <<
" Z0 " << primaryVertex->z());
492 ATH_MSG_DEBUG(
"Rxy0 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[0],primaryVertex) <<
" RxyErr0 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[0],primaryVertex));
493 ATH_MSG_DEBUG(
"Rxy1 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[1],primaryVertex) <<
" RxyErr1 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[1],primaryVertex));
494 ATH_MSG_DEBUG(
"Rxy2 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[2],primaryVertex) <<
" RxyErr2 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[2],primaryVertex));
495 ATH_MSG_DEBUG(
"number of covariance matrices " << (
x->getCovariance()).size());
500 for (
auto x : cascadeinfoContainer)
delete x;
502 return StatusCode::SUCCESS;