|
||||
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
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |