Rivet analyses referenceHYPERCP_2005_I677384Measurement of asymmetry in $\Omega^-\to\Lambda^0K^-$Experiment: HyperCP () Inspire ID: 677384 Status: VALIDATED Authors:
Beam energies: ANY Run details:
The Hyper CP experiment measured the asymmetry parameter in the decay $\Omega^-\to\Lambda^0K^-$, 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: HYPERCP_2005_I677384.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4
5namespace Rivet {
6
7
8 /// @brief Asymmetry in Omega-> Lambda K
9 class HYPERCP_2005_I677384 : public Analysis {
10 public:
11
12 /// Constructor
13 RIVET_DEFAULT_ANALYSIS_CTOR(HYPERCP_2005_I677384);
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_cthetaP , "cthetaP" ,20,-1,1);
27 book(_h_cthetaM , "cthetaM" ,20,-1,1);
28 book(_h_cthetaAll, "cthetaAll",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 Lambda,kaon;
40 if(Omega.children()[0].pid()==sign*3122 &&
41 Omega.children()[1].pid()==-sign*321) {
42 Lambda = Omega.children()[0];
43 kaon = Omega.children()[1];
44 }
45 else if(Omega.children()[1].pid()==sign*3122 &&
46 Omega.children()[0].pid()==-sign*321) {
47 Lambda = Omega.children()[1];
48 kaon = Omega.children()[0];
49 }
50 else
51 continue;
52 if(Lambda.children().size()!=2) continue;
53 Particle proton,pion;
54 if(Lambda.children()[0].pid()==sign*2212 &&
55 Lambda.children()[1].pid()==-sign*211) {
56 proton = Lambda.children()[0];
57 pion = Lambda.children()[1];
58 }
59 else if(Lambda.children()[1].pid()==sign*2212 &&
60 Lambda.children()[0].pid()==-sign*211) {
61 proton = Lambda.children()[1];
62 pion = Lambda.children()[0];
63 }
64 else
65 continue;
66 // first boost to the Omega rest frame
67 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Omega.momentum().betaVec());
68 FourMomentum pLambda = boost1.transform(Lambda.momentum());
69 FourMomentum pproton = boost1.transform(proton.momentum());
70 // to lambda rest frame
71 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pLambda.betaVec());
72 Vector3 axis = pLambda.p3().unit();
73 FourMomentum pp = boost2.transform(pproton);
74 // calculate angle
75 double cTheta = pp.p3().unit().dot(axis);
76 _h_cthetaAll->fill(cTheta,1.);
77 if(sign==1) {
78 _h_cthetaM->fill(cTheta,1.);
79 }
80 else {
81 _h_cthetaP->fill(cTheta,1.);
82 }
83 }
84 }
85
86 pair<double,double> calcAlpha(Histo1DPtr hist) {
87 if(hist->numEntries()==0.) return make_pair(0.,0.);
88 double sum1(0.),sum2(0.);
89 for (const auto& bin : hist->bins() ) {
90 double Oi = bin.sumW();
91 if(Oi==0.) continue;
92 double ai = 0.5*(bin.xMax()-bin.xMin());
93 double bi = 0.5*ai*(bin.xMax()+bin.xMin());
94 double Ei = bin.errW();
95 sum1 += sqr(bi/Ei);
96 sum2 += bi/sqr(Ei)*(Oi-ai);
97 }
98 return make_pair(sum2/sum1,sqrt(1./sum1));
99 }
100
101 /// Normalise histograms etc., after the run
102 void finalize() {
103 normalize(_h_cthetaP );
104 normalize(_h_cthetaM );
105 normalize(_h_cthetaAll);
106 // calculate the values of alpha
107 Estimate0DPtr _h_alphaP;
108 book(_h_alphaP,1,1,1);
109 pair<double,double> alpha = calcAlpha(_h_cthetaP);
110 _h_alphaP->set(alpha.first, alpha.second);
111 Estimate0DPtr _h_alphaM;
112 book(_h_alphaM,1,1,2);
113 alpha = calcAlpha(_h_cthetaM);
114 _h_alphaM->set(alpha.first, alpha.second);
115 Estimate0DPtr _h_alphaAll;
116 book(_h_alphaAll,1,1,3);
117 alpha = calcAlpha(_h_cthetaAll);
118 _h_alphaAll->set(alpha.first, alpha.second);
119 }
120
121 /// @}
122
123
124 /// @name Histograms
125 /// @{
126 Histo1DPtr _h_cthetaP,_h_cthetaM,_h_cthetaAll;
127 /// @}
128
129
130 };
131
132
133 RIVET_DECLARE_PLUGIN(HYPERCP_2005_I677384);
134
135}
|