ATLAS Offline Software
Loading...
Searching...
No Matches
JpsiXPlus2V0.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 JPSIXPLUS2V0_H
6#define JPSIXPLUS2V0_H
7
9#include "GaudiKernel/ToolHandle.h"
10#include "GaudiKernel/IPartPropSvc.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 JpsiXPlus2V0 : public extends<AthAlgTool, IAugmentationTool>
41 {
42 enum V0Enum{ UNKNOWN=0, LAMBDA=1, LAMBDABAR=2, KS=3 };
43
44 public:
45 JpsiXPlus2V0(const std::string& type, const std::string& name, const IInterface* parent);
46 virtual ~JpsiXPlus2V0() = default;
47 virtual StatusCode initialize() override;
48 StatusCode performSearch(std::vector<Trk::VxCascadeInfo*>& cascadeinfoContainer, const std::vector<std::pair<const xAOD::Vertex*,V0Enum> >& selectedV0Candidates, const EventContext& ctx) const;
49 virtual StatusCode addBranches(const EventContext& ctx) const override;
50
51 private:
54 std::vector<std::string> m_vertexJXHypoNames;
63 std::string m_hypoName;
64
66 double m_jxMassLower{};
67 double m_jxMassUpper{};
72 std::string m_V01Hypothesis{};
73 std::string m_V02Hypothesis{};
76 double m_KsMassLower{};
77 double m_KsMassUpper{};
78 double m_lxyV01_cut{};
79 double m_lxyV02_cut{};
84 double m_MassLower{};
85 double m_MassUpper{};
87 double m_jxDaug1MassHypo{}; // mass hypothesis of 1st daughter from vertex JX
88 double m_jxDaug2MassHypo{}; // mass hypothesis of 2nd daughter from vertex JX
89 double m_jxDaug3MassHypo{}; // mass hypothesis of 3rd daughter from vertex JX
90 double m_jxDaug4MassHypo{}; // mass hypothesis of 4th daughter from vertex JX
91 double m_massJX{};
92 double m_massJpsi{};
93 double m_massX{};
94 double m_massLd{};
95 double m_massKs{};
96 double m_massJXV02{};
97 double m_massMainV{};
98 bool m_constrJX{};
100 bool m_constrX{};
109 double m_chi2cut_JX{};
110 double m_chi2cut_V0{};
111 double m_chi2cut{};
112 bool m_useTRT{};
113 double m_ptTRT{};
114 double m_d0_cut{};
115 unsigned int m_maxJXCandidates{};
116 unsigned int m_maxV0Candidates{};
117 unsigned int m_maxMainVCandidates{};
118
119 ToolHandle < Trk::TrkVKalVrtFitter > m_iVertexFitter;
120 ToolHandle < Trk::TrkV0VertexFitter > m_iV0Fitter;
121 ToolHandle < Trk::IVertexFitter > m_iGammaFitter;
122 ToolHandle < Analysis::PrimaryVertexRefitter > m_pvRefitter;
123 ToolHandle < Trk::V0Tools > m_V0Tools;
124 ToolHandle < Reco::ITrackToVertex > m_trackToVertexTool;
125 ToolHandle < Trk::ITrackSelectorTool > m_v0TrkSelector;
126 ToolHandle < DerivationFramework::CascadeTools > m_CascadeTools;
127 ToolHandle < InDet::VertexPointEstimator > m_vertexEstimator;
128 ToolHandle < Trk::IExtrapolator > m_extrapolator;
129
130 ServiceHandle<IPartPropSvc> m_partPropSvc{this, "PartPropSvc", "PartPropSvc"};
131
132 bool m_refitPV{};
133 int m_PV_max{};
136
137 double m_mass_e{};
138 double m_mass_mu{};
139 double m_mass_pion{};
144 double m_mass_Ks{};
145 double m_mass_Bpm{};
146 double m_mass_phi{};
147
148 std::vector<double> m_massesV0_ppi;
149 std::vector<double> m_massesV0_pip;
150 std::vector<double> m_massesV0_pipi;
151
152 bool d0Pass(const xAOD::TrackParticle* track, const xAOD::Vertex* PV) const;
153 Trk::VxCascadeInfo* fitMainVtx(const xAOD::Vertex* JXvtx, std::vector<double>& massesJX, const xAOD::Vertex* V01vtx, const V0Enum V01, const xAOD::Vertex* V02vtx, const V0Enum V02, const std::vector<const xAOD::TrackParticleContainer*>& trackCols, const xAOD::VertexContainer* defaultPVContainer, const xAOD::VertexContainer* pvContainer) const;
154 void fitV0Container(xAOD::VertexContainer* V0ContainerNew, const std::vector<const xAOD::TrackParticle*>& selectedTracks, const std::vector<const xAOD::TrackParticleContainer*>& trackCols) const;
155 template<size_t NTracks> const xAOD::Vertex* FindVertex(const xAOD::VertexContainer* cont, const xAOD::Vertex* v) const;
156 };
157}
158
159#endif
SG::ReadHandleKey< xAOD::VertexContainer > m_pvContainerName
std::vector< std::string > m_vertexJXHypoNames
ToolHandle< DerivationFramework::CascadeTools > m_CascadeTools
JpsiXPlus2V0(const std::string &type, const std::string &name, const IInterface *parent)
ServiceHandle< IPartPropSvc > m_partPropSvc
std::vector< double > m_massesV0_pip
virtual StatusCode addBranches(const EventContext &ctx) const override
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
ToolHandle< Trk::ITrackSelectorTool > m_v0TrkSelector
std::vector< double > m_massesV0_ppi
SG::ReadHandleKey< xAOD::VertexContainer > m_VxPrimaryCandidateName
ToolHandle< Trk::IExtrapolator > m_extrapolator
ToolHandle< Trk::TrkVKalVrtFitter > m_iVertexFitter
ToolHandle< Analysis::PrimaryVertexRefitter > m_pvRefitter
ToolHandle< Trk::V0Tools > m_V0Tools
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
ToolHandle< InDet::VertexPointEstimator > m_vertexEstimator
std::vector< double > m_massesV0_pipi
ToolHandle< Trk::IVertexFitter > m_iGammaFitter
bool d0Pass(const xAOD::TrackParticle *track, const xAOD::Vertex *PV) const
SG::WriteHandleKey< xAOD::VertexContainer > m_refPVContainerName
SG::WriteHandleKeyArray< xAOD::VertexContainer > m_cascadeOutputKeys
virtual StatusCode initialize() override
ToolHandle< Trk::TrkV0VertexFitter > m_iV0Fitter
const xAOD::Vertex * FindVertex(const xAOD::VertexContainer *cont, const xAOD::Vertex *v) const
Trk::VxCascadeInfo * fitMainVtx(const xAOD::Vertex *JXvtx, std::vector< double > &massesJX, const xAOD::Vertex *V01vtx, const V0Enum V01, const xAOD::Vertex *V02vtx, const V0Enum V02, const std::vector< const xAOD::TrackParticleContainer * > &trackCols, const xAOD::VertexContainer *defaultPVContainer, const xAOD::VertexContainer *pvContainer) const
SG::WriteHandleKey< xAOD::VertexContainer > m_v0VtxOutputKey
void fitV0Container(xAOD::VertexContainer *V0ContainerNew, const std::vector< const xAOD::TrackParticle * > &selectedTracks, const std::vector< const xAOD::TrackParticleContainer * > &trackCols) const
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexJXContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrkParticleCollection
SG::ReadHandleKeyArray< xAOD::TrackParticleContainer > m_RelinkContainers
StatusCode performSearch(std::vector< Trk::VxCascadeInfo * > &cascadeinfoContainer, const std::vector< std::pair< const xAOD::Vertex *, V0Enum > > &selectedV0Candidates, const EventContext &ctx) const
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexV0ContainerKey
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.