Rivet analyses
Baryon-antibaryon correlations at the Υ(1S) and nearby continuum
Experiment: ARGUS (DORIS)
Inspire ID: 266892
Status: VALIDATED NOHEPDATA
Authors: - Peter Richardson
References: - Z.Phys.C 43 (1989) 45
Beams: e+ e-
Beam energies: (4.7, 4.7); (5.0, 5.0)GeV
Run details: - e+e− analysis in the 10 GeV CMS energy range
Correlations in the production of pp̄ and hyperon-antihyperon pairs.
Source
code:ARGUS_1988_I266892.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Thrust.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief baryon correlations
class ARGUS_1988_I266892 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1988_I266892);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// projections
const FinalState fs;
declare(fs , "FS" );
declare(UnstableParticles(), "UFS" );
declare(Thrust(fs) , "Thrust");
// histos
for (unsigned int ix=0; ix<3; ++ix) {
book(_nBB2[ix], "TMP/nBB2_"+toString(ix+1),
refData<YODA::BinnedEstimate<string>>(4+2*ix, 1, 1));
book(_n[ix], "TMP/n_"+toString(ix+1),
refData<YODA::BinnedEstimate<string>>(4+2*ix, 1, 1));
book(_nBB [ix],3+2*ix,1,1);
book(_c[ix],"TMP/c_"+toString(ix+1));
if (ix==2) continue;
book(_h_pt[ix],1,1,1+ix);
}
book(_h_pt[2],2,1,1);
}
/// Recursively walk the decay tree to find the stable decay products of @a p
void findDecayProducts(const Particle& mother, Particles& final,
Particles& protons, Particles& lambda, Particles& xi,
Particles& l1520) {
for (const Particle & p: mother.children()) {
if (p.abspid()==3122 ) lambda.push_back(p);
else if (p.abspid()==3312 ) xi .push_back(p);
else if (p.abspid()==102134) l1520 .push_back(p);
if (!p.children().empty()) {
findDecayProducts(p, final, protons, lambda, xi, l1520);
}
else {
final.push_back(p);
if (p.abspid()==2212) protons.push_back(p);
}
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
if(_edges.empty()) _edges = _nBB2[1]->xEdges();
// Find the Upsilons among the unstables
const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
Particles upsilons = ufs.particles(Cuts::pid==553);
if (upsilons.empty()) {
_c[1]->fill();
_c[2]->fill();
Thrust thrust = apply<Thrust>(event, "Thrust");
Vector3 axis = thrust.thrustAxis();
Particles protons = apply<FinalState>(event, "FS").particles(Cuts::abspid==2212);
for (unsigned int ix=0;ix<protons.size();++ix) {
double d1 = protons[ix].mom().p3().dot(axis);
Vector3 pt1 = protons[ix].mom().p3()-d1*axis;
for (unsigned int iy=ix+1;iy<protons.size();++iy) {
if (protons[ix].pid()*protons[iy].pid()>0) continue;
double d2 = protons[iy].mom().p3().dot(axis);
Vector3 pt2 = protons[iy].mom().p3()-d2*axis;
double phi = pt1.angle(pt2);
if (phi<0.) phi +=M_PI;
phi *=180./M_PI;
if(phi==180.) phi=phi-1e-10;
if (d1*d2>0) _h_pt[0]->fill(phi);
else _h_pt[2]->fill(phi);
}
}
Particles lambda = ufs.particles(Cuts::abspid==3122);
for (unsigned int ix=0; ix<lambda.size(); ++ix) {
_n[0]->fill(_edges[1]);
for (unsigned int iy=ix+1; iy<lambda.size(); ++iy) {
if (lambda[ix].pid()*lambda[iy].pid()<0) {
_nBB [0]->fill(_edges[1]);
_nBB2[0]->fill(_edges[1]);
}
}
}
Particles xi = ufs.particles(Cuts::abspid==3312);
for (unsigned int ix=0;ix<xi.size();++ix) {
_n[1]->fill(_edges[1]);
_n[1]->fill(_edges[2]);
for (unsigned int iy=0;iy<lambda.size();++iy) {
if (xi[ix].pid()*lambda[iy].pid()<0) {
_nBB [1]->fill(_edges[1]);
_nBB2[1]->fill(_edges[1]);
_nBB2[1]->fill(_edges[2]);
}
}
}
Particles l1520 = ufs.particles(Cuts::abspid==102134);
for (unsigned int ix=0; ix<l1520.size(); ++ix) {
_n[2]->fill(_edges[1]);
_n[2]->fill(_edges[2]);
for (unsigned int iy=0; iy<lambda.size(); ++iy) {
if (l1520[ix].pid()*lambda[iy].pid()<0) {
_nBB [2]->fill(_edges[1]);
_nBB2[2]->fill(_edges[1]);
_nBB2[2]->fill(_edges[2]);
}
}
}
}
else {
for (const Particle& ups : upsilons) {
_c[0]->fill();
_c[2]->fill();
LorentzTransform boost;
if (ups.p3().mod() > 1*MeV) {
boost = LorentzTransform::mkFrameTransformFromBeta(ups.mom().betaVec());
}
Particles final, protons, lambda, xi, l1520;
findDecayProducts(ups, final, protons, lambda, xi, l1520);
vector<FourMomentum> mom; mom.reserve(final.size());
for (const Particle& p : final) {
mom.push_back(boost.transform(p.mom()));
}
Thrust thrust;
thrust.calc(mom);
Vector3 axis = thrust.thrustAxis();
for (unsigned int ix=0; ix<protons.size(); ++ix) {
double d1 = protons[ix].mom().p3().dot(axis);
Vector3 pt1 = protons[ix].mom().p3()-d1*axis;
for (unsigned int iy=ix+1;iy<protons.size();++iy) {
if (protons[ix].pid()*protons[iy].pid()>0) continue;
double d2 = protons[iy].mom().p3().dot(axis);
Vector3 pt2 = protons[iy].mom().p3()-d2*axis;
double phi = pt1.angle(pt2);
if (phi<0.) phi +=M_PI;
phi *=180./M_PI;
if(phi==180.) phi=phi-1e-10;
if (d1*d2>0) _h_pt[1]->fill(phi);
}
}
for (unsigned int ix=0; ix<lambda.size(); ++ix) {
_n[0]->fill(_edges[0]);
for (unsigned int iy=ix+1; iy<lambda.size(); ++iy) {
if (lambda[ix].pid()*lambda[iy].pid()<0) {
_nBB [0]->fill(_edges[0]);
_nBB2[0]->fill(_edges[0]);
}
}
}
for (unsigned int ix=0; ix<xi.size(); ++ix) {
_n[1]->fill(_edges[0]);
_n[1]->fill(_edges[2]);
for (unsigned int iy=0; iy<lambda.size(); ++iy) {
if(xi[ix].pid()*lambda[iy].pid()<0) {
_nBB [1]->fill(_edges[0]);
_nBB2[1]->fill(_edges[0]);
_nBB2[1]->fill(_edges[2]);
}
}
}
for (unsigned int ix=0; ix<l1520.size(); ++ix) {
_n[2]->fill(_edges[0]);
_n[2]->fill(_edges[2]);
for (unsigned int iy=0; iy<lambda.size(); ++iy) {
if (l1520[ix].pid()*lambda[iy].pid()<0) {
_nBB [2]->fill(_edges[0]);
_nBB2[2]->fill(_edges[0]);
_nBB2[2]->fill(_edges[2]);
}
}
}
}
}
}
/// Normalise histograms etc., after the run
void finalize() {
normalize(_h_pt, 1.0, false);
for (unsigned int ix=0; ix<3; ++ix) {
for(unsigned int iy=0;iy<_nBB[ix]->numBins();++iy)
_nBB[ix]->bin(iy+1).scaleW( 1./_c[iy]->val());
BinnedEstimatePtr<string> tmp;
book(tmp,4+2*ix, 1, 1);
divide(_nBB2[ix], _n[ix],tmp);
if(ix==0) scale(tmp,2.);
}
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h_pt[3];
BinnedHistoPtr<string> _nBB[3],_nBB2[3],_n[3];
CounterPtr _c[3];
vector<string> _edges;
/// @}
};
RIVET_DECLARE_PLUGIN(ARGUS_1988_I266892);
}