diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.cc b/analyses/pluginATLAS/ATLAS_2017_I1589844.cc --- a/analyses/pluginATLAS/ATLAS_2017_I1589844.cc +++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.cc @@ -1,166 +1,176 @@ // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/DressedLeptons.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { /// kT splittings in Z events at 8 TeV class ATLAS_2017_I1589844 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructors - ATLAS_2017_I1589844(const string name="ATLAS_2017_I1589844", size_t channel = 0, + ATLAS_2017_I1589844(const string name="ATLAS_2017_I1589844", const string ref_data="ATLAS_2017_I1589844") : Analysis(name) { - _mode = channel; // pick electron channel by default setRefDataName(ref_data); - setNeedsCrossSection(true); } //@} /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { + // Get options from the new option system + _mode = 0; + if ( getOption("ZMODE") == "EL" ) _mode = 1; + if ( getOption("ZMODE") == "MU" ) _mode = 2; + const FinalState fs; - const Cut cuts = (_mode) ? - (Cuts::pT > 25*GeV) && (Cuts::abseta < 2.4) : //< muon channel version - Cuts::pT > 25*GeV && (Cuts::abseta <= 1.37 || (Cuts::abseta >= 1.52 && Cuts::abseta < 2.47)); //< electron channel version + const Cut cuts_mu = (Cuts::pT > 25*GeV) && (Cuts::abseta < 2.4); + const Cut cuts_el = Cuts::pT > 25*GeV && (Cuts::abseta <= 1.37 || (Cuts::abseta >= 1.52 && Cuts::abseta < 2.47)); - IdentifiedFinalState bareleptons(fs); - bareleptons.acceptIdPair(_mode? PID::MUON : PID::ELECTRON); - const DressedLeptons leptons(fs, bareleptons, 0.1, cuts, true); - declare(leptons, "leptons"); + IdentifiedFinalState bare_mu(fs); + bare_mu.acceptIdPair(PID::MUON); + IdentifiedFinalState bare_el(fs); + bare_el.acceptIdPair(PID::ELECTRON); + const DressedLeptons muons(fs, bare_mu, 0.1, cuts_mu, true); + const DressedLeptons elecs(fs, bare_el, 0.1, cuts_el, true); + declare(muons, "muons"); + declare(elecs, "elecs"); const ChargedFinalState cfs(Cuts::abseta < 2.5 && Cuts::pT > 0.4*GeV); VetoedFinalState jet_fs(cfs); - jet_fs.addVetoOnThisFinalState(leptons); + jet_fs.addVetoOnThisFinalState(muons); + jet_fs.addVetoOnThisFinalState(elecs); declare(FastJets(jet_fs, FastJets::KT, 0.4), "Kt04Jets"); declare(FastJets(jet_fs, FastJets::KT, 1.0), "Kt10Jets"); VetoedFinalState jet_fs_all(Cuts::abseta < 2.5 && Cuts::pT > 0.4*GeV); - jet_fs_all.addVetoOnThisFinalState(leptons); + jet_fs_all.addVetoOnThisFinalState(muons); + jet_fs_all.addVetoOnThisFinalState(elecs); FastJets jetpro04_all(jet_fs_all, FastJets::KT, 0.4); jetpro04_all.useInvisibles(); declare(jetpro04_all, "Kt04Jets_all"); FastJets jetpro10_all(jet_fs_all, FastJets::KT, 1.0); jetpro10_all.useInvisibles(); declare(jetpro10_all, "Kt10Jets_all"); // Histograms with data binning _ndij = 8; for (size_t i = 0; i < _ndij; ++i) { - string label = "d" + to_str(i) + "_kT4"; - _h[label] = bookHisto1D(i + 1, 1, _mode + 1); - _h[label + "_all"] = bookHisto1D(i + 1, 1, _mode + 5); - label = "d" + to_str(i) + "_kT10"; - _h[label] = bookHisto1D(i + 1, 1, _mode + 3); - _h[label + "_all"] = bookHisto1D(i + 1, 1, _mode + 7); + if (_mode == 0 || _mode == 1) { + string label = "el_d" + to_str(i) + "_kT4"; + _h[label] = bookHisto1D(i + 1, 1, 1); + _h[label + "_all"] = bookHisto1D(i + 1, 1, 5); + label = "el_d" + to_str(i) + "_kT10"; + _h[label] = bookHisto1D(i + 1, 1, 3); + _h[label + "_all"] = bookHisto1D(i + 1, 1, 7); + } + if (_mode == 0 || _mode == 2) { + string label = "mu_d" + to_str(i) + "_kT4"; + _h[label] = bookHisto1D(i + 1, 1, 2); + _h[label + "_all"] = bookHisto1D(i + 1, 1, 6); + label = "mu_d" + to_str(i) + "_kT10"; + _h[label] = bookHisto1D(i + 1, 1, 4); + _h[label + "_all"] = bookHisto1D(i + 1, 1, 8); + } } } /// Perform the per-event analysis void analyze(const Event& e) { // Check we have a Z candidate: - const vector& leptons = apply(e, "leptons").dressedLeptons(); - if (leptons.size() != 2) vetoEvent; - if (leptons[0].charge3()*leptons[1].charge3() > 0) vetoEvent; + const vector& muons = apply(e, "muons").dressedLeptons(); + const vector& elecs = apply(e, "elecs").dressedLeptons(); + if (_mode == 0 && (elecs.size() + muons.size()) != 2) vetoEvent; + if (_mode == 1 && !(elecs.size() == 2 && muons.empty())) vetoEvent; + if (_mode == 2 && !(elecs.empty() && muons.size() == 2)) vetoEvent; + + string lep_type = elecs.size()? "el_" : "mu_"; + const vector& leptons = elecs.size()? elecs : muons; + + if (leptons[0].charge()*leptons[1].charge() > 0) vetoEvent; const double dilepton_mass = (leptons[0].momentum() + leptons[1].momentum()).mass(); if (!inRange(dilepton_mass, 71*GeV, 111*GeV)) vetoEvent; const double weight = e.weight(); // Get kT splitting scales (charged particles only) const FastJets& jetpro04 = applyProjection(e, "Kt04Jets"); const shared_ptr seq04 = jetpro04.clusterSeq(); for (size_t i = 0; i < min(_ndij, (size_t)seq04->n_particles()); ++i) { const double dij = sqrt(seq04->exclusive_dmerge_max(i))/GeV; if (dij <= 0.0) continue; - const string label = "d" + to_str(i) + "_kT4"; + const string label = lep_type + "d" + to_str(i) + "_kT4"; _h[label]->fill(dij, weight); } const FastJets& jetpro10 = applyProjection(e, "Kt10Jets"); const shared_ptr seq10 = jetpro10.clusterSeq(); for (size_t i = 0; i < min(_ndij, (size_t)seq10->n_particles()); ++i) { const double dij = sqrt(seq10->exclusive_dmerge_max(i))/GeV; if (dij <= 0.0) continue; - const string label = "d" + to_str(i) + "_kT10"; + const string label = lep_type + "d" + to_str(i) + "_kT10"; _h[label]->fill(dij, weight); } // Get kT splitting scales (all particles) const FastJets& jetpro04_all = applyProjection(e, "Kt04Jets_all"); const shared_ptr seq04_all = jetpro04_all.clusterSeq(); for (size_t i = 0; i < min(_ndij, (size_t)seq04_all->n_particles()); ++i) { const double dij = sqrt(seq04_all->exclusive_dmerge_max(i))/GeV; if (dij <= 0.0) continue; - const string label = "d" + to_str(i) + "_kT4_all"; + const string label = lep_type + "d" + to_str(i) + "_kT4_all"; _h[label]->fill(dij, weight); } const FastJets& jetpro10_all = applyProjection(e, "Kt10Jets_all"); const shared_ptr seq10_all = jetpro10_all.clusterSeq(); for (size_t i = 0; i < min(_ndij, (size_t)seq10_all->n_particles()); ++i) { const double dij = sqrt(seq10_all->exclusive_dmerge_max(i))/GeV; if (dij <= 0.0) continue; - const string label = "d" + to_str(i) + "_kT10_all"; + const string label = lep_type + "d" + to_str(i) + "_kT10_all"; _h[label]->fill(dij, weight); } } /// Normalise histograms etc., after the run void finalize() { const double sf = crossSectionPerEvent(); for (auto& kv : _h) scale(kv.second, sf); } //@} protected: // Data members like post-cuts event weight counters go here size_t _mode, _ndij; private: // Histograms map _h; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844); - - - - /// kT splittings in Z events at 8 TeV (electron channel) - struct ATLAS_2017_I1589844_EL : public ATLAS_2017_I1589844 { - ATLAS_2017_I1589844_EL() : ATLAS_2017_I1589844("ATLAS_2017_I1589844_EL", 0) { } - }; - DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844_EL); - - - /// kT splittings in Z events at 8 TeV (muon channel) - struct ATLAS_2017_I1589844_MU : public ATLAS_2017_I1589844 { - ATLAS_2017_I1589844_MU() : ATLAS_2017_I1589844("ATLAS_2017_I1589844_MU", 1) { } - }; - DECLARE_RIVET_PLUGIN(ATLAS_2017_I1589844_MU); } diff --git a/analyses/pluginATLAS/ATLAS_2017_I1589844.info b/analyses/pluginATLAS/ATLAS_2017_I1589844.info --- a/analyses/pluginATLAS/ATLAS_2017_I1589844.info +++ b/analyses/pluginATLAS/ATLAS_2017_I1589844.info @@ -1,46 +1,48 @@ Name: ATLAS_2017_I1589844 Year: 2017 Summary: $k_T$ splittings in $Z$ events at 8 TeV Experiment: ATLAS Collider: LHC InspireID: 1589844 Status: VALIDATED Authors: - Christian Gutschow - Frank Siegert References: - arXiv:1704.01530 [hep-ex] - submitted to JHEP Keywords: - KTSPLITTINGS - QCD - Z - JETS - TRACKS RunInfo: '$pp \to Z(\to ee/\mu\mu) +$ jets at 8 TeV' Luminosity_fb: 20.2 Beams: [p+, p+] Energies: [8000] PtCuts: [25, 25, 0.4] +Options: +- ZMODE=EL,MU Description: 'A measurement of the splitting scales occuring in the $k_\text{t}$ jet-clustering algorithm is presented for final states containing a $Z$ boson. The measurement is done using 20.2 fb$^{-1}$ of proton-proton collision data collected at a centre-of-mass energy of $\sqrt{s} = 8$ TeV by the ATLAS experiment at the LHC in 2012. The measurement is based on charged-particle track information, which is measured with excellent precision in the $p_\text{T}$ region relevant for the transition between the perturbative and the non-perturbative regimes. The data distributions are corrected for detector effects, and are found to deviate from state-of-the-art predictions in various regions of the observables.' BibKey: Aaboud:2017hox BibTeX: '@article{Aaboud:2017hox, author = "Aaboud, Morad and others", title = "{Measurement of the $k_\mathrm{t}$ splitting scales in $Z \to \ell\ell$ events in $pp$ collisions at $\sqrt{s} = 8$ TeV with the ATLAS detector}", collaboration = "ATLAS", year = "2017", eprint = "1704.01530", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2017-033", SLACcitation = "%%CITATION = ARXIV:1704.01530;%%" }'