Rivet  3.1.2
TauFinder.hh
1 #ifndef RIVET_TauFinder_HH
2 #define RIVET_TauFinder_HH
3 
4 #include "Rivet/Projections/FinalState.hh"
5 #include "Rivet/Projections/UnstableParticles.hh"
6 
7 namespace Rivet {
8 
9 
13  class TauFinder : public FinalState {
14  public:
15 
16  enum class DecayMode {
17  ANY = 0,
18  ALL = 0,
19  LEPTONIC,
20  HADRONIC
21  };
22 
23  static bool isHadronic(const Particle& tau) {
24  assert(tau.abspid() == PID::TAU);
25  return any(tau.stableDescendants(), isHadron);
26  }
27 
28  static bool isLeptonic(const Particle& tau) {
29  return !isHadronic(tau);
30  }
31 
32 
33  TauFinder(DecayMode decaymode=DecayMode::ANY, const Cut& cut=Cuts::open()) {
35  setName("TauFinder");
36  _decmode = decaymode;
37  declare(UnstableParticles(cut), "UFS");
38  }
39 
40 
43 
44 
45  const Particles& taus() const { return _theParticles; }
46 
47 
48  protected:
49 
51  void project(const Event& e);
52 
54  virtual CmpState compare(const Projection& p) const;
55 
56 
57  private:
58 
60  DecayMode _decmode;
61 
62  };
63 
64 
66  using Taus = TauFinder;
67 
68 
69 }
70 
71 
72 #endif
void setName(const std::string &name)
Used by derived classes to set their name.
Definition: Projection.hh:142
Definition: MC_Cent_pPb.hh:10
bool any(const CONTAINER &c)
Return true if x is true for any x in container c, otherwise false.
Definition: Utils.hh:311
Project out all physical-but-decayed particles in an event.
Definition: UnstableParticles.hh:25
const Cut & open()
Fully open cut singleton, accepts everything.
Particle representation, either from a HepMC::GenEvent or reconstructed.
Definition: Particle.hh:18
bool isHadron(int pid)
Definition: ParticleIdUtils.hh:322
Representation of a HepMC event, and enabler of Projection caching.
Definition: Event.hh:22
DEFAULT_RIVET_PROJ_CLONE(TauFinder)
Clone on the heap.
Convenience finder of unstable taus.
Definition: TauFinder.hh:13
Project out all final-state particles in an event. Probably the most important projection in Rivet! ...
Definition: FinalState.hh:12
const PROJ & declare(const PROJ &proj, const std::string &name)
Register a contained projection (user-facing version)
Definition: ProjectionApplier.hh:170
TauFinder(DecayMode decaymode=DecayMode::ANY, const Cut &cut=Cuts::open())
Definition: TauFinder.hh:33
void project(const Event &e)
Apply the projection on the supplied event.
Base class for all Rivet projections.
Definition: Projection.hh:29
PdgId abspid() const
Absolute value of the PDG ID code.
Definition: Particle.hh:164
Particles stableDescendants(const Cut &c=Cuts::OPEN) const
virtual CmpState compare(const Projection &p) const
Compare with other projections.