rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2016_I1408873

$\chi_{c1}$ and $\chi_{c2}$ production in $B$ decays
Experiment: BELLE (KEKB)
Inspire ID: 1408873
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 93 (2016) 5, 052016
Beams: e+ e-
Beam energies: (5.3, 5.3) GeV
Run details:
  • $e^+ e^-$ at the $\Upsilon(4S)$

Measurement of inclusve production of $\chi_{c1}$ and $\chi_{c2}$ in $B$ decays, in reality the spectrum at the $\Upsilon(4S)$, together with mass distributions in several $B$ decays.

Source code: BELLE_2016_I1408873.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 B -> chi_c1 and chi_c2
 10  class BELLE_2016_I1408873 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2016_I1408873);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projections
 23      declare(UnstableParticles(Cuts::pid==300553 or Cuts::pid==9000553), "UPS");
 24      UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 ||
 25						Cuts::abspid==521);
 26      declare(ufs, "UFS");
 27      DecayedParticles BB(ufs);
 28      BB.addStable( 20443);
 29      BB.addStable(   445);
 30      BB.addStable(   310);
 31      BB.addStable(   111);
 32      declare(BB, "BB");
 33      // book histograms
 34      for(unsigned int ix=0;ix<2;++ix) {
 35	book(_h_spect[ix],1,1,1+ix);
 36	for(int iy=0;iy<5;++iy) {
 37	  book(_h_three[iy][ix],2,1+ix,1+iy);
 38	  if(iy<2)
 39	    book(_h_four[ix][iy],3,1+iy,1+ix);
 40	  else
 41	    book(_h_four[ix][iy],4,iy-1,1+ix);
 42	}
 43      }
 44      book(_wUps,"/TMP/Ups4");
 45    }
 46
 47    /// Recursively walk the decay tree to find decay products of @a p
 48    void findDecayProducts(Particle mother, Particles& unstable) {
 49      for(const Particle & p: mother.children()) {
 50        const int id = abs(p.pid());
 51        if (id == 20443 ||  id == 445 ) {
 52          unstable.push_back(p);
 53        }
 54        else if(!p.children().empty())
 55          findDecayProducts(p, unstable);
 56      }
 57    }
 58
 59    /// Perform the per-event analysis
 60    void analyze(const Event& event) {
 61      // upsilon spectrum
 62      for (const Particle& ups :  apply<UnstableParticles>(event, "UPS").particles()) {
 63	_wUps->fill();
 64	LorentzTransform cms_boost;
 65	if (ups.p3().mod() > 0.001)
 66	  cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
 67	Particles unstable;
 68	// Find the decay products we want
 69	findDecayProducts(ups,unstable);
 70	for(const Particle & p : unstable) {
 71	  double modp = cms_boost.transform(p.momentum()).p3().mod();
 72	  if(p.pid()==20443) _h_spect[0]->fill(modp);
 73	  else               _h_spect[1]->fill(modp);
 74	}
 75      }
 76      // exclusive decay modes
 77      static const map<PdgId,unsigned int> & mode1   = { { 20443,1},{-211,1}, { 321,1}};
 78      static const map<PdgId,unsigned int> & mode1CC = { { 20443,1},{ 211,1}, {-321,1}};
 79      static const map<PdgId,unsigned int> & mode2   = { {   445,1},{-211,1}, { 321,1}};
 80      static const map<PdgId,unsigned int> & mode2CC = { {   445,1},{ 211,1}, {-321,1}};
 81      static const map<PdgId,unsigned int> & mode3   = { { 20443,1},{ 211,1}, { 310,1}};
 82      static const map<PdgId,unsigned int> & mode3CC = { { 20443,1},{-211,1}, { 310,1}};
 83      static const map<PdgId,unsigned int> & mode4   = { {   445,1},{ 211,1}, { 310,1}};
 84      static const map<PdgId,unsigned int> & mode4CC = { {   445,1},{-211,1}, { 310,1}};
 85      static const map<PdgId,unsigned int> & mode5   = { { 20443,1},{ 111,1}, { 321,1}};
 86      static const map<PdgId,unsigned int> & mode5CC = { { 20443,1},{ 111,1}, {-321,1}};
 87      static const map<PdgId,unsigned int> & mode6   = { { 20443,1},{ 211,1}, {-211,1}, { 321,1}};
 88      static const map<PdgId,unsigned int> & mode6CC = { { 20443,1},{ 211,1}, {-211,1}, {-321,1}};
 89      static const map<PdgId,unsigned int> & mode7   = { {   445,1},{ 211,1}, {-211,1}, { 321,1}};
 90      static const map<PdgId,unsigned int> & mode7CC = { {   445,1},{ 211,1}, {-211,1}, {-321,1}};
 91      DecayedParticles BB = apply<DecayedParticles>(event, "BB");
 92      // loop over particles
 93      for(unsigned int ix=0;ix<BB.decaying().size();++ix) {
 94      	int sign = 1, imode =-1, ichi=0, iK=310,ipi=211;
 95	if(BB.decaying()[ix].abspid()==511) {
 96	  iK = 321;
 97	  ipi=-211;
 98	  if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode1)) {
 99	    ichi=20443;
100	    sign=1;
101	    imode=0;
102	  }
103	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode1CC)) {
104	    ichi=20443;
105	    sign=-1;
106	    imode=0;
107	  }
108	  else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode2)) {
109	    ichi=445;
110	    sign=1;
111	    imode=1;
112	  }
113	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode2CC)) {
114	    ichi=445;
115	    sign=-1;
116	    imode=1;
117	  }
118	  else
119	    continue;
120	}
121	else {
122	  if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode3)) {
123	    ichi=20443;
124	    sign=1;
125	    imode=2;
126	  }
127	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode3CC)) {
128	    ichi=20443;
129	    sign=-1;
130	    imode=2;
131	  }
132	  else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode4)) {
133	    ichi=445;
134	    sign=1;
135	    imode=3;
136	  }
137	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode4CC)) {
138	    ichi=445;
139	    sign=-1;
140	    imode=3;
141	  }
142	  else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,3,mode5)) {
143	    ichi=20443;
144	    sign=1;
145	    imode=4;
146	    iK=321;
147	    ipi=111;
148	  }
149	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,3,mode5CC)) {
150	    ichi=20443;
151	    sign=-1;
152	    imode=4;
153	    iK=321;
154	    ipi=111;
155	  }
156	  else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,4,mode6)) {
157	    ichi=20443;
158	    sign=1;
159	    imode=5;
160	    iK=321;
161	  }
162	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,4,mode6CC)) {
163	    ichi=20443;
164	    sign=-1;
165	    imode=5;
166	    iK=321;
167	  }
168	  else if (BB.decaying()[ix].pid()>0 && BB.modeMatches(ix,4,mode7)) {
169	    ichi=445;
170	    sign=1;
171	    imode=6;
172	    iK=321;
173	  }
174	  else if  (BB.decaying()[ix].pid()<0 && BB.modeMatches(ix,4,mode7CC)) {
175	    ichi=445;
176	    sign=-1;
177	    imode=6;
178	    iK=321;
179	  }
180	  else
181	    continue;
182	}
183	if(ipi!=111) ipi*=sign;
184	if(iK !=310) iK *=sign;
185	const Particle & pip  = BB.decayProducts()[ix].at(ipi )[0];
186	const Particle & K   = BB.decayProducts()[ix].at(iK  )[0];
187	const Particle & chi = BB.decayProducts()[ix].at(ichi)[0];
188	if(imode<5) {
189	  _h_three[imode][0]->fill((pip.momentum()+K  .momentum()).mass());
190	  _h_three[imode][1]->fill((chi.momentum()+pip.momentum()).mass());
191	}
192	else {
193	  const Particle & pim  = BB.decayProducts()[ix].at(-ipi)[0];
194	  FourMomentum ppi = pim.momentum()+pip.momentum();
195	  imode -=5;
196	  _h_four[imode][0]->fill((chi.momentum()+ppi).mass());
197	  _h_four[imode][1]->fill((chi.momentum()+pim.momentum()).mass());
198	  _h_four[imode][1]->fill((chi.momentum()+pip.momentum()).mass());
199	  _h_four[imode][2]->fill((K.momentum()+ppi).mass());
200	  _h_four[imode][3]->fill((K.momentum()+pim.momentum()).mass());
201	  _h_four[imode][4]->fill(ppi.mass());
202	}
203      }
204    }
205
206
207    /// Normalise histograms etc., after the run
208    void finalize() {
209      for(unsigned int ix=0;ix<2;++ix) {
210	scale(_h_spect[ix], 1e4/2./ *_wUps);
211	for(unsigned int iy=0;iy<5;++iy) {
212	  normalize(_h_three[iy][ix],1.,false);
213	  normalize(_h_four [ix][iy],1.,false);
214	}
215      }
216    }
217
218    /// @}
219
220
221    /// @name Histograms
222    /// @{
223    Histo1DPtr _h_spect[2];
224    Histo1DPtr _h_three[5][2];
225    Histo1DPtr _h_four [2][5];
226    CounterPtr _wUps;
227    /// @}
228// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d03-x01-y01
229// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d03-x02-y01
230// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d03-x01-y02
231// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d03-x02-y02
232// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x01-y01
233// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x02-y01
234// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x03-y01
235// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x01-y02
236// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x02-y02
237// BEGIN YODA_SCATTER2D_V2 /REF/BELLE_2016_I1408873/d04-x03-y02
238
239
240  };
241
242
243  RIVET_DECLARE_PLUGIN(BELLE_2016_I1408873);
244
245}