File indexing completed on 2026-01-09 09:26:48
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/EventData/SpacePointContainer.hpp"
0010 #include "Acts/Seeding/SeedFinderConfig.hpp"
0011 #include "Acts/Seeding/SeedFinderGbtsConfig.hpp"
0012 #include "Acts/Seeding/SeedFinderOrthogonalConfig.hpp"
0013 #include "Acts/Utilities/Logger.hpp"
0014 #include "ActsExamples/EventData/SpacePointContainer.hpp"
0015 #include "ActsExamples/TrackFinding/AdaptiveHoughTransformSeeder.hpp"
0016 #include "ActsExamples/TrackFinding/GbtsSeedingAlgorithm.hpp"
0017 #include "ActsExamples/TrackFinding/GridTripletSeedingAlgorithm.hpp"
0018 #include "ActsExamples/TrackFinding/HoughTransformSeeder.hpp"
0019 #include "ActsExamples/TrackFinding/MuonHoughSeeder.hpp"
0020 #include "ActsExamples/TrackFinding/OrthogonalTripletSeedingAlgorithm.hpp"
0021 #include "ActsExamples/TrackFinding/SeedingAlgorithm.hpp"
0022 #include "ActsExamples/TrackFinding/SeedingOrthogonalAlgorithm.hpp"
0023 #include "ActsExamples/TrackFinding/SpacePointMaker.hpp"
0024 #include "ActsExamples/TrackFinding/TrackFindingAlgorithm.hpp"
0025 #include "ActsExamples/TrackFinding/TrackParamsEstimationAlgorithm.hpp"
0026 #include "ActsExamples/TrackFinding/TrackParamsLookupEstimation.hpp"
0027 #include "ActsPython/Utilities/Helpers.hpp"
0028 #include "ActsPython/Utilities/Macros.hpp"
0029
0030 #include <cstddef>
0031 #include <memory>
0032 #include <utility>
0033 #include <vector>
0034
0035 #include <pybind11/pybind11.h>
0036 #include <pybind11/stl.h>
0037
0038 namespace py = pybind11;
0039
0040 using namespace ActsExamples;
0041
0042 namespace ActsPython {
0043
0044 void addTrackFinding(py::module& mex) {
0045 ACTS_PYTHON_DECLARE_ALGORITHM(SpacePointMaker, mex, "SpacePointMaker",
0046 inputMeasurements, outputSpacePoints,
0047 trackingGeometry, geometrySelection,
0048 stripGeometrySelection);
0049
0050 {
0051 using Config = Acts::SeedFinderConfig<typename Acts::SpacePointContainer<
0052 SpacePointContainer<std::vector<const SimSpacePoint*>>,
0053 Acts::detail::RefHolder>::SpacePointProxyType>;
0054 auto c = py::class_<Config>(mex, "SeedFinderConfig").def(py::init<>());
0055 ACTS_PYTHON_STRUCT(
0056 c, minPt, cotThetaMax, deltaRMin, deltaRMax, deltaRMinBottomSP,
0057 deltaRMaxBottomSP, deltaRMinTopSP, deltaRMaxTopSP, impactMax,
0058 sigmaScattering, maxPtScattering, maxSeedsPerSpM, collisionRegionMin,
0059 collisionRegionMax, phiMin, phiMax, zMin, zMax, rMax, rMin,
0060 radLengthPerSeed, zAlign, rAlign, sigmaError, maxBlockSize,
0061 nTrplPerSpBLimit, nAvgTrplPerSpBLimit, deltaZMax, zBinEdges,
0062 interactionPointCut, zBinsCustomLooping, useVariableMiddleSPRange,
0063 deltaRMiddleMinSPRange, deltaRMiddleMaxSPRange, rRangeMiddleSP,
0064 rMinMiddle, rMaxMiddle, binSizeR, seedConfirmation,
0065 centralSeedConfirmationRange, forwardSeedConfirmationRange,
0066 useDetailedDoubleMeasurementInfo);
0067 patchKwargsConstructor(c);
0068 }
0069
0070 {
0071 using Config =
0072 Acts::SeedFinderOrthogonalConfig<typename Acts::SpacePointContainer<
0073 SpacePointContainer<std::vector<const SimSpacePoint*>>,
0074 Acts::detail::RefHolder>::SpacePointProxyType>;
0075 auto c =
0076 py::class_<Config>(mex, "SeedFinderOrthogonalConfig").def(py::init<>());
0077 ACTS_PYTHON_STRUCT(
0078 c, minPt, cotThetaMax, deltaRMinBottomSP, deltaRMaxBottomSP,
0079 deltaRMinTopSP, deltaRMaxTopSP, impactMax, deltaZMax, sigmaScattering,
0080 maxPtScattering, maxSeedsPerSpM, collisionRegionMin, collisionRegionMax,
0081 phiMin, phiMax, zMin, zMax, rMax, rMin, radLengthPerSeed,
0082 interactionPointCut, deltaPhiMax, highland, maxScatteringAngle2,
0083 useVariableMiddleSPRange, deltaRMiddleMinSPRange,
0084 deltaRMiddleMaxSPRange, rRangeMiddleSP, rMinMiddle, rMaxMiddle,
0085 seedConfirmation, centralSeedConfirmationRange,
0086 forwardSeedConfirmationRange);
0087 patchKwargsConstructor(c);
0088 }
0089
0090 {
0091 using Config = Acts::Experimental::SeedFinderGbtsConfig;
0092 auto c = py::class_<Config>(mex, "SeedFinderGbtsConfig").def(py::init<>());
0093 ACTS_PYTHON_STRUCT(c, minPt, connectorInputFile, phiSliceWidth,
0094 nMaxPhiSlice, lutInputFile);
0095 patchKwargsConstructor(c);
0096 }
0097
0098 ACTS_PYTHON_DECLARE_ALGORITHM(
0099 SeedingAlgorithm, mex, "SeedingAlgorithm", inputSpacePoints, outputSeeds,
0100 seedFilterConfig, seedFinderConfig, seedFinderOptions, gridConfig,
0101 gridOptions, allowSeparateRMax, zBinNeighborsTop, zBinNeighborsBottom,
0102 numPhiNeighbors, useExtraCuts);
0103
0104 ACTS_PYTHON_DECLARE_ALGORITHM(
0105 GridTripletSeedingAlgorithm, mex, "GridTripletSeedingAlgorithm",
0106 inputSpacePoints, outputSeeds, bFieldInZ, minPt, cotThetaMax, impactMax,
0107 deltaRMin, deltaRMax, deltaRMinTop, deltaRMaxTop, deltaRMinBottom,
0108 deltaRMaxBottom, rMin, rMax, zMin, zMax, phiMin, phiMax,
0109 phiBinDeflectionCoverage, maxPhiBins, zBinNeighborsTop,
0110 zBinNeighborsBottom, numPhiNeighbors, zBinEdges, zBinsCustomLooping,
0111 rMinMiddle, rMaxMiddle, useVariableMiddleSPRange, rRangeMiddleSP,
0112 deltaRMiddleMinSPRange, deltaRMiddleMaxSPRange, deltaZMin, deltaZMax,
0113 interactionPointCut, collisionRegionMin, collisionRegionMax,
0114 helixCutTolerance, sigmaScattering, radLengthPerSeed, toleranceParam,
0115 deltaInvHelixDiameter, compatSeedWeight, impactWeightFactor,
0116 zOriginWeightFactor, maxSeedsPerSpM, compatSeedLimit, seedWeightIncrement,
0117 numSeedIncrement, seedConfirmation, centralSeedConfirmationRange,
0118 forwardSeedConfirmationRange, maxSeedsPerSpMConf,
0119 maxQualitySeedsPerSpMConf, useDeltaRinsteadOfTopRadius, useExtraCuts);
0120
0121 ACTS_PYTHON_DECLARE_ALGORITHM(
0122 OrthogonalTripletSeedingAlgorithm, mex,
0123 "OrthogonalTripletSeedingAlgorithm", inputSpacePoints, outputSeeds,
0124 bFieldInZ, minPt, cotThetaMax, impactMax, deltaRMin, deltaRMax,
0125 deltaRMinTop, deltaRMaxTop, deltaRMinBottom, deltaRMaxBottom, rMin, rMax,
0126 zMin, zMax, phiMin, phiMax, rMinMiddle, rMaxMiddle,
0127 useVariableMiddleSPRange, rRangeMiddleSP, deltaRMiddleMinSPRange,
0128 deltaRMiddleMaxSPRange, deltaZMin, deltaZMax, interactionPointCut,
0129 collisionRegionMin, collisionRegionMax, helixCutTolerance,
0130 sigmaScattering, radLengthPerSeed, toleranceParam, deltaInvHelixDiameter,
0131 compatSeedWeight, impactWeightFactor, zOriginWeightFactor, maxSeedsPerSpM,
0132 compatSeedLimit, seedWeightIncrement, numSeedIncrement, seedConfirmation,
0133 centralSeedConfirmationRange, forwardSeedConfirmationRange,
0134 maxSeedsPerSpMConf, maxQualitySeedsPerSpMConf,
0135 useDeltaRinsteadOfTopRadius, useExtraCuts);
0136
0137 ACTS_PYTHON_DECLARE_ALGORITHM(SeedingOrthogonalAlgorithm, mex,
0138 "SeedingOrthogonalAlgorithm", inputSpacePoints,
0139 outputSeeds, seedFilterConfig, seedFinderConfig,
0140 seedFinderOptions);
0141
0142 ACTS_PYTHON_DECLARE_ALGORITHM(
0143 ActsExamples::GbtsSeedingAlgorithm, mex, "GbtsSeedingAlgorithm",
0144 inputSpacePoints, outputSeeds, seedFinderConfig, seedFinderOptions,
0145 layerMappingFile, trackingGeometry, ActsGbtsMap, fill_module_csv,
0146 inputClusters);
0147
0148 ACTS_PYTHON_DECLARE_ALGORITHM(
0149 HoughTransformSeeder, mex, "HoughTransformSeeder", inputSpacePoints,
0150 outputProtoTracks, trackingGeometry, geometrySelection, inputMeasurements,
0151 subRegions, nLayers, xMin, xMax, yMin, yMax, houghHistSize_x,
0152 houghHistSize_y, hitExtend_x, threshold, localMaxWindowSize, kA);
0153
0154 ACTS_PYTHON_DECLARE_ALGORITHM(
0155 AdaptiveHoughTransformSeeder, mex, "AdaptiveHoughTransformSeeder",
0156 inputSpacePoints, outputSeeds, outputProtoTracks, trackingGeometry,
0157 qOverPtMin, qOverPtMinBinSize, phiMinBinSize, threshold, noiseThreshold,
0158 deduplicate, inverseA, doSecondPhase, zRange, cotThetaRange,
0159 cotThetaMinBinSize, zMinBinSize);
0160
0161 ACTS_PYTHON_DECLARE_ALGORITHM(MuonHoughSeeder, mex, "MuonHoughSeeder",
0162 inTruthSegments, inSpacePoints, outHoughMax,
0163 nBinsTanTheta, nBinsY0, nBinsTanPhi, nBinsX0);
0164
0165 ACTS_PYTHON_DECLARE_ALGORITHM(
0166 TrackParamsEstimationAlgorithm, mex, "TrackParamsEstimationAlgorithm",
0167 inputSeeds, inputProtoTracks, inputParticleHypotheses,
0168 outputTrackParameters, outputSeeds, outputProtoTracks, trackingGeometry,
0169 magneticField, bFieldMin, initialSigmas, initialSigmaQoverPt,
0170 initialSigmaPtRel, initialVarInflation, noTimeVarInflation,
0171 particleHypothesis);
0172
0173 ACTS_PYTHON_DECLARE_ALGORITHM(
0174 TrackParamsLookupEstimation, mex, "TrackParamsLookupEstimation",
0175 refLayers, bins, inputHits, inputParticles, trackLookupGridWriters);
0176
0177 {
0178 using Alg = TrackFindingAlgorithm;
0179 using Config = Alg::Config;
0180
0181 auto alg =
0182 py::class_<Alg, IAlgorithm, std::shared_ptr<Alg>>(
0183 mex, "TrackFindingAlgorithm")
0184 .def(py::init<const Config&, Acts::Logging::Level>(),
0185 py::arg("config"), py::arg("level"))
0186 .def_property_readonly("config", &Alg::config)
0187 .def_static("makeTrackFinderFunction",
0188 [](std::shared_ptr<const Acts::TrackingGeometry>
0189 trackingGeometry,
0190 std::shared_ptr<const Acts::MagneticFieldProvider>
0191 magneticField,
0192 Acts::Logging::Level level) {
0193 return Alg::makeTrackFinderFunction(
0194 std::move(trackingGeometry),
0195 std::move(magneticField),
0196 *Acts::getDefaultLogger("TrackFinding", level));
0197 });
0198
0199 py::class_<Alg::TrackFinderFunction,
0200 std::shared_ptr<Alg::TrackFinderFunction>>(
0201 alg, "TrackFinderFunction");
0202
0203 auto c = py::class_<Config>(alg, "Config").def(py::init<>());
0204 ACTS_PYTHON_STRUCT(c, inputMeasurements, inputInitialTrackParameters,
0205 inputSeeds, outputTracks, trackingGeometry,
0206 magneticField, findTracks, measurementSelectorCfg,
0207 trackSelectorCfg, maxSteps, twoWay, reverseSearch,
0208 seedDeduplication, stayOnSeed, pixelVolumeIds,
0209 stripVolumeIds, maxPixelHoles, maxStripHoles, trimTracks,
0210 constrainToVolumeIds, endOfWorldVolumeIds);
0211 }
0212 }
0213
0214 }