Rivet analyses referenceCLEO_2004_I654843q2 spectra in D0→(π−,K−)e+νeExperiment: CLEO (CESR) Inspire ID: 654843 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the q2 spectra for semi-leptonic D0 meson decays by CLEO. Source code: CLEO_2004_I654843.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D -> pi,K semi-leptonic q^2
9 class CLEO_2004_I654843 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_2004_I654843);
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(Cuts::abspid==PID::D0), "UFS");
23 // histograms
24 book(_h_q2_D0_K ,1,1,1);
25 book(_h_q2_D0_pi,1,1,2);
26 }
27
28 // Calculate the Q2 using mother and daugher meson
29 double q2(const Particle& B, int mesonID) {
30 FourMomentum q = B.mom() - select(B.children(), Cuts::abspid==abs(mesonID))[0];
31 return q*q;
32 }
33
34 // Check for explicit decay into pdgids
35 bool isSemileptonicDecay(const Particle& mother, vector<int> ids) {
36 // Trivial check to ignore any other decays but the one in question modulo photons
37 const Particles children = mother.children(Cuts::pid!=PID::PHOTON);
38 if (children.size()!=ids.size()) return false;
39 // Check for the explicit decay
40 return all(ids, [&](int i){return count(children, hasPID(i))==1;});
41 }
42
43 /// Perform the per-event analysis
44 void analyze(const Event& event) {
45 // Loop over D mesons
46 for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
47 if(isSemileptonicDecay(p, {PID::PIMINUS, PID::POSITRON, PID::NU_E}) ||
48 isSemileptonicDecay(p, {PID::PIPLUS , PID::ELECTRON, PID::NU_EBAR}) )
49 _h_q2_D0_pi->fill(q2(p, PID::PIMINUS));
50 else if(isSemileptonicDecay(p, {PID::KMINUS, PID::POSITRON, PID::NU_E}) ||
51 isSemileptonicDecay(p, {PID::KPLUS , PID::ELECTRON, PID::NU_EBAR}))
52 _h_q2_D0_K ->fill(q2(p, PID::KMINUS));
53 }
54 }
55
56
57 /// Normalise histograms etc., after the run
58 void finalize() {
59 normalize(_h_q2_D0_K );
60 normalize(_h_q2_D0_pi);
61 }
62
63 /// @}
64
65
66 /// @name Histograms
67 /// @{
68 Histo1DPtr _h_q2_D0_K, _h_q2_D0_pi;
69 CounterPtr _nD0,_nDp;
70 /// @}
71
72
73 };
74
75
76 RIVET_DECLARE_PLUGIN(CLEO_2004_I654843);
77
78}
|