Rivet analyses referencePLUTO_1981_I156315Energy-Energy correlation for a range of energies between 7.7 and 31.6 GeVExperiment: PLUTO (DORIS/Petra) Inspire ID: 156315 Status: VALIDATED Authors:
Beams: e+ e- Beam energies: (3.9, 3.9); (4.7, 4.7); (6.0, 6.0); (6.5, 6.5); (8.5, 8.5); (11.0, 11.0); (13.8, 13.8); (15.4, 15.4) GeV Run details:
Measurement of the energy-energy correlation, and its assymetry, or a range of energies between 7.7 and 31.6 GeV. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples. Source code: PLUTO_1981_I156315.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/FinalState.hh"
5
6namespace Rivet {
7
8
9 /// @brief EEC for a wide range of energies
10 class PLUTO_1981_I156315 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(PLUTO_1981_I156315);
15
16
17 /// @name Analysis methods
18 //@{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 declare(FinalState(), "FS");
25 // Book histograms
26 unsigned int iloc(0);
27 if(isCompatibleWithSqrtS(7.7)) {
28 iloc=1;
29 }
30 else if(isCompatibleWithSqrtS(9.4)) {
31 iloc=2;
32 }
33 else if (isCompatibleWithSqrtS(12.)) {
34 iloc=3;
35 }
36 else if (isCompatibleWithSqrtS(13.)) {
37 iloc=4;
38 }
39 else if (isCompatibleWithSqrtS(17.)) {
40 iloc=5;
41 }
42 else if (isCompatibleWithSqrtS(22.)) {
43 iloc=6;
44 }
45 else if (isCompatibleWithSqrtS(27.6)) {
46 iloc=7;
47 }
48 else if (isCompatibleWithSqrtS(30,31.6)) {
49 iloc=8;
50 }
51 else
52 MSG_ERROR("Beam energy not supported!");
53 // Book histograms
54 book(_h_EEC, 1, 1, iloc);
55 if(iloc==7||iloc==8) {
56 book(_h_AEEC, 5, 1, 1);
57 // _h_opposite = bookHisto1D(2, 1, 1);
58 }
59 else if(iloc==21 ||iloc==2)
60 book(_h_AEEC,4, 1, 1);
61 book(_weightSum,"TMP/weightSum");
62 }
63
64
65 /// Perform the per-event analysis
66 void analyze(const Event& event) {
67 // First, veto on leptonic events by requiring at least 4 charged FS particles
68 const FinalState& fs = apply<FinalState>(event, "FS");
69 // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
70 if ( fs.particles().size() < 2) {
71 MSG_DEBUG("Failed leptonic event cut");
72 vetoEvent;
73 }
74 MSG_DEBUG("Passed leptonic event cut");
75 _weightSum->fill();
76
77 double Evis = 0.0;
78 for (const Particle& p : fs.particles()) {
79 Evis += p.E();
80 }
81 double Evis2 = sqr(Evis);
82 // (A)EEC
83 // Need iterators since second loop starts at current outer loop iterator, i.e. no "foreach" here!
84 for (Particles::const_iterator p_i = fs.particles().begin(); p_i != fs.particles().end(); ++p_i) {
85 for (Particles::const_iterator p_j = p_i; p_j != fs.particles().end(); ++p_j) {
86 const Vector3 mom3_i = p_i->momentum().p3();
87 const Vector3 mom3_j = p_j->momentum().p3();
88 const double energy_i = p_i->momentum().E();
89 const double energy_j = p_j->momentum().E();
90 const double thetaij = mom3_i.unit().angle(mom3_j.unit())/M_PI*180.;
91 double eec = (energy_i*energy_j) / Evis2;
92 if(p_i != p_j) eec *= 2.;
93 _h_EEC ->fill(thetaij, eec);
94 // if(_h_opposite) _h_opposite ->fill(mom3_i.unit().dot(mom3_j.unit()), eec);
95 if(_h_AEEC) {
96 if (thetaij < 90.) {
97 _h_AEEC->fill(thetaij, -eec);
98 }
99 else {
100 _h_AEEC ->fill(180.-thetaij, eec);
101 }
102 }
103 }
104 }
105
106 }
107
108
109 /// Normalise histograms etc., after the run
110 void finalize() {
111 scale(_h_EEC , 360.0/M_PI/ *_weightSum);
112 scale(_h_AEEC, 360.0/M_PI/ *_weightSum);
113 // scale(_h_opposite, 2./ *_weightSum);
114
115 }
116
117 //@}
118
119 /// @name Histograms
120 //@{
121 Histo1DPtr _h_EEC, _h_AEEC, _h_opposite;
122 CounterPtr _weightSum;
123 //@}
124
125 };
126
127
128 // The hook for the plugin system
129 RIVET_DECLARE_PLUGIN(PLUTO_1981_I156315);
130
131
132}
|