Rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEO_2004_S5809304

Charm hadrons from fragmentation near the $\Upsilon(4S)$
Experiment: ()
Inspire ID: 645209
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: (5.3, 5.3) GeV
Run details:
  • $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance

Analysis of charm quark fragmentation at 10.5 GeV, based on a data sample of 103 fb collected by the CLEO experiment. Fragmentation into charm is studied for the charmed hadron ground states, namely $D^0$, $D^+$, as well as the excited states $D^{*0}$ and $D^{*+}$. This analysis can be used to constrain charm fragmentation in Monte Carlo generators.

Source code: CLEO_2004_S5809304.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/UnstableFinalState.hh"

namespace Rivet {


  /// @brief CLEO charmed mesons and baryons from fragmentation
  /// @author Peter Richardson
  class CLEO_2004_S5809304 : public Analysis {
  public:

    CLEO_2004_S5809304()
      : Analysis("CLEO_2004_S5809304")
    { }


    void analyze(const Event& e) {
      const double weight = e.weight();

      // Loop through unstable FS particles and look for charmed mesons/baryons
      const UnstableFinalState& ufs = apply<UnstableFinalState>(e, "UFS");

      const Beam beamproj = apply<Beam>(e, "Beams");
      const ParticlePair& beams = beamproj.beams();
      const FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum();
      LorentzTransform cms_boost;
      if (mom_tot.p3().mod() > 1*MeV)
        cms_boost = LorentzTransform::mkFrameTransformFromBeta(mom_tot.betaVec());
      const double s = sqr(beamproj.sqrtS());

      // Particle masses from PDGlive (accessed online 16. Nov. 2009).
      foreach (const Particle& p, ufs.particles()) {

        double xp = 0.0;
        double mH2 = 0.0;
        // 3-momentum in CMS frame
        const double mom = cms_boost.transform(p.momentum()).vector3().mod();

        const int PdgId = p.abspid();
        MSG_DEBUG("pdgID = " << PdgId << "  mom = " << mom);
        switch (PdgId) {

        case 421:
          MSG_DEBUG("D0 found");
          mH2 = 3.47763; // 1.86484^2
          xp = mom/sqrt(s/4.0 - mH2);
          _sigmaD0A->fill(10.6,weight);
          _sigmaD0B->fill(10.6,weight);
          _histXpD0A->fill(xp, weight);
          _histXpD0B->fill(xp, weight);
          _histXpTotal->fill(xp, weight);
          break;
        case 411:
          MSG_DEBUG("D+ found");
          mH2 = 3.49547; // 1.86962^2
          xp = mom/sqrt(s/4.0 - mH2);
          _sigmaDPlus->fill(10.6,weight);
          _histXpDplus->fill(xp, weight);
          _histXpTotal->fill(xp, weight);
          break;

        case 413:
          MSG_DEBUG("D*+ found");
          mH2 = 4.04119; // 2.01027^2
          xp = mom/sqrt(s/4.0 - mH2);
          _sigmaDStarPlusA->fill(10.6,weight);
          _sigmaDStarPlusB->fill(10.6,weight);
          _histXpDStarPlusA->fill(xp, weight);
          _histXpDStarPlusB->fill(xp, weight);
          _histXpTotal->fill(xp, weight);
          break;

        case 423:
          MSG_DEBUG("D*0 found");
          mH2 = 4.02793; // 2.00697**2
          xp = mom/sqrt(s/4.0 - mH2);
          _sigmaDStar0A->fill(10.6,weight);
          _sigmaDStar0B->fill(10.6,weight);
          _histXpDStar0A->fill(xp, weight);
          _histXpDStar0B->fill(xp, weight);
          _histXpTotal->fill(xp, weight);
          break;
        }
      }
    } // analyze


    void finalize() {

      scale(_sigmaDPlus     , crossSection()/picobarn/sumOfWeights());
      scale(_sigmaD0A       , crossSection()/picobarn/sumOfWeights());
      scale(_sigmaD0B       , crossSection()/picobarn/sumOfWeights());
      scale(_sigmaDStarPlusA, crossSection()/picobarn/sumOfWeights());
      scale(_sigmaDStarPlusB, crossSection()/picobarn/sumOfWeights());
      scale(_sigmaDStar0A   , crossSection()/picobarn/sumOfWeights());
      scale(_sigmaDStar0B   , crossSection()/picobarn/sumOfWeights());

      scale(_histXpDplus     , crossSection()/picobarn/sumOfWeights());
      scale(_histXpD0A       , crossSection()/picobarn/sumOfWeights());
      scale(_histXpD0B       , crossSection()/picobarn/sumOfWeights());
      scale(_histXpDStarPlusA, crossSection()/picobarn/sumOfWeights());
      scale(_histXpDStarPlusB, crossSection()/picobarn/sumOfWeights());
      scale(_histXpDStar0A   , crossSection()/picobarn/sumOfWeights());
      scale(_histXpDStar0B   , crossSection()/picobarn/sumOfWeights());
      scale(_histXpTotal     , crossSection()/picobarn/sumOfWeights()/4.);
    } // finalize


    void init() {
      declare(Beam(), "Beams");
      declare(UnstableFinalState(), "UFS");

      // continuum cross sections
      _sigmaDPlus      = bookHisto1D(1,1,1);
      _sigmaD0A        = bookHisto1D(1,1,2);
      _sigmaD0B        = bookHisto1D(1,1,3);
      _sigmaDStarPlusA = bookHisto1D(1,1,4);
      _sigmaDStarPlusB = bookHisto1D(1,1,5);
      _sigmaDStar0A    = bookHisto1D(1,1,6);
      _sigmaDStar0B    = bookHisto1D(1,1,7);

       // histograms for continuum data
      _histXpDplus      = bookHisto1D(2, 1, 1);
      _histXpD0A        = bookHisto1D(3, 1, 1);
      _histXpD0B        = bookHisto1D(4, 1, 1);
      _histXpDStarPlusA = bookHisto1D(5, 1, 1);
      _histXpDStarPlusB = bookHisto1D(6, 1, 1);
      _histXpDStar0A    = bookHisto1D(7, 1, 1);
      _histXpDStar0B    = bookHisto1D(8, 1, 1);
      _histXpTotal      = bookHisto1D(9, 1, 1);

    } // init

  private:

    //@{
    // Histograms for the continuum cross sections
    Histo1DPtr _sigmaDPlus     ;
    Histo1DPtr _sigmaD0A       ;
    Histo1DPtr _sigmaD0B       ;
    Histo1DPtr _sigmaDStarPlusA;
    Histo1DPtr _sigmaDStarPlusB;
    Histo1DPtr _sigmaDStar0A   ;
    Histo1DPtr _sigmaDStar0B   ;

    // histograms for continuum data
    Histo1DPtr _histXpDplus     ;
    Histo1DPtr _histXpD0A       ;
    Histo1DPtr _histXpD0B       ;
    Histo1DPtr _histXpDStarPlusA;
    Histo1DPtr _histXpDStarPlusB;
    Histo1DPtr _histXpDStar0A   ;
    Histo1DPtr _histXpDStar0B   ;
    Histo1DPtr _histXpTotal     ;
    //@}

  };

  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(CLEO_2004_S5809304);

}