Fork me on GitHub

source: git/external/fastjet/PseudoJetStructureBase.cc@ 7b0e00c

Last change on this file since 7b0e00c was 35cdc46, checked in by Pavel Demin <demin@…>, 10 years ago

upgrade FastJet to version 3.1.0-beta.1, upgrade Nsubjettiness to version 2.1.0, add SoftKiller version 1.0.0

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