66 {
67 std::vector<Trk::VxCascadeInfo*> cascadeinfoContainer;
68 constexpr int topoN = 2;
69 std::array<xAOD::VertexContainer*, topoN> Vtxwritehandles;
70 std::array<xAOD::VertexAuxContainer*, topoN> Vtxwritehandlesaux;
72
73 for(
int i =0;
i<topoN;
i++){
76 Vtxwritehandles[
i]->setStore(Vtxwritehandlesaux[i]);
79 }
80
81
82
83
88
89 if (pvContainer->
size()==0){
91 return StatusCode::RECOVERABLE;
92 } else {
93 primaryVertex = (*pvContainer)[0];
94 }
95
96
97
98
103
106 } else {
107
110 refPvContainer->setStore(refPvAuxContainer);
113 }
114 }
115
117
122
123
124 SG::AuxElement::Decorator<VertexLinkVector> CascadeLinksDecor("CascadeVertexLinks");
125 SG::AuxElement::Decorator<VertexLinkVector> JpsiLinksDecor("JpsiVertexLinks");
126 SG::AuxElement::Decorator<VertexLinkVector> DxLinksDecor("DxVertexLinks");
127 SG::AuxElement::Decorator<float> chi2_decor("ChiSquared");
128 SG::AuxElement::Decorator<float> ndof_decor("NumberDoF");
129 SG::AuxElement::Decorator<float> Pt_decor("Pt");
130 SG::AuxElement::Decorator<float> PtErr_decor("PtErr");
131 SG::AuxElement::Decorator<float> Mass_svdecor("Dx_mass");
132 SG::AuxElement::Decorator<float> MassErr_svdecor("Dx_massErr");
133 SG::AuxElement::Decorator<float> Pt_svdecor("Dx_Pt");
134 SG::AuxElement::Decorator<float> PtErr_svdecor("Dx_PtErr");
135 SG::AuxElement::Decorator<float> Lxy_svdecor("Dx_Lxy");
136 SG::AuxElement::Decorator<float> LxyErr_svdecor("Dx_LxyErr");
137 SG::AuxElement::Decorator<float> Tau_svdecor("Dx_Tau");
138 SG::AuxElement::Decorator<float> TauErr_svdecor("Dx_TauErr");
139
140 SG::AuxElement::Decorator<float> MassMumu_decor("Mumu_mass");
141 SG::AuxElement::Decorator<float> MassKX_svdecor("KX_mass");
142 SG::AuxElement::Decorator<float> MassKXpi_svdecor("KXpi_mass");
143
144 ATH_MSG_DEBUG(
"cascadeinfoContainer size " << cascadeinfoContainer.size());
145
146
151
152 for (Trk::VxCascadeInfo*
x : cascadeinfoContainer) {
155
156 return StatusCode::FAILURE;
157 }
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177 const std::vector<xAOD::Vertex*> &cascadeVertices =
x->vertices();
178 if(cascadeVertices.size()!=topoN)
180 if(cascadeVertices[0] ==
nullptr || cascadeVertices[1] ==
nullptr)
ATH_MSG_ERROR(
"Error null vertex");
181
182 for(
int i =0;
i<topoN;
i++) Vtxwritehandles[i]->
push_back(cascadeVertices[i]);
183
184 x->setSVOwnership(
false);
185 const auto mainVertex = cascadeVertices[1];
186 const std::vector< std::vector<TLorentzVector> > &moms =
x->getParticleMoms();
187
188
189 std::vector<const xAOD::Vertex*> verticestoLink;
190 verticestoLink.push_back(cascadeVertices[0]);
191 if(Vtxwritehandles[1] ==
nullptr)
ATH_MSG_ERROR(
"Vtxwritehandles[1] is null");
194
195
197 ATH_MSG_DEBUG(
"1 pt Jpsi tracks " << cascadeVertices[1]->trackParticle(0)->
pt() <<
", " << cascadeVertices[1]->trackParticle(1)->
pt());
199
200
202 ATH_MSG_DEBUG(
"1 pt D_(s)+ tracks " << cascadeVertices[0]->trackParticle(0)->
pt() <<
", " << cascadeVertices[0]->trackParticle(1)->
pt() <<
", " << cascadeVertices[0]->trackParticle(2)->
pt());
204
205
206 std::vector<const xAOD::Vertex*> jpsiVerticestoLink;
207 if (jpsiVertex) jpsiVerticestoLink.push_back(jpsiVertex);
211
212 std::vector<const xAOD::Vertex*> dxVerticestoLink;
213 if (dxVertex) dxVerticestoLink.push_back(dxVertex);
217
218 bool tagDp(true);
219 if (dxVertex) {
221 }
222
225 std::vector<double> massesJpsi;
228 std::vector<double> massesDx;
229 if(tagDp){
232 }else{
235 }
237 std::vector<double> Masses;
241
242
243
244
245
246
247 xAOD::BPhysHypoHelper vtx(
m_hypoName, mainVertex);
248
249
251
252
253
254
257
259 PtErr_decor(*mainVertex) =
m_CascadeTools->pTError(moms[1],
x->getCovariance()[1]);
260
261 chi2_decor(*mainVertex) =
x->fitChi2();
262 ndof_decor(*mainVertex) =
x->nDoF();
263
264 float massMumu = 0.;
265 if (jpsiVertex) {
266 TLorentzVector p4_mu1, p4_mu2;
273 massMumu = (p4_mu1 + p4_mu2).M();
274 }
275 MassMumu_decor(*mainVertex) = massMumu;
276
277 float massKX = 0., massKXpi = 0.;
278 if (dxVertex) {
279 TLorentzVector p4_h1, p4_h2, p4_h3;
280 if(tagDp){
287 }else{
294 }
298 massKX = (p4_h1 + p4_h2).M();
299 massKXpi = (p4_h1 + p4_h2 + p4_h3).M();
300 }
301 MassKX_svdecor(*mainVertex) = massKX;
302 MassKXpi_svdecor(*mainVertex) = massKXpi;
303
306
307
308
309
310 Mass_svdecor(*mainVertex) =
m_CascadeTools->invariantMass(moms[0]);
311 MassErr_svdecor(*mainVertex) =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
313 PtErr_svdecor(*mainVertex) =
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0]);
314 Lxy_svdecor(*mainVertex) =
m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[1]);
315 LxyErr_svdecor(*mainVertex) =
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
316 Tau_svdecor(*mainVertex) =
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1]);
317 TauErr_svdecor(*mainVertex) =
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
318
319
321 <<
" chi2_1 " <<
m_V0Tools->chisq(cascadeVertices[0])
322 <<
" chi2_2 " <<
m_V0Tools->chisq(cascadeVertices[1])
326 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[0],massesDx)
327 <<
" mass_J " <<
m_V0Tools->invariantMass(cascadeVertices[1],massesJpsi)
328 <<
" error " <<
m_V0Tools->invariantMassError(cascadeVertices[1],massesJpsi));
329
332 double Mass_B_err =
m_CascadeTools->invariantMassError(moms[1],
x->getCovariance()[1]);
333 double Mass_D_err =
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0]);
335 ATH_MSG_DEBUG(
"Mass_B_err " << Mass_B_err <<
" Mass_D_err " << Mass_D_err);
336 double mprob_B =
m_CascadeTools->massProbability(mass_b,Mass_B,Mass_B_err);
337 double mprob_D =
m_CascadeTools->massProbability(mass_d,Mass_D,Mass_D_err);
338 ATH_MSG_DEBUG(
"mprob_B " << mprob_B <<
" mprob_D " << mprob_D);
339
341 <<
" Mass_d " <<
m_CascadeTools->invariantMass(moms[0],massesDx));
343 <<
" Mass_d_err " <<
m_CascadeTools->invariantMassError(moms[0],
x->getCovariance()[0],massesDx));
346 <<
" pt_dp " <<
m_V0Tools->pT(cascadeVertices[0]));
348 <<
" ptErr_d " <<
m_CascadeTools->pTError(moms[0],
x->getCovariance()[0])
349 <<
" ptErr_dp " <<
m_V0Tools->pTError(cascadeVertices[0]));
353 <<
" lxyErr_d " <<
m_CascadeTools->lxyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
354 <<
" lxyErr_dp " <<
m_V0Tools->lxyError(cascadeVertices[0],cascadeVertices[1]));
356 <<
" tau_dp " <<
m_V0Tools->tau(cascadeVertices[0],cascadeVertices[1],massesDx));
358 <<
" tau_d " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1])
359 <<
" tau_D " <<
m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1],mass_d));
361 <<
" tauErr_d " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
362 <<
" tauErr_dp " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesDx));
364 <<
" TauErr_d " <<
m_CascadeTools->tauError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1],mass_d)
365 <<
" TauErr_dp " <<
m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesDx,mass_d));
366
367 ATH_MSG_DEBUG(
"CascadeTools main vert wrt PV " <<
" CascadeTools SV " <<
" V0Tools SV");
369 <<
", " <<
m_CascadeTools->a0z(moms[0],cascadeVertices[0],cascadeVertices[1])
370 <<
", " <<
m_V0Tools->a0z(cascadeVertices[0],cascadeVertices[1]));
372 <<
", " <<
m_CascadeTools->a0zError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
373 <<
", " <<
m_V0Tools->a0zError(cascadeVertices[0],cascadeVertices[1]));
375 <<
", " <<
m_CascadeTools->a0xy(moms[0],cascadeVertices[0],cascadeVertices[1])
376 <<
", " <<
m_V0Tools->a0xy(cascadeVertices[0],cascadeVertices[1]));
378 <<
", " <<
m_CascadeTools->a0xyError(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
379 <<
", " <<
m_V0Tools->a0xyError(cascadeVertices[0],cascadeVertices[1]));
381 <<
", " <<
m_CascadeTools->a0(moms[0],cascadeVertices[0],cascadeVertices[1])
382 <<
", " <<
m_V0Tools->a0(cascadeVertices[0],cascadeVertices[1]));
384 <<
", " <<
m_CascadeTools->a0Error(moms[0],
x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
385 <<
", " <<
m_V0Tools->a0Error(cascadeVertices[0],cascadeVertices[1]));
388 ATH_MSG_DEBUG(
"X0 " << primaryVertex->
x() <<
" Y0 " << primaryVertex->
y() <<
" Z0 " << primaryVertex->
z());
391 ATH_MSG_DEBUG(
"Rxy0 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[0],primaryVertex) <<
" RxyErr0 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[0],primaryVertex));
392 ATH_MSG_DEBUG(
"Rxy1 wrt PV " <<
m_V0Tools->rxy(cascadeVertices[1],primaryVertex) <<
" RxyErr1 wrt PV " <<
m_V0Tools->rxyError(cascadeVertices[1],primaryVertex));
393 ATH_MSG_DEBUG(
"number of covariance matrices " << (
x->getCovariance()).size());
394 }
395
396
397
398 for (
auto x : cascadeinfoContainer)
delete x;
399
400 return StatusCode::SUCCESS;
401 }
#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.
StatusCode performSearch(std::vector< Trk::VxCascadeInfo * > *cascadeinfoContainer, const EventContext &ctx) const
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
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.