Rivet analyses referenceCDF_2005_I667384Differential cross sections for prompt diphoton productionExperiment: CDF (Tevatron Run 2) Inspire ID: 667384 Status: VALIDATED Authors:
Beam energies: (980.0, 980.0) GeV Run details:
Measurement of the cross section of prompt diphoton production in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV using a data sample of 207 pb$^{-1}$ as a function of the diphoton mass, the transverse momentum of the diphoton system, and the azimuthal angle between the two photons. Source code: CDF_2005_I667384.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/IdentifiedFinalState.hh"
5#include <array>
6
7namespace Rivet {
8
9
10 /// @brief CDF diff cross-sections for prompt di-photon production
11 class CDF_2005_I667384 : public Analysis {
12 public:
13
14 RIVET_DEFAULT_ANALYSIS_CTOR(CDF_2005_I667384);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 void init() {
21 FinalState fs;
22 declare(fs, "FS");
23
24 IdentifiedFinalState ifs(Cuts::abseta < 0.9 && Cuts::pT > 13*GeV);
25 ifs.acceptId(PID::PHOTON);
26 declare(ifs, "IFS");
27
28 for (size_t yAxisId=0; yAxisId<4; ++yAxisId) {
29 book(_h_m_PP[yAxisId], 1, 1, yAxisId + 1);
30 book(_h_pT_PP[yAxisId], 2, 1, yAxisId + 1);
31 book(_h_dphi_PP[yAxisId], 3, 1, yAxisId + 1);
32 }
33 }
34
35
36 void analyze(const Event& event) {
37 Particles photons = apply<IdentifiedFinalState>(event, "IFS").particlesByPt();
38 if (photons.size() < 2 || photons[0].pT() < 14.0*GeV) {
39 vetoEvent;
40 }
41
42 // Isolate photons with ET_sum in cone
43 Particles isolated_photons;
44 Particles fs = apply<FinalState>(event, "FS").particles();
45 for (const Particle& photon : photons) {
46 FourMomentum mom_in_cone;
47 double eta_P = photon.eta();
48 double phi_P = photon.phi();
49 for (const Particle& p : fs) {
50 if (deltaR(eta_P, phi_P, p.eta(), p.phi()) < 0.4) {
51 mom_in_cone += p.momentum();
52 }
53 }
54 if (mom_in_cone.Et()-photon.Et() < 1.0*GeV) {
55 isolated_photons.push_back(photon);
56 }
57 }
58
59 if (isolated_photons.size() != 2) {
60 vetoEvent;
61 }
62
63 FourMomentum mom_PP = isolated_photons[0].momentum() + isolated_photons[1].momentum();
64 for (size_t i=0; i<4; ++i) {
65 _h_m_PP[i]->fill(mom_PP.mass());
66 _h_pT_PP[i]->fill(mom_PP.pT());
67 _h_dphi_PP[i]->fill(mapAngle0ToPi(isolated_photons[0].phi()-
68 isolated_photons[1].phi())/M_PI);
69 }
70 }
71
72
73 void finalize() {
74 for (size_t i=0; i<4; ++i) {
75 scale(_h_m_PP[i], crossSection()/picobarn/sumOfWeights());
76 scale(_h_pT_PP[i], crossSection()/picobarn/sumOfWeights());
77 scale(_h_dphi_PP[i], crossSection()/picobarn/M_PI/sumOfWeights());
78 }
79 }
80
81 /// @}
82
83
84 private:
85
86 /// @name Histograms
87 /// @{
88 std::array<Histo1DPtr,4> _h_m_PP;
89 std::array<Histo1DPtr,4> _h_pT_PP;
90 std::array<Histo1DPtr,4> _h_dphi_PP;
91 /// @}
92
93 };
94
95
96
97 RIVET_DECLARE_ALIASED_PLUGIN(CDF_2005_I667384, CDF_2005_S6080774);
98
99}
|