32 #ifndef __FASTJET_DYNAMICNEARESTNEIGHBOURS_HH__
33 #define __FASTJET_DYNAMICNEARESTNEIGHBOURS_HH__
40 #include "fastjet/internal/numconsts.hh"
41 #include "fastjet/Error.hh"
43 FASTJET_BEGIN_NAMESPACE
58 EtaPhi(
double a,
double b) {first = a; second = b;}
61 if (second < 0) second += twopi;
62 if (second >= twopi) second -= twopi;
73 class DnnError :
public Error {
77 DnnError(
const std::string & message_in) : Error(message_in) {}
98 class DynamicNearestNeighbours {
111 virtual int NearestNeighbourIndex(
const int ii)
const = 0;
115 virtual double NearestNeighbourDistance(
const int ii)
const = 0;
120 virtual bool Valid(
const int index)
const = 0;
132 virtual void RemoveAndAddPoints(
const std::vector<int> & indices_to_remove,
133 const std::vector<EtaPhi> & points_to_add,
134 std::vector<int> & indices_added,
135 std::vector<int> & indices_of_updated_neighbours) = 0;
140 inline void RemovePoint (
const int index,
141 std::vector<int> & indices_of_updated_neighbours) {
142 std::vector<int> indices_added;
143 std::vector<EtaPhi> points_to_add;
144 std::vector<int> indices_to_remove(1);
145 indices_to_remove[0] = index;
146 RemoveAndAddPoints(indices_to_remove, points_to_add, indices_added,
147 indices_of_updated_neighbours
156 inline void RemoveCombinedAddCombination(
157 const int index1,
const int index2,
158 const EtaPhi & newpoint,
160 std::vector<int> & indices_of_updated_neighbours) {
161 std::vector<int> indices_added(1);
162 std::vector<EtaPhi> points_to_add(1);
163 std::vector<int> indices_to_remove(2);
164 indices_to_remove[0] = index1;
165 indices_to_remove[1] = index2;
166 points_to_add[0] = newpoint;
167 RemoveAndAddPoints(indices_to_remove, points_to_add, indices_added,
168 indices_of_updated_neighbours
170 index3 = indices_added[0];
174 virtual ~DynamicNearestNeighbours () {}
178 FASTJET_END_NAMESPACE
180 #endif // __FASTJET_DYNAMICNEARESTNEIGHBOURS_HH__
Shortcut for dealing with eta-phi coordinates.
void sanitize()
put things into the desired range.