// $Id$ // // Copyright (c) 2017, Philip Ilten, Nicholas Rodd, Jesse Thaler, // and Michael Williams // //---------------------------------------------------------------------- // 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_FLAVORCONE_HH__ #define __FASTJET_CONTRIB_FLAVORCONE_HH__ #include #include #include #include FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh namespace contrib{ /** \mainpage FlavorCone contrib The FlavorCone contrib is a lightweight tool to cluster jets of fixed radius around a given number of seeds, where overlapping jets are partitioned by nearest neighbor. The contrib consists of the following files: - contrib::FlavorConePlugin - contrib::FlavorConePlugin::Extras - example.cc provides usage examples */ //---------------------------------------------------------------------- /// \class FlavorConePlugin /// /// Plugin to take input seeds and particles and create FlavorCone /// jets. /// /// On construction, one must supply seeds and an rcut value. To obtain /// the jets call ClusterSequence::inclusive_jets(). The seed for /// each jet can be accessed via ClusterSequence::extras() with the /// method FlavorConeExtras::seed(jet), where jet is from the returned /// jet vector. class FlavorConePlugin : public JetDefinition::Plugin { public: //-------------------------------------------------------------------- /// \class Extras /// /// Hold extras for FlavorConePlugin. /// /// Access the seed for a given jet constructed with the /// FlavorConePlugin. class Extras : public ClusterSequence::Extras { public: /// Main constructor for the FlavorCone Extras class. Extras(); /// Return the seed for a jet. A seed returned with an energy of /// -1 indicates the jet has no valid seed. const PseudoJet& seed(const PseudoJet &jet) const; private: /// Map which holds the seed for each jet. std::map _seeds; /// Stored jet to return when no seed is found. const PseudoJet _invalid_seed; /// Warning when no seed is found. static LimitedWarning _warn_seed; friend class FlavorConePlugin; }; /// Main constructor for the FlavorCone Plugin class. FlavorConePlugin(const std::vector &seeds, double rcut); /// Copy constructor. FlavorConePlugin(const FlavorConePlugin & plugin); // Methods required by base class. /// Brief description of FlavorCone for self-documentation (gives /// number of seeds and rcut). virtual std::string description() const; /// Run the FlavorCone clustering. virtual void run_clustering(ClusterSequence &cs) const; /// Returns rcut value. virtual double R() const; /// Exclusive sequence is not meaningful for this algorithm. virtual bool exclusive_sequence_meaningful() const; /// At the moment, FlavorCone only works for pp, not e+e-. virtual bool is_spherical() const; private: double _rcut; ///< Jet radius cut. std::vector _seeds; ///< Vector of seeds. }; } // namespace contrib FASTJET_END_NAMESPACE #endif // __FASTJET_CONTRIB_FLAVORCONE_HH__