ATLAS Offline Software
Loading...
Searching...
No Matches
JpsiXPlusDisplaced.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3 Contact: Xin Chen <xin.chen@cern.ch>
4*/
5#ifndef JPSIXPLUSDISPLACED_H
6#define JPSIXPLUSDISPLACED_H
7
9#include "GaudiKernel/ToolHandle.h"
10#include "GaudiKernel/ServiceHandle.h"
21#include <vector>
22// dummy EventContext for AnalysisBase
24
25namespace Trk {
26 class IVertexFitter;
27 class TrkVKalVrtFitter;
29 class VxCascadeInfo;
30 class V0Tools;
31 class IExtrapolator;
32}
33namespace InDet { class VertexPointEstimator; }
34namespace DerivationFramework {
35 class CascadeTools;
36}
37
38namespace DerivationFramework {
39
40 class JpsiXPlusDisplaced : public extends<AthAlgTool, IAugmentationTool>
41 {
42 public:
43 enum V0Enum{ UNKNOWN=0, LAMBDA=1, LAMBDABAR=2, KS=3 };
44
45 struct XiCandidate {
47 const xAOD::Vertex* V0vtx = nullptr;
48 const xAOD::TrackParticle* track = nullptr;
49 double chi2NDF = 999;
50 TLorentzVector p4_V0track1;
51 TLorentzVector p4_V0track2;
52 TLorentzVector p4_disVtrack;
53 };
54
57 const xAOD::Vertex* V0vtx = nullptr;
61 double chi2NDF = 999;
62 double pt = 0;
63 };
64
66 public:
67 MesonCandidateVector(size_t num, bool orderByPt);
68 void push_back(const MesonCandidate& etac);
69 const std::vector<MesonCandidate>& vector() const;
70
71 private:
72 size_t m_num{0};
73 bool m_orderByPt{true};
74 std::vector<MesonCandidate> m_vector;
75 };
76
77 JpsiXPlusDisplaced(const std::string& type, const std::string& name, const IInterface* parent);
78 virtual ~JpsiXPlusDisplaced() = default;
79 virtual StatusCode initialize() override;
80 StatusCode performSearch(std::vector<std::pair<Trk::VxCascadeInfo*,Trk::VxCascadeInfo*> >& cascadeinfoContainer, const std::vector<std::pair<const xAOD::Vertex*,V0Enum> >& selectedV0Candidates, const std::vector<const xAOD::TrackParticle*>& tracksDisplaced, const EventContext& ctx) const;
81 virtual StatusCode addBranches(const EventContext& ctx) const override;
82
83 private:
86 std::vector<std::string> m_vertexJXHypoNames;
96 std::string m_hypoName;
97
99 double m_jxMassLower{};
105 std::string m_V0Hypothesis{};
110 double m_lxyV0_cut{};
116 double m_lxyDpm_cut{};
117 double m_lxyD0_cut{};
118 double m_MassLower{};
119 double m_MassUpper{};
123 double m_jxDaug1MassHypo{}; // mass hypothesis of 1st daughter from vertex JX
124 double m_jxDaug2MassHypo{}; // mass hypothesis of 2nd daughter from vertex JX
125 double m_jxDaug3MassHypo{}; // mass hypothesis of 3rd daughter from vertex JX
126 double m_jxDaug4MassHypo{}; // mass hypothesis of 4th daughter from vertex JX
129 double m_disVDaug3MassHypo{}; // mass hypothesis of 3rd daughter from displaced vertex
143 double m_massJX{};
144 double m_massJpsi{};
145 double m_massX{};
146 double m_massDisV{};
147 double m_massLd{};
148 double m_massKs{};
149 double m_massDpm{};
150 double m_massD0{};
151 double m_massJXV0{};
152 double m_massMainV{};
155 bool m_constrX{};
167 double m_chi2cut_JX{};
168 double m_chi2cut_V0{};
171 double m_chi2cut_D0{};
172 double m_chi2cut{};
173 bool m_useTRT{};
174 double m_ptTRT{};
175 double m_d0_cut{};
176 unsigned int m_maxJXCandidates{};
177 unsigned int m_maxV0Candidates{};
178 unsigned int m_maxDisVCandidates{};
179 unsigned int m_maxMainVCandidates{};
180
181 ToolHandle < Trk::TrkVKalVrtFitter > m_iVertexFitter;
182 ToolHandle < Trk::TrkV0VertexFitter > m_iV0Fitter;
183 ToolHandle < Trk::IVertexFitter > m_iGammaFitter;
184 PublicToolHandle < Analysis::PrimaryVertexRefitter > m_pvRefitter;
185 PublicToolHandle < Trk::V0Tools > m_V0Tools;
186 ToolHandle < Reco::ITrackToVertex > m_trackToVertexTool;
187 ToolHandle < Trk::ITrackSelectorTool > m_trkSelector;
188 ToolHandle < Trk::ITrackSelectorTool > m_v0TrkSelector;
189 PublicToolHandle < DerivationFramework::CascadeTools > m_CascadeTools;
190 ToolHandle < InDet::VertexPointEstimator > m_vertexEstimator;
191 ToolHandle < Trk::IExtrapolator > m_extrapolator;
192
193 bool m_refitPV{};
194 int m_PV_max{};
197
198 double m_mass_e{};
199 double m_mass_mu{};
200 double m_mass_pion{};
203 double m_mass_Ks{};
204 double m_mass_Xi{};
205 double m_mass_phi{};
206 double m_mass_B0{};
207 double m_mass_Dpm{};
208 double m_mass_D0{};
211
212 std::vector<double> m_massesV0_ppi;
213 std::vector<double> m_massesV0_pip;
214 std::vector<double> m_massesV0_pipi;
215
216 bool d0Pass(const EventContext& ctx, const xAOD::TrackParticle* track, const xAOD::Vertex* PV) const;
217 XiCandidate getXiCandidate(const EventContext& ctx, const xAOD::Vertex* V0vtx, const V0Enum V0, const xAOD::TrackParticle* track3) const;
218 std::unique_ptr<xAOD::Vertex> fitTracks(const EventContext& ctx, const xAOD::TrackParticle* track1, const xAOD::TrackParticle* track2, const xAOD::TrackParticle* track3 = nullptr) const;
219 MesonCandidate getDpmCandidate(const EventContext& ctx, const xAOD::Vertex* JXvtx, const xAOD::TrackParticle* extraTrk1, const xAOD::TrackParticle* extraTrk2, const xAOD::TrackParticle* extraTrk3) const;
220 MesonCandidate getD0Candidate(const EventContext& ctx, const xAOD::Vertex* JXvtx, const xAOD::TrackParticle* extraTrk1, const xAOD::TrackParticle* extraTrk2) const;
221 std::vector<std::pair<Trk::VxCascadeInfo*,Trk::VxCascadeInfo*> > fitMainVtx(const EventContext& ctx, const xAOD::Vertex* JXvtx, const std::vector<double>& massesJX, const xAOD::Vertex* V0vtx, const V0Enum V0, const xAOD::TrackParticleContainer* trackContainer, const std::vector<const xAOD::TrackParticleContainer*>& trackCols, const xAOD::VertexContainer* defaultPVContainer, const xAOD::VertexContainer* pvContainer) const;
222 std::vector<std::pair<Trk::VxCascadeInfo*,Trk::VxCascadeInfo*> > fitMainVtx(const EventContext& ctx, const xAOD::Vertex* JXvtx, const std::vector<double>& massesJX, const XiCandidate& disVtx, const xAOD::TrackParticleContainer* trackContainer, const std::vector<const xAOD::TrackParticleContainer*>& trackCols, const xAOD::VertexContainer* defaultPVContainer, const xAOD::VertexContainer* pvContainer) const;
223 void fitV0Container(const EventContext& ctx, xAOD::VertexContainer* V0ContainerNew, const std::vector<const xAOD::TrackParticle*>& selectedTracks, const std::vector<const xAOD::TrackParticleContainer*>& trackCols) const;
224 template<size_t NTracks> const xAOD::Vertex* FindVertex(const xAOD::VertexContainer* cont, const xAOD::Vertex* v) const;
225 };
226}
227
228#endif
const std::vector< MesonCandidate > & vector() const
ToolHandle< Trk::ITrackSelectorTool > m_trkSelector
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
ToolHandle< Trk::TrkV0VertexFitter > m_iV0Fitter
SG::WriteHandleKeyArray< xAOD::VertexContainer > m_cascadeOutputKeys
MesonCandidate getD0Candidate(const EventContext &ctx, const xAOD::Vertex *JXvtx, const xAOD::TrackParticle *extraTrk1, const xAOD::TrackParticle *extraTrk2) const
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrkParticleCollection
ToolHandle< Trk::TrkVKalVrtFitter > m_iVertexFitter
ToolHandle< Trk::IVertexFitter > m_iGammaFitter
PublicToolHandle< DerivationFramework::CascadeTools > m_CascadeTools
JpsiXPlusDisplaced(const std::string &type, const std::string &name, const IInterface *parent)
std::vector< std::string > m_vertexJXHypoNames
std::vector< std::pair< Trk::VxCascadeInfo *, Trk::VxCascadeInfo * > > fitMainVtx(const EventContext &ctx, const xAOD::Vertex *JXvtx, const std::vector< double > &massesJX, const xAOD::Vertex *V0vtx, const V0Enum V0, const xAOD::TrackParticleContainer *trackContainer, const std::vector< const xAOD::TrackParticleContainer * > &trackCols, const xAOD::VertexContainer *defaultPVContainer, const xAOD::VertexContainer *pvContainer) const
SG::WriteHandleKeyArray< xAOD::VertexContainer > m_cascadeOutputKeys_mvc
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_RelinkContainers
SG::WriteHandleKey< xAOD::VertexContainer > m_refPVContainerName
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexV0ContainerKey
MesonCandidate getDpmCandidate(const EventContext &ctx, const xAOD::Vertex *JXvtx, const xAOD::TrackParticle *extraTrk1, const xAOD::TrackParticle *extraTrk2, const xAOD::TrackParticle *extraTrk3) const
const xAOD::Vertex * FindVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *v) const
XiCandidate getXiCandidate(const EventContext &ctx, const xAOD::Vertex *V0vtx, const V0Enum V0, const xAOD::TrackParticle *track3) const
SG::WriteHandleKey< xAOD::VertexContainer > m_v0VtxOutputKey
void fitV0Container(const EventContext &ctx, xAOD::VertexContainer *V0ContainerNew, const std::vector< const xAOD::TrackParticle * > &selectedTracks, const std::vector< const xAOD::TrackParticleContainer * > &trackCols) const
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexJXContainerKey
virtual StatusCode addBranches(const EventContext &ctx) const override
SG::ReadHandleKey< xAOD::VertexContainer > m_VxPrimaryCandidateName
ToolHandle< Trk::ITrackSelectorTool > m_v0TrkSelector
PublicToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
bool d0Pass(const EventContext &ctx, const xAOD::TrackParticle *track, const xAOD::Vertex *PV) const
SG::ReadHandleKey< xAOD::VertexContainer > m_pvContainerName
StatusCode performSearch(std::vector< std::pair< Trk::VxCascadeInfo *, Trk::VxCascadeInfo * > > &cascadeinfoContainer, const std::vector< std::pair< const xAOD::Vertex *, V0Enum > > &selectedV0Candidates, const std::vector< const xAOD::TrackParticle * > &tracksDisplaced, const EventContext &ctx) const
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
ToolHandle< Trk::IExtrapolator > m_extrapolator
ToolHandle< InDet::VertexPointEstimator > m_vertexEstimator
std::unique_ptr< xAOD::Vertex > fitTracks(const EventContext &ctx, const xAOD::TrackParticle *track1, const xAOD::TrackParticle *track2, const xAOD::TrackParticle *track3=nullptr) const
PublicToolHandle< Trk::V0Tools > m_V0Tools
Some helper tools like: hits counter.
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
Interface class for the extrapolation AlgTool, it inherits from IAlgTool Detailed information about p...
Interface class for vertex fitting AlgTools, for more detailed information, take a look at the header...
THE reconstruction tool.
Primary Vertex Finder.
HandleKeyArray< ReadHandle< T >, ReadHandleKey< T >, Gaudi::DataHandle::Reader > ReadHandleKeyArray
HandleKeyArray< WriteHandle< T >, WriteHandleKey< T >, Gaudi::DataHandle::Writer > WriteHandleKeyArray
Ensure that the ATLAS eigen extensions are properly loaded.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".