File indexing completed on 2025-04-19 09:06:56
0001
0002 #ifndef RIVET_DressedLepton_HH
0003 #define RIVET_DressedLepton_HH
0004
0005 #include "Rivet/Particle.hh"
0006 #include "Rivet/Config/RivetCommon.hh"
0007
0008 namespace Rivet {
0009
0010
0011
0012 enum class LeptonOrigin { PROMPT=1, NODECAY=1, ALL };
0013
0014
0015 enum class LeptonReco { ALL=0, ALL_BARE=0,
0016 ALL_DRESSED=1,
0017 DIRECT_BARE=2, PROMPT_BARE=2,
0018 DIRECT_DRESSED=3, PROMPT_DRESSED=3 };
0019
0020
0021 enum class DressingType { DR=0, CONE=0, CLUSTER=1, AKT=1 };
0022
0023
0024 enum class PhotonOrigin { NONE=0, PROMPT=1, NODECAY=1, ALL };
0025
0026
0027
0028
0029
0030 class DressedLepton : public Particle {
0031 public:
0032
0033
0034 DressedLepton(const Particle& dlepton);
0035
0036
0037
0038
0039 DressedLepton(const Particle& lepton, const Particles& photons, bool momsum=true);
0040
0041
0042
0043
0044 void addPhoton(const Particle& p, bool momsum=true);
0045
0046
0047 const Particle& bareLepton() const;
0048
0049
0050 const Particles photons() const { return slice(constituents(), 1); }
0051
0052 };
0053
0054
0055
0056 using DressedLeptons = vector<DressedLepton>;
0057
0058
0059 template <typename T, typename FN = T(const ParticleBase&)>
0060 inline T sum(const DressedLeptons& c, FN&& fn, const T& start=T()) {
0061 auto f = std::function(std::forward<FN>(fn));
0062 T rtn = start;
0063 for (const auto& x : c) rtn += fn(x);
0064 return rtn;
0065 }
0066
0067
0068
0069 }
0070
0071 #endif