rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2018_I1698006

Z(vv)+gamma measurement at 13 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1698006
Status: VALIDATED
Authors:
  • J.Butterworth@ucl.ac.uk
  • sokratis.michail.19@ucl.ac.uk
  • yoran.yeh.20@ucl.ac.uk
References:
  • JHEP 12 (2018) 010
  • 10.1007/JHEP12(2018)010
  • arXiv: 1810.04995
Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • p + p -> Z0 nu nubar gamma at 13 TeV

The production of Z bosons in association with a high-energy photon (Z$\gamma$ production) is studied in the neutrino decay channel of the Z boson using pp collisions at $\sqrt s$ = 13 TeV. The analysis uses a data sample with an integrated luminosity of 36.1 fb−1 collected by the ATLAS detector at the LHC in 2015 and 2016. Candidate Z$\gamma$ events with invisible decays of the Z boson are selected by requiring significant transverse momentum (pT) of the dineutrino system in conjunction with a single isolated photon with large transverse energy (ET). The rate of Z$\gamma$ production is measured as a function of photon ET, dineutrino system pT and jet multiplicity. Evidence of anomalous triple gauge-boson couplings is sought in Z$\gamma$ production with photo ET greater than 600 GeV. No excess is observed relative to the Standard Model expectation, and upper limits are set on the strength of ZZ$\gamma$ and Z$\gamma\gamma$ couplings.

Source code: ATLAS_2018_I1698006.cc
  1#include "Rivet/Analysis.hh"
  2#include "Rivet/Projections/FinalState.hh"
  3#include "Rivet/Projections/FastJets.hh"
  4#include "Rivet/Projections/PromptFinalState.hh"
  5#include "Rivet/Projections/InvisibleFinalState.hh"
  6#include "Rivet/Projections/VetoedFinalState.hh"
  7#include "Rivet/Projections/DressedLeptons.hh"
  8
  9
 10
 11namespace Rivet {
 12  
 13  /// @brief ATLAS pTmiss+gamma measurement at 13 TeV 
 14  class ATLAS_2018_I1698006 : public Analysis {
 15  public:
 16    
 17    /// Default constructor
 18    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2018_I1698006);
 19    
 20    /// @name Analysis methods
 21    //@{
 22    void init() {
 23
 24      // Get options
 25      // Default (OFF) uses the extended phase space of the paper.
 26      // LVETO ON will add an additonal lepton veto to reject non-Zgamma events
 27      // (for conservative BSM limits, for example).
 28      _mode = 0;
 29      if ( getOption("LVETO") == "ON" ) _mode = 1;
 30
 31      //prompt photons
 32      const Cut photoncut = Cuts::abspid == PID::PHOTON && Cuts::Et > 150*GeV && Cuts::abseta < 2.37;
 33      const PromptFinalState photon_fs(photoncut);
 34      declare(photon_fs, "Photons");
 35
 36      //missing energy (prompt neutrinos)
 37      declare(InvisibleFinalState(true), "MET");
 38      
 39      if (_mode==1) {
 40	FinalState allLeps(Cuts::abspid == PID::ELECTRON || Cuts::abspid == PID::MUON);
 41	FinalState photons(Cuts::abspid == PID::PHOTON);
 42	PromptFinalState promptLeps(allLeps);
 43	Cut dressedLep_cuts = (Cuts::abseta < 2.7) && (Cuts::pT > 7*GeV);
 44	const DressedLeptons dressedLeps(photons, promptLeps, 0.1, dressedLep_cuts, true);
 45	declare(dressedLeps, "dressedLeptons");
 46      }
 47      
 48      //jets. run the jet finder on a final state without the prompt photons, and without neutrinos or muons
 49      VetoedFinalState jet_fs(Cuts::abseta > 4.5);
 50      jet_fs.addVetoOnThisFinalState(photon_fs);
 51      FastJets fastjets(jet_fs, FastJets::ANTIKT, 0.4, JetAlg::Muons::NONE, JetAlg::Invisibles::NONE);
 52      declare(fastjets, "Jets");
 53
 54
 55      //books histograms
 56      //fig.4a
 57      book(_h["Et_inc"],2,1,1);
 58      //fig.4b
 59      book(_h["Et_exc"],3,1,1);
 60      //fig.5a
 61      book(_h["pT_inc"],4,1,1);
 62      //fig.5b
 63      book(_h["pT_exc"],5,1,1);
 64      //fig.6
 65      book(_h["Njets"],6,1,1);
 66
 67    }
 68    
 69    void analyze(const Event& event) {
 70
 71
 72      const Particles& photons = apply<PromptFinalState>(event,"Photons").particlesByPt();
 73      const Jets& jets = apply<FastJets>(event,"Jets").jetsByPt(Cuts::pT > 50*GeV);
 74      const FinalState& metfs = apply<InvisibleFinalState>(event,"MET");
 75      Vector3 met_vec;
 76      for (const Particle& p : metfs.particles()) met_vec += p.mom().perpVec();
 77
 78
 79      if (_mode==1) {
 80	const vector<DressedLepton> &dressedLeptons = apply<DressedLeptons>(event, "dressedLeptons").dressedLeptons();
 81	if (dressedLeptons.size() > 0) vetoEvent;
 82      }
 83      
 84      
 85      //Nγ==1 and Emiss > 150 GeV
 86      if (met_vec.mod() > 150*GeV && photons.size()==1){
 87
 88	  //inclusive case (Njet>=0)
 89	  if (jets.size()>=0){
 90	    bool dR_veto = any(jets, DeltaRLess(photons[0], 0.3));
 91	    if (not dR_veto) {
 92	      double Et_photon = photons[0].Et()/GeV;
 93	      _h["Et_inc"]->fill(Et_photon);
 94	      //fill in missing energy (neutrino) pT histogram (inclusive)
 95	      _h["pT_inc"]->fill(met_vec.mod()/GeV);
 96	    }
 97	  }
 98
 99	  //exclusive case (Njet==0)
100	  if (jets.size() == 0){
101	    double Et_photon = photons[0].Et()/GeV;
102	    _h["Et_exc"]->fill(Et_photon);
103	     //fill in missing energy (neutrino) pT histogram (exclusive)
104	    _h["pT_exc"]->fill(met_vec.mod()/GeV);
105	  }
106
107	  _h["Njets"]->fill(jets.size());
108	  
109      }
110      
111    }
112
113    void finalize() {
114      
115      const double sf = crossSection()/femtobarn/sumOfWeights();
116      scale(_h, sf);
117
118    }
119
120    //@}
121
122    private:
123    map<string, Histo1DPtr> _h;
124    size_t _mode;
125    
126  };
127
128  // Magic required by the plugin system 
129  RIVET_DECLARE_PLUGIN(ATLAS_2018_I1698006);
130  
131}