40 #include "fastjet/PseudoJet.hh"
41 #include "fastjet/ClusterSequenceArea.hh"
42 #include "fastjet/Selector.hh"
43 #include "fastjet/tools/JetMedianBackgroundEstimator.hh"
44 #include "fastjet/tools/Subtractor.hh"
46 #include <fastjet/config.h>
59 vector<PseudoJet> hard_event, full_event;
65 double particle_maxrap = 5.0;
69 while (getline(cin, line)) {
70 istringstream linestream(line);
73 if (line.substr(0,4) ==
"#END") {
break;}
74 if (line.substr(0,9) ==
"#SUBSTART") {
76 if (nsub == 1) hard_event = full_event;
79 if (line.substr(0,1) ==
"#") {
continue;}
81 linestream >> px >> py >> pz >> E;
86 if (abs(particle.rap()) <= particle_maxrap) full_event.push_back(particle);
90 if (nsub == 1) hard_event = full_event;
94 cerr <<
"Error: read empty event\n";
110 double ghost_maxrap = 6.0;
125 vector<PseudoJet> hard_jets =
sorted_by_pt(clust_seq_hard.inclusive_jets(ptmin));
126 vector<PseudoJet> full_jets =
sorted_by_pt(clust_seq_full.inclusive_jets(ptmin));
181 #if FASTJET_VERSION_NUMBER >= 30100
182 subtractor.set_use_rho_m(
true);
183 subtractor.set_safe_mass(
true);
192 bkgd_estimator.set_particles(full_event);
199 cout <<
"Main clustering:" << endl;
200 cout <<
" Ran: " << jet_def.description() << endl;
201 cout <<
" Area: " << area_def.description() << endl;
202 cout <<
" Particles up to |y|=" << particle_maxrap << endl;
205 cout <<
"Background estimation:" << endl;
206 cout <<
" " << bkgd_estimator.description() << endl << endl;;
207 cout <<
" Giving, for the full event" << endl;
208 cout <<
" rho = " << bkgd_estimator.rho() << endl;
209 cout <<
" sigma = " << bkgd_estimator.sigma() << endl;
210 #if FASTJET_VERSION_NUMBER >= 30100
211 cout <<
" rho_m = " << bkgd_estimator.rho_m() << endl;
212 cout <<
" sigma_m = " << bkgd_estimator.sigma_m() << endl;
216 cout <<
"Jets above " << ptmin <<
" GeV in the hard event (" << hard_event.size() <<
" particles)" << endl;
217 cout <<
"---------------------------------------\n";
218 printf(
"%5s %15s %15s %15s %15s %15s\n",
"jet #",
"rapidity",
"phi",
"pt",
"m",
"area");
219 for (
unsigned int i = 0; i < hard_jets.size(); i++) {
220 printf(
"%5u %15.8f %15.8f %15.8f %15.8f %15.8f\n", i,
221 hard_jets[i].rap(), hard_jets[i].phi(), hard_jets[i].pt(), hard_jets[i].m(),
222 hard_jets[i].area());
232 cout <<
"Jets above " << ptmin <<
" GeV in the full event (" << full_event.size() <<
" particles)" << endl;
233 cout <<
"---------------------------------------\n";
234 printf(
"%5s %15s %15s %15s %15s %15s %15s %15s %15s %15s\n",
"jet #",
"rapidity",
"phi",
"pt",
"m",
"area",
"rap_sub",
"phi_sub",
"pt_sub",
"m_sub");
238 vector<PseudoJet> subtracted_jets = subtractor(full_jets);
240 for (
unsigned int i=0; i<full_jets.size(); i++){
242 if (subtracted_jets[i].pt2() >= ptmin*ptmin){
243 printf(
"%5u %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f %15.8f\n", idx,
244 full_jets[i].rap(), full_jets[i].phi(), full_jets[i].pt(), full_jets[i].m(),
246 subtracted_jets[i].rap(), subtracted_jets[i].phi(),
247 subtracted_jets[i].pt(),
248 subtracted_jets[i].m());
Class that helps perform jet background subtraction.
vector< PseudoJet > sorted_by_pt(const vector< PseudoJet > &jets)
return a vector of jets sorted into decreasing kt2
General class for user to obtain ClusterSequence with additional area information.
Selector SelectorNHardest(unsigned int n)
select the n hardest objects
Selector SelectorAbsRapMax(double absrapmax)
select objects with |rap| <= absrapmax
class that holds a generic area definition
int main()
an example program showing how to use fastjet
Class that encodes information about cuts and other selection criteria that can be applied to PseudoJ...
Parameters to configure the computation of jet areas using ghosts.
Class to contain pseudojets, including minimal information of use to jet-clustering routines...
class that is intended to hold a full definition of the jet clusterer