ATLAS Offline Software
Loading...
Searching...
No Matches
TrackDepositInCaloTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef CALOTRKMUIDTOOLS_TRACKDEPOSITINCALOTOOL_H
6#define CALOTRKMUIDTOOLS_TRACKDEPOSITINCALOTOOL_H
7
8// --- Tools ---
11
12// --- Athena common ---
14#include "GaudiKernel/ITHistSvc.h"
15#include "GaudiKernel/ToolHandle.h"
18
19// --- Athena ---
24
25// --- STL ---
26#include <map>
27#include <vector>
28
29// --- Forward declarations ---
31class CaloPhiRange;
33
34class TH1F;
35class TH2F;
36
37
39// TrackDepositInCaloTool
41class TrackDepositInCaloTool : public AthAlgTool, virtual public ITrackDepositInCaloTool {
52public:
53 TrackDepositInCaloTool(const std::string& type, const std::string& name, const IInterface* pInterface);
54 virtual ~TrackDepositInCaloTool() = default;
55
56 StatusCode initialize() override;
57
64 std::vector<DepositInCalo> getDeposits(const Trk::TrackParameters* par, const CaloCellContainer* caloCellCont) const override;
65
66 std::vector<DepositInCalo> getDeposits(const xAOD::TrackParticle* tp, const CaloCellContainer* caloCellCont,
67 const CaloExtensionCollection* extensionCache) const override;
68
69 std::vector<DepositInCalo> deposits(const Trk::TrackParameters* par, const CaloCellContainer* cellContainer) const override;
81 Trk::Surface* createSurface(const CaloDetDescriptor* descr, CaloSurfaceType type) const override;
82
88 double calcEnergy(const Trk::TrackParameters* par, const Trk::ParticleHypothesis& particleHypo) const override;
89
90private:
91 std::unique_ptr<const Trk::TrackParameters> extrapolateToSolenoid(const EventContext& ctx, const Trk::TrackParameters* par,
92 bool oppositeMomentum = false) const;
93
99 static std::unique_ptr<Amg::Vector3D> extrapolateR(const Amg::Vector3D& initialPosition, double phi0, double theta0, double r) ;
104 static std::unique_ptr<Amg::Vector3D> extrapolateZ(const Amg::Vector3D& initialPosition, double phi0, double theta0, double z) ;
108 StatusCode bookHistos();
109
115 const CaloCell* getClosestCell(const CaloDetDescrManager* caloDDM,
116 const Trk::TrackParameters* par,
117 const CaloDetDescriptor* descr,
118 const CaloCellContainer* cellContainer) const;
119
120
121 static const CaloCell* getClosestCellLAr(const CaloDetDescrManager* caloDDM,
122 const Trk::TrackParameters* par,
123 const CaloDetDescriptor* descr,
124 const CaloCellContainer* caloCellCont);
125
126 const CaloCell* getClosestCellTile(const CaloDetDescrManager* caloDDM,
127 const Trk::TrackParameters* par,
128 const CaloDetDescriptor* descr,
129 const CaloCellContainer* caloCellCont) const;
130
131 std::vector<const CaloCell*> getCaloCellsForLayer(const CaloDetDescrManager* caloDDM,
132 const CaloDetDescriptor* descr,
133 const Trk::TrackParameters* parEntrance,
134 const Trk::TrackParameters* parExit,
135 const CaloCellContainer* caloCellCont) const;
136
137 std::vector<const CaloCell*> getCaloCellsForTile(const CaloDetDescrManager* caloDDM,
138 const CaloDetDescriptor* descr,
139 const Trk::TrackParameters* parEntrance,
140 const Trk::TrackParameters* parExit,
141 const CaloCellContainer* caloCellCont) const;
142
154 StatusCode getTraversedLayers(const CaloDetDescrManager* caloDDM,
155 const Trk::TrackParameters* par,
156 std::map<double, const CaloDetDescriptor*>& caloInfo,
157 std::vector<Amg::Vector3D>& extrapolations) const;
158
159 std::unique_ptr<const Trk::TrackParameters> extrapolateToEntranceOfLayer(const EventContext& ctx,
160 const Trk::TrackParameters* par,
161 const CaloDetDescriptor* descr) const;
162
163 std::unique_ptr<const Trk::TrackParameters> extrapolateToExitOfLayer(const EventContext& ctx,
164 const Trk::TrackParameters* par,
165 const CaloDetDescriptor* descr) const;
166
167 static double distance(const Amg::Vector3D& p1, const Amg::Vector3D& p2) ;
168
169 static bool isInsideDomain(double position, double domainCenter, double domainWidth, bool phiVariable = false) ;
170 static bool isInsideCell(const Amg::Vector3D& position, const CaloCell* cell) ;
171 static bool inCell(const CaloCell* cell, const Amg::Vector3D& pos) ;
172
173private:
174 // Services & Tools
176 ToolHandle<Trk::IExtrapolator> m_extrapolator{this, "ExtrapolatorHandle", ""};
177
179
180 ToolHandle<Trk::IParticleCaloExtensionTool> m_caloExtensionTool{this, "ParticleCaloExtensionTool", "",
181 "Tool to make the step-wise extrapolation"};
182 ToolHandle<Rec::IParticleCaloCellAssociationTool> m_caloCellAssociationTool{this, "ParticleCaloCellAssociationTool", ""};
183
185 this,
186 "CaloDetDescrManager",
187 "CaloDetDescrManager",
188 "SG Key for CaloDetDescrManager in the Condition Store"
189 };
190
191 // Members
192 bool m_doExtr;
193 bool m_doHist;
194
195 struct LayerMaps {
197 CaloLayerMap m_barrelLayerMap;
199 CaloLayerMap m_endCapLayerMap;
200 };
202
204
205 // Histograms
206 struct Hists {
207 StatusCode book (ITHistSvc& histSvc);
208
212
215
223
230 };
231 std::unique_ptr<Hists> m_h;
232 Hists& getHists() const;
233
234};
235
236#endif
Cached value with atomic update.
Definition of CaloDetDescrManager.
DataVector< Trk::CaloExtension > CaloExtensionCollection
#define z
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Container class for CaloCell.
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
This class provides the client interface for accessing the detector description information common to...
This is a base class for LAr and Tile Descriptors The primary goal is to speed up loops over all the ...
This class defines the phi convention for Calorimeters.
Cached value with atomic update.
Definition CachedValue.h:55
std::unique_ptr< const Trk::TrackParameters > extrapolateToEntranceOfLayer(const EventContext &ctx, const Trk::TrackParameters *par, const CaloDetDescriptor *descr) const
ToolHandle< Trk::IExtrapolator > m_extrapolator
std::unique_ptr< const Trk::TrackParameters > extrapolateToExitOfLayer(const EventContext &ctx, const Trk::TrackParameters *par, const CaloDetDescriptor *descr) const
static bool inCell(const CaloCell *cell, const Amg::Vector3D &pos)
std::vector< DepositInCalo > deposits(const Trk::TrackParameters *par, const CaloCellContainer *cellContainer) const override
std::unique_ptr< const Trk::TrackParameters > extrapolateToSolenoid(const EventContext &ctx, const Trk::TrackParameters *par, bool oppositeMomentum=false) const
std::vector< DepositInCalo > getDeposits(const Trk::TrackParameters *par, const CaloCellContainer *caloCellCont) const override
Fills the vector of DepositInCalo using TrackParameters as input.
static std::unique_ptr< Amg::Vector3D > extrapolateR(const Amg::Vector3D &initialPosition, double phi0, double theta0, double r)
Extrapolate track to cylinder surface along straight line.
TrackDepositInCaloTool(const std::string &type, const std::string &name, const IInterface *pInterface)
LayerMaps initializeDetectorInfo(const CaloDetDescrManager *caloDDM) const
std::vector< const CaloCell * > getCaloCellsForTile(const CaloDetDescrManager *caloDDM, const CaloDetDescriptor *descr, const Trk::TrackParameters *parEntrance, const Trk::TrackParameters *parExit, const CaloCellContainer *caloCellCont) const
static std::unique_ptr< Amg::Vector3D > extrapolateZ(const Amg::Vector3D &initialPosition, double phi0, double theta0, double z)
Extrapolate track to disc surface along straight line.
CxxUtils::CachedValue< LayerMaps > m_layerMaps
Trk::Surface * createSurface(const CaloDetDescriptor *descr, CaloSurfaceType type) const override
Creates a Trk::Surface for a calorimeter region that is described by CaloDetDescr.
ToolHandle< Rec::IParticleCaloCellAssociationTool > m_caloCellAssociationTool
bool m_doHist
Flag to write histograms to track performance.
ToolHandle< Trk::IParticleCaloExtensionTool > m_caloExtensionTool
virtual ~TrackDepositInCaloTool()=default
const CaloCell * getClosestCellTile(const CaloDetDescrManager *caloDDM, const Trk::TrackParameters *par, const CaloDetDescriptor *descr, const CaloCellContainer *caloCellCont) const
StatusCode getTraversedLayers(const CaloDetDescrManager *caloDDM, const Trk::TrackParameters *par, std::map< double, const CaloDetDescriptor * > &caloInfo, std::vector< Amg::Vector3D > &extrapolations) const
This function determines which calorimeter regions the tracks traverses.
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloDetDescrMgrKey
ServiceHandle< ITHistSvc > m_histSvc
std::vector< const CaloCell * > getCaloCellsForLayer(const CaloDetDescrManager *caloDDM, const CaloDetDescriptor *descr, const Trk::TrackParameters *parEntrance, const Trk::TrackParameters *parExit, const CaloCellContainer *caloCellCont) const
static double distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
StatusCode initialize() override
double calcEnergy(const Trk::TrackParameters *par, const Trk::ParticleHypothesis &particleHypo) const override
Calculate the energy using .
StatusCode bookHistos()
Create histograms and register them to HistSvc.
static const CaloCell * getClosestCellLAr(const CaloDetDescrManager *caloDDM, const Trk::TrackParameters *par, const CaloDetDescriptor *descr, const CaloCellContainer *caloCellCont)
static bool isInsideCell(const Amg::Vector3D &position, const CaloCell *cell)
const TileDetDescrManager * m_tileDDM
const CaloCell * getClosestCell(const CaloDetDescrManager *caloDDM, const Trk::TrackParameters *par, const CaloDetDescriptor *descr, const CaloCellContainer *cellContainer) const
Retrieve the CaloCell for which its center is closest to the position of the particle.
static bool isInsideDomain(double position, double domainCenter, double domainWidth, bool phiVariable=false)
bool m_doExtr
Flag to perform extrapolations using m_extrapolator.
std::unique_ptr< Hists > m_h
Abstract Base Class for tracking surfaces.
int r
Definition globals.cxx:22
Eigen::Matrix< double, 3, 1 > Vector3D
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
StatusCode book(ITHistSvc &histSvc)
CaloLayerMap m_barrelLayerMap
< std::map of distance versus descriptor for cylindrical calo regions