Fork me on GitHub

source: git/external/fastjet/PseudoJetStructureBase.hh@ d612dec

Last change on this file since d612dec was cb80e6f, checked in by Pavel Demin <pavel.demin@…>, 4 years ago

update FastJet library to 3.3.4 and FastJet Contrib library to 1.045

  • Property mode set to 100644
File size: 9.3 KB
Line 
1#ifndef __FASTJET_PSEUDOJET_STRUCTURE_BASE_HH__
2#define __FASTJET_PSEUDOJET_STRUCTURE_BASE_HH__
3
4//FJSTARTHEADER
5// $Id: PseudoJetStructureBase.hh 4442 2020-05-05 07:50:11Z soyez $
6//
7// Copyright (c) 2005-2020, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
8//
9//----------------------------------------------------------------------
10// This file is part of FastJet.
11//
12// FastJet is free software; you can redistribute it and/or modify
13// it under the terms of the GNU General Public License as published by
14// the Free Software Foundation; either version 2 of the License, or
15// (at your option) any later version.
16//
17// The algorithms that underlie FastJet have required considerable
18// development. They are described in the original FastJet paper,
19// hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
20// FastJet as part of work towards a scientific publication, please
21// quote the version you use and include a citation to the manual and
22// optionally also to hep-ph/0512210.
23//
24// FastJet is distributed in the hope that it will be useful,
25// but WITHOUT ANY WARRANTY; without even the implied warranty of
26// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27// GNU General Public License for more details.
28//
29// You should have received a copy of the GNU General Public License
30// along with FastJet. If not, see <http://www.gnu.org/licenses/>.
31//----------------------------------------------------------------------
32//FJENDHEADER
33
34
35#include "fastjet/internal/base.hh"
36
37#include <vector>
38#include <string>
39
40FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
41
42class PseudoJet;
43class ClusterSequence;
44#ifndef __FJCORE__
45class ClusterSequenceAreaBase;
46#endif // __FJCORE__
47
48/// @ingroup extra_info
49/// \class PseudoJetStructureBase
50///
51/// Contains any information related to the clustering that should be
52/// directly accessible to PseudoJet.
53///
54/// By default, this class implements basic access to the
55/// ClusterSequence related to a PseudoJet (like its constituents or
56/// its area). But it can be overloaded in order e.g. to give access
57/// to the jet substructure.
58///
59class PseudoJetStructureBase{
60public:
61 /// default ctor
62 PseudoJetStructureBase(){};
63
64 /// default (virtual) dtor
65 virtual ~PseudoJetStructureBase(){};
66
67 /// description
68 virtual std::string description() const{ return "PseudoJet with an unknown structure"; }
69
70 //-------------------------------------------------------------
71 /// @name Direct access to the associated ClusterSequence object.
72 ///
73 /// Get access to the associated ClusterSequence (if any)
74 //\{
75 //-------------------------------------------------------------
76 /// returns true if there is an associated ClusterSequence
77 virtual bool has_associated_cluster_sequence() const { return false;}
78
79 /// get a (const) pointer to the parent ClusterSequence (NULL if
80 /// inexistent)
81 virtual const ClusterSequence* associated_cluster_sequence() const;
82
83 /// returns true if this PseudoJet has an associated and still
84 /// valid ClusterSequence.
85 virtual bool has_valid_cluster_sequence() const {return false;}
86
87 /// if the jet has a valid associated cluster sequence then return a
88 /// pointer to it; otherwise throw an error
89 virtual const ClusterSequence * validated_cs() const;
90
91#ifndef __FJCORE__
92 /// if the jet has valid area information then return a pointer to
93 /// the associated ClusterSequenceAreaBase object; otherwise throw an error
94 virtual const ClusterSequenceAreaBase * validated_csab() const;
95#endif
96
97 //\}
98
99 //-------------------------------------------------------------
100 /// @name Methods for access to information about jet structure
101 ///
102 /// These allow access to jet constituents, and other jet
103 /// subtructure information. They only work if the jet is associated
104 /// with a ClusterSequence.
105 //-------------------------------------------------------------
106 //\{
107
108 /// check if it has been recombined with another PseudoJet in which
109 /// case, return its partner through the argument. Otherwise,
110 /// 'partner' is set to 0.
111 ///
112 /// By default, throws an Error
113 virtual bool has_partner(const PseudoJet &reference, PseudoJet &partner) const;
114
115 /// check if it has been recombined with another PseudoJet in which
116 /// case, return its child through the argument. Otherwise, 'child'
117 /// is set to 0.
118 ///
119 /// By default, throws an Error
120 virtual bool has_child(const PseudoJet &reference, PseudoJet &child) const;
121
122 /// check if it is the product of a recombination, in which case
123 /// return the 2 parents through the 'parent1' and 'parent2'
124 /// arguments. Otherwise, set these to 0.
125 ///
126 /// By default, throws an Error
127 virtual bool has_parents(const PseudoJet &reference, PseudoJet &parent1, PseudoJet &parent2) const;
128
129 /// check if the reference PseudoJet is contained the second one
130 /// passed as argument.
131 ///
132 /// By default, throws an Error
133 virtual bool object_in_jet(const PseudoJet &reference, const PseudoJet &jet) const;
134
135
136 /// return true if the structure supports constituents.
137 ///
138 /// false by default
139 virtual bool has_constituents() const {return false;}
140
141 /// retrieve the constituents.
142 ///
143 /// By default, throws an Error
144 virtual std::vector<PseudoJet> constituents(const PseudoJet &reference) const;
145
146
147 /// return true if the structure supports exclusive_subjets.
148 virtual bool has_exclusive_subjets() const {return false;}
149
150 /// return a vector of all subjets of the current jet (in the sense
151 /// of the exclusive algorithm) that would be obtained when running
152 /// the algorithm with the given dcut.
153 ///
154 /// Time taken is O(m ln m), where m is the number of subjets that
155 /// are found. If m gets to be of order of the total number of
156 /// constituents in the jet, this could be substantially slower than
157 /// just getting that list of constituents.
158 ///
159 /// By default, throws an Error
160 ///
161 /// Note: in a future major release of FastJet (4 or higher),
162 /// "const double & dcut" may be replaced with "const double dcut",
163 /// requiring a modification of derived classes that overload
164 /// this function.
165 virtual std::vector<PseudoJet> exclusive_subjets(const PseudoJet &reference, const double & dcut) const;
166
167 /// return the size of exclusive_subjets(...); still n ln n with same
168 /// coefficient, but marginally more efficient than manually taking
169 /// exclusive_subjets.size()
170 ///
171 /// By default, throws an Error
172 ///
173 /// Note: in a future major release of FastJet (4 or higher),
174 /// "const double & dcut" may be replaced with "const double dcut",
175 /// requiring a modification of derived classes that overload
176 /// this function.
177 virtual int n_exclusive_subjets(const PseudoJet &reference, const double & dcut) const;
178
179 /// return the list of subjets obtained by unclustering the supplied
180 /// jet down to nsub subjets (or all constituents if there are fewer
181 /// than nsub).
182 ///
183 /// By default, throws an Error
184 virtual std::vector<PseudoJet> exclusive_subjets_up_to (const PseudoJet &reference, int nsub) const;
185
186 /// return the dij that was present in the merging nsub+1 -> nsub
187 /// subjets inside this jet.
188 ///
189 /// By default, throws an Error
190 virtual double exclusive_subdmerge(const PseudoJet &reference, int nsub) const;
191
192 /// return the maximum dij that occurred in the whole event at the
193 /// stage that the nsub+1 -> nsub merge of subjets occurred inside
194 /// this jet.
195 ///
196 /// By default, throws an Error
197 virtual double exclusive_subdmerge_max(const PseudoJet &reference, int nsub) const;
198
199
200 //-------------------------------------------------------------------
201 // information related to the pieces of the jet
202 //-------------------------------------------------------------------
203 /// return true if the structure supports pieces.
204 ///
205 /// false by default
206 /// NB: "reference" is commented to avoid unused-variable compiler warnings
207 virtual bool has_pieces(const PseudoJet & /* reference */) const {
208 return false;}
209
210 /// retrieve the pieces building the jet.
211 ///
212 /// By default, throws an Error.
213 /// NB: "reference" is commented to avoid unused-variable compiler warnings
214 virtual std::vector<PseudoJet> pieces(const PseudoJet & /* reference */
215 ) const;
216
217
218 // the following ones require a computation of the area in the
219 // parent ClusterSequence (See ClusterSequenceAreaBase for details)
220 //------------------------------------------------------------------
221#ifndef __FJCORE__
222
223 /// check if it has a defined area
224 ///
225 /// false by default
226 virtual bool has_area() const {return false;}
227
228 /// return the jet (scalar) area.
229 ///
230 /// By default, throws an Error
231 virtual double area(const PseudoJet &reference) const;
232
233 /// return the error (uncertainty) associated with the determination
234 /// of the area of this jet.
235 ///
236 /// By default, throws an Error
237 virtual double area_error(const PseudoJet &reference) const;
238
239 /// return the jet 4-vector area.
240 ///
241 /// By default, throws an Error
242 virtual PseudoJet area_4vector(const PseudoJet &reference) const;
243
244 /// true if this jet is made exclusively of ghosts.
245 ///
246 /// By default, throws an Error
247 virtual bool is_pure_ghost(const PseudoJet &reference) const;
248
249#endif // __FJCORE__
250 //\} --- end of jet structure -------------------------------------
251};
252
253FASTJET_END_NAMESPACE
254
255#endif // __FASTJET_PSEUDOJET_STRUCTURE_BASE_HH__
Note: See TracBrowser for help on using the repository browser.