rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

FOCUS_2006_I693639

Decay asymmetries in $\Lambda^+_c\to\Lambda^0\pi^+$
Experiment: FOCUS ()
Inspire ID: 693639
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B634 (2006) 165-172
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Lambda_c baryons

Measurement of the decay asymmetries in $\Lambda^+_c\to\Lambda^0\pi^+$ by the FOCUS 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: FOCUS_2006_I693639.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 asymmetry
  9  class FOCUS_2006_I693639 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(FOCUS_2006_I693639);
 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      // Book histograms
 24      book(_h_ctheta1,2,1,1);
 25      book(_h_ctheta2,3,1,1);
 26    }
 27
 28
 29    /// Perform the per-event analysis
 30    void analyze(const Event& event) {
 31      // loop over Lambda_c baryons
 32      for( const Particle& Lambdac : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==4122)) {
 33	int sign = Lambdac.pid()/4122;
 34	if(Lambdac.children().size()!=2) continue;
 35	Particle baryon1,meson1;
 36	if(Lambdac.children()[0].pid()==sign*3122 &&
 37	   Lambdac.children()[1].pid()==sign*211) {
 38	  baryon1 = Lambdac.children()[0];
 39	  meson1  = Lambdac.children()[1];
 40	}
 41	else if(Lambdac.children()[1].pid()==sign*3122 &&
 42		Lambdac.children()[0].pid()==sign*211) {
 43	  baryon1 = Lambdac.children()[1];
 44	  meson1  = Lambdac.children()[0];
 45	}
 46	else
 47	  continue;
 48	Particle baryon2,meson2;
 49	if(baryon1.children()[0].pid()== sign*2212 &&
 50	   baryon1.children()[1].pid()==-sign*211) {
 51	  baryon2 = baryon1.children()[0];
 52	  meson2  = baryon1.children()[1];
 53	}
 54	else if(baryon1.children()[1].pid()== sign*2212 &&
 55		baryon1.children()[0].pid()==-sign*211) {
 56	  baryon2 = baryon1.children()[1];
 57	  meson2  = baryon1.children()[0];
 58	}
 59	else
 60	  continue;
 61	// first boost to the Lambdac rest frame
 62	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Lambdac.momentum().betaVec());
 63	FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
 64	FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
 65	// to lambda rest frame
 66	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
 67	Vector3 axis = pbaryon1.p3().unit();
 68	FourMomentum pp = boost2.transform(pbaryon2);
 69	// calculate angle
 70	double cTheta = pp.p3().unit().dot(axis);
 71	if(sign>0)
 72	  _h_ctheta1->fill(cTheta);
 73	else
 74	  _h_ctheta2->fill(cTheta);
 75      }
 76    }
 77
 78    pair<double,double> calcAlpha(Histo1DPtr hist) {
 79      if(hist->numEntries()==0.) return make_pair(0.,0.);
 80      double sum1(0.),sum2(0.);
 81      for (const auto& bin : hist->bins() ) {
 82	double Oi = bin.sumW();
 83	if(Oi==0.) continue;
 84	double ai = 0.5*(bin.xMax()-bin.xMin());
 85	double bi = 0.5*ai*(bin.xMax()+bin.xMin());
 86	double Ei = bin.errW();
 87	sum1 += sqr(bi/Ei);
 88	sum2 += bi/sqr(Ei)*(Oi-ai);
 89      }
 90      return make_pair(sum2/sum1,sqrt(1./sum1));
 91    }
 92
 93    /// Normalise histograms etc., after the run
 94    void finalize() {
 95      normalize(_h_ctheta1);
 96      normalize(_h_ctheta2);
 97      Estimate1DPtr _h_alpha;
 98      book(_h_alpha,1,1,1);
 99      pair<double,double> alpha = calcAlpha(_h_ctheta1);
100      _h_alpha->bin(1).set(alpha.first, alpha.second);
101    }
102
103    /// @}
104
105
106    /// @name Histograms
107    /// @{
108    Histo1DPtr _h_ctheta1, _h_ctheta2;
109    /// @}
110
111
112  };
113
114
115  RIVET_DECLARE_PLUGIN(FOCUS_2006_I693639);
116
117
118}