Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • external/fastjet/plugins/Jade/JadePlugin.cc

    r1d208a2 r35cdc46  
    11//FJSTARTHEADER
    2 // $Id: JadePlugin.cc 4063 2016-03-04 10:31:40Z salam $
     2// $Id: JadePlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    44// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     
    3535//#include "fastjet/internal/ClusterSequence_N2.icc"
    3636#include "fastjet/NNH.hh"
    37 #include "fastjet/NNFJN2Plain.hh"
    3837
    3938// other stuff
     
    5251//----------------------------------------------------------------------
    5352/// class to help run a JADE algorithm
    54 ///
    55 /// This class works both with NNH and NNFJN2Plain clustering
    56 /// helpers. They both use the same init(...) call, but for the
    57 /// clustering:
    58 ///
    59 /// - NNH uses distance(...) and beam_distance()
    60 /// - NNFJPlainN2 uses geometrical_distance(...), momentum_factor()
    61 ///   and geometrical_beam_distance()
    62 ///
    63 /// For NNFJPlainN2 the 2 E_i E_j (1-cos theta_{ij}) factor
    64 /// gets broken up into
    65 ///
    66 ///     sqrt(2)*min(E_i,E_j) * [sqrt(2)*max(E_i,E_j) (1 - cos \theta_{ij})]
    67 ///
    68 /// The second factor is what we call the "geometrical_distance" even
    69 /// though it isn't actually purely geometrical. But the fact that it
    70 /// gets multiplied by min(E_i,E_j) to get the full distance is
    71 /// sufficient for the validity of the FJ lemma, allowing for the use
    72 /// of NNFJN2Plain.
    7353class JadeBriefJet {
    7454public:
     
    8969  }
    9070
    91   double geometrical_distance(const JadeBriefJet * jet) const {
    92     double dij = 1 - nx*jet->nx
    93                    - ny*jet->ny
    94                    - nz*jet->nz;
    95     dij *= max(rt2E,jet->rt2E);
    96     return dij;
    97   }
    98 
    99   double momentum_factor() const {
    100     return rt2E;
    101   }
    102  
    10371  double beam_distance() const {
    10472    return numeric_limits<double>::max();
    10573  }
    10674
    107   double geometrical_beam_distance() const {
    108     // get a number that is almost the same as max(), just a little
    109     // smaller so as to ensure that when we divide it by rt2E and then
    110     // multiply it again, we won't get an overflow
    111     const double almost_max = numeric_limits<double>::max() * (1 - 1e-13);
    112     return almost_max / rt2E;
    113   }
    114  
    11575private:
    11676  double rt2E, nx, ny, nz;
     
    12282  ostringstream desc;
    12383  desc << "e+e- JADE algorithm plugin";
    124   switch(_strategy) {
    125   case strategy_NNH:
    126     desc << ", using NNH strategy"; break;
    127   case strategy_NNFJN2Plain:
    128     desc << ", using NNFJN2Plain strategy"; break;
    129   default:
    130     throw Error("Unrecognized strategy in JadePlugin");
    131   }
    132 
    13384  return desc.str();
    13485}
    13586
    136 // //----------------------------------------------------------------------
    137 // void JadePlugin::run_clustering(ClusterSequence & cs) const {
    138 //   int njets = cs.jets().size();
    139 //
    140 //   //SharedPtr<NNBase<> > nn;
    141 //   NNBase<> * nn;
    142 //   switch(_strategy) {
    143 //   case strategy_NNH:
    144 //     //nn.reset(new NNH<JadeBriefJet>(cs.jets()));
    145 //     nn = new NNH<JadeBriefJet>(cs.jets());
    146 //     break;
    147 //   case strategy_NNFJN2Plain:
    148 //     //nn.reset(new NNFJN2Plain<JadeBriefJet>(cs.jets()));
    149 //     nn = new NNFJN2Plain<JadeBriefJet>(cs.jets());
    150 //     break;
    151 //   default:
    152 //     throw Error("Unrecognized strategy in JadePlugin");
    153 //   }
    154 //   //NNH<JadeBriefJet> nnh(cs.jets());
    155 //   //NNFJN2Plain<JadeBriefJet> nnh(cs.jets());
    156 //
    157 //   // if testing against Hoeth's implementation, need to rescale the
    158 //   // dij by Q^2.
    159 //   //double Q2 = cs.Q2();
    160 //
    161 //   while (njets > 0) {
    162 //     int i, j, k;
    163 //     double dij = nn->dij_min(i, j);
    164 //
    165 //     if (j >= 0) {
    166 //       cs.plugin_record_ij_recombination(i, j, dij, k);
    167 //       nn->merge_jets(i, j, cs.jets()[k], k);
    168 //     } else {
    169 //       double diB = cs.jets()[i].E()*cs.jets()[i].E(); // get new diB
    170 //       cs.plugin_record_iB_recombination(i, diB);
    171 //       nn->remove_jet(i);
    172 //     }
    173 //     njets--;
    174 //   }
    175 //   delete nn;
    176 // }
    177 
    178 
    179 template<class N> void JadePlugin::_actual_run_clustering(ClusterSequence & cs) const {
    180 
     87//----------------------------------------------------------------------
     88void JadePlugin::run_clustering(ClusterSequence & cs) const {
    18189  int njets = cs.jets().size();
    182 
    183   N nn(cs.jets());
     90  NNH<JadeBriefJet> nnh(cs.jets());
    18491
    18592  // if testing against Hoeth's implementation, need to rescale the
     
    18996  while (njets > 0) {
    19097    int i, j, k;
    191     double dij = nn.dij_min(i, j);
     98    double dij = nnh.dij_min(i, j);
    19299
    193100    if (j >= 0) {
    194101      cs.plugin_record_ij_recombination(i, j, dij, k);
    195       nn.merge_jets(i, j, cs.jets()[k], k);
     102      nnh.merge_jets(i, j, cs.jets()[k], k);
    196103    } else {
    197104      double diB = cs.jets()[i].E()*cs.jets()[i].E(); // get new diB
    198105      cs.plugin_record_iB_recombination(i, diB);
    199       nn.remove_jet(i);
     106      nnh.remove_jet(i);
    200107    }
    201108    njets--;
    202109  }
    203 
    204110}
    205111
    206 //----------------------------------------------------------------------
    207 void JadePlugin::run_clustering(ClusterSequence & cs) const {
    208 
    209   switch(_strategy) {
    210   case strategy_NNH:
    211     _actual_run_clustering<NNH<JadeBriefJet> >(cs);
    212     break;
    213   case strategy_NNFJN2Plain:
    214     _actual_run_clustering<NNFJN2Plain<JadeBriefJet> >(cs);
    215     break;
    216   default:
    217     throw Error("Unrecognized strategy in JadePlugin");
    218   }
    219 }
    220 
    221 
    222112FASTJET_END_NAMESPACE      // defined in fastjet/internal/base.hh
Note: See TracChangeset for help on using the changeset viewer.