FastJet
3.3.4
|
Namespaces | |
gas | |
namespace to hold default parameters for the active area spec | |
Typedefs | |
typedef ClusterSequenceActiveAreaExplicitGhosts | ClustSeqActAreaEG |
typedef ClusterSequenceVoronoiArea::VoronoiAreaCalc | VAC |
typedef ClusterSequenceAreaBase | ClusterSequenceWithArea |
typedef GhostedAreaSpec | ActiveAreaSpec |
just provide a typedef for backwards compatibility with programs based on versions 2.0 and 2.1 of fastjet. More... | |
typedef JetAlgorithm | JetFinder |
make standard Les Houches nomenclature JetAlgorithm (algorithm is general recipe without the parameters) backward-compatible with old JetFinder | |
typedef integral_type< bool, true > | true_type |
the bool 'true' value promoted to a type | |
typedef integral_type< bool, false > | false_type |
the bool 'false' value promoted to a type | |
typedef char(& | __yes_type)[1] |
typedef char(& | __no_type)[2] |
typedef Tile2Base< 25 > | Tile25 |
typedef Tile2Base< 9 > | Tile2 |
typedef CGAL::Triangulation_vertex_base_with_info_2< InitialisedInt, K > | Vbb |
typedef CGAL::Triangulation_hierarchy_vertex_base_2< Vbb > | Vb |
typedef CGAL::Triangulation_face_base_2< K > | Fb |
typedef CGAL::Triangulation_data_structure_2< Vb, Fb > | Tds |
typedef CGAL::Delaunay_triangulation_2< K, Tds > | Dt |
typedef CGAL::Triangulation_hierarchy_2< Dt > | Triangulation |
typedef Triangulation::Vertex_handle | Vertex_handle |
typedef Triangulation::Point | Point |
typedef Triangulation::Vertex_circulator | Vertex_circulator |
CGAL Point structure. | |
typedef Triangulation::Face_circulator | Face_circulator |
typedef Triangulation::Face_handle | Face_handle |
Enumerations | |
enum | AreaType { invalid_area = -1, active_area = 0, active_area_explicit_ghosts = 1, one_ghost_passive_area = 10, passive_area = 11, voronoi_area =20 } |
the different types of area that are supported | |
enum | Strategy { N2MHTLazy9AntiKtSeparateGhosts = -10, N2MHTLazy9 = -7, N2MHTLazy25 = -6, N2MHTLazy9Alt = -5, N2MinHeapTiled = -4, N2Tiled = -3, N2PoorTiled = -2, N2Plain = -1, N3Dumb = 0, Best = 1, NlnN = 2, NlnN3pi = 3, NlnN4pi = 4, NlnNCam4pi = 14, NlnNCam2pi2R = 13, NlnNCam = 12, BestFJ30 = 21, plugin_strategy = 999 } |
the various options for the algorithmic strategy to adopt in clustering events with kt and cambridge style algorithms. More... | |
enum | JetAlgorithm { kt_algorithm =0, cambridge_algorithm =1, antikt_algorithm =2, genkt_algorithm =3, cambridge_for_passive_algorithm =11, genkt_for_passive_algorithm =13, ee_kt_algorithm =50, ee_genkt_algorithm =53, plugin_algorithm = 99, undefined_jet_algorithm = 999 } |
enum | RecombinationScheme { E_scheme =0, pt_scheme =1, pt2_scheme =2, Et_scheme =3, Et2_scheme =4, BIpt_scheme =5, BIpt2_scheme =6, WTA_pt_scheme =7, WTA_modp_scheme =8, external_scheme = 99 } |
The various recombination schemes. More... | |
Functions | |
int | __default_random_generator (int *__iseed) |
string | fastjet_version_string () |
return a string containing information about the release | |
PseudoJet | join (const vector< PseudoJet > &pieces, const JetDefinition::Recombiner &recombiner) |
PseudoJet | join (const PseudoJet &j1, const JetDefinition::Recombiner &recombiner) |
build a "CompositeJet" from a single PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2, const JetDefinition::Recombiner &recombiner) |
build a "CompositeJet" from two PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2, const PseudoJet &j3, const JetDefinition::Recombiner &recombiner) |
build a "CompositeJet" from 3 PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2, const PseudoJet &j3, const PseudoJet &j4, const JetDefinition::Recombiner &recombiner) |
build a "CompositeJet" from 4 PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
ostream & | operator<< (ostream &ostr, const TiledJet &jet) |
PseudoJet | operator+ (const PseudoJet &jet1, const PseudoJet &jet2) |
PseudoJet | operator- (const PseudoJet &jet1, const PseudoJet &jet2) |
PseudoJet | operator* (double coeff, const PseudoJet &jet) |
PseudoJet | operator* (const PseudoJet &jet, double coeff) |
PseudoJet | operator/ (const PseudoJet &jet, double coeff) |
bool | operator== (const PseudoJet &, const PseudoJet &) |
returns true if the 4 momentum components of the two PseudoJets are identical and all the internal indices (user, cluster_history) More... | |
bool | operator== (const PseudoJet &jet, const double val) |
Can only be used with val=0 and tests whether all four momentum components are equal to val (=0.0) | |
bool | have_same_momentum (const PseudoJet &jeta, const PseudoJet &jetb) |
returns true if the momenta of the two input jets are identical | |
PseudoJet | PtYPhiM (double pt, double y, double phi, double m) |
return a pseudojet with the given pt, y, phi and mass More... | |
void | sort_indices (vector< int > &indices, const vector< double > &values) |
vector< PseudoJet > | sorted_by_pt (const vector< PseudoJet > &jets) |
return a vector of jets sorted into decreasing kt2 | |
vector< PseudoJet > | sorted_by_rapidity (const vector< PseudoJet > &jets) |
return a vector of jets sorted into increasing rapidity | |
vector< PseudoJet > | sorted_by_E (const vector< PseudoJet > &jets) |
return a vector of jets sorted into decreasing energy | |
vector< PseudoJet > | sorted_by_pz (const vector< PseudoJet > &jets) |
return a vector of jets sorted into increasing pz | |
PseudoJet | join (const vector< PseudoJet > &pieces) |
PseudoJet | join (const PseudoJet &j1) |
build a "CompositeJet" from a single PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2) |
build a "CompositeJet" from two PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2, const PseudoJet &j3) |
build a "CompositeJet" from 3 PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
PseudoJet | join (const PseudoJet &j1, const PseudoJet &j2, const PseudoJet &j3, const PseudoJet &j4) |
build a "CompositeJet" from 4 PseudoJet with an extended structure of type T derived from CompositeJetStructure More... | |
Selector | SelectorIdentity () |
Selector | operator! (const Selector &s) |
logical not applied on a selector More... | |
Selector | operator&& (const Selector &s1, const Selector &s2) |
logical and between two selectors More... | |
Selector | operator|| (const Selector &s1, const Selector &s2) |
logical or between two selectors More... | |
Selector | operator* (const Selector &s1, const Selector &s2) |
successive application of 2 selectors More... | |
Selector | SelectorPtMin (double ptmin) |
select objects with pt >= ptmin | |
Selector | SelectorPtMax (double ptmax) |
select objects with pt <= ptmax | |
Selector | SelectorPtRange (double ptmin, double ptmax) |
select objects with ptmin <= pt <= ptmax | |
Selector | SelectorEtMin (double Etmin) |
select objects with Et >= Etmin | |
Selector | SelectorEtMax (double Etmax) |
select objects with Et <= Etmax | |
Selector | SelectorEtRange (double Etmin, double Etmax) |
select objects with Etmin <= Et <= Etmax | |
Selector | SelectorEMin (double Emin) |
select objects with E >= Emin | |
Selector | SelectorEMax (double Emax) |
select objects with E <= Emax | |
Selector | SelectorERange (double Emin, double Emax) |
select objects with Emin <= E <= Emax | |
Selector | SelectorMassMin (double Mmin) |
select objects with Mass >= Mmin | |
Selector | SelectorMassMax (double Mmax) |
select objects with Mass <= Mmax | |
Selector | SelectorMassRange (double Mmin, double Mmax) |
select objects with Mmin <= Mass <= Mmax | |
Selector | SelectorRapMin (double rapmin) |
select objects with rap >= rapmin | |
Selector | SelectorRapMax (double rapmax) |
select objects with rap <= rapmax | |
Selector | SelectorRapRange (double rapmin, double rapmax) |
select objects with rapmin <= rap <= rapmax | |
Selector | SelectorAbsRapMin (double absrapmin) |
select objects with |rap| >= absrapmin | |
Selector | SelectorAbsRapMax (double absrapmax) |
select objects with |rap| <= absrapmax | |
Selector | SelectorAbsRapRange (double absrapmin, double absrapmax) |
select objects with absrapmin <= |rap| <= absrapmax | |
Selector | SelectorEtaMin (double etamin) |
select objects with eta >= etamin | |
Selector | SelectorEtaMax (double etamax) |
select objects with eta <= etamax | |
Selector | SelectorEtaRange (double etamin, double etamax) |
select objects with etamin <= eta <= etamax | |
Selector | SelectorAbsEtaMin (double absetamin) |
select objects with |eta| >= absetamin | |
Selector | SelectorAbsEtaMax (double absetamax) |
select objects with |eta| <= absetamax | |
Selector | SelectorAbsEtaRange (double absetamin, double absetamax) |
select objects with absetamin <= |eta| <= absetamax | |
Selector | SelectorPhiRange (double phimin, double phimax) |
select objects with phimin <= phi <= phimax | |
Selector | SelectorRapPhiRange (double rapmin, double rapmax, double phimin, double phimax) |
select objects with rapmin <= rap <= rapmax && phimin <= phi <= phimax More... | |
Selector | SelectorNHardest (unsigned int n) |
select the n hardest objects | |
Selector | SelectorCircle (const double radius) |
select objets within a distance 'radius' from the location of the reference jet, set by Selector::set_reference(...) | |
Selector | SelectorDoughnut (const double radius_in, const double radius_out) |
select objets with distance from the reference jet is between 'radius_in' and 'radius_out'; the reference jet is set by Selector::set_reference(...) | |
Selector | SelectorStrip (const double half_width) |
select objets within a rapidity distance 'half_width' from the location of the reference jet, set by Selector::set_reference(...) | |
Selector | SelectorRectangle (const double half_rap_width, const double half_phi_width) |
select objets within rapidity distance 'half_rap_width' from the reference jet and azimuthal-angle distance within 'half_phi_width'; the reference jet is set by Selector::set_reference(...) | |
Selector | SelectorPtFractionMin (double fraction) |
select objects that carry at least a fraction "fraction" of the reference jet. More... | |
Selector | SelectorIsZero () |
select PseudoJet with 0 momentum | |
Selector | SelectorIsPureGhost () |
select objects that are (or are only made of) ghosts. More... | |
int | scomp (const void *p1, const void *p2) |
template<typename T > | |
PseudoJet | join (const std::vector< PseudoJet > &pieces) |
build a "CompositeJet" from the vector of its pieces with an extended structure of type T derived from CompositeJetStructure More... | |
template<typename T > | |
PseudoJet | join (const std::vector< PseudoJet > &pieces, const JetDefinition::Recombiner &recombiner) |
build a "CompositeJet" from the vector of its pieces with an extended structure of type T derived from CompositeJetStructure More... | |
bool | operator!= (const PseudoJet &a, const PseudoJet &b) |
inequality test which is exact opposite of operator== | |
bool | operator== (const double val, const PseudoJet &jet) |
bool | operator!= (const PseudoJet &a, const double val) |
Can only be used with val=0 and tests whether at least one of the four momentum components is different from val (=0.0) | |
bool | operator!= (const double val, const PseudoJet &a) |
double | dot_product (const PseudoJet &a, const PseudoJet &b) |
returns the 4-vector dot product of a and b | |
double | cos_theta (const PseudoJet &a, const PseudoJet &b) |
returns the cosine of the angle between a and b | |
double | theta (const PseudoJet &a, const PseudoJet &b) |
returns the angle between a and b | |
std::vector< PseudoJet > | sorted_by_pt (const std::vector< PseudoJet > &jets) |
return a vector of jets sorted into decreasing transverse momentum | |
std::vector< PseudoJet > | sorted_by_rapidity (const std::vector< PseudoJet > &jets) |
return a vector of jets sorted into increasing rapidity | |
std::vector< PseudoJet > | sorted_by_E (const std::vector< PseudoJet > &jets) |
return a vector of jets sorted into decreasing energy | |
std::vector< PseudoJet > | sorted_by_pz (const std::vector< PseudoJet > &jets) |
return a vector of jets sorted into increasing pz | |
void | sort_indices (std::vector< int > &indices, const std::vector< double > &values) |
sort the indices so that values[indices[0->n-1]] is sorted into increasing order | |
template<class T > | |
std::vector< T > | objects_sorted_by_values (const std::vector< T > &objects, const std::vector< double > &values) |
given a vector of values with a one-to-one correspondence with the vector of objects, sort objects into an order such that the associated values would be in increasing order (but don't actually touch the values vector in the process). | |
template<class T , class U > | |
bool | operator== (SharedPtr< T > const &t, SharedPtr< U > const &u) |
comparison: equality | |
template<class T , class U > | |
bool | operator!= (SharedPtr< T > const &t, SharedPtr< U > const &u) |
comparison: difference | |
template<class T , class U > | |
bool | operator< (SharedPtr< T > const &t, SharedPtr< U > const &u) |
comparison: orgering | |
template<class T > | |
void | swap (SharedPtr< T > &a, SharedPtr< T > &b) |
swapping | |
template<class T > | |
T * | get_pointer (SharedPtr< T > const &t) |
getting the pointer | |
bool | floor_ln2_less (unsigned x, unsigned y) |
returns true if floor(ln_base2(x)) < floor(ln_base2(y)), using Chan's neat trick... | |
template<class B , class D > | |
B * | cast_if_derived (D *d) |
a little helper that returns a pointer to d of type B* if D is derived from B and NULL otherwise | |
double | norm (const VPoint p) |
norm of a vector | |
double | vector_product (const VPoint &p1, const VPoint &p2) |
2D vector product | |
double | scalar_product (const VPoint &p1, const VPoint &p2) |
scalar product | |
template<class T > | |
T | deltaPhi (T phi1, T phi2) |
template<class T > | |
T | deltaR2 (T eta1, T phi1, T eta2, T phi2) |
Variables | |
BasicRandom< int > | _G_random_int |
BasicRandom< double > | _G_random_double |
const unsigned int | twopow31 = 2147483648U |
const JetAlgorithm | aachen_algorithm = cambridge_algorithm |
provide other possible names for the Cambridge/Aachen algorithm | |
const JetAlgorithm | cambridge_aachen_algorithm = cambridge_algorithm |
const double | MaxRap = 1e5 |
Used to protect against parton-level events where pt can be zero for some partons, giving rapidity=infinity. More... | |
const double | pseudojet_invalid_phi = -100.0 |
default value for phi, meaning it (and rapidity) have yet to be calculated) | |
const double | pseudojet_invalid_rap = -1e200 |
const double | tile_edge_security_margin =1.0e-7 |
Rounding errors in the Lazy strategies may cause the following problem: when browsing tiles in the vicinity of the particles being clustered in order to decide which of these tiles may contain particles that need to be updated (because theit NN is one of the particles that are currently clustered), we discard tiles that are deemed "too far from the cell" by the "max_NN_dist" criterion. More... | |
const int | n_tile_neighbours = 9 |
const double | pi = 3.141592653589793238462643383279502884197 |
const double | twopi = 6.283185307179586476925286766559005768394 |
const double | pisq = 9.869604401089358618834490999876151135314 |
const double | zeta2 = 1.644934066848226436472415166646025189219 |
const double | zeta3 = 1.202056903159594285399738161511449990765 |
const double | eulergamma = 0.577215664901532860606512090082402431042 |
const double | ln2 = 0.693147180559945309417232121458176568076 |
const int | INFINITE_VERTEX =-1 |
const int | NEW_VERTEX =-2 |
const double | HUGE_DOUBLE =1e300 |
the FastJet namespace
all the fastjet-related material is put under that namespace
just provide a typedef for backwards compatibility with programs based on versions 2.0 and 2.1 of fastjet.
Since there is no easy way of telling people this is deprecated at compile or run time, we should be careful before removing this in the future.
Definition at line 248 of file GhostedAreaSpec.hh.
enum fastjet::Strategy |
the various options for the algorithmic strategy to adopt in clustering events with kt and cambridge style algorithms.
Definition at line 51 of file JetDefinition.hh.
the various families of jet-clustering algorithm
Enumerator | |
---|---|
kt_algorithm | the longitudinally invariant kt algorithm |
cambridge_algorithm | the longitudinally invariant variant of the cambridge algorithm (aka Aachen algoithm). |
antikt_algorithm | like the k_t but with distance measures dij = min(1/kti^2,1/ktj^2) Delta R_{ij}^2 / R^2 diB = 1/kti^2 |
genkt_algorithm | like the k_t but with distance measures dij = min(kti^{2p},ktj^{2p}) Delta R_{ij}^2 / R^2 diB = 1/kti^{2p} where p = extra_param() |
cambridge_for_passive_algorithm | a version of cambridge with a special distance measure for particles whose pt is < extra_param(); this is not usually intended for end users, but is instead automatically selected when requesting a passive Cambridge area. |
genkt_for_passive_algorithm | a version of genkt with a special distance measure for particles whose pt is < extra_param() [relevant for passive areas when p<=0] ***** NB: THERE IS CURRENTLY NO IMPLEMENTATION FOR THIS ALG ******* |
ee_kt_algorithm | the e+e- kt algorithm |
ee_genkt_algorithm | the e+e- genkt algorithm (R > 2 and p=1 gives ee_kt) |
plugin_algorithm | any plugin algorithm supplied by the user |
undefined_jet_algorithm | the value for the jet algorithm in a JetDefinition for which no algorithm has yet been defined |
Definition at line 137 of file JetDefinition.hh.
The various recombination schemes.
Note that the schemes that recombine with non-linear weighting of the directions (e.g. pt2, winner-takes-all) are collinear safe only for algorithms with a suitable ordering of the recombinations: orderings in which, for particles of comparable energies, small-angle clusterings take place before large-angle clusterings. This property is satisfied by all gen-kt algorithms.
Enumerator | |
---|---|
E_scheme | summing the 4-momenta |
pt_scheme | pt weighted recombination of y,phi (and summing of pt's) with preprocessing to make things massless by rescaling E=|\vec p| |
pt2_scheme | pt^2 weighted recombination of y,phi (and summing of pt's) with preprocessing to make things massless by rescaling E=|\vec p| |
Et_scheme | pt weighted recombination of y,phi (and summing of pt's) with preprocessing to make things massless by rescaling |\vec p|->=E |
Et2_scheme | pt^2 weighted recombination of y,phi (and summing of pt's) with preprocessing to make things massless by rescaling |\vec p|->=E |
BIpt_scheme | pt weighted recombination of y,phi (and summing of pt's), with no preprocessing |
BIpt2_scheme | pt^2 weighted recombination of y,phi (and summing of pt's) no preprocessing |
WTA_pt_scheme | pt-based Winner-Takes-All (WTA) recombination: the result of the recombination has the rapidity, azimuth and mass of the PseudoJet with the larger pt, and a pt equal to the sum of the two pt's |
WTA_modp_scheme | mod-p-based Winner-Takes-All (WTA) recombination: the result of the recombination gets the 3-vector direction and mass of the PseudoJet with the larger |3-momentum| (modp), and a |3-momentum| equal to the scalar sum of the two |3-momenta|. |
external_scheme | for the user's external scheme |
Definition at line 193 of file JetDefinition.hh.
PseudoJet fastjet::join | ( | const PseudoJet & | j1, |
const JetDefinition::Recombiner & | recombiner | ||
) |
build a "CompositeJet" from a single PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from a single PseudoJet
Definition at line 475 of file JetDefinition.cc.
PseudoJet fastjet::join | ( | const PseudoJet & | j1, |
const PseudoJet & | j2, | ||
const JetDefinition::Recombiner & | recombiner | ||
) |
build a "CompositeJet" from two PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 2 PseudoJet
Definition at line 481 of file JetDefinition.cc.
PseudoJet fastjet::join | ( | const PseudoJet & | j1, |
const PseudoJet & | j2, | ||
const PseudoJet & | j3, | ||
const JetDefinition::Recombiner & | recombiner | ||
) |
build a "CompositeJet" from 3 PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 3 PseudoJet
Definition at line 490 of file JetDefinition.cc.
PseudoJet fastjet::join | ( | const PseudoJet & | j1, |
const PseudoJet & | j2, | ||
const PseudoJet & | j3, | ||
const PseudoJet & | j4, | ||
const JetDefinition::Recombiner & | recombiner | ||
) |
build a "CompositeJet" from 4 PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 4 PseudoJet
Definition at line 500 of file JetDefinition.cc.
returns true if the 4 momentum components of the two PseudoJets are identical and all the internal indices (user, cluster_history)
Definition at line 255 of file PseudoJet.cc.
PseudoJet fastjet::PtYPhiM | ( | double | pt, |
double | y, | ||
double | phi, | ||
double | m | ||
) |
return a pseudojet with the given pt, y, phi and mass
return a pseudojet with the given pt, y, phi and mass (phi should satisfy -2pi<phi<4pi)
Definition at line 365 of file PseudoJet.cc.
build a "CompositeJet" from a single PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from a single PseudoJet
Definition at line 831 of file PseudoJet.cc.
build a "CompositeJet" from two PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 2 PseudoJet
Definition at line 836 of file PseudoJet.cc.
build a "CompositeJet" from 3 PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 3 PseudoJet
Definition at line 845 of file PseudoJet.cc.
PseudoJet fastjet::join | ( | const PseudoJet & | j1, |
const PseudoJet & | j2, | ||
const PseudoJet & | j3, | ||
const PseudoJet & | j4 | ||
) |
build a "CompositeJet" from 4 PseudoJet with an extended structure of type T derived from CompositeJetStructure
build a MergedJet from 4 PseudoJet
Definition at line 855 of file PseudoJet.cc.
build a "CompositeJet" from the vector of its pieces with an extended structure of type T derived from CompositeJetStructure
build a "CompositeJet" from the vector of its pieces
In this case, E-scheme recombination is assumed to compute the total momentum
Definition at line 155 of file CompositeJetStructure.hh.
PseudoJet fastjet::join | ( | const std::vector< PseudoJet > & | pieces, |
const JetDefinition::Recombiner & | recombiner | ||
) |
build a "CompositeJet" from the vector of its pieces with an extended structure of type T derived from CompositeJetStructure
build a "CompositeJet" from the vector of its pieces
In this case, E-scheme recombination is assumed to compute the total momentum
Definition at line 218 of file CompositeJetStructure.hh.
const double fastjet::MaxRap = 1e5 |
Used to protect against parton-level events where pt can be zero for some partons, giving rapidity=infinity.
KtJet fails in those cases.
Definition at line 52 of file PseudoJet.hh.
const double fastjet::tile_edge_security_margin =1.0e-7 |
Rounding errors in the Lazy strategies may cause the following problem: when browsing tiles in the vicinity of the particles being clustered in order to decide which of these tiles may contain particles that need to be updated (because theit NN is one of the particles that are currently clustered), we discard tiles that are deemed "too far from the cell" by the "max_NN_dist" criterion.
Because of rounding error, this condition can sometimes miss cases where an update is needed.
An example of this happens if a particle '1' is, say, at the lower edge of the rapidity of a given tile, with a particle '2' in the tile directly on its left at the same rapidity. Assume also that max_NN_dist in 2's tile corresponds to the distance between 2 and teh tile of 1. If 2 is 1's NN then in case 2 gets clustered, 1's NN needs to be updated. However, rounding errors in the calculation of the distance between 1 and 2 may result is something slightly larger than the max_NN_dist in 2's tile.
This situation corresponds to the bug reported by Jochen Olt on February 12 2015 [see issue-tracker/2015-02-infinite-loop], causing an infinite loop.
To prevent this, the simplest solution is, when looking at tiles to browse for updateds, to add a margin of security close to the edges of the cell, i.e. instead of updating only tiles for which distance<=max_NN_dist, we will update tiles for which distance<=max_NN_dist+tile_edge_security_margin.
Note that this does not need to be done when computing nearest neighbours [rounding errors are tolerated there] but it is critical when tracking points that have to be updated.
Definition at line 71 of file LazyTiling9Alt.hh.