rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

E756_2000_I530367

Measurement of the asymmetry in $\Xi^-\to\Lambda^0\pi^-$
Experiment: E756 ()
Inspire ID: 530367
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 85 (2000) 4860-4863
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Xi- baryons

The Hyper CP experiment measured the asymmetry parameter in the decay $\Xi^-\to\Lambda^0\pi^-$ and the charge conjugate mode, 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: E756_2000_I530367.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Xi-> Lambda pi asymmetry
  9  class E756_2000_I530367 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(E756_2000_I530367);
 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
 29    }
 30
 31
 32    /// Perform the per-event analysis
 33    void analyze(const Event& event) {
 34      // loop over Xi- baryons
 35      for (const Particle& Xi : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==3312)) {
 36        int sign = Xi.pid()/3312;
 37        if(Xi.children().size()!=2) continue;
 38        Particle Lambda;
 39        if(Xi.children()[0].pid()==sign*3122 &&
 40           Xi.children()[1].pid()==-sign*211) {
 41          Lambda = Xi.children()[0];
 42        }
 43        else if(Xi.children()[1].pid()==sign*3122 &&
 44          Xi.children()[0].pid()==-sign*211) {
 45          Lambda = Xi.children()[1];
 46        }
 47        else
 48          continue;
 49        if(Lambda.children().size()!=2) continue;
 50        Particle proton;
 51        if(Lambda.children()[0].pid()==sign*2212 &&
 52          Lambda.children()[1].pid()==-sign*211) {
 53          proton = Lambda.children()[0];
 54        }
 55        else if(Lambda.children()[1].pid()==sign*2212 &&
 56          Lambda.children()[0].pid()==-sign*211) {
 57          proton = Lambda.children()[1];
 58        }
 59        else
 60          continue;
 61        // boost to xi rest frame first
 62        LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Xi.momentum().betaVec());
 63        FourMomentum pLambda = boost1.transform(Lambda.momentum());
 64        FourMomentum pproton = boost1.transform(proton.momentum());
 65        // to lambda rest frame
 66        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pLambda.betaVec());
 67        Vector3 axis = pLambda.p3().unit();
 68        FourMomentum pp = boost2.transform(pproton);
 69        // calculate angle
 70        double cTheta = pp.p3().unit().dot(axis);
 71        if(sign==1) {
 72          _h_cthetaM->fill(cTheta);
 73        }
 74        else {
 75          _h_cthetaP->fill(cTheta);
 76        }
 77      }
 78    }
 79
 80    pair<double,double> calcAlpha(Histo1DPtr hist) {
 81      if(hist->numEntries()==0.) return make_pair(0.,0.);
 82      double sum1(0.),sum2(0.);
 83      for (const auto& bin : hist->bins() ) {
 84        double Oi = bin.sumW();
 85        if(Oi==0.) continue;
 86        double ai = 0.5*(bin.xMax()-bin.xMin());
 87        double bi = 0.5*ai*(bin.xMax()+bin.xMin());
 88        double Ei = bin.errW();
 89        sum1 += sqr(bi/Ei);
 90        sum2 += bi/sqr(Ei)*(Oi-ai);
 91      }
 92      return make_pair(sum2/sum1,sqrt(1./sum1));
 93    }
 94
 95    /// Normalise histograms etc., after the run
 96    void finalize() {
 97      normalize(_h_cthetaP);
 98      normalize(_h_cthetaM);
 99      // calculate the values of alpha
100      // xibar+
101      Estimate1DPtr _h_alphaP;
102      book(_h_alphaP, 1,1,2);
103      pair<double,double> alpha = calcAlpha(_h_cthetaP);
104      _h_alphaP->bin(1).set(alpha.first, alpha.second);
105      // xi-
106      Estimate1DPtr _h_alphaM;
107      book(_h_alphaM, 1,1,1);
108      alpha = calcAlpha(_h_cthetaM);
109      _h_alphaM->bin(1).set(alpha.first, alpha.second);
110    }
111
112    /// @}
113
114
115    /// @name Histograms
116    /// @{
117    Histo1DPtr _h_cthetaP,_h_cthetaM;
118    /// @}
119
120
121  };
122
123
124  RIVET_DECLARE_PLUGIN(E756_2000_I530367);
125
126
127}