31 #include "fastjet/PxConePlugin.hh" 
   33 #include "fastjet/ClusterSequence.hh" 
   40 FASTJET_BEGIN_NAMESPACE      
 
   44 bool PxConePlugin::_first_time = 
true;
 
   46 string PxConePlugin::description ()
 const {
 
   49   desc << 
"PxCone jet algorithm with "  
   50        << 
"cone_radius = "        << cone_radius        () << 
", " 
   51        << 
"min_jet_energy = "     << min_jet_energy     () << 
", " 
   52        << 
"overlap_threshold  = " << overlap_threshold  () << 
", " 
   53        << 
"E_scheme_jets  = "     << E_scheme_jets      () 
 
   54        << 
" (NB: non-standard version of PxCone, containing small bug fixes by Gavin Salam)";
 
   67   int    ntrak = clust_seq.
jets().size(), itkdm = 4;
 
   68   double *ptrak = 
new double[ntrak*4+1];
 
   69   for (
int i = 0; i < ntrak; i++) {
 
   70     ptrak[4*i+0] = clust_seq.
jets()[i].px();
 
   71     ptrak[4*i+1] = clust_seq.
jets()[i].py();
 
   72     ptrak[4*i+2] = clust_seq.
jets()[i].pz();
 
   73     ptrak[4*i+3] = clust_seq.
jets()[i].E();
 
   79   double *pjet  = 
new double[mxjet*5+1];
 
   80   int    *ipass = 
new int[ntrak+1];
 
   81   int    *ijmul = 
new int[mxjet+1];
 
  102   if (ierr != 0) 
throw Error(
"An error occurred while running PXCONE");
 
  105   valarray<int> last_index_created(njet);
 
  107   vector<vector<int> > jet_particle_content(njet);
 
  110   for (
int itrak = 0; itrak < ntrak; itrak++) {
 
  111     int jet_i = ipass[itrak] - 1;
 
  112     if (jet_i >= 0) jet_particle_content[jet_i].push_back(itrak);
 
  118   for(
int ipxjet = njet-1; ipxjet >= 0; ipxjet--) {
 
  119     const vector<int> & jet_trak_list = jet_particle_content[ipxjet];
 
  120     int jet_k = jet_trak_list[0];
 
  122     for (
unsigned ilist = 1; ilist < jet_trak_list.size(); ilist++) {
 
  125       int jet_j = jet_trak_list[ilist];
 
  129       if (ilist != jet_trak_list.size()-1 || E_scheme_jets()) {
 
  136                                 PseudoJet(pjet[5*ipxjet+0],pjet[5*ipxjet+1],
 
  137                                           pjet[5*ipxjet+2],pjet[5*ipxjet+3]),
 
  143     double d_iB = clust_seq.
jets()[jet_k].perp2();
 
  169 void PxConePlugin::_print_banner(ostream *ostr)
 const{
 
  170   if (! _first_time) 
return;
 
  176   (*ostr) << 
"#-------------------------------------------------------------------------" << endl;
 
  177   (*ostr) << 
"# You are running the PxCone plugin for FastJet                           " << endl;
 
  178   (*ostr) << 
"# Original code by the Luis Del Pozo, David Ward and Michael H. Seymour   " << endl;
 
  179   (*ostr) << 
"# If you use this plugin, please cite                                     " << endl;
 
  180   (*ostr) << 
"#   M. H. Seymour and C. Tevlin, JHEP 0611 (2006) 052 [hep-ph/0609100].   " << endl;
 
  181   (*ostr) << 
"# in addition to the usual FastJet reference.                             " << endl;
 
  182   (*ostr) << 
"#-------------------------------------------------------------------------" << endl;
 
  188 FASTJET_END_NAMESPACE      
 
const std::vector< PseudoJet > & jets() const 
allow the user to access the internally stored _jets() array, which contains both the initial particl...
 
void plugin_record_ij_recombination(int jet_i, int jet_j, double dij, int &newjet_k)
record the fact that there has been a recombination between jets()[jet_i] and jets()[jet_k], with the specified dij, and return the index (newjet_k) allocated to the new jet, whose momentum is assumed to be the 4-vector sum of that of jet_i and jet_j 
 
void plugin_record_iB_recombination(int jet_i, double diB)
record the fact that there has been a recombination between jets()[jet_i] and the beam...
 
base class corresponding to errors that can be thrown by FastJet 
 
Class to contain pseudojets, including minimal information of use to jet-clustering routines...