5 #ifndef MUONR4__MUONPATTERNHELPERS_COMBINATORIALSEEDSOLVER__H
6 #define MUONR4__MUONPATTERNHELPERS_COMBINATORIALSEEDSOLVER__H
18 namespace CombinatorialSeedSolver{
34 template<
typename Container>
43 template<
typename Container>
45 typename Container::value_type;
46 requires std::is_pointer_v<typename Container::value_type>;
51 template<
typename Container>
53 {
c.size()} ->std::same_as<std::size_t>;
54 requires hasPositionAndDirection<Container>;
64 template<
typename spacePo
intContainer>
65 requires acceptedContainer<spacePointContainer> && hasPointerValues<spacePointContainer>
95 template<
typename spacePo
intContainer>
96 requires acceptedContainer<spacePointContainer> && hasPointerValues<spacePointContainer>
109 double kappa = solution.x();
110 double gamma = solution.y();
115 return std::array<double,4>({lamda,
alpha,
gamma,kappa});
125 template<
typename spacePo
intContainer>
126 requires acceptedContainer<spacePointContainer> && hasPointerValues<spacePointContainer>
135 Amg::Vector3D seedPositionZ0 = seedPosition + Amg::intersect<3>(seedPosition, seedDirection, Amg::Vector3D::UnitZ(), 0.).value_or(0.)*seedDirection;
139 return std::make_pair(seedPositionZ0, seedDirection.z() > 0 ? seedDirection : -seedDirection);