Skip to content

Commit

Permalink
feat: Global extraction function in BinnedSPGroup (#810)
Browse files Browse the repository at this point in the history
This PR adds a user-defined function for extracting both position and covariance in BinnedSPGroup as a std::pair<Acts::Vector3,Acts::Vector2> obejct.
This new function replaces the old user-defined function used for extracting the covariance, and would allow the user to introduce additional computations.
  • Loading branch information
CarloVarni committed Jun 1, 2021
1 parent d72e80c commit ab46bb0
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 28 deletions.
5 changes: 2 additions & 3 deletions Core/include/Acts/Seeding/BinnedSPGroup.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,9 +240,8 @@ class BinnedSPGroup {
template <typename spacepoint_iterator_t>
BinnedSPGroup<external_spacepoint_t>(
spacepoint_iterator_t spBegin, spacepoint_iterator_t spEnd,
std::function<Acts::Vector2(const external_spacepoint_t&, float, float,
float)>
covTool,
std::function<std::pair<Acts::Vector3, Acts::Vector2>(
const external_spacepoint_t&, float, float, float)>,
std::shared_ptr<Acts::BinFinder<external_spacepoint_t>> botBinFinder,
std::shared_ptr<Acts::BinFinder<external_spacepoint_t>> tBinFinder,
std::unique_ptr<SpacePointGrid<external_spacepoint_t>> grid,
Expand Down
19 changes: 9 additions & 10 deletions Core/include/Acts/Seeding/BinnedSPGroup.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ template <typename external_spacepoint_t>
template <typename spacepoint_iterator_t>
Acts::BinnedSPGroup<external_spacepoint_t>::BinnedSPGroup(
spacepoint_iterator_t spBegin, spacepoint_iterator_t spEnd,
std::function<Acts::Vector2(const external_spacepoint_t&, float, float,
float)>
covTool,
std::function<std::pair<Acts::Vector3, Acts::Vector2>(
const external_spacepoint_t&, float, float, float)>
globTool,
std::shared_ptr<Acts::BinFinder<external_spacepoint_t>> botBinFinder,
std::shared_ptr<Acts::BinFinder<external_spacepoint_t>> tBinFinder,
std::unique_ptr<SpacePointGrid<external_spacepoint_t>> grid,
Expand Down Expand Up @@ -42,9 +42,12 @@ Acts::BinnedSPGroup<external_spacepoint_t>::BinnedSPGroup(
continue;
}
const external_spacepoint_t& sp = **it;
float spX = sp.x();
float spY = sp.y();
float spZ = sp.z();
const auto& [spPosition, variance] =
globTool(sp, config.zAlign, config.rAlign, config.sigmaError);

float spX = spPosition[0];
float spY = spPosition[1];
float spZ = spPosition[2];

if (spZ > zMax || spZ < zMin) {
continue;
Expand All @@ -54,10 +57,6 @@ Acts::BinnedSPGroup<external_spacepoint_t>::BinnedSPGroup(
continue;
}

// 2D variance tool provided by user
Acts::Vector2 variance =
covTool(sp, config.zAlign, config.rAlign, config.sigmaError);
Acts::Vector3 spPosition(spX, spY, spZ);
auto isp =
std::make_unique<const InternalSpacePoint<external_spacepoint_t>>(
sp, spPosition, config.beamPos, variance);
Expand Down
12 changes: 8 additions & 4 deletions Examples/Algorithms/TrackFinding/src/SeedingAlgorithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,21 @@ ActsExamples::ProcessCode ActsExamples::SeedingAlgorithm::execute(

// construct the seeding tools
// covariance tool, extracts covariances per spacepoint as required
auto extractCovariance = [=](const SimSpacePoint& sp, float, float,
float) -> Acts::Vector2 {
return {sp.varianceR(), sp.varianceZ()};
auto extractGlobalQuantities =
[=](const SimSpacePoint& sp, float, float,
float) -> std::pair<Acts::Vector3, Acts::Vector2> {
Acts::Vector3 position{sp.x(), sp.y(), sp.z()};
Acts::Vector2 covariance{sp.varianceR(), sp.varianceZ()};
return std::make_pair(position, covariance);
};

auto bottomBinFinder = std::make_shared<Acts::BinFinder<SimSpacePoint>>(
Acts::BinFinder<SimSpacePoint>());
auto topBinFinder = std::make_shared<Acts::BinFinder<SimSpacePoint>>(
Acts::BinFinder<SimSpacePoint>());
auto grid = Acts::SpacePointGridCreator::createGrid<SimSpacePoint>(m_gridCfg);
auto spacePointsGrouping = Acts::BinnedSPGroup<SimSpacePoint>(
spacePointPtrs.begin(), spacePointPtrs.end(), extractCovariance,
spacePointPtrs.begin(), spacePointPtrs.end(), extractGlobalQuantities,
bottomBinFinder, topBinFinder, std::move(grid), m_finderCfg);
auto finder = Acts::Seedfinder<SimSpacePoint>(m_finderCfg);

Expand Down
7 changes: 5 additions & 2 deletions Tests/UnitTests/Core/Seeding/SeedfinderTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,11 @@ int main(int argc, char** argv) {
Acts::Seedfinder<SpacePoint> a(config);

// covariance tool, sets covariances per spacepoint as required
auto ct = [=](const SpacePoint& sp, float, float, float) -> Acts::Vector2 {
return {sp.varianceR, sp.varianceZ};
auto ct = [=](const SpacePoint& sp, float, float,
float) -> std::pair<Acts::Vector3, Acts::Vector2> {
Acts::Vector3 position(sp.x(), sp.y(), sp.z());
Acts::Vector2 covariance(sp.varianceR, sp.varianceZ);
return std::make_pair(position, covariance);
};

// setup spacepoint grid config
Expand Down
7 changes: 5 additions & 2 deletions Tests/UnitTests/Plugins/Cuda/Seeding/SeedfinderCudaTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,11 @@ int main(int argc, char** argv) {
Acts::Seedfinder<SpacePoint, Acts::Cuda> seedfinder_cuda(config);

// covariance tool, sets covariances per spacepoint as required
auto ct = [=](const SpacePoint& sp, float, float, float) -> Acts::Vector2 {
return {sp.varianceR, sp.varianceZ};
auto ct = [=](const SpacePoint& sp, float, float,
float) -> std::pair<Acts::Vector3, Acts::Vector2> {
Acts::Vector3 position(sp.x(), sp.y(), sp.z());
Acts::Vector2 variance(sp.varianceR, sp.varianceZ);
return std::make_pair(position, variance);
};

// setup spacepoint grid config
Expand Down
6 changes: 4 additions & 2 deletions Tests/UnitTests/Plugins/Cuda/Seeding2/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,10 @@ int main(int argc, char* argv[]) {

// Covariance tool, sets covariances per spacepoint as required.
auto ct = [=](const TestSpacePoint& sp, float, float,
float) -> Acts::Vector2 {
return {sp.m_varianceR, sp.m_varianceZ};
float) -> std::pair<Acts::Vector3, Acts::Vector2> {
Acts::Vector3 position(sp.x(), sp.y(), sp.z());
Acts::Vector2 covariance(sp.m_varianceR, sp.m_varianceZ);
return std::make_pair(position, covariance);
};

// Create a grid with bin sizes according to the configured geometry, and
Expand Down
13 changes: 8 additions & 5 deletions Tests/UnitTests/Plugins/Sycl/Seeding/SeedfinderSyclTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,20 @@ auto main(int argc, char** argv) -> int {
cmdlTool.deviceName,
Acts::getDefaultLogger("Sycl::QueueWrapper", logLvl)));
Acts::Seedfinder<SpacePoint> normalSeedfinder(config);
auto covarianceTool = [=](const SpacePoint& sp, float /*unused*/,
float /*unused*/,
float_t /*unused*/) -> Acts::Vector2 {
return {sp.varianceR, sp.varianceZ};
auto globalTool =
[=](const SpacePoint& sp, float /*unused*/, float /*unused*/,
float_t /*unused*/) -> std::pair<Acts::Vector3, Acts::Vector2> {
Acts::Vector3 position(sp.x(), sp.y(), sp.z());
Acts::Vector2 covariance(sp.varianceR, sp.varianceZ);
return std::make_pair(position, covariance);
};

std::unique_ptr<Acts::SpacePointGrid<SpacePoint>> grid =
Acts::SpacePointGridCreator::createGrid<SpacePoint>(
setupSpacePointGridConfig(config));

auto spGroup = Acts::BinnedSPGroup<SpacePoint>(
spVec.begin(), spVec.end(), covarianceTool, bottomBinFinder, topBinFinder,
spVec.begin(), spVec.end(), globalTool, bottomBinFinder, topBinFinder,
std::move(grid), config);

auto end_prep = std::chrono::system_clock::now();
Expand Down

0 comments on commit ab46bb0

Please sign in to comment.