Rivet analyses referenceBESIII_2015_I1382146$e^+e^-\to (D^*\bar{D}^*)^0\pi^0$ for $\sqrt{s}=4.23$ and 4.26 GeVExperiment: BESIII (BEPC) Inspire ID: 1382146 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (2.1, 2.1); (2.1, 2.1) GeV Run details:
Measurement of mass distributions for $e^+e^-\to (D^*\bar{D}^*)^0\pi^0$ for $\sqrt{s}=4.23$ and 4.26 GeV by BES. The cross section for $e^+e^-\to Z_c(4025)^0\pi^0\to (D^*\bar{D}^*)^0\pi^0$ is also measured. As there is no PDG code for the $Z_c(4025)^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_2015_I1382146.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* pi0
10 class BESIII_2015_I1382146 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2015_I1382146);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // set the PDG code
23 _pid = getOption<double>("PID", 9030443);
24 // projections
25 declare(FinalState(), "FS");
26 // histograms
27 // histograms
28 if (isCompatibleWithSqrtS(4.23)) {
29 _ecms="4.23";
30 book(_h[0],2,1,2);
31 }
32 else if (isCompatibleWithSqrtS(4.26)) {
33 _ecms="4.26";
34 book(_h[0],2,1,3);
35 }
36 else {
37 MSG_ERROR("Beam energy incompatible with analysis.");
38 }
39 book(_h[1],2,1,1);
40 book(_sigma,1,1,1);
41 }
42
43
44 /// Perform the per-event analysis
45 void analyze(const Event& event) {
46 Particles fs = apply<FinalState>(event, "FS").particles();
47 Particles DD,other;
48 for (const Particle & p : fs) {
49 Particle parent=p;
50 while (!parent.parents().empty()) {
51 parent=parent.parents()[0];
52 if(parent.abspid()==413 || parent.abspid()==423) break;
53 }
54 if (parent.abspid()==413 || parent.abspid()==423) {
55 bool found=false;
56 for (const auto& D : DD) {
57 // D already in list
58 if (fuzzyEquals(D.mom(), parent.mom())) {
59 found=true;
60 break;
61 }
62 }
63 if (!found) DD.push_back(parent);
64 }
65 else {
66 other.push_back(p);
67 }
68 }
69 // D Dbar + neutral pion
70 if (DD.size()!=2 || other.size()!=1) vetoEvent;
71 if (DD[0].pid()!=-DD[1].pid()) vetoEvent;
72 if (other[0].pid()!=111) vetoEvent;
73 const double mass = (DD[0].momentum()+DD[1].momentum()).mass();
74 _h[0]->fill(mass/GeV);
75 _h[1]->fill(mass/GeV);
76 // parent Z0
77 if (DD[0].parents()[0].pid()==_pid && DD[1].parents()[0].pid()==_pid &&
78 fuzzyEquals(DD[0].parents()[0].momentum(),DD[1].parents()[0].momentum()) ) _sigma->fill(_ecms);
79 }
80
81
82 /// Normalise histograms etc., after the run
83 void finalize() {
84 // distributions
85 normalize(_h, 1.0, false);
86 // cross section
87 scale(_sigma, crossSection()/ sumOfWeights() /picobarn);
88 }
89 /// @}
90
91
92 /// @name Histograms
93 /// @{
94 BinnedHistoPtr<string> _sigma;
95 Histo1DPtr _h[2];
96 int _pid;
97 string _ecms;
98 /// @}
99
100
101 };
102
103
104 RIVET_DECLARE_PLUGIN(BESIII_2015_I1382146);
105
106}
|