Rivet analyses


title: 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

```c++ // -- 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 (const auto& 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);

} ```