rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

L3_2004_I645127

$\mu^+\mu^-$ and $\tau^+\tau^-$ 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^-\to e^+e^-\gamma\gamma\to e^+e^-\to e^+e^-\mu^+\mu^-,\ \tau^+\tau^-$. This analysis can test approximations used to simulate this process, but also is a prototype for analyses of $\gamma\gamma$ 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 $\gamma\gamma\to \mu^+\mu^-$.

Source code: L3_2004_I645127.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/GammaGammaFinalState.hh"
  5#include "Rivet/Projections/UnstableParticles.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// @brief mu+mu- and tau+tau- in gamma gamma
 11  class L3_2004_I645127 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(L3_2004_I645127);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23
 24      // get the mode and options
 25      _mode =0;
 26      if( getOption("PROCESS") == "EE" ) _mode = 0;
 27      else if( getOption("PROCESS") == "GG") _mode = 1;
 28
 29      // Initialise and register projections
 30      if(_mode==0) {
 31	declare(GammaGammaKinematics(), "Kinematics");
 32        declare(GammaGammaFinalState(), "FS");
 33        declare(UnstableParticles(),"UFS");
 34        // Book histos
 35        book(_c_sigma_mu1, 1,1,1);
 36        book(_c_sigma_mu2, 1,1,2);
 37        book(_c_sigma_tau, 2,1,1);
 38      }
 39      else if(_mode==1) {
 40        declare(FinalState(), "FS");
 41        book(_sigma,"TMP/sigma",refData(3,1,1));
 42      }
 43
 44    }
 45
 46    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 47      for(const Particle &child : p.children()) {
 48    	if(child.children().empty()) {
 49    	  --nRes[child.pid()];
 50    	  --ncount;
 51    	}
 52    	else
 53    	  findChildren(child,nRes,ncount);
 54      }
 55    }
 56
 57    /// Perform the per-event analysis
 58    void analyze(const Event& event) {
 59      // stuff for e+e- collisions
 60      double W2 = sqr(sqrtS());
 61      if(_mode==0) {
 62	const GammaGammaKinematics& kin = apply<GammaGammaKinematics>(event, "Kinematics");
 63	W2 = kin.W2();
 64	if(W2<9.*sqr(GeV) ) vetoEvent;
 65      }
 66      const FinalState& fs = apply<FinalState>(event, "FS");
 67      map<long,int> nCount;
 68      int ntotal(0);
 69      bool fiducal = true;
 70      for(const Particle & p : fs.particles()) {
 71     	nCount[p.pid()] += 1;
 72     	++ntotal;
 73	if(abs(p.pid())==13) {
 74	  if(abs(cos(p.momentum().polarAngle()))>0.8) fiducal = false;
 75	}
 76      }
 77      if( nCount[-13]==1 && nCount[13]==1 && ntotal==2+nCount[22]) {
 78	if(W2<1600.*sqr(GeV) && _c_sigma_mu1) {
 79          _c_sigma_mu2->fill(round(sqrtS()));
 80          if(fiducal) _c_sigma_mu1->fill(round(sqrtS()));
 81        }
 82        if(_sigma) _sigma->fill(sqrtS());
 83      }
 84      if(_mode==1) return;
 85      bool foundTauPlus = false, foundTauMinus = true;
 86      const UnstableParticles & ufs = apply<UnstableParticles>(event, "UFS");
 87      for (const Particle& p : ufs.particles()) {
 88	if(p.children().empty()) continue;
 89    	// find the taus
 90     	if(abs(p.pid())==15) {
 91	  if(p.pid()== 15) foundTauMinus=true;
 92	  if(p.pid()==-15) foundTauPlus =true;
 93     	  findChildren(p,nCount,ntotal);
 94	}
 95      }
 96      if(!foundTauPlus || !foundTauMinus)
 97	vetoEvent;
 98      bool matched = true;
 99      for(auto const & val : nCount) {
100	if(val.first==22) {
101	  continue;
102	}
103	else if(val.second!=0) {
104	  matched = false;
105	  break;
106	}
107      }
108      if(matched)
109	_c_sigma_tau->fill(round(sqrtS()));
110    }
111
112
113    /// Normalise histograms etc., after the run
114    void finalize() {
115      // prefactor for the cross sections
116      double fact  = crossSection()/picobarn/sumOfWeights();
117      if(_mode==0) {
118        scale(_c_sigma_mu1,fact);
119        scale(_c_sigma_mu2,fact);
120        scale(_c_sigma_tau,fact);
121      }
122      else {
123        fact /= 1000.;
124        scale(_sigma,fact);
125        for(unsigned int iy=1;iy<6;++iy) {
126          Estimate1DPtr tmp;
127          book(tmp,3,1,iy);
128          barchart(_sigma,tmp);
129        }
130      }
131    }
132
133    /// @}
134
135
136    /// @name Histograms
137    /// @{
138    BinnedHistoPtr<int> _c_sigma_mu1,_c_sigma_mu2,_c_sigma_tau;
139    Histo1DPtr _sigma;
140    unsigned int _mode;
141    /// @}
142
143
144  };
145
146
147  RIVET_DECLARE_PLUGIN(L3_2004_I645127);
148
149
150}