source: trunk/SISCone/hash.h@ 20

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

add SISCone library

File size: 4.2 KB
RevLine 
[20]1// -*- C++ -*-
2///////////////////////////////////////////////////////////////////////////////
3// File: hash.h //
4// Description: header file for classes hash_element and hash_cones //
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:26 $//
26///////////////////////////////////////////////////////////////////////////////
27
28#ifndef __HASH_H__
29#define __HASH_H__
30
31#include "momentum.h"
32#include "reference.h"
33
34namespace siscone{
35
36/**
37 * \class hash_element
38 * information on store cones candidates.
39 *
40 * We store in this class the information used to count all
41 * protocones in a first pass. This first pass only count
42 * cones with different references and test their stbility
43 * with the parent-child particles (border particles).
44 */
45class hash_element{
46 public:
47 Creference ref; ///< reference
48 double eta; ///< centre: eta coordinate
49 double phi; ///< centre: phi coordinate
50 bool is_stable; ///< true if stable w.r.t. "border particles"
51
52 hash_element *next; ///< pointer to the next element
53};
54
55/**
56 * \class hash_cones
57 * list of cones candidates.
58 *
59 * We store in this class all the hash_elements and give
60 * functions to manipulate them.
61 */
62class hash_cones{
63 public:
64 /// constructor with initialisation
65 /// \param _Np number of particles
66 /// \param _R2 cone radius (squared)
67 hash_cones(int _Np, double _R2);
68
69 /// destructor
70 ~hash_cones();
71
72 /**
73 * insert a new candidate into the hash.
74 * \param v 4-momentum of te cone to add
75 * \param parent parent particle defining the cone
76 * \param child child particle defining the cone
77 * \param p_io whether the parent has to belong to the cone or not
78 * \param c_io whether the child has to belong to the cone or not
79 * \return 0 on success, 1 on error
80 */
81 int insert(Cmomentum *v, Cmomentum *parent, Cmomentum *child, bool p_io, bool c_io);
82
83 /**
84 * insert a new candidate into the hash.
85 * \param v 4-momentum of te cone to add
86 * Note, in this case, we assume stability. We also assume
87 * that eta and phi are computed for v
88 * \return 0 on success, 1 on error
89 */
90 int insert(Cmomentum *v);
91
92 /// the cone data itself
93 hash_element **hash_array;
94
95 /// number of elements
96 int n_cones;
97
98 /// number of cells-1
99 int mask;
100
101 /// circle radius (squared)
102 /// NOTE: need to be set before any call to 'insert'
103 double R2;
104
105 /**
106 * test if a particle is inside a cone of given centre.
107 * check if the particle of coordinates 'v' is inside the circle of radius R
108 * centered at 'centre'.
109 * \param centre centre of the circle
110 * \param v particle to test
111 * \return true if inside, false if outside
112 */
113 inline bool is_inside(Cmomentum *centre, Cmomentum *v);
114};
115
116}
117#endif
Note: See TracBrowser for help on using the repository browser.