Rivet analyses referenceBELLE_2021_I1851126Decay asymmetries in $\Xi^0_c\to\Xi^-\pi^+$Experiment: BELLE (KEKB) Inspire ID: 1851126 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the decay asymmetries in $\Xi^0_c\to\Xi^-\pi^+$ by the BELLE experiment. The asymmetry parameter is extracted by fitting to normalised angular distribution. This analysis is useful for testing spin correlations in hadron decays. Source code: BELLE_2021_I1851126.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Xi_c0 -> Xi-pi+ asymmetry
9 class BELLE_2021_I1851126 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2021_I1851126);
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(Cuts::abspid==4132), "UFS" );
23 // Book histograms
24 book(_h_c_P,1,1,1);
25 book(_h_c_M,1,1,2);
26 }
27
28
29 /// Perform the per-event analysis
30 void analyze(const Event& event) {
31 // loop over Xi_c0 baryons
32 for( const Particle& Xic : apply<UnstableParticles>(event, "UFS").particles()) {
33 int sign = Xic.pid()/4132;
34 if(Xic.children().size()!=2) continue;
35 Particle baryon1,meson1;
36 if(Xic.children()[0].pid()==sign*3312 &&
37 Xic.children()[1].pid()==sign*211) {
38 baryon1 = Xic.children()[0];
39 meson1 = Xic.children()[1];
40 }
41 else if(Xic.children()[1].pid()==sign*3312 &&
42 Xic.children()[0].pid()==sign*211) {
43 baryon1 = Xic.children()[1];
44 meson1 = Xic.children()[0];
45 }
46 else
47 continue;
48 Particle baryon2,meson2;
49 if(baryon1.children()[0].pid()== sign*3122 &&
50 baryon1.children()[1].pid()==-sign*211) {
51 baryon2 = baryon1.children()[0];
52 meson2 = baryon1.children()[1];
53 }
54 else if(baryon1.children()[1].pid()== sign*3122 &&
55 baryon1.children()[0].pid()==-sign*211) {
56 baryon2 = baryon1.children()[1];
57 meson2 = baryon1.children()[0];
58 }
59 else
60 continue;
61 // first boost to the Xic rest frame
62 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Xic.momentum().betaVec());
63 FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
64 FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
65 // to lambda rest frame
66 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
67 Vector3 axis = pbaryon1.p3().unit();
68 FourMomentum pp = boost2.transform(pbaryon2);
69 // calculate angle
70 double cTheta = pp.p3().unit().dot(axis);
71 if(sign>0)
72 _h_c_P->fill(cTheta,1.);
73 else
74 _h_c_M->fill(cTheta,1.);
75 }
76 }
77
78 pair<double,double> calcAlpha(Histo1DPtr hist) {
79 if(hist->numEntries()==0.) return make_pair(0.,0.);
80 double sum1(0.),sum2(0.);
81 for (const auto& bin : hist->bins() ) {
82 double Oi = bin.sumW();
83 if(Oi==0.) continue;
84 double ai = 0.5*(bin.xMax()-bin.xMin());
85 double bi = 0.5*ai*(bin.xMax()+bin.xMin());
86 double Ei = bin.errW();
87 sum1 += sqr(bi/Ei);
88 sum2 += bi/sqr(Ei)*(Oi-ai);
89 }
90 return make_pair(sum2/sum1,sqrt(1./sum1));
91 }
92
93 /// Normalise histograms etc., after the run
94 void finalize() {
95 // first mode
96 normalize(_h_c_P);
97 Estimate0DPtr _h_alpha_P;
98 book(_h_alpha_P,2,1,1);
99 pair<double,double> alphaP = calcAlpha(_h_c_P);
100 alphaP.first /= -0.401;
101 alphaP.second/= -0.401;
102 _h_alpha_P->set(alphaP.first, alphaP.second);
103 // second mode
104 normalize(_h_c_M);
105 Estimate0DPtr _h_alpha_M;
106 book(_h_alpha_M,2,1,2);
107 pair<double,double> alphaM = calcAlpha(_h_c_M);
108 alphaM.first /= 0.389;
109 alphaM.second/= 0.389;
110 _h_alpha_M->set(alphaM.first, alphaM.second);
111 // average
112 double aver = 0.5*(-alphaP.first+alphaM.first);
113 double err = 0.5*sqrt(sqr(alphaP.second)+sqr(alphaM.second));
114 Estimate0DPtr _h_alpha_aver;
115 book(_h_alpha_aver,2,1,3);
116 _h_alpha_aver->set(aver, err);
117 // asymetry
118 double asym = (alphaP.first+alphaM.first)/(alphaP.first-alphaM.first);
119 err = 2./sqr(alphaP.first-alphaM.first)*sqrt(sqr(alphaM.first *alphaP.second)+
120 sqr(alphaM.second*alphaP.first ));
121 Estimate0DPtr _h_alpha_asym;
122 book(_h_alpha_asym,2,1,4);
123 _h_alpha_asym->set(asym, err);
124 }
125
126 ///@}
127
128
129 /// @name Histograms
130 ///@{
131 Histo1DPtr _h_c_M,_h_c_P;
132 ///@}
133
134
135 };
136
137
138 RIVET_DECLARE_PLUGIN(BELLE_2021_I1851126);
139
140}
|