Rivet analyses referenceBESIII_2022_I2618227$D_s^+\to\pi^+\pi^+\pi^-+X$ decaysExperiment: BESIII (BEPC) Inspire ID: 2618227 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (2.1, 2.1) GeV Run details:
Measurement of mass and momentum distributions in $D_s^+\to\pi^+\pi^+\pi^-+X$ decays. The mass distribution was read from table VII in the paper and is corrected while the momentum distributions were extracted from the figures and are background subtracted but not corrected. Source code: BESIII_2022_I2618227.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D_s -> pi+ pi+ pi- +X
9 class BESIII_2022_I2618227 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2022_I2618227);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // projections
22 declare(UnstableParticles(Cuts::abspid==431),"UFS");
23 // histos
24 book(_h_br,1,1,1);
25 book(_h_mass,2,1,1);
26 for(unsigned int ix=0;ix<3;++ix)
27 book(_h_mom[ix],3,1,1+ix);
28 book(_c,"TMP/nDs");
29 }
30
31 void findChildren(const Particle & p, Particles & piPlus, Particles & piMinus) {
32 for( const Particle &child : p.children()) {
33 if(child.pid()==PID::PIPLUS) {
34 piPlus.push_back(child);
35 }
36 else if(child.pid()==PID::PIMINUS) {
37 piMinus.push_back(child);
38 }
39 else if(child.pid()==PID::K0S || child.pid()==PID::K0L)
40 continue;
41 else if(!child.children().empty())
42 findChildren(child,piPlus,piMinus);
43 }
44 }
45
46
47 /// Perform the per-event analysis
48 void analyze(const Event& event) {
49 for (const Particle& p : apply<FinalState>(event, "UFS").particles()) {
50 _c->fill();
51 Particles piPlus,piMinus;
52 findChildren(p,piPlus,piMinus);
53 if(p.pid()<0) swap(piPlus,piMinus);
54 if(piPlus.size()>=2 && !piMinus.empty()) {
55 _h_br->fill();
56 sortBy(piMinus,cmpMomByP);
57 sortBy(piPlus ,cmpMomByP);
58 _h_mom[0]->fill(piMinus[0].p3().mod());
59 for(unsigned int ix=0;ix<2;++ix)
60 _h_mom[1+ix]->fill(piPlus[ix].p3().mod());
61 double mass = (piMinus[0].momentum()+piPlus[0].momentum()+piPlus[1].momentum()).mass();
62 _h_mass->fill(mass);
63 }
64 }
65 }
66
67
68 /// Normalise histograms etc., after the run
69 void finalize() {
70 scale(_h_br, 100./ *_c);
71 scale(_h_mass, 100./ *_c);
72 for(unsigned int ix=0;ix<3;++ix)
73 normalize(_h_mom[ix],1.,false);
74 }
75
76 /// @}
77
78
79 /// @name Histograms
80 /// @{
81 Histo1DPtr _h_mass,_h_mom[3];
82 CounterPtr _h_br,_c;
83 /// @}
84
85
86 };
87
88
89 RIVET_DECLARE_PLUGIN(BESIII_2022_I2618227);
90
91}
|