Rivet analyses

Measurements of jet charge with dijet events in pp collisions at $\sqrt{s}=8$ TeV

Experiment: CMS (LHC)

Inspire ID: 1605749

Status: VALIDATED

Authors: - Debarati Roy - Andreas Hinzmann - Nhan Viet Tran - Sunanda Banerjee

References: - DOI:10.1007/JHEP10(2017)131 - arXiv: 1706.05868 - Expt page: CMS-SMP-15-003

Beams: p+ p+

Beam energies: (4000.0, 4000.0)GeV

Run details: - pp QCD interactions at $\sqrt{s} = 8$ TeV. Data collected by CMS during the year 2012.

Jet charge is an estimator of the electric charge of a quark, antiquark, or gluon initiating a jet. It is based on the momentum-weighted sum of the electric charges of the jet constituents. Measurements of three charge observables of the leading jet in transverse momentum $p_\mathrm{T}$ are performed with dijet events. The analysis is carried out with data collected by the CMS experiment at the CERN LHC in proton-proton collisions at $\sqrt{s}=8\TeV$ corresponding to an integrated luminosity of 19.7 fb$^{-1}$. The results are presented in bins of the $p_\mathrm{T}$ of the leading jet.

Source code:CMS_2017_I1605749.cc

// -*- C++ -*-
// Rivet framework
#include "Rivet/Analysis.hh"

// Projections
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/FinalState.hh"

namespace Rivet {

  using namespace Cuts;

  class CMS_2017_I1605749 : public Analysis {
  public:

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

    // Book histograms and initialise projections before the run
    void init() {
      // Projections
      const FinalState fs((Cuts::etaIn(-5.0, 5.0)));
      declare(FastJets(fs, JetAlg::ANTIKT, 0.5), "Jets");

      // Jet Charge Histos
      for (int i = 1; i <= 18; i++) {
        book(_h_Charge[i - 1], i, 1, 1);
      }
    }

    // Perform the per-event analysis
    void analyze(const Event& event) {
      const Jets& jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 10.0 * GeV);

      if (jets.size() < 2) vetoEvent;

      double leadingpt = jets[0].pt() / GeV;
      double subleadingpt = jets[1].pt() / GeV;

      if (jets.size() < 2 || jets[0].abseta() >= 1.5 || jets[1].abseta() >= 1.5 || leadingpt < 400.0
          || subleadingpt < 100.0) {
        vetoEvent;
      }

      vector<Particle> constituents1 = jets[0].constituents();
      std::vector<double> numerator(9, 0), denominator(9, 0);

      double t_jetcharge1, t_jetcharge1k6, t_jetcharge1k3;
      double t_jetchargeL1, t_jetchargeL1k6, t_jetchargeL1k3;
      double t_jetchargeT1, t_jetchargeT1k6, t_jetchargeT1k3;

      denominator[0] = leadingpt;
      denominator[1] = std::pow(leadingpt, 0.6);
      denominator[2] = std::pow(leadingpt, 0.3);

      if (constituents1.size() > 0) {
        for (unsigned j = 0; j < constituents1.size(); j++) {
          if (std::abs(constituents1[j].pid()) > 9 && std::abs(constituents1[j].pid()) != 21) {
            if (constituents1[j].pt() > 1 * GeV) {
              double charge = constituents1[j].charge();
              double mom = constituents1[j].pt();
              double dotproduct = constituents1[j].p3().dot(jets[0].p3()) / jets[0].p();
              double crossproduct = constituents1[j].p3().cross(jets[0].p3()).mod() / jets[0].p();

              numerator[0] += (mom * charge);
              numerator[1] += ((std::pow(mom, 0.6)) * charge);
              numerator[2] += ((std::pow(mom, 0.3)) * charge);

              numerator[3] += (dotproduct * charge);
              numerator[4] += ((std::pow(dotproduct, 0.6)) * charge);
              numerator[5] += ((std::pow(dotproduct, 0.3)) * charge);

              denominator[3] += dotproduct;
              denominator[4] += (std::pow(dotproduct, 0.6));
              denominator[5] += (std::pow(dotproduct, 0.3));

              numerator[6] += (crossproduct * charge);
              numerator[7] += ((std::pow(crossproduct, 0.6)) * charge);
              numerator[8] += ((std::pow(crossproduct, 0.3)) * charge);

              denominator[6] += crossproduct;
              denominator[7] += (std::pow(crossproduct, 0.6));
              denominator[8] += (std::pow(crossproduct, 0.3));
            }
          }
        }
      }

      t_jetcharge1 = (denominator[0] > 0) ? numerator[0] / denominator[0] : 0;
      t_jetcharge1k6 = (denominator[1] > 0) ? numerator[1] / denominator[1] : 0;
      t_jetcharge1k3 = (denominator[2] > 0) ? numerator[2] / denominator[2] : 0;
      t_jetchargeL1 = (denominator[3] > 0) ? numerator[3] / denominator[3] : 0;
      t_jetchargeL1k6 = (denominator[4] > 0) ? numerator[4] / denominator[4] : 0;
      t_jetchargeL1k3 = (denominator[5] > 0) ? numerator[5] / denominator[5] : 0;
      t_jetchargeT1 = (denominator[6] > 0) ? numerator[6] / denominator[6] : 0;
      t_jetchargeT1k6 = (denominator[7] > 0) ? numerator[7] / denominator[7] : 0;
      t_jetchargeT1k3 = (denominator[8] > 0) ? numerator[8] / denominator[8] : 0;

      _h_Charge[0]->fill(t_jetcharge1);
      _h_Charge[1]->fill(t_jetcharge1k6);
      _h_Charge[2]->fill(t_jetcharge1k3);
      _h_Charge[3]->fill(t_jetchargeL1);
      _h_Charge[4]->fill(t_jetchargeL1k6);
      _h_Charge[5]->fill(t_jetchargeL1k3);
      _h_Charge[6]->fill(t_jetchargeT1);
      _h_Charge[7]->fill(t_jetchargeT1k6);
      _h_Charge[8]->fill(t_jetchargeT1k3);

      if (leadingpt > 400 && leadingpt < 700) {
        _h_Charge[9]->fill(t_jetcharge1k6);
        _h_Charge[12]->fill(t_jetchargeL1k6);
        _h_Charge[15]->fill(t_jetchargeT1k6);
      }
      else if (leadingpt > 700 && leadingpt < 1000) {
        _h_Charge[10]->fill(t_jetcharge1k6);
        _h_Charge[13]->fill(t_jetchargeL1k6);
        _h_Charge[16]->fill(t_jetchargeT1k6);
      }
      else if (leadingpt > 1000 && leadingpt < 1800) {
        _h_Charge[11]->fill(t_jetcharge1k6);
        _h_Charge[14]->fill(t_jetchargeL1k6);
        _h_Charge[17]->fill(t_jetchargeT1k6);
      }
    }

    // Normalise histograms etc., after the run
    void finalize() {
      for (int j = 0; j < 18; ++j) {
        normalize(_h_Charge[j]);
      }
    }

  private:

    Histo1DPtr _h_Charge[18];
  };

  RIVET_DECLARE_PLUGIN(CMS_2017_I1605749);
}