Rivet analyses

Ξcc++ production at 13 TeV

Experiment: LHCB (LHC)

Inspire ID: 1760788

Status: VALIDATED

Authors: - Peter Richardson

References: - Chin.Phys.C 44 (2020) 2, 022001

Beams: p+ p+

Beam energies: (6500.0, 6500.0)GeV

Run details: - hadronic events at 13 TeV

Measurement of the rate of Ξcc++ production, multiplied by the branching ratio for the decay Ξcc++ → Λc+Kπ+π+, relative to the rate for prompt Λc+ production in the transverse momentum range 4 < p < 15,GeV and rapidity range 2 < y < 4.5. This is currently the only measurement of the rate of doubly heavy baryon production.

Source code:LHCB_2020_I1760788.cc

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


namespace Rivet {


  /// @brief xi_cc++ production
  class LHCB_2020_I1760788 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2020_I1760788);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      // projections
      declare(UnstableParticles(), "UFS");
      // histograms
      book(_n_lambda_c, "TMP/nLambdac");
      for (unsigned int ix = 0; ix < 2; ++ix) book(_n_Xicc[ix], "TMP/nXicc_" + toString(ix));
      book(_h_xi, 1, 1, 1);
    }

    void findDecayProducts(Particle mother,
                           double sign,
                           Particles& lambdac,
                           Particles& Km,
                           Particles& pip,
                           unsigned int& nstable) {
      for (const Particle& p : mother.children()) {
        if (p.pid() == 4122 * sign)
          lambdac.push_back(p);
        else if (p.pid() == -321 * sign)
          Km.push_back(p);
        else if (p.pid() == 211 * sign)
          pip.push_back(p);
        else if (p.pid() == 111 || p.children().empty())
          ++nstable;
        else
          findDecayProducts(p, sign, lambdac, Km, pip, nstable);
      }
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      if (_edges.empty()) _edges = _h_xi->xEdges();
      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
      for (const Particle& p : ufs.particles(Cuts::abspid == 4122 || Cuts::abspid == 4422)) {
        if (p.abspid() == 4422) {
          Particles lambdac, Km, pip;
          unsigned int nstable = 0;
          double sign = p.pid() > 0 ? 1. : -1.;
          findDecayProducts(p, sign, lambdac, Km, pip, nstable);
          if (lambdac.size() == 1 && Km.size() == 1 && pip.size() == 2 && nstable == 0) _n_Xicc[0]->fill();
          _n_Xicc[1]->fill();
        }
        // pT and rapidity cuts
        double pT = p.perp();
        if (pT < 4. || pT > 15.) continue;
        double y = p.absrap();
        if (y < 2. || y > 4.5) continue;
        if (p.abspid() == 4422) {
          for (const string& tau : _edges) _h_xi->fill(tau);
        }
        else
          _n_lambda_c->fill();
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      // scale by Xi_cc br
      if (_n_Xicc[1]->effNumEntries() > 0.) scale(_h_xi, *_n_Xicc[0] / *_n_Xicc[1]);
      // and by lambda_c rate for normalisation (10^6 as rate in units 10^-4)
      if (_n_lambda_c->effNumEntries() > 0.) scale(_h_xi, 1e4 / *_n_lambda_c);
    }

    /// @}


    /// @name Histograms
    /// @{
    BinnedHistoPtr<string> _h_xi;
    CounterPtr _n_lambda_c, _n_Xicc[2];
    vector<string> _edges;
    /// @}
  };


  RIVET_DECLARE_PLUGIN(LHCB_2020_I1760788);

}