Rivet analyses


title: ATLAS_2013_I1263495

Inclusive isolated prompt photon analysis with 2011 LHC data

Experiment: ATLAS (LHC 7TeV)

Inspire ID: 1263495

Status: VALIDATED

Authors: - Giovanni Marchiori

References: - Expt page: ATLAS-STDM-2012-16 - arXiv: 1311.1440 - Phys.Rev. D89 (2014) 052004

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Inclusive photon $+ X$ events (primary $\gamma$+jet events) at $\sqrt{s} = 7$~TeV.

A measurement of the cross section for the production of isolated prompt photons in pp collisions at a center-of-mass energy $sqrt{s} = 7$ TeV is presented. The results are based on an integrated luminosity of 4.6 fb$^{-1}$ collected with the ATLAS detector at the LHC. The cross section is measured as a function of photon pseudorapidity $\eta^\gamma$ and transverse energy $E_T^\gamma$ in the kinematic range $100 < E_T^\gamma < 1000$ GeV and in the regions $|\eta^\gamma| < 1.37$ and $1.52 < |\eta^\gamma| < 2.37$. The results are compared to leading-order parton-shower Monte Carlo models and next-to-leading order perturbative QCD calculations. Next to-leading-order perturbative QCD calculations agree well with the measured cross sections as a function of $E_T^\gamma$ and $\eta^\gamma$.

Source code:ATLAS_2013_I1263495.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/LeadingParticlesFinalState.hh"

namespace Rivet {

/// Inclusive isolated prompt photon analysis with 2011 LHC data class ATLAS_2013_I1263495 : public Analysis { public:

/// Constructor
ATLAS_2013_I1263495()
    : Analysis("ATLAS_2013_I1263495"),
      _eta_bins{0.00, 1.37, 1.52, 2.37},
      _eta_bins_areaoffset{0.0, 1.5, 3.0} { }


/// Book histograms and initialise projections before the run
void init() {

  FinalState fs;
  declare(fs, "FS");

  // Consider the final state jets for the energy density calculation
  FastJets fj(fs, JetAlg::KT, 0.5);
  fj.useJetArea(new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()));
  declare(fj, "KtJetsD05");

  // Consider the leading pt photon with |eta| < 2.37 and pT > 100 GeV
  LeadingParticlesFinalState photonfs(FinalState(Cuts::abseta < 2.37 && Cuts::pT > 100 * GeV));
  photonfs.addParticleId(PID::PHOTON);
  declare(photonfs, "LeadingPhoton");

  // Book the dsigma/dEt (in eta bins) histograms
  book(_h_Et_photon[0], 1, 1, 1);
  book(_h_Et_photon[2], 2, 1, 1);

  // Book the dsigma/d|eta| histogram
  book(_h_eta_photon, 3, 1, 1);
}


/// Return eta bin for either dsigma/dET histogram (area_eta=false) or energy density correction (area_eta=true)
size_t _getEtaBin(double eta_w, bool area_eta) const {
  const double eta = fabs(eta_w);
  if (!area_eta) {
    return binIndex(eta, _eta_bins);
  }
  else {
    return binIndex(eta, _eta_bins_areaoffset);
  }
}


/// Perform the per-event analysis
void analyze(const Event& event) {
  // Retrieve leading photon
  Particles photons = apply<LeadingParticlesFinalState>(event, "LeadingPhoton").particles();
  if (photons.size() != 1) vetoEvent;
  const Particle& leadingPhoton = photons[0];

  // Veto events with photon in ECAL crack
  if (inRange(leadingPhoton.abseta(), 1.37, 1.52)) vetoEvent;

  // Compute isolation energy in cone of radius .4 around photon (all particles)
  FourMomentum mom_in_EtCone;
  Particles fs = apply<FinalState>(event, "FS").particles();
  for (const Particle& p : fs) {
    // Check if it's outside the cone of 0.4
    if (deltaR(leadingPhoton, p) >= 0.4) continue;
    // Don't count particles in the 5x7 central core
    if (deltaEta(leadingPhoton, p) < .025 * 5.0 * 0.5
        && deltaPhi(leadingPhoton, p) < (PI / 128.) * 7.0 * 0.5)
      continue;
    // Increment isolation energy
    mom_in_EtCone += p.momentum();
  }

  // Get the area-filtered jet inputs for computing median energy density, etc.
  vector<double> ptDensity;
  vector<vector<double>> ptDensities(_eta_bins_areaoffset.size() - 1);
  FastJets fast_jets = apply<FastJets>(event, "KtJetsD05");
  const shared_ptr<fastjet::ClusterSequenceArea> clust_seq_area = fast_jets.clusterSeqArea();
  for (const Jet& jet : fast_jets.jets()) {
    const double area = clust_seq_area->area(jet);
    if (area > 1e-4 && jet.abseta() < _eta_bins_areaoffset.back())
      ptDensities.at(_getEtaBin(jet.abseta(), true)).push_back(jet.pT() / area);
  }
  // Compute the median energy density, etc.
  for (size_t b = 0; b < _eta_bins_areaoffset.size() - 1; b++) {
    ptDensity += ptDensities[b].empty() ? 0 : median(ptDensities[b]);
  }
  // Compute the isolation energy correction (cone area*energy density)
  const double etCone_area = PI * sqr(0.4) - (7.0 * .025) * (5.0 * PI / 128.);
  const double correction = ptDensity[_getEtaBin(leadingPhoton.abseta(), true)] * etCone_area;

  // Apply isolation cut on area-corrected value
  if (mom_in_EtCone.Et() - correction > 7 * GeV) vetoEvent;

  // Fill histograms
  const size_t eta_bin = _getEtaBin(leadingPhoton.abseta(), false);
  _h_Et_photon[eta_bin]->fill(leadingPhoton.Et());
  _h_eta_photon->fill(leadingPhoton.abseta());
}


/// Normalise histograms etc., after the run
void finalize() {
  for (size_t i = 0; i < _eta_bins.size() - 1; i++) {
    if (fuzzyEquals(_eta_bins[i], 1.37)) continue;
    scale(_h_Et_photon[i], crossSection() / picobarn / sumOfWeights());
  }
  scale(_h_eta_photon, crossSection() / picobarn / sumOfWeights());
}

private:

Histo1DPtr _h_Et_photon[3];
Histo1DPtr _h_eta_photon;

vector<double> _eta_bins, _eta_bins_areaoffset;

};

RIVET_DECLARE_PLUGIN(ATLAS_2013_I1263495);

} ```