ATLAS Offline Software
Loading...
Searching...
No Matches
StripSpacePointFormationTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ACTSTRK_DATAPREPARATION_STRIPSPACEPOINTFORMATIONTOOL_H
6#define ACTSTRK_DATAPREPARATION_STRIPSPACEPOINTFORMATIONTOOL_H
7
16
17#include <string>
18
19class SCT_ID;
20
21namespace ActsTrk {
22
33
34 class StripSpacePointFormationTool: public extends<AthAlgTool, ActsTrk::IStripSpacePointFormationTool> {
35 public:
37
38 StripSpacePointFormationTool(const std::string& type,
39 const std::string& name,
40 const IInterface* parent);
41 virtual ~StripSpacePointFormationTool() = default;
42 virtual StatusCode initialize() override;
44
46
47 virtual StatusCode produceSpacePoints(const EventContext& ctx,
48 const xAOD::StripClusterContainer& clusterContainer,
49 const InDet::SiElementPropertiesTable& properties,
51 const Amg::Vector3D& beamSpotVertex,
52 std::vector<StripSP>& spacePoints,
53 std::vector<StripSP>& overlapSpacePoints,
54 bool processOverlaps,
55 const std::vector<IdentifierHash>& hashesToProcess,
56 const ContainerAccessor<xAOD::StripCluster, IdentifierHash, 1>& stripAccessor ) const override;
58
59 private:
60
62
63 StatusCode
64 fillStripSpacePoints(const std::array<const InDetDD::SiDetectorElement*,nNeighbours>& neighbourElements,
65 const std::array<std::vector<std::pair<const xAOD::StripCluster*, size_t>>,nNeighbours>& neighbourClusters,
66 const std::array<double, 14>& overlapExtents,
67 const Amg::Vector3D& beamSpotVertex,
68 std::vector<StripSP>& spacePoints,
69 std::vector<StripSP>& overlapSpacePoints ) const;
70
71 StatusCode makeStripSpacePoint(std::vector<StripSP>&,
72 const StripInformationHelper& firstInfo,
73 const StripInformationHelper& secondInfo,
74 bool isEndcap,
75 double limit,
76 double slimit) const;
77
78 void updateRange(const InDetDD::SiDetectorElement* element1,
79 const InDetDD::SiDetectorElement* element2,
80 double& stripLengthGapTolerance, double& min, double& max) const;
81
82 double offset(const InDetDD::SiDetectorElement* element1,
83 const InDetDD::SiDetectorElement* element2,
84 double& stripLengthGapTolerance) const;
85
87 double& min, double& max,
88 size_t& minStrip, size_t& maxStrip) const;
89
90 std::pair<Amg::Vector3D, Amg::Vector3D > getStripEnds(const xAOD::StripCluster* cluster,
91 const InDetDD::SiDetectorElement* element,
92 size_t& stripIndex) const;
94
96
97 const SCT_ID* m_stripId{};
99
101
102
103 ToolHandle<ISiLorentzAngleTool> m_lorentzAngleTool{this, "LorentzAngleTool", "",
104 "Tool to retreive Lorentz angle of SCT"};
105
106
108
109 Gaudi::Property< bool > m_allClusters{this, "AllClusters", false, "Process all clusters without limits."};
110 Gaudi::Property< bool > m_useTopSp{this, "useTopSp", false, "SP global position is for second strip module."};
111 Gaudi::Property<bool> m_isITk {this, "isITk", true, "True if running in ITk"};
113
119
120 Gaudi::Property< float > m_overlapLimitOpposite{this, "OverlapLimitOpposite", 2.8, "Overlap limit for opposite-neighbour."};
121 Gaudi::Property< float > m_overlapLimitPhi{this, "OverlapLimitPhi", 5.64, "Overlap limit for phi-neighbours."};
122 Gaudi::Property< float > m_overlapLimitEtaMin{this, "OverlapLimitEtaMin", 1.68, "Low overlap limit for eta-neighbours."};
123 Gaudi::Property< float > m_overlapLimitEtaMax{this, "OverlapLimitEtaMax", 3.0, "High overlap limit for eta-neighbours."};
125 Gaudi::Property< float > m_stripLengthTolerance{this, "StripLengthTolerance", 0.01};
126 Gaudi::Property< float > m_stripGapParameter{this, "StripGapParameter", 0.0015, "Recommend 0.001 - 0.0015 for ITK geometry"};
127 Gaudi::Property< bool > m_useSCTLayerDep_OverlapCuts{this,"useSCTLayerDep_OverlapCuts", true};
129 Gaudi::Property< bool > m_useBeamSpotConstraint{this, "useBeamSpotConstraint", true, "Reject space points which are not compatible with a particle originating from the beamspot"};
131
132 };
133
134}
135
136#endif
#define min(a, b)
Definition cfImp.cxx:40
#define max(a, b)
Definition cfImp.cxx:41
virtual ~StripSpacePointFormationTool()=default
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
void correctPolarRange(const InDetDD::SiDetectorElement *element, double &min, double &max, size_t &minStrip, size_t &maxStrip) const
StatusCode makeStripSpacePoint(std::vector< StripSP > &, const StripInformationHelper &firstInfo, const StripInformationHelper &secondInfo, bool isEndcap, double limit, double slimit) 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
Gaudi::Property< float > m_stripLengthTolerance
The following are parameters to build the space points.
StripSpacePointFormationTool(const std::string &type, const std::string &name, const IInterface *parent)
std::pair< Amg::Vector3D, Amg::Vector3D > getStripEnds(const xAOD::StripCluster *cluster, const InDetDD::SiDetectorElement *element, size_t &stripIndex) const
Gaudi::Property< bool > m_useBeamSpotConstraint
For applying geometric cuts on SPs using beamspot constraint.
double offset(const InDetDD::SiDetectorElement *element1, const InDetDD::SiDetectorElement *element2, double &stripLengthGapTolerance) const
void updateRange(const InDetDD::SiDetectorElement *element1, const InDetDD::SiDetectorElement *element2, double &stripLengthGapTolerance, double &min, double &max) 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.