Rivet analyses
μ+μ− and τ+τ− production in two photon collisions at LEP
Experiment: L3 (LEP)
Inspire ID: 645127
Status: VALIDATED
Authors: - Peter Richardson
References: - Phys.Lett. B585 (2004) 53-62, 2004
Beams: e- e+, 22 22
Beam energies: (80.5, 80.5); (86.0, 86.0); (91.5, 91.5); (94.5, 94.5); (98.0, 98.0); (103.0, 103.0); (1.8, 1.8); (2.2, 2.2); (2.8, 2.8); (3.2, 3.2); (3.8, 3.8); (4.5, 4.5); (6.2, 6.2); (8.8, 8.8); (15.0, 15.0)GeV
Run details: - e+e- -> gamma gamma producing muons and tau leptons
Measurement of e+e− → e+e−γγ → e+e− → e+e−μ+μ−, τ+τ−. This analysis can test approximations used to simulate this process, but also is a prototype for analyses of γγ collisions. There are two modes supported, the first PROCESS=EE, simulates for full process starting with e+e− beams, while the second PROCESS=GG is the extracted cross section for γγ → μ+μ−.
Source
code:L3_2004_I645127.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/GammaGammaFinalState.hh"
#include "Rivet/Projections/UnstableParticles.hh"
namespace Rivet {
/// @brief mu+mu- and tau+tau- in gamma gamma
class L3_2004_I645127 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(L3_2004_I645127);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// get the mode and options
_mode =0;
if( getOption("PROCESS") == "EE" ) _mode = 0;
else if( getOption("PROCESS") == "GG") _mode = 1;
// Initialise and register projections
if(_mode==0) {
declare(GammaGammaKinematics(), "Kinematics");
declare(GammaGammaFinalState(), "FS");
declare(UnstableParticles(),"UFS");
// Book histos
book(_c_sigma_mu1, 1,1,1);
book(_c_sigma_mu2, 1,1,2);
book(_c_sigma_tau, 2,1,1);
}
else if(_mode==1) {
declare(FinalState(), "FS");
book(_sigma,"TMP/sigma",refData(3,1,1));
}
}
void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
for(const Particle &child : p.children()) {
if(child.children().empty()) {
--nRes[child.pid()];
--ncount;
}
else
findChildren(child,nRes,ncount);
}
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// stuff for e+e- collisions
double W2 = sqr(sqrtS());
if(_mode==0) {
const GammaGammaKinematics& kin = apply<GammaGammaKinematics>(event, "Kinematics");
W2 = kin.W2();
if(W2<9.*sqr(GeV) ) vetoEvent;
}
const FinalState& fs = apply<FinalState>(event, "FS");
map<long,int> nCount;
int ntotal(0);
bool fiducal = true;
for(const Particle & p : fs.particles()) {
nCount[p.pid()] += 1;
++ntotal;
if(abs(p.pid())==13) {
if(abs(cos(p.momentum().polarAngle()))>0.8) fiducal = false;
}
}
if( nCount[-13]==1 && nCount[13]==1 && ntotal==2+nCount[22]) {
if(W2<1600.*sqr(GeV) && _c_sigma_mu1) {
_c_sigma_mu2->fill(round(sqrtS()));
if(fiducal) _c_sigma_mu1->fill(round(sqrtS()));
}
if(_sigma) _sigma->fill(sqrtS());
}
if(_mode==1) return;
bool foundTauPlus = false, foundTauMinus = true;
const UnstableParticles & ufs = apply<UnstableParticles>(event, "UFS");
for (const Particle& p : ufs.particles()) {
if(p.children().empty()) continue;
// find the taus
if(abs(p.pid())==15) {
if(p.pid()== 15) foundTauMinus=true;
if(p.pid()==-15) foundTauPlus =true;
findChildren(p,nCount,ntotal);
}
}
if(!foundTauPlus || !foundTauMinus)
vetoEvent;
bool matched = true;
for(auto const & val : nCount) {
if(val.first==22) {
continue;
}
else if(val.second!=0) {
matched = false;
break;
}
}
if(matched)
_c_sigma_tau->fill(round(sqrtS()));
}
/// Normalise histograms etc., after the run
void finalize() {
// prefactor for the cross sections
double fact = crossSection()/picobarn/sumOfWeights();
if(_mode==0) {
scale(_c_sigma_mu1,fact);
scale(_c_sigma_mu2,fact);
scale(_c_sigma_tau,fact);
}
else {
fact /= 1000.;
scale(_sigma,fact);
for(unsigned int iy=1;iy<6;++iy) {
Estimate1DPtr tmp;
book(tmp,3,1,iy);
barchart(_sigma,tmp);
}
}
}
/// @}
/// @name Histograms
/// @{
BinnedHistoPtr<int> _c_sigma_mu1,_c_sigma_mu2,_c_sigma_tau;
Histo1DPtr _sigma;
unsigned int _mode;
/// @}
};
RIVET_DECLARE_PLUGIN(L3_2004_I645127);
}