Rivet analyses referenceBESIII_2015_I1386254Kinematic distributions in $D^+\to\omega e^+\nu_e$Experiment: BESIII (BEPC) Inspire ID: 1386254 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of the kinematic distributions in $D^+\to\omega e^+\nu_e$ by BES-III. N.B. the plots where read from the paper and may not have been corrected for acceptance. Source code: BESIII_2015_I1386254.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 D+ -> omega e+ nu_e
10 class BESIII_2015_I1386254 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2015_I1386254);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 UnstableParticles ufs = UnstableParticles(Cuts::pid==411);
25 declare(ufs, "UFS");
26 DecayedParticles DD(ufs);
27 DD.addStable(PID::PI0);
28 DD.addStable(PID::K0S);
29 DD.addStable(PID::ETA);
30 DD.addStable(PID::ETAPRIME);
31 declare(DD, "DD");
32
33 // Book histograms
34 for(unsigned int ix=0;ix<4;++ix)
35 book(_h[ix],1,1,1+ix);
36 }
37
38
39 /// Perform the per-event analysis
40 void analyze(const Event& event) {
41 static const map<PdgId,unsigned int> & mode = { { 211,1}, {-211,1}, { 111,1}, {-11,1}, { 12,1}};
42 DecayedParticles DD = apply<DecayedParticles>(event, "DD");
43 // loop over particles
44 for(unsigned int ix=0;ix<DD.decaying().size();++ix) {
45 if(!DD.modeMatches(ix,5,mode)) continue;
46 const Particle & pip= DD.decayProducts()[ix].at( 211)[0];
47 const Particle & pim= DD.decayProducts()[ix].at(-211)[0];
48 const Particle & pi0= DD.decayProducts()[ix].at( 111)[0];
49 const Particle & ep = DD.decayProducts()[ix].at(-11)[0];
50 const Particle & nue= DD.decayProducts()[ix].at( 12)[0];
51 FourMomentum pOmega = pip.momentum()+pim.momentum()+pi0.momentum();
52 _h[0]->fill(pOmega.mass2());
53 FourMomentum qq = DD.decaying()[ix].momentum()-pOmega;
54 _h[1]->fill(qq.mass2());
55 // boost momenta to D rest frame
56 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(DD.decaying()[ix].momentum().betaVec());
57 FourMomentum pPP = boost.transform(pOmega);
58 Matrix3 ptoz(-pPP.p3().unit(), Vector3(0,0,1));
59 boost.preMult(ptoz);
60 // the momenta in frane to W along z
61 FourMomentum pD = boost.transform(DD.decaying()[ix].momentum());
62 FourMomentum ppip = boost.transform(pip.momentum());
63 FourMomentum ppim = boost.transform(pim.momentum());
64 FourMomentum ppi0 = boost.transform(pi0.momentum());
65 FourMomentum pe = boost.transform(ep .momentum());
66 FourMomentum pnu = boost.transform(nue.momentum());
67 pOmega = ppip+ppim+ppi0;
68 qq = pD-pOmega;
69 LorentzTransform boostOmega = LorentzTransform::mkFrameTransformFromBeta(pOmega.betaVec());
70 Vector3 n1 = (boostOmega.transform(ppip).p3().cross(boostOmega.transform(ppim).p3())).unit();
71 _h[2]->fill(n1.dot(pOmega.p3().unit()));
72 LorentzTransform boostW = LorentzTransform::mkFrameTransformFromBeta( qq.betaVec());
73 Vector3 axisE = boostW.transform(pe).p3().unit();
74 _h[3]->fill(axisE.dot(qq.p3().unit()));
75 // axisOmega.setZ(0.);
76 // axisE.setZ(0.);
77 // double chi = atan2(axisE.cross(axisOmega).dot(qq.p3().unit()), axisE.dot(axisOmega));
78 // _h[imode+4]->fill(chi);
79 }
80 }
81
82
83 /// Normalise histograms etc., after the run
84 void finalize() {
85 for(unsigned int ix=0;ix<4;++ix)
86 normalize(_h[ix]);
87 }
88
89 /// @}
90
91
92 /// @name Histograms
93 /// @{
94 Histo1DPtr _h[4];
95 /// @}
96
97
98 };
99
100
101 RIVET_DECLARE_PLUGIN(BESIII_2015_I1386254);
102
103}
|