Rivet analyses referenceBABAR_2005_I686573Mass distributions in $B^+\to p\bar{p}K^+$Experiment: BABAR (PEP-II) Inspire ID: 686573 Status: VALIDATED NOHEPDATA Authors:
Beam energies: ANY Run details:
Measurement of mass distributions in $B^+\to p\bar{p}K^+$. The data were read from the plots in the paper and the backgrounds given subtracted. Source code: BABAR_2005_I686573.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 B+ -> p pbar K+
10 class BABAR_2005_I686573 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2005_I686573);
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==521);
24 declare(ufs, "UFS");
25 DecayedParticles BP(ufs);
26 BP.addStable( 10441);
27 BP.addStable( 10443);
28 BP.addStable( 20443);
29 BP.addStable(100443);
30 BP.addStable( 441);
31 BP.addStable( 445);
32 declare(BP, "BP");
33 // histos
34 book(_h_pp,1,1,1);
35 for(unsigned int ix=0;ix<2;++ix)
36 book(_h_pK[ix],2,1,1+ix);
37 book(_c,"TMP/nB");
38 }
39
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43 static const map<PdgId,unsigned int> & mode1 = { { 2212,1}, {-2212,1}, { 321,1} };
44 static const map<PdgId,unsigned int> & mode1CC = { { 2212,1}, {-2212,1}, {-321,1} };
45 DecayedParticles BP = apply<DecayedParticles>(event, "BP");
46 // loop over particles
47 for(unsigned int ix=0;ix<BP.decaying().size();++ix) {
48 int sign=1;
49 if(BP.modeMatches(ix,3,mode1)) sign = 1;
50 else if(BP.modeMatches(ix,3,mode1CC)) sign =-1;
51 else continue;
52 _c->fill();
53 const Particle & pp = BP.decayProducts()[ix].at( sign*2212)[0];
54 const Particle & pbar = BP.decayProducts()[ix].at(-sign*2212)[0];
55 const Particle & Kp = BP.decayProducts()[ix].at( sign*321 )[0];
56 _h_pp->fill((pp.momentum()+pbar.momentum()).mass());
57 double mpK = (Kp.momentum()+pp .momentum()).mass();
58 double mpbarK = (Kp.momentum()+pbar.momentum()).mass();
59 if(mpK>mpbarK) _h_pK[0]->fill(mpK );
60 else _h_pK[1]->fill(mpbarK);
61 }
62 }
63
64
65 /// Normalise histograms etc., after the run
66 void finalize() {
67 scale(_h_pp,1./ *_c);
68 for(unsigned int ix=0;ix<2;++ix)
69 scale(_h_pK[ix],1./ *_c);
70 Histo1DPtr tmp;
71 book(tmp,2,1,3);
72 *tmp = *_h_pK[0] - *_h_pK[1];
73 tmp->setPath("/"+name()+"/"+mkAxisCode(2,1,3));
74 }
75
76 /// @}
77
78
79 /// @name Histograms
80 /// @{
81 Histo1DPtr _h_pp,_h_pK[2];
82 CounterPtr _c;
83 /// @}
84
85
86 };
87
88
89 RIVET_DECLARE_PLUGIN(BABAR_2005_I686573);
90
91}
|