rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2017_I1509920

$\psi(2S)\to e^+e^-\chi_{c(1,2)}$ and $\chi_{c(1,2)}\to e^+e^- J/\psi$ decays
Experiment: BESIII (BEPC)
Inspire ID: 1509920
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 118 (2017) 22, 221802
Beams: e- e+
Beam energies: (1.8, 1.8) GeV
Run details:
  • e+e- > psi 2s.

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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/UnstableParticles.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/DecayedParticles.hh"

namespace Rivet {


  /// @brief psi(2S) -> e+e- chi_c and chi_c  -> e+e- Jpsi$
  class BESIII_2017_I1509920 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2017_I1509920);


    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {
      // Initialise and register projections
      declare(Beam(), "Beams");
      UnstableParticles ufs = UnstableParticles(Cuts::abspid==PID::PSI2S);
      DecayedParticles psi(ufs);
      psi.addStable(20443);
      psi.addStable(445);
      declare(psi, "PSI");
      ufs = UnstableParticles(Cuts::abspid==445 or Cuts::abspid==20443);
      DecayedParticles chi(ufs);
      chi.addStable(PID::JPSI);
      declare(chi, "CHI");
      // histograms
      for(unsigned int ix=0;ix<2;++ix)
	for(unsigned int iy=0;iy<4;++iy)
	  book(_h[ix][iy],1+ix,1,1+iy);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // get the axis, direction of incoming electron
      const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
      Vector3 axis;
      if(beams.first.pid()>0)
	axis = beams.first .momentum().p3().unit();
      else
	axis = beams.second.momentum().p3().unit();
      // decaying particles
      static const map<PdgId,unsigned int> & mode1   = { {20443,1},{ 11,1}, { -11,1}};
      static const map<PdgId,unsigned int> & mode2   = { {  445,1},{ 11,1}, { -11,1}};
      static const map<PdgId,unsigned int> & mode3   = { {  443,1},{ 11,1}, { -11,1}};
      unsigned int iproj=0;
      for(const DecayedParticles & in : {apply<DecayedParticles>(event, "PSI"),apply<DecayedParticles>(event, "CHI")} ) {
	for(unsigned int ix=0;ix<in.decaying().size();++ix) {
	  int imode=-1,ichi=0;
	  if(iproj==0) {
	    if(in.modeMatches(ix,3,mode1)) {
	      imode=0;
	      ichi=20443;
	    }
	    else if(in.modeMatches(ix,3,mode2)) {
	      imode=1;
	      ichi=445;
	    }
	    else
	      continue;
	  }
	  else {
	    if(in.modeMatches(ix,3,mode3)) {
	      imode = in.decaying()[ix].pid()==20443 ? 2 : 3;
	      ichi=443;
	    }
	    else
	      continue;
	  }
	  // extract particles
	  const Particle & em  = in.decayProducts()[ix].at(  11)[0];
	  const Particle & ep  = in.decayProducts()[ix].at( -11)[0];
	  const Particle & out = in.decayProducts()[ix].at(ichi)[0];
	  FourMomentum qq = ep.momentum()+em.momentum();
	  double q = qq.mass();
	  _h[0][imode]->fill(q);
	  if(iproj==0) {
	    _h[1][imode]->fill(axis.dot((em.momentum()+ep.momentum()).p3().unit()));
	  }
	  else if(iproj==1) {
	    // boost everything to decaying particle frame
	    LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(in.decaying()[ix].momentum().betaVec());
	    FourMomentum pout = boost1.transform(out.momentum());
	    FourMomentum pe   = boost1.transform(em.momentum());
	    qq = boost1.transform(qq);
	    Vector3 axis1 = pout.p3().unit();
	    LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(qq.betaVec());
	    pe = boost2.transform(pe);
	    _h[1][imode]->fill(pe.p3().unit().dot(axis1));
	  }
	}
	++iproj;
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      for(unsigned int ix=0;ix<2;++ix)
	for(unsigned int iy=0;iy<4;++iy)
	  normalize(_h[ix][iy],1.,false);
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h[2][4];
    /// @}


  };


  RIVET_DECLARE_PLUGIN(BESIII_2017_I1509920);

}