Rivet analyses referenceMC_ZZKTSPLITTINGSMonte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets productionExperiment: () Status: VALIDATED Authors:
Beams: * * Beam energies: ANY Run details:
Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production Source code: MC_ZZKTSPLITTINGS.cc 1// -*- C++ -*-
2#include "Rivet/Analyses/MC_KTSPLITTINGS_BASE.hh"
3#include "Rivet/Projections/DileptonFinder.hh"
4#include "Rivet/Projections/FastJets.hh"
5#include "Rivet/Projections/VetoedFinalState.hh"
6
7namespace Rivet {
8
9
10 /// @brief MC validation analysis for Z[ee]Z[mumu] + jets events
11 class MC_ZZKTSPLITTINGS : public MC_KTSPLITTINGS_BASE {
12 public:
13
14 /// Default constructor
15 MC_ZZKTSPLITTINGS()
16 : MC_KTSPLITTINGS_BASE("MC_ZZKTSPLITTINGS", 4, "Jets")
17 { }
18
19
20 /// @name Analysis methods
21 /// @{
22
23 /// Book histograms
24 void init() {
25
26 // set FS cuts from input options
27 const double etaecut = getOption<double>("ABSETAEMAX", 3.5);
28 const double ptecut = getOption<double>("PTEMIN", 25.);
29 Cut cute = Cuts::abseta < etaecut && Cuts::pT > ptecut*GeV;
30 DileptonFinder zeefinder(91.2*GeV, 0.2, cute &&
31 Cuts::abspid == PID::ELECTRON, Cuts::massIn(65*GeV, 115*GeV));
32 declare(zeefinder, "ZeeFinder");
33
34 VetoedFinalState zmminput;
35 zmminput.vetoFinalState(zeefinder);
36
37 // set FS cuts from input options
38 const double etamucut = getOption<double>("ABSETAMUMAX", 3.5);
39 const double ptmucut = getOption<double>("PTMUMIN", 25.);
40 Cut cutmu = Cuts::abseta < etamucut && Cuts::pT > ptmucut*GeV;
41 DileptonFinder zmmfinder(PromptFinalState(zmminput), 91.2*GeV, 0.2, cutmu &&
42 Cuts::abspid == PID::MUON, Cuts::massIn(65*GeV, 115*GeV));
43 declare(zmmfinder, "ZmmFinder");
44
45 VetoedFinalState jetinput;
46 jetinput
47 .addVetoOnThisFinalState(zeefinder)
48 .addVetoOnThisFinalState(zmmfinder);
49
50 // set clustering radius from input option
51 const double R = getOption<double>("R", 0.6);
52
53 FastJets jetpro(jetinput, JetAlg::KT, R);
54 declare(jetpro, "Jets");
55
56 MC_KTSPLITTINGS_BASE::init();
57 }
58
59
60 /// Do the analysis
61 void analyze(const Event & e) {
62 const DileptonFinder& zeefinder = apply<DileptonFinder>(e, "ZeeFinder");
63 if (zeefinder.bosons().size() != 1) vetoEvent;
64 const DileptonFinder& zmmfinder = apply<DileptonFinder>(e, "ZmmFinder");
65 if (zmmfinder.bosons().size() != 1) vetoEvent;
66 MC_KTSPLITTINGS_BASE::analyze(e);
67 }
68
69
70 /// Finalize
71 void finalize() {
72 MC_KTSPLITTINGS_BASE::finalize();
73 }
74
75 /// @}
76
77 };
78
79
80
81 RIVET_DECLARE_PLUGIN(MC_ZZKTSPLITTINGS);
82
83}
|