Rivet analyses


title: ALEPH_2000_I507531

Measurement of $\pi^0$, $\eta$, $\eta^\prime$, $K^0_S$ and $\Lambda^0$ spectra in two and three jet events

Experiment: ALEPH (LEP)

Inspire ID: 507531

Status: VALIDATED

Authors: - Peter Richardson

References: - Eur.Phys.J. C16 (2000) 613

Beams: e- e+

Beam energies: (45.6, 45.6)GeV

Run details: - e+e- -> hadrons

Measurement of $\pi^0$, $\eta$, $\eta^\prime$, $K^0_S$ and $\Lambda^0$ spectra in two and three jet events. In addition to the normal inclusive spectra the spectra in individual jets are measured for three jet events.

Source code:ALEPH_2000_I507531.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/Beam.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief pi, eta, eta', K0, lambda spectra class ALEPH_2000_I507531 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_2000_I507531);


/// @name Analysis methods
/// @{

/// Book histograms and initialise projections before the run
void init() {

  // Projections
  declare(Beam(), "Beams");
  declare(UnstableParticles(), "UFS");
  declare(FinalState(), "FS");

  // Histograms
  // incl
  book(_h_pi0, 1, 1, 1);
  book(_h_eta, 2, 1, 1);
  book(_h_etaP, 3, 1, 1);
  book(_h_K0, 16, 1, 1);
  book(_h_lam, 17, 1, 1);
  // two jet
  book(_h_2_pi0, 4, 1, 1);
  book(_h_2_eta, 5, 1, 1);
  book(_h_2_etaP, 6, 1, 1);
  book(_h_2_K0, 18, 1, 1);
  book(_h_2_lam, 19, 1, 1);
  // three jet
  book(_h_3_pi0[0], 7, 1, 1);
  book(_h_3_pi0[1], 8, 1, 1);
  book(_h_3_pi0[2], 9, 1, 1);
  book(_h_3_eta[0], 10, 1, 1);
  book(_h_3_eta[1], 11, 1, 1);
  book(_h_3_eta[2], 12, 1, 1);
  book(_h_3_etaP[0], 13, 1, 1);
  book(_h_3_etaP[1], 14, 1, 1);
  book(_h_3_etaP[2], 15, 1, 1);
  book(_h_3_K0[0], 20, 1, 1);
  book(_h_3_K0[1], 21, 1, 1);
  book(_h_3_K0[2], 22, 1, 1);
  book(_h_3_lam[0], 23, 1, 1);
  book(_h_3_lam[1], 24, 1, 1);
  book(_h_3_lam[2], 25, 1, 1);
  book(_w2, "/TMP/W2");
  book(_w3, "/TMP/W3");
}

void findDecayProducts(const Particle& parent, Particles& decay) {
  for (const Particle& child : parent.children()) {
    if (child.children().empty()) {
      decay.push_back(child);
    }
    else {
      findDecayProducts(child, decay);
    }
  }
}

/// Perform the per-event analysis
void analyze(const Event& event) {
  // Get beams and average beam momentum
  const ParticlePair& beams = apply<Beam>(event, "Beams").beams();
  const double meanBeamMom = (beams.first.p3().mod() + beams.second.p3().mod()) / 2.0;

  Particles decay, fs;
  // unstable particles
  const UnstableParticles ufs = apply<UnstableParticles>(event, "UFS");
  for (const Particle& part : ufs.particles(Cuts::pid == 111 or Cuts::pid == 221 or Cuts::pid == 331
                                            or Cuts::pid == 310 or Cuts::abspid == 3122)) {
    fs.push_back(part);
    findDecayProducts(part, decay);
  }
  // FS particles
  for (const Particle& part : apply<FinalState>(event, "FS").particles()) {
    bool skip = false;
    for (const Particle& dec : decay) {
      if (dec.genParticle() == part.genParticle()) {
        skip = true;
        break;
      }
    }
    if (skip) continue;
    fs.push_back(part);
  }
  // Definition of the Durham algorithm
  fastjet::JetDefinition durham_def(fastjet::ee_kt_algorithm, fastjet::E_scheme, fastjet::Best);
  // pseudojets
  vector<fastjet::PseudoJet> input_particles;
  // Pseudo-jets from the non photons
  unsigned int ix = 0;
  for (const Particle& p : fs) {
    const FourMomentum p4 = p.momentum();
    input_particles.push_back(fastjet::PseudoJet(p4.px(), p4.py(), p4.pz(), p4.E()));
    input_particles.back().set_user_index(ix);
    ++ix;
  }
  // cluster the jets
  fastjet::ClusterSequence clust_seq(input_particles, durham_def);
  PseudoJets jets = fastjet::sorted_by_E(clust_seq.exclusive_jets_ycut(0.01));
  if (jets.size() == 2)
    _w2->fill();
  else if (jets.size() == 3)
    _w3->fill();
  ix = 0;
  for (const Particle& part : fs) {
    double xE = part.momentum().E() / meanBeamMom;
    double xP = part.momentum().p3().mod() / meanBeamMom;
    int ijet = jets.size() != 3 ? -1 : findJet(ix, jets);
    if (part.pid() == 111) {
      _h_pi0->fill(xE);
      if (jets.size() == 2) {
        _h_2_pi0->fill(xE);
      }
      else if (jets.size() == 3) {
        _h_3_pi0[ijet]->fill(xE);
      }
    }
    else if (part.pid() == 221) {
      _h_eta->fill(xE);
      if (jets.size() == 2) {
        _h_2_eta->fill(xE);
      }
      else if (jets.size() == 3) {
        _h_3_eta[ijet]->fill(xE);
      }
    }
    else if (part.pid() == 331) {
      _h_etaP->fill(xE);
      if (jets.size() == 2) {
        _h_2_etaP->fill(xE);
      }
      else if (jets.size() == 3) {
        _h_3_etaP[ijet]->fill(xE);
      }
    }
    else if (part.pid() == 310) {
      double xi = -log(xP);
      _h_K0->fill(xi);
      if (jets.size() == 2) {
        _h_2_K0->fill(xi);
      }
      else if (jets.size() == 3) {
        _h_3_K0[ijet]->fill(xi);
      }
    }
    else if (part.abspid() == 3122) {
      double xi = -log(xP);
      _h_lam->fill(xi);
      if (jets.size() == 2) {
        _h_2_lam->fill(xi);
      }
      else if (jets.size() == 3) {
        _h_3_lam[ijet]->fill(xi);
      }
    }
    else {
      break;
    }
    ix += 1;
  }
}

int findJet(int id, const PseudoJets& jets) {
  for (unsigned int ijet = 0; ijet < jets.size(); ++ijet) {
    for (const PseudoJet& con : jets[ijet].constituents()) {
      if (con.user_index() == id) return ijet;
    }
  }
  return -1;
}


/// Normalise histograms etc., after the run
void finalize() {
  scale(_h_pi0, 1. / sumOfWeights());
  scale(_h_eta, 1. / sumOfWeights());
  scale(_h_etaP, 1. / sumOfWeights());
  scale(_h_K0, 1. / sumOfWeights());
  scale(_h_lam, 1. / sumOfWeights());
  scale(_h_2_pi0, 1. / *_w2);
  scale(_h_2_eta, 1. / *_w2);
  scale(_h_2_etaP, 1. / *_w2);
  scale(_h_2_K0, 1. / *_w2);
  scale(_h_2_lam, 1. / *_w2);
  for (unsigned int ix = 0; ix < 3; ++ix) {
    scale(_h_3_pi0[ix], 1. / *_w3);
    scale(_h_3_eta[ix], 1. / *_w3);
    scale(_h_3_etaP[ix], 1. / *_w3);
    scale(_h_3_K0[ix], 1. / *_w3);
    scale(_h_3_lam[ix], 1. / *_w3);
  }
}

/// @}


/// @name Histograms
/// @{
Histo1DPtr _h_pi0, _h_eta, _h_etaP, _h_K0, _h_lam;
Histo1DPtr _h_2_pi0, _h_2_eta, _h_2_etaP, _h_2_K0, _h_2_lam;
Histo1DPtr _h_3_pi0[3], _h_3_eta[3], _h_3_etaP[3], _h_3_K0[3], _h_3_lam[3];
CounterPtr _w2, _w3;
/// @}

};

RIVET_DECLARE_PLUGIN(ALEPH_2000_I507531);

} ```