// $Id: ValenciaPlugin.hh 771 2015-02-21 16:40:07Z vos $
//
// Copyright (c) 2014, Marcel Vos and Ignacio Garcia
//
//----------------------------------------------------------------------
// 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 .
//----------------------------------------------------------------------
#ifndef __FASTJET_CONTRIB_VALENCIAJETALGORITHM_HH__
#define __FASTJET_CONTRIB_VALENCIAJETALGORITHM_HH__
#include
#include "fastjet/JetDefinition.hh"
#include "fastjet/ClusterSequence.hh"
FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
namespace contrib{
//----------------------------------------------------------------------
//
/// ValenciaPlugin is a plugin for fastjet (v2.4 upwards)
///
/// It implements the Valencia algorithm, as defined in
/// Boronat, Garcia, Vos,
/// A new jet reconstruction algorithm for lepton colliders
///
///
class ValenciaPlugin : public JetDefinition::Plugin {
public:
/// Constructor for the Valencia Plugin class.
/// Three floating point arguments are specified to set the parameters
/// the radius parameter R has the usual meaning,
/// the clustering order beta (beta = 1 yields kt-style clustering,
/// beta = 0 purely angular clustering a la C/A and beta = -1
/// clusters hard, collinear radiation first, like anti-kt),
/// and gamma, that governs the shrinking jet size in the forward region
ValenciaPlugin (double R, double beta, double gamma) : _R(R), _beta(beta), _gamma(gamma){}
/// Constructor for the Valencia Plugin class.
/// If two arguments are specified to set the parameters
/// the gamma exponent is set equal to beta
ValenciaPlugin (double R, double beta) : _R(R), _beta(beta), _gamma(beta){}
/// copy constructor
ValenciaPlugin (const ValenciaPlugin & plugin) {
*this = plugin;
}
// the things that are required by base class
virtual std::string description () const;
virtual void run_clustering(ClusterSequence &) const;
/// the plugin mechanism's standard way of accessing the jet radius.
/// This must be set to return something sensible, even if R
/// does not make sense for this algorithm!
virtual double R() const {return _R;}
// the Valencia algorithm has a second parameter beta that governs
// the exponent of the energy in the inter-particle and beam distance
// criteria, and thus determines the clustering order
virtual double beta() const {return _beta;}
// the Valencia algorithm has a third parameter gamma that governs
// the exponent of the sin(theta) in the beam distance
// and thus the shrinking of the jet size in the forward region
virtual double gamma() const {return _gamma;}
/// avoid the warning whenever the user requests "exclusive" jets
/// from the cluster sequence
virtual bool exclusive_sequence_meaningful() const {return true;}
private:
double _R;
double _beta;
double _gamma;
};
} // namespace contrib
FASTJET_END_NAMESPACE
#endif // __FASTJET_CONTRIB_VALENCIAJETALGORITHM_HH__