Rivet analyses referenceBABAR_2011_I892421Decay angles in $D_{s1}(2536)^+\to D^{*+}K^0$Experiment: BABAR (PEP-II) Inspire ID: 892421 Status: VALIDATED Authors:
Beam energies: (5.3, 5.3) GeV Run details:
Measurement of decay angles in the decay $D_{s1}(2536)^+\to D^{*+}K^0$ by BaBar. Source code: BABAR_2011_I892421.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief D_s1 decay angles
9 class BABAR_2011_I892421 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2011_I892421);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // projections
22 declare(UnstableParticles(), "UFS");
23 // book histos
24 book(_h_cP,1,1,1);
25 book(_h_c ,2,1,1);
26 }
27
28 bool isK0(int id) {
29 return id==310 || id==130 || abs(id)==311;
30 }
31
32 /// Perform the per-event analysis
33 void analyze(const Event& event) {
34 static const int DsID = 10433;
35 const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
36 for (const Particle& p : ufs.particles(Cuts::abspid==DsID)) {
37 // decay angle
38 int sign = p.pid()/DsID;
39 Particle Dstar;
40 if(p.children().size()!=2) continue;
41 if(p.children()[0].pid()==sign*413 &&
42 isK0(p.children()[1].pid())) {
43 Dstar = p.children()[0];
44 }
45 else if(p.children()[1].pid()==sign*413 &&
46 isK0(p.children()[0].pid())) {
47 Dstar = p.children()[1];
48 }
49 else {
50 continue;
51 }
52 // first boost to the D_s1 rest frame
53 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
54 FourMomentum pDstar = boost1.transform(Dstar.momentum());
55 double cTheta = pDstar.p3().unit().dot(p.momentum().p3().unit());
56 _h_c->fill(cTheta);
57 if(Dstar.children().size()!=2) continue;
58 Particle D0;
59 if(Dstar.children()[0].pid()== sign*211 &&
60 Dstar.children()[1].pid()== sign*421) {
61 D0 = Dstar.children()[1];
62 }
63 else if(Dstar.children()[1].pid()== sign*211 &&
64 Dstar.children()[0].pid()== sign*421) {
65 D0 = Dstar.children()[0];
66 }
67 else
68 continue;
69 // boost to D_s frame
70 FourMomentum pD = boost1.transform(D0.momentum());
71 // to D* rest frame
72 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pDstar.betaVec());
73 Vector3 axis = pDstar.p3().unit();
74 FourMomentum pp = boost2.transform(pD);
75 // calculate angle
76 double cThetap = pp.p3().unit().dot(axis);
77 _h_cP->fill(cThetap);
78 }
79 }
80
81
82 /// Normalise histograms etc., after the run
83 void finalize() {
84 normalize(_h_cP);
85 normalize(_h_c );
86 }
87
88 /// @}
89
90
91 /// @name Histograms
92 /// @{
93 Histo1DPtr _h_cP,_h_c;
94 /// @}
95
96
97 };
98
99
100 RIVET_DECLARE_PLUGIN(BABAR_2011_I892421);
101
102}
|