Rivet analyses referenceCELLO_1989_I276764Photon, $\pi^0$ and $\eta$ spectra at 35 GeVExperiment: CELLO (Petra) Inspire ID: 276764 Status: VALIDATED Authors:
Beam energies: (17.5, 17.5) GeV Run details:
Measurement of the $\gamma$, $\pi^0$ and $\eta$ energy fractions in $e^+e^-$ collisions for centre-of-mass energy of 35 GeV by the CELLO experiment at Petra. Only the bin centroids are given in the paper and HEPdata so the bin widths have been inferred. Source code: CELLO_1989_I276764.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5#include "Rivet/Projections/Beam.hh"
6
7namespace Rivet {
8
9
10 /// @brief Add a short analysis description here
11 class CELLO_1989_I276764 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(CELLO_1989_I276764);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23
24 // Initialise and register projections
25 declare(Beam(), "Beams");
26 declare(FinalState(), "FS");
27 declare(UnstableParticles(), "UFS");
28 // Book histograms
29 book(_h_gamma , 2, 1, 1);
30 book(_h_pi0A , 3, 1, 1);
31 book(_h_pi0B , 4, 1, 1);
32 book(_h_eta , 5, 1, 1);
33 }
34
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 // at least 5 charged FS particles
39 const FinalState& fs = apply<FinalState>(event, "FS");
40 const size_t numParticles = fs.particles().size();
41
42 if (numParticles < 5) {
43 MSG_DEBUG("Failed leptonic event cut");
44 vetoEvent;
45 }
46 MSG_DEBUG("Passed leptonic event cut");
47
48 // Get beams and average beam momentum
49 const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
50 const double meanBeamMom = ( beams.first.p3().mod() +
51 beams.second.p3().mod() ) / 2.0;
52 MSG_DEBUG("Avg beam momentum = " << meanBeamMom);
53
54 // Final state to get particle spectra
55 for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==111 || Cuts::pid==221)) {
56 double xE = p.E()/meanBeamMom;
57 if(p.pid()==111) {
58 _h_pi0A->fill(xE);
59 _h_pi0B->fill(xE);
60 }
61 else
62 _h_eta->fill(xE);
63 }
64 for (const Particle& p : apply<FinalState>(event, "FS").particles(Cuts::pid==111 || Cuts::pid==22)) {
65 double xE = p.E()/meanBeamMom;
66 if(p.pid()==22)
67 _h_gamma->fill(xE);
68 }
69 }
70
71
72 /// Normalise histograms etc., after the run
73 void finalize() {
74
75 double fact = sqr(sqrtS())/GeV2*crossSection()/microbarn/sumOfWeights();
76 scale(_h_gamma, fact);
77 scale(_h_pi0A , fact);
78 scale(_h_pi0B , fact);
79 scale(_h_eta , fact);
80
81 }
82
83 /// @}
84
85
86 /// @name Histograms
87 /// @{
88 Histo1DPtr _h_gamma,_h_pi0A,_h_pi0B,_h_eta;
89
90
91 };
92
93
94 RIVET_DECLARE_PLUGIN(CELLO_1989_I276764);
95
96
97}
|