Rivet analyses referenceBELLE_2016_I1408873$\chi_{c1}$ and $\chi_{c2}$ production in $B$ decaysExperiment: BELLE (KEKB) Inspire ID: 1408873 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (5.3, 5.3) GeV Run details:
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}
|