Rivet analyses referenceBESIII_2013_I1256939$e^+e^-\to (D\bar{D}^*)^\pm\pi^\mp$ for $\sqrt{s}=4.26$ GeVExperiment: BESIII (BEPC) Inspire ID: 1256939 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (2.1, 2.1) GeV Run details:
Measurement of mass distributions for $e^+e^-\to (D\bar{D}^*)^\pm\pi^\mp$ for $\sqrt{s}=4.26$ GeV by BES. The cross section for $e^+e^-\to Z_c(3885)^\pm\pi^\mp\to (D\bar{D}^*)^\pm\pi^\mp$ is also measured. As there is no PDG code for the $Z_c(3885)^+ we take it to be 9044213, although this can be changed using the PID option. Source code: BESIII_2013_I1256939.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5#include "Rivet/Projections/Beam.hh"
6
7namespace Rivet {
8
9
10 /// @brief e+e-> Z+- pi-+
11 class BESIII_2013_I1256939 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2013_I1256939);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23 // set the PDG code
24 _pid = getOption<double>("PID", 9044213);
25 // projections
26 declare(Beam(), "Beams");
27 declare(FinalState(), "FS");
28 // histograms
29 book(_sigma,1,1,1);
30 for (unsigned int ix=0; ix<2; ++ix) {
31 book(_h[ix],2,1,1+ix);
32 }
33 book(_h[2],3,1,1);
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 // get the axis, direction of incoming electron
40 const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
41 Vector3 axis;
42 if (beams.first.pid()>0) {
43 axis = beams.first.momentum().p3().unit();
44 }
45 else {
46 axis = beams.second.momentum().p3().unit();
47 }
48 Particles fs = apply<FinalState>(event, "FS").particles();
49 Particles DD,other;
50 for (const Particle& p : fs) {
51 Particle parent=p;
52 while (!parent.parents().empty()) {
53 parent=parent.parents()[0];
54 if (parent.abspid()==411 || parent.abspid()==413 ||
55 parent.abspid()==421 || parent.abspid()==423) break;
56 }
57 if ((parent.abspid()==411 || parent.abspid()==421)
58 && !parent.parents().empty()) {
59 Particle Dstar = parent.parents()[0];
60 if (Dstar.abspid()==413 || Dstar.abspid()==423) {
61 parent=Dstar;
62 }
63 }
64 if (parent.abspid()==411 || parent.abspid()==413 ||
65 parent.abspid()==421 || parent.abspid()==423) {
66 bool found=false;
67 for (const auto& D : DD) {
68 // D already in list
69 if (fuzzyEquals(D.momentum(),parent.momentum())) {
70 found=true;
71 break;
72 }
73 }
74 if (!found) DD.push_back(parent);
75 }
76 else {
77 other.push_back(p);
78 }
79 }
80 // D Dbar + charged pion
81 if (DD.size()!=2 || other.size()!=1) vetoEvent;
82 if (DD[0].pid()*DD[1].pid()>0) vetoEvent;
83 if (other[0].abspid()!=211) vetoEvent;
84 if (DD[0].abspid()%10!=3) swap(DD[0],DD[1]);
85 if (DD[0].abspid()%10!=3 || DD[1].abspid()%10!=1) vetoEvent;
86 const double mass = (DD[0].momentum()+DD[1].momentum()).mass();
87 const double cTheta = abs(axis.dot(other[0].momentum().p3().unit()));
88 unsigned int iloc=0;
89 // D0 D*- pi+ +cc
90 if ((DD[0].pid()==-413 && DD[1].pid()== 421 && other[0].pid()== 211) ||
91 (DD[0].pid()== 413 && DD[1].pid()==-421 && other[0].pid()==-211)) {
92 iloc=0;
93 }
94 // D- D*0 pi+ +cc
95 else if((DD[0].pid()== 423 && DD[1].pid()==-411 && other[0].pid()== 211) ||
96 (DD[0].pid()==-423 && DD[1].pid()== 411 && other[0].pid()==-211)) {
97 iloc=1;
98 }
99 // otherwise veto event
100 else {
101 vetoEvent;
102 }
103 _h[iloc]->fill(mass);
104 // parent Z+/-
105 if (DD[0].parents()[0].abspid()==_pid && DD[1].parents()[0].abspid()==_pid &&
106 fuzzyEquals(DD[0].parents()[0].momentum(),DD[1].parents()[0].momentum()) ) {
107 _sigma->fill("4.26"s);
108 _h[2]->fill(cTheta);
109 }
110 }
111
112
113 /// Normalise histograms etc., after the run
114 void finalize() {
115 scale(_sigma,crossSection()/ sumOfWeights() /picobarn);
116 for(unsigned int ix=0; ix<3; ++ix) {
117 normalize(_h[ix], 1.0, false);
118 }
119 }
120
121 /// @}
122
123
124 /// @name Histograms
125 /// @{
126 BinnedHistoPtr<string> _sigma;
127 Histo1DPtr _h[3];
128 int _pid;
129 /// @}
130
131
132 };
133
134
135 RIVET_DECLARE_PLUGIN(BESIII_2013_I1256939);
136
137}
|