Rivet analyses referenceBABAR_2008_I758167Helicity angles in $B\to \bar{D} D_{s1}^+(2536)$, $B\to \psi(3770)K$ and $B\to X(3872)K$Experiment: BABAR (PEP-II) Inspire ID: 758167 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of helicity angles in $B\to \bar{D} D_{s1}^+(2536)$, $B\to \psi(3770)K$ and $B\to X(3872)K$ decays using $B\to \bar{D}^{(*)}D^{(*)}K$ modes. The background subtracted, efficiency corrected distributions were read from Figure 1 in the paper. There is no consensus as to the nature of the $X(3872)$ $c\bar{c}$ state and therefore we taken its PDG code to be 9030443, i.e. the first unused code for an undetermined spin one $c\bar{c}$ state. This can be changed using the PID option if a different code is used by the event generator performing the simulation. Source code: BABAR_2008_I758167.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief B -> D(*) D(*) K
9 class BABAR_2008_I758167 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2008_I758167);
14
15
16 /// @name Analysis methods
17 /// @{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // set the PDG code
22 _pid = getOption<int>("PID", 9030443);
23 // Initialise and register projections
24 UnstableParticles ufs = UnstableParticles(Cuts::abspid==511 ||
25 Cuts::abspid==521);
26 declare(ufs, "UFS");
27 // histos
28 for(unsigned int ix=0;ix<3;++ix)
29 book(_h[ix],1,1,1+ix);
30 }
31
32 bool isK(int id) {
33 return id==321 || id==311 || id==310 || id==130;
34 }
35
36 /// Perform the per-event analysis
37 void analyze(const Event& event) {
38 UnstableParticles ufs = apply<UnstableParticles>(event,"UFS");
39 for(const Particle & B : ufs.particles()) {
40 if(B.children().size()!=2) continue;
41 int sign = B.pid()/B.abspid(), iD = B.abspid()-100;
42 unsigned int imode=0;
43 // boost to B rest frame
44 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(B.momentum().betaVec());
45 Particle resonance;
46 if(B.children()[0].pid()== sign*10433 &&
47 B.children()[1].pid()==-sign*iD) {
48 imode=0;
49 resonance=B.children()[0];
50 }
51 else if(B.children()[1].pid()== sign*10433 &&
52 B.children()[0].pid()==-sign*iD) {
53 imode=0;
54 resonance=B.children()[1];
55 }
56 else if(B.children()[0].pid()== 30443 &&
57 isK(B.children()[1].pid())) {
58 imode=1;
59 resonance=B.children()[0];
60 }
61 else if(B.children()[1].pid()== 30443 &&
62 isK(B.children()[0].pid())) {
63 imode=1;
64 resonance=B.children()[1];
65 }
66 else if(B.children()[0].pid()== _pid &&
67 isK(B.children()[1].pid())) {
68 imode=2;
69 resonance=B.children()[0];
70 }
71 else if(B.children()[1].pid()== _pid &&
72 isK(B.children()[0].pid())) {
73 imode=2;
74 resonance=B.children()[1];
75 }
76 else
77 continue;
78 if(resonance.children().size()!=2) continue;
79 FourMomentum pRes = boost1.transform(resonance.momentum());
80 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pRes.betaVec());
81 Vector3 axis1 = -pRes.p3().unit();
82 Particle child;
83 if(imode==0) {
84 Particle Dstar;
85 if(isK(resonance.children()[1].pid()) &&
86 (resonance.children()[0].pid()==sign*413 || resonance.children()[0].pid()==sign*423))
87 child = resonance.children()[0];
88 else if(isK(resonance.children()[0].pid()) &&
89 (resonance.children()[1].pid()==sign*413 || resonance.children()[1].pid()==sign*423))
90 child = resonance.children()[1];
91 else
92 continue;
93 }
94 // B -> D psi(3770)
95 else if(imode==1) {
96 if(resonance.children()[0].pid()!=-resonance.children()[1].pid()) continue;
97 if(resonance.children()[0].abspid()!=411 &&
98 resonance.children()[0].abspid()!=421) continue;
99 child = resonance.children()[0].pid()>0 ? resonance.children()[0] : resonance.children()[1];
100 }
101 else if(imode==2) {
102 if( (resonance.children()[0].abspid()==423 && resonance.children()[1].abspid()==421) ||
103 (resonance.children()[1].abspid()==423 && resonance.children()[0].abspid()==421)) {
104 child = resonance.children()[0].pid()>0 ? resonance.children()[0] : resonance.children()[1];
105 }
106 else continue;
107 }
108 Vector3 axis2 = boost2.transform(boost1.transform(child.momentum())).p3().unit();
109 _h[imode]->fill(axis1.dot(axis2));
110 }
111 }
112
113
114 /// Normalise histograms etc., after the run
115 void finalize() {
116 for(unsigned int ix=0;ix<3;++ix)
117 normalize(_h[ix],1.,false);
118 }
119
120 /// @}
121
122
123 /// @name Histograms
124 /// @{
125 int _pid;
126 Histo1DPtr _h[3];
127 /// @}
128
129
130 };
131
132
133 RIVET_DECLARE_PLUGIN(BABAR_2008_I758167);
134
135}
|