Rivet analyses referenceMC_PHOTONKTSPLITTINGSMonte Carlo validation observables for photon + jets productionExperiment: () Status: VALIDATED Authors:
Beams: * * Beam energies: ANY Run details:
Monte Carlo validation observables for photon + jets production Source code: MC_PHOTONKTSPLITTINGS.cc 1// -*- C++ -*-
2#include "Rivet/Analyses/MC_KTSPLITTINGS_BASE.hh"
3#include "Rivet/Projections/LeadingParticlesFinalState.hh"
4#include "Rivet/Projections/VetoedFinalState.hh"
5#include "Rivet/Projections/FastJets.hh"
6
7namespace Rivet {
8
9
10
11
12 /// @brief MC validation analysis for photon + jets events
13 class MC_PHOTONKTSPLITTINGS : public MC_KTSPLITTINGS_BASE {
14 public:
15
16 /// Default constructor
17 MC_PHOTONKTSPLITTINGS()
18 : MC_KTSPLITTINGS_BASE("MC_PHOTONKTSPLITTINGS", 4, "Jets")
19 { }
20
21
22 /// @name Analysis methods
23 /// @{
24
25 /// Book histograms
26 void init() {
27 // General FS
28 FinalState fs((Cuts::etaIn(-5.0, 5.0)));
29 declare(fs, "FS");
30
31 // set photon cuts from input options
32 const double etacut = getOption<double>("ABSETAGAMMAX", 2.5);
33 const double ptcut = getOption<double>("PTGAMMIN", 30.);
34
35 // Get leading photon
36 LeadingParticlesFinalState photonfs(FinalState(Cuts::abseta < etacut && Cuts::pT >= ptcut*GeV));
37 photonfs.addParticleId(PID::PHOTON);
38 declare(photonfs, "LeadingPhoton");
39
40 // FS for jets excludes the leading photon
41 VetoedFinalState vfs(fs);
42 vfs.addVetoOnThisFinalState(photonfs);
43 declare(vfs, "JetFS");
44
45 // set clustering radius from input option
46 const double R = getOption<double>("R", 0.6);
47
48 FastJets jetpro(vfs, JetAlg::KT, R);
49 declare(jetpro, "Jets");
50
51 MC_KTSPLITTINGS_BASE::init();
52 }
53
54
55 /// Do the analysis
56 void analyze(const Event& e) {
57 // Get the photon
58 const Particles photons = apply<FinalState>(e, "LeadingPhoton").particles();
59 if (photons.size() != 1) {
60 vetoEvent;
61 }
62 const FourMomentum photon = photons.front().momentum();
63
64 // Get all charged particles
65 const FinalState& fs = apply<FinalState>(e, "JetFS");
66 if (fs.empty()) {
67 vetoEvent;
68 }
69
70 // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy
71 const double egamma = photon.E();
72 double econe = 0.0;
73 for (const Particle& p : fs.particles()) {
74 if (deltaR(photon, p.momentum()) < 0.4) {
75 econe += p.E();
76 // Veto as soon as E_cone gets larger
77 if (econe/egamma > 0.07) {
78 vetoEvent;
79 }
80 }
81 }
82
83 MC_KTSPLITTINGS_BASE::analyze(e);
84 }
85
86
87 // Finalize
88 void finalize() {
89 MC_KTSPLITTINGS_BASE::finalize();
90 }
91
92 /// @}
93
94 };
95
96
97 RIVET_DECLARE_PLUGIN(MC_PHOTONKTSPLITTINGS);
98
99}
|