Rivet analyses referenceBABAR_2005_I679961Production and decay of $\Xi^0_c$ at BABAR.Experiment: BaBar (PEP-II) Inspire ID: 679961 Status: VALIDATED Authors:
Beam energies: (3.5, 8.0); (3.5, 7.9) GeV Run details:
Analysis of $\Xi_c^0$ production in B decays and from the $c\bar{c}$ continuum, with the $\Xi_c^0$ decaying into $\Omega^- K^+$ and $\Xi^- \pi^+$ final states measured using 116.1 $\text{fb}^{-1}$ of data collected by the BABAR detector. The normalisation of the data as been modified from that presented in the original paper in order to produce a differential cross section rather than the cross section in each bin. In addition to the data presented in the paper plots are alos made with unit normalisation which can be more useful for Monte Carlo tuning. Source code: BABAR_2005_I679961.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/Beam.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief BABAR Xi_c baryons from fragmentation
10 ///
11 /// @author Peter Richardson
12 class BABAR_2005_I679961 : public Analysis {
13 public:
14
15 RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2005_I679961);
16
17
18 void init() {
19 declare(Beam(), "Beams");
20 declare(UnstableParticles(), "UFS");
21 book(_histOnResonanceA, 1,1,1);
22 book(_histOnResonanceB, 2,1,1);
23 book(_histOffResonance, 2,1,2);
24 book(_sigma, 3,1,1);
25 }
26
27
28 void analyze(const Event& e) {
29 // Loop through unstable FS particles and look for charmed mesons/baryons
30 const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
31
32 const Beam beamproj = apply<Beam>(e, "Beams");
33 const ParticlePair& beams = beamproj.beams();
34 const FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum();
35 const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(mom_tot.betaVec());
36 const double s = sqr(beamproj.sqrtS());
37
38 const bool onresonance = fuzzyEquals(beamproj.sqrtS()/GeV, 10.58, 2E-3);
39
40 for (const Particle& p : ufs.particles()) {
41 // 3-momentum in CMS frame
42
43 const double mom = cms_boost.transform(p.momentum()).vector3().mod();
44 // Only looking at Xi_c^0
45 if (p.abspid() != 4132 ) continue;
46 MSG_DEBUG("mom = " << mom);
47 // off-resonance cross section
48 if (checkDecay(p.genParticle())) {
49 if (onresonance) {
50 _histOnResonanceA->fill(mom);
51 _histOnResonanceB->fill(mom);
52 }
53 else {
54 _histOffResonance->fill(mom,s/sqr(10.58));
55 _sigma->fill(Ecm);
56 }
57 }
58 }
59 }
60
61
62 void finalize() {
63 scale(_histOnResonanceA, crossSection()/femtobarn/sumOfWeights()*0.2);
64 scale(_histOnResonanceB, crossSection()/femtobarn/sumOfWeights()*0.45);
65 scale(_histOffResonance, crossSection()/femtobarn/sumOfWeights()*0.45);
66 scale(_sigma , crossSection()/femtobarn/sumOfWeights());
67 }
68
69
70 private:
71
72 /// @name Histograms
73 /// @{
74 Histo1DPtr _histOnResonanceA;
75 Histo1DPtr _histOnResonanceB;
76 Histo1DPtr _histOffResonance;
77 BinnedHistoPtr<string> _sigma;
78 const string Ecm = "10.58";
79 /// @}
80
81
82 bool checkDecay(ConstGenParticlePtr p) {
83 unsigned int nstable = 0, npip = 0, npim = 0;
84 unsigned int nXim = 0, nXip = 0;
85 findDecayProducts(p, nstable, npip, npim, nXip, nXim);
86 int id = p->pdg_id();
87 // Xi_c
88 if (id == 4132) {
89 if (nstable == 2 && nXim == 1 && npip == 1) return true;
90 }
91 else if (id == -4132) {
92 if (nstable == 2 && nXip == 1 && npim == 1) return true;
93 }
94 return false;
95 }
96
97
98 void findDecayProducts(ConstGenParticlePtr p,
99 unsigned int& nstable,
100 unsigned int& npip, unsigned int& npim,
101 unsigned int& nXip, unsigned int& nXim) {
102 ConstGenVertexPtr dv = p->end_vertex();
103 /// @todo Use better looping
104 for (ConstGenParticlePtr pp: HepMCUtils::particles(dv, Relatives::CHILDREN)){
105 int id = pp->pdg_id();
106 if (id==3312) {
107 ++nXim;
108 ++nstable;
109 } else if (id == -3312) {
110 ++nXip;
111 ++nstable;
112 } else if(id == 111 || id == 221) {
113 ++nstable;
114 } else if (pp->end_vertex()) {
115 findDecayProducts(pp, nstable, npip, npim, nXip, nXim);
116 } else {
117 if (id != 22) ++nstable;
118 if (id == 211) ++npip;
119 else if(id == -211) ++npim;
120 }
121 }
122 }
123
124 };
125
126
127 RIVET_DECLARE_ALIASED_PLUGIN(BABAR_2005_I679961, BABAR_2005_S6181155);
128
129}
|