Rivet analyses


title: ALEPH_1996_I428072

Studies of QCD with the ALEPH detector.

Experiment: ALEPH (LEP 1)

Inspire ID: 428072

Status: VALIDATED

Authors: - Holger Schulz

References: - Phys. Rept., 294, 1--165 (1998)

Beams: e+ e-

Beam energies: (45.6, 45.6)GeV

Run details: - Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)

Summary paper of QCD results as measured by ALEPH at LEP 1. The publication includes various event shape variables, multiplicities (identified particles and inclusive), and particle spectra.

Source code:ALEPH_1996_I428072.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/Beam.hh"

include "Rivet/Projections/ChargedFinalState.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/Hemispheres.hh"

include "Rivet/Projections/ParisiTensor.hh"

include "Rivet/Projections/Sphericity.hh"

include "Rivet/Projections/Thrust.hh"

include "Rivet/Projections/UnstableParticles.hh"

namespace Rivet {

/// @brief ALEPH QCD study with event shapes and identified particles /// /// @author Holger Schulz class ALEPH_1996_I428072 : public Analysis { public:

RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_1996_I428072);


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

void init() {
  // Set up projections
  declare(Beam(), "Beams");
  const ChargedFinalState cfs;
  declare(cfs, "FS");
  declare(UnstableParticles(), "UFS");
  declare(FastJets(cfs, JetAlg::DURHAM, 0.7), "DurhamJets");
  declare(Sphericity(cfs), "Sphericity");
  declare(ParisiTensor(cfs), "Parisi");
  const Thrust thrust(cfs);
  declare(thrust, "Thrust");
  declare(Hemispheres(thrust), "Hemispheres");

  // Book histograms
  book(_histSphericity, 1, 1, 1);
  book(_histAplanarity, 2, 1, 1);

  book(_hist1MinusT, 3, 1, 1);
  book(_histTMinor, 4, 1, 1);

  book(_histY3, 5, 1, 1);
  book(_histHeavyJetMass, 6, 1, 1);
  book(_histCParam, 7, 1, 1);
  book(_histOblateness, 8, 1, 1);

  book(_histScaledMom, 9, 1, 1);
  book(_histRapidityT, 10, 1, 1);

  book(_histPtSIn, 11, 1, 1);
  book(_histPtSOut, 12, 1, 1);

  book(_histLogScaledMom, 17, 1, 1);

  book(_histChMult, 18, 1, 1);

  book(_histMeanChMult, 19, 1, 1);
  book(_histMeanChMultRapt05, 20, 1, 1);
  book(_histMeanChMultRapt10, 21, 1, 1);
  book(_histMeanChMultRapt15, 22, 1, 1);
  book(_histMeanChMultRapt20, 23, 1, 1);


  // Particle spectra
  book(_histMultiPiPlus, 25, 1, 1);
  book(_histMultiKPlus, 26, 1, 1);
  book(_histMultiP, 27, 1, 1);
  book(_histMultiPhoton, 28, 1, 1);
  book(_histMultiPi0, 29, 1, 1);
  book(_histMultiEta, 30, 1, 1);
  book(_histMultiEtaPrime, 31, 1, 1);
  book(_histMultiK0, 32, 1, 1);
  book(_histMultiLambda0, 33, 1, 1);
  book(_histMultiXiMinus, 34, 1, 1);
  book(_histMultiSigma1385Plus, 35, 1, 1);
  book(_histMultiXi1530_0, 36, 1, 1);
  book(_histMultiRho, 37, 1, 1);
  book(_histMultiOmega782, 38, 1, 1);
  book(_histMultiKStar892_0, 39, 1, 1);
  book(_histMultiPhi, 40, 1, 1);

  book(_histMultiKStar892Plus, 43, 1, 1);

  // Mean multiplicities
  book(_histMeanMultiPi0, 44, 1, 2);
  book(_histMeanMultiEta, 44, 1, 3);
  book(_histMeanMultiEtaPrime, 44, 1, 4);
  book(_histMeanMultiK0, 44, 1, 5);
  book(_histMeanMultiRho, 44, 1, 6);
  book(_histMeanMultiOmega782, 44, 1, 7);
  book(_histMeanMultiPhi, 44, 1, 8);
  book(_histMeanMultiKStar892Plus, 44, 1, 9);
  book(_histMeanMultiKStar892_0, 44, 1, 10);
  book(_histMeanMultiLambda0, 44, 1, 11);
  book(_histMeanMultiSigma0, 44, 1, 12);
  book(_histMeanMultiXiMinus, 44, 1, 13);
  book(_histMeanMultiSigma1385Plus, 44, 1, 14);
  book(_histMeanMultiXi1530_0, 44, 1, 15);
  book(_histMeanMultiOmegaOmegaBar, 44, 1, 16);
  book(_weightedTotalPartNum, "/TMP/TotalPartNum");

  book(_weightedTotalPartNum, "/TMP/weightedTotalPartNum");
}


void analyze(const Event& e) {
  // First, veto on leptonic events by requiring at least 4 charged FS particles
  const FinalState& fs = apply<FinalState>(e, "FS");
  const size_t numParticles = fs.particles().size();

  // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
  if (numParticles < 2) {
    MSG_DEBUG("Failed leptonic event cut");
    vetoEvent;
  }
  MSG_DEBUG("Passed leptonic event cut");

  _weightedTotalPartNum->fill(numParticles);

  // Get beams and average beam momentum
  const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
  const double meanBeamMom = (beams.first.p3().mod() + beams.second.p3().mod()) / 2.0;
  MSG_DEBUG("Avg beam momentum = " << meanBeamMom);

  // Thrusts
  MSG_DEBUG("Calculating thrust");
  const Thrust& thrust = apply<Thrust>(e, "Thrust");
  _hist1MinusT->fill(1 - thrust.thrust());
  _histTMinor->fill(thrust.thrustMinor());
  _histOblateness->fill(thrust.oblateness());

  // Jets
  MSG_DEBUG("Calculating differential jet rate plots:");
  const FastJets& durjet = apply<FastJets>(e, "DurhamJets");
  if (durjet.clusterSeq()) {
    double y3 = durjet.clusterSeq()->exclusive_ymerge_max(2);
    if (y3 > 0.0) _histY3->fill(-1. * std::log(y3));
  }

  // Sphericities
  MSG_DEBUG("Calculating sphericity");
  const Sphericity& sphericity = apply<Sphericity>(e, "Sphericity");
  _histSphericity->fill(sphericity.sphericity());
  _histAplanarity->fill(sphericity.aplanarity());

  // C param
  MSG_DEBUG("Calculating Parisi params");
  const ParisiTensor& parisi = apply<ParisiTensor>(e, "Parisi");
  _histCParam->fill(parisi.C());

  // Hemispheres
  MSG_DEBUG("Calculating hemisphere variables");
  const Hemispheres& hemi = apply<Hemispheres>(e, "Hemispheres");
  _histHeavyJetMass->fill(hemi.scaledM2high());

  // Iterate over all the charged final state particles.
  double rapt05 = 0.;
  double rapt10 = 0.;
  double rapt15 = 0.;
  double rapt20 = 0.;
  MSG_DEBUG("About to iterate over charged FS particles");
  for (const Particle& p : fs.particles()) {
    // Get momentum and energy of each particle.
    const Vector3 mom3 = p.p3();
    const double energy = p.E();

    // Scaled momenta.
    const double mom = mom3.mod();
    const double scaledMom = mom / meanBeamMom;
    const double logInvScaledMom = -std::log(scaledMom);
    _histLogScaledMom->fill(logInvScaledMom);
    _histScaledMom->fill(scaledMom);

    // Get momenta components w.r.t. thrust and sphericity.
    const double momT = dot(thrust.thrustAxis(), mom3);
    const double pTinS = dot(mom3, sphericity.sphericityMajorAxis());
    const double pToutS = dot(mom3, sphericity.sphericityMinorAxis());
    _histPtSIn->fill(fabs(pTinS / GeV));
    _histPtSOut->fill(fabs(pToutS / GeV));

    // Calculate rapidities w.r.t. thrust.
    const double rapidityT = 0.5 * std::log((energy + momT) / (energy - momT));
    _histRapidityT->fill(fabs(rapidityT));
    if (std::fabs(rapidityT) <= 0.5) {
      rapt05 += 1.0;
    }
    if (std::fabs(rapidityT) <= 1.0) {
      rapt10 += 1.0;
    }
    if (std::fabs(rapidityT) <= 1.5) {
      rapt15 += 1.0;
    }
    if (std::fabs(rapidityT) <= 2.0) {
      rapt20 += 1.0;
    }
  }

  _histChMult->fill(numParticles);

  _histMeanChMultRapt05->fill(Ecms, rapt05);
  _histMeanChMultRapt10->fill(Ecms, rapt10);
  _histMeanChMultRapt15->fill(Ecms, rapt15);
  _histMeanChMultRapt20->fill(Ecms, rapt20);
  _histMeanChMult->fill(Ecms, numParticles);


  //// Final state of unstable particles to get particle spectra
  const UnstableParticles& ufs = apply<UnstableParticles>(e, "UFS");
  for (Particles::const_iterator p = ufs.particles().begin(); p != ufs.particles().end(); ++p) {
    const Vector3 mom3 = p->momentum().p3();
    int id = abs(p->pid());
    const double mom = mom3.mod();
    const double energy = p->momentum().E();
    const double scaledMom = mom / meanBeamMom;
    const double scaledEnergy = energy / meanBeamMom; // meanBeamMom is approximately beam energy
    switch (id) {
      case 22: _histMultiPhoton->fill(-1. * std::log(scaledMom)); break;
      case -321:
      case 321: _histMultiKPlus->fill(scaledMom); break;
      case 211:
      case -211: _histMultiPiPlus->fill(scaledMom); break;
      case 2212:
      case -2212: _histMultiP->fill(scaledMom); break;
      case 111:
        _histMultiPi0->fill(scaledMom);
        _histMeanMultiPi0->fill(Ecms);
        break;
      case 221:
        if (scaledMom >= 0.1) {
          _histMultiEta->fill(scaledEnergy);
          _histMeanMultiEta->fill(Ecms);
        }
        break;
      case 331:
        if (scaledMom >= 0.1) {
          _histMultiEtaPrime->fill(scaledEnergy);
          _histMeanMultiEtaPrime->fill(Ecms);
        }
        break;
      case 130: //klong
      case 310: //kshort
        _histMultiK0->fill(scaledMom);
        _histMeanMultiK0->fill(Ecms);
        break;
      case 113:
        _histMultiRho->fill(scaledMom);
        _histMeanMultiRho->fill(Ecms);
        break;
      case 223:
        _histMultiOmega782->fill(scaledMom);
        _histMeanMultiOmega782->fill(Ecms);
        break;
      case 333:
        _histMultiPhi->fill(scaledMom);
        _histMeanMultiPhi->fill(Ecms);
        break;
      case 313:
      case -313:
        _histMultiKStar892_0->fill(scaledMom);
        _histMeanMultiKStar892_0->fill(Ecms);
        break;
      case 323:
      case -323:
        _histMultiKStar892Plus->fill(scaledEnergy);
        _histMeanMultiKStar892Plus->fill(Ecms);
        break;
      case 3122:
      case -3122:
        _histMultiLambda0->fill(scaledMom);
        _histMeanMultiLambda0->fill(Ecms);
        break;
      case 3212:
      case -3212: _histMeanMultiSigma0->fill(Ecms); break;
      case 3312:
      case -3312:
        _histMultiXiMinus->fill(scaledEnergy);
        _histMeanMultiXiMinus->fill(Ecms);
        break;
      case 3114:
      case -3114:
      case 3224:
      case -3224:
        _histMultiSigma1385Plus->fill(scaledEnergy);
        _histMeanMultiSigma1385Plus->fill(Ecms);
        break;
      case 3324:
      case -3324:
        _histMultiXi1530_0->fill(scaledEnergy);
        _histMeanMultiXi1530_0->fill(Ecms);
        break;
      case 3334: _histMeanMultiOmegaOmegaBar->fill(Ecms); break;
    }
  }
}


/// Finalize
void finalize() {
  // Normalize inclusive single particle distributions to the average number
  // of charged particles per event.
  const double avgNumParts = _weightedTotalPartNum->sumW() / sumOfWeights();

  normalize(_histPtSIn, avgNumParts);
  normalize(_histPtSOut, avgNumParts);

  normalize(_histRapidityT, avgNumParts);
  normalize(_histY3);

  normalize(_histLogScaledMom, avgNumParts);
  normalize(_histScaledMom, avgNumParts);

  // particle spectra
  scale(_histMultiPiPlus, 1. / sumOfWeights());
  scale(_histMultiKPlus, 1. / sumOfWeights());
  scale(_histMultiP, 1. / sumOfWeights());
  scale(_histMultiPhoton, 1. / sumOfWeights());
  scale(_histMultiPi0, 1. / sumOfWeights());
  scale(_histMultiEta, 1. / sumOfWeights());
  scale(_histMultiEtaPrime, 1. / sumOfWeights());
  scale(_histMultiK0, 1. / sumOfWeights());
  scale(_histMultiLambda0, 1. / sumOfWeights());
  scale(_histMultiXiMinus, 1. / sumOfWeights());
  scale(_histMultiSigma1385Plus, 1. / sumOfWeights());
  scale(_histMultiXi1530_0, 1. / sumOfWeights());
  scale(_histMultiRho, 1. / sumOfWeights());
  scale(_histMultiOmega782, 1. / sumOfWeights());
  scale(_histMultiKStar892_0, 1. / sumOfWeights());
  scale(_histMultiPhi, 1. / sumOfWeights());

  scale(_histMultiKStar892Plus, 1. / sumOfWeights());

  // event shape
  normalize(_hist1MinusT);
  normalize(_histTMinor);
  normalize(_histOblateness);

  normalize(_histSphericity);
  normalize(_histAplanarity);
  normalize(_histHeavyJetMass);
  normalize(_histCParam);


  // mean multiplicities
  scale(_histChMult, 1.0 / sumOfWeights()); // taking into account the binwidth of 2
  scale(_histMeanChMult, 1.0 / sumOfWeights());
  scale(_histMeanChMultRapt05, 1.0 / sumOfWeights());
  scale(_histMeanChMultRapt10, 1.0 / sumOfWeights());
  scale(_histMeanChMultRapt15, 1.0 / sumOfWeights());
  scale(_histMeanChMultRapt20, 1.0 / sumOfWeights());


  scale(_histMeanMultiPi0, 1.0 / sumOfWeights());
  scale(_histMeanMultiEta, 1.0 / sumOfWeights());
  scale(_histMeanMultiEtaPrime, 1.0 / sumOfWeights());
  scale(_histMeanMultiK0, 1.0 / sumOfWeights());
  scale(_histMeanMultiRho, 1.0 / sumOfWeights());
  scale(_histMeanMultiOmega782, 1.0 / sumOfWeights());
  scale(_histMeanMultiPhi, 1.0 / sumOfWeights());
  scale(_histMeanMultiKStar892Plus, 1.0 / sumOfWeights());
  scale(_histMeanMultiKStar892_0, 1.0 / sumOfWeights());
  scale(_histMeanMultiLambda0, 1.0 / sumOfWeights());
  scale(_histMeanMultiSigma0, 1.0 / sumOfWeights());
  scale(_histMeanMultiXiMinus, 1.0 / sumOfWeights());
  scale(_histMeanMultiSigma1385Plus, 1.0 / sumOfWeights());
  scale(_histMeanMultiXi1530_0, 1.0 / sumOfWeights());
  scale(_histMeanMultiOmegaOmegaBar, 1.0 / sumOfWeights());
}

/// @}

private:

/// Store the weighted sums of numbers of charged / charged+neutral
/// particles - used to calculate average number of particles for the
/// inclusive single particle distributions' normalisations.
CounterPtr _weightedTotalPartNum;

const string Ecms = "91.2";

/// @name Histograms
/// @{
Histo1DPtr _histSphericity;
Histo1DPtr _histAplanarity;

Histo1DPtr _hist1MinusT;
Histo1DPtr _histTMinor;

Histo1DPtr _histY3;
Histo1DPtr _histHeavyJetMass;
Histo1DPtr _histCParam;
Histo1DPtr _histOblateness;

Histo1DPtr _histScaledMom;
Histo1DPtr _histRapidityT;

Histo1DPtr _histPtSIn;
Histo1DPtr _histPtSOut;

Histo1DPtr _histJetRate2Durham;
Histo1DPtr _histJetRate3Durham;
Histo1DPtr _histJetRate4Durham;
Histo1DPtr _histJetRate5Durham;

Histo1DPtr _histLogScaledMom;

BinnedHistoPtr<int> _histChMult;

Histo1DPtr _histMultiPiPlus;
Histo1DPtr _histMultiKPlus;
Histo1DPtr _histMultiP;
Histo1DPtr _histMultiPhoton;
Histo1DPtr _histMultiPi0;
Histo1DPtr _histMultiEta;
Histo1DPtr _histMultiEtaPrime;
Histo1DPtr _histMultiK0;
Histo1DPtr _histMultiLambda0;
Histo1DPtr _histMultiXiMinus;
Histo1DPtr _histMultiSigma1385Plus;
Histo1DPtr _histMultiXi1530_0;
Histo1DPtr _histMultiRho;
Histo1DPtr _histMultiOmega782;
Histo1DPtr _histMultiKStar892_0;
Histo1DPtr _histMultiPhi;
Histo1DPtr _histMultiKStar892Plus;

// mean multiplicities
BinnedHistoPtr<string> _histMeanChMult;
BinnedHistoPtr<string> _histMeanChMultRapt05;
BinnedHistoPtr<string> _histMeanChMultRapt10;
BinnedHistoPtr<string> _histMeanChMultRapt15;
BinnedHistoPtr<string> _histMeanChMultRapt20;

BinnedHistoPtr<string> _histMeanMultiPi0;
BinnedHistoPtr<string> _histMeanMultiEta;
BinnedHistoPtr<string> _histMeanMultiEtaPrime;
BinnedHistoPtr<string> _histMeanMultiK0;
BinnedHistoPtr<string> _histMeanMultiRho;
BinnedHistoPtr<string> _histMeanMultiOmega782;
BinnedHistoPtr<string> _histMeanMultiPhi;
BinnedHistoPtr<string> _histMeanMultiKStar892Plus;
BinnedHistoPtr<string> _histMeanMultiKStar892_0;
BinnedHistoPtr<string> _histMeanMultiLambda0;
BinnedHistoPtr<string> _histMeanMultiSigma0;
BinnedHistoPtr<string> _histMeanMultiXiMinus;
BinnedHistoPtr<string> _histMeanMultiSigma1385Plus;
BinnedHistoPtr<string> _histMeanMultiXi1530_0;
BinnedHistoPtr<string> _histMeanMultiOmegaOmegaBar;
/// @}

};

RIVET_DECLARE_ALIASED_PLUGIN(ALEPH_1996_I428072, ALEPH_1996_S3486095);

} ```

Aliases: - ALEPH_1996_S3486095