rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2015_I1337783

CP asymmetry in $\bar{B}\to X_{s+D}\gamma$ decays
Experiment: BABAR (PEP-II)
Inspire ID: 1337783
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 114 (2015) 15, 151601
Beams: * *
Beam energies: ANY
Run details:
  • $B^-$ and $\bar{B}^0$ mesons in Upsilon(4S) decays (needed as photon energy measured in Upsilon(4S) rest frame)

Measurement of the CP asymmetry in $\bar{B}\to X_{s+D}\gamma$ decays

Source code: BABAR_2015_I1337783.cc
 1// -*- C++ -*-
 2#include "Rivet/Analysis.hh"
 3#include "Rivet/Projections/UnstableParticles.hh"
 4
 5namespace Rivet {
 6
 7
 8  /// @brief CP asymetry in B -> X gamma
 9  class BABAR_2015_I1337783 : public Analysis {
10  public:
11
12    /// Constructor
13    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2015_I1337783);
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(Cuts::pid==300553), "UFS");
23      // profile hist for asymmetry
24      book(_p,1,1,1);
25    }
26
27
28    /// Perform the per-event analysis
29    void analyze(const Event& event) {
30      if(_edges.empty()) _edges=_p->xEdges();
31      // Loop over upslion(4s)
32      for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
33      	// boost to rest frame
34      	LorentzTransform cms_boost;
35      	if (p.p3().mod() > 1*MeV)
36      	  cms_boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
37	// loop over children
38      	for(const Particle & p2 : p.children(Cuts::abspid==521 || Cuts::abspid==511)) {
39	  Particle bottom=p2;
40	  while(bottom.children()[0].abspid()==p2.abspid())
41	    bottom = bottom.children()[0];
42	  bool charm = false;
43	  FourMomentum pgamma(0.,0.,0.,0.);
44	  unsigned int ngamma = 0;
45	  for (const Particle & child : bottom.children()) {
46	    if (child.pid() == PID::PHOTON) {
47	      ngamma += 1;
48	      pgamma += child.momentum();
49	    }
50	    else if(PID::isCharmHadron(child.pid()))
51	      charm = true;
52	  }
53	  if (ngamma != 1 || charm ) continue;
54	  double Egamma = cms_boost.transform(pgamma).E();
55	  double wgt = bottom.pid()<0 ? 100. : -100.;
56          double Emin=1.7;
57	  for(unsigned int ix=0;ix<_edges.size();++ix) {
58	    if(Egamma>Emin) _p->fill(_edges[ix],wgt);
59            Emin+=0.1;
60          }
61	}
62      }
63    }
64
65
66    /// Normalise histograms etc., after the run
67    void finalize() {
68    }
69
70    /// @}
71
72
73    /// @name Histograms
74    /// @{
75    BinnedProfilePtr<string> _p;
76    vector<string> _edges;
77    /// @}
78
79
80  };
81
82
83  RIVET_DECLARE_PLUGIN(BABAR_2015_I1337783);
84
85}