// $Id$
//
// Copyright (c) 2018-, Frederic A. Dreyer, Keith Hamilton, Alexander Karlberg,
// Gavin P. Salam, Ludovic Scyboz, Gregory Soyez, Rob Verheyen
//
//----------------------------------------------------------------------
// This file is part of FastJet contrib.
//
// It is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at
// your option) any later version.
//
// It is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this code. If not, see .
//----------------------------------------------------------------------
#include
#include "fastjet/contrib/RecursiveLundEEGenerator.hh"
using namespace std;
FASTJET_BEGIN_NAMESPACE
namespace contrib{
using namespace lund_plane;
LundEEDeclustering::LundEEDeclustering(const PseudoJet& pair,
const PseudoJet& j1, const PseudoJet& j2,
int iplane, double psi, double psibar,
int depth, int leaf_iplane, int sign_s)
: iplane_(iplane), psi_(psi), psibar_(psibar), m_(pair.m()), pair_(pair), depth_(depth), leaf_iplane_(leaf_iplane), sign_s_(sign_s) {
double omc = one_minus_costheta(j1,j2);
if (omc > sqrt(numeric_limits::epsilon())) {
double cos_theta = 1.0 - omc;
double theta = acos(cos_theta);
sin_theta_ = sin(theta);
eta_ = -log(tan(theta/2.0));
} else {
// we are at small angles, so use small-angle formulas
double theta = sqrt(2. * omc);
sin_theta_ = theta;
eta_ = -log(theta/2);
}
// establish which of j1 and j2 is softer
if (j1.modp2() > j2.modp2()) {
harder_ = j1;
softer_ = j2;
} else {
harder_ = j2;
softer_ = j1;
}
// now work out the various LundEE declustering variables
double softer_modp = softer_.modp();
z_ = softer_modp / (softer_modp + harder_.modp());
kt_ = softer_modp * sin_theta_;
lnkt_ = log(kt_);
kappa_ = z_ * sin_theta_;
}
} // namespace contrib
FASTJET_END_NAMESPACE
std::ostream & operator<<(std::ostream & ostr, const fastjet::contrib::LundEEDeclustering & d) {
ostr << "kt = " << d.kt()
<< " z = " << d.z()
<< " eta = " << d.eta()
<< " psi = " << d.psi()
<< " psibar = " << d.psibar()
<< " m = " << d.m()
<< " iplane = " << d.iplane()
<< " depth = " << d.depth()
<< " leaf_iplane = " << d.leaf_iplane();
return ostr;
}