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      // Loop over upslion(4s)
31      for (const Particle& p : apply<UnstableParticles>(event, "UFS").particles()) {
32      	// boost to rest frame
33      	LorentzTransform cms_boost;
34      	if (p.p3().mod() > 1*MeV)
35      	  cms_boost = LorentzTransform::mkFrameTransformFromBeta(p.momentum().betaVec());
36	// loop over children
37      	for(const Particle & p2 : p.children(Cuts::abspid==521 || Cuts::abspid==511)) {
38	  Particle bottom=p2;
39	  while(bottom.children()[0].abspid()==p2.abspid())
40	    bottom = bottom.children()[0];
41	  bool charm = false;
42	  FourMomentum pgamma(0.,0.,0.,0.);
43	  unsigned int ngamma = 0;
44	  for (const Particle & child : bottom.children()) {
45	    if (child.pid() == PID::PHOTON) {
46	      ngamma += 1;
47	      pgamma += child.momentum();
48	    }
49	    else if(PID::isCharmHadron(child.pid()))
50	      charm = true;
51	  }
52	  if (ngamma != 1 || charm ) continue;
53	  double Egamma = cms_boost.transform(pgamma).E();
54	  double wgt = bottom.pid()<0 ? 100. : -100.;
55	  for(const auto & bin : _p->bins())
56	    if(bin.xMin()<Egamma) _p->fill(bin.xMid(),wgt);
57	}
58      }
59    }
60
61
62    /// Normalise histograms etc., after the run
63    void finalize() {
64    }
65
66    /// @}
67
68
69    /// @name Histograms
70    /// @{
71    Profile1DPtr _p;
72    /// @}
73
74
75  };
76
77
78  RIVET_DECLARE_PLUGIN(BABAR_2015_I1337783);
79
80}