ATLAS Offline Software
Loading...
Searching...
No Matches
StripSpacePointFormationToolBase.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ACTSTRK_DATAPREPARATION_STRIPSPACEPOINTFORMATIONTOOLBASE_H
6#define ACTSTRK_DATAPREPARATION_STRIPSPACEPOINTFORMATIONTOOLBASE_H
7
16
17#include <string>
18
19class SCT_ID;
20
21namespace ActsTrk {
22
37
38 class StripSpacePointFormationToolBase : public extends<AthAlgTool, ActsTrk::IStripSpacePointFormationTool> {
39 public:
41
42 using base_class::base_class;
44 virtual StatusCode initialize() override;
46
48
49 virtual StatusCode produceSpacePoints(const EventContext& ctx,
50 const xAOD::StripClusterContainer& clusterContainer,
51 const InDet::SiElementPropertiesTable& properties,
53 const Amg::Vector3D& beamSpotVertex,
54 std::vector<StripSP>& spacePoints,
55 std::vector<StripSP>& overlapSpacePoints,
56 bool processOverlaps,
57 const std::vector<IdentifierHash>& hashesToProcess,
58 const ContainerAccessor<xAOD::StripCluster, IdentifierHash, 1>& stripAccessor ) const override;
60
61 protected:
62
73 virtual StatusCode makeStripSpacePoint(std::vector<StripSP>& collection,
74 const StripInformationHelper& firstInfo,
75 const StripInformationHelper& secondInfo,
76 const Amg::Vector3D& beamSpotVertex,
77 bool isEndcap,
78 double limit,
79 double slimit) const = 0;
80
83 static StripSP makeStripSP(const Eigen::Matrix<double, 3, 1>& globalPosition,
84 const StripInformationHelper& firstInfo,
85 const StripInformationHelper& secondInfo,
86 bool isEndcap);
87
89
90 const SCT_ID* m_stripId{};
92
94
95 Gaudi::Property< bool > m_allClusters{this, "AllClusters", false, "Process all clusters without limits."};
96 Gaudi::Property<bool> m_isITk {this, "isITk", true, "True if running in ITk"};
98
100
101 Gaudi::Property< float > m_stripLengthTolerance{this, "StripLengthTolerance", 0.01};
102 Gaudi::Property< float > m_stripGapParameter{this, "StripGapParameter", 0.0015, "Recommend 0.001 - 0.0015 for ITK geometry"};
104
105 private:
106
108
109 StatusCode
110 fillStripSpacePoints(const std::array<const InDetDD::SiDetectorElement*,nNeighbours>& neighbourElements,
111 const std::array<std::vector<std::pair<const xAOD::StripCluster*, size_t>>,nNeighbours>& neighbourClusters,
112 const std::array<double, 14>& overlapExtents,
113 const Amg::Vector3D& beamSpotVertex,
114 std::vector<StripSP>& spacePoints,
115 std::vector<StripSP>& overlapSpacePoints ) const;
116
117 void updateRange(const InDetDD::SiDetectorElement* element1,
118 const InDetDD::SiDetectorElement* element2,
119 double& stripLengthGapTolerance, double& min, double& max) const;
120
121 double offset(const InDetDD::SiDetectorElement* element1,
122 const InDetDD::SiDetectorElement* element2,
123 double& stripLengthGapTolerance) const;
124
126 double& min, double& max,
127 size_t& minStrip, size_t& maxStrip) const;
128
129 std::pair<Amg::Vector3D, Amg::Vector3D > getStripEnds(const xAOD::StripCluster* cluster,
130 const InDetDD::SiDetectorElement* element,
131 size_t& stripIndex) const;
133
135
136
137 ToolHandle<ISiLorentzAngleTool> m_lorentzAngleTool{this, "LorentzAngleTool", "",
138 "Tool to retreive Lorentz angle of SCT"};
139
140
146
147 Gaudi::Property< float > m_overlapLimitOpposite{this, "OverlapLimitOpposite", 2.8, "Overlap limit for opposite-neighbour."};
148 Gaudi::Property< float > m_overlapLimitPhi{this, "OverlapLimitPhi", 5.64, "Overlap limit for phi-neighbours."};
149 Gaudi::Property< float > m_overlapLimitEtaMin{this, "OverlapLimitEtaMin", 1.68, "Low overlap limit for eta-neighbours."};
150 Gaudi::Property< float > m_overlapLimitEtaMax{this, "OverlapLimitEtaMax", 3.0, "High overlap limit for eta-neighbours."};
151 Gaudi::Property< bool > m_useSCTLayerDep_OverlapCuts{this,"useSCTLayerDep_OverlapCuts", true};
153
154 };
155
156}
157
158#endif
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
Common machinery for producing strip space points.
virtual StatusCode produceSpacePoints(const EventContext &ctx, const xAOD::StripClusterContainer &clusterContainer, const InDet::SiElementPropertiesTable &properties, const InDetDD::SiDetectorElementCollection &elements, const Amg::Vector3D &beamSpotVertex, std::vector< StripSP > &spacePoints, std::vector< StripSP > &overlapSpacePoints, bool processOverlaps, const std::vector< IdentifierHash > &hashesToProcess, const ContainerAccessor< xAOD::StripCluster, IdentifierHash, 1 > &stripAccessor) const override
static StripSP makeStripSP(const Eigen::Matrix< double, 3, 1 > &globalPosition, const StripInformationHelper &firstInfo, const StripInformationHelper &secondInfo, bool isEndcap)
Fill the StripSP payload that is common to all implementations, i.e.
virtual ~StripSpacePointFormationToolBase()=default
virtual StatusCode makeStripSpacePoint(std::vector< StripSP > &collection, const StripInformationHelper &firstInfo, const StripInformationHelper &secondInfo, const Amg::Vector3D &beamSpotVertex, bool isEndcap, double limit, double slimit) const =0
Compute the space point position for a compatible pair of strips and, if it satisfies the geometrical...
void correctPolarRange(const InDetDD::SiDetectorElement *element, double &min, double &max, size_t &minStrip, size_t &maxStrip) const
std::pair< Amg::Vector3D, Amg::Vector3D > getStripEnds(const xAOD::StripCluster *cluster, const InDetDD::SiDetectorElement *element, size_t &stripIndex) const
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleTool
Using Lorentz angle tool.
StatusCode fillStripSpacePoints(const std::array< const InDetDD::SiDetectorElement *, nNeighbours > &neighbourElements, const std::array< std::vector< std::pair< const xAOD::StripCluster *, size_t > >, nNeighbours > &neighbourClusters, const std::array< double, 14 > &overlapExtents, const Amg::Vector3D &beamSpotVertex, std::vector< StripSP > &spacePoints, std::vector< StripSP > &overlapSpacePoints) const
void updateRange(const InDetDD::SiDetectorElement *element1, const InDetDD::SiDetectorElement *element2, double &stripLengthGapTolerance, double &min, double &max) const
double offset(const InDetDD::SiDetectorElement *element1, const InDetDD::SiDetectorElement *element2, double &stripLengthGapTolerance) const
Class implementing how to access a container.
Class to hold the SiDetectorElement objects to be put in the detector store.
Class to hold geometrical description of a silicon detector element.
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Eigen::Matrix< double, 3, 1 > Vector3D
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
StripClusterContainer_v1 StripClusterContainer
Define the version of the strip cluster container.