Rivet analyses referenceMC_Semi_Leptonic_DecayMC analysis of the Kinematics in Semi-Leptonic Meson decaysExperiment: () Status: VALIDATED Authors:
Beams: * * Beam energies: ANY Run details:
Analysis of the kinematics in semileptonic meson decays. Source code: MC_Semi_Leptonic_Decay.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief MC Semi-leptonic decay analysis
9 class MC_Semi_Leptonic_Decay : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(MC_Semi_Leptonic_Decay);
14
15
16 /// @name Analysis methods
17 //@{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21
22 // Initialise and register projections
23 declare(UnstableParticles(), "UFS");
24 // B decays
25 bookHistos( 511, -413,-11,5.3);
26 bookHistos(-511, 413, 11,5.3);
27 bookHistos( 511, -413,-13,5.3);
28 bookHistos(-511, 413, 13,5.3);
29 bookHistos( 521, -423,-11,5.3);
30 bookHistos(-521, 423, 11,5.3);
31 bookHistos( 521, -423,-13,5.3);
32 bookHistos(-521, 423, 13,5.3);
33 bookHistos( 511, -411,-11,5.3);
34 bookHistos(-511, 411, 11,5.3);
35 bookHistos( 511, -411,-13,5.3);
36 bookHistos(-511, 411, 13,5.3);
37 bookHistos( 521, -421,-11,5.3);
38 bookHistos(-521, 421, 11,5.3);
39 bookHistos( 521, -421,-13,5.3);
40 bookHistos(-521, 421, 13,5.3);
41 bookHistos( 511, -415,-11,5.3);
42 bookHistos(-511, 415, 11,5.3);
43 bookHistos( 511, -415,-13,5.3);
44 bookHistos(-511, 415, 13,5.3);
45 bookHistos( 521, -425,-11,5.3);
46 bookHistos(-521, 425, 11,5.3);
47 bookHistos( 521, -425,-13,5.3);
48 bookHistos(-521, 425, 13,5.3);
49 bookHistos( 511,-10411,-11,5.3);
50 bookHistos(-511, 10411, 11,5.3);
51 bookHistos( 511,-10411,-13,5.3);
52 bookHistos(-511, 10411, 13,5.3);
53 bookHistos( 521,-10421,-11,5.3);
54 bookHistos(-521, 10421, 11,5.3);
55 bookHistos( 521,-10421,-13,5.3);
56 bookHistos(-521, 10421, 13,5.3);
57 bookHistos( 511,-10413,-11,5.3);
58 bookHistos(-511, 10413, 11,5.3);
59 bookHistos( 511,-10413,-13,5.3);
60 bookHistos(-511, 10413, 13,5.3);
61 bookHistos( 521,-10423,-11,5.3);
62 bookHistos(-521, 10423, 11,5.3);
63 bookHistos( 521,-10423,-13,5.3);
64 bookHistos(-521, 10423, 13,5.3);
65 bookHistos( 511,-20413,-11,5.3);
66 bookHistos(-511, 20413, 11,5.3);
67 bookHistos( 511,-20413,-13,5.3);
68 bookHistos(-511, 20413, 13,5.3);
69 bookHistos( 521,-20423,-11,5.3);
70 bookHistos(-521, 20423, 11,5.3);
71 bookHistos( 521,-20423,-13,5.3);
72 bookHistos(-521, 20423, 13,5.3);
73
74 bookHistos( 511, -213,-11,5.3);
75 bookHistos(-511, 213, 11,5.3);
76 bookHistos( 511, -213,-13,5.3);
77 bookHistos(-511, 213, 13,5.3);
78 bookHistos( 521, 113,-11,5.3);
79 bookHistos(-521, 113, 11,5.3);
80 bookHistos( 521, 113,-13,5.3);
81 bookHistos(-521, 113, 13,5.3);
82 bookHistos( 521, 223,-11,5.3);
83 bookHistos(-521, 223, 11,5.3);
84 bookHistos( 521, 223,-13,5.3);
85 bookHistos(-521, 223, 13,5.3);
86 bookHistos( 511, -211,-11,5.3);
87 bookHistos(-511, 211, 11,5.3);
88 bookHistos( 511, -211,-13,5.3);
89 bookHistos(-511, 211, 13,5.3);
90 bookHistos( 521, 111,-11,5.3);
91 bookHistos(-521, 111, 11,5.3);
92 bookHistos( 521, 111,-13,5.3);
93 bookHistos(-521, 111, 13,5.3);
94 bookHistos( 521, 221,-11,5.3);
95 bookHistos(-521, 221, 11,5.3);
96 bookHistos( 521, 221,-13,5.3);
97 bookHistos(-521, 221, 13,5.3);
98 bookHistos( 521, 331,-11,5.3);
99 bookHistos(-521, 331, 11,5.3);
100 bookHistos( 521, 331,-13,5.3);
101 bookHistos(-521, 331, 13,5.3);
102
103 // D decays
104 bookHistos( 411,-311,-11,1.9);
105 bookHistos(-411, 311, 11,1.9);
106 bookHistos( 411,-311,-13,1.9);
107 bookHistos(-411, 311, 13,1.9);
108 bookHistos( 421,-321,-11,1.9);
109 bookHistos(-421, 321, 11,1.9);
110 bookHistos( 421,-321,-13,1.9);
111 bookHistos(-421, 321, 13,1.9);
112 bookHistos( 411,-313,-11,1.9);
113 bookHistos(-411, 313, 11,1.9);
114 bookHistos( 411,-313,-13,1.9);
115 bookHistos(-411, 313, 13,1.9);
116 bookHistos( 421,-323,-11,1.9);
117 bookHistos(-421, 323, 11,1.9);
118 bookHistos( 421,-323,-13,1.9);
119 bookHistos(-421, 323, 13,1.9);
120
121 bookHistos( 411,-10313,-11,1.9);
122 bookHistos(-411, 10313, 11,1.9);
123 bookHistos( 411,-10313,-13,1.9);
124 bookHistos(-411, 10313, 13,1.9);
125 bookHistos( 421,-10323,-11,1.9);
126 bookHistos(-421, 10323, 11,1.9);
127 bookHistos( 421,-10323,-13,1.9);
128 bookHistos(-421, 10323, 13,1.9);
129
130 bookHistos( 411,-315,-11,1.9);
131 bookHistos(-411, 315, 11,1.9);
132 bookHistos( 411,-315,-13,1.9);
133 bookHistos(-411, 315, 13,1.9);
134 bookHistos( 421,-325,-11,1.9);
135 bookHistos(-421, 325, 11,1.9);
136 bookHistos( 421,-325,-13,1.9);
137 bookHistos(-421, 325, 13,1.9);
138
139 bookHistos( 411, 111,-11,1.9);
140 bookHistos(-411, 111, 11,1.9);
141 bookHistos( 411, 111,-13,1.9);
142 bookHistos(-411, 111, 13,1.9);
143 bookHistos( 411, 221,-11,1.9);
144 bookHistos(-411, 221, 11,1.9);
145 bookHistos( 411, 221,-13,1.9);
146 bookHistos(-411, 221, 13,1.9);
147 bookHistos( 411, 331,-11,1.9);
148 bookHistos(-411, 331, 11,1.9);
149 bookHistos( 411, 331,-13,1.9);
150 bookHistos(-411, 331, 13,1.9);
151 bookHistos( 421,-211,-11,1.9);
152 bookHistos(-421, 211, 11,1.9);
153 bookHistos( 421,-211,-13,1.9);
154 bookHistos(-421, 211, 13,1.9);
155
156 bookHistos( 411, 113,-11,1.9);
157 bookHistos(-411, 113, 11,1.9);
158 bookHistos( 411, 113,-13,1.9);
159 bookHistos(-411, 113, 13,1.9);
160 bookHistos( 411, 223,-11,1.9);
161 bookHistos(-411, 223, 11,1.9);
162 bookHistos( 411, 223,-13,1.9);
163 bookHistos(-411, 223, 13,1.9);
164 bookHistos( 421,-213,-11,1.9);
165 bookHistos(-421, 213, 11,1.9);
166 bookHistos( 421,-213,-13,1.9);
167 bookHistos(-421, 213, 13,1.9);
168
169 // D_s decays
170 bookHistos( 431, 221,-11,1.9);
171 bookHistos(-431, 221, 11,1.9);
172 bookHistos( 431, 221,-13,1.9);
173 bookHistos(-431, 221, 13,1.9);
174 bookHistos( 431, 331,-11,1.9);
175 bookHistos(-431, 331, 11,1.9);
176 bookHistos( 431, 331,-13,1.9);
177 bookHistos(-431, 331, 13,1.9);
178 bookHistos( 431, 333,-11,1.9);
179 bookHistos(-431, 333, 11,1.9);
180 bookHistos( 431, 333,-13,1.9);
181 bookHistos(-431, 333, 13,1.9);
182
183 bookHistos( 431, 311,-11,1.9);
184 bookHistos(-431,-311, 11,1.9);
185 bookHistos( 431, 311,-13,1.9);
186 bookHistos(-431,-311, 13,1.9);
187 bookHistos( 431, 313,-11,1.9);
188 bookHistos(-431,-313, 11,1.9);
189 bookHistos( 431, 313,-13,1.9);
190 bookHistos(-431,-313, 13,1.9);
191 }
192
193 void bookHistos(int id1, int id2, int ilep, double mass) {
194 _incoming.push_back(id1);
195 _outgoing.push_back(id2);
196 _outgoingL.push_back(ilep);
197 std::ostringstream title;
198 title << "h_" << abs(id1);
199 if(id1>0) title << "p";
200 else title << "m";
201 title << "_" << abs(id2);
202 if(id2>0) title << "p";
203 else title << "m";
204 title << "_" << abs(ilep);
205 if(ilep>0) title << "p";
206 else title << "m";
207 title << "_";
208 _energy.push_back(Histo1DPtr());
209 book(_energy.back(), title.str()+"energy",200,0.0,0.5*mass/MeV);
210 _scale .push_back(Histo1DPtr());
211 book(_scale.back(), title.str()+"scale" ,200,0.0,mass/MeV);
212 }
213
214 void findDecayProducts(const Particle & mother,
215 unsigned int & nstable,
216 Particles& lp, Particles& lm,
217 Particles& nu, Particles& nub,
218 Particles& out) {
219 for(const Particle & p : mother.children()) {
220 int id = p.pid();
221 if ( id == PID::EMINUS || id == PID::MUON ) {
222 lm .push_back(p);
223 ++nstable;
224 }
225 else if (id == PID::EPLUS || id == PID::ANTIMUON) {
226 lp .push_back(p);
227 ++nstable;
228 }
229 else if ( id == PID::NU_E || id == PID::NU_EBAR ) {
230 nu .push_back(p);
231 ++nstable;
232 }
233 else if (id == PID::NU_MU || id == PID::NU_MUBAR ) {
234 nub.push_back(p);
235 ++nstable;
236 }
237 else if (PID::isMeson(id)) {
238 out.push_back(p);
239 ++nstable;
240 }
241 else if ( !p.children().empty() ) {
242 findDecayProducts(p,nstable,lp,lm,nu,nub,out);
243 }
244 else
245 ++nstable;
246 }
247 }
248
249 /// Perform the per-event analysis
250 void analyze(const Event& event) {
251 // loop over unstable particles
252 for(const Particle& meson : apply<UnstableParticles>(event, "UFS").particles()) {
253 int id = meson.pid();
254 // spin 0 mesons
255 if(!PID::isMeson(id)) continue;
256 if(abs(id)%10!=1) continue;
257 unsigned int nstable(0);
258 Particles lp, lm, nu, nub, out;
259 findDecayProducts(meson,nstable,lp,lm,nu,nub,out);
260 if(nstable!=3 || out.size()!=1) continue;
261 int ilep=0;
262 FourMomentum plep,pmnu=out[0].momentum();
263 double me2(0.);
264 if( lp.size()==1 && nu.size()==1 && out.size()==1 ) {
265 if(nu[0].pid() != -lp[0].pid()+1) continue;
266 ilep = lp[0].pid();
267 plep = nu[0].momentum()+lp[0].momentum();
268 pmnu += nu[0].momentum();
269 me2 = lp[0].mass2();
270 }
271 else if( lm.size()==1 && nub.size()==1 && out.size()==1 ) {
272 if(nub[0].pid() != -lm[0].pid()-1) continue;
273 ilep = lm[0].pid();
274 plep = nub[0].momentum()+lm[0].momentum();
275 pmnu += nub[0].momentum();
276 me2 = lm[0].mass2();
277 }
278 else
279 continue;
280 // check if histos already exist
281 unsigned int iloc=0;
282 bool found(false);
283 while(!found&&iloc<_incoming.size()) {
284 if(_incoming[iloc] == id &&
285 _outgoing[iloc] == out[0].pid() &&
286 ilep==_outgoingL[iloc]) found=true;
287 else ++iloc;
288 }
289 if(!found) {
290 MSG_WARNING("MC_Semi_Leptonic_Decay" << id << " " << out[0].pid() << " " << " " << ilep << " "
291 << meson.mass() << "\n");
292 continue;
293 }
294 // add the results to the histogram
295 _scale[iloc]->fill(plep.mass()/MeV);
296 double ee = 0.5/meson.mass()*(meson.mass2()-pmnu.mass2()+me2);
297 _energy[iloc]->fill(ee/MeV);
298 }
299 }
300
301 /// Normalise histograms etc., after the run
302 void finalize() {
303 for(unsigned int ix=0;ix<_energy.size();++ix) {
304 normalize(_energy);
305 normalize(_scale );
306 }
307 }
308
309 //@}
310
311
312 /// @name Histograms
313 //@{
314 /**
315 * PDG codes of the decaying mesons
316 */
317 vector<long> _incoming;
318
319 /**
320 * PDG codes of the decay products
321 */
322 vector<long> _outgoing;
323
324 /**
325 * Identidies of the leptons
326 */
327 vector<long> _outgoingL;
328
329 /**
330 * Histograms
331 */
332 //@{
333 /**
334 * The lepton energy
335 */
336 vector<Histo1DPtr> _energy;
337
338 /**
339 * The \f$q\f$ value
340 */
341 vector<Histo1DPtr> _scale;
342 //@}
343
344 };
345
346
347 // The hook for the plugin system
348 RIVET_DECLARE_PLUGIN(MC_Semi_Leptonic_Decay);
349
350
351}
|