Rivet Analyses Reference

CDF_2005_S6080774

Differential cross sections for prompt diphoton production
Experiment: CDF (Tevatron Run 2)
Inspire ID: 667384
Status: VALIDATED
Authors:
  • Frank Siegert
References:Beams: p- p+
Beam energies: (980.0, 980.0) GeV
Run details:
  • $p \bar{p} \to \gamma \gamma$ [+ jets] at 1960 GeV. The analysis uses photons with pT larger then 13 GeV. To allow for shifts in the shower, the ME cut on the transverse photon momentum shouldn't be too hard, e.g. 5 GeV.

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_S6080774.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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include <array>

namespace Rivet {


  /// @brief CDF diff cross-sections for prompt di-photon production
  class CDF_2005_S6080774 : public Analysis {
  public:

    RIVET_DEFAULT_ANALYSIS_CTOR(CDF_2005_S6080774);


    /// @name Analysis methods
    //@{

    void init() {
      FinalState fs;
      declare(fs, "FS");

      IdentifiedFinalState ifs(Cuts::abseta < 0.9 && Cuts::pT > 13*GeV);
      ifs.acceptId(PID::PHOTON);
      declare(ifs, "IFS");

      for (size_t yAxisId=0; yAxisId<4; ++yAxisId) {
        book(_h_m_PP[yAxisId],    1, 1, yAxisId + 1);
        book(_h_pT_PP[yAxisId],   2, 1, yAxisId + 1);
        book(_h_dphi_PP[yAxisId], 3, 1, yAxisId + 1);
      }
    }


    void analyze(const Event& event) {
      Particles photons = apply<IdentifiedFinalState>(event, "IFS").particlesByPt();
      if (photons.size() < 2 || photons[0].pT() < 14.0*GeV) {
        vetoEvent;
      }

      // Isolate photons with ET_sum in cone
      Particles isolated_photons;
      Particles fs = apply<FinalState>(event, "FS").particles();
      for (const Particle& photon : photons) {
        FourMomentum mom_in_cone;
        double eta_P = photon.eta();
        double phi_P = photon.phi();
        for (const Particle& p : fs) {
          if (deltaR(eta_P, phi_P, p.eta(), p.phi()) < 0.4) {
            mom_in_cone += p.momentum();
          }
        }
        if (mom_in_cone.Et()-photon.Et() < 1.0*GeV) {
          isolated_photons.push_back(photon);
        }
      }

      if (isolated_photons.size() != 2) {
        vetoEvent;
      }

      FourMomentum mom_PP = isolated_photons[0].momentum() + isolated_photons[1].momentum();
      for (size_t i=0; i<4; ++i) {
        _h_m_PP[i]->fill(mom_PP.mass());
        _h_pT_PP[i]->fill(mom_PP.pT());
        _h_dphi_PP[i]->fill(mapAngle0ToPi(isolated_photons[0].phi()-
                                          isolated_photons[1].phi())/M_PI);
      }
    }


    void finalize() {
      for (size_t i=0; i<4; ++i) {
        scale(_h_m_PP[i], crossSection()/sumOfWeights());
        scale(_h_pT_PP[i], crossSection()/sumOfWeights());
        scale(_h_dphi_PP[i], crossSection()/M_PI/sumOfWeights());
      }
    }

    //@}


  private:

    /// @name Histograms
    //@{
    std::array<Histo1DPtr,4> _h_m_PP;
    std::array<Histo1DPtr,4> _h_pT_PP;
    std::array<Histo1DPtr,4> _h_dphi_PP;
    //@}

  };



  RIVET_DECLARE_ALIASED_PLUGIN(CDF_2005_S6080774, CDF_2005_I667384);

}