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	const GammaGammaKinematics& diskin = declare(GammaGammaKinematics(), "Kinematics");
 32	declare(GammaGammaFinalState(diskin), "FS");
 33	declare(UnstableParticles(),"UFS");
 34      }
 35      else if(_mode==1) {
 36	declare(FinalState(), "FS");
 37      }
 38      // Book counters
 39      book(_c_sigma_mu1, "/TMP/sigma_mu_1");
 40      book(_c_sigma_mu2, "/TMP/sigma_mu_2");
 41      book(_c_sigma_tau, "/TMP/sigma_tau");
 42
 43    }
 44
 45    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 46      for(const Particle &child : p.children()) {
 47    	if(child.children().empty()) {
 48    	  --nRes[child.pid()];
 49    	  --ncount;
 50    	}
 51    	else
 52    	  findChildren(child,nRes,ncount);
 53      }
 54    }
 55
 56    /// Perform the per-event analysis
 57    void analyze(const Event& event) {
 58      // stuff for e+e- collisions
 59      double W2 = sqr(sqrtS());
 60      if(_mode==0) {
 61	const GammaGammaKinematics& kin = apply<GammaGammaKinematics>(event, "Kinematics");
 62	W2 = kin.W2();
 63	if(W2<9.*sqr(GeV) ) vetoEvent;
 64      }
 65      const FinalState& fs = apply<FinalState>(event, "FS");
 66      map<long,int> nCount;
 67      int ntotal(0);
 68      bool fiducal = true;
 69      for(const Particle & p : fs.particles()) {
 70     	nCount[p.pid()] += 1;
 71     	++ntotal;
 72	if(abs(p.pid())==13) {
 73	  if(abs(cos(p.momentum().polarAngle()))>0.8) fiducal = false;
 74	}
 75      }
 76      if( nCount[-13]==1 && nCount[13]==1 && ntotal==2+nCount[22]) {
 77	if(W2<1600.*sqr(GeV)) { 
 78	  _c_sigma_mu1->fill();
 79	  if(fiducal) {
 80	    _c_sigma_mu2->fill();
 81	  }
 82	} 
 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();
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==1) fact /= 1000.;
118      scale(_c_sigma_mu1,fact);
119      scale(_c_sigma_mu2,fact);
120      scale(_c_sigma_tau,fact);
121      unsigned int imin=0, imax = 3;
122      if(_mode==1) {
123	imin=3;
124	imax=4;
125      }
126      for(unsigned int ihist=imin;ihist<imax;++ihist) {
127	unsigned int id=0, iy=0;
128	double sigma = 0., error = 0.;
129	if(ihist==0) {
130	  id=1;
131	  iy=1;
132	  sigma = _c_sigma_mu2->val();
133	  error = _c_sigma_mu2->err();
134	}
135	else if(ihist==1) {
136	  id=1;
137	  iy=2;
138	  sigma = _c_sigma_mu1->val();
139	  error = _c_sigma_mu1->err();
140	}
141	else if(ihist==2) {
142	  id=2;
143	  iy=1;
144	  sigma = _c_sigma_tau->val();
145	  error = _c_sigma_tau->err();
146	}
147	else if(ihist==3) {
148	  id=3;
149	  iy=5;
150	  sigma = _c_sigma_mu1->val();
151	  error = _c_sigma_mu1->err();
152	}
153	Scatter2D temphisto(refData(id, 1, iy));
154	Scatter2DPtr  mult;
155	book(mult, id, 1, iy);
156	for (size_t b = 0; b < temphisto.numPoints(); b++) {
157	  const double x  = temphisto.point(b).x();
158	  pair<double,double> ex = temphisto.point(b).xErrs();
159	  pair<double,double> ex2 = ex;
160	  if(ex2.first ==0.) ex2. first=0.0001;
161	  if(ex2.second==0.) ex2.second=0.0001;
162	  if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
163	    mult->addPoint(x, sigma, ex, make_pair(error,error));
164	  }
165	  else {
166	    mult->addPoint(x, 0., ex, make_pair(0.,.0));
167	  }
168	}
169      }
170    }
171
172    //@}
173
174
175    /// @name Histograms
176    //@{
177    CounterPtr _c_sigma_mu1,_c_sigma_mu2,_c_sigma_tau;
178    unsigned int _mode;
179    //@}
180
181
182  };
183
184
185  // The hook for the plugin system
186  RIVET_DECLARE_PLUGIN(L3_2004_I645127);
187
188
189}