rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2017_I1607562

Invariant-mass and fractional-energy dependence of inclusive production of di-hadrons at $\sqrt{s}=10.58$ GeV
Experiment: BELLE (KEKB)
Inspire ID: 1607562
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D96 (2017) no.3, 032005
Beams: e+ e-
Beam energies: (5.3, 5.3) GeV
Run details:
  • e+e- to hadrons

Measurement of the double differential cross secrion for the production of hadron pairs by BELLE

Source code: BELLE_2017_I1607562.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/Thrust.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief BELLE double differential cross section
 10  class BELLE_2017_I1607562 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2017_I1607562);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projections
 23      FinalState fs;
 24      declare(fs,"FS");
 25      declare(Thrust(fs),"Thrust");
 26      // histograms
 27      const vector<double> bins{0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,
 28                                0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.00};
 29      for (size_t ip=0; ip<6; ++ip) {
 30        book(_h_all[ip], bins);
 31        book(_h_strong[ip], bins);
 32        for (size_t iy=1; iy < _h_all[ip]->numBins()+1; ++iy) {
 33          book(_h_all[ip]->bin(iy), 1, ip+1, iy);
 34          book(_h_strong[ip]->bin(iy), 2, ip+1, iy);
 35        }
 36      }
 37    }
 38
 39    bool isWeak(const Particle & p) {
 40      bool weak = false;
 41      if(p.parents().empty()) return weak;
 42      Particle parent = p.parents()[0];
 43      while (!parent.parents().empty()) {
 44        if(parent.abspid()==411  || parent.abspid()==421  || parent.abspid()==431  ||
 45           parent.abspid()==4122 || parent.abspid()==4232 || parent.abspid()==4132 ||
 46           parent.abspid()==4332) {
 47          weak=true;
 48          break;
 49        }
 50        parent = parent.parents()[0];
 51      }
 52      return weak;
 53    }
 54
 55    /// Perform the per-event analysis
 56    void analyze(const Event& event) {
 57      // get thrust and apply cut
 58      const Thrust thrust = apply<Thrust>(event,"Thrust");
 59      if(thrust.thrust()<0.8) vetoEvent;
 60      // get thrust axis
 61      Vector3 axis = thrust.thrustAxis();
 62      Particles charged = apply<FinalState>(event,"FS").particles(Cuts::abspid==PID::KPLUS or
 63								  Cuts::abspid==PID::PIPLUS);
 64      for (unsigned int ix=0;ix<charged.size();++ix) {
 65        double dot1 = axis.dot(charged[ix].momentum().p3());
 66        bool weak1 = isWeak(charged[ix]);
 67        if (2.*charged[ix].momentum().t()/sqrtS()<0.1) continue;
 68        for(unsigned int iy=ix+1;iy<charged.size();++iy) {
 69          if (2.*charged[iy].momentum().t()/sqrtS()<0.1) continue;
 70          double dot2 = axis.dot(charged[iy].momentum().p3());
 71          bool weak2 = isWeak(charged[iy]);
 72          if (dot1*dot2<0.) continue;
 73          FourMomentum p = charged[ix].momentum()+charged[iy].momentum();
 74          double z12 = 2.*p.t()/sqrtS();
 75          double m12 = p.mass();
 76          bool strong = !weak1 && !weak2;
 77          if (charged[ix].pid()==PID::PIPLUS) {
 78            if (charged[iy].pid()==PID::PIPLUS) {
 79              _h_all[1]->fill(z12,m12);
 80              if (strong) _h_strong[1]->fill(z12,m12);
 81            }
 82            else if (charged[iy].pid()==PID::PIMINUS) {
 83              _h_all[0]->fill(z12,m12);
 84              if (strong) _h_strong[0]->fill(z12,m12);
 85            }
 86            else if (charged[iy].pid()==PID::KPLUS) {
 87              _h_all[3]->fill(z12,m12);
 88              if (strong) _h_strong[3]->fill(z12,m12);
 89            }
 90            else if (charged[iy].pid()==PID::KMINUS) {
 91              _h_all[2]->fill(z12,m12);
 92              if (strong) _h_strong[2]->fill(z12,m12);
 93            }
 94          }
 95          else if (charged[ix].pid()==PID::PIMINUS) {
 96            if (charged[iy].pid()==PID::PIPLUS) {
 97              _h_all[0]->fill(z12,m12);
 98              if (strong) _h_strong[0]->fill(z12,m12);
 99            }
100            else if (charged[iy].pid()==PID::PIMINUS) {
101              _h_all[1]->fill(z12,m12);
102              if (strong) _h_strong[1]->fill(z12,m12);
103            }
104            else if (charged[iy].pid()==PID::KPLUS) {
105              _h_all[2]->fill(z12,m12);
106              if (strong) _h_strong[2]->fill(z12,m12);
107            }
108            else if (charged[iy].pid()==PID::KMINUS) {
109              _h_all[3]->fill(z12,m12);
110              if (strong) _h_strong[3]->fill(z12,m12);
111            }
112          }
113          else if (charged[ix].pid()==PID::KPLUS) {
114            if (charged[iy].pid()==PID::PIPLUS) {
115              _h_all[3]->fill(z12,m12);
116              if (strong) _h_strong[3]->fill(z12,m12);
117            }
118            else if (charged[iy].pid()==PID::PIMINUS) {
119              _h_all[2]->fill(z12,m12);
120              if (strong) _h_strong[2]->fill(z12,m12);
121            }
122            else if (charged[iy].pid()==PID::KPLUS) {
123              _h_all[5]->fill(z12,m12);
124              if (strong) _h_strong[5]->fill(z12,m12);
125            }
126            else if (charged[iy].pid()==PID::KMINUS) {
127              _h_all[4]->fill(z12,m12);
128              if (strong) _h_strong[4]->fill(z12,m12);
129            }
130          }
131          else if (charged[ix].pid()==PID::KMINUS) {
132            if (charged[iy].pid()==PID::PIPLUS) {
133              _h_all[2]->fill(z12,m12);
134              if (strong) _h_strong[2]->fill(z12,m12);
135            }
136            else if (charged[iy].pid()==PID::PIMINUS) {
137              _h_all[3]->fill(z12,m12);
138              if (strong) _h_strong[3]->fill(z12,m12);
139            }
140            else if (charged[iy].pid()==PID::KPLUS) {
141              _h_all[4]->fill(z12,m12);
142              if (strong) _h_strong[4]->fill(z12,m12);
143            }
144            else if (charged[iy].pid()==PID::KMINUS) {
145              _h_all[5]->fill(z12,m12);
146              if (strong) _h_strong[5]->fill(z12,m12);
147            }
148          }
149        }
150      }
151    }
152
153
154    /// Normalise histograms etc., after the run
155    void finalize() {
156      double fact = crossSection()/nanobarn/sumOfWeights();
157      scale(_h_all, fact);
158      scale(_h_strong, fact);
159    }
160
161    /// @}
162
163
164    /// @name Histograms
165    /// @{
166    Histo1DGroupPtr _h_all[6], _h_strong[6];
167    /// @}
168
169
170  };
171
172
173  RIVET_DECLARE_PLUGIN(BELLE_2017_I1607562);
174
175}