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