rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BES_1999_I507637

$\psi(2S)\to J/\psi\pi^+\pi^-$
Experiment: BES (BEPC)
Inspire ID: 507637
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D62 (2000) 032002
Beams: * *
Beam energies: ANY
Run details:
  • In principle any process producing psi(2S), but e+e- -> psi(2S) needs for some dists

Measurement of the $\pi^+\pi^-$ mass Spectrum and other distributions in $\psi(2S)\to J/\psi\pi^+\pi^-$ decays.

Source code: BES_1999_I507637.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief psi(2S) -> J/Psi pi+pi-
  9  class BES_1999_I507637 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(BES_1999_I507637);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // Initialise and register projections
 22      declare(UnstableParticles(),"UFS");
 23      book(_h_mpipi,1,1,1);
 24      book(_h_cosl ,1,1,2);
 25      book(_h_cosX ,1,1,3);
 26      book(_h_cospi,1,1,4);
 27    }
 28
 29    void findDecayProducts(const Particle & mother,
 30                           unsigned int & nstable,
 31                           Particles& pip, Particles& pim,
 32                           Particles & onium) {
 33      for (const Particle & p : mother.children()) {
 34        int id = p.pid();
 35        if ( id == PID::PIMINUS) {
 36          pim.push_back(p);
 37          ++nstable;
 38        }
 39        else if (id == PID::PIPLUS) {
 40          pip.push_back(p);
 41          ++nstable;
 42        }
 43        else if (id==443) {
 44          onium.push_back(p);
 45          ++nstable;
 46        }
 47        else if ( !p.children().empty() ) {
 48          findDecayProducts(p,nstable,pip,pim,onium);
 49        }
 50        else
 51          ++nstable;
 52      }
 53    }
 54
 55    void findLeptons(const Particle & mother,
 56                     unsigned int & nstable,
 57                     Particles& lp, Particles& lm) {
 58      for (const Particle & p : mother.children()) {
 59        int id = p.pid();
 60        if ( id == 11 || id == 13 ) {
 61          lm.push_back(p);
 62          ++nstable;
 63        }
 64        else if (id == -11 || id==-13) {
 65          lp.push_back(p);
 66          ++nstable;
 67        }
 68        else if ( !p.children().empty() ) {
 69          findLeptons(p,nstable,lp,lm);
 70        }
 71        else
 72          ++nstable;
 73      }
 74    }
 75
 76    /// Perform the per-event analysis
 77    void analyze(const Event& event) {
 78      // loop over unstable particles
 79      for (const Particle& psi : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==100443)) {
 80        unsigned int nstable(0);
 81        Particles pip, pim, onium;
 82        findDecayProducts(psi,nstable,pip,pim,onium);
 83        // check for onium
 84        if (onium.size() !=1 || nstable !=3 ||
 85           pip.size()!=1 || pim.size() !=1 ) continue;
 86        FourMomentum q = pip[0].momentum()+pim[0].momentum();
 87        _h_mpipi->fill(q.mass());
 88        _h_cosX->fill(cos(q.polarAngle()));
 89        // leptons from J/psi decay
 90        nstable = 0;
 91        Particles lp, lm;
 92        findLeptons(onium[0],nstable,lp,lm);
 93        if (nstable==2&&lp.size()==1&&lm.size()==1) {
 94          LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(onium[0].momentum().betaVec());
 95          FourMomentum pl = boost.transform(lp[0].momentum());
 96          _h_cosl->fill(cos(pl.polarAngle()));
 97        }
 98        // pions in rest frame
 99        LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(q.betaVec());
100        FourMomentum ppi = boost.transform(pip[0].momentum());
101        Vector3 axis1 = q.p3().unit();
102        _h_cospi->fill(axis1.dot(ppi.p3().unit()));
103      }
104
105    }
106
107
108    /// Normalise histograms etc., after the run
109    void finalize() {
110      normalize(_h_mpipi);
111      normalize(_h_cosl ,1.,false);
112      normalize(_h_cosX );
113      normalize(_h_cospi);
114    }
115
116    /// @}
117
118
119    /// @name Histograms
120    /// @{
121    Histo1DPtr _h_mpipi,_h_cosl,_h_cosX,_h_cospi;
122    /// @}
123
124
125  };
126
127
128  RIVET_DECLARE_PLUGIN(BES_1999_I507637);
129
130}