Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-05-12 09:05:02

0001 // -*- C++ -*-
0002 #ifndef RIVET_GammaGammaLeptons_HH
0003 #define RIVET_GammaGammaLeptons_HH
0004 
0005 #include "Rivet/Projections/Beam.hh"
0006 #include "Rivet/Projections/PromptFinalState.hh"
0007 #include "Rivet/Projections/HadronicFinalState.hh"
0008 #include "Rivet/Projections/LeptonFinder.hh"
0009 #include "Rivet/Projections/UndressBeamLeptons.hh"
0010 #include "Rivet/Particle.hh"
0011 #include "Rivet/Event.hh"
0012 
0013 namespace Rivet {
0014 
0015 
0016   /// @brief Get the incoming and outgoing leptons in a gamma gamma collision event in e+e-
0017   class GammaGammaLeptons : public Projection {
0018   public:
0019 
0020     /// @name Constructors.
0021     /// @{
0022 
0023     /// Constructor with optional cuts first
0024     GammaGammaLeptons(const Cut& cuts=Cuts::OPEN,
0025               LeptonReco lreco=LeptonReco::ALL, ObjOrdering lsort=ObjOrdering::ENERGY,
0026               double beamundresstheta=0.0, double isolDR=0.0, double dressDR=0.0)
0027       : _isolDR(isolDR), _lsort(lsort)
0028     {
0029       setName("GammaGammaLeptons");
0030       declare(HadronicFinalState(), "IFS");
0031 
0032       // Beam undressing
0033       if (beamundresstheta > 0.0) {
0034         declare(UndressBeamLeptons(beamundresstheta), "Beam");
0035       } else {
0036         declare(Beam(), "Beam");
0037       }
0038 
0039       // Lepton reco mode
0040       switch (lreco) {
0041       case LeptonReco::ALL:
0042         declare(FinalState(cuts), "LFS");
0043         break;
0044       case LeptonReco::ALL_DRESSED:
0045         declare(LeptonFinder(FinalState(), dressDR, cuts), "LFS");
0046         break;
0047       case LeptonReco::PROMPT_BARE:
0048         declare(PromptFinalState(cuts), "LFS");
0049         break;
0050       case LeptonReco::PROMPT_DRESSED:
0051         declare(LeptonFinder(PromptFinalState(), dressDR, cuts), "LFS");
0052         break;
0053       }
0054     }
0055 
0056 
0057     /// Constructor without lepton-ordering spec, requiring cuts
0058     GammaGammaLeptons(Cut& cuts, LeptonReco lreco=LeptonReco::ALL,
0059               double beamundresstheta=0.0, double isolDR=0.0, double dressDR=0.0)
0060       : GammaGammaLeptons(cuts, lreco, ObjOrdering::ENERGY, beamundresstheta, isolDR, dressDR)
0061     {  }
0062 
0063     /// Constructor without cuts, requiring lepton reco spec
0064     GammaGammaLeptons(LeptonReco lreco, ObjOrdering lsort=ObjOrdering::ENERGY,
0065           double beamundresstheta=0.0, double isolDR=0.0, double dressDR=0.0)
0066       : GammaGammaLeptons(Cuts::OPEN, lreco, lsort, beamundresstheta, isolDR, dressDR)
0067     {  }
0068 
0069     /// Constructor without cuts or lepton-ordering spec, requiring lepton reco spec
0070     GammaGammaLeptons(LeptonReco lreco,
0071           double beamundresstheta=0.0, double isolDR=0.0, double dressDR=0.0)
0072       : GammaGammaLeptons(Cuts::OPEN, lreco, ObjOrdering::ENERGY, beamundresstheta, isolDR, dressDR)
0073     {  }
0074 
0075 
0076     /// Constructor from other constructors
0077     GammaGammaLeptons(const FinalState& leptoncandidates,
0078               const Beam& beamproj=Beam(),
0079               const FinalState& isolationfs=FinalState(),
0080               double isolDR = 0.0, ObjOrdering lsort=ObjOrdering::ENERGY)
0081       : _isolDR(isolDR), _lsort(lsort)
0082     {
0083       declare(leptoncandidates, "LFS");
0084       declare(isolationfs, "IFS");
0085       declare(beamproj, "Beam");
0086     }
0087 
0088 
0089     /// Clone on the heap.
0090     RIVET_DEFAULT_PROJ_CLONE(GammaGammaLeptons);
0091 
0092     /// @}
0093 
0094 
0095     /// Import to avoid warnings about overload-hiding
0096     using Projection::operator =;
0097 
0098 
0099   protected:
0100 
0101     /// Perform the projection operation on the supplied event.
0102     virtual void project(const Event& e);
0103 
0104     /// Compare with other projections.
0105     virtual CmpState compare(const Projection& p) const;
0106 
0107 
0108   public:
0109 
0110     /// The incoming lepton
0111     const ParticlePair & in() const { return _incoming; }
0112 
0113     /// The outgoing lepton
0114     const ParticlePair & out() const { return _outgoing; }
0115 
0116 
0117   protected:
0118 
0119     /// The incoming leptons
0120     ParticlePair _incoming;
0121 
0122     /// The outgoing leptons
0123     ParticlePair _outgoing;
0124 
0125     /// An isolation cut around the lepton
0126     double _isolDR;
0127 
0128     /// How to sort leptons
0129     ObjOrdering _lsort;
0130 
0131   };
0132 
0133 
0134 }
0135 
0136 #endif