Rivet analyses referenceBESIII_2022_I2135117Mass and angluar distributions in $J/\psi\to\gamma\eta\eta^\prime$Experiment: BESIII (BEPC) Inspire ID: 2135117 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of mass and angluar distributions in $J/\psi\to\gamma\eta\eta^\prime$ by BESIII. The background subtracted data were read from the plots in the paper. Source code: BESIII_2022_I2135117.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 -> gamma eta eta'
10 class BESIII_2022_I2135117 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2022_I2135117);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==443);
24 declare(ufs, "UFS");
25 DecayedParticles PSI(ufs);
26 PSI.addStable(PID::ETA);
27 PSI.addStable(PID::ETAPRIME);
28 declare(PSI, "PSI");
29 // histos
30 for(unsigned int ix=0;ix<3;++ix) {
31 book(_h_angle[ix],2,1,1+ix);
32 book(_h_mass [ix],1,1,1+ix);
33 }
34 book(_h_angle[3],1,1,4);
35 }
36
37
38 /// Perform the per-event analysis
39 void analyze(const Event& event) {
40 // find the J/psi decays
41 static const map<PdgId,unsigned int> & mode = { { 22,1},{ 221,1},{ 331,1}};
42 DecayedParticles PSI = apply<DecayedParticles>(event, "PSI");
43 for(unsigned int ix=0;ix<PSI.decaying().size();++ix) {
44 if(!PSI.modeMatches(ix,3,mode)) continue;
45 const Particle & eta = PSI.decayProducts()[ix].at(221)[0];
46 const Particle & etap = PSI.decayProducts()[ix].at(331)[0];
47 const Particle & gam = PSI.decayProducts()[ix].at( 22)[0];
48 double mEE = (eta.momentum()+etap.momentum()).mass();
49 double mEG = (gam.momentum()+eta .momentum()).mass();
50 if(abs(mEG-1.019461)<0.04) continue;
51 _h_mass[0]->fill(mEE);
52 _h_mass[1]->fill(mEG);
53 _h_mass[2]->fill((gam.momentum()+etap.momentum()).mass());
54 // angles
55 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(PSI.decaying()[0].momentum().betaVec());
56 FourMomentum pGamma = boost1.transform(gam.momentum());
57 FourMomentum pEE = boost1.transform(eta.momentum()+etap.momentum());
58 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pEE.betaVec());
59 Vector3 axis2 = boost2.transform(boost1.transform(eta.momentum())).p3().unit();
60 double cTheta = pGamma.p3().unit().dot(axis2);
61 _h_angle[3]->fill(cTheta);
62 if( mEE>1.5 && mEE<1.7)
63 _h_angle[0]->fill(cTheta);
64 else if(mEE>1.7 && mEE<2.)
65 _h_angle[1]->fill(cTheta);
66 else if(mEE>2. && mEE<3.2)
67 _h_angle[2]->fill(cTheta);
68 }
69 }
70
71
72 /// Normalise histograms etc., after the run
73 void finalize() {
74 for(unsigned int ix=0;ix<4;++ix) {
75 normalize(_h_angle[ix],1.,false);
76 if(ix<3) normalize(_h_mass[ix],1.,false);
77 }
78 }
79
80 /// @}
81
82
83 /// @name Histograms
84 /// @{
85 Histo1DPtr _h_mass[3],_h_angle[4];
86 /// @}
87 };
88
89
90 RIVET_DECLARE_PLUGIN(BESIII_2022_I2135117);
91
92}
|