rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2017_I1604892

$e^+e^-\to \pi^+\pi^- J/\psi$ for $\sqrt{s}=4.23$ and $4.26$ GeV
Experiment: BESIII (BEPC)
Inspire ID: 1604892
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 119 (2017) 7, 072001
Beams: e+ e-
Beam energies: (2.1, 2.1); (2.1, 2.1) GeV
    No run details listed

Measurement of mass distributions in $e^+e^-\to \pi^+\pi^- J/\psi$ for $\sqrt{s}=4.23$ and $4.26$ GeV.

Source code: BESIII_2017_I1604892.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/FinalState.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief  e+ e- -> pi+ pi- J/psi
 9  class BESIII_2017_I1604892 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2017_I1604892);
14
15
16    /// @name Analysis methods
17    /// @{
18
19    /// Book histograms and initialise projections before the run
20    void init() {
21      // projections
22      declare(FinalState(), "FS");
23      unsigned int iloc=1;
24      if      (isCompatibleWithSqrtS(4.23)) iloc=1;
25      else if (isCompatibleWithSqrtS(4.26)) iloc=2;
26      for (unsigned int ix=0;ix<2;++ix) {
27      	book(_h_mass[ix], 1, iloc, 1+ix);
28      }
29      book(_h_cTheta, 2, 1, 1);
30    }
31
32    /// Perform the per-event analysis
33    void analyze(const Event& event) {
34      Particles fs = apply<FinalState>(event, "FS").particles();
35      Particles Jpsi,other;
36      for (const Particle& p : fs) {
37        Particle parent=p;
38        while (!parent.parents().empty()) {
39          parent=parent.parents()[0];
40          if (parent.abspid()==PID::JPSI) break;
41        }
42        if (parent.abspid()!=PID::JPSI) {
43          other.push_back(p);
44          continue;
45        }
46        bool found=false;
47        for (const auto& psi : Jpsi) {
48          // J/psi already in list
49          if (fuzzyEquals(psi.momentum(),parent.momentum())) {
50            found=true;
51            break;
52          }
53        }
54        if (!found) Jpsi.push_back(parent);
55      }
56      if (Jpsi.size()!=1 || other.size()!=2) vetoEvent;
57      if (other[0].pid()!=-other[1].pid() || other[0].abspid()!=PID::PIPLUS) vetoEvent;
58      _h_mass[0]->fill((other[0].momentum()+other[1].momentum()).mass());
59      for (unsigned int ix=0;ix<2;++ix) {
60        FourMomentum pZ = Jpsi[0].momentum()+other[ix].momentum();
61        double mZ = pZ.mass();
62        _h_mass[1]->fill(mZ);
63        if (mZ>3.86 && mZ<3.92) {
64          LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(pZ.betaVec());
65          Vector3 axis1 = pZ.p3().unit();
66          Vector3 axis2 = boost.transform(other[ix].momentum()).p3().unit();
67          _h_cTheta->fill(abs(axis1.dot(axis2)));
68        }
69      }
70    }
71
72
73    /// Normalise histograms etc., after the run
74    void finalize() {
75      normalize(_h_mass,   1.0, false);
76      normalize(_h_cTheta, 1.0, false);
77    }
78
79    /// @}
80
81
82    /// @name Histograms
83    /// @{
84    Histo1DPtr _h_mass[2];
85    Histo1DPtr _h_cTheta;
86    /// @}
87
88
89  };
90
91
92  RIVET_DECLARE_PLUGIN(BESIII_2017_I1604892);
93
94}