Rivet analyses referenceBELLE_2021_I1859517Decay asymmetries in $\Xi^0_c\to\Lambda^0\bar{K}^{*0}$, $\Sigma^0\bar{K}^{*0}$ and $\Sigma^+\bar{K}^{*-}$Experiment: BELLE (KEKB) Inspire ID: 1859517 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the decay asymmetries in $\Xi^0_c\to\Lambda^0\bar{K}^{*0}$, $\Sigma^0\bar{K}^{*0}$ and $\Sigma^+\bar{K}^{*-}$ decays by the BELLE experiment. Source code: BELLE_2021_I1859517.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Xi_c0 decay asymmetries
9 class BELLE_2021_I1859517 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2021_I1859517);
14
15
16 /// @name Analysis methods
17 ///@{
18
19 /// Book histograms and initialise projections before the run
20 void init() {
21 // Initialise and register projections
22 declare(UnstableParticles(), "UFS" );
23 // book histograms
24 book(_h_Lambda,1,1,1);
25 book(_h_Sigma0,2,1,1);
26 book(_h_Sigmap,3,1,1);
27 }
28
29
30 /// Perform the per-event analysis
31 void analyze(const Event& event) {
32 // loop over Xi_c0 baryons
33 for( const Particle& Xic : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==4132)) {
34 int sign = Xic.pid()/4132;
35 if(Xic.children().size()!=2) continue;
36 Particle baryon1,meson1;
37 if(Xic.children()[0].pid()==sign*3122 &&
38 Xic.children()[1].pid()==-sign*313) {
39 baryon1 = Xic.children()[0];
40 meson1 = Xic.children()[1];
41 }
42 else if(Xic.children()[1].pid()==sign*3122 &&
43 Xic.children()[0].pid()==-sign*313) {
44 baryon1 = Xic.children()[1];
45 meson1 = Xic.children()[0];
46 }
47 else if(Xic.children()[0].pid()==sign*3212 &&
48 Xic.children()[1].pid()==-sign*313) {
49 baryon1 = Xic.children()[0];
50 meson1 = Xic.children()[1];
51 }
52 else if(Xic.children()[1].pid()==sign*3212 &&
53 Xic.children()[0].pid()==-sign*313) {
54 baryon1 = Xic.children()[1];
55 meson1 = Xic.children()[0];
56 }
57 else if(Xic.children()[0].pid()==sign*3222 &&
58 Xic.children()[1].pid()==-sign*323) {
59 baryon1 = Xic.children()[0];
60 meson1 = Xic.children()[1];
61 }
62 else if(Xic.children()[1].pid()==sign*3222 &&
63 Xic.children()[0].pid()==-sign*323) {
64 baryon1 = Xic.children()[1];
65 meson1 = Xic.children()[0];
66 }
67 else
68 continue;
69 Particle baryon2,meson2;
70 if(baryon1.abspid()==3122) {
71 if(baryon1.children()[0].pid()== sign*2212 &&
72 baryon1.children()[1].pid()==-sign*211) {
73 baryon2 = baryon1.children()[0];
74 meson2 = baryon1.children()[1];
75 }
76 else if(baryon1.children()[1].pid()== sign*2212 &&
77 baryon1.children()[0].pid()==-sign*211) {
78 baryon2 = baryon1.children()[1];
79 meson2 = baryon1.children()[0];
80 }
81 else
82 continue;
83 }
84 else if(baryon1.abspid()==3212) {
85 if(baryon1.children()[0].pid()== sign*3122 &&
86 baryon1.children()[1].pid()==22) {
87 baryon2 = baryon1.children()[0];
88 meson2 = baryon1.children()[1];
89 }
90 else if(baryon1.children()[1].pid()== sign*3122 &&
91 baryon1.children()[0].pid()==22) {
92 baryon2 = baryon1.children()[1];
93 meson2 = baryon1.children()[0];
94 }
95 else
96 continue;
97 }
98 else if(baryon1.abspid()==3222) {
99 if(baryon1.children()[0].pid()== sign*2212 &&
100 baryon1.children()[1].pid()==111) {
101 baryon2 = baryon1.children()[0];
102 meson2 = baryon1.children()[1];
103 }
104 else if(baryon1.children()[1].pid()== sign*2212 &&
105 baryon1.children()[0].pid()==111) {
106 baryon2 = baryon1.children()[1];
107 meson2 = baryon1.children()[0];
108 }
109 else
110 continue;
111 }
112 // first boost to the Xic rest frame
113 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Xic.momentum().betaVec());
114 FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
115 FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
116 // to lambda rest frame
117 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
118 Vector3 axis = pbaryon1.p3().unit();
119 FourMomentum pp = boost2.transform(pbaryon2);
120 // calculate angle
121 double cTheta = pp.p3().unit().dot(axis);
122 if(baryon1.abspid()==3122) {
123 _h_Lambda->fill(cTheta);
124 }
125 else if(baryon1.abspid()==3212) {
126 _h_Sigma0->fill(cTheta);
127 }
128 else if(baryon1.abspid()==3222) {
129 _h_Sigmap->fill(cTheta);
130 }
131 }
132 }
133
134 pair<double,double> calcAlpha(Histo1DPtr hist) {
135 if(hist->numEntries()==0.) return make_pair(0.,0.);
136 double sum1(0.),sum2(0.);
137 for (const auto& bin : hist->bins() ) {
138 double Oi = bin.sumW();
139 if(Oi==0.) continue;
140 double ai = 0.5*(bin.xMax()-bin.xMin());
141 double bi = 0.5*ai*(bin.xMax()+bin.xMin());
142 double Ei = bin.errW();
143 sum1 += sqr(bi/Ei);
144 sum2 += bi/sqr(Ei)*(Oi-ai);
145 }
146 return make_pair(sum2/sum1,sqrt(1./sum1));
147 }
148
149 /// Normalise histograms etc., after the run
150 void finalize() {
151 // Lambda Kbar*0
152 normalize(_h_Lambda);
153 Estimate0DPtr _h_alpha;
154 book(_h_alpha,4,1,1);
155 pair<double,double> alpha = calcAlpha(_h_Lambda);
156 _h_alpha->set(alpha.first, alpha.second);
157 // Sigma0 Kbar*0
158 normalize(_h_Sigma0);
159 book(_h_alpha,4,1,2);
160 alpha = calcAlpha(_h_Sigma0);
161 _h_alpha->set(alpha.first, alpha.second);
162 // Sigma+ K*-
163 normalize(_h_Sigmap);
164 book(_h_alpha,4,1,3);
165 alpha = calcAlpha(_h_Sigmap);
166 _h_alpha->set(alpha.first, alpha.second);
167
168 }
169
170 ///@}
171
172
173 /// @name Histograms
174 ///@{
175 Histo1DPtr _h_Lambda,_h_Sigma0,_h_Sigmap;
176 ///@}
177
178
179 };
180
181
182 RIVET_DECLARE_PLUGIN(BELLE_2021_I1859517);
183
184}
|