rivet is hosted by Hepforge, IPPP Durham
Rivet  2.7.0
AliceCommon.hh
1 
9 #ifndef PROJECTIONS_ALICECOMMON_HH
10 #define PROJECTIONS_ALICECOMMON_HH
11 #include <Rivet/Tools/AliceCommon.hh>
12 #include <Rivet/Projections/FinalState.hh>
13 #include <Rivet/Projections/SingleValueProjection.hh>
14 #include <Rivet/Projections/TriggerProjection.hh>
16 
17 namespace Rivet
18 {
19  namespace ALICE
20  {
32  template <int MODE>
34  {
35  public:
41  {
42  setName("ALICE::V0Multiplicity");
43  Cut cut;
44  if (MODE < 0) cut = V0Cacceptance;
45  else if (MODE > 0) cut = V0Aacceptance;
46  else cut = (V0Aacceptance || V0Cacceptance);
47  // Declare our projection. Note, the cuts stipulate charged
48  // particles, so we just use a final state (rather than
49  // charged-final state) projection here.
50  const FinalState fs(cut);
51  this->declare(fs, "FinalState");
52  }
56  virtual ~V0Multiplicity() {}
64  virtual void project(const Event& e)
65  {
66  clear();
67  set(apply<FinalState>(e,"FinalState").particles().size());
68  }
74  virtual std::unique_ptr<Rivet::Projection> clone() const
75  {
76  return std::unique_ptr<Projection>(new V0Multiplicity<MODE>(*this));
77  }
83  virtual int compare(const Projection& p) const
84  {
85  return dynamic_cast<const V0Multiplicity<MODE>*>(&p) ?
86  EQUIVALENT : UNDEFINED;
87  }
88  };
89  //----------------------------------------------------------------
108  //----------------------------------------------------------------
119  template <bool INNER>
121  {
122  public:
128  {
129  setName("ALICE::CLMultiplicity");
130  Cut cut;
131  if (INNER) cut = CL0acceptance;
132  else cut = CL1acceptance;
133  // Declare our projection. Note, the cuts stipulate charged
134  // particles, so we just use a final state (rather than
135  // charged-final state) projection here.
136  const FinalState fs(cut);
137  this->declare(fs, "FinalState");
138  }
142  virtual ~CLMultiplicity() {}
150  virtual void project(const Event& e)
151  {
152  clear();
153  set(apply<FinalState>(e,"FinalState").particles().size());
154  }
160  virtual std::unique_ptr<Rivet::Projection> clone() const
161  {
162  return std::unique_ptr<Projection>(new CLMultiplicity<INNER>(*this));
163  }
169  virtual int compare(const Projection& p) const
170  {
171  return dynamic_cast<const CLMultiplicity<INNER>*>(&p) ?
172  EQUIVALENT : UNDEFINED;
173  }
174  };
175  //----------------------------------------------------------------
188  //================================================================
198  template <int MODE>
200  {
201  public:
207  {
208  setName("ALICE::V0Trigger");
209  // Declare our projection. Note, the cuts stipulate charged
210  // particles, so we just use a final state (rather than
211  // charged-final state) projection here.
212  const V0Multiplicity<MODE> fs;
213  this->declare(fs, "FinalState");
214  }
218  virtual ~V0Trigger() {}
225  virtual void project(const Event& e)
226  {
227  fail(); // Assume failure
228  if (apply<V0Multiplicity<MODE>>(e,"FinalState")() > 0) pass();
229  }
235  virtual std::unique_ptr<Rivet::Projection> clone() const
236  {
237  return std::unique_ptr<Projection>(new V0Trigger<MODE>(*this));
238  }
247  virtual int compare(const Projection& p) const
248  {
249  return dynamic_cast<const V0Trigger<MODE>*>(&p) ?
250  EQUIVALENT : UNDEFINED;
251  }
252  };
253  //----------------------------------------------------------------
259  // typedef V0Trigger<-1> V0ATrigger;
260  using V0ATrigger = V0Trigger<-1>;
266  // typedef V0Trigger<+1> V0CTrigger;
273  // typedef V0Trigger<0> V0OrTrigger;
275  //----------------------------------------------------------------
281  {
282  public:
288  {
289  const V0ATrigger v0a;
290  const V0CTrigger v0c;
291  this->declare(v0a, "V0A");
292  this->declare(v0c, "V0C");
293  }
297  virtual ~V0AndTrigger() {}
304  virtual void project(const Event& e)
305  {
306  fail(); // Assume failure
307  if (apply<V0ATrigger>(e,"V0A")() &&
308  apply<V0CTrigger>(e,"V0C")()) pass();
309  }
318  virtual int compare(const Projection& p) const
319  {
320  return dynamic_cast<const V0AndTrigger*>(&p) ?
321  EQUIVALENT : UNDEFINED;
322  }
328  virtual std::unique_ptr<Rivet::Projection> clone() const
329  {
330  return std::unique_ptr<Projection>(new V0AndTrigger(*this));
331  }
332  };
333 
334 
335  //================================================================
345  {
346  public:
347  PrimaryParticles(const Cut& c=Cuts::open())
349  {}
359  virtual int compare(const Projection& p) const
360  {
361  const PrimaryParticles* o = dynamic_cast<const PrimaryParticles*>(&p);
362  if (_cuts != o->_cuts) return UNDEFINED;
363  return mkPCmp(*o,"PrimaryParticles");
364  }
370  virtual std::unique_ptr<Rivet::Projection> clone() const
371  {
372  return std::unique_ptr<Projection>(new PrimaryParticles(*this));
373  }
374  protected:
390  bool isPrimaryPID(const HepMC::GenParticle* p) const
391  {
392  int pdg = PID::abspid(p->pdg_id());
393  // Check for nuclus
394  if (pdg > 1000000000) return true;
395 
396  switch (pdg) {
397  case Rivet::PID::MUON:
398  case Rivet::PID::ELECTRON:
399  case Rivet::PID::GAMMA:
400  case Rivet::PID::PIPLUS:
401  case Rivet::PID::KPLUS:
402  case Rivet::PID::K0S:
403  case Rivet::PID::K0L:
404  case Rivet::PID::PROTON:
405  case Rivet::PID::NEUTRON:
406  case Rivet::PID::LAMBDA:
407  case Rivet::PID::SIGMAMINUS:
408  case Rivet::PID::SIGMAPLUS:
409  case Rivet::PID::XIMINUS:
410  case Rivet::PID::XI0:
411  case Rivet::PID::OMEGAMINUS:
412  case Rivet::PID::NU_E:
413  case Rivet::PID::NU_MU:
414  case Rivet::PID::NU_TAU:
415  return true;
416  }
417  return false;
418  }
419  };
420  }
421 }
422 #endif
423 //
424 // EOF
425 //
426 
427 
428 
void setName(const std::string &name)
Used by derived classes to set their name.
Definition: Projection.hh:133
Definition: ALICE_2010_I880049.cc:13
virtual int compare(const Projection &p) const
Definition: AliceCommon.hh:169
virtual ~CLMultiplicity()
Definition: AliceCommon.hh:142
V0AndTrigger()
Definition: AliceCommon.hh:286
virtual void project(const Event &e)
Definition: AliceCommon.hh:64
virtual void project(const Event &e)
Definition: AliceCommon.hh:225
Base class for projections returning a single floating point value.
Definition: SingleValueProjection.hh:18
const Cut CL0acceptance
Definition: AliceCommon.hh:48
V0Multiplicity<+1 > V0CMultiplicity
Definition: AliceCommon.hh:101
V0Multiplicity<-1 > V0AMultiplicity
Definition: AliceCommon.hh:95
virtual ~V0Multiplicity()
Definition: AliceCommon.hh:56
Project out primary particles according to definition. A Rivet projection that mimics an experimental...
Definition: PrimaryParticles.hh:22
Definition: AliceCommon.hh:199
virtual int compare(const Projection &p) const
Definition: AliceCommon.hh:359
std::vector< GenParticle const * > particles(const GenEvent *ge)
Definition: RivetHepMC.hh:36
virtual int compare(const Projection &p) const
Definition: AliceCommon.hh:247
CLMultiplicity< true > CL0Multiplicity
Definition: AliceCommon.hh:181
CLMultiplicity()
Definition: AliceCommon.hh:126
const Cut CL1acceptance
Definition: AliceCommon.hh:54
V0Multiplicity< 0 > V0MMultiplicity
Definition: AliceCommon.hh:107
Definition: Event.hh:22
Base class for projections returning a bool corresponding to a trigger.
Definition: TriggerProjection.hh:19
virtual int compare(const Projection &p) const
Definition: AliceCommon.hh:83
Cmp< Projection > mkPCmp(const Projection &otherparent, const std::string &pname) const
Definition: Projection.cc:55
const PROJ & apply(const Event &evt, const Projection &proj) const
Definition: ProjectionApplier.hh:86
const Cut & open()
Fully open cut singleton, accepts everything.
Definition: Cuts.cc:81
bool isPrimaryPID(const HepMC::GenParticle *p) const
Definition: AliceCommon.hh:390
Definition: AliceCommon.hh:33
virtual ~V0AndTrigger()
Definition: AliceCommon.hh:297
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:160
virtual int compare(const Projection &p) const
Definition: AliceCommon.hh:318
Definition: AliceCommon.hh:280
virtual void project(const Event &e)
Definition: AliceCommon.hh:150
virtual std::unique_ptr< Rivet::Projection > clone() const
Definition: AliceCommon.hh:235
V0Trigger()
Definition: AliceCommon.hh:205
virtual void project(const Event &e)
Definition: AliceCommon.hh:304
Primary particle definition based on PDG code.
virtual std::unique_ptr< Rivet::Projection > clone() const
Definition: AliceCommon.hh:160
virtual std::unique_ptr< Rivet::Projection > clone() const
Definition: AliceCommon.hh:370
Definition: AliceCommon.hh:120
Base class for all Rivet projections.
Definition: Projection.hh:29
const Cut V0Aacceptance
Definition: AliceCommon.hh:36
virtual std::unique_ptr< Rivet::Projection > clone() const
Definition: AliceCommon.hh:74
Definition: AliceCommon.hh:344
V0Multiplicity()
Definition: AliceCommon.hh:39
CLMultiplicity< false > CL1Multiplicity
Definition: AliceCommon.hh:187
const Cut V0Cacceptance
Definition: AliceCommon.hh:42
virtual ~V0Trigger()
Definition: AliceCommon.hh:218
virtual std::unique_ptr< Rivet::Projection > clone() const
Definition: AliceCommon.hh:328
void clear()
Unset the value.
Definition: SingleValueProjection.hh:47