source: HiSusy/trunk/Delphes-3.0.0/external/fastjet/plugins/SISCone/vicinity.h @ 1

Last change on this file since 1 was 1, checked in by zerwas, 11 years ago

first import of structure, PYTHIA8 and DELPHES

File size: 5.8 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:: 859                                                          $//
25// $Date:: 2012-11-28 02:49:23 +0100 (Wed, 28 Nov 2012)                     $//
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.