rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2018_I1646687

Mass and angular distributions in $J/\psi\to\gamma\gamma\phi$
Experiment: BESIII (BEPC)
Inspire ID: 1646687
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 97 (2018) 5, 051101
Beams: e- e+
Beam energies: (1.6, 1.6) GeV
Run details:
  • e+e- > J/psi

Mass and angulr distributions in the decay $J/\psi\to\gamma\gamma\phi$

Source code: BESIII_2018_I1646687.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/Beam.hh"
 4#include "Rivet/Projections/UnstableParticles.hh"
 5#include "Rivet/Projections/DecayedParticles.hh"
 6
 7namespace Rivet {
 8
 9
10  /// @brief Jpsi -> gamma gamma phi
11  class BESIII_2018_I1646687 : public Analysis {
12  public:
13
14    /// Constructor
15    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2018_I1646687);
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      UnstableParticles ufs = UnstableParticles(Cuts::abspid==443);
25      declare(ufs, "UFS");
26      DecayedParticles PSI(ufs);
27      PSI.addStable(PID::PHI);
28      declare(PSI, "PSI");
29      declare(Beam(), "Beams");
30      book(_h_mass,1,1,1);
31      for(unsigned int ix=0;ix<2;++ix) {
32	book(_h_angle[ix],2,1,1+ix);
33      }
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      else
45	axis = beams.second.momentum().p3().unit();
46      // find the J/psi decays
47      static const map<PdgId,unsigned int> & mode = { { 22,2},{ 333,1}};
48      DecayedParticles PSI = apply<DecayedParticles>(event, "PSI");
49      if( PSI.decaying().size()!=1) vetoEvent;
50      if(!PSI.modeMatches(0,3,mode)) vetoEvent;
51      // particles
52      const Particle  & phi = PSI.decayProducts()[0].at(333)[0];
53      const Particles & gam = PSI.decayProducts()[0].at( 22);
54      for(unsigned int ix=0;ix<2;++ix) {
55	double mPhiGamma = (gam[ix].momentum()+phi.momentum()).mass();
56	_h_mass->fill(mPhiGamma);
57	double cTheta = axis.dot(gam[ix==0 ? 1 : 0].p3().unit());
58	if(mPhiGamma>1.4 && mPhiGamma<1.6)
59	  _h_angle[0]->fill(cTheta);
60	else if(mPhiGamma>1.75 && mPhiGamma<1.9)
61	  _h_angle[1]->fill(cTheta);
62      }
63    }
64
65
66    /// Normalise histograms etc., after the run
67    void finalize() {
68      normalize(_h_mass,1.,false);
69      for(unsigned int ix=0;ix<2;++ix) {
70	normalize(_h_angle[ix],1.,false);
71      }
72    }
73
74    /// @}
75
76
77    /// @name Histograms
78    /// @{
79    Histo1DPtr _h_mass, _h_angle[2];
80    /// @}
81
82
83  };
84
85
86  RIVET_DECLARE_PLUGIN(BESIII_2018_I1646687);
87
88}