31 #include "fastjet/JetDefinition.hh"
32 #include "fastjet/Error.hh"
33 #include "fastjet/CompositeJetStructure.hh"
36 FASTJET_BEGIN_NAMESPACE
40 const double JetDefinition::max_allowable_R = 1000.0;
50 _jet_algorithm(jet_algorithm_in), _Rparam(R_in), _strategy(strategy_in) {
65 oss <<
"Requested R = " << R_in <<
" for jet definition is larger than max_allowable_R = " <<
max_allowable_R;
66 throw Error(oss.str());
73 if (nparameters != (
int) nparameters_expected){
75 oss <<
"The jet algorithm you requested ("
76 << jet_algorithm_in <<
") should be constructed with " << nparameters_expected
77 <<
" parameter(s) but was called with " << nparameters <<
" parameter(s)\n";
78 throw Error(oss.str());
131 return "uninitialised JetDefinition (jet_algorithm=undefined_jet_algorithm)" ;
136 case 0: name <<
" (NB: no R)";
break;
137 case 1: name <<
" with R = " << R();
break;
140 name <<
" with R = " << R();
143 name <<
"and a special hack whereby particles with kt < "
144 << extra_param() <<
"are treated as passive ghosts";
146 name <<
", p = " << extra_param();
158 case kt_algorithm:
return "Longitudinally invariant kt algorithm";
161 case genkt_algorithm:
return "Longitudinally invariant generalised kt algorithm";
167 throw Error(
"JetDefinition::algorithm_description(): unrecognized jet_algorithm");
187 if (_shared_recombiner()) _shared_recombiner.reset();
194 assert(other_jet_def._recombiner ||
198 if (other_jet_def._recombiner == 0){
204 _recombiner = other_jet_def._recombiner;
209 _shared_recombiner.reset(other_jet_def._shared_recombiner);
224 if (other_jd.recombination_scheme() != scheme)
return false;
235 if (_recombiner == 0){
236 throw Error(
"tried to call JetDefinition::delete_recombiner_when_unused() for a JetDefinition without a user-defined recombination scheme");
237 }
else if (_shared_recombiner.get()) {
238 throw Error(
"Error in JetDefinition::delete_recombiner_when_unused: the recombiner is already scheduled for deletion when unused (or was already set as shared)");
241 _shared_recombiner.reset(_recombiner);
248 throw Error(
"tried to call JetDefinition::delete_plugin_when_unused() for a JetDefinition without a plugin");
251 _plugin_shared.reset(_plugin);
257 switch(_recomb_scheme) {
259 return "E scheme recombination";
261 return "pt scheme recombination";
263 return "pt2 scheme recombination";
265 return "Et scheme recombination";
267 return "Et2 scheme recombination";
269 return "boost-invariant pt scheme recombination";
271 return "boost-invariant pt2 scheme recombination";
274 err <<
"DefaultRecombiner: unrecognized recombination scheme "
276 throw Error(err.str());
285 double weighta, weightb;
287 switch(_recomb_scheme) {
292 pab.
reset(pa.px()+pb.px(),
308 weighta = pa.
perp2();
309 weightb = pb.
perp2();
313 err <<
"DefaultRecombiner: unrecognized recombination scheme "
315 throw Error(err.str());
318 double perp_ab = pa.
perp() + pb.
perp();
319 if (perp_ab != 0.0) {
320 double y_ab = (weighta * pa.
rap() + weightb * pb.
rap())/(weighta+weightb);
323 double phi_a = pa.
phi(), phi_b = pb.
phi();
324 if (phi_a - phi_b > pi) phi_b += twopi;
325 if (phi_a - phi_b < -pi) phi_b -= twopi;
326 double phi_ab = (weighta * phi_a + weightb * phi_b)/(weighta+weightb);
336 pab.
reset(0.0, 0.0, 0.0, 0.0);
342 switch(_recomb_scheme) {
352 double newE = sqrt(p.
perp2()+p.pz()*p.pz());
365 double rescale = p.E()/sqrt(p.
perp2()+p.pz()*p.pz());
366 p.
reset_momentum(rescale*p.px(), rescale*p.py(), rescale*p.pz(), p.E());
375 err <<
"DefaultRecombiner: unrecognized recombination scheme "
377 throw Error(err.str());
382 throw Error(
"set_ghost_separation_scale not supported");
401 if (pieces.size()>0){
403 for (
unsigned int i=1; i<pieces.size(); i++)
419 return join(vector<PseudoJet>(1,j1), recombiner);
425 vector<PseudoJet> pieces;
426 pieces.push_back(j1);
427 pieces.push_back(j2);
428 return join(pieces, recombiner);
434 vector<PseudoJet> pieces;
435 pieces.push_back(j1);
436 pieces.push_back(j2);
437 pieces.push_back(j3);
438 return join(pieces, recombiner);
444 vector<PseudoJet> pieces;
445 pieces.push_back(j1);
446 pieces.push_back(j2);
447 pieces.push_back(j3);
448 pieces.push_back(j4);
449 return join(pieces, recombiner);
455 FASTJET_END_NAMESPACE