Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-30 10:06:43

0001 // $Id: LundWithSecondary.hh 1345 2023-03-01 08:49:41Z salam $
0002 //
0003 // Copyright (c) 2018-, Frederic A. Dreyer, Keith Hamilton, Alexander Karlberg,
0004 // Gavin P. Salam, Ludovic Scyboz, Gregory Soyez, Rob Verheyen
0005 //
0006 //----------------------------------------------------------------------
0007 // This file is part of FastJet contrib.
0008 //
0009 // It is free software; you can redistribute it and/or modify it under
0010 // the terms of the GNU General Public License as published by the
0011 // Free Software Foundation; either version 2 of the License, or (at
0012 // your option) any later version.
0013 //
0014 // It is distributed in the hope that it will be useful, but WITHOUT
0015 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
0016 // or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
0017 // License for more details.
0018 //
0019 // You should have received a copy of the GNU General Public License
0020 // along with this code. If not, see <http://www.gnu.org/licenses/>.
0021 //----------------------------------------------------------------------
0022 
0023 #ifndef __FASTJET_CONTRIB_LUNDWITHSECONDARY_HH__
0024 #define __FASTJET_CONTRIB_LUNDWITHSECONDARY_HH__
0025 
0026 #include "LundGenerator.hh"
0027 #include "SecondaryLund.hh"
0028 
0029 FASTJET_BEGIN_NAMESPACE
0030 
0031 namespace contrib{
0032 
0033 //----------------------------------------------------------------------
0034 /// \class LundWithSecondary
0035 /// Define a primary and secondary Lund plane
0036 ///
0037 ///  \param secondary_def definition used for the leading emission.
0038 //
0039 class LundWithSecondary {
0040 public:
0041   /// LundWithSecondary constructor
0042   LundWithSecondary(SecondaryLund * secondary_def = 0)
0043     : secondary_def_(secondary_def) {}
0044   
0045   /// LundWithSecondary constructor with jet alg
0046   LundWithSecondary(JetAlgorithm jet_alg,
0047             SecondaryLund * secondary_def = 0)
0048     : lund_gen_(jet_alg), secondary_def_(secondary_def) {}
0049   
0050   /// LundWithSecondary constructor with jet def
0051   LundWithSecondary(const JetDefinition & jet_def,
0052             SecondaryLund * secondary_def = 0)
0053     : lund_gen_(jet_def), secondary_def_(secondary_def) {}
0054   
0055   /// destructor
0056   virtual ~LundWithSecondary() {}
0057   
0058   /// primary Lund declustering
0059   std::vector<LundDeclustering> primary(const PseudoJet& jet) const;
0060   
0061   /// secondary Lund declustering (slow)
0062   std::vector<LundDeclustering> secondary(const PseudoJet& jet) const;
0063   
0064   /// secondary Lund declustering with primary sequence as input
0065   std::vector<LundDeclustering> secondary(
0066              const std::vector<LundDeclustering> & declusts) const;
0067 
0068   /// return the index associated of the primary declustering that is to be
0069   /// used for the secondary plane.
0070   int secondary_index(const std::vector<LundDeclustering> & declusts) const;
0071   
0072   /// description of the class
0073   std::string description() const;
0074   
0075 private:
0076   /// lund generator
0077   LundGenerator lund_gen_;
0078   
0079   /// secondary definition
0080   SecondaryLund * secondary_def_;
0081 };
0082 
0083   
0084 // //----------------------------------------------------------------------
0085 // /// \class LundWithSecondaryAndTertiary
0086 // /// Define a primary, secondary and tertiary Lund plane
0087 // class LundWithSecondaryAndTertiary : public LundWithSecondary {
0088 // public:
0089 //   /// LundWithSecondaryAndTertiary constructor
0090 //   LundWithSecondaryAndTertiary(SecondaryLund * secondary_def = 0,
0091 //                 SecondaryLund * tertiary_def = 0)
0092 //     : LundWithSecondary(secondary_def), tertiary_def_(tertiary_def) {}
0093   
0094 //   /// LundWithSecondaryAndTertiary constructor with jet alg
0095 //   LundWithSecondaryAndTertiary(JetAlgorithm jet_alg,
0096 //          SecondaryLund * secondary_def = 0,
0097 //          SecondaryLund * tertiary_def = 0)
0098 //     : LundWithSecondary(jet_alg, secondary_def), tertiary_def_(tertiary_def) {}
0099   
0100 //   /// LundWithSecondaryAndTertiary constructor with jet def
0101 //   LundWithSecondaryAndTertiary(const JetDefinition & jet_def,
0102 //                 SecondaryLund * secondary_def = 0,
0103 //                 SecondaryLund * tertiary_def = 0)
0104 //     : LundWithSecondary(jet_def, secondary_def), tertiary_def_(tertiary_def) {}
0105   
0106 //   /// destructor
0107 //   virtual ~LundWithSecondaryAndTertiary() {}
0108   
0109 //   /// tertiary Lund declustering
0110 //   virtual std::vector<LundDeclustering> tertiary(const PseudoJet& jet) const;
0111 
0112 //   /// description of the class
0113 //   virtual std::string description() const;
0114   
0115 // private:
0116 //   /// tertiary definition
0117 //   SecondaryLund * tertiary_def_;
0118 // };
0119 
0120 
0121 } // namespace contrib
0122 
0123 FASTJET_END_NAMESPACE
0124 
0125 #endif  // __FASTJET_CONTRIB_LUNDWITHSECONDARY_HH__
0126