13 #include <tracking/trackFindingVXD/filterMap/filterFramework/SelectionVariable.h>
14 #include <tracking/trackFindingVXD/filterMap/threeHitVariables/SignCurvatureXY.h>
19 #define ZIGGZAGGXY_NAME ZiggZaggXY
31 template <
typename Po
intType,
typename Po
intContainerType >
39 static int value(
const PointContainerType& hitContainer)
41 if (hitContainer.size() < 4)
return 1;
43 std::vector<int> chargeSigns;
44 chargeSigns.reserve(hitContainer.size() - 2);
46 auto iterPos = hitContainer.begin();
47 auto stopPos = hitContainer.end() - 2;
49 for (; iterPos < stopPos; ++iterPos) {
50 int signVal = SignCurvatureXY<PointType>::value(**iterPos, **(iterPos + 1), **(iterPos + 2));
51 chargeSigns.push_back(signVal);
54 std::sort(chargeSigns.begin(), chargeSigns.end());
55 auto newEnd = std::unique(chargeSigns.begin(), chargeSigns.end());
57 return std::distance(chargeSigns.begin(), newEnd);