rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2022_I2140379

Decay asymmetries in $\Lambda_c^+ \to \Sigma^+ \pi^0$, $\Sigma^+ \eta$, and $\Sigma^+ \eta^\prime$
Experiment: BELLE (KEKB)
Inspire ID: 2140379
Status: VALIDATED NOHEPDATA SINGLEWEIGHT
Authors:
  • Peter Richardson
References: Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Lambda_c baryons

Decay asymmetries in $\Lambda_c^+ \to \Sigma^+ \pi^0$, $\Sigma^+ \eta$, and $\Sigma^+ \eta^\prime$

Source code: BELLE_2022_I2140379.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Lambda_c -> Sigma+ pi0,eta,eta' decay asymmetries
  9  class BELLE_2022_I2140379 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2022_I2140379);
 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      // histograms
 24      for(unsigned int ix=0;ix<3;++ix)
 25	book(_h[ix],2,1,1+ix);
 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;
 36	int imeson=-1;
 37	if(Lambdac.children()[0].pid()==sign*3222 && 
 38	   Lambdac.children()[1].pid()==111) {
 39	  baryon1 = Lambdac.children()[0];
 40	  imeson=0;
 41	}
 42	else if(Lambdac.children()[1].pid()==sign*3222 && 
 43		Lambdac.children()[0].pid()==111) {
 44	  baryon1 = Lambdac.children()[1];
 45	  imeson=0;
 46	}
 47	else if(Lambdac.children()[0].pid()==sign*3222 && 
 48		Lambdac.children()[1].pid()==221) {
 49	  baryon1 = Lambdac.children()[0];
 50	  imeson=1;
 51	}
 52	else if(Lambdac.children()[1].pid()==sign*3222 && 
 53		Lambdac.children()[0].pid()==221) {
 54	  baryon1 = Lambdac.children()[1];
 55	  imeson=1;
 56	}
 57	else if(Lambdac.children()[0].pid()==sign*3222 && 
 58		Lambdac.children()[1].pid()==331) {
 59	  baryon1 = Lambdac.children()[0];
 60	  imeson=2;
 61	}
 62	else if(Lambdac.children()[1].pid()==sign*3222 && 
 63		Lambdac.children()[0].pid()==331) {
 64	  baryon1 = Lambdac.children()[1];
 65	  imeson=2;
 66	}
 67	else
 68	  continue;
 69	Particle baryon2;
 70	if(baryon1.children()[0].pid()== sign*2212 && 
 71	   baryon1.children()[1].pid()== 111) {
 72	  baryon2 = baryon1.children()[0];
 73	}
 74	else if(baryon1.children()[1].pid()== sign*2212 && 
 75		baryon1.children()[0].pid()== 111) {
 76	  baryon2 = baryon1.children()[1];
 77	}
 78	else
 79	  continue;
 80	// first boost to the Lambdac rest frame
 81	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Lambdac.momentum().betaVec());
 82	FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
 83	FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
 84	// to sigma+ rest frame
 85	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
 86	Vector3 axis = pbaryon1.p3().unit();
 87	FourMomentum pp = boost2.transform(pbaryon2);
 88	// calculate angle
 89	double cTheta = pp.p3().unit().dot(axis);
 90	_h[imeson]->fill(cTheta);
 91      }
 92    }
 93
 94    pair<double,double> calcAlpha(Histo1DPtr hist) {
 95      if(hist->numEntries()==0.) return make_pair(0.,0.);
 96      double sum1(0.),sum2(0.);
 97      for (const auto& bin : hist->bins() ) {
 98        double Oi = bin.sumW();
 99        if(Oi==0.) continue;
100        double ai = 0.5*(bin.xMax()-bin.xMin());
101        double bi = 0.5*ai*(bin.xMax()+bin.xMin());
102        double Ei = bin.errW();
103        sum1 += sqr(bi/Ei);
104        sum2 += bi/sqr(Ei)*(Oi-ai);
105      }
106      return make_pair(sum2/sum1,sqrt(1./sum1));
107    }
108
109    /// Normalise histograms etc., after the run
110    void finalize() {
111      pair<double,double> aSigma(-.983,0.013);
112      for (unsigned int ix=0;ix<3;++ix) {
113        normalize(_h[ix]);
114        Estimate1DPtr _h_alpha1;
115        book(_h_alpha1,1,1+ix,1);
116        pair<double,double> alpha = calcAlpha(_h[ix]);
117        _h_alpha1->bin(1).set(alpha.first, alpha.second);
118        // divide out alpha Sigma
119        alpha.second = alpha.first/aSigma.first* sqrt(sqr(alpha.second/alpha.first) + sqr(aSigma.second/aSigma.first));
120        alpha.first /= aSigma.first;
121        Estimate1DPtr _h_alpha2;
122        book(_h_alpha2,1,1+ix,2);
123        _h_alpha2->bin(1).set(alpha.first, alpha.second);
124      }
125    }
126
127    /// @}
128
129
130    /// @name Histograms
131    /// @{
132    Histo1DPtr _h[3];
133    /// @}
134
135
136  };
137
138
139  RIVET_DECLARE_PLUGIN(BELLE_2022_I2140379);
140
141}