// $Id$ // // Copyright (c) 2013, Oxford University. // //---------------------------------------------------------------------- // This file is part of FastJet contrib ScJet. // // 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_SCJET_HH__ #define __FASTJET_CONTRIB_SCJET_HH__ #include #include FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh class ClusterSequence; namespace contrib{ //------------------------------------------------------------------------ /// \class ScJet /// Jet algorithm based on semi-classical jet model. /// /// Implementation of an NNH-based sequential recombination algorithm /// using distance measures derived from a semi-classical jet model. /// Documented in J Tseng, H Evans, /// "Semi-classical approach to sequential recombination algorithms /// for jet clustering", arXiv:1304.1025 (2013). class ScJet : public JetDefinition::Plugin { public: /// enumeration to specify types of energy input. /// mt and pt are longitudinal boost-invariant, et is not. typedef enum { use_mt, use_pt, use_et } energyModeType; /// print energy mode static std::string energyModeString(energyModeType mode) { switch (mode) { case use_mt : return std::string("Mt"); case use_pt : return std::string("Pt"); case use_et : return std::string("Et"); default : return std::string("Undefined"); } } /// default ctor ScJet(double Rin, energyModeType mode = use_mt, int Rexp = 3, double RexpReal = 0.0) : _R(Rin), _Rexp(Rexp), _RexpReal(RexpReal), _energyMode(mode) {} /// copy constructor ScJet(const ScJet& plugin) : JetDefinition::Plugin(), _R(plugin._R), _Rexp(plugin._Rexp), _RexpReal(plugin._RexpReal), _energyMode(plugin._energyMode) { } /// default dtor ~ScJet(){} /// required by base class virtual std::string description() const; /// required by base class virtual void run_clustering(ClusterSequence&) const; /// plugin mechanism's standard way of accessing the jet radius virtual double R() const { return _R; } /// return radius exponent parameter int Rexp() const { return _Rexp; } double RexpReal() const { return _RexpReal; } /// return energy mode energyModeType energyMode() const { return _energyMode; } /// return energy mode string (non-static version) std::string energyModeString() const { return energyModeString(_energyMode); } /// avoid warning when the user requests exclusive jets virtual bool exclusive_sequence_meaningful() const { return true; } private: double _R; // jet radius parameter int _Rexp; // radius exponent parameter double _RexpReal; // fractional radius exponent parameter energyModeType _energyMode; // energy calculation type }; } // namespace contrib FASTJET_END_NAMESPACE #endif // __FASTJET_CONTRIB_SCJET_HH__