ATLAS Offline Software
Loading...
Searching...
No Matches
JpsiXPlusDisplaced.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 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"
11#include "GaudiKernel/IPartPropSvc.h"
22#include <vector>
23// dummy EventContext for AnalysisBase
25
26namespace Trk {
27 class IVertexFitter;
28 class TrkVKalVrtFitter;
30 class VxCascadeInfo;
31 class V0Tools;
32 class IExtrapolator;
33}
34namespace InDet { class VertexPointEstimator; }
35namespace DerivationFramework {
36 class CascadeTools;
37}
38
39namespace DerivationFramework {
40
41 class JpsiXPlusDisplaced : public extends<AthAlgTool, IAugmentationTool>
42 {
43 public:
44 enum V0Enum{ UNKNOWN=0, LAMBDA=1, LAMBDABAR=2, KS=3 };
45
46 struct XiCandidate {
48 const xAOD::Vertex* V0vtx = nullptr;
49 const xAOD::TrackParticle* track = nullptr;
50 double chi2NDF = 999;
51 TLorentzVector p4_V0track1;
52 TLorentzVector p4_V0track2;
53 TLorentzVector p4_disVtrack;
54 };
55
58 const xAOD::Vertex* V0vtx = nullptr;
62 double chi2NDF = 999;
63 double pt = 0;
64 };
65
67 public:
68 MesonCandidateVector(size_t num, bool orderByPt);
69 void push_back(const MesonCandidate& etac);
70 const std::vector<MesonCandidate>& vector() const;
71
72 private:
73 size_t m_num{0};
74 bool m_orderByPt{true};
75 std::vector<MesonCandidate> m_vector;
76 };
77
78 JpsiXPlusDisplaced(const std::string& type, const std::string& name, const IInterface* parent);
79 virtual ~JpsiXPlusDisplaced() = default;
80 virtual StatusCode initialize() override;
81 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;
82 virtual StatusCode addBranches(const EventContext& ctx) const override;
83
84 private:
87 std::vector<std::string> m_vertexJXHypoNames;
97 std::string m_hypoName;
98
106 std::string m_V0Hypothesis{};
111 double m_lxyV0_cut{};
117 double m_lxyDpm_cut{};
118 double m_lxyD0_cut{};
119 double m_MassLower{};
120 double m_MassUpper{};
124 double m_jxDaug1MassHypo{}; // mass hypothesis of 1st daughter from vertex JX
125 double m_jxDaug2MassHypo{}; // mass hypothesis of 2nd daughter from vertex JX
126 double m_jxDaug3MassHypo{}; // mass hypothesis of 3rd daughter from vertex JX
127 double m_jxDaug4MassHypo{}; // mass hypothesis of 4th daughter from vertex JX
130 double m_disVDaug3MassHypo{}; // mass hypothesis of 3rd daughter from displaced vertex
144 double m_massJX{};
145 double m_massJpsi{};
146 double m_massX{};
147 double m_massDisV{};
148 double m_massLd{};
149 double m_massKs{};
150 double m_massDpm{};
151 double m_massD0{};
152 double m_massJXV0{};
153 double m_massMainV{};
156 bool m_constrX{};
168 double m_chi2cut_JX{};
169 double m_chi2cut_V0{};
172 double m_chi2cut_D0{};
173 double m_chi2cut{};
174 bool m_useTRT{};
175 double m_ptTRT{};
176 double m_d0_cut{};
177 unsigned int m_maxJXCandidates{};
178 unsigned int m_maxV0Candidates{};
179 unsigned int m_maxDisVCandidates{};
180 unsigned int m_maxMainVCandidates{};
181
182 ServiceHandle<IPartPropSvc> m_partPropSvc{this, "PartPropSvc", "PartPropSvc"};
183
184 ToolHandle < Trk::TrkVKalVrtFitter > m_iVertexFitter;
185 ToolHandle < Trk::TrkV0VertexFitter > m_iV0Fitter;
186 ToolHandle < Trk::IVertexFitter > m_iGammaFitter;
187 ToolHandle < Analysis::PrimaryVertexRefitter > m_pvRefitter;
188 ToolHandle < Trk::V0Tools > m_V0Tools;
189 ToolHandle < Reco::ITrackToVertex > m_trackToVertexTool;
190 ToolHandle < Trk::ITrackSelectorTool > m_trkSelector;
191 ToolHandle < Trk::ITrackSelectorTool > m_v0TrkSelector;
192 ToolHandle < DerivationFramework::CascadeTools > m_CascadeTools;
193 ToolHandle < InDet::VertexPointEstimator > m_vertexEstimator;
194 ToolHandle < Trk::IExtrapolator > m_extrapolator;
195
196 bool m_refitPV{};
197 int m_PV_max{};
200
201 double m_mass_e{};
202 double m_mass_mu{};
203 double m_mass_pion{};
206 double m_mass_Ks{};
207 double m_mass_Xi{};
208 double m_mass_phi{};
209 double m_mass_B0{};
210 double m_mass_Dpm{};
211 double m_mass_D0{};
214
215 std::vector<double> m_massesV0_ppi;
216 std::vector<double> m_massesV0_pip;
217 std::vector<double> m_massesV0_pipi;
218
219 bool d0Pass(const xAOD::TrackParticle* track, const xAOD::Vertex* PV) const;
220 XiCandidate getXiCandidate(const xAOD::Vertex* V0vtx, const V0Enum V0, const xAOD::TrackParticle* track3) const;
221 std::unique_ptr<xAOD::Vertex> fitTracks(const xAOD::TrackParticle* track1, const xAOD::TrackParticle* track2, const xAOD::TrackParticle* track3 = nullptr) const;
222 MesonCandidate getDpmCandidate(const xAOD::Vertex* JXvtx, const xAOD::TrackParticle* extraTrk1, const xAOD::TrackParticle* extraTrk2, const xAOD::TrackParticle* extraTrk3) const;
223 MesonCandidate getD0Candidate(const xAOD::Vertex* JXvtx, const xAOD::TrackParticle* extraTrk1, const xAOD::TrackParticle* extraTrk2) const;
224 std::vector<std::pair<Trk::VxCascadeInfo*,Trk::VxCascadeInfo*> > fitMainVtx(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;
225 std::vector<std::pair<Trk::VxCascadeInfo*,Trk::VxCascadeInfo*> > fitMainVtx(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;
226 void fitV0Container(xAOD::VertexContainer* V0ContainerNew, const std::vector<const xAOD::TrackParticle*>& selectedTracks, const std::vector<const xAOD::TrackParticleContainer*>& trackCols) const;
227 template<size_t NTracks> const xAOD::Vertex* FindVertex(const xAOD::VertexContainer* cont, const xAOD::Vertex* v) const;
228 };
229}
230
231#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
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrkParticleCollection
ToolHandle< Trk::TrkVKalVrtFitter > m_iVertexFitter
ToolHandle< Trk::IVertexFitter > m_iGammaFitter
XiCandidate getXiCandidate(const xAOD::Vertex *V0vtx, const V0Enum V0, const xAOD::TrackParticle *track3) const
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 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
bool d0Pass(const xAOD::TrackParticle *track, const xAOD::Vertex *PV) const
const xAOD::Vertex * FindVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *v) const
SG::WriteHandleKey< xAOD::VertexContainer > m_v0VtxOutputKey
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
ToolHandle< DerivationFramework::CascadeTools > m_CascadeTools
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
MesonCandidate getD0Candidate(const xAOD::Vertex *JXvtx, const xAOD::TrackParticle *extraTrk1, const xAOD::TrackParticle *extraTrk2) const
void fitV0Container(xAOD::VertexContainer *V0ContainerNew, const std::vector< const xAOD::TrackParticle * > &selectedTracks, const std::vector< const xAOD::TrackParticleContainer * > &trackCols) const
std::unique_ptr< xAOD::Vertex > fitTracks(const xAOD::TrackParticle *track1, const xAOD::TrackParticle *track2, const xAOD::TrackParticle *track3=nullptr) const
MesonCandidate getDpmCandidate(const xAOD::Vertex *JXvtx, const xAOD::TrackParticle *extraTrk1, const xAOD::TrackParticle *extraTrk2, const xAOD::TrackParticle *extraTrk3) const
ToolHandle< Trk::IExtrapolator > m_extrapolator
ServiceHandle< IPartPropSvc > m_partPropSvc
ToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
ToolHandle< InDet::VertexPointEstimator > m_vertexEstimator
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".