fastjet 2.4.5
fastjet_areas.cc
Go to the documentation of this file.
00001 
00002 //STARTHEADER
00003 // $Id: fastjet_areas.cc 1368 2009-01-13 19:55:28Z salam $
00004 //
00005 // Copyright (c) 2005-2006, Matteo Cacciari and Gavin Salam
00006 //
00007 //----------------------------------------------------------------------
00008 // This file is part of FastJet.
00009 //
00010 //  FastJet is free software; you can redistribute it and/or modify
00011 //  it under the terms of the GNU General Public License as published by
00012 //  the Free Software Foundation; either version 2 of the License, or
00013 //  (at your option) any later version.
00014 //
00015 //  The algorithms that underlie FastJet have required considerable
00016 //  development and are described in hep-ph/0512210. If you use
00017 //  FastJet as part of work towards a scientific publication, please
00018 //  include a citation to the FastJet paper.
00019 //
00020 //  FastJet is distributed in the hope that it will be useful,
00021 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 //  GNU General Public License for more details.
00024 //
00025 //  You should have received a copy of the GNU General Public License
00026 //  along with FastJet; if not, write to the Free Software
00027 //  Foundation, Inc.:
00028 //      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00029 //----------------------------------------------------------------------
00030 //ENDHEADER
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 //----------------------------------------------------------------------
00039 // fastjet areas example program. 
00040 //
00041 // Compile it with: make fastjet_areas
00042 // run it with    : ./fastjet_areas < data/single-event.dat
00043 //
00044 //----------------------------------------------------------------------
00045 #include "fastjet/PseudoJet.hh"
00046 #include "fastjet/ClusterSequenceArea.hh"
00047 #include "fastjet/ClusterSequencePassiveArea.hh"
00048 
00049 // get info on how fastjet was configured
00050 #include "fastjet/config.h"
00051 
00052 #ifdef ENABLE_PLUGIN_SISCONE
00053 #include "fastjet/SISConePlugin.hh"
00054 #endif
00055 
00056 #include<iostream> // needed for io
00057 #include<sstream>  // needed for internal io
00058 #include<vector> 
00059 
00060 using namespace std;
00061 
00062 // a declaration of a function that pretty prints a list of jets
00063 void print_jets (const fastjet::ClusterSequenceAreaBase &, 
00064                  const vector<fastjet::PseudoJet> &);
00065 
00067 int main (int argc, char ** argv) {
00068   
00069   vector<fastjet::PseudoJet> input_particles;
00070   
00071   // read in input particles
00072   double px, py , pz, E;
00073   while (cin >> px >> py >> pz >> E) {
00074     // create a fastjet::PseudoJet with these components and put it onto
00075     // back of the input_particles vector
00076     input_particles.push_back(fastjet::PseudoJet(px,py,pz,E)); 
00077   }
00078 
00079   // create an object that represents your choice of jet algorithm, and 
00080   // the associated parameters
00081   double Rparam = 1.0;
00082   fastjet::Strategy strategy = fastjet::Best;
00083   fastjet::JetDefinition jet_def(fastjet::kt_algorithm, Rparam, strategy);
00084   //fastjet::JetDefinition jet_def(fastjet::cambridge_algorithm, Rparam, strategy);
00085   //fastjet::JetDefinition jet_def(fastjet::antikt_algorithm, Rparam, strategy);
00086   //fastjet::JetDefinition jet_def(new fastjet::SISConePlugin(Rparam,0.75));
00087 
00088   // create an object that specifies how we to define the area
00089   fastjet::AreaDefinition area_def;
00090   bool use_voronoi = false;
00091   if (!use_voronoi) {
00092     double ghost_etamax = 7.0;
00093     double ghost_area    = 0.05;
00094     int    active_area_repeats = 1;
00095     // alternative settings for more precision:
00096     // reducing ghost area gives better sensitivity to the exact edges of the jet
00097     //double ghost_area    = 0.01;
00098     // increasing the repeats is useful in sparse events
00099     //int    active_area_repeats = 100; 
00100 
00101     // now create the object that holds info about ghosts, and from that
00102     // get an area definition
00103     fastjet::GhostedAreaSpec ghost_spec(ghost_etamax, active_area_repeats, 
00104                                         ghost_area);
00105     area_def = fastjet::AreaDefinition(fastjet::passive_area,ghost_spec);
00106     //area_def = fastjet::AreaDefinition(fastjet::active_area,ghost_spec);
00107   } else {
00108     double effective_Rfact = 1.0;
00109     area_def = fastjet::VoronoiAreaSpec(effective_Rfact);
00110   }
00111 
00112   // run the jet clustering with the above jet definition
00113   fastjet::ClusterSequenceArea clust_seq(input_particles, 
00114                                              jet_def, area_def);
00115   // you can also run the individual area classes directly
00116   //fastjet::ClusterSequencePassiveArea clust_seq(input_particles, jet_def, 
00117   //                                              area_def.ghost_spec());
00118 
00119   // you may want to find out how much area in a given range (|y|<range)
00120   // is empty of real jets (or corresponds to pure "ghost" jets).
00121   //double range = 4.0;
00122   //cout << clust_seq.empty_area(range) << endl;
00123   //cout << clust_seq.n_empty_jets(range) << endl;
00124 
00125   // tell the user what was done
00126   cout << "Jet definition was: " << jet_def.description() << endl;
00127   cout << "Area definition was: " << area_def.description() << endl;
00128   cout << "Strategy adopted by FastJet was "<<
00129        clust_seq.strategy_string()<<endl<<endl;
00130 
00131   // extract the inclusive jets with pt > 5 GeV, sorted by pt
00132   double ptmin = 5.0;
00133   vector<fastjet::PseudoJet> inclusive_jets = clust_seq.inclusive_jets(ptmin);
00134 
00135   // print them out
00136   cout << "Printing inclusive jets with pt > "<< ptmin<<" GeV\n";
00137   cout << "---------------------------------------\n";
00138   print_jets(clust_seq, inclusive_jets);
00139   cout << endl;
00140 
00141   
00142   cout << "Number of unclustered particles: " 
00143        << clust_seq.unclustered_particles().size() << endl;
00144 
00145 
00146 }
00147 
00148 
00149 //----------------------------------------------------------------------
00151 void print_jets (const fastjet::ClusterSequenceAreaBase & clust_seq, 
00152                  const vector<fastjet::PseudoJet> & unsorted_jets) {
00153 
00154   // sort jets into increasing pt
00155   vector<fastjet::PseudoJet> jets = sorted_by_pt(unsorted_jets);  
00156 
00157   printf(" ijet   rap      phi        Pt         area  +-   err\n");
00158   for (size_t j = 0; j < jets.size(); j++) {
00159 
00160     double area     = clust_seq.area(jets[j]);
00161     double area_error = clust_seq.area_error(jets[j]);
00162 
00163     printf("%5u %9.5f %8.5f %10.3f %8.3f +- %6.3f\n",j,jets[j].rap(),
00164            jets[j].phi(),jets[j].perp(), area, area_error);
00165   }
00166 
00167 
00168 }
00169 
00170 
00171 
00172 
00173 
00174 
00175 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines