45 bool ve_less(Cvicinity_elm *ve1, Cvicinity_elm *ve2){
46 return ve1->angle < ve2->angle;
64 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
77 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
82 set_particle_list(_particle_list);
91 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
104 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
113 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
124 for (i=0;i<(int) _particle_list.size();i++){
127 if (fabs(_particle_list[i].pz)!=_particle_list[i].E){
128 plist.push_back(_particle_list[i]);
135 plist[n_part].index = n_part;
138 plist[n_part].ref.randomize();
140 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
141 if (fabs(plist[n_part].eta)>eta_max) eta_max=fabs(plist[n_part].eta);
151 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
153 quadtree =
new Cquadtree(0.0, 0.0, eta_max, M_PI);
158 for (i=0;i<n_part;i++){
159 #ifdef USE_QUADTREE_FOR_STABILITY_TEST
160 quadtree->add(&plist[i]);
162 ve_list[j].v = ve_list[j+1].v = &plist[i];
163 ve_list[j].is_inside = ve_list[j+1].is_inside = &(pincluded[i]);
195 for (i=0;i<n_part;i++){
196 append_to_vicinity(&plist[i]);
200 sort(vicinity.begin(), vicinity.end(), ve_less);
202 vicinity_size = vicinity.size();
207 inline double sort_angle(
double s,
double c){
208 if (s==0)
return (c>0) ? 0.0 : 2.0;
210 return (s>0) ? 1-t/(1+fabs(t)) : 3-t/(1+fabs(t));
247 tmp = sqrt(VR2/d2-1);
252 ve_list[i].angle = sort_angle(s,c);
253 ve_list[i].eta = pcx+c;
254 ve_list[i].phi = phi_in_range(pcy+s);
255 ve_list[i].side =
true;
256 ve_list[i].cocircular.clear();
257 vicinity.push_back(&(ve_list[i]));
262 ve_list[i+1].angle = sort_angle(s,c);
263 ve_list[i+1].eta = pcx+c;
264 ve_list[i+1].phi = phi_in_range(pcy+s);
265 ve_list[i+1].side =
false;
266 ve_list[i+1].cocircular.clear();
267 vicinity.push_back(&(ve_list[i+1]));
273 Ctwovect OP(pcx - ve_list[i+1].eta, phi_in_range(pcy-ve_list[i+1].phi));
275 phi_in_range(v->
phi-ve_list[i+1].phi));
284 c = dot_product(OP,OC);
285 s = fabs(cross_product(OP,OC));
286 double inv_err1 = s * inv_R_EPS_COCIRC;
287 double inv_err2_sq = (R2-c) * inv_R_2EPS_COCIRC;
288 ve_list[i].cocircular_range = pow2(inv_err1) > inv_err2_sq ?
290 sqrt(1.0/inv_err2_sq);
291 ve_list[i+1].cocircular_range = ve_list[i].cocircular_range;