Changes in external/fastjet/plugins/Jade/JadePlugin.cc [1d208a2:35cdc46] in git
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
external/fastjet/plugins/Jade/JadePlugin.cc
r1d208a2 r35cdc46 1 1 //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 $ 3 3 // 4 4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez … … 35 35 //#include "fastjet/internal/ClusterSequence_N2.icc" 36 36 #include "fastjet/NNH.hh" 37 #include "fastjet/NNFJN2Plain.hh"38 37 39 38 // other stuff … … 52 51 //---------------------------------------------------------------------- 53 52 /// class to help run a JADE algorithm 54 ///55 /// This class works both with NNH and NNFJN2Plain clustering56 /// helpers. They both use the same init(...) call, but for the57 /// 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}) factor64 /// gets broken up into65 ///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" even69 /// though it isn't actually purely geometrical. But the fact that it70 /// gets multiplied by min(E_i,E_j) to get the full distance is71 /// sufficient for the validity of the FJ lemma, allowing for the use72 /// of NNFJN2Plain.73 53 class JadeBriefJet { 74 54 public: … … 89 69 } 90 70 91 double geometrical_distance(const JadeBriefJet * jet) const {92 double dij = 1 - nx*jet->nx93 - ny*jet->ny94 - nz*jet->nz;95 dij *= max(rt2E,jet->rt2E);96 return dij;97 }98 99 double momentum_factor() const {100 return rt2E;101 }102 103 71 double beam_distance() const { 104 72 return numeric_limits<double>::max(); 105 73 } 106 74 107 double geometrical_beam_distance() const {108 // get a number that is almost the same as max(), just a little109 // smaller so as to ensure that when we divide it by rt2E and then110 // multiply it again, we won't get an overflow111 const double almost_max = numeric_limits<double>::max() * (1 - 1e-13);112 return almost_max / rt2E;113 }114 115 75 private: 116 76 double rt2E, nx, ny, nz; … … 122 82 ostringstream desc; 123 83 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 133 84 return desc.str(); 134 85 } 135 86 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 //---------------------------------------------------------------------- 88 void JadePlugin::run_clustering(ClusterSequence & cs) const { 181 89 int njets = cs.jets().size(); 182 183 N nn(cs.jets()); 90 NNH<JadeBriefJet> nnh(cs.jets()); 184 91 185 92 // if testing against Hoeth's implementation, need to rescale the … … 189 96 while (njets > 0) { 190 97 int i, j, k; 191 double dij = nn .dij_min(i, j);98 double dij = nnh.dij_min(i, j); 192 99 193 100 if (j >= 0) { 194 101 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); 196 103 } else { 197 104 double diB = cs.jets()[i].E()*cs.jets()[i].E(); // get new diB 198 105 cs.plugin_record_iB_recombination(i, diB); 199 nn .remove_jet(i);106 nnh.remove_jet(i); 200 107 } 201 108 njets--; 202 109 } 203 204 110 } 205 111 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 222 112 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh
Note:
See TracChangeset
for help on using the changeset viewer.