Rivet analyses referenceCLEOII_1994_I378319Spectra for $D_1(2420)^+$ and $D_2^*(2460)^+$Experiment: CLEOII (CESR) Inspire ID: 378319 Status: VALIDATED Authors:
Beam energies: (5.3, 5.3) GeV
Measurement of the scaled momentum spectra for $D_1(2420)^+$ and $D^*_2(2460)^+$ mesons at 10.58 GeV. Source code: CLEOII_1994_I378319.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief D_1+ and D_2 spectra
10 class CLEOII_1994_I378319 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_1994_I378319);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 declare(Beam(), "Beams");
24 declare(UnstableParticles(), "UFS");
25 // book histos
26 book(_h_D2_cTheta,2,1,1);
27 book(_h_D2_x ,4,1,1);
28 book(_h_D1_cTheta,3,1,1);
29 book(_h_D1_x ,4,1,2);
30 for(unsigned int ix=0;ix<3;++ix)
31 book(_r[ix],5,1,ix+1);
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 static const int idD1 = 10413;
38 static const int idD2 = 415;
39 // Get beams and average beam momentum
40 const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
41 const double Emax = ( beams.first.p3().mod() + beams.second.p3().mod() ) / 2.0;
42 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
43 for (const Particle& p : ufs.particles(Cuts::abspid==idD1 or Cuts::abspid==idD2)) {
44 if(p.abspid()==idD1) {
45 // spectrum
46 double Pmax = sqrt(sqr(Emax)-sqr(2.421));
47 double xp = p.momentum().p3().mod()/Pmax;
48 _h_D1_x->fill(xp);
49 }
50 else {
51 double Pmax = sqrt(sqr(Emax)-sqr(2.461));
52 double xp = p.momentum().p3().mod()/Pmax;
53 _h_D2_x->fill(xp);
54 }
55 int sign = p.pid()/p.abspid();
56 Particle Dstar;
57 if(p.children().size()!=2) continue;
58 if(p.children()[0].pid()==sign*423 &&
59 p.children()[1].pid()==sign*211) {
60 Dstar = p.children()[0];
61 }
62 else if(p.children()[1].pid()==sign*423 &&
63 p.children()[0].pid()==sign*211) {
64 Dstar = p.children()[1];
65 }
66 else if(p.children()[0].pid()==sign*421 &&
67 p.children()[1].pid()==sign*211) {
68 if(p.abspid()!=idD1) _r[0]->fill("10.58"s);
69 continue;
70 }
71 else if(p.children()[1].pid()==sign*421 &&
72 p.children()[0].pid()==sign*211) {
73 if(p.abspid()!=idD1) _r[0]->fill("10.58"s);
74 continue;
75 }
76 else {
77 continue;
78 }
79 if(p.abspid()==idD1)
80 _r[2]->fill("10.58"s);
81 else
82 _r[1]->fill("10.58"s);
83 if(Dstar.children().size()!=2) continue;
84 Particle pion;
85 if(Dstar.children()[0].pid()== 111 &&
86 Dstar.children()[1].pid()== sign*421) {
87 pion = Dstar.children()[0];
88 }
89 else if(Dstar.children()[1].pid()== 111 &&
90 Dstar.children()[0].pid()== sign*421) {
91 pion = Dstar.children()[1];
92 }
93 else
94 continue;
95 // first boost to the D_1,2 rest frame
96 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
97 FourMomentum pDstar = boost1.transform(Dstar.momentum());
98 FourMomentum pPion = boost1.transform(pion .momentum());
99 // to D* rest frame
100 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
101 Vector3 axis = pDstar.p3().unit();
102 FourMomentum pp = boost2.transform(pPion);
103 // calculate angle
104 double cTheta = pp.p3().unit().dot(axis);
105 if(p.abspid()==idD1)
106 _h_D1_cTheta->fill(cTheta);
107 else
108 _h_D2_cTheta->fill(cTheta);
109 }
110 }
111
112 /// Normalise histograms etc., after the run
113 void finalize() {
114 normalize(_h_D2_cTheta);
115 normalize(_h_D2_x );
116 normalize(_h_D1_cTheta);
117 normalize(_h_D1_x );
118 for(unsigned int ix=0;ix<3;++ix)
119 scale(_r[ix],crossSection()/sumOfWeights()/picobarn);
120 }
121
122 /// @}
123
124
125 /// @name Histograms
126 /// @{
127 Histo1DPtr _h_D2_cTheta,_h_D2_x,_h_D1_cTheta,_h_D1_x;
128 BinnedHistoPtr<string> _r[3];
129 /// @}
130
131
132 };
133
134
135 RIVET_DECLARE_PLUGIN(CLEOII_1994_I378319);
136
137}
|