rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2004_I643565

Cross section for $e^+e^-\to D^{(*)+}D^{(*)-}$ at $\sqrt{s}=10.58$GeV
Experiment: BELLE (KEKB)
Inspire ID: 643565
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 70 (2004) 071101
Beams: e+ e-
Beam energies: (5.3, 5.3) GeV
Run details:
  • e+e- > hadrons

Cross section for $e^+e^-\to D^{(*)+}D^{(*)-}$ at $\sqrt{s}=10.58$GeV

Source code: BELLE_2004_I643565.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief e+e- > D(*)+ D(*)-
 10  class BELLE_2004_I643565 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2004_I643565);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(Cuts::abspid==411 || Cuts::abspid==413), "UFS");
 25      // histos
 26      book(_h_sigma[0],1,1,2);
 27      book(_h_sigma[1],1,1,5);
 28      book(_h_hel     ,2,1,1);
 29    }
 30
 31    void findChildren(const Particle& p,map<long,int>& nRes, int &ncount) {
 32      for (const Particle &child : p.children()) {
 33        if (child.children().empty()) {
 34          nRes[child.pid()]-=1;
 35          --ncount;
 36        }
 37        else {
 38          findChildren(child,nRes,ncount);
 39        }
 40      }
 41    }
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45      const FinalState& fs = apply<FinalState>(event, "FS");
 46
 47      map<long,int> nCount;
 48      int ntotal(0);
 49      for (const Particle& p : fs.particles()) {
 50        nCount[p.pid()] += 1;
 51        ++ntotal;
 52      }
 53      const FinalState& ufs = apply<FinalState>(event, "UFS");
 54      Particle Dstar;
 55      for (unsigned int ix=0;ix<ufs.particles().size();++ix) {
 56        map<long,int> nRes = nCount;
 57        int ncount = ntotal;
 58        findChildren(ufs.particles()[ix],nRes,ncount);
 59        bool matched=false;
 60        for (unsigned int iy=ix+1;iy<ufs.particles().size();++iy) {
 61          if (ufs.particles()[ix].pid()*ufs.particles()[iy].pid()>0) continue;
 62          map<long,int> nRes2 = nRes;
 63          int ncount2 = ncount;
 64          findChildren(ufs.particles()[iy],nRes2,ncount2);
 65          if (ncount2!=0) continue;
 66          matched=true;
 67          for (const auto& val : nRes2) {
 68            if (val.second!=0) {
 69              matched = false;
 70              break;
 71            }
 72          }
 73          if (matched) {
 74            if (ufs.particles()[ix].abspid()==413 &&
 75                ufs.particles()[iy].abspid()==413) {
 76              _h_sigma[0]->fill("10.58"s);
 77            }
 78            else if (ufs.particles()[ix].abspid()==411 &&
 79                     ufs.particles()[iy].abspid()==413) {
 80              _h_sigma[1]->fill("10.58"s);
 81              Dstar = ufs.particles()[iy];
 82            }
 83            else if (ufs.particles()[iy].abspid()==411 &&
 84                     ufs.particles()[ix].abspid()==413) {
 85              _h_sigma[1]->fill("10.58"s);
 86              Dstar = ufs.particles()[ix];
 87            }
 88            break;
 89          }
 90        }
 91        if (matched) break;
 92      }
 93      if (Dstar.abspid()==413 && Dstar.children().size()==2) {
 94        Particle pim;
 95        int sign = Dstar.pid()/Dstar.abspid();
 96        if (Dstar.children()[0].pid()==sign*211 &&
 97            Dstar.children()[1].pid()==sign*421) {
 98          pim = Dstar.children()[0];
 99        }
100        else if (Dstar.children()[1].pid()==sign*211 &&
101          Dstar.children()[0].pid()==sign*421) {
102          pim = Dstar.children()[1];
103        }
104        else {
105          return;
106        }
107        const LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(Dstar.mom().betaVec());
108        FourMomentum pPim = boost2.transform(pim.mom());
109        _h_hel->fill(pPim.p3().unit().dot(Dstar.mom().p3().unit()));
110      }
111    }
112
113
114    /// Normalise histograms etc., after the run
115    void finalize() {
116      scale(_h_sigma, crossSection()/picobarn/sumOfWeights());
117      normalize(_h_hel, 1.0, false);
118    }
119
120    /// @}
121
122
123    /// @name Histograms
124    /// @{
125    BinnedHistoPtr<string> _h_sigma[2];
126    Histo1DPtr _h_hel;
127    /// @}
128
129
130  };
131
132
133  RIVET_DECLARE_PLUGIN(BELLE_2004_I643565);
134
135}