Rivet analyses referenceBESIII_2020_I1793431$e^+e^-\to \pi^0\pi^0 J/\psi$ for $\sqrt{s}=3.808$ to $4.6$ GeVExperiment: BESIII (BEPC) Inspire ID: 1793431 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (1.9, 1.9); (1.9, 1.9); (2.0, 2.0); (2.0, 2.0); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3) GeV Run details:
Measurement of the cross section for $e^+e^-\to \pi^0\pi^0 J/\psi$ for $\sqrt{s}=3.808$ to $4.6$ GeV by BESIII. The mass distributions are also measured at three energy points together with the cross section for $Z_c(3900)^0\pi^0$. As there is no PDG code for the $Z_c(3900)^0$ we take it to be the first unused exotic $c\bar{c}$ value 9030443, although this can be changed using the PID option. Source code: BESIII_2020_I1793431.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4
5namespace Rivet {
6
7
8 /// @brief e+ e- -> pi0 pi0 J/psi
9 class BESIII_2020_I1793431 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2020_I1793431);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // set the PDG code
22 _pid = getOption<double>("PID", 9030443);
23 // projections
24 declare(FinalState(), "FS");
25 // histos
26 unsigned int iloc=0;
27 if (isCompatibleWithSqrtS(4.226)) iloc=1;
28 else if (isCompatibleWithSqrtS(4.236)) iloc=2;
29 else if (isCompatibleWithSqrtS(4.244)) iloc=3;
30 else if (isCompatibleWithSqrtS(4.258)) iloc=4;
31 if (iloc>0) {
32 for (unsigned int iy=0; iy<2; ++iy) {
33 book(_h[iy], 2, iloc, 1+iy);
34 }
35 }
36 book(_sigma[0], 1, 1, 1);
37 book(_sigma[1],"TMP/numer", refData<YODA::BinnedEstimate<string>>(1,1,2));
38 book(_sigma[2],"TMP/denom", refData<YODA::BinnedEstimate<string>>(1,1,2));
39 book(_sigma[3], 3, 1, 1);
40
41 for (unsigned int ix=0; ix<3; ++ix) {
42 for (const string& en : _sigma[ix].binning().edges<0>()) {
43 const double end = std::stod(en)*GeV;
44 if (isCompatibleWithSqrtS(end)) {
45 _ecms[ix] = en;
46 break;
47 }
48 }
49 }
50 if (_ecms[0].empty()) {
51 MSG_ERROR("Beam energy incompatible with analysis.");
52 }
53 }
54
55
56 /// Perform the per-event analysis
57 void analyze(const Event& event) {
58 Particles fs = apply<FinalState>(event, "FS").particles();
59 Particles Jpsi, other;
60 for (const Particle& p : fs) {
61 Particle parent=p;
62 while (!parent.parents().empty()) {
63 parent=parent.parents()[0];
64 if (parent.abspid()==PID::JPSI) break;
65 }
66 if (parent.abspid()!=PID::JPSI) {
67 other.push_back(p);
68 continue;
69 }
70 bool found=false;
71 for (auto & psi : Jpsi) {
72 // J/psi already in list
73 if (fuzzyEquals(psi.momentum(),parent.momentum())) {
74 found=true;
75 break;
76 }
77 }
78 if (!found) Jpsi.push_back(parent);
79 }
80 if (Jpsi.size()!=1 || other.size()!=2) vetoEvent;
81 if (other[0].pid()==PID::PI0 && other[1].pid()==PID::PI0) {
82 _sigma[0]->fill(_ecms[0]);
83 if(!_ecms[1].empty()) _sigma[1]->fill(_ecms[1]);
84 if (Jpsi[0].parents()[0].pid()==_pid && !_ecms[2].empty()) _sigma[3]->fill(_ecms[2]);
85 if (_h[0]) {
86 for (unsigned int iy=0; iy<2; ++iy) {
87 _h[0]->fill((Jpsi[0].mom()+other[iy].mom()).mass());
88 }
89 _h[1]->fill((other[0].mom()+other[1].mom()).mass());
90 }
91 }
92 else if (other[0].pid()==-other[1].pid() &&
93 other[0].abspid()==PID::PIPLUS &&
94 !_ecms[1].empty()) {
95 _sigma[2]->fill(_ecms[1]);
96 }
97 }
98
99
100 /// Normalise histograms etc., after the run
101 void finalize() {
102 for (unsigned int iy=0; iy<2; ++iy) {
103 if (_h[iy]) normalize(_h[iy], 1.0, false);
104 }
105 scale(_sigma, crossSection()/ sumOfWeights() /picobarn);
106 BinnedEstimatePtr<string> tmp;
107 book(tmp,1,1,2);
108 divide(_sigma[1], _sigma[2], tmp);
109 }
110
111 /// @}
112
113
114 /// @name Histograms
115 /// @{
116 int _pid;
117 Histo1DPtr _h[2];
118 BinnedHistoPtr<string> _sigma[4];
119 string _ecms[3];
120 /// @}
121
122
123 };
124
125
126 RIVET_DECLARE_PLUGIN(BESIII_2020_I1793431);
127
128}
|