Rivet analyses referenceBELLE_2022_I2140379Decay 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:
Beam energies: ANY Run details:
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 Estimate0DPtr _h_alpha1;
115 book(_h_alpha1,1,1+ix,1);
116 pair<double,double> alpha = calcAlpha(_h[ix]);
117 _h_alpha1->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 Estimate0DPtr _h_alpha2;
122 book(_h_alpha2,1,1+ix,2);
123 _h_alpha2->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}
|