rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2005_S6181155

Production and decay of $\Xi^0_c$ at BABAR.
Experiment: BaBar (PEP-II)
Inspire ID: 679961
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 95 (2005) 142003
  • hep-ex/0504014
Beams: e+ e-
Beam energies: (3.5, 8.0); (3.5, 7.9) GeV
Run details:
  • $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boosts of 8.0 GeV ($e^-$) and 3.5 GeV ($e^+$)

Analysis of $\Xi_c^0$ production in B decays and from the $c\bar{c}$ continuum, with the $\Xi_c^0$ decaying into $\Omega^- K^+$ and $\Xi^- \pi^+$ final states measured using 116.1 $\text{fb}^{-1}$ of data collected by the BABAR detector. The normalisation of the data as been modified from that presented in the original paper in order to produce a differential cross section rather than the cross section in each bin. In addition to the data presented in the paper plots are alos made with unit normalisation which can be more useful for Monte Carlo tuning.

Source code: BABAR_2005_S6181155.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/Beam.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief BABAR Xi_c baryons from fragmentation
 10  ///
 11  /// @author Peter Richardson
 12  class BABAR_2005_S6181155 : public Analysis {
 13  public:
 14
 15    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2005_S6181155);
 16
 17
 18    void init() {
 19      declare(Beam(), "Beams");
 20      declare(UnstableParticles(), "UFS");
 21      book(_histOnResonanceA, 1,1,1);
 22      book(_histOnResonanceB, 2,1,1);
 23      book(_histOffResonance, 2,1,2);
 24      book(_sigma,            3,1,1);
 25    }
 26
 27
 28    void analyze(const Event& e) {
 29      // Loop through unstable FS particles and look for charmed mesons/baryons
 30      const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
 31
 32      const Beam beamproj = apply<Beam>(e, "Beams");
 33      const ParticlePair& beams = beamproj.beams();
 34      const FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum();
 35      const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(mom_tot.betaVec());
 36      const double s = sqr(beamproj.sqrtS());
 37
 38      const bool onresonance = fuzzyEquals(beamproj.sqrtS()/GeV, 10.58, 2E-3);
 39
 40      for (const Particle& p : ufs.particles()) {
 41        // 3-momentum in CMS frame
 42
 43        const double mom = cms_boost.transform(p.momentum()).vector3().mod();
 44        // Only looking at Xi_c^0
 45        if (p.abspid() != 4132 ) continue;
 46        MSG_DEBUG("mom = " << mom);
 47        // off-resonance cross section
 48        if (checkDecay(p.genParticle())) {
 49          if (onresonance) {
 50            _histOnResonanceA->fill(mom);
 51            _histOnResonanceB->fill(mom);
 52          }
 53          else {
 54            _histOffResonance->fill(mom,s/sqr(10.58));
 55            _sigma->fill(10.58);
 56          }
 57        }
 58      }
 59    }
 60
 61
 62    void finalize() {
 63      scale(_histOnResonanceA, crossSection()/femtobarn/sumOfWeights()*0.2);
 64      scale(_histOnResonanceB, crossSection()/femtobarn/sumOfWeights()*0.45);
 65      scale(_histOffResonance, crossSection()/femtobarn/sumOfWeights()*0.45);
 66      scale(_sigma           , crossSection()/femtobarn/sumOfWeights());
 67    }
 68
 69
 70  private:
 71
 72    /// @name Histograms
 73    /// @{
 74    Histo1DPtr _histOnResonanceA;
 75    Histo1DPtr _histOnResonanceB;
 76    Histo1DPtr _histOffResonance;
 77    Histo1DPtr _sigma;
 78    /// @}
 79
 80
 81    bool checkDecay(ConstGenParticlePtr p) {
 82      unsigned int nstable = 0, npip = 0, npim = 0;
 83      unsigned int nXim = 0, nXip = 0;
 84      findDecayProducts(p, nstable, npip, npim, nXip, nXim);
 85      int id = p->pdg_id();
 86      // Xi_c
 87      if (id == 4132) {
 88        if (nstable == 2 && nXim == 1 && npip == 1) return true;
 89      }
 90      else if (id == -4132) {
 91        if (nstable == 2 && nXip == 1 && npim == 1) return true;
 92      }
 93      return false;
 94    }
 95
 96
 97    void findDecayProducts(ConstGenParticlePtr p,
 98                           unsigned int& nstable,
 99                           unsigned int& npip, unsigned int& npim,
100                           unsigned int& nXip, unsigned int& nXim) {
101      ConstGenVertexPtr dv = p->end_vertex();
102      /// @todo Use better looping
103      for (ConstGenParticlePtr pp: HepMCUtils::particles(dv, Relatives::CHILDREN)){
104        int id = pp->pdg_id();
105        if (id==3312) {
106          ++nXim;
107          ++nstable;
108        } else if (id == -3312) {
109          ++nXip;
110          ++nstable;
111        } else if(id == 111 || id == 221) {
112          ++nstable;
113        } else if (pp->end_vertex()) {
114          findDecayProducts(pp, nstable, npip, npim, nXip, nXim);
115        } else {
116          if     (id !=    22) ++nstable;
117          if     (id ==   211) ++npip;
118          else if(id ==  -211) ++npim;
119        }
120      }
121    }
122
123  };
124
125
126  RIVET_DECLARE_ALIASED_PLUGIN(BABAR_2005_S6181155, BABAR_2005_I679961);
127
128}