rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

WA46_1984_I206647

Measurement of asymmetry in $\Omega^-$ decays
Experiment: WA46 ()
Inspire ID: 206647
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Nucl.Phys. B241 (1984) 1-47
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Omega baryons

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}