source: trunk/SISCone/vicinity.h@ 23

Last change on this file since 23 was 20, checked in by Pavel Demin, 16 years ago

add SISCone library

File size: 5.7 KB
Line 
1// -*- C++ -*-
2///////////////////////////////////////////////////////////////////////////////
3// File: vicinity.h //
4// Description: header file for particle vicinity (Cvicinity class) //
5// This file is part of the SISCone project. //
6// For more details, see http://projects.hepforge.org/siscone //
7// //
8// Copyright (c) 2006 Gavin Salam and Gregory Soyez //
9// //
10// This program is free software; you can redistribute it and/or modify //
11// it under the terms of the GNU General Public License as published by //
12// the Free Software Foundation; either version 2 of the License, or //
13// (at your option) any later version. //
14// //
15// This program is distributed in the hope that it will be useful, //
16// but WITHOUT ANY WARRANTY; without even the implied warranty of //
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
18// GNU General Public License for more details. //
19// //
20// You should have received a copy of the GNU General Public License //
21// along with this program; if not, write to the Free Software //
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
23// //
24// $Revision: 1.1 $//
25// $Date: 2008-10-02 15:20:30 $//
26///////////////////////////////////////////////////////////////////////////////
27
28#ifndef __VICINITY_H__
29#define __VICINITY_H__
30
31#include <vector>
32#include <list>
33#include "momentum.h"
34#include "defines.h"
35#include "quadtree.h"
36
37namespace siscone{
38
39
40
41/**
42 * \class Cvicinity_inclusion
43 * \brief a class to keep track of inclusion status in cone and in cocircular region
44 * while using minimal resources
45 */
46class Cvicinity_inclusion {
47public:
48 /// default ctor
49 Cvicinity_inclusion() : cone(false), cocirc(false) {}
50
51 bool cone; ///< flag for particle inclusion in the cone
52 bool cocirc; ///< flag for particle inclusion in the border
53};
54
55
56/**
57 * \class Cvicinity_elm
58 * \brief element in the vicinity of a parent.
59 *
60 * class used to manage one points in the vicinity
61 * of a parent point.
62 */
63class Cvicinity_elm{
64 public:
65 /// pointer to the second borderline particle
66 Cmomentum *v;
67
68 /// variable to tell if the particle is inside or outside the cone
69 Cvicinity_inclusion *is_inside;
70
71 // centre variables
72 double eta; ///< eta coordinate of the center
73 double phi; ///< phi coordinate of the center
74 double angle; ///< angle with parent
75 bool side; ///< true if angle on the positive side, false otherwise
76 double cocircular_range; ///< amount by which the angle can be varied while
77 ///< maintaining this point within co-circularity margin
78
79 /// list of elements co-circular with this one
80 /// NB: empty list uses less mem than vector
81 std::list<Cvicinity_elm * > cocircular;
82};
83
84/// ordering pointers to Cvicinity_elm
85bool ve_less(Cvicinity_elm *ve1, Cvicinity_elm *ve2);
86
87
88/**
89 * \class Cvicinity
90 * \brief list of element in the vicinity of a parent.
91 *
92 * class used to manage the points which are in the vicinity
93 * of a parent point.
94 */
95class Cvicinity{
96 public:
97 /// default constructor
98 Cvicinity();
99
100 /// constructor with initialisation (see set_particle_list)
101 Cvicinity(std::vector<Cmomentum> &_particle_list);
102
103 /// default destructor
104 ~Cvicinity();
105
106 /**
107 * set the particle_list
108 * \param _particle_list list of particles (type Cmomentum)
109 */
110 void set_particle_list(std::vector<Cmomentum> &_particle_list);
111
112 /**
113 * build the vicinity list from the list of points.
114 * \param _parent reference particle
115 * \param _VR vicinity radius
116 */
117 void build(Cmomentum *_parent, double _VR);
118
119 // cone kinematical information
120 Cmomentum *parent; ///< parent vector
121 double VR; ///< radius of the vicinity
122 double VR2; ///< squared radius of the vicinity
123 double R; ///< normal radius
124 double R2; ///< squared normal radius
125 double inv_R_EPS_COCIRC; ///< R / EPSILON_COCIRCULAR
126 double inv_R_2EPS_COCIRC; ///< R / (2*EPSILON_COCIRCULAR)
127
128 // particle list information
129 int n_part; ///< number of particles
130 std::vector<Cmomentum> plist; ///< the list of particles
131 std::vector<Cvicinity_inclusion> pincluded; ///< the inclusion state of particles
132 Cvicinity_elm *ve_list; ///< list of vicinity elements built from particle list (size=2*n)
133#ifdef USE_QUADTREE_FOR_STABILITY_TEST
134 Cquadtree *quadtree; ///< quadtree used for final stability tests
135#endif
136
137 // vicinity information
138 std::vector<Cvicinity_elm*> vicinity; ///< list of points in parent's vicinity
139 unsigned int vicinity_size; ///< number of elements in vicinity
140
141 protected:
142 /**
143 * append a particle to the 'vicinity' list after
144 * having tested it and computed the angular-ordering quantities
145 * \param v vector to test
146 */
147 void append_to_vicinity(Cmomentum *v);
148
149 // internal variables
150 double pcx; ///< parent centre (eta)
151 double pcy; ///< parent centre (phi)
152};
153
154}
155
156#endif
Note: See TracBrowser for help on using the repository browser.