26 #include "cetlib/pow.h" 
   29 #define BOOST_TEST_MODULE ( PointIsolationAlg_test ) 
   30 #include "boost/test/unit_test.hpp" 
   59   using Point_t = std::array<Coord_t, 3U>;
 
   61   PointIsolationAlg_t::Configuration_t config;
 
   62   config.radius2 = cet::square(1.);
 
   63   config.rangeX = { -2., +2. };
 
   64   config.rangeY = { -2., +2. };
 
   65   config.rangeZ = { -2., +2. };
 
   67   std::vector<Point_t> points;
 
   68   std::vector<size_t> result, expected;
 
   70   PointIsolationAlg_t algo(config);
 
   73   points.push_back({{ +1., +1., +1. }});
 
   76   result = algo.removeIsolatedPoints(points);
 
   77   std::sort(result.begin(), result.end());
 
   78   BOOST_TEST(result == expected, boost::test_tools::per_element());
 
   82   points.push_back({{ -1., -1., -1. }});
 
   85   result = algo.removeIsolatedPoints(points);
 
   86   std::sort(result.begin(), result.end());
 
   87   BOOST_TEST(result == expected, boost::test_tools::per_element());
 
   91   points.push_back({{ +0.5, +1.0, +1.0 }});
 
   92   expected.insert(expected.end(), { 0U, 2U });
 
   93   std::sort(expected.begin(), expected.end());
 
   95   result = algo.removeIsolatedPoints(points);
 
   96   std::sort(result.begin(), result.end());
 
   97   BOOST_TEST(result == expected, boost::test_tools::per_element());
 
  101   points.push_back({{ -0.5, -1.0, -1.0 }});
 
  102   expected.insert(expected.end(), { 1U, 3U });
 
  103   std::sort(expected.begin(), expected.end());
 
  105   result = algo.removeIsolatedPoints(points);
 
  106   std::sort(result.begin(), result.end());
 
  107   BOOST_TEST(result == expected, boost::test_tools::per_element());
 
  134 template <
typename T>
 
  140   using Point_t = std::array<Coord_t, 3U>;
 
  142   std::vector<Point_t> points;
 
  143   points.reserve(1 + 1 * nShells);
 
  146   while (nShells-- > 0) {
 
  147     points.push_back({{  
distance,        0.,        0. }});
 
  148     points.push_back({{ -
distance,        0.,        0. }});
 
  149     points.push_back({{        0.,  
distance,        0. }});
 
  150     points.push_back({{        0., -
distance,        0. }});
 
  151     points.push_back({{        0.,        0.,  
distance }});
 
  152     points.push_back({{        0.,        0., -
distance }});
 
  157   points.push_back({{ 0., 0., 0. }});
 
  182   using Point_t = std::array<Coord_t, 3U>;
 
  187   constexpr 
Coord_t starRadius = 1.;
 
  188   std::vector<Point_t> points = CreateStarOfPoints<Coord_t>(levels, starRadius);
 
  193   PointIsolationAlg_t::Configuration_t config;
 
  194   config.radius2 = cet::square(1.);
 
  195   config.rangeX = { -2., +2. };
 
  196   config.rangeY = { -2., +2. };
 
  197   config.rangeZ = { -2., +2. };
 
  198   PointIsolationAlg_t algo(config);
 
  203   constexpr 
unsigned int nSemiDirections = 6;
 
  205   const Coord_t epsilonStep = starRadius / (2 << levels);
 
  206   double baseRadius = starRadius; 
 
  210   size_t const maxExpectedPoints = 1 + levels * nSemiDirections;
 
  211   assert(maxExpectedPoints == points.size());
 
  213   std::vector<size_t> expectedBase(maxExpectedPoints);
 
  214   std::iota(expectedBase.begin(), expectedBase.end(), 0U);
 
  223   unsigned int level = levels;
 
  228     config.radius2 = cet::square(baseRadius + epsilonStep);
 
  229     algo.reconfigure(config);
 
  232       (
"[" << level <<
"] testing with radius " << (baseRadius + epsilonStep));
 
  235     unsigned int const nExpected = (level > 1)? (1 + level * nSemiDirections): 0;
 
  237     std::vector<size_t> expected
 
  238       (expectedBase.end() - nExpected, expectedBase.end());
 
  240     std::vector<size_t> result = algo.removeIsolatedPoints(points);
 
  241     BOOST_TEST(result.size() == expected.size());
 
  243     std::sort(result.begin(), result.end());
 
  244     std::sort(expected.begin(), expected.end());
 
  245     BOOST_TEST(result == expected, boost::test_tools::per_element());
 
  247   } 
while (--level > 0);
 
Algorithm to detect isolated space points. 
 
enum geo::coordinates Coord_t
 
auto CreateStarOfPoints(unsigned int nShells, T distance=T(1)) -> decltype(auto)
Creates a "star" disposition of points. 
 
recob::tracking::Point_t Point_t
 
void PointIsolationTest2(unsigned int levels)
Tests various isolation radii on a star-distributed set of points. 
 
double distance(geo::Point_t const &point, CathodeDesc_t const &cathode)
Returns the distance of a point from the cathode. 
 
Algorithm(s) dealing with point isolation in space. 
 
void PointIsolationTest1()
Low-multiplicity unit test.