rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEO_1995_I392704

Decay asymmetries in $\Lambda^+_c\to\Lambda^0\pi^+$ and $\Lambda^+_c\to\Sigma^+\pi^0$
Experiment: CLEO (CESR)
Inspire ID: 392704
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B350 (1995) 256-262
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Lambda_c baryons

Measurement of the decay asymmetries in $\Lambda^+_c\to\Lambda^0\pi^+$ and $\Lambda^+_c\to\Sigma^+\pi^0$ by the CLEO experiment. The asymmetry parameter is extracted by fitting to normalised angular distribution. N.B. the product of the asymmetry parameters for the $\Lambda_c$ and daughter baryon is implemented as this is what is measured, rather than the extracted parameter for the $\Lambda_c$ which relies on other measurements of the parameter for the daughter baryon. This analysis is useful for testing spin correlations in hadron decays.

Source code: CLEO_1995_I392704.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Lambda_c -> Lambda pi and Lambda_c _> Sigma+ pi0 asymmetries
  9  class CLEO_1995_I392704 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_1995_I392704);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // Initialise and register projections
 22      declare(UnstableParticles(), "UFS" );
 23
 24      // Book histograms
 25      book(_h_Lambda, 1,1,1);
 26      book(_h_Sigma , 2,1,1);
 27    }
 28
 29
 30    /// Perform the per-event analysis
 31    void analyze(const Event& event) {
 32      // loop over Lambda_c baryons
 33      for( const Particle& Lambdac : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==4122)) {
 34	int sign = Lambdac.pid()/4122;
 35	if(Lambdac.children().size()!=2) continue;
 36	Particle baryon1;
 37	bool lambda=true;
 38	if(Lambdac.children()[0].pid()==sign*3122 &&
 39	   Lambdac.children()[1].pid()==sign*211) {
 40	  baryon1 = Lambdac.children()[0];
 41	}
 42	else if(Lambdac.children()[1].pid()==sign*3122 &&
 43		Lambdac.children()[0].pid()==sign*211) {
 44	  baryon1 = Lambdac.children()[1];
 45	}
 46	else if(Lambdac.children()[0].pid()==sign*3222 &&
 47		Lambdac.children()[1].pid()==111) {
 48	  baryon1 = Lambdac.children()[0];
 49	  lambda=false;
 50	}
 51	else if(Lambdac.children()[1].pid()==sign*3222 &&
 52		Lambdac.children()[0].pid()==111) {
 53	  baryon1 = Lambdac.children()[0];
 54	  lambda=false;
 55	}
 56	else
 57	  continue;
 58	int idMeson = lambda ? -sign*211 : 111;
 59	Particle baryon2;
 60	if(baryon1.children()[0].pid()== sign*2212 &&
 61	   baryon1.children()[1].pid()== idMeson) {
 62	  baryon2 = baryon1.children()[0];
 63	}
 64	else if(baryon1.children()[1].pid()== sign*2212 &&
 65		baryon1.children()[0].pid()== idMeson) {
 66	  baryon2 = baryon1.children()[1];
 67	}
 68	else
 69	  continue;
 70	// first boost to the Lambdac rest frame
 71	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Lambdac.momentum().betaVec());
 72	FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
 73	FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
 74	// to lambda rest frame
 75	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
 76	Vector3 axis = pbaryon1.p3().unit();
 77	FourMomentum pp = boost2.transform(pbaryon2);
 78	// calculate angle
 79	double cTheta = pp.p3().unit().dot(axis);
 80	if(lambda)
 81	  _h_Lambda->fill(cTheta);
 82	else
 83	  _h_Sigma->fill(cTheta);
 84      }
 85    }
 86
 87    pair<double,double> calcAlpha(Histo1DPtr hist) {
 88      if(hist->numEntries()==0.) return make_pair(0.,0.);
 89      double sum1(0.),sum2(0.);
 90      for (const auto& bin : hist->bins() ) {
 91        double Oi = bin.sumW();
 92        if(Oi==0.) continue;
 93        double ai = 0.5*(bin.xMax()-bin.xMin());
 94        double bi = 0.5*ai*(bin.xMax()+bin.xMin());
 95        double Ei = bin.errW();
 96        sum1 += sqr(bi/Ei);
 97        sum2 += bi/sqr(Ei)*(Oi-ai);
 98      }
 99      return make_pair(sum2/sum1,sqrt(1./sum1));
100    }
101
102    /// Normalise histograms etc., after the run
103    void finalize() {
104      // Lambda_c -> Lambda pi+
105      normalize(_h_Lambda);
106      Estimate0DPtr _h_alpha1;
107      book(_h_alpha1,3,1,1);
108      pair<double,double> alpha = calcAlpha(_h_Lambda);
109      _h_alpha1->set(alpha.first, alpha.second);
110      // Lambda_c -> Sigma+ pi0
111      normalize(_h_Sigma);
112      Estimate0DPtr _h_alpha2;
113      book(_h_alpha2,4,1,1);
114      alpha = calcAlpha(_h_Sigma);
115      _h_alpha2->set(alpha.first, alpha.second);
116    }
117
118    /// @}
119
120
121    /// @name Histograms
122    /// @{
123    Histo1DPtr _h_Lambda, _h_Sigma;
124    /// @}
125
126
127  };
128
129
130  RIVET_DECLARE_PLUGIN(CLEO_1995_I392704);
131
132}