Rivet analyses referenceATLAS_2018_I1615866Exclusive photon-photon production of muon pairs in proton-proton collisions at $\sqrt{s} = 13$ TeVExperiment: ATLAS (LHC) Inspire ID: 1615866 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
The production of exclusive $\gamma\gamma\to\mu^+\mu^-$ events in proton-proton collisions at a centre-of-mass energy of 13 TeV is measured with the ATLAS detector at the LHC, using data corresponding to an integrated luminosity of $3.2 \text{fb}^{-1}$. The measurement is performed for a dimuon invariant mass of between 12 GeV and 70 GeV, including the differential cross section as a function of the mass. Source code: ATLAS_2018_I1615866.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/ChargedFinalState.hh"
4#include "Rivet/Projections/IdentifiedFinalState.hh"
5
6namespace Rivet {
7
8
9 /// @brief gamma gamma -> mu+ mu-
10 class ATLAS_2018_I1615866 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2018_I1615866);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 ChargedFinalState cfs(Cuts::abseta < 2.5 and Cuts::pT>0.4);
23 declare(cfs,"CFS");
24 // Get muons which pass the initial kinematic cuts
25 IdentifiedFinalState muon_fs(Cuts::abseta < 2.4 && Cuts::pT > 6*GeV);
26 muon_fs.acceptIdPair(PID::MUON);
27 declare(muon_fs, "MUON_FS");
28 // histograms
29 book(_h_sigma,1,1,1);
30 book(_h_mass ,2,1,1);
31 }
32
33 /// Perform the per-event analysis
34 void analyze(const Event& event) {
35 const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "CFS");
36 if (cfs.size() != 2) vetoEvent; // no other charged particles in 2.5
37 // extract the muons
38 const Particles& muonFS = apply<IdentifiedFinalState>(event, "MUON_FS").particles();
39 // have 2 muons with opposite charge
40 if (muonFS.size() != 2) vetoEvent;
41 if (muonFS[0].pid() != -muonFS[1].pid()) vetoEvent;
42 // invariant mass between 12 and 70
43 const double mmumu = (muonFS[0].momentum()+muonFS[1].momentum()).mass();
44 if(mmumu<12. or mmumu>70.) vetoEvent;
45 // cut pt >10 if pair mass >30
46 for(unsigned int ix=0;ix<2;++ix) {
47 if(mmumu>30 && muonFS[ix].perp()<10.) vetoEvent;
48 }
49 // fill histogram
50 _h_mass->fill(mmumu);
51 _h_sigma->fill();
52 }
53
54
55 /// Normalise histograms etc., after the run
56 void finalize() {
57 scale(_h_sigma, crossSection()/picobarn/sumOfWeights());
58 scale(_h_mass , crossSection()/picobarn/sumOfWeights());
59 }
60
61 /// @}
62
63
64 /// @name Histograms
65 /// @{
66 CounterPtr _h_sigma;
67 Histo1DPtr _h_mass;
68 /// @}
69
70
71 };
72
73
74 RIVET_DECLARE_PLUGIN(ATLAS_2018_I1615866);
75
76}
|