16 template <
typename SpacePo
int>
17 class ATLASCuts :
public IExperimentCuts<SpacePoint> {
24 float seedWeight(
const InternalSpacePoint<SpacePoint>& bottom,
25 const InternalSpacePoint<SpacePoint>& middle,
26 const InternalSpacePoint<SpacePoint>& top)
const override;
33 bool singleSeedCut(
float weight,
const InternalSpacePoint<SpacePoint>& bottom,
34 const InternalSpacePoint<SpacePoint>&,
35 const InternalSpacePoint<SpacePoint>&)
const override;
40 std::vector<
typename CandidatesForMiddleSp<
43 const InternalSpacePoint<SpacePoint>>::
value_type>
44 seedCandidates)
const override;
47 template <
typename SpacePo
int>
49 const InternalSpacePoint<SpacePoint>& bottom,
50 const InternalSpacePoint<SpacePoint>&,
51 const InternalSpacePoint<SpacePoint>& top)
const {
53 if (bottom.radius() > 150) {
56 if (top.radius() < 150) {
62 template <
typename SpacePo
int>
64 float weight,
const InternalSpacePoint<SpacePoint>&
b,
65 const InternalSpacePoint<SpacePoint>&,
66 const InternalSpacePoint<SpacePoint>&)
const {
67 return !(b.radius() > 150. && weight < 380.);
70 template <
typename SpacePo
int>
71 std::vector<
typename CandidatesForMiddleSp<
74 std::vector<
typename CandidatesForMiddleSp<
75 const InternalSpacePoint<SpacePoint>>::
value_type>
76 seedCandidates)
const {
77 std::vector<
typename CandidatesForMiddleSp<
81 if (seedCandidates.size() <= 1) {
82 return seedCandidates;
85 newSeedsVector.push_back(
std::move(seedCandidates[0]));
86 std::size_t itLength =
std::min(seedCandidates.size(), std::size_t(5));
88 for (std::size_t
i(1);
i < itLength;
i++) {
89 float weight = seedCandidates[
i].weight;
90 const auto& bottom = seedCandidates[
i].bottom;
91 if (weight > 200. or bottom->radius() > 43.) {
92 newSeedsVector.push_back(
std::move(seedCandidates[
i]));
95 return newSeedsVector;