Rivet analyses


title: CMS_2017_I1605749

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++ // -- 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); } ```