rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2015_I1346843

Measurement of differential cross-section of FSR photons in $Z$ decays
Experiment: CMS (LHC)
Inspire ID: 1346843
Status: VALIDATED
Authors:
• Andrew Kubik
• Michael Schmitt
References:
Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
• $p p \to \mu^+ \mu^- \gamma$+X 7 TeV. These cross sections are given for the fiducial region defined as follows - Leading muon $p_T > 31$ GeV and abs(eta) < 2.4 - Trailing muon $p_T > 9$ GeV and abs(eta) < 2.4 - Photon $p_T > 5$ GeV - Photon abs(eta) < 2.4 but not 1.4 < abs(eta) < 1.6 - Separation between photon and closest muon 0.05 < DeltaR < 3.0 - Di-muon invariant mass 30 < M_mumu < 87 GeV

The differential cross sections for the production of photons in Z to mu+ mu- gamma decays are presented as a function of the transverse energy of the photon and its separation from the nearest muon. The data for these measurements were collected with the CMS detector and correspond to an integrated luminosity of 4.7 inverse femtobarns of pp collisions at sqrt(s) = 7 TeV delivered by the CERN LHC.

Source code: CMS_2015_I1346843.cc
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedLeptons.hh" #include "Rivet/Projections/NeutralFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" namespace Rivet { /// Differential cross-section of FSR photons in Z decays class CMS_2015_I1346843 : public Analysis { public: /// Constructor DEFAULT_RIVET_ANALYSIS_CTOR(CMS_2015_I1346843); /// Book histograms and initialise projections before the run void init() { Cut c_photons = Cuts::pT >= 5.0*GeV && (Cuts::etaIn(-2.5, 1.4) || Cuts::etaIn(1.6, 2.5)); IdentifiedFinalState photons(c_photons); photons.acceptId(PID::PHOTON); declare(photons, "PHOTFS"); Cut c_muons = Cuts::pT > 9*GeV && Cuts::abseta < 2.4; IdentifiedFinalState muons(c_muons); muons.acceptIdPair(PID::MUON); declare(muons, "MUFS"); book(_hist_pho_et ,1, 1, 1); // photon transverse energy book(_hist_pho_et_wide ,1, 2, 1); // photon transverse energy (0.5 < dr < 3.0) book(_hist_pho_et_close ,1, 3, 1); // photon transverse energy (0.05 < dr < 0.5) book(_hist_pho_et_lqt ,1, 4, 1); // photon transverse energy (q_T < 10) book(_hist_pho_et_hqt ,1, 5, 1); // photon transverse energy (q_T > 50) book(_hist_pho_dr ,2, 1, 1); // delta_R book(_hist_pho_dr_lqt ,2, 2, 1); // delta_R (q_T < 10) book(_hist_pho_dr_hqt ,2, 3, 1); // delta_R (q_T > 50) } // Perform the per-event analysis void analyze(const Event& event) { const Particles muons = apply(event, "MUFS").particlesByPt(); if (muons.size() < 2) vetoEvent; if (muons[0].pT()/GeV < 31) vetoEvent; if (muons[0].charge()*muons[1].charge() > 0) vetoEvent; const double mZ = (muons[0].momentum() + muons[1].momentum()).mass(); if (!inRange(mZ, 30*GeV, 87*GeV)) vetoEvent; const Particles photons = apply(event, "PHOTFS").particlesByPt(); // We want the photon with the highest pT that does not come from a decay for (const Particle& p : photons) { if (!p.isDirect()) continue; if (!p.isStable()) continue; const double dR = std::min(deltaR(p, muons[0]), deltaR(p, muons[1]) ); if (!inRange(dR, 0.05, 3.0)) continue; // Calculate the three-body (mu,mu,gamma) transverse momentum const double qT = (muons[0].mom() + muons[1].mom() + p.mom()).pT(); // Fill the analysis histograms _hist_pho_et->fill(p.pT()/GeV, 1.0); _hist_pho_dr->fill(dR, 1.0); (dR <= 0.5 ? _hist_pho_et_close : _hist_pho_et_wide)->fill(p.pT()/GeV, 1.0); if (qT / GeV < 10.) { _hist_pho_et_lqt->fill(p.pT()/GeV, 1.0); _hist_pho_dr_lqt->fill(dR, 1.0); } if (qT / GeV > 50.) { _hist_pho_et_hqt->fill(p.pT()/GeV, 1.0); _hist_pho_dr_hqt->fill(dR, 1.0); } break; // Exit the loop since we found the highest pT lepton already } } /// Normalise histograms etc., after the run void finalize() { scale(_hist_pho_et, crossSection() / sumOfWeights()); scale(_hist_pho_et_wide, crossSection() / sumOfWeights()); scale(_hist_pho_et_close, crossSection() / sumOfWeights()); scale(_hist_pho_et_lqt, crossSection() / sumOfWeights()); scale(_hist_pho_et_hqt, crossSection() / sumOfWeights()); scale(_hist_pho_dr, crossSection() / sumOfWeights()); scale(_hist_pho_dr_lqt, crossSection() / sumOfWeights()); scale(_hist_pho_dr_hqt, crossSection() / sumOfWeights()); } private: Histo1DPtr _hist_pho_et; Histo1DPtr _hist_pho_et_wide, _hist_pho_et_close; Histo1DPtr _hist_pho_et_lqt, _hist_pho_et_hqt; Histo1DPtr _hist_pho_dr; Histo1DPtr _hist_pho_dr_lqt, _hist_pho_dr_hqt; }; DECLARE_RIVET_PLUGIN(CMS_2015_I1346843); }