Rivet analyses referenceBELLE_2011_I889524Mass and angular distributions in $B^0_S\to J\psi\pi^+\pi^-$Experiment: BELLE (KEKB) Inspire ID: 889524 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
THe $\pi^+\pi^-$ mass distribution and helcity angle distributions in the $f_0(980)$ and $f_0(1370)$ mass regions for the decay $B^0_S\to J\psi\pi^+\pi^-$ measured by BELLE Source code: BELLE_2011_I889524.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/UnstableParticles.hh"
4#include "Rivet/Projections/DecayedParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief Bs0 -> pi+ pi- J/psi
10 class BELLE_2011_I889524 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2011_I889524);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 UnstableParticles ufs = UnstableParticles(Cuts::abspid==531);
24 declare(ufs, "UFS");
25 DecayedParticles BS0(ufs);
26 BS0.addStable( 443);
27 declare(BS0, "BS0");
28 // histograms
29 book(_h_mass,1,1,1);
30 for(unsigned int ix=0;ix<2;++ix)
31 book(_h_cTheta[ix],2,1,1+ix);
32 }
33
34
35 /// Perform the per-event analysis
36 void analyze(const Event& event) {
37 static const map<PdgId,unsigned int> & mode = { { 211,1}, {-211,1}, { 443,1}};
38 DecayedParticles BS0 = apply<DecayedParticles>(event, "BS0");
39 for(unsigned int ix=0;ix<BS0.decaying().size();++ix) {
40 if (!BS0.modeMatches(ix,3,mode)) continue;
41 const Particle & pip = BS0.decayProducts()[ix].at( 211)[0];
42 const Particle & pim = BS0.decayProducts()[ix].at(-211)[0];
43 const Particle & JPsi = BS0.decayProducts()[ix].at( 443)[0];
44 double mpipi = (pip.momentum()+pim.momentum()).mass();
45 _h_mass->fill(mpipi);
46 // helicity angle find J.psi leptonic children
47 if(JPsi.children().size()!=2) continue;
48 if(JPsi.children()[0].pid()!=-JPsi.children()[1].pid()) continue;
49 if(JPsi.children()[0].abspid()!=PID::EMINUS &&
50 JPsi.children()[0].abspid()!=PID::MUON) continue;
51 Particle lm = JPsi.children()[0];
52 Particle lp = JPsi.children()[1];
53 if(lm.pid()<0) swap(lm,lp);
54 LorentzTransform boost1 = LorentzTransform::mkFrameTransformFromBeta(BS0.decaying()[ix].momentum().betaVec());
55 FourMomentum ppsi = boost1.transform(JPsi.momentum());
56 Vector3 axis1 = ppsi.p3().unit();
57 LorentzTransform boost2 = LorentzTransform::mkFrameTransformFromBeta(ppsi.betaVec());
58 FourMomentum plp = boost2.transform(boost1.transform(lp.momentum()));
59 double cTheta = plp.p3().unit().dot(axis1);
60 if (mpipi>0.8 && mpipi<1.16) _h_cTheta[0]->fill(cTheta);
61 else if(mpipi>1.3 && mpipi<1.5) _h_cTheta[1]->fill(cTheta);
62 }
63 }
64
65
66 /// Normalise histograms etc., after the run
67 void finalize() {
68 normalize(_h_mass,1.,false);
69 for(unsigned int ix=0;ix<2;++ix)
70 normalize(_h_cTheta[ix],1.,false);
71 }
72
73 /// @}
74
75
76 /// @name Histograms
77 /// @{
78 Histo1DPtr _h_mass,_h_cTheta[2];
79 /// @}
80
81
82 };
83
84
85 RIVET_DECLARE_PLUGIN(BELLE_2011_I889524);
86
87}
|