Rivet analyses referenceCLEO_1995_I392704Decay asymmetries in $\Lambda^+_c\to\Lambda^0\pi^+$ and $\Lambda^+_c\to\Sigma^+\pi^0$Experiment: CLEO (CESR) Inspire ID: 392704 Status: VALIDATED Authors:
Beam energies: ANY Run details:
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}
|