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);

}