Rivet analyses referenceCLEOII_1994_I372349Spectra for D1(2420)0 and D∗2(2460)0Experiment: CLEOII (CESR) Inspire ID: 372349 Status: VALIDATED Authors:
Beam energies: (5.3, 5.3) GeV
Measurement of the scaled momentum spectra for D1(2420)0 and D∗2(2460)0 mesons at 10.58 GeV. Source code: CLEOII_1994_I372349.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_10 and D_20 spectra
10 class CLEOII_1994_I372349 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_1994_I372349);
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 ,1,1,1);
28 book(_h_D1_cTheta,2,1,2);
29 book(_h_D1_x ,1,1,2);
30 for(unsigned int ix=0;ix<3;++ix)
31 book(_r[ix],3,1,ix+1);
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 static const int idD1 = 10423;
38 static const int idD2 = 425;
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
59 if(p.children()[0].pid()==sign*413 &&
60 p.children()[1].pid()==-sign*211) {
61 Dstar = p.children()[0];
62 }
63 else if(p.children()[1].pid()==sign*413 &&
64 p.children()[0].pid()==-sign*211) {
65 Dstar = p.children()[1];
66 }
67 else if(p.children()[0].pid()==sign*411 &&
68 p.children()[1].pid()==-sign*211) {
69 if(p.abspid()!=idD1) _r[0]->fill("10.58"s);
70 continue;
71 }
72 else if(p.children()[1].pid()==sign*411 &&
73 p.children()[0].pid()==-sign*211) {
74 if(p.abspid()!=idD1) _r[0]->fill("10.58"s);
75 continue;
76 }
77 else {
78 continue;
79 }
80 if(p.abspid()==idD1)
81 _r[2]->fill("10.58"s);
82 else
83 _r[1]->fill("10.58"s);
84 if(Dstar.children().size()!=2) continue;
85 Particle pion;
86 if(Dstar.children()[0].pid()== sign*211 &&
87 Dstar.children()[1].pid()== sign*421) {
88 pion = Dstar.children()[0];
89 }
90 else if(Dstar.children()[1].pid()== sign*211 &&
91 Dstar.children()[0].pid()== sign*421) {
92 pion = Dstar.children()[1];
93 }
94 else
95 continue;
96 // first boost to the D_1,2 rest frame
97 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
98 FourMomentum pDstar = boost1.transform(Dstar.momentum());
99 FourMomentum pPion = boost1.transform(pion .momentum());
100 // to D* rest frame
101 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
102 Vector3 axis = pDstar.p3().unit();
103 FourMomentum pp = boost2.transform(pPion);
104 // calculate angle
105 double cTheta = pp.p3().unit().dot(axis);
106 if(p.abspid()==idD1)
107 _h_D1_cTheta->fill(cTheta);
108 else
109 _h_D2_cTheta->fill(cTheta);
110 }
111 }
112
113 /// Normalise histograms etc., after the run
114 void finalize() {
115 normalize(_h_D2_cTheta);
116 normalize(_h_D2_x );
117 normalize(_h_D1_cTheta);
118 normalize(_h_D1_x );
119 for(unsigned int ix=0;ix<3;++ix)
120 scale(_r[ix],crossSection()/sumOfWeights()/picobarn);
121 }
122
123 /// @}
124
125
126 /// @name Histograms
127 /// @{
128 Histo1DPtr _h_D2_cTheta,_h_D2_x,_h_D1_cTheta,_h_D1_x;
129 BinnedHistoPtr<string> _r[3];
130 /// @}
131
132
133 };
134
135
136 RIVET_DECLARE_PLUGIN(CLEOII_1994_I372349);
137
138}
|