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;
33 bool singleSeedCut(
float weight,
const InternalSpacePoint<SpacePoint>& bottom,
34 const InternalSpacePoint<SpacePoint>&,
35 const InternalSpacePoint<SpacePoint>&)
const;
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<
80 if (seedCandidates.size() <= 1) {
81 return seedCandidates;
84 newSeedsVector.push_back(
std::move(seedCandidates[0]));
85 std::size_t itLength =
std::min(seedCandidates.size(), std::size_t(5));
87 for (std::size_t
i(1);
i < itLength;
i++) {
88 float weight = seedCandidates[
i].weight;
89 const auto& bottom = seedCandidates[
i].bottom;
90 if (weight > 200. or bottom->radius() > 43.) {
91 newSeedsVector.push_back(
std::move(seedCandidates[
i]));
94 return newSeedsVector;