Class Acts::SingleSeedVertexFinder

template<typename spacepoint_t>
class SingleSeedVertexFinder

Implements the vertex finder based on the track seeds 0.

Assumes there is only 1 vertex and that it has a high multiplicity

  1. Sorts out all the input spacepoints based on their distance to the z-axis

  2. Create seeds from 3 spacepoints with a small deviation from a straigh line

  3. Find a point with a minimal distance from either planes (minimalizeWRT=”planes”) or rays (minimalizeWRT=”rays”) defined by the the seeds

  4. Returns the point position as the vertex

Public Functions

SingleSeedVertexFinder(const Config &cfg, std::unique_ptr<const Logger> lgr = getDefaultLogger("SingleSeedVertexFinder", Logging::INFO))


  • cfg – Configuration object

  • lgr – Logging instance

~SingleSeedVertexFinder() = default


inline const Config &config() const

Const access to the config.

Acts::Result<Acts::Vector3> findVertex(const std::vector<spacepoint_t> &spacepoints) const

Finds the vertex based on the provided spacepoints.


spacepoints – Vector of the input spacepoints; they do not need to be sorted anyhow


Position of the vertex

struct Config

Configuration struct.

Public Members

Acts::ActsScalar maxAbsZ = 450. * Acts::UnitConstants::mm

maximum |z| to consider, z slices will be done within the range (-maxAbsZ,maxAbsZ) values of maxAbsZ, maxZPosition, rMaxFar, and minTheta should be set reasonably with respect to each other

std::uint32_t maxIterations = 20

maximum number of iterations when discarding triplets with the largest chi^2

Acts::ActsScalar maxPhideviation = 0.08

maximum deviation in phi between the near and middle spacepoints or middle and far spacepoints

Acts::ActsScalar maxRPosition = 10.f * Acts::UnitConstants::mm

maximum R position of the vertex at the point closest to the Z axis

Acts::ActsScalar maxXYdeviation = 0.08

maximum deviation in X-Y between the first 2 spacepoints and the last 2 spacepoints

Acts::ActsScalar maxXYZdeviation = 0.08

maximum deviation in 3D between the first 2 spacepoints and the last 2 spacepoints

Acts::ActsScalar maxZPosition = 200.f * Acts::UnitConstants::mm

maximum Z position of the vertex at the point closest to the Z axis

std::string minimalizeWRT = "planes"

chi^2 minimalization will happen with respect to “planes” or “rays”

Acts::ActsScalar minTheta = 1.

minimum angle between Z axis and a triplet, effectively removing triplets with large |eta|

Acts::ActsScalar minVtxShift = 0.3f * Acts::UnitConstants::mm

if the vertex estimation moves less than this, stop iterations

std::uint32_t numPhiSlices = 60

number of phi slices, at least 3 to avoid duplicities it should be less than 2*pi/maxPhideviation in order not to loop over triplets that will be rejected by maxPhideviation anyway

std::uint32_t numZSlices = 150

number of z slices

Acts::ActsScalar removeFraction = 0.10

each iteration, discard this fraction of triplets with the largest chi^2

Acts::ActsScalar rMaxFar = 320.f * Acts::UnitConstants::mm
Acts::ActsScalar rMaxMiddle = 190.f * Acts::UnitConstants::mm
Acts::ActsScalar rMaxNear = 60.f * Acts::UnitConstants::mm
Acts::ActsScalar rMinFar = 280.f * Acts::UnitConstants::mm
Acts::ActsScalar rMinMiddle = 150.f * Acts::UnitConstants::mm
Acts::ActsScalar rMinNear = 20.f * Acts::UnitConstants::mm

thresholds for near, middle, and far spacepoints

Acts::ActsScalar useFracPhiSlices = 0.5

use only a fraction of available phi slices to speed up calculations;

Acts::ActsScalar useFracZSlices = 0.5

use only a fraction of available z slices to speed up calculations;