Rivet analyses referenceCLEOII_1993_I352823Spectrum for $D^+_{s1}(2536)$ production at 10.58 GeVExperiment: CLEOII (CESR) Inspire ID: 352823 Status: VALIDATED Authors:
Beam energies: (5.3, 5.3) GeV Run details:
Spectrum for $D^+_{s1}(2536)$ production at 10.58 GeV measured by CLEOII. Source code: CLEOII_1993_I352823.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 Spectrum for D_s1
10 class CLEOII_1993_I352823 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_1993_I352823);
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_x ,3,1,1);
27 book(_h_cTheta,4,1,1);
28 book(_r[0],2,1,1);
29 book(_r[1],2,1,2);
30 }
31
32 bool isK0(int id) {
33 return id==310 || id==130 || abs(id)==311;
34 }
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 static const int DsID = 10433;
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 double Pmax = sqrt(sqr(Emax)-sqr(2.535));
43 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
44 for (const Particle& p : ufs.particles(Cuts::abspid==DsID)) {
45 // spectrum
46 double xp = p.momentum().p3().mod()/Pmax;
47 _h_x->fill(xp);
48 // decay angle
49 int sign = p.pid()/DsID;
50 Particle Dstar;
51 if(p.children().size()!=2) continue;
52 if(p.children()[0].pid()==sign*423 &&
53 p.children()[1].pid()==sign*321) {
54 Dstar = p.children()[0];
55 }
56 else if(p.children()[1].pid()==sign*423 &&
57 p.children()[0].pid()==sign*321) {
58 Dstar = p.children()[1];
59 }
60 else if(p.children()[0].pid()==sign*413 &&
61 isK0(p.children()[1].pid())) {
62 _r[1]->fill(">= 0.0"s);
63 continue;
64 }
65 else if(p.children()[1].pid()==sign*413 &&
66 isK0(p.children()[0].pid())) {
67 _r[1]->fill(">= 0.0"s);
68 continue;
69 }
70 else {
71 continue;
72 }
73 _r[0]->fill(">= 0.0"s);
74 if(Dstar.children().size()!=2) continue;
75 Particle pion;
76 if(Dstar.children()[0].pid()== 111 &&
77 Dstar.children()[1].pid()== sign*421) {
78 pion = Dstar.children()[0];
79 }
80 else if(Dstar.children()[1].pid()== 111 &&
81 Dstar.children()[0].pid()== sign*421) {
82 pion = Dstar.children()[1];
83 }
84 else
85 continue;
86 // first boost to the D_s1 rest frame
87 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
88 FourMomentum pDstar = boost1.transform(Dstar.momentum());
89 FourMomentum pPion = boost1.transform(pion .momentum());
90 // to D* rest frame
91 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
92 Vector3 axis = pDstar.p3().unit();
93 FourMomentum pp = boost2.transform(pPion);
94 // calculate angle
95 double cTheta = pp.p3().unit().dot(axis);
96 _h_cTheta->fill(cTheta);
97 }
98 }
99
100
101 /// Normalise histograms etc., after the run
102 void finalize() {
103 normalize(_h_x );
104 normalize(_h_cTheta);
105 scale(_r[0],crossSection()/sumOfWeights()/picobarn);
106 scale(_r[1],crossSection()/sumOfWeights()/picobarn);
107 }
108
109 /// @}
110
111
112 /// @name Histograms
113 /// @{
114 Histo1DPtr _h_x,_h_cTheta;
115 BinnedHistoPtr<string> _r[2];
116 /// @}
117
118
119 };
120
121
122 RIVET_DECLARE_PLUGIN(CLEOII_1993_I352823);
123
124}
|