]> git.uio.no Git - u/mrichter/AliRoot.git/blob - JETAN/fastjet/siscone/vicinity.h
added pdet-ppart over ppart histogram for detector response
[u/mrichter/AliRoot.git] / JETAN / fastjet / siscone / vicinity.h
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:: 123                                                          $//
25 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
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
37 namespace 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  */
46 class Cvicinity_inclusion {
47 public:
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  */
63 class 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
85 bool 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  */
95 class 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