Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
JpsiPlusV0Cascade.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
5 // JpsiPlusV0Cascade.cxx, (c) ATLAS Detector software
16 #include <algorithm>
18 #include "HepPDT/ParticleDataTable.hh"
21 
22 namespace DerivationFramework {
24  typedef std::vector<VertexLink> VertexLinkVector;
25  typedef std::vector<const xAOD::TrackParticle*> TrackBag;
26 
27 
29 
30  // retrieving vertex Fitter
31  if ( m_iVertexFitter.retrieve().isFailure() ) {
32  ATH_MSG_FATAL("Failed to retrieve tool " << m_iVertexFitter);
33  return StatusCode::FAILURE;
34  } else {
35  ATH_MSG_DEBUG("Retrieved tool " << m_iVertexFitter);
36  }
37 
38  // retrieving the V0 tools
39  if ( m_V0Tools.retrieve().isFailure() ) {
40  ATH_MSG_FATAL("Failed to retrieve tool " << m_V0Tools);
41  return StatusCode::FAILURE;
42  } else {
43  ATH_MSG_INFO("Retrieved tool " << m_V0Tools);
44  }
45 
46  // retrieving the Cascade tools
47  if ( m_CascadeTools.retrieve().isFailure() ) {
48  ATH_MSG_FATAL("Failed to retrieve tool " << m_CascadeTools);
49  return StatusCode::FAILURE;
50  } else {
51  ATH_MSG_INFO("Retrieved tool " << m_CascadeTools);
52  }
53 
55  ATH_CHECK( m_partPropSvc.retrieve() );
56  const HepPDT::ParticleDataTable* pdt = m_partPropSvc->PDT();
57 
58  // retrieve particle masses
68  ATH_CHECK(m_RelinkContainers.initialize());
69 
70  return StatusCode::SUCCESS;
71  }
72 
73 
75  {
76  std::vector<Trk::VxCascadeInfo*> cascadeinfoContainer;
77  constexpr int topoN = 2;
78  std::array<xAOD::VertexContainer*, topoN> Vtxwritehandles;
79  std::array<xAOD::VertexAuxContainer*, topoN> Vtxwritehandlesaux;
80  if(m_cascadeOutputsKeys.size() !=topoN) { ATH_MSG_FATAL("Incorrect number of VtxContainers"); return StatusCode::FAILURE; }
81 
82  for(int i =0; i<topoN;i++){
83  Vtxwritehandles[i] = new xAOD::VertexContainer();
84  Vtxwritehandlesaux[i] = new xAOD::VertexAuxContainer();
85  Vtxwritehandles[i]->setStore(Vtxwritehandlesaux[i]);
86  CHECK(evtStore()->record(Vtxwritehandles[i] , m_cascadeOutputsKeys[i] ));
87  CHECK(evtStore()->record(Vtxwritehandlesaux[i], m_cascadeOutputsKeys[i] + "Aux."));
88  }
89 
90  //----------------------------------------------------
91  // retrieve primary vertices
92  //----------------------------------------------------
93  const xAOD::Vertex * primaryVertex(nullptr);
94  const xAOD::VertexContainer *pvContainer(nullptr);
96  ATH_MSG_DEBUG("Found " << m_VxPrimaryCandidateName << " in StoreGate!");
97 
98  if (pvContainer->size()==0){
99  ATH_MSG_WARNING("You have no primary vertices: " << pvContainer->size());
100  return StatusCode::RECOVERABLE;
101  } else {
102  primaryVertex = (*pvContainer)[0];
103  }
104 
105  //----------------------------------------------------
106  // Try to retrieve refitted primary vertices
107  //----------------------------------------------------
108  xAOD::VertexContainer* refPvContainer = NULL;
109  xAOD::VertexAuxContainer* refPvAuxContainer = NULL;
110  if (m_refitPV) {
111  // refitted PV container does not exist. Create a new one.
112  refPvContainer = new xAOD::VertexContainer;
113  refPvAuxContainer = new xAOD::VertexAuxContainer;
114  refPvContainer->setStore(refPvAuxContainer);
115  CHECK(evtStore()->record(refPvContainer , m_refPVContainerName ));
116  CHECK(evtStore()->record(refPvAuxContainer, m_refPVContainerName + "Aux."));
117  }
118 
119  ATH_CHECK(performSearch(&cascadeinfoContainer));
120 
122  if(not evt.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_eventInfo_key.key() );
124  helper.SetMinNTracksInPV(m_PV_minNTracks);
125 
126  // Decorators for the main vertex: chi2, ndf, pt and pt error, plus the V0 vertex variables
127  SG::AuxElement::Decorator<VertexLinkVector> CascadeLinksDecor("CascadeVertexLinks");
128  SG::AuxElement::Decorator<VertexLinkVector> JpsiLinksDecor("JpsiVertexLinks");
129  SG::AuxElement::Decorator<VertexLinkVector> V0LinksDecor("V0VertexLinks");
130  SG::AuxElement::Decorator<float> chi2_decor("ChiSquared");
131  SG::AuxElement::Decorator<float> ndof_decor("NumberDoF");
132  SG::AuxElement::Decorator<float> Pt_decor("Pt");
133  SG::AuxElement::Decorator<float> PtErr_decor("PtErr");
134  SG::AuxElement::Decorator<float> Mass_svdecor("V0_mass");
135  SG::AuxElement::Decorator<float> MassErr_svdecor("V0_massErr");
136  SG::AuxElement::Decorator<float> Pt_svdecor("V0_Pt");
137  SG::AuxElement::Decorator<float> PtErr_svdecor("V0_PtErr");
138  SG::AuxElement::Decorator<float> Lxy_svdecor("V0_Lxy");
139  SG::AuxElement::Decorator<float> LxyErr_svdecor("V0_LxyErr");
140  SG::AuxElement::Decorator<float> Tau_svdecor("V0_Tau");
141  SG::AuxElement::Decorator<float> TauErr_svdecor("V0_TauErr");
142 
143  ATH_MSG_DEBUG("cascadeinfoContainer size " << cascadeinfoContainer.size());
144 
145  // Get Jpsi container and identify the input Jpsi
146  const xAOD::VertexContainer *jpsiContainer(nullptr);
147  CHECK(evtStore()->retrieve(jpsiContainer , m_vertexContainerKey ));
148  const xAOD::VertexContainer *v0Container(nullptr);
149  CHECK(evtStore()->retrieve(v0Container , m_vertexV0ContainerKey ));
150 
151  for (Trk::VxCascadeInfo* x : cascadeinfoContainer) {
152  if(x==nullptr) {
153  ATH_MSG_ERROR("cascadeinfoContainer is null");
154  //x is dereferenced if we pass this
155  return StatusCode::FAILURE;
156  }
157 
158  // the cascade fitter returns:
159  // std::vector<xAOD::Vertex*>, each xAOD::Vertex contains the refitted track parameters (perigee at the vertex position)
160  // vertices[iv] the links to the original TPs and a covariance of size 3+5*NTRK; the chi2 of the total fit
161  // is split between the cascade vertices as per track contribution
162  // std::vector< std::vector<TLorentzVector> >, each std::vector<TLorentzVector> contains the refitted momenta (TLorentzVector)
163  // momenta[iv][...] of all tracks in the corresponding vertex, including any pseudotracks (from cascade vertices)
164  // originating in this vertex; the masses are as assigned in the cascade fit
165  // std::vector<Amg::MatrixX>, the corresponding covariance matrices in momentum space
166  // covariance[iv]
167  // int nDoF, double Chi2
168  //
169  // the invariant mass, pt, lifetime etc. errors should be calculated using the covariance matrices in momentum space as these
170  // take into account the full track-track and track-vertex correlations
171  //
172  // in the case of Jpsi+V0: vertices[0] is the V0 vertex, vertices[1] is the B/Lambda_b(bar) vertex, containing the 2 Jpsi tracks.
173  // The covariance terms between the two vertices are not stored. In momentum space momenta[0] contains the 2 V0 tracks,
174  // their momenta add up to the momentum of the 3rd track in momenta[1], the first two being the Jpsi tracks
175 
176  const std::vector<xAOD::Vertex*> &cascadeVertices = x->vertices();
177  if(cascadeVertices.size()!=topoN)
178  ATH_MSG_ERROR("Incorrect number of vertices");
179  if(cascadeVertices[0] == nullptr || cascadeVertices[1] == nullptr) ATH_MSG_ERROR("Error null vertex");
180  // Keep vertices (bear in mind that they come in reverse order!)
181  for(int i =0;i<topoN;i++) Vtxwritehandles[i]->push_back(cascadeVertices[i]);
182 
183  x->setSVOwnership(false); // Prevent Container from deleting vertices
184  const auto mainVertex = cascadeVertices[1]; // this is the Bd (Bd, Lambda_b, Lambda_bbar) vertex
185  //const auto v0Vertex = cascadeVertices[0]; // this is the V0 (Kshort, Lambda, Lambdabar) vertex
186  const std::vector< std::vector<TLorentzVector> > &moms = x->getParticleMoms();
187 
188  // Set links to cascade vertices
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");
192  if(!BPhysPVCascadeTools::LinkVertices(CascadeLinksDecor, verticestoLink, Vtxwritehandles[0], cascadeVertices[1]))
193  ATH_MSG_ERROR("Error decorating with cascade vertices");
194 
195  // Identify the input Jpsi
196  const xAOD::Vertex* jpsiVertex = BPhysPVCascadeTools::FindVertex<2>(jpsiContainer, cascadeVertices[1]);
197  ATH_MSG_DEBUG("1 pt Jpsi tracks " << cascadeVertices[1]->trackParticle(0)->pt() << ", " << cascadeVertices[1]->trackParticle(1)->pt());
198  if (jpsiVertex) ATH_MSG_DEBUG("2 pt Jpsi tracks " << jpsiVertex->trackParticle(0)->pt() << ", " << jpsiVertex->trackParticle(1)->pt());
199 
200  // Identify the input V0
201  const xAOD::Vertex* v0Vertex = BPhysPVCascadeTools::FindVertex<2>(v0Container, cascadeVertices[0]);;
202  ATH_MSG_DEBUG("1 pt V0 tracks " << cascadeVertices[0]->trackParticle(0)->pt() << ", " << cascadeVertices[0]->trackParticle(1)->pt());
203  if (v0Vertex) ATH_MSG_DEBUG("2 pt V0 tracks " << v0Vertex->trackParticle(0)->pt() << ", " << v0Vertex->trackParticle(1)->pt());
204 
205  // Set links to input vertices
206  std::vector<const xAOD::Vertex*> jpsiVerticestoLink;
207  if (jpsiVertex) jpsiVerticestoLink.push_back(jpsiVertex);
208  else ATH_MSG_WARNING("Could not find linking Jpsi");
209  if(!BPhysPVCascadeTools::LinkVertices(JpsiLinksDecor, jpsiVerticestoLink, jpsiContainer, cascadeVertices[1]))
210  ATH_MSG_ERROR("Error decorating with Jpsi vertices");
211 
212  std::vector<const xAOD::Vertex*> v0VerticestoLink;
213  if (v0Vertex) v0VerticestoLink.push_back(v0Vertex);
214  else ATH_MSG_WARNING("Could not find linking V0");
215  if(!BPhysPVCascadeTools::LinkVertices(V0LinksDecor, v0VerticestoLink, v0Container, cascadeVertices[1]))
216  ATH_MSG_ERROR("Error decorating with V0 vertices");
217 
218  double mass_v0 = m_mass_ks;
219  double mass_b = m_mass_b0;
220  double mass_track = MC::isElectron(m_jpsi_trk_pdg) ? m_mass_electron : m_mass_muon;
221  std::vector<double> massesJpsi(2, mass_track);
222  std::vector<double> massesV0;
223  std::vector<double> Masses(2, mass_track);
224  if (m_v0_pid == 310) {
225  massesV0.push_back(m_mass_pion);
226  massesV0.push_back(m_mass_pion);
227  Masses.push_back(m_mass_ks);
228  } else if (m_v0_pid == 3122) {
229  massesV0.push_back(m_mass_proton);
230  massesV0.push_back(m_mass_pion);
231  Masses.push_back(m_mass_lambda);
232  mass_v0 = m_mass_lambda;
234  } else if (m_v0_pid == -3122) {
235  massesV0.push_back(m_mass_pion);
236  massesV0.push_back(m_mass_proton);
237  Masses.push_back(m_mass_lambda);
238  mass_v0 = m_mass_lambda;
240  }
241 
242  // loop over candidates -- Don't apply PV_minNTracks requirement here
243  // because it may result in exclusion of the high-pt PV.
244  // get good PVs
245 
246  xAOD::BPhysHypoHelper vtx(m_hypoName, mainVertex);
247 
249 
250 
251  // Decorate main vertex
252  //
253  // 1.a) mass, mass error
254  BPHYS_CHECK( vtx.setMass(m_CascadeTools->invariantMass(moms[1])) );
255  BPHYS_CHECK( vtx.setMassErr(m_CascadeTools->invariantMassError(moms[1],x->getCovariance()[1])) );
256  // 1.b) pt and pT error (the default pt of mainVertex is != the pt of the full cascade fit!)
257  Pt_decor(*mainVertex) = m_CascadeTools->pT(moms[1]);
258  PtErr_decor(*mainVertex) = m_CascadeTools->pTError(moms[1],x->getCovariance()[1]);
259  // 1.c) chi2 and ndof (the default chi2 of mainVertex is != the chi2 of the full cascade fit!)
260  chi2_decor(*mainVertex) = x->fitChi2();
261  ndof_decor(*mainVertex) = x->nDoF();
262 
263  ATH_CHECK(helper.FillCandwithRefittedVertices(m_refitPV, pvContainer,
264  refPvContainer, &(*m_pvRefitter), m_PV_max, m_DoVertexType, x, 1, mass_b, vtx));
265 
266  // 4) decorate the main vertex with V0 vertex mass, pt, lifetime and lxy values (plus errors)
267  // V0 points to the main vertex, so lifetime and lxy are w.r.t the main vertex
268  Mass_svdecor(*mainVertex) = m_CascadeTools->invariantMass(moms[0]);
269  MassErr_svdecor(*mainVertex) = m_CascadeTools->invariantMassError(moms[0],x->getCovariance()[0]);
270  Pt_svdecor(*mainVertex) = m_CascadeTools->pT(moms[0]);
271  PtErr_svdecor(*mainVertex) = m_CascadeTools->pTError(moms[0],x->getCovariance()[0]);
272  Lxy_svdecor(*mainVertex) = m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[1]);
273  LxyErr_svdecor(*mainVertex) = m_CascadeTools->lxyError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
274  Tau_svdecor(*mainVertex) = m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1]);
275  TauErr_svdecor(*mainVertex) = m_CascadeTools->tauError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1]);
276 
277  // Some checks in DEBUG mode
278  ATH_MSG_DEBUG("chi2 " << x->fitChi2()
279  << " chi2_1 " << m_V0Tools->chisq(cascadeVertices[0])
280  << " chi2_2 " << m_V0Tools->chisq(cascadeVertices[1])
281  << " vprob " << m_CascadeTools->vertexProbability(x->nDoF(),x->fitChi2()));
282  ATH_MSG_DEBUG("ndf " << x->nDoF() << " ndf_1 " << m_V0Tools->ndof(cascadeVertices[0]) << " ndf_2 " << m_V0Tools->ndof(cascadeVertices[1]));
283  ATH_MSG_DEBUG("V0Tools mass_v0 " << m_V0Tools->invariantMass(cascadeVertices[0],massesV0)
284  << " error " << m_V0Tools->invariantMassError(cascadeVertices[0],massesV0)
285  << " mass_J " << m_V0Tools->invariantMass(cascadeVertices[1],massesJpsi)
286  << " error " << m_V0Tools->invariantMassError(cascadeVertices[1],massesJpsi));
287  // masses and errors, using track masses assigned in the fit
288  double Mass_B = m_CascadeTools->invariantMass(moms[1]);
289  double Mass_V0 = m_CascadeTools->invariantMass(moms[0]);
290  double Mass_B_err = m_CascadeTools->invariantMassError(moms[1],x->getCovariance()[1]);
291  double Mass_V0_err = m_CascadeTools->invariantMassError(moms[0],x->getCovariance()[0]);
292  ATH_MSG_DEBUG("Mass_B " << Mass_B << " Mass_V0 " << Mass_V0);
293  ATH_MSG_DEBUG("Mass_B_err " << Mass_B_err << " Mass_V0_err " << Mass_V0_err);
294  double mprob_B = m_CascadeTools->massProbability(mass_b,Mass_B,Mass_B_err);
295  double mprob_V0 = m_CascadeTools->massProbability(mass_v0,Mass_V0,Mass_V0_err);
296  ATH_MSG_DEBUG("mprob_B " << mprob_B << " mprob_V0 " << mprob_V0);
297  // masses and errors, assigning user defined track masses
298  ATH_MSG_DEBUG("Mass_b " << m_CascadeTools->invariantMass(moms[1],Masses)
299  << " Mass_v0 " << m_CascadeTools->invariantMass(moms[0],massesV0));
300  ATH_MSG_DEBUG("Mass_b_err " << m_CascadeTools->invariantMassError(moms[1],x->getCovariance()[1],Masses)
301  << " Mass_v0_err " << m_CascadeTools->invariantMassError(moms[0],x->getCovariance()[0],massesV0));
302  ATH_MSG_DEBUG("pt_b " << m_CascadeTools->pT(moms[1])
303  << " pt_v " << m_CascadeTools->pT(moms[0])
304  << " pt_v0 " << m_V0Tools->pT(cascadeVertices[0]));
305  ATH_MSG_DEBUG("ptErr_b " << m_CascadeTools->pTError(moms[1],x->getCovariance()[1])
306  << " ptErr_v " << m_CascadeTools->pTError(moms[0],x->getCovariance()[0])
307  << " ptErr_v0 " << m_V0Tools->pTError(cascadeVertices[0]));
308  ATH_MSG_DEBUG("lxy_B " << m_V0Tools->lxy(cascadeVertices[1],primaryVertex) << " lxy_V " << m_V0Tools->lxy(cascadeVertices[0],cascadeVertices[1]));
309  ATH_MSG_DEBUG("lxy_b " << m_CascadeTools->lxy(moms[1],cascadeVertices[1],primaryVertex) << " lxy_v " << m_CascadeTools->lxy(moms[0],cascadeVertices[0],cascadeVertices[1]));
310  ATH_MSG_DEBUG("lxyErr_b " << m_CascadeTools->lxyError(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex)
311  << " lxyErr_v " << m_CascadeTools->lxyError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
312  << " lxyErr_v0 " << m_V0Tools->lxyError(cascadeVertices[0],cascadeVertices[1]));
313  ATH_MSG_DEBUG("tau_B " << m_CascadeTools->tau(moms[1],cascadeVertices[1],primaryVertex,mass_b)
314  << " tau_v0 " << m_V0Tools->tau(cascadeVertices[0],cascadeVertices[1],massesV0));
315  ATH_MSG_DEBUG("tau_b " << m_CascadeTools->tau(moms[1],cascadeVertices[1],primaryVertex)
316  << " tau_v " << m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1])
317  << " tau_V " << m_CascadeTools->tau(moms[0],cascadeVertices[0],cascadeVertices[1],mass_v0));
318  ATH_MSG_DEBUG("tauErr_b " << m_CascadeTools->tauError(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex)
319  << " tauErr_v " << m_CascadeTools->tauError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
320  << " tauErr_v0 " << m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesV0));
321  ATH_MSG_DEBUG("TauErr_b " << m_CascadeTools->tauError(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex,mass_b)
322  << " TauErr_v " << m_CascadeTools->tauError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1],mass_v0)
323  << " TauErr_v0 " << m_V0Tools->tauError(cascadeVertices[0],cascadeVertices[1],massesV0,mass_v0));
324 
325  ATH_MSG_DEBUG("CascadeTools main vert wrt PV " << " CascadeTools SV " << " V0Tools SV");
326  ATH_MSG_DEBUG("a0z " << m_CascadeTools->a0z(moms[1],cascadeVertices[1],primaryVertex)
327  << ", " << m_CascadeTools->a0z(moms[0],cascadeVertices[0],cascadeVertices[1])
328  << ", " << m_V0Tools->a0z(cascadeVertices[0],cascadeVertices[1]));
329  ATH_MSG_DEBUG("a0zErr " << m_CascadeTools->a0zError(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex)
330  << ", " << m_CascadeTools->a0zError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
331  << ", " << m_V0Tools->a0zError(cascadeVertices[0],cascadeVertices[1]));
332  ATH_MSG_DEBUG("a0xy " << m_CascadeTools->a0xy(moms[1],cascadeVertices[1],primaryVertex)
333  << ", " << m_CascadeTools->a0xy(moms[0],cascadeVertices[0],cascadeVertices[1])
334  << ", " << m_V0Tools->a0xy(cascadeVertices[0],cascadeVertices[1]));
335  ATH_MSG_DEBUG("a0xyErr " << m_CascadeTools->a0xyError(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex)
336  << ", " << m_CascadeTools->a0xyError(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
337  << ", " << m_V0Tools->a0xyError(cascadeVertices[0],cascadeVertices[1]));
338  ATH_MSG_DEBUG("a0 " << m_CascadeTools->a0(moms[1],cascadeVertices[1],primaryVertex)
339  << ", " << m_CascadeTools->a0(moms[0],cascadeVertices[0],cascadeVertices[1])
340  << ", " << m_V0Tools->a0(cascadeVertices[0],cascadeVertices[1]));
341  ATH_MSG_DEBUG("a0Err " << m_CascadeTools->a0Error(moms[1],x->getCovariance()[1],cascadeVertices[1],primaryVertex)
342  << ", " << m_CascadeTools->a0Error(moms[0],x->getCovariance()[0],cascadeVertices[0],cascadeVertices[1])
343  << ", " << m_V0Tools->a0Error(cascadeVertices[0],cascadeVertices[1]));
344  ATH_MSG_DEBUG("x0 " << m_V0Tools->vtx(cascadeVertices[0]).x() << " y0 " << m_V0Tools->vtx(cascadeVertices[0]).y() << " z0 " << m_V0Tools->vtx(cascadeVertices[0]).z());
345  ATH_MSG_DEBUG("x1 " << m_V0Tools->vtx(cascadeVertices[1]).x() << " y1 " << m_V0Tools->vtx(cascadeVertices[1]).y() << " z1 " << m_V0Tools->vtx(cascadeVertices[1]).z());
346  ATH_MSG_DEBUG("X0 " << primaryVertex->x() << " Y0 " << primaryVertex->y() << " Z0 " << primaryVertex->z());
347  ATH_MSG_DEBUG("rxy0 " << m_V0Tools->rxy(cascadeVertices[0]) << " rxyErr0 " << m_V0Tools->rxyError(cascadeVertices[0]));
348  ATH_MSG_DEBUG("rxy1 " << m_V0Tools->rxy(cascadeVertices[1]) << " rxyErr1 " << m_V0Tools->rxyError(cascadeVertices[1]));
349  ATH_MSG_DEBUG("Rxy0 wrt PV " << m_V0Tools->rxy(cascadeVertices[0],primaryVertex) << " RxyErr0 wrt PV " << m_V0Tools->rxyError(cascadeVertices[0],primaryVertex));
350  ATH_MSG_DEBUG("Rxy1 wrt PV " << m_V0Tools->rxy(cascadeVertices[1],primaryVertex) << " RxyErr1 wrt PV " << m_V0Tools->rxyError(cascadeVertices[1],primaryVertex));
351  ATH_MSG_DEBUG("number of covariance matrices " << (x->getCovariance()).size());
352  //const Amg::MatrixX& cov30 = (cascadeVertices[0])->covariancePosition();
353  //const Amg::MatrixX& cov31 = (cascadeVertices[1])->covariancePosition();
354  //ATH_MSG_DEBUG("cov30 " << cov30);
355  //ATH_MSG_DEBUG("cov31 " << cov31);
356 
357 
358  } // loop over cascadeinfoContainer
359 
360  // Deleting cascadeinfo since this won't be stored.
361  // Vertices have been kept in m_cascadeOutputs and should be owned by their container
362  for (auto x : cascadeinfoContainer) delete x;
363 
364  return StatusCode::SUCCESS;
365  }
366 
367 
368  JpsiPlusV0Cascade::JpsiPlusV0Cascade(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t,n,p),
369  m_vertexContainerKey(""),
370  m_vertexV0ContainerKey(""),
371  m_cascadeOutputsKeys{ "JpsiPlusV0CascadeVtx1", "JpsiPlusV0CascadeVtx2" },
372  m_VxPrimaryCandidateName("PrimaryVertices"),
373  m_jpsiMassLower(0.0),
374  m_jpsiMassUpper(10000.0),
375  m_V0MassLower(0.0),
376  m_V0MassUpper(10000.0),
377  m_MassLower(0.0),
378  m_MassUpper(20000.0),
379  m_mass_electron( 0 ),
380  m_mass_muon ( 0 ),
381  m_mass_pion ( 0 ),
382  m_mass_proton ( 0 ),
383  m_mass_lambda ( 0 ),
384  m_mass_ks ( 0 ),
385  m_mass_jpsi ( 0 ),
386  m_mass_b0 ( 0 ),
387  m_mass_lambdaB( 0 ),
388  m_v0_pid(310),
389  m_constrV0(true),
390  m_constrJpsi(true),
391  m_iVertexFitter("Trk::TrkVKalVrtFitter"),
392  m_pvRefitter("Analysis::PrimaryVertexRefitter", this),
393  m_V0Tools("Trk::V0Tools"),
394  m_CascadeTools("DerivationFramework::CascadeTools")
395  {
396  declareProperty("JpsiVertices", m_vertexContainerKey);
397  declareProperty("V0Vertices", m_vertexV0ContainerKey);
398  declareProperty("VxPrimaryCandidateName", m_VxPrimaryCandidateName);
399  declareProperty("RefPVContainerName", m_refPVContainerName = "RefittedPrimaryVertices");
400  declareProperty("JpsiTrackContainerName", m_jpsiTrackContainerName = "InDetTrackParticles");
401  declareProperty("V0TrackContainerName", m_v0TrackContainerName = "InDetTrackParticles");
402  declareProperty("JpsiMassLowerCut", m_jpsiMassLower);
403  declareProperty("JpsiMassUpperCut", m_jpsiMassUpper);
404  declareProperty("V0MassLowerCut", m_V0MassLower);
405  declareProperty("V0MassUpperCut", m_V0MassUpper);
406  declareProperty("MassLowerCut", m_MassLower);
407  declareProperty("MassUpperCut", m_MassUpper);
408  declareProperty("HypothesisName", m_hypoName = "Bd");
409  declareProperty("V0Hypothesis", m_v0_pid);
410  declareProperty("ApplyV0MassConstraint", m_constrV0);
411  declareProperty("ApplyJpsiMassConstraint", m_constrJpsi);
412  declareProperty("JpsiTrackPDGID", m_jpsi_trk_pdg = 13);
413  declareProperty("RefitPV", m_refitPV = true);
414  declareProperty("MaxnPV", m_PV_max = 999);
415  declareProperty("MinNTracksInPV", m_PV_minNTracks = 0);
416  declareProperty("DoVertexType", m_DoVertexType = 7);
417  declareProperty("TrkVertexFitterTool", m_iVertexFitter);
418  declareProperty("PVRefitter", m_pvRefitter);
419  declareProperty("V0Tools", m_V0Tools);
420  declareProperty("CascadeTools", m_CascadeTools);
421  declareProperty("CascadeVertexCollections", m_cascadeOutputsKeys);
422  }
423 
425 
426  StatusCode JpsiPlusV0Cascade::performSearch(std::vector<Trk::VxCascadeInfo*> *cascadeinfoContainer) const
427  {
428  ATH_MSG_DEBUG( "JpsiPlusV0Cascade::performSearch" );
429  assert(cascadeinfoContainer!=nullptr);
430 
431  // Get TrackParticle containers (for setting links to the original tracks)
432  const xAOD::TrackParticleContainer *jpsiTrackContainer(nullptr);
433  CHECK(evtStore()->retrieve(jpsiTrackContainer , m_jpsiTrackContainerName ));
434  const xAOD::TrackParticleContainer *v0TrackContainer(nullptr);
435  CHECK(evtStore()->retrieve(v0TrackContainer , m_v0TrackContainerName ));
436 
437  // Get Jpsi container
438  const xAOD::VertexContainer *jpsiContainer(nullptr);
439  CHECK(evtStore()->retrieve(jpsiContainer , m_vertexContainerKey ));
440 
441  // Get V0 container
442  const xAOD::VertexContainer *v0Container(nullptr);
443  CHECK(evtStore()->retrieve(v0Container , m_vertexV0ContainerKey ));
444 
445  double mass_v0 = m_mass_ks;
446  double mass_tracks = MC::isElectron(m_jpsi_trk_pdg) ? m_mass_electron : m_mass_muon;
447  std::vector<const xAOD::TrackParticle*> tracksJpsi;
448  std::vector<const xAOD::TrackParticle*> tracksV0;
449  std::vector<double> massesJpsi(2, mass_tracks);
450  std::vector<double> massesV0;
451  std::vector<double> Masses(2, mass_tracks);
452  if (m_v0_pid == 310) {
453  massesV0.push_back(m_mass_pion);
454  massesV0.push_back(m_mass_pion);
455  Masses.push_back(m_mass_ks);
456  } else if (m_v0_pid == 3122) {
457  massesV0.push_back(m_mass_proton);
458  massesV0.push_back(m_mass_pion);
459  mass_v0 = m_mass_lambda;
460  Masses.push_back(m_mass_lambda);
461  } else if (m_v0_pid == -3122) {
462  massesV0.push_back(m_mass_pion);
463  massesV0.push_back(m_mass_proton);
464  mass_v0 = m_mass_lambda;
465  Masses.push_back(m_mass_lambda);
466  }
467  const EventContext& ctx = Gaudi::Hive::currentContext();
468  std::vector<const xAOD::TrackParticleContainer*> trackCols;
469  for(const auto &str : m_RelinkContainers){
471  trackCols.push_back(handle.cptr());
472  }
473 
474 
475  for(auto jpsi : *jpsiContainer) { //Iterate over Jpsi vertices
476 
477  size_t jpsiTrkNum = jpsi->nTrackParticles();
478  tracksJpsi.clear();
479  for( unsigned int it=0; it<jpsiTrkNum; it++) tracksJpsi.push_back(jpsi->trackParticle(it));
480 
481  if (tracksJpsi.size() != 2 || massesJpsi.size() != 2 ) {
482  ATH_MSG_INFO("problems with Jpsi input");
483  }
484  double mass_Jpsi = m_V0Tools->invariantMass(jpsi,massesJpsi);
485  ATH_MSG_DEBUG("Jpsi mass " << mass_Jpsi);
486  if (mass_Jpsi < m_jpsiMassLower || mass_Jpsi > m_jpsiMassUpper) {
487  ATH_MSG_DEBUG(" Original Jpsi candidate rejected by the mass cut: mass = "
488  << mass_Jpsi << " != (" << m_jpsiMassLower << ", " << m_jpsiMassUpper << ")" );
489  continue;
490  }
491 
492  for(auto v0 : *v0Container) { //Iterate over V0 vertices
493 
494  size_t v0TrkNum = v0->nTrackParticles();
495  tracksV0.clear();
496  for( unsigned int it=0; it<v0TrkNum; it++) tracksV0.push_back(v0->trackParticle(it));
497  if (tracksV0.size() != 2 || massesV0.size() != 2 ) {
498  ATH_MSG_INFO("problems with V0 input");
499  }
500  double mass_V0 = m_V0Tools->invariantMass(v0,massesV0);
501  ATH_MSG_DEBUG("V0 mass " << mass_V0);
502  if (mass_V0 < m_V0MassLower || mass_V0 > m_V0MassUpper) {
503  ATH_MSG_DEBUG(" Original V0 candidate rejected by the mass cut: mass = "
504  << mass_V0 << " != (" << m_V0MassLower << ", " << m_V0MassUpper << ")" );
505  continue;
506  }
507  ATH_MSG_DEBUG("using tracks" << tracksJpsi[0] << ", " << tracksJpsi[1] << ", " << tracksV0[0] << ", " << tracksV0[1]);
508  if(!BPhysPVCascadeTools::uniqueCollection(tracksJpsi, tracksV0)) continue;
509 
510 
511  //if (std::find(trackContainer->begin(), trackContainer->end(), tracksJpsi[0]) == trackContainer->end()) {
512  // ATH_MSG_ERROR("Track is not in standard container");
513  //} else {
514  // ATH_MSG_DEBUG("Track " << tracksJpsi[0] << " is at position " << std::distance(trackContainer->begin(), std::find(trackContainer->begin(), trackContainer->end(), tracksJpsi[0])) );
515  //}
516  //ATH_MSG_DEBUG("using tracks " << tracksJpsi[0] << ", " << tracksJpsi[1] << ", " << tracksV0[0] << ", " << tracksV0[1]);
517 
518  // Apply the user's settings to the fitter
519  // Reset
520  std::unique_ptr<Trk::IVKalState> state = m_iVertexFitter->makeState();
521  // Robustness
522  int robustness = 0;
523  m_iVertexFitter->setRobustness(robustness, *state);
524  // Build up the topology
525  // Vertex list
526  std::vector<Trk::VertexID> vrtList;
527  // V0 vertex
528  Trk::VertexID vID;
529  if (m_constrV0) {
530  vID = m_iVertexFitter->startVertex(tracksV0,massesV0,*state, mass_v0);
531  } else {
532  vID = m_iVertexFitter->startVertex(tracksV0,massesV0, *state);
533  }
534  vrtList.push_back(vID);
535  // B vertex including Jpsi
536  Trk::VertexID vID2 = m_iVertexFitter->nextVertex(tracksJpsi,massesJpsi,vrtList, *state);
537  if (m_constrJpsi) {
538  std::vector<Trk::VertexID> cnstV;
539  cnstV.clear();
540  if ( !m_iVertexFitter->addMassConstraint(vID2,tracksJpsi,cnstV,*state, m_mass_jpsi).isSuccess() ) {
541  ATH_MSG_WARNING("addMassConstraint failed");
542  //return StatusCode::FAILURE;
543  }
544  }
545  // Do the work
546  std::unique_ptr<Trk::VxCascadeInfo> result(m_iVertexFitter->fitCascade(*state));
547 
548  if (result != NULL) {
549  // reset links to original tracks
550  if(trackCols.empty()) BPhysPVCascadeTools::PrepareVertexLinks(result.get(), v0TrackContainer);
551  else BPhysPVCascadeTools::PrepareVertexLinks(result.get(), trackCols);
552 
553  ATH_MSG_DEBUG("storing tracks " << ((result->vertices())[0])->trackParticle(0) << ", "
554  << ((result->vertices())[0])->trackParticle(1) << ", "
555  << ((result->vertices())[1])->trackParticle(0) << ", "
556  << ((result->vertices())[1])->trackParticle(1));
557 
558  // necessary to prevent memory leak
559  result->setSVOwnership(true);
560  const std::vector< std::vector<TLorentzVector> > &moms = result->getParticleMoms();
561  if(moms.size() < 2){
562  ATH_MSG_FATAL("Incorrect size " << __FILE__ << __LINE__ );
563  return StatusCode::FAILURE;
564  }
565  double mass = m_CascadeTools->invariantMass(moms[1]);
566  if (mass >= m_MassLower && mass <= m_MassUpper) {
567 
568  cascadeinfoContainer->push_back(result.release());
569  } else {
570  ATH_MSG_DEBUG("Candidate rejected by the mass cut: mass = "
571  << mass << " != (" << m_MassLower << ", " << m_MassUpper << ")" );
572  }
573  }
574 
575  } //Iterate over V0 vertices
576 
577  } //Iterate over Jpsi vertices
578 
579  ATH_MSG_DEBUG("cascadeinfoContainer size " << cascadeinfoContainer->size());
580 
581  return StatusCode::SUCCESS;
582  }
583 
584 
585 
586 }
587 
588 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::BPhysHypoHelper::setMass
bool setMass(const float val)
Set given invariant mass and its error.
Definition: BPhysHypoHelper.cxx:52
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
xAOD::Vertex_v1::x
float x() const
Returns the x position.
V0Tools.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DerivationFramework::JpsiPlusV0Cascade::~JpsiPlusV0Cascade
~JpsiPlusV0Cascade()
Definition: JpsiPlusV0Cascade.cxx:424
get_generator_info.result
result
Definition: get_generator_info.py:21
xAOD::VertexAuxContainer_v1
Temporary container used until we have I/O for AuxStoreInternal.
Definition: VertexAuxContainer_v1.h:32
Trk::VxCascadeInfo
Definition: VxCascadeInfo.h:75
Trk::VertexID
int VertexID
Definition: IVertexCascadeFitter.h:23
DerivationFramework::JpsiPlusV0Cascade::m_jpsiMassLower
double m_jpsiMassLower
Definition: JpsiPlusV0Cascade.h:48
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
DerivationFramework::JpsiPlusV0Cascade::m_iVertexFitter
ToolHandle< Trk::TrkVKalVrtFitter > m_iVertexFitter
Definition: JpsiPlusV0Cascade.h:69
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
DerivationFramework::BPhysPVCascadeTools::LinkVertices
static bool LinkVertices(SG::AuxElement::Decorator< VertexLinkVector > &decor, const std::vector< const xAOD::Vertex * > &vertices, const xAOD::VertexContainer *vertexContainer, const xAOD::Vertex *vert)
Definition: BPhysPVCascadeTools.cxx:460
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
DerivationFramework::JpsiPlusV0Cascade::m_PV_minNTracks
size_t m_PV_minNTracks
Definition: JpsiPlusV0Cascade.h:85
DerivationFramework::JpsiPlusV0Cascade::m_MassLower
double m_MassLower
Definition: JpsiPlusV0Cascade.h:52
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
DerivationFramework::JpsiPlusV0Cascade::m_mass_lambda
double m_mass_lambda
Definition: JpsiPlusV0Cascade.h:59
DerivationFramework::BPhysPVCascadeTools::getParticleMass
static double getParticleMass(const HepPDT::ParticleDataTable *pdt, int pdg)
Definition: BPhysPVCascadeTools.cxx:491
DerivationFramework::JpsiPlusV0Cascade::m_PV_max
int m_PV_max
Definition: JpsiPlusV0Cascade.h:83
skel.it
it
Definition: skel.GENtoEVGEN.py:407
test_pyathena.pt
pt
Definition: test_pyathena.py:11
DerivationFramework::JpsiPlusV0Cascade::m_v0_pid
int m_v0_pid
Definition: JpsiPlusV0Cascade.h:64
DerivationFramework::JpsiPlusV0Cascade::m_mass_lambdaB
double m_mass_lambdaB
Definition: JpsiPlusV0Cascade.h:63
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
DerivationFramework::JpsiPlusV0Cascade::m_mass_ks
double m_mass_ks
Definition: JpsiPlusV0Cascade.h:60
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
DerivationFramework::JpsiPlusV0Cascade::m_constrV0
bool m_constrV0
Definition: JpsiPlusV0Cascade.h:65
xAOD::VertexContainer
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Definition: VertexContainer.h:14
x
#define x
DerivationFramework::JpsiPlusV0Cascade::m_DoVertexType
int m_DoVertexType
Definition: JpsiPlusV0Cascade.h:84
DerivationFramework::JpsiPlusV0Cascade::m_cascadeOutputsKeys
std::vector< std::string > m_cascadeOutputsKeys
Definition: JpsiPlusV0Cascade.h:44
DerivationFramework::JpsiPlusV0Cascade::m_CascadeTools
ToolHandle< DerivationFramework::CascadeTools > m_CascadeTools
Definition: JpsiPlusV0Cascade.h:72
TrkVKalVrtFitter.h
DerivationFramework::JpsiPlusV0Cascade::m_mass_pion
double m_mass_pion
Definition: JpsiPlusV0Cascade.h:57
DerivationFramework::JpsiPlusV0Cascade::m_jpsi_trk_pdg
int m_jpsi_trk_pdg
Definition: JpsiPlusV0Cascade.h:75
DerivationFramework::JpsiPlusV0Cascade::m_mass_muon
double m_mass_muon
Definition: JpsiPlusV0Cascade.h:56
DerivationFramework::JpsiPlusV0Cascade::initialize
StatusCode initialize() override
Definition: JpsiPlusV0Cascade.cxx:28
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
DerivationFramework::JpsiPlusV0Cascade::m_constrJpsi
bool m_constrJpsi
Definition: JpsiPlusV0Cascade.h:66
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
JpsiPlusV0Cascade.h
xAOD::BPhysHypoHelper
Definition: BPhysHypoHelper.h:73
DerivationFramework::BPhysPVCascadeTools::SetVectorInfo
static void SetVectorInfo(xAOD::BPhysHelper &, const Trk::VxCascadeInfo *)
Definition: BPhysPVCascadeTools.cxx:424
BPHYS_CHECK
#define BPHYS_CHECK(EXP)
Useful CHECK macro.
Definition: BPhysHelper.h:738
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
DerivationFramework::JpsiPlusV0Cascade::m_mass_jpsi
double m_mass_jpsi
Definition: JpsiPlusV0Cascade.h:61
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:59
xAOD::VertexAuxContainer
VertexAuxContainer_v1 VertexAuxContainer
Definition of the current jet auxiliary container.
Definition: VertexAuxContainer.h:19
parseMapping.v0
def v0
Definition: parseMapping.py:149
lumiFormat.i
int i
Definition: lumiFormat.py:85
DerivationFramework::JpsiPlusV0Cascade::m_VxPrimaryCandidateName
std::string m_VxPrimaryCandidateName
Name of primary vertex container.
Definition: JpsiPlusV0Cascade.h:46
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
BPhysHypoHelper.h
: B-physics xAOD helpers.
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
DerivationFramework::JpsiPlusV0Cascade::m_partPropSvc
ServiceHandle< IPartPropSvc > m_partPropSvc
Definition: JpsiPlusV0Cascade.h:73
DerivationFramework::JpsiPlusV0Cascade::m_v0TrackContainerName
Gaudi::Property< std::string > m_v0TrackContainerName
Definition: JpsiPlusV0Cascade.h:79
DerivationFramework::BPhysPVCascadeTools::PrepareVertexLinks
static void PrepareVertexLinks(Trk::VxCascadeInfo *result, const xAOD::TrackParticleContainer *importedTrackCollection)
Definition: BPhysPVCascadeTools.cxx:204
DerivationFramework::JpsiPlusV0Cascade::addBranches
virtual StatusCode addBranches() const override
Pass the thinning service
Definition: JpsiPlusV0Cascade.cxx:74
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DerivationFramework::JpsiPlusV0Cascade::m_refitPV
bool m_refitPV
Definition: JpsiPlusV0Cascade.h:76
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
DerivationFramework::BPhysPVCascadeTools::uniqueCollection
static bool uniqueCollection(const std::vector< const xAOD::TrackParticle * > &)
Definition: BPhysPVCascadeTools.cxx:443
xAOD::Vertex_v1::trackParticle
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
Definition: Vertex_v1.cxx:249
DerivationFramework::TrackBag
std::vector< const xAOD::TrackParticle * > TrackBag
Definition: BPhysAddMuonBasedInvMass.h:32
xAOD::Vertex_v1::z
float z() const
Returns the z position.
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DerivationFramework::VertexLink
ElementLink< xAOD::VertexContainer > VertexLink
Definition: Cascade3Plus1.cxx:23
DerivationFramework::JpsiPlusV0Cascade::m_jpsiTrackContainerName
Gaudi::Property< std::string > m_jpsiTrackContainerName
Definition: JpsiPlusV0Cascade.h:78
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
BPhysPVCascadeTools.h
DerivationFramework::JpsiPlusV0Cascade::m_vertexContainerKey
std::string m_vertexContainerKey
Definition: JpsiPlusV0Cascade.h:42
DerivationFramework::JpsiPlusV0Cascade::m_V0Tools
ToolHandle< Trk::V0Tools > m_V0Tools
Definition: JpsiPlusV0Cascade.h:71
DerivationFramework::JpsiPlusV0Cascade::m_pvRefitter
ToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
Definition: JpsiPlusV0Cascade.h:70
DerivationFramework::JpsiPlusV0Cascade::m_V0MassUpper
double m_V0MassUpper
Definition: JpsiPlusV0Cascade.h:51
DerivationFramework::JpsiPlusV0Cascade::m_eventInfo_key
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Definition: JpsiPlusV0Cascade.h:68
DerivationFramework::JpsiPlusV0Cascade::m_mass_proton
double m_mass_proton
Definition: JpsiPlusV0Cascade.h:58
DerivationFramework::JpsiPlusV0Cascade::m_MassUpper
double m_MassUpper
Definition: JpsiPlusV0Cascade.h:53
DerivationFramework::BPhysPVCascadeTools
Definition: BPhysPVCascadeTools.h:34
DerivationFramework::JpsiPlusV0Cascade::m_mass_b0
double m_mass_b0
Definition: JpsiPlusV0Cascade.h:62
CascadeTools.h
DerivationFramework::JpsiPlusV0Cascade::m_mass_electron
double m_mass_electron
Definition: JpsiPlusV0Cascade.h:55
IVertexFitter.h
EventInfo.h
VxCascadeInfo.h
mc.mass_b
mass_b
Definition: mc.PhPy8EG_A14NNPDF23_gg4l_example.py:21
DerivationFramework::VertexLinkVector
std::vector< VertexLink > VertexLinkVector
Definition: Cascade3Plus1.cxx:24
VertexContainer.h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
DerivationFramework::JpsiPlusV0Cascade::m_RelinkContainers
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_RelinkContainers
Definition: JpsiPlusV0Cascade.h:94
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DerivationFramework::JpsiPlusV0Cascade::m_hypoName
std::string m_hypoName
name of the mass hypothesis.
Definition: JpsiPlusV0Cascade.h:80
DerivationFramework::JpsiPlusV0Cascade::performSearch
StatusCode performSearch(std::vector< Trk::VxCascadeInfo * > *cascadeinfoContainer) const
Definition: JpsiPlusV0Cascade.cxx:426
DerivationFramework::JpsiPlusV0Cascade::m_V0MassLower
double m_V0MassLower
Definition: JpsiPlusV0Cascade.h:50
xAOD::Vertex_v1::y
float y() const
Returns the y position.
DerivationFramework::JpsiPlusV0Cascade::m_vertexV0ContainerKey
std::string m_vertexV0ContainerKey
Definition: JpsiPlusV0Cascade.h:43
str
Definition: BTagTrackIpAccessor.cxx:11
DerivationFramework::JpsiPlusV0Cascade::JpsiPlusV0Cascade
JpsiPlusV0Cascade(const std::string &t, const std::string &n, const IInterface *p)
Definition: JpsiPlusV0Cascade.cxx:368
AthAlgTool
Definition: AthAlgTool.h:26
DerivationFramework::JpsiPlusV0Cascade::m_refPVContainerName
Gaudi::Property< std::string > m_refPVContainerName
Definition: JpsiPlusV0Cascade.h:77
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
HepMCHelpers.h
xAOD::BPhysHypoHelper::setMassErr
bool setMassErr(const float val)
invariant mass error
Definition: BPhysHypoHelper.cxx:57
VertexAuxContainer.h
DerivationFramework::JpsiPlusV0Cascade::m_jpsiMassUpper
double m_jpsiMassUpper
Definition: JpsiPlusV0Cascade.h:49