Rivet  3.1.0
Projection.hh
1 // -*- C++ -*-
2 #ifndef RIVET_Projection_HH
3 #define RIVET_Projection_HH
4 
5 #include "Rivet/Projection.fhh"
6 #include "Rivet/ProjectionApplier.hh"
7 #include "Rivet/ProjectionHandler.hh"
8 #include "Rivet/Config/RivetCommon.hh"
9 #include "Rivet/Tools/Cuts.hh"
10 // NOTE: Cmp.hh, Event.hh and Particle.hh included at the bottom
11 
12 namespace Rivet {
13 
14 
15  // Forward declaration
16  class Event;
17 
18 
29  class Projection : public ProjectionApplier {
30  public:
31 
33  friend class Event;
34 
36  friend class Cmp<Projection>;
37 
38 
39 
41 
42 
44  Projection();
45 
47  virtual unique_ptr<Projection> clone() const = 0;
48 
50  virtual ~Projection();
51 
53 
54 
56  virtual std::string name() const {
57  return _name;
58  }
59 
61  bool valid() const {
62  return _isValid;
63  }
64 
66  bool failed() const {
67  return !valid();
68  }
69 
71 
72 
77  virtual void project(const Event& e) = 0;
78 
98  virtual CmpState compare(const Projection& p) const = 0;
99 
105  bool before(const Projection& p) const;
106 
108 
109 
110 
113 
114 
120  virtual const std::set<PdgIdPair> beamPairs() const;
121 
122 
125  Projection& addPdgIdPair(PdgId beam1, PdgId beam2) {
126  _beamPairs.insert(PdgIdPair(beam1, beam2));
127  return *this;
128  }
129 
131 
132 
133  protected:
134 
136  Log& getLog() const {
137  string logname = "Rivet.Projection." + name();
138  return Log::getLog(logname);
139  }
140 
142  void setName(const std::string& name) {
143  _name = name;
144  }
145 
147  void fail() {
148  _isValid = false;
149  }
150 
153  Cmp<Projection> mkNamedPCmp(const Projection& otherparent, const std::string& pname) const;
154 
159  Cmp<Projection> mkPCmp(const Projection& otherparent, const std::string& pname) const;
160 
162  virtual Projection& operator = (const Projection&);
163 
164 
165  private:
166 
169  string _name;
170 
173  set<PdgIdPair> _beamPairs;
174 
176  bool _isValid;
177 
178  };
179 
180 
181 }
182 
183 
185 inline bool std::less<const Rivet::Projection *>::operator()(const Rivet::Projection* x,
186  const Rivet::Projection* y) const {
187  return x->before(*y);
188 }
189 
190 
191 #endif
192 
193 
194 #include "Rivet/Event.hh"
195 #include "Rivet/Particle.hh"
196 #include "Rivet/Tools/Cmp.hh"
197 
198 
201 #define DEFAULT_RIVET_PROJ_CLONE(clsname) \
202  virtual unique_ptr<Projection> clone() const { return unique_ptr<Projection>(new clsname(*this)); }
void setName(const std::string &name)
Used by derived classes to set their name.
Definition: Projection.hh:142
Definition: MC_Cent_pPb.hh:10
virtual ~Projection()
The destructor.
Projection()
The default constructor.
virtual unique_ptr< Projection > clone() const =0
Clone on the heap.
virtual Projection & operator=(const Projection &)
Block Projection copying.
friend class Cmp< Projection >
The Cmp specialization for Projection is a friend.
Definition: Projection.hh:36
static Log & getLog(const std::string &name)
virtual const std::set< PdgIdPair > beamPairs() const
Logging system for controlled & formatted writing to stdout.
Definition: Logging.hh:10
virtual void project(const Event &e)=0
Projection & addPdgIdPair(PdgId beam1, PdgId beam2)
Definition: Projection.hh:125
Representation of a HepMC event, and enabler of Projection caching.
Definition: Event.hh:22
Cmp< Projection > mkPCmp(const Projection &otherparent, const std::string &pname) const
bool failed() const
Get the state of the projetion.
Definition: Projection.hh:66
Common base class for Projection and Analysis, used for internal polymorphism.
Definition: ProjectionApplier.hh:21
virtual std::string name() const
Get the name of the projection.
Definition: Projection.hh:56
void fail()
Set the projection in an unvalid state.
Definition: Projection.hh:147
virtual CmpState compare(const Projection &p) const =0
Cmp< Projection > mkNamedPCmp(const Projection &otherparent, const std::string &pname) const
bool valid() const
Get the state of the projetion.
Definition: Projection.hh:61
bool before(const Projection &p) const
Base class for all Rivet projections.
Definition: Projection.hh:29
Log & getLog() const
Get a Log object based on the getName() property of the calling projection object.
Definition: Projection.hh:136