32 #ifndef DROP_CGAL // in case we do not have the code for CGAL
34 #ifndef __FASTJET_DNNPLANE_HH__
35 #define __FASTJET_DNNPLANE_HH__
37 #include "fastjet/internal/Triangulation.hh"
38 #include "fastjet/internal/DynamicNearestNeighbours.hh"
40 FASTJET_BEGIN_NAMESPACE
56 class DnnPlane :
public DynamicNearestNeighbours {
63 DnnPlane(
const std::vector<EtaPhi> &,
const bool & verbose =
false );
68 int NearestNeighbourIndex(
const int ii)
const ;
72 double NearestNeighbourDistance(
const int ii)
const ;
77 bool Valid(
const int index)
const;
79 void RemoveAndAddPoints(
const std::vector<int> & indices_to_remove,
80 const std::vector<EtaPhi> & points_to_add,
81 std::vector<int> & indices_added,
82 std::vector<int> & indices_of_updated_neighbours);
85 EtaPhi etaphi(
const int i)
const;
87 double eta(
const int i)
const;
89 double phi(
const int i)
const;
104 std::vector<SuperVertex> _supervertex;
109 static const bool _crash_on_coincidence =
false;
115 inline double _euclid_distance(
const Point& p1,
const Point& p2)
const {
116 double distx= p1.x()-p2.x();
117 double disty= p1.y()-p2.y();
118 return distx*distx+disty*disty;
124 void _SetNearest(
const int j);
136 void _SetAndUpdateNearest(
const int j,
137 std::vector<int> & indices_of_updated_neighbours);
143 int _CheckIfVertexPresent(
const Vertex_handle & vertex,
144 const int its_index);
155 inline bool _is_closer_to(
const Point &pref,
156 const Point &candidate,
157 const Vertex_handle &near,
160 dist = _euclid_distance(pref, candidate);
161 return _is_closer_to_with_hint(pref, candidate, near, dist, mindist);
166 inline bool _is_closer_to_with_hint(
const Point &pref,
167 const Point &candidate,
168 const Vertex_handle &near,
191 if ((std::abs(dist-mindist)<DISTANCE_FOR_CGAL_CHECKS) &&
193 (_euclid_distance(candidate, near->point())<DISTANCE_FOR_CGAL_CHECKS)){
201 if (_verbose) std::cout <<
"using CGAL's distance ordering" << std::endl;
202 if (CGAL::compare_distance_to_point(pref, candidate, near->point())!=CGAL::LARGER){
206 }
else if (dist <= mindist) {
223 static const double DISTANCE_FOR_CGAL_CHECKS;
231 inline int DnnPlane::NearestNeighbourIndex(
const int ii)
const {
232 return _supervertex[ii].NNindex;}
234 inline double DnnPlane::NearestNeighbourDistance(
const int ii)
const {
235 return _supervertex[ii].NNdistance;}
237 inline bool DnnPlane::Valid(
const int index)
const {
238 if (index >= 0 && index < static_cast<int>(_supervertex.size())) {
239 return (_supervertex[index].vertex != NULL);}
else {
return false;} }
241 inline EtaPhi DnnPlane::etaphi(
const int i)
const {
242 Point * p = & (_supervertex[i].vertex->point());
243 return EtaPhi(p->x(),p->y()); }
245 inline double DnnPlane::eta(
const int i)
const {
246 return _supervertex[i].vertex->point().x(); }
248 inline double DnnPlane::phi(
const int i)
const {
249 return _supervertex[i].vertex->point().y(); }
252 FASTJET_END_NAMESPACE
254 #endif // __FASTJET_DNNPLANE_HH__