Rivet analyses referenceKEDR_2022_I2593308Mass distributions in $J/\psi\to\pi^+\pi^-\pi^0$Experiment: KEDR (VEPP-4M) Inspire ID: 2593308 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of mass distributions in $J/\psi\to\pi^+\pi^-\pi^0$, data read from plots in paper and may not be corrected. The angluar cuts used in this analysis enhance the $\rho\pi$ component and supress the higher resonances. Source code: KEDR_2022_I2593308.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/DecayedParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief J/psi -> pi+pi-pi0
10 class KEDR_2022_I2593308 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(KEDR_2022_I2593308);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 UnstableParticles ufs = UnstableParticles(Cuts::pid==443);
23 declare(ufs, "UFS");
24 DecayedParticles psi(ufs);
25 psi.addStable(PID::PI0);
26 psi.addStable(PID::K0S);
27 psi.addStable(PID::ETA);
28 psi.addStable(PID::ETAPRIME);
29 declare(psi, "psi");
30 // histograms
31 for(unsigned int ix=0;ix<3;++ix) {
32 book(_h_pipi[ix],1,1,1+ix);
33 }
34 }
35
36
37 /// Perform the per-event analysis
38 void analyze(const Event& event) {
39 static const map<PdgId,unsigned int> & mode = { { 211,1}, {-211,1}, { 111,1} };
40 DecayedParticles psi = apply<DecayedParticles>(event, "psi");
41 // loop over particles
42 for(unsigned int ix=0;ix<psi.decaying().size();++ix) {
43 if(!psi.modeMatches(ix,3,mode)) continue;
44 const Particles & pi0 = psi.decayProducts()[ix].at( 111);
45 const Particles & pip = psi.decayProducts()[ix].at( 211);
46 const Particles & pim = psi.decayProducts()[ix].at(-211);
47 double mminus = (pim[0].momentum()+pi0[0].momentum()).mass();
48 double mplus = (pip[0].momentum()+pi0[0].momentum()).mass();
49 double mneut = (pip[0].momentum()+pim[0].momentum()).mass();
50 double Cminus = pim[0].momentum().p3().unit().dot(pi0[0].momentum().p3().unit());
51 double Cplus = pip[0].momentum().p3().unit().dot(pi0[0].momentum().p3().unit());
52 double Cneut = pip[0].momentum().p3().unit().dot(pim[0].momentum().p3().unit());
53 if(Cminus+Cplus+Cneut>-1.075) continue;
54 if(Cneut >Cminus && Cneut >Cplus) _h_pipi[0]->fill(mneut );
55 if(Cplus >Cminus && Cplus >Cneut) _h_pipi[1]->fill(mplus );
56 if(Cminus>Cplus && Cminus>Cneut) _h_pipi[2]->fill(mminus);
57 }
58 }
59
60
61 /// Normalise histograms etc., after the run
62 void finalize() {
63 for(unsigned int ix=0;ix<3;++ix) {
64 normalize(_h_pipi[ix],1.,false);
65 }
66 }
67
68 /// @}
69
70
71 /// @name Histograms
72 /// @{
73 Histo1DPtr _h_pipi[3];
74 /// @}
75
76
77 };
78
79
80 RIVET_DECLARE_PLUGIN(KEDR_2022_I2593308);
81
82}
|