Rivet analyses


title: ATLAS_2014_I1307756

Search for scalar diphoton resonances in ATLAS at sqrt(s) = 8 TeV

Experiment: ATLAS (LHC 8 TeV)

Inspire ID: 1307756

Status: VALIDATED

Authors: - Jessica Leveque

References: - Expt page: ATLAS-HIGG-2014-04 - arXiv: hep-ex/1407.6583

Beams: p+ p+

Beam energies: (4000.0, 4000.0)GeV

Run details: - Inclusive diphotons events at $\sqrt(s)$ = 8 TeV

A search for narrow resonances $m_X$ decaying into two photons in the mass range $65 < mX < 600$ GeV was performed using 20.3 inverse femtobarns of $pp$ collisions data collected by the ATLAS experiment at the Large Hadron Collider. The results are presented as a model-independent limit on the fiducial production cross-section of a scalar boson times branching ratio into two photons. This routine applies the fiducial cuts on the photons (kinematic cuts and isolation cuts) and computes the fiducial cross-section. The total cross-section times branching ratio to two photons must be given as input to the routine.

Source code:ATLAS_2014_I1307756.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/IdentifiedFinalState.hh"

namespace Rivet {

class ATLAS_2014_I1307756 : public Analysis { public:

/// Constructor
ATLAS_2014_I1307756()
    : Analysis("ATLAS_2014_I1307756") { }


/// @name Analysis methods
/// @{

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

  /// Initialise and register projections here
  FinalState fs;
  declare(fs, "FS");

  FastJets fj(fs, JetAlg::KT, 0.5);
  fj.useJetArea(new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()));
  declare(fj, "KtJetsD05");

  IdentifiedFinalState photonfs(Cuts::abseta < 2.37 && Cuts::pT > 22 * GeV);
  photonfs.acceptId(PID::PHOTON);
  declare(photonfs, "photons");

  // Initialize event count here:
  book(_fidWeights, "_fidWeights");
}


int getEtaBin(double eta) const {
  double aeta = fabs(eta);
  return binIndex(aeta, _eta_bins_areaoffset);
}


/// Perform the per-event analysis
void analyze(const Event& event) {
  /// Require at least 2 photons in final state
  Particles photons = apply<IdentifiedFinalState>(event, "photons").particlesByPt();
  if (photons.size() < 2) vetoEvent;

  // Get jet pT densities
  vector<vector<double>> ptDensities(_eta_bins_areaoffset.size() - 1);
  const auto clust_seq_area = apply<FastJets>(event, "KtJetsD05").clusterSeqArea();
  for (const Jet& jet : apply<FastJets>(event, "KtJetsD05").jets()) {
    const double area = clust_seq_area->area(jet);
    if (area > 1e-4 && jet.abseta() < _eta_bins_areaoffset.back()) {
      ptDensities.at(getEtaBin(jet.abseta())) += jet.pT() / area;
    }
  }

  /// Compute the median energy density per eta bin
  vector<double> ptDensity;
  for (size_t b = 0; b < _eta_bins_areaoffset.size() - 1; ++b) {
    ptDensity += ptDensities[b].empty() ? 0 : median(ptDensities[b]);
  }

  // Loop over photons and find isolated ones
  Particles isolated_photons;
  for (const Particle& ph : photons) {
    Particles fs = apply<FinalState>(event, "FS").particles();
    FourMomentum mom_in_EtCone;
    for (const Particle& p : fs) {

      // Reject if the particle is not in DR=0.4 cone
      if (deltaR(ph.momentum(), p.momentum()) > 0.4) continue;

      // Reject if the particle falls in the photon core
      if (fabs(ph.eta() - p.eta()) < 0.025 * 7 * 0.5 && fabs(ph.phi() - p.phi()) < PI / 128. * 5 * 0.5)
        continue;

      // Reject if the particle is a neutrino (muons are kept)
      if (p.isNeutrino()) continue;

      // Sum momenta
      mom_in_EtCone += p.momentum();
    }

    // Subtract the UE correction (area*density)
    const double ETCONE_AREA = M_PI * .4 * .4 - (7.0 * .025) * (5.0 * M_PI / 128.);
    const double correction = ptDensity[getEtaBin(ph.eta())] * ETCONE_AREA;

    // Add isolated photon to list
    if (mom_in_EtCone.Et() - correction > 12 * GeV) continue;
    isolated_photons.push_back(ph);
  }

  // Require at least two isolated photons
  if (isolated_photons.size() < 2) vetoEvent;

  // Select leading pT pair
  std::sort(isolated_photons.begin(), isolated_photons.end(), cmpMomByPt);
  const FourMomentum& y1 = isolated_photons[0].momentum();
  const FourMomentum& y2 = isolated_photons[1].momentum();

  // Compute invariant mass
  const FourMomentum yy = y1 + y2;
  const double Myy = yy.mass();

  // If Myy >= 110 GeV, apply relative cuts
  if (Myy >= 110 * GeV && (y1.Et() / Myy < 0.4 || y2.Et() / Myy < 0.3)) vetoEvent;

  // Add to cross-section
  _fidWeights->fill();
}

void finalize() {
  scale(_fidWeights, crossSectionPerEvent() / femtobarn);
}

/// @}

private:

const vector<double> _eta_bins_areaoffset = {0.0, 1.5, 3.0};
CounterPtr _fidWeights;

};

RIVET_DECLARE_PLUGIN(ATLAS_2014_I1307756);

} ```