Rivet analyses referenceE288_1981_I153009Measurement of the continuum of dimuons produced in high-energy proton-nucleus collisionsExperiment: E288 (Fermilab p-N) Inspire ID: 153009 Status: VALIDATED No authors listed References:
Beam energies: (13.7, 13.7) GeV
We report final results of a series of measurements of continuum dimuon production in proton-nucleus collisions at Fermilab. New results with 6 times more statistics are included. Source code: E288_1981_I153009.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/FastJets.hh"
5#include "Rivet/Projections/DileptonFinder.hh"
6
7namespace Rivet {
8
9
10 /// Measurement of dimuon continuum in proton-nucleus collisions
11 class E288_1981_I153009 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(E288_1981_I153009);
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 DileptonFinder zfinder(91.2*GeV, 0.0, Cuts::abseta < 15.0 && Cuts::abspid == PID::MUON, Cuts::massIn(3.5*GeV, 30.0*GeV));
26 declare(zfinder, "DileptonFinder");
27
28 // Book histograms
29 // 400 GeV and y = 0.03
30 book(_hist_pT_M_400, {5., 6., 7., 8., 9., 10., 11., 12., 13., 14.});
31 for (auto& b : _hist_pT_M_400->bins()) {
32 book(b, 9, 1, b.index());
33 }
34
35 int Nbin = 50;
36 book(_h_m_DiMuon, "DiMuon_mass", Nbin, 0.0,30.0);
37 book(_h_pT_DiMuon, "DiMuon_pT", Nbin, 0.0,20.0);
38 book(_h_y_DiMuon, "DiMuon_y", Nbin,-8.0, 8.0);
39 book(_h_xF_DiMuon, "DiMuon_xF", Nbin,-1.5, 1.5);
40 }
41
42
43 /// Perform the per-event analysis
44 void analyze(const Event& event) {
45
46 const double sqrts_tol = 10. ;
47 if (!isCompatibleWithSqrtS(27.4*GeV, sqrts_tol)) {
48 MSG_ERROR("Incorrect beam energy used: " << sqrtS()/GeV);
49 throw Error("Unexpected sqrtS ! Only 27.4 GeV is supported");
50 }
51
52 const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
53 if (zfinder.particles().size() >= 1) {
54
55 double Zmass = zfinder.bosons()[0].momentum().mass()/GeV;
56 double Zpt = zfinder.bosons()[0].momentum().pT()/GeV;
57 double Zpl = zfinder.bosons()[0].momentum().pz()/GeV;
58 double Zy = zfinder.bosons()[0].momentum().rapidity();
59 //double ZE = zfinder.bosons()[0].momentum().E();
60
61 double xf = 2.*Zpl/sqrtS() ;
62 _h_xF_DiMuon->fill(xf);
63 _h_m_DiMuon->fill(Zmass/GeV);
64 _h_pT_DiMuon->fill(Zpt);
65 _h_y_DiMuon ->fill(Zy);
66 double Zymin = -1.0;
67 double Zymax = 1.03;
68 double Z_y_width = Zymax - Zymin ;
69 if ( Zy > Zymin && Zy < Zymax ) {
70 // Edsigma^3/dp^3 = 2E/(pi*sqrts)dsigma/dx_F/dq_T^2 = 1/pi dsigma/dy/dq_T^2
71 // normalisation of Zy bin width = Zwidth
72 if (Zpt > 0) _hist_pT_M_400->fill(Zmass,Zpt, 1./2./Zpt/Z_y_width);
73 }
74 }
75
76 }
77
78
79 /// Normalise histograms etc., after the run
80 void finalize() {
81 scale(_hist_pT_M_400, crossSection()/femtobarn/(sumOfWeights() * M_PI));
82 }
83
84 /// @}
85
86
87 /// @name Histograms
88 /// @{
89 Histo1DGroupPtr _hist_pT_M_400;
90 Histo1DPtr _h_m_DiMuon ;
91 Histo1DPtr _h_pT_DiMuon;
92 Histo1DPtr _h_y_DiMuon;
93 Histo1DPtr _h_xF_DiMuon;
94 /// @}
95
96 };
97
98
99 RIVET_DECLARE_PLUGIN(E288_1981_I153009);
100
101}
|