rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

HYPERCP_2005_I677384

Measurement of asymmetry in $\Omega^-\to\Lambda^0K^-$
Experiment: HYPERCP ()
Inspire ID: 677384
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D71 (2005) 051102
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Omega baryons

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      Estimate1DPtr _h_alphaP;
108      book(_h_alphaP,1,1,1);
109      pair<double,double> alpha = calcAlpha(_h_cthetaP);
110      _h_alphaP->bin(1).set(alpha.first, alpha.second);
111      Estimate1DPtr _h_alphaM;
112      book(_h_alphaM,1,1,2);
113      alpha = calcAlpha(_h_cthetaM);
114      _h_alphaM->bin(1).set(alpha.first, alpha.second);
115      Estimate1DPtr _h_alphaAll;
116      book(_h_alphaAll,1,1,3);
117      alpha = calcAlpha(_h_cthetaAll);
118      _h_alphaAll->bin(1).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}