FastJet 3.4.1
fastjet_areas.cc
1
2//STARTHEADER
3// $Id$
4//
5// Copyright (c) 2005-2018, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
6//
7//----------------------------------------------------------------------
8// This file is part of FastJet.
9//
10// FastJet 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// The algorithms that underlie FastJet have required considerable
16// development and are described in hep-ph/0512210. If you use
17// FastJet as part of work towards a scientific publication, please
18// include a citation to the FastJet paper.
19//
20// FastJet is distributed in the hope that it will be useful,
21// but WITHOUT ANY WARRANTY; without even the implied warranty of
22// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23// GNU General Public License for more details.
24//
25// You should have received a copy of the GNU General Public License
26// along with FastJet. If not, see <http://www.gnu.org/licenses/>.
27//----------------------------------------------------------------------
28//ENDHEADER
29
30
31
32
33
34
35
36//----------------------------------------------------------------------
37// fastjet areas example program.
38//
39// Compile it with: make fastjet_areas
40// run it with : ./fastjet_areas < data/single-event.dat
41//
42//----------------------------------------------------------------------
43#include "fastjet/PseudoJet.hh"
44#include "fastjet/ClusterSequenceArea.hh"
45#include "fastjet/ClusterSequencePassiveArea.hh"
46
47// get info on how fastjet was configured
48#include "fastjet/config.h"
49
50#ifdef ENABLE_PLUGIN_SISCONE
51#include "fastjet/SISConePlugin.hh"
52#endif
53
54#include<iostream> // needed for io
55#include<sstream> // needed for internal io
56#include<vector>
57
58using namespace std;
59
60// a declaration of a function that pretty prints a list of jets
61void print_jets (const vector<fastjet::PseudoJet> &);
62
63/// an example program showing how to use fastjet
64int main () {
65
66 vector<fastjet::PseudoJet> input_particles;
67
68 // read in input particles
69 double px, py , pz, E;
70 while (cin >> px >> py >> pz >> E) {
71 // create a fastjet::PseudoJet with these components and put it onto
72 // back of the input_particles vector
73 input_particles.push_back(fastjet::PseudoJet(px,py,pz,E));
74 }
75
76 // create an object that represents your choice of jet algorithm, and
77 // the associated parameters
78 double Rparam = 1.0;
81 //fastjet::JetDefinition jet_def(fastjet::cambridge_algorithm, Rparam, strategy);
82 //fastjet::JetDefinition jet_def(fastjet::antikt_algorithm, Rparam, strategy);
83 //fastjet::JetDefinition jet_def(new fastjet::SISConePlugin(Rparam,0.75));
84
85 // create an object that specifies how we to define the area
87 bool use_voronoi = false;
88 if (!use_voronoi) {
89 double ghost_etamax = 6.0;
90 double ghost_area = 0.01;
91 int active_area_repeats = 1;
92
93 // now create the object that holds info about ghosts, and from that
94 // get an area definition
95 fastjet::GhostedAreaSpec ghost_spec(ghost_etamax, active_area_repeats,
96 ghost_area);
97 area_def = fastjet::AreaDefinition(fastjet::active_area,ghost_spec);
98 //area_def = fastjet::AreaDefinition(fastjet::passive_area,ghost_spec);
99 } else {
100 double effective_Rfact = 1.0;
101 area_def = fastjet::VoronoiAreaSpec(effective_Rfact);
102 }
103
104 // run the jet clustering with the above jet definition
105 fastjet::ClusterSequenceArea clust_seq(input_particles,
106 jet_def, area_def);
107 // you can also run the individual area classes directly
108 //fastjet::ClusterSequencePassiveArea clust_seq(input_particles, jet_def,
109 // area_def.ghost_spec());
110
111 // you may want to find out how much area in a given range (|y|<range)
112 // is empty of real jets (or corresponds to pure "ghost" jets).
113 //double range = 4.0;
114 //cout << clust_seq.empty_area(range) << endl;
115 //cout << clust_seq.n_empty_jets(range) << endl;
116
117 // tell the user what was done
118 cout << "Jet definition was: " << jet_def.description() << endl;
119 cout << "Area definition was: " << area_def.description() << endl;
120 cout << "Strategy adopted by FastJet was "<<
121 clust_seq.strategy_string()<<endl<<endl;
122
123 // extract the inclusive jets with pt > 5 GeV, sorted by pt
124 double ptmin = 5.0;
125 vector<fastjet::PseudoJet> inclusive_jets = clust_seq.inclusive_jets(ptmin);
126
127 // print them out
128 cout << "Printing inclusive jets with pt > "<< ptmin<<" GeV\n";
129 cout << "---------------------------------------\n";
130 print_jets(inclusive_jets);
131 cout << endl;
132
133
134 cout << "Number of unclustered particles: "
135 << clust_seq.unclustered_particles().size() << endl;
136
137
138}
139
140
141//----------------------------------------------------------------------
142/// a function that pretty prints a list of jets
143void print_jets (const vector<fastjet::PseudoJet> & unsorted_jets) {
144
145 // sort jets into increasing pt
146 vector<fastjet::PseudoJet> jets = sorted_by_pt(unsorted_jets);
147
148 printf(" ijet rap phi Pt area +- err\n");
149 for (unsigned int j = 0; j < jets.size(); j++) {
150
151 double area = jets[j].area();
152 double area_error = jets[j].area_error();
153
154 printf("%5u %9.5f %8.5f %10.3f %8.3f +- %6.3f\n",j,jets[j].rap(),
155 jets[j].phi(),jets[j].perp(), area, area_error);
156 }
157
158
159}
160
161
162
163
164
165
166
int main()
an example program showing how to use fastjet
Definition: 01-basic.cc:50
class that holds a generic area definition
std::string description() const
return a description of the current area definition
General class for user to obtain ClusterSequence with additional area information.
Parameters to configure the computation of jet areas using ghosts.
class that is intended to hold a full definition of the jet clusterer
Class to contain pseudojets, including minimal information of use to jet-clustering routines.
Definition: PseudoJet.hh:68
Specification for the computation of the Voronoi jet area.
void print_jets(const vector< fastjet::PseudoJet > &)
a function that pretty prints a list of jets
Strategy
the various options for the algorithmic strategy to adopt in clustering events with kt and cambridge ...
@ Best
automatic selection of the best (based on N), including the LazyTiled strategies that are new to FJ3....
@ E_scheme
summing the 4-momenta
@ kt_algorithm
the longitudinally invariant kt algorithm
vector< PseudoJet > sorted_by_pt(const vector< PseudoJet > &jets)
return a vector of jets sorted into decreasing kt2
Definition: PseudoJet.cc:871