rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

MC_DECAY_SEMILEPTONIC

MC analysis of the Kinematics in Semi-Leptonic Meson decays
Experiment: ()
Status: VALIDATED
Authors:
  • Peter Richardson
No references listed
Beams: * *
Beam energies: ANY
Run details:
  • Any type of process producing mesons which decay semi-leptonically

Analysis of the kinematics in semileptonic meson decays.

Source code: MC_DECAY_SEMILEPTONIC.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_DECAY_SEMILEPTONIC : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(MC_DECAY_SEMILEPTONIC);
 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_DECAY_SEMILEPTONIC" << 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  RIVET_DECLARE_PLUGIN(MC_DECAY_SEMILEPTONIC);
348
349}