Rivet analyses referenceARGUS_1989_I280943Spectra and decay distributions for $D_1(2420)^0$ and $D^*_2(2460)^0$ production in $e^+e^-$ collisions at 10 GeVExperiment: ARGUS (DORIS) Inspire ID: 280943 Status: VALIDATED Authors:
Beam energies: (5.0, 5.0) GeV Run details:
Measurements of the scaled momentum spectrum for $D_1(2420)^0$ and $D^*_2(2460)^0$ production in $e^+e^-$ collisions at 10 GeV. The decays $D_1(2420)^0, D^*_2(2460)^0 \to D^{*+}\pi^-\to D^0\pi^+\pi^-$ were used and the helicity angle, i.e. the angle between the two pions in the rest frame of the $D^*$ are is measured. Source code: ARGUS_1989_I280943.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D_1 and D_2 spectra and decay distributions
9 class ARGUS_1989_I280943 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1989_I280943);
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
25 // Book histograms
26 book(_h_D1_rate ,1,1,1);
27 book(_h_D2_rate ,1,1,2);
28 book(_h_D1_x ,4,1,1);
29 book(_h_D2_x ,4,1,2);
30 book(_h_D1_alpha ,3,1,1);
31 book(_h_D2_alpha ,3,1,2);
32 }
33
34 /// Recursively walk the decay tree to find decay products of @a p
35 void findDecayProducts(Particle mother, Particles & dstar, Particles & d0, Particles & pi,unsigned int & ncount) {
36 for (const Particle & p: mother.children()) {
37 if(p.abspid()==413)
38 dstar.push_back(p);
39 else if(p.abspid()==421)
40 d0.push_back(p);
41 else if(p.abspid()==211)
42 pi.push_back(p);
43 ncount +=1;
44 }
45 }
46
47
48 /// Perform the per-event analysis
49 void analyze(const Event& event) {
50 for(const Particle& p : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==425 || Cuts::abspid==10423)) {
51 const double xp = 2.*p.p3().mod()/sqrtS();
52 // spectra
53 if(p.abspid()==425)
54 _h_D2_x->fill(xp);
55 else
56 _h_D1_x->fill(xp);
57 // decay products
58 // first od D_1,D_2
59 Particles dstar,d0,pi;
60 unsigned int ncount=0;
61 findDecayProducts(p,dstar,d0, pi,ncount);
62 if(ncount!=2 || dstar.size()!=1 || pi.size()!=1 || d0.size()!=0 ) continue;
63 if(dstar[0].pid()/p.pid()<0) continue;
64 if(p.abspid()==425)
65 _h_D2_rate->fill(10);
66 else
67 _h_D1_rate->fill(10);
68 Particle p2 = dstar[0];
69 LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(p2.momentum().betaVec());
70 Vector3 d1 = boost.transform(pi[0].momentum()).p3().unit();
71 // then of D*
72 ncount=0;
73 dstar.clear();
74 d0.clear();
75 pi.clear();
76 findDecayProducts(p2,dstar,d0, pi,ncount);
77 if(ncount!=2 || dstar.size()!=0 || pi.size()!=1 || d0.size()!=1 ) continue;
78 if(pi[0].pid()/p2.pid()<0) continue;
79 Vector3 d2 = boost.transform(pi[0].momentum()).p3().unit();
80 double cosAlpha = abs(d1.dot(d2));
81 // decay angles
82 if(p.abspid()==425)
83 _h_D2_alpha->fill(cosAlpha);
84 else
85 _h_D1_alpha->fill(cosAlpha);
86 }
87 }
88
89
90 /// Normalise histograms etc., after the run
91 void finalize() {
92
93 normalize(_h_D1_x);
94 normalize(_h_D2_x);
95 normalize(_h_D1_alpha);
96 normalize(_h_D2_alpha);
97 scale(_h_D1_rate,crossSection()/picobarn/sumOfWeights());
98 scale(_h_D2_rate,crossSection()/picobarn/sumOfWeights());
99
100 }
101
102 /// @}
103
104
105 /// @name Histograms
106 /// @{
107 BinnedHistoPtr<int> _h_D1_rate, _h_D2_rate;
108 Histo1DPtr _h_D1_x, _h_D2_x;
109 Histo1DPtr _h_D1_alpha, _h_D2_alpha;
110 const int Ecms = 10;
111 /// @}
112
113
114 };
115
116
117 RIVET_DECLARE_PLUGIN(ARGUS_1989_I280943);
118
119
120}
|