// $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 "fastjet/contrib/LundWithSecondary.hh"
#include
FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
namespace contrib{
//----------------------------------------------------------------------
/// return LundDeclustering sequence of primary plane
std::vector LundWithSecondary::primary(const PseudoJet& jet) const {
return lund_gen_(jet);
}
//----------------------------------------------------------------------
/// return LundDeclustering sequence of secondary plane (slow version)
std::vector LundWithSecondary::secondary(const PseudoJet& jet) const {
// this is not optimal as one is computing the primary plane twice.
std::vector declusts = lund_gen_(jet);
return secondary(declusts);
}
//----------------------------------------------------------------------
/// return LundDeclustering sequence of secondary plane with primary sequence as input
std::vector LundWithSecondary::secondary(
const std::vector & declusts) const {
int sec_index = secondary_index(declusts);
// if we found the index of secondary emission, return its declustering sequence
if (sec_index >= 0) {
return lund_gen_(declusts[sec_index].softer());
} else {
return std::vector();
}
}
//----------------------------------------------------------------------
/// return the index associated of the primary declustering that is to be
/// used for the secondary plane.
int LundWithSecondary::secondary_index(const std::vector & declusts) const {
if (secondary_def_ == 0) {
throw Error("secondary class is a null pointer, cannot identify element to use for secondary plane");
}
return (*secondary_def_)(declusts);
}
//----------------------------------------------------------------------
/// description
std::string LundWithSecondary::description() const {
std::ostringstream oss;
oss << "LundWithSecondary using " << secondary_def_->description()
<< " and " << lund_gen_.description();
return oss.str();
}
} // namespace contrib
FASTJET_END_NAMESPACE