ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
DerivationFramework::JpsiPlusV0Cascade Class Reference

#include <JpsiPlusV0Cascade.h>

Inheritance diagram for DerivationFramework::JpsiPlusV0Cascade:
Collaboration diagram for DerivationFramework::JpsiPlusV0Cascade:

Public Member Functions

 JpsiPlusV0Cascade (const std::string &t, const std::string &n, const IInterface *p)
 
 ~JpsiPlusV0Cascade ()
 
StatusCode initialize () override
 
StatusCode performSearch (std::vector< Trk::VxCascadeInfo * > *cascadeinfoContainer) const
 
virtual StatusCode addBranches () const override
 Pass the thinning service
More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Static Public Member Functions

static const InterfaceID & interfaceID ()
 

Public Attributes

SG::ReadHandleKeyArray< xAOD::TrackParticleContainerm_RelinkContainers {this, "RelinkTracks", {}, "Track Containers if they need to be relinked through indirect use" }
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

std::string m_vertexContainerKey
 
std::string m_vertexV0ContainerKey
 
std::vector< std::string > m_cascadeOutputsKeys
 
std::string m_VxPrimaryCandidateName
 Name of primary vertex container. More...
 
double m_jpsiMassLower
 
double m_jpsiMassUpper
 
double m_V0MassLower
 
double m_V0MassUpper
 
double m_MassLower
 
double m_MassUpper
 
double m_mass_electron
 
double m_mass_muon
 
double m_mass_pion
 
double m_mass_proton
 
double m_mass_lambda
 
double m_mass_ks
 
double m_mass_jpsi
 
double m_mass_b0
 
double m_mass_lambdaB
 
int m_v0_pid
 
bool m_constrV0
 
bool m_constrJpsi
 
SG::ReadHandleKey< xAOD::EventInfom_eventInfo_key {this, "EventInfo", "EventInfo", "Input event information"}
 
ToolHandle< Trk::TrkVKalVrtFitterm_iVertexFitter
 
ToolHandle< Analysis::PrimaryVertexRefitterm_pvRefitter
 
ToolHandle< Trk::V0Toolsm_V0Tools
 
ToolHandle< DerivationFramework::CascadeToolsm_CascadeTools
 
ServiceHandle< IPartPropSvc > m_partPropSvc {this, "PartPropSvc", "PartPropSvc"}
 
int m_jpsi_trk_pdg
 
bool m_refitPV
 
Gaudi::Property< std::string > m_refPVContainerName
 
Gaudi::Property< std::string > m_jpsiTrackContainerName
 
Gaudi::Property< std::string > m_v0TrackContainerName
 
std::string m_hypoName
 name of the mass hypothesis. More...
 
int m_PV_max
 
int m_DoVertexType
 
size_t m_PV_minNTracks
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 39 of file JpsiPlusV0Cascade.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ JpsiPlusV0Cascade()

DerivationFramework::JpsiPlusV0Cascade::JpsiPlusV0Cascade ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Definition at line 368 of file JpsiPlusV0Cascade.cxx.

368  : AthAlgTool(t,n,p),
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);
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  }

◆ ~JpsiPlusV0Cascade()

DerivationFramework::JpsiPlusV0Cascade::~JpsiPlusV0Cascade ( )

Definition at line 424 of file JpsiPlusV0Cascade.cxx.

424 { }

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::JpsiPlusV0Cascade::addBranches ( ) const
overridevirtual

Pass the thinning service

Implements DerivationFramework::IAugmentationTool.

Definition at line 74 of file JpsiPlusV0Cascade.cxx.

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() );
123  BPhysPVCascadeTools helper(&(*m_CascadeTools), evt.cptr());
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 = m_jpsi_trk_pdg == 11 ? 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  }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ initialize()

StatusCode DerivationFramework::JpsiPlusV0Cascade::initialize ( )
override

Definition at line 28 of file JpsiPlusV0Cascade.cxx.

28  {
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  }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

static const InterfaceID& DerivationFramework::JpsiPlusV0Cascade::interfaceID ( )
inlinestatic

Definition at line 88 of file JpsiPlusV0Cascade.h.

88 { return IID_JpsiPlusV0Cascade;}

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ performSearch()

StatusCode DerivationFramework::JpsiPlusV0Cascade::performSearch ( std::vector< Trk::VxCascadeInfo * > *  cascadeinfoContainer) const

Definition at line 426 of file JpsiPlusV0Cascade.cxx.

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 = m_jpsi_trk_pdg == 11 ? 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  }

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_cascadeOutputsKeys

std::vector<std::string> DerivationFramework::JpsiPlusV0Cascade::m_cascadeOutputsKeys
private

Definition at line 44 of file JpsiPlusV0Cascade.h.

◆ m_CascadeTools

ToolHandle< DerivationFramework::CascadeTools > DerivationFramework::JpsiPlusV0Cascade::m_CascadeTools
private

Definition at line 72 of file JpsiPlusV0Cascade.h.

◆ m_constrJpsi

bool DerivationFramework::JpsiPlusV0Cascade::m_constrJpsi
private

Definition at line 66 of file JpsiPlusV0Cascade.h.

◆ m_constrV0

bool DerivationFramework::JpsiPlusV0Cascade::m_constrV0
private

Definition at line 65 of file JpsiPlusV0Cascade.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_DoVertexType

int DerivationFramework::JpsiPlusV0Cascade::m_DoVertexType
private

Definition at line 84 of file JpsiPlusV0Cascade.h.

◆ m_eventInfo_key

SG::ReadHandleKey<xAOD::EventInfo> DerivationFramework::JpsiPlusV0Cascade::m_eventInfo_key {this, "EventInfo", "EventInfo", "Input event information"}
private

Definition at line 68 of file JpsiPlusV0Cascade.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_hypoName

std::string DerivationFramework::JpsiPlusV0Cascade::m_hypoName
private

name of the mass hypothesis.

E.g. Jpis, Upsi, etc. Will be used as a prefix for decorations

Definition at line 80 of file JpsiPlusV0Cascade.h.

◆ m_iVertexFitter

ToolHandle< Trk::TrkVKalVrtFitter > DerivationFramework::JpsiPlusV0Cascade::m_iVertexFitter
private

Definition at line 69 of file JpsiPlusV0Cascade.h.

◆ m_jpsi_trk_pdg

int DerivationFramework::JpsiPlusV0Cascade::m_jpsi_trk_pdg
private

Definition at line 75 of file JpsiPlusV0Cascade.h.

◆ m_jpsiMassLower

double DerivationFramework::JpsiPlusV0Cascade::m_jpsiMassLower
private

Definition at line 48 of file JpsiPlusV0Cascade.h.

◆ m_jpsiMassUpper

double DerivationFramework::JpsiPlusV0Cascade::m_jpsiMassUpper
private

Definition at line 49 of file JpsiPlusV0Cascade.h.

◆ m_jpsiTrackContainerName

Gaudi::Property<std::string> DerivationFramework::JpsiPlusV0Cascade::m_jpsiTrackContainerName
private

Definition at line 78 of file JpsiPlusV0Cascade.h.

◆ m_mass_b0

double DerivationFramework::JpsiPlusV0Cascade::m_mass_b0
private

Definition at line 62 of file JpsiPlusV0Cascade.h.

◆ m_mass_electron

double DerivationFramework::JpsiPlusV0Cascade::m_mass_electron
private

Definition at line 55 of file JpsiPlusV0Cascade.h.

◆ m_mass_jpsi

double DerivationFramework::JpsiPlusV0Cascade::m_mass_jpsi
private

Definition at line 61 of file JpsiPlusV0Cascade.h.

◆ m_mass_ks

double DerivationFramework::JpsiPlusV0Cascade::m_mass_ks
private

Definition at line 60 of file JpsiPlusV0Cascade.h.

◆ m_mass_lambda

double DerivationFramework::JpsiPlusV0Cascade::m_mass_lambda
private

Definition at line 59 of file JpsiPlusV0Cascade.h.

◆ m_mass_lambdaB

double DerivationFramework::JpsiPlusV0Cascade::m_mass_lambdaB
private

Definition at line 63 of file JpsiPlusV0Cascade.h.

◆ m_mass_muon

double DerivationFramework::JpsiPlusV0Cascade::m_mass_muon
private

Definition at line 56 of file JpsiPlusV0Cascade.h.

◆ m_mass_pion

double DerivationFramework::JpsiPlusV0Cascade::m_mass_pion
private

Definition at line 57 of file JpsiPlusV0Cascade.h.

◆ m_mass_proton

double DerivationFramework::JpsiPlusV0Cascade::m_mass_proton
private

Definition at line 58 of file JpsiPlusV0Cascade.h.

◆ m_MassLower

double DerivationFramework::JpsiPlusV0Cascade::m_MassLower
private

Definition at line 52 of file JpsiPlusV0Cascade.h.

◆ m_MassUpper

double DerivationFramework::JpsiPlusV0Cascade::m_MassUpper
private

Definition at line 53 of file JpsiPlusV0Cascade.h.

◆ m_partPropSvc

ServiceHandle<IPartPropSvc> DerivationFramework::JpsiPlusV0Cascade::m_partPropSvc {this, "PartPropSvc", "PartPropSvc"}
private

Definition at line 73 of file JpsiPlusV0Cascade.h.

◆ m_PV_max

int DerivationFramework::JpsiPlusV0Cascade::m_PV_max
private

Definition at line 83 of file JpsiPlusV0Cascade.h.

◆ m_PV_minNTracks

size_t DerivationFramework::JpsiPlusV0Cascade::m_PV_minNTracks
private

Definition at line 85 of file JpsiPlusV0Cascade.h.

◆ m_pvRefitter

ToolHandle< Analysis::PrimaryVertexRefitter > DerivationFramework::JpsiPlusV0Cascade::m_pvRefitter
private

Definition at line 70 of file JpsiPlusV0Cascade.h.

◆ m_refitPV

bool DerivationFramework::JpsiPlusV0Cascade::m_refitPV
private

Definition at line 76 of file JpsiPlusV0Cascade.h.

◆ m_refPVContainerName

Gaudi::Property<std::string> DerivationFramework::JpsiPlusV0Cascade::m_refPVContainerName
private

Definition at line 77 of file JpsiPlusV0Cascade.h.

◆ m_RelinkContainers

SG::ReadHandleKeyArray<xAOD::TrackParticleContainer> DerivationFramework::JpsiPlusV0Cascade::m_RelinkContainers {this, "RelinkTracks", {}, "Track Containers if they need to be relinked through indirect use" }

Definition at line 94 of file JpsiPlusV0Cascade.h.

◆ m_v0_pid

int DerivationFramework::JpsiPlusV0Cascade::m_v0_pid
private

Definition at line 64 of file JpsiPlusV0Cascade.h.

◆ m_V0MassLower

double DerivationFramework::JpsiPlusV0Cascade::m_V0MassLower
private

Definition at line 50 of file JpsiPlusV0Cascade.h.

◆ m_V0MassUpper

double DerivationFramework::JpsiPlusV0Cascade::m_V0MassUpper
private

Definition at line 51 of file JpsiPlusV0Cascade.h.

◆ m_V0Tools

ToolHandle< Trk::V0Tools > DerivationFramework::JpsiPlusV0Cascade::m_V0Tools
private

Definition at line 71 of file JpsiPlusV0Cascade.h.

◆ m_v0TrackContainerName

Gaudi::Property<std::string> DerivationFramework::JpsiPlusV0Cascade::m_v0TrackContainerName
private

Definition at line 79 of file JpsiPlusV0Cascade.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexContainerKey

std::string DerivationFramework::JpsiPlusV0Cascade::m_vertexContainerKey
private

Definition at line 42 of file JpsiPlusV0Cascade.h.

◆ m_vertexV0ContainerKey

std::string DerivationFramework::JpsiPlusV0Cascade::m_vertexV0ContainerKey
private

Definition at line 43 of file JpsiPlusV0Cascade.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_VxPrimaryCandidateName

std::string DerivationFramework::JpsiPlusV0Cascade::m_VxPrimaryCandidateName
private

Name of primary vertex container.

Definition at line 46 of file JpsiPlusV0Cascade.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
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
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
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
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:396
test_pyathena.pt
pt
Definition: test_pyathena.py:11
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
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
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
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
DerivationFramework::JpsiPlusV0Cascade::m_mass_muon
double m_mass_muon
Definition: JpsiPlusV0Cascade.h:56
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
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
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
AthCommonDataStore
Definition: AthCommonDataStore.h:52
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
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
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
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
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
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::JpsiPlusV0Cascade::m_jpsiTrackContainerName
Gaudi::Property< std::string > m_jpsiTrackContainerName
Definition: JpsiPlusV0Cascade.h:78
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
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
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
DerivationFramework::JpsiPlusV0Cascade::m_pvRefitter
ToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
Definition: JpsiPlusV0Cascade.h:70
DerivationFramework::JpsiPlusV0Cascade::m_V0MassUpper
double m_V0MassUpper
Definition: JpsiPlusV0Cascade.h:51
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
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
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
DerivationFramework::JpsiPlusV0Cascade::m_MassUpper
double m_MassUpper
Definition: JpsiPlusV0Cascade.h:53
DerivationFramework::JpsiPlusV0Cascade::m_mass_b0
double m_mass_b0
Definition: JpsiPlusV0Cascade.h:62
DerivationFramework::JpsiPlusV0Cascade::m_mass_electron
double m_mass_electron
Definition: JpsiPlusV0Cascade.h:55
mc.mass_b
mass_b
Definition: mc.PhPy8EG_A14NNPDF23_gg4l_example.py:21
a
TList * a
Definition: liststreamerinfos.cxx:10
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
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
DerivationFramework::JpsiPlusV0Cascade::m_vertexV0ContainerKey
std::string m_vertexV0ContainerKey
Definition: JpsiPlusV0Cascade.h:43
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
DerivationFramework::JpsiPlusV0Cascade::m_refPVContainerName
Gaudi::Property< std::string > m_refPVContainerName
Definition: JpsiPlusV0Cascade.h:77
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
fitman.k
k
Definition: fitman.py:528
DerivationFramework::JpsiPlusV0Cascade::m_jpsiMassUpper
double m_jpsiMassUpper
Definition: JpsiPlusV0Cascade.h:49