rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOII_1994_I371611

Decay asymmetry in $\Lambda^+_c\to\Lambda^0 e^+ \nu_e$
Experiment: CLEOII (CESR)
Inspire ID: 371611
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B 323 (1994) 219-226
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Lambda_c+, original e+e-

Measurement of the decay asymmetry in $\Lambda^+_c\to\Lambda^0 e^+ \nu_e$ by CLEOII. While this result is superseeded by later CLEO measurements it is one of the few to present the anglular distribution as well as the fitted asymmetry parameter. The product of assymetries $\alpha_{\Lambda_c^+}\alpha_\Lambda$ is extracted as that is what is measured not $\alpha_{\Lambda_c^+}$ and there has been a significant change in $\alpha_\Lambda$ since this paper was published

Source code: CLEOII_1994_I371611.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Lambda_c -> Lambda e+ nu_e asymmetry
  9  class CLEOII_1994_I371611 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOII_1994_I371611);
 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    }
 27
 28    void findChildren(Particle parent, int sign, unsigned int & npart,
 29		      Particles & lambda, Particles & e, Particles & nu) {
 30      for(const Particle & child : parent.children()) {
 31	if(child.pid()==sign*PID::LAMBDA) {
 32	  lambda.push_back(child);
 33	  ++npart;
 34	}
 35	else if(child.pid()==-sign*PID::EMINUS) {
 36	  e.push_back(child);
 37	  ++npart;
 38	}
 39	else if(child.pid()==sign*PID::NU_E) {
 40	  nu.push_back(child);
 41	  ++npart;
 42	}
 43	else if(!child.children().empty()) {
 44	  findChildren(child,sign,npart,lambda,e,nu);
 45	}
 46	else {
 47	  ++npart;
 48	}
 49      }
 50    }
 51
 52    /// Perform the per-event analysis
 53    void analyze(const Event& event) {
 54      // loop over Lambda_c baryons
 55      for( const Particle& Lambdac : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==4122)) {
 56	int sign = Lambdac.pid()/4122;
 57        Particles lambda,e,nu;
 58        unsigned int npart(0);
 59        findChildren(Lambdac,sign,npart,lambda,e,nu);
 60	if(npart!=3 || lambda.size()!=1 || e.size()!=1 || nu.size()!=1) continue;
 61	Particle baryon2;
 62	if(lambda[0].children()[0].pid()== sign*2212 && 
 63	   lambda[0].children()[1].pid()== -sign*211) {
 64	  baryon2 = lambda[0].children()[0];
 65	}
 66	else if(lambda[0].children()[1].pid()== sign*2212 && 
 67		lambda[0].children()[0].pid()== -sign*211) {
 68	  baryon2 = lambda[0].children()[1];
 69	}
 70	else
 71	  continue;
 72	// first boost to the Lambdac rest frame
 73	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Lambdac.momentum().betaVec());
 74	FourMomentum pbaryon1 = boost1.transform(lambda[0].momentum());
 75	FourMomentum pbaryon2 = boost1.transform(baryon2  .momentum());
 76	// to lambda rest frame
 77	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
 78	Vector3 axis = pbaryon1.p3().unit();
 79	FourMomentum pp = boost2.transform(pbaryon2);
 80	// calculate angle
 81	double cTheta = pp.p3().unit().dot(axis);
 82	_h_Lambda->fill(cTheta);
 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 (auto bin : hist->bins() ) {
 90	double Oi = bin.area();
 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.areaErr();
 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      //  asymmetry
104      normalize(_h_Lambda);
105      Scatter2DPtr _h_alpha;
106      book(_h_alpha,2,1,1);
107      pair<double,double> alpha = calcAlpha(_h_Lambda);
108      _h_alpha->addPoint(0.5, alpha.first, make_pair(0.5,0.5), make_pair(alpha.second,alpha.second) );
109    }
110
111    //@}
112
113
114    /// @name Histograms
115    //@{
116    Histo1DPtr _h_Lambda;
117    //@}
118
119
120  };
121
122
123  RIVET_DECLARE_PLUGIN(CLEOII_1994_I371611);
124
125}