Processing math: 100%
rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

NA48_2010_I868871

Decay asymmetries in Ξ0Λ0γ, Λ0π0 and Σ0γ
Experiment: NA48 ()
Inspire ID: 868871
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B693 (2010) 241-248
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Xi0 baryons

Measurement of the decay asymmetries in Ξ0Λ0γ, Λ0π0 and Σ0γ by the NA48 experiment. The asymmetry parameter is extracted by fitting to normalised angular distribution. This analysis is useful for testing spin correlations in hadron decays.

Source code: NA48_2010_I868871.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4#include <sstream>
  5namespace Rivet {
  6
  7
  8  /// @brief asymmetrics in Xi0 decays
  9  class NA48_2010_I868871 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(NA48_2010_I868871);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21
 22      // Initialise and register projections
 23      declare(UnstableParticles(), "UFS" );
 24      // Book histograms
 25      book(_h_ctheta_pi0  , "ctheta_pi0"  , 20,-1,1);
 26      book(_h_ctheta_gamma, "ctheta_gamma", 20,-1,1);
 27
 28      book(_h_ctheta_Sigma, {-1., -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,
 29                             0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.});
 30      for (auto& b : _h_ctheta_Sigma->bins()) {
 31        const string name = "ctheta_Sigma_"+std::to_string(b.index()-1);
 32        book(b, name, 20, -1.0, 1.0);
 33      }
 34      book(_nSigma,"TMP/nSigma");
 35    }
 36
 37
 38    /// Perform the per-event analysis
 39    void analyze(const Event& event) {
 40      // loop over Omega baryons
 41      for (const Particle& Xi : apply<UnstableParticles>(event, "UFS").particles(Cuts::abspid==3322)) {
 42        int sign = Xi.pid()/3322;
 43        if(Xi.children().size()!=2) continue;
 44        Particle baryon1,meson1;
 45        unsigned int mode(0);
 46        if(Xi.children()[0].pid()==sign*3122 &&
 47           Xi.children()[1].pid()==111) {
 48          baryon1 = Xi.children()[0];
 49          meson1  = Xi.children()[1];
 50          mode=1;
 51        }
 52        else if(Xi.children()[1].pid()==sign*3122 &&
 53          Xi.children()[0].pid()==111) {
 54          baryon1 = Xi.children()[1];
 55          meson1  = Xi.children()[0];
 56          mode=1;
 57        }
 58        else if(Xi.children()[0].pid()==sign*3122 &&
 59           Xi.children()[1].pid()==22) {
 60          baryon1 = Xi.children()[0];
 61          meson1  = Xi.children()[1];
 62          mode=2;
 63        }
 64        else if(Xi.children()[1].pid()==sign*3122 &&
 65          Xi.children()[0].pid()==22) {
 66          baryon1 = Xi.children()[1];
 67          meson1  = Xi.children()[0];
 68          mode=2;
 69        }
 70        else if(Xi.children()[0].pid()==sign*3212 &&
 71           Xi.children()[1].pid()==22) {
 72          baryon1 = Xi.children()[0];
 73          meson1  = Xi.children()[1];
 74          mode=3;
 75        }
 76        else if(Xi.children()[1].pid()==sign*3212 &&
 77          Xi.children()[0].pid()==22) {
 78          baryon1 = Xi.children()[1];
 79          meson1  = Xi.children()[0];
 80          mode=3;
 81        }
 82        else
 83          continue;
 84        if(baryon1.children().size()!=2) continue;
 85        Particle baryon2,meson2,baryon3,meson3;
 86        if(mode==1 || mode ==2) {
 87          if(baryon1.children()[0].pid()== sign*2212 &&
 88             baryon1.children()[1].pid()==-sign*211) {
 89            baryon2 = baryon1.children()[0];
 90            meson2  = baryon1.children()[1];
 91          }
 92          else if(baryon1.children()[1].pid()== sign*2212 &&
 93            baryon1.children()[0].pid()==-sign*211) {
 94            baryon2 = baryon1.children()[1];
 95            meson2  = baryon1.children()[0];
 96          }
 97          else
 98            continue;
 99        }
100        else if(mode==3) {
101          if(baryon1.children()[0].pid()== sign*3122 &&
102           baryon1.children()[1].pid()== 22) {
103          baryon2 = baryon1.children()[0];
104          meson2  = baryon1.children()[1];
105        }
106        else if(baryon1.children()[1].pid()== sign*3122 &&
107          baryon1.children()[0].pid()== 22) {
108          baryon2 = baryon1.children()[1];
109          meson2  = baryon1.children()[0];
110        }
111        else
112          continue;
113        if(baryon2.children()[0].pid()== sign*2212 &&
114           baryon2.children()[1].pid()==-sign*211) {
115          baryon3 = baryon2.children()[0];
116          meson3  = baryon2.children()[1];
117        }
118        else if(baryon2.children()[1].pid()== sign*2212 &&
119          baryon2.children()[0].pid()==-sign*211) {
120          baryon3 = baryon2.children()[1];
121          meson3  = baryon2.children()[0];
122        }
123        else
124          continue;
125        }
126        // first boost to the Xi rest frame
127        LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(Xi.momentum().betaVec());
128        FourMomentum pbaryon1 = boost1.transform(baryon1.momentum());
129        FourMomentum pbaryon2 = boost1.transform(baryon2.momentum());
130        // to lambda rest frame
131        LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(pbaryon1.betaVec());
132        Vector3 axis = pbaryon1.p3().unit();
133        FourMomentum pp = boost2.transform(pbaryon2);
134        // calculate angle
135        double cTheta = pp.p3().unit().dot(axis);
136        if(mode==1) {
137          _h_ctheta_pi0->fill(cTheta,1.);
138        }
139        else if(mode==2) {
140          _h_ctheta_gamma->fill(cTheta,1.);
141        }
142        else if(mode==3) {
143          FourMomentum pbaryon3 = boost1.transform(baryon3.momentum());
144          FourMomentum pp2      = boost2.transform(pbaryon3);
145          Vector3 axis2 = pp.p3().unit();
146          double cTheta2 = pp2.p3().unit().dot(axis2);
147          _h_ctheta_Sigma->fill(cTheta,cTheta2);
148          _nSigma->fill();
149        }
150      }
151    }
152
153    pair<double,double> calcAlpha(Histo1DPtr& hist) {
154      if (hist->numEntries()==0.) return make_pair(0.,0.);
155      double sum1(0.),sum2(0.);
156      for (const auto& bin : hist->bins() ) {
157        double Oi = bin.sumW();
158        if(Oi==0.) continue;
159        double ai = 0.5*(bin.xMax()-bin.xMin());
160        double bi = 0.5*ai*(bin.xMax()+bin.xMin());
161        double Ei = bin.errW();
162        sum1 += sqr(bi/Ei);
163        sum2 += bi/sqr(Ei)*(Oi-ai);
164      }
165      return make_pair(sum2/sum1,sqrt(1./sum1));
166    }
167
168    pair<double,double> calcAlpha(Histo1DGroupPtr& hist) {
169      double sum1(0.),sum2(0.);
170      for (auto& h2 : hist->bins()) {
171        double xsum=2.*h2.xMin() + h2.xWidth();
172        for (const auto& bin : h2->bins() ) {
173          double Oi = bin.sumW();
174          if(Oi==0.) continue;
175          double ai = 0.25*(bin.xMax()-bin.xMin())*h2.xWidth();
176          double bi = 0.25*ai*(bin.xMax()+bin.xMin())*xsum;
177          double Ei = bin.errW();
178          sum1 += sqr(bi/Ei);
179          sum2 += bi/sqr(Ei)*(Oi-ai);
180        }
181      }
182      return make_pair(sum2/sum1,sqrt(1./sum1));
183    }
184
185    /// Normalise histograms etc., after the run
186    void finalize() {
187      // Xi0 -> Lambda0 pi0
188      normalize(_h_ctheta_pi0);
189      Estimate0DPtr _h_alpha_pi0;
190      book(_h_alpha_pi0,1,1,1);
191      pair<double,double> alpha = calcAlpha(_h_ctheta_pi0);
192      _h_alpha_pi0->set(alpha.first, alpha.second);
193      // Xi0 -> Lambda gamma (N.B. sign due defns)
194      normalize(_h_ctheta_gamma);
195      Estimate0DPtr _h_alpha_gamma;
196      book(_h_alpha_gamma,1,1,2);
197      alpha = calcAlpha(_h_ctheta_gamma);
198      _h_alpha_gamma->set(-alpha.first, alpha.second);
199      // Xi0 -> Sigma gamma
200      scale(_h_ctheta_Sigma, 1./ *_nSigma);
201      divByGroupWidth(_h_ctheta_Sigma);
202      Estimate0DPtr _h_alpha_Sigma;
203      book(_h_alpha_Sigma,1,1,3);
204      alpha = calcAlpha(_h_ctheta_Sigma);
205      _h_alpha_Sigma->set(alpha.first, alpha.second);
206    }
207
208    /// @}
209
210
211    /// @name Histograms
212    /// @{
213    Histo1DPtr _h_ctheta_pi0,_h_ctheta_gamma;
214    Histo1DGroupPtr _h_ctheta_Sigma;
215    CounterPtr  _nSigma;
216    /// @}
217
218  };
219
220
221  RIVET_DECLARE_PLUGIN(NA48_2010_I868871);
222
223
224}