Rivet analyses referenceALEPH_2003_I626022$\gamma\gamma\to\pi^+\pi^-$ ($2<\sqrt{s}<6$ GeV) and $K^+K^-$ ($2.25<\sqrt{s}<4$ GeV)Experiment: ALEPH (LEP) Inspire ID: 626022 Status: VALIDATED No authors listed References:
Beam energies: ANY Run details:
Measurement of the differential cross section for $\gamma\gamma\to\pi^+\pi^-$ ($2<\sqrt{s}<6$ GeV) and $K^+K^-$ ($2.25<\sqrt{s}<4$ GeV). The cross section as a function of the centre-of-mass energy of the photonic collision is measured, and the differential cross section with respect to the meson scattering angle are measured. Source code: ALEPH_2003_I626022.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/FastJets.hh"
5#include "Rivet/Projections/LeptonFinder.hh"
6#include "Rivet/Projections/MissingMomentum.hh"
7#include "Rivet/Projections/PromptFinalState.hh"
8
9namespace Rivet {
10
11
12 /// @brief gamma gamma -> pi+pi-/K+ K-
13 class ALEPH_2003_I626022 : public Analysis {
14 public:
15
16 /// Constructor
17 RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_2003_I626022);
18
19
20 /// @name Analysis methods
21 ///@{
22
23 /// Book histograms and initialise projections before the run
24 void init() {
25 // check CMS energy in range
26 if (sqrtS()<2.*GeV || sqrtS()>6.*GeV)
27 throw Error("Invalid CMS energy for ");
28 // Final state
29 declare(FinalState(),"FS");
30 // histos
31 book(_h_Pi,1,1,1);
32 if (sqrtS()<4.)
33 book(_h_K,2,1,1);
34 book(_cPi, "/TMP/nPi_");
35 book(_cK , "/TMP/nK_" );
36 }
37
38
39 /// Perform the per-event analysis
40 void analyze(const Event& event) {
41 Particles part = apply<FinalState>(event,"FS").particles();
42 if (part.size()!=2) vetoEvent;
43 if (part[0].pid()!=-part[1].pid()) vetoEvent;
44 double cTheta(0.);
45 bool foundPi(false),foundK(false);
46 for (const Particle & p : part) {
47 if (p.pid()==PID::PIPLUS) {
48 foundPi=true;
49 cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
50 }
51 else if (p.pid()==PID::KPLUS) {
52 foundK=true;
53 cTheta = abs(p.momentum().z()/p.momentum().p3().mod());
54 }
55 }
56 if (!foundPi && !foundK) vetoEvent;
57 if (foundPi&&_h_Pi) _h_Pi->fill(cTheta);
58 if (foundK &&_h_K ) _h_K ->fill(cTheta);
59 if (foundPi) _cPi->fill();
60 else if (foundK) _cK->fill();
61 }
62
63
64 /// Normalise histograms etc., after the run
65 void finalize() {
66 double fact = crossSection()/nanobarn/sumOfWeights();
67 if (_h_Pi) scale(_h_Pi, fact);
68 if (_h_K ) scale(_h_K , fact);
69 for (unsigned int ih=3; ih<5; ++ih) {
70 CounterPtr count = ih==3 ? _cPi : _cK;
71 double sigma = count->val()*fact;
72 double error = count->err()*fact;
73 // hist for axis
74 Estimate1DPtr cross;
75 book(cross, ih, 1, 1);
76 for (auto& b : cross->bins()) {
77 if (inRange(sqrtS(), b.xMin(), b.xMax())) {
78 b.set(sigma, error);
79 }
80 }
81 }
82 }
83
84 ///@}
85
86
87 /// @name Histograms
88 ///@{
89 Histo1DPtr _h_Pi,_h_K;
90 CounterPtr _cPi,_cK;
91 ///@}
92
93
94 };
95
96
97 RIVET_DECLARE_PLUGIN(ALEPH_2003_I626022);
98
99}
|