rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2017_I1610301

$\Upsilon(2,3,4S)\to\Upsilon(1S)\pi^+\pi^-$ and $\Upsilon(4S)\to\Upsilon(2S)\pi^+\pi^-$
Experiment: BELLE (KEKB)
Inspire ID: 1610301
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 96 (2017) 5, 052005
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Upsilon(2,3,4S), original e+e-

Measurement of the $\pi^+\pi^-$ mass Spectrum and pion helicity angle in $\Upsilon(2,3,4S)\to\Upsilon(1S)\pi^+\pi^-$ and $\Upsilon(4S)\to\Upsilon(2S)\pi^+\pi^-$ decays by the BELLE collaboration.

Source code: BELLE_2017_I1610301.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Upsilon -> Upsilon pi+pi-
  9  class BELLE_2017_I1610301 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2017_I1610301);
 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      for(unsigned int ix=0;ix<4;++ix) {
 24	book(_h_mpipi [ix],1,1,ix+1);
 25	book(_h_ctheta[ix],2,1,ix+1);
 26      }
 27    }
 28
 29    void findDecayProducts(const Particle & mother,
 30			   unsigned int & nstable,
 31			   Particles& pip, Particles& pim,
 32			   Particles& pi0, 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 == PID::PI0) {
 44       	  pi0.push_back(p);
 45       	  ++nstable;
 46       	}
 47	else if (abs(id)%1000==443 || abs(id)%1000==553) {
 48	  onium.push_back(p);
 49	  ++nstable;
 50	}
 51	else if ( !p.children().empty() ) {
 52	  findDecayProducts(p,nstable,pip,pim,pi0,onium);
 53	}
 54	else
 55	  ++nstable;
 56      }
 57    }
 58
 59    /// Perform the per-event analysis
 60    void analyze(const Event& event) {
 61      for(const Particle& ups : apply<UnstableParticles>(event, "UFS").particles(Cuts::pid==100553 or
 62										 Cuts::pid==200553 or
 63										 Cuts::pid==300553)) {
 64	unsigned int nstable(0);
 65	Particles pip, pim, pi0, onium;
 66	findDecayProducts(ups,nstable,pip,pim,pi0,onium);
 67	// pions and no of products
 68	if(pip.size()!=1 || pim.size() !=1 || nstable !=3) continue;
 69	// check for onium
 70	if(onium.size() !=1) continue;
 71	if(!(onium[0].pid()==553 || (ups.pid()==300553 && onium[0].pid()==100553))) continue;
 72	FourMomentum q = pip[0].momentum()+pim[0].momentum();
 73	// boost particles to upsilon rest frame
 74	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
 75	FourMomentum ppi  = boost1.transform(pip[0].momentum());
 76	FourMomentum pUps = boost1.transform(onium[0].momentum());
 77	q = boost1.transform(q);
 78	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(q.betaVec());
 79	ppi = boost2.transform(ppi);
 80	pUps = boost2.transform(pUps);
 81	double ctheta = ppi.p3().unit().dot(pUps.p3().unit());
 82	if(ups.pid()==100553) {
 83	  _h_mpipi[0]->fill(q.mass());
 84	  _h_ctheta[0]->fill(ctheta);
 85	}
 86	else if(ups.pid()==200553) {
 87	  _h_mpipi[1]->fill(q.mass());
 88	  _h_ctheta[1]->fill(ctheta);
 89	}
 90	else if(ups.pid()==300553) {
 91	  if(onium[0].pid()==553) {
 92	    _h_mpipi[2]->fill(q.mass());
 93	    _h_ctheta[2]->fill(ctheta);
 94	  }
 95	  else {
 96	    _h_mpipi[3]->fill(q.mass());
 97	    _h_ctheta[3]->fill(ctheta);
 98	  }
 99	}
100      }
101    }
102
103
104    /// Normalise histograms etc., after the run
105    void finalize() {
106      for(unsigned int ix=0;ix<4;++ix) {
107	normalize(_h_mpipi [ix]);
108	normalize(_h_ctheta[ix]);
109      }
110    }
111
112    ///@}
113
114
115    /// @name Histograms
116    ///@{
117    Histo1DPtr _h_mpipi [4];
118    Histo1DPtr _h_ctheta[4];
119    ///@}
120
121
122  };
123
124
125  RIVET_DECLARE_PLUGIN(BELLE_2017_I1610301);
126
127}