Rivet analyses referenceBESIII_2017_I1509920$\psi(2S)\to e^+e^-\chi_{c(1,2)}$ and $\chi_{c(1,2)}\to e^+e^- J/\psi$ decaysExperiment: BESIII (BEPC) Inspire ID: 1509920 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (1.8, 1.8) GeV Run details:
Measurement of the $e^+e^-$ mass distribution and the helicity angle in the decays $\psi(2S)\to e^+e^-\chi_{c(1,2)}$ and $\chi_{c(1,2)}\to e^+e^- J/\psi$ decays. Data was read from the plots in the paper and the mass distributions are not corrected, although the angle distributions are Source code: BESIII_2017_I1509920.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/Beam.hh"
5#include "Rivet/Projections/DecayedParticles.hh"
6
7namespace Rivet {
8
9
10 /// @brief psi(2S) -> e+e- chi_c and chi_c -> e+e- Jpsi$
11 class BESIII_2017_I1509920 : public Analysis {
12 public:
13
14 /// Constructor
15 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2017_I1509920);
16
17
18 /// @name Analysis methods
19 /// @{
20
21 /// Book histograms and initialise projections before the run
22 void init() {
23 // Initialise and register projections
24 declare(Beam(), "Beams");
25 UnstableParticles ufs_psi(Cuts::abspid==PID::PSI2S);
26 DecayedParticles psi(ufs_psi);
27 psi.addStable(20443);
28 psi.addStable(445);
29 declare(psi, "PSI");
30 UnstableParticles ufs_chi(Cuts::abspid==445 or Cuts::abspid==20443);
31 DecayedParticles chi(ufs_chi);
32 chi.addStable(PID::JPSI);
33 declare(chi, "CHI");
34
35 // Histograms
36 for(unsigned int ix=0;ix<2;++ix)
37 for(unsigned int iy=0;iy<4;++iy)
38 book(_h[ix][iy],1+ix,1,1+iy);
39 }
40
41
42 /// Perform the per-event analysis
43 void analyze(const Event& event) {
44 // get the axis, direction of incoming electron
45 const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
46 Vector3 axis;
47 if(beams.first.pid()>0)
48 axis = beams.first .momentum().p3().unit();
49 else
50 axis = beams.second.momentum().p3().unit();
51 // decaying particles
52 static const map<PdgId,unsigned int> & mode1 = { {20443,1},{ 11,1}, { -11,1}};
53 static const map<PdgId,unsigned int> & mode2 = { { 445,1},{ 11,1}, { -11,1}};
54 static const map<PdgId,unsigned int> & mode3 = { { 443,1},{ 11,1}, { -11,1}};
55 unsigned int iproj=0;
56 for(const DecayedParticles & in : {apply<DecayedParticles>(event, "PSI"),apply<DecayedParticles>(event, "CHI")} ) {
57 for(unsigned int ix=0;ix<in.decaying().size();++ix) {
58 int imode=-1,ichi=0;
59 if(iproj==0) {
60 if(in.modeMatches(ix,3,mode1)) {
61 imode=0;
62 ichi=20443;
63 }
64 else if(in.modeMatches(ix,3,mode2)) {
65 imode=1;
66 ichi=445;
67 }
68 else
69 continue;
70 }
71 else {
72 if(in.modeMatches(ix,3,mode3)) {
73 imode = in.decaying()[ix].pid()==20443 ? 2 : 3;
74 ichi=443;
75 }
76 else
77 continue;
78 }
79 // extract particles
80 const Particle & em = in.decayProducts()[ix].at( 11)[0];
81 const Particle & ep = in.decayProducts()[ix].at( -11)[0];
82 const Particle & out = in.decayProducts()[ix].at(ichi)[0];
83 FourMomentum qq = ep.momentum()+em.momentum();
84 double q = qq.mass();
85 _h[0][imode]->fill(q);
86 if(iproj==0) {
87 _h[1][imode]->fill(axis.dot((em.momentum()+ep.momentum()).p3().unit()));
88 }
89 else if(iproj==1) {
90 // boost everything to decaying particle frame
91 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(in.decaying()[ix].momentum().betaVec());
92 FourMomentum pout = boost1.transform(out.momentum());
93 FourMomentum pe = boost1.transform(em.momentum());
94 qq = boost1.transform(qq);
95 Vector3 axis1 = pout.p3().unit();
96 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(qq.betaVec());
97 pe = boost2.transform(pe);
98 _h[1][imode]->fill(pe.p3().unit().dot(axis1));
99 }
100 }
101 ++iproj;
102 }
103 }
104
105
106 /// Normalise histograms etc., after the run
107 void finalize() {
108 for(unsigned int ix=0;ix<2;++ix)
109 for(unsigned int iy=0;iy<4;++iy)
110 normalize(_h[ix][iy],1.,false);
111 }
112
113 /// @}
114
115
116 /// @name Histograms
117 /// @{
118 Histo1DPtr _h[2][4];
119 /// @}
120
121
122 };
123
124
125 RIVET_DECLARE_PLUGIN(BESIII_2017_I1509920);
126
127}
|