5#if defined(FLATTEN) && defined(__GNUC__)
7#pragma GCC optimize "-fno-var-tracking-assignments"
17 const std::string& name,
18 const IInterface* parent)
19 : base_class(
type, name, parent)
36 std::vector<Acts::Experimental::GbtsLayerDescription> layers;
37 layers.reserve(pVL->size());
41 const Acts::Experimental::GbtsLayerType
type = s.m_type == 0 ? Acts::Experimental::GbtsLayerType::Barrel : Acts::Experimental::GbtsLayerType::Endcap;
42 layers.emplace_back(s.m_subdet,
type, s.m_refCoord, s.m_minBound, s.m_maxBound);
52 auto layerConnectionMap = Acts::Experimental::GbtsLayerConnectionMap::fromFile(
m_finderCfg.connectorInputFile,
m_finderCfg.lrtMode);
56 layerConnectionMap.etaBinWidth =
m_finderCfg.etaBinWidthOverride;
61 auto gbtsGeo = std::make_shared<Acts::Experimental::GbtsGeometry>(layers, layerConnectionMap);
63 m_finder = Acts::Experimental::GraphBasedTrackSeeder(
64 Acts::Experimental::GraphBasedTrackSeeder::DerivedConfig(
m_finderCfg),
65 gbtsGeo,
logger().cloneWithSuffix(
"gbtsFinder"));
69 return StatusCode::SUCCESS;
74 const EventContext& ctx,
75 const std::vector<const xAOD::SpacePointContainer*>& spacePointCollections,
76 const Eigen::Vector3f& beamSpotPos,
float bFieldInZ,
82 const Acts::Experimental::GraphBasedTrackSeeder::Options options(bFieldInZ);
85 Acts::SpacePointContainer2 coreSpacePoints(
86 Acts::SpacePointColumns::CopyFromIndex |
87 Acts::SpacePointColumns::SourceLinks |
88 Acts::SpacePointColumns::X |
89 Acts::SpacePointColumns::Y |
90 Acts::SpacePointColumns::Z |
91 Acts::SpacePointColumns::R |
92 Acts::SpacePointColumns::Phi
96 auto layerColumn = coreSpacePoints.createColumn<std::uint32_t>(
"layerId");
97 auto clusterWidthColumn = coreSpacePoints.createColumn<
float>(
"clusterWidth");
98 auto localPositionColumn = coreSpacePoints.createColumn<
float>(
"localPositionY");
100 std::vector<const xAOD::SpacePoint*> tmpSpacePoints;
101 std::size_t totalSpacePoints = 0;
106 tmpSpacePoints.emplace_back(
sp);
108 totalSpacePoints += spacePoints->size();
111 coreSpacePoints.reserve(totalSpacePoints);
114 for(std::size_t idx = 0; idx < tmpSpacePoints.size(); ++idx){
117 const std::vector<xAOD::DetectorIDHashType>& elementlist =
sp->elementIdList();
119 const bool isPixel(elementlist.size() == 1);
120 if (isPixel ==
false)
continue;
122 const short layer = (isPixel ?
m_pix_h2l :
m_sct_h2l)->
operator[](
static_cast<int>(elementlist[0]));
124 auto newSp = coreSpacePoints.createSpacePoint();
125 newSp.copyFromIndex() = idx;
129 const float new_x =
static_cast<float>(
sp->x() - beamSpotPos[0]);
130 const float new_y =
static_cast<float>(
sp->y() - beamSpotPos[1]);
133 newSp.z() =
static_cast<float>(
sp->z());
134 newSp.r() = std::hypot(new_x, new_y);
135 newSp.phi() = std::atan2(new_y, new_x);
137 const float new_x =
static_cast<float>(
sp->x());
138 const float new_y =
static_cast<float>(
sp->y());
139 newSp.x() =
static_cast<float>(
sp->x());
140 newSp.y() =
static_cast<float>(
sp->y());
141 newSp.z() =
static_cast<float>(
sp->z());
142 newSp.r() = std::hypot(new_x, new_y);
143 newSp.phi() = std::atan2(
sp->y(),
sp->x());
146 newSp.extra(layerColumn) = layer;
151 newSp.extra(clusterWidthColumn) = pCL->
widthInEta();
160 const Acts::Experimental::GbtsRoiDescriptor internalRoi(0, -4.5, 4.5, 0, -std::numbers::pi, std::numbers::pi, 0, -150.0,150.0);
161 Acts::SeedContainer2 seeds;
162 m_finder->createSeeds(coreSpacePoints, internalRoi, max_layers, *
m_filter, options, seeds);
165 seedContainer.
reserve(seedContainer.
size() + seeds.size(), 7.0f);
166 for (
auto seed : seeds) {
169 [&](
const Acts::SpacePointIndex2 spIndex) {
170 return tmpSpacePoints[spIndex];
175 return StatusCode::SUCCESS;
218 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
float widthInEta() const
Returns the width of the cluster in phi (x) and eta (y) directions, respectively.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
Seed push_back(SpacePointRange spacePoints, float quality, float vertexZ)
void reserve(std::size_t size, float averageSpacePoints=3) noexcept
std::size_t size() const noexcept