Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:57:14

0001 // $Id: LundGenerator.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_LUNDGENERATOR_HH__
0024 #define __FASTJET_CONTRIB_LUNDGENERATOR_HH__
0025 
0026 #include <fastjet/internal/base.hh>
0027 #include "fastjet/tools/Recluster.hh"
0028 #include "fastjet/JetDefinition.hh"
0029 #include "fastjet/PseudoJet.hh"
0030 #include <string>
0031 #include <vector>
0032 #include <utility>
0033 
0034 // TODO:
0035 // - add interface to write declusterings to json files
0036 //   [gps, possibly as a separate header, in order to factorise the json.hh dependence]
0037 // - something for pileup subtraction?
0038 // - do we want to update json.hh to latest? And handle
0039 //   the precision issue more elegantly than the current 
0040 //   hack of editing json.hh
0041 // - what do we do about the fact that json.hh is c++11?
0042 
0043 FASTJET_BEGIN_NAMESPACE
0044 
0045 namespace contrib{
0046 
0047 class LundGenerator;
0048 
0049 //----------------------------------------------------------------------
0050 /// \class LundDeclustering
0051 /// Contains the declustering variables associated with a single qnode
0052 /// on the Lund plane
0053 class LundDeclustering {
0054 public:
0055 
0056   /// return the pair PseudoJet, i.e. sum of the two subjets
0057   const PseudoJet & pair()  const {return pair_;}
0058   /// returns the subjet with larger transverse momentum
0059   const PseudoJet & harder() const {return harder_;}
0060   /// returns the subjet with smaller transverse momentum
0061   const PseudoJet & softer() const {return softer_;}
0062 
0063 
0064   /// returns pair().m() [cached]
0065   double m()         const {return m_;}
0066 
0067   /// returns the rapidity-azimuth separation of the pair of subjets [cached]
0068   double Delta()     const {return Delta_;}
0069 
0070   /// returns softer().pt() / (softer().pt() + harder().pt()) [cached]
0071   double z()         const {return z_;}
0072 
0073   /// returns softer().pt() * Delta() [cached]
0074   double kt()        const {return kt_;}
0075 
0076   /// returns z() * Delta() [cached]
0077   double kappa()     const {return kappa_;}
0078   
0079   /// returns an azimuthal type angle of softer() around harder()
0080   double psi()       const {return psi_;}
0081   
0082   /// returns the x,y coordinates that are used in the Lund-plane plots
0083   /// of arXiv:1807.04758: ln(1/Delta()), and ln(kt()) respectively
0084   std::pair<double,double> const lund_coordinates() const {
0085     return std::pair<double,double>(std::log(1.0/Delta()),std::log(kt()));
0086   }
0087 
0088   virtual ~LundDeclustering() {}
0089 
0090 private:
0091   double m_, Delta_, z_, kt_, kappa_, psi_;
0092   PseudoJet pair_, harder_, softer_;
0093 
0094 protected:
0095   /// the constructor is private, because users will not generally be
0096   /// constructing a LundDeclustering element themselves.
0097   LundDeclustering(const PseudoJet& pair,
0098            const PseudoJet& j1, const PseudoJet& j2);
0099 
0100   friend class LundGenerator;
0101 
0102 };
0103   
0104 
0105 //----------------------------------------------------------------------
0106 /// \class LundGenerator
0107 /// Generates vector of LundDeclustering for a given jet
0108 /// corresponding to its Lund plane.
0109 class LundGenerator : public FunctionOfPseudoJet< std::vector<LundDeclustering> > {
0110 public:
0111   /// LundGenerator constructor
0112   LundGenerator(JetAlgorithm jet_alg = cambridge_algorithm)
0113     : recluster_(JetDefinition(jet_alg, JetDefinition::max_allowable_R)){}
0114     
0115   /// LundGenerator constructor with jet definition
0116   LundGenerator(const JetDefinition & jet_def) : recluster_(jet_def){}
0117   
0118   /// destructor
0119   virtual ~LundGenerator() {}
0120 
0121   /// obtain the declusterings of the primary plane of the jet
0122   virtual std::vector<LundDeclustering> result(const PseudoJet& jet) const;
0123 
0124   /// description of the class
0125   virtual std::string description() const;
0126   
0127 private:
0128   /// recluster definition
0129   Recluster recluster_;
0130 };
0131 
0132 
0133 } // namespace contrib
0134 
0135 FASTJET_END_NAMESPACE
0136 
0137 #endif  // __FASTJET_CONTRIB_LUNDGENERATOR_HH__
0138