rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2021_I1867196

Cross section for $e^+e^-\to D_s^{*+} D_{s0}^*(2317)^-$, $D_s^{*+} D_{s1}^*(2460)^-$, $D_s^{*+} D_{s1}^*(2536)^-$ between 4.6 and 4.7 GeV
Experiment: BESIII (BEPC)
Inspire ID: 1867196
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 104 (2021) 032012
Beams: e+ e-
Beam energies: (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.4, 2.4) GeV
Run details:
  • e+e- to hadrons

Measurement of the cross section for Cross section for $e^+e^-\to D_s^{*+} D_{s0}^*(2317)^-$, $D_s^{*+} D_{s1}^*(2460)^-$, $D_s^{*+} D_{s1}^*(2536)^-$ between 4.6 and 4.7 GeV by the BESIII collaboration. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: BESIII_2021_I1867196.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_s* D_sJ
 10  class BESIII_2021_I1867196 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2021_I1867196);
 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(), "UFS");
 25      // Histograms
 26      for(unsigned int ix=0;ix<3;++ix) {
 27        book(_numD[ix],1+ix,1,1);
 28      }
 29      for (const string& en : _numD[0].binning().edges<0>()) {
 30        const double end = std::stod(en)*GeV;
 31        if (isCompatibleWithSqrtS(end)) {
 32          _ecms = en;
 33          break;
 34        }
 35      }
 36      if(_ecms.empty()) MSG_ERROR("Beam energy incompatible with analysis.");
 37    }
 38
 39    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 40      for (const Particle &child : p.children()) {
 41        if(child.children().empty()) {
 42          nRes[child.pid()]-=1;
 43          --ncount;
 44        }
 45        else {
 46          findChildren(child,nRes,ncount);
 47        }
 48      }
 49    }
 50
 51    /// Perform the per-event analysis
 52    void analyze(const Event& event) {
 53
 54      const FinalState& fs = apply<FinalState>(event, "FS");
 55
 56      map<long,int> nCount;
 57      int ntotal(0);
 58      for (const Particle& p : fs.particles()) {
 59        nCount[p.pid()] += 1;
 60        ++ntotal;
 61      }
 62      const FinalState& ufs = apply<FinalState>(event, "UFS");
 63      // loop over D_s*
 64      for (const Particle & Dstar : ufs.particles(Cuts::abspid==433)) {
 65        map<long,int> nRes = nCount;
 66        int ncount = ntotal;
 67        findChildren(Dstar,nRes,ncount);
 68        bool matched=false;
 69        for (const Particle & p : ufs.particles(Cuts::abspid==10431 or
 70                                  Cuts::abspid==10433 or
 71                                  Cuts::abspid==20433)) {
 72          // check particle and antiparticle
 73          if(Dstar.pid()*p.pid()>0) continue;
 74          map<long,int> nRes2 = nRes;
 75          int ncount2 = ncount;
 76          findChildren(p,nRes2,ncount2);
 77          if(ncount2!=0) continue;
 78          matched=true;
 79          for (auto const & val : nRes2) {
 80            if(val.second!=0) {
 81              matched = false;
 82              break;
 83            }
 84          }
 85          if(matched) {
 86            if(p.abspid()==10431) _numD[0]->fill(_ecms);
 87            else if(p.abspid()==20433) _numD[1]->fill(_ecms);
 88            else if(p.abspid()==10433) _numD[2]->fill(_ecms);
 89            break;
 90          }
 91        }
 92        if(matched) break;
 93      }
 94    }
 95
 96
 97    /// Normalise histograms etc., after the run
 98    void finalize() {
 99      double fact = crossSection()/picobarn/sumOfWeights();
100      for (unsigned int ix=0;ix<3;++ix)
101        scale(_numD[ix], fact);
102    }
103
104    ///@}
105
106
107    /// @name Histograms
108    ///@{
109    BinnedHistoPtr<string> _numD[3];
110    string _ecms;
111    ///@}
112
113
114  };
115
116
117  RIVET_DECLARE_PLUGIN(BESIII_2021_I1867196);
118
119}