rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

LHCB_2022_I1971920

Decay asymmetry in $\Lambda_b^0\to\Lambda^0\gamma$
Experiment: LHCB (LHC)
Inspire ID: 1971920
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.D 105 (2022) 5, L051104
Beams: * *
Beam energies: ANY
Run details:
  • Any process producing Lambda_b, original pp

Measurement of the decay asymmetry in $\Lambda_b^0\to\Lambda^0\gamma$ by LHCb

Source code: LHCB_2022_I1971920.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief Lambdab0 -> Lambda0 gamma
 10  class LHCB_2022_I1971920 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(LHCB_2022_I1971920);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      declare(UnstableParticles(Cuts::pid==5122), "UFS" );
 24      // histos
 25      book(_h_ctheta_gamma, "TMP/ctheta_gamma", 20, -1, 1);
 26    }
 27
 28
 29    /// Perform the per-event analysis
 30    void analyze(const Event& event) {
 31      // loop over Lambda_b baryons
 32      for (const Particle& lamB : apply<UnstableParticles>(event, "UFS").particles()) {
 33       	int sign = lamB.pid()/5122;
 34        // Lambda_b -> Lambda0 gamma
 35      	if (lamB.children().size()!=2) continue;
 36       	Particle lambda,gamma;
 37        if (lamB.children()[1].pid()==sign*3122 &&
 38           lamB.children()[0].pid()==22) {
 39          lambda = lamB.children()[1];
 40          gamma  = lamB.children()[0];
 41        }
 42        else if(lamB.children()[0].pid()==sign*3122 &&
 43          lamB.children()[1].pid()==22) {
 44          lambda = lamB.children()[0];
 45          gamma  = lamB.children()[1];
 46        }
 47        else continue;
 48        // Lambda0 -> p pi+
 49      	if (lambda.children().size()!=2) continue;
 50       	Particle proton, pion;
 51        if (lambda.children()[0].pid()== sign*2212 &&
 52           lambda.children()[1].pid()==-sign*211) {
 53          proton = lambda.children()[0];
 54          pion   = lambda.children()[1];
 55        }
 56        else if (lambda.children()[1].pid()== sign*2212 &&
 57          lambda.children()[0].pid()==-sign*211) {
 58          proton = lambda.children()[1];
 59          pion   = lambda.children()[0];
 60        }
 61        else  continue;
 62      	// first boost to the lamB rest frame
 63      	LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(lamB.momentum().betaVec());
 64      	FourMomentum plambda = boost1.transform(lambda.mom());
 65      	FourMomentum pproton = boost1.transform(proton.mom());
 66      	// to lambda rest frame
 67      	LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(plambda.betaVec());
 68      	Vector3 axis = plambda.p3().unit();
 69      	FourMomentum pp = boost2.transform(pproton);
 70      	// calculate angle
 71      	const double cTheta = pp.p3().unit().dot(axis);
 72        _h_ctheta_gamma->fill(cTheta);
 73      }
 74    }
 75
 76    pair<double,double> calcAlpha(Histo1DPtr hist) {
 77      if (hist->numEntries()==0.) return make_pair(0.,0.);
 78      double sum1(0.),sum2(0.);
 79      for (const auto& bin : hist->bins()) {
 80        double Oi = bin.sumW();
 81        if (Oi==0.) continue;
 82        double ai = 0.5*(bin.xMax()-bin.xMin());
 83        double bi = 0.5*ai*(bin.xMax()+bin.xMin());
 84        double Ei = bin.errW();
 85        sum1 += sqr(bi/Ei);
 86        sum2 += bi/sqr(Ei)*(Oi-ai);
 87      }
 88      return make_pair(sum2/sum1,sqrt(1./sum1));
 89    }
 90
 91    /// Normalise histograms etc., after the run
 92    void finalize() {
 93      normalize(_h_ctheta_gamma);
 94      pair<double,double> alpha = calcAlpha(_h_ctheta_gamma);
 95      const double aLam = 0.754;
 96      alpha.first  /= aLam;
 97      alpha.second /= aLam;
 98      Estimate0DPtr tmp;
 99      book(tmp,1,1,1);
100      tmp->set(alpha.first,alpha.second);
101    }
102
103    /// @}
104
105
106    /// @name Histograms
107    /// @{
108    Histo1DPtr _h_ctheta_gamma;
109    /// @}
110
111
112  };
113
114
115  RIVET_DECLARE_PLUGIN(LHCB_2022_I1971920);
116
117}