2 #ifndef __FASTJET_CLUSTERQUENCE_N2_ICC__
3 #define __FASTJET_CLUSTERQUENCE_N2_ICC__
4 #include "fastjet/ClusterSequence.hh"
46 FASTJET_BEGIN_NAMESPACE
53 template<
class BJ>
void ClusterSequence::_simple_N2_cluster() {
55 BJ * briefjets =
new BJ[n];
56 BJ * jetA = briefjets, * jetB;
59 for (
int i = 0; i< n; i++) {
60 _bj_set_jetinfo(jetA, i);
64 BJ * head = briefjets;
68 for (jetA = head + 1; jetA != tail; jetA++) {
72 _bj_set_NN_crosscheck(jetA, head, jetA);
78 double * diJ =
new double[n];
80 for (
int i = 0; i < n; i++) {
81 diJ[i] = _bj_diJ(jetA);
86 int history_location = n-1;
87 while (tail != head) {
90 double diJ_min = diJ[0];
92 for (
int i = 1; i < n; i++) {
93 if (diJ[i] < diJ_min) {diJ_min_jet = i; diJ_min = diJ[i];}
98 jetA = & briefjets[diJ_min_jet];
101 jetB =
static_cast<BJ *
>(jetA->NN);
110 if (jetA < jetB) {std::swap(jetA,jetB);}
113 _do_ij_recombination_step(jetA->_jets_index, jetB->_jets_index, diJ_min, nn);
116 _bj_set_jetinfo(jetB, nn);
120 _do_iB_recombination_step(jetA->_jets_index, diJ_min);
128 diJ[jetA - head] = diJ[tail-head];
136 for (BJ * jetI = head; jetI != tail; jetI++) {
138 if (jetI->NN == jetA || jetI->NN == jetB) {
139 _bj_set_NN_nocross(jetI, head, tail);
140 diJ[jetI-head] = _bj_diJ(jetI);
145 double dist = _bj_dist(jetI,jetB);
146 if (dist < jetI->NN_dist) {
148 jetI->NN_dist = dist;
150 diJ[jetI-head] = _bj_diJ(jetI);
153 if (dist < jetB->NN_dist) {
155 jetB->NN_dist = dist;
160 if (jetI->NN == tail) {jetI->NN = jetA;}
164 if (jetB != NULL) {diJ[jetB-head] = _bj_diJ(jetB);}
196 FASTJET_END_NAMESPACE
198 #endif // __FASTJET_CLUSTERQUENCE_N2_ICC__