Rivet analyses
Flavour separated event shapes at 197 GeV
Experiment: L3 (LEP)
Inspire ID: 825820
Status: VALIDATED
Authors: - Peter Richardson
References: none listed
Beams: * *
Beam energies: (98.5, 98.5)GeV
Run details: - Ke+e- to hadrons
Measurement of the thrust, heavy jet mass, total and wide jet broadening, C parameter and y23 by L3 at 197 GeV. The event shapes are measured for all events, b-quark initiated events and non-b-quark initiated events.
Source
code:L3_2008_I825820.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/Hemispheres.hh"
#include "Rivet/Projections/ParisiTensor.hh"
#include "Rivet/Projections/Thrust.hh"
#define I_KNOW_THE_INITIAL_QUARKS_PROJECTION_IS_DODGY_BUT_NEED_TO_USE_IT
#include "Rivet/Projections/InitialQuarks.hh"
namespace Rivet {
/// @brief Event shapes at 197 GeV
class L3_2008_I825820 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(L3_2008_I825820);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Projections to use
const FinalState FS;
declare(FS, "FS");
const ChargedFinalState CFS;
declare(CFS, "CFS");
const Thrust thrust(FS);
declare(thrust, "Thrust");
declare(ParisiTensor(FS), "Parisi");
declare(Hemispheres(thrust), "Hemispheres");
declare(InitialQuarks(), "InitialQuarks");
declare(FastJets(FS, JetAlg::JADE), "Jets");
// histograms
book(_h_T, 1, 1, 1);
book(_h_T_udsc, 1, 1, 2);
book(_h_T_bottom, 1, 1, 3);
book(_h_rho, 2, 1, 1);
book(_h_rho_udsc, 2, 1, 2);
book(_h_rho_bottom, 2, 1, 3);
book(_h_B_T, 3, 1, 1);
book(_h_B_T_udsc, 3, 1, 2);
book(_h_B_T_bottom, 3, 1, 3);
book(_h_B_W, 4, 1, 1);
book(_h_B_W_udsc, 4, 1, 2);
book(_h_B_W_bottom, 4, 1, 3);
book(_h_C, 5, 1, 1);
book(_h_C_udsc, 5, 1, 2);
book(_h_C_bottom, 5, 1, 3);
book(_h_y23, 6, 1, 1);
book(_h_y23_udsc, 6, 1, 2);
book(_h_y23_bottom, 6, 1, 3);
book(_sumW_udsc, "_sumW_udsc");
book(_sumW_b, "_sumW_b");
}
/// Perform the per-event analysis
void analyze(const Event& event) {
int flavour = 0;
const InitialQuarks& iqf = apply<InitialQuarks>(event, "InitialQuarks");
Particles quarks;
if (iqf.particles().size() == 2) {
flavour = iqf.particles().front().abspid();
quarks = iqf.particles();
}
else {
map<int, Particle> quarkmap;
for (const Particle& p : iqf.particles()) {
if (quarkmap.find(p.pid()) == quarkmap.end())
quarkmap[p.pid()] = p;
else if (quarkmap[p.pid()].E() < p.E())
quarkmap[p.pid()] = p;
}
double max_energy = 0.;
for (int i = 1; i <= 5; ++i) {
double energy = 0.;
if (quarkmap.find(i) != quarkmap.end()) energy += quarkmap[i].E();
if (quarkmap.find(-i) != quarkmap.end()) energy += quarkmap[-i].E();
if (energy > max_energy) flavour = i;
}
if (quarkmap.find(flavour) != quarkmap.end()) quarks.push_back(quarkmap[flavour]);
if (quarkmap.find(-flavour) != quarkmap.end()) quarks.push_back(quarkmap[-flavour]);
}
// Flavour label
int iflav = (flavour == PID::DQUARK || flavour == PID::UQUARK || flavour == PID::SQUARK
|| flavour == PID::CQUARK)
? 1
: (flavour == PID::BQUARK) ? 5
: 0;
// Update weight sums
if (iflav == 1) {
_sumW_udsc->fill();
}
else if (iflav == 5) {
_sumW_b->fill();
}
// Thrust
const Thrust& thrust = apply<Thrust>(event, "Thrust");
if (iflav == 1) {
_h_T_udsc->fill(thrust.thrust());
}
else if (iflav == 5) {
_h_T_bottom->fill(thrust.thrust());
}
_h_T->fill(thrust.thrust());
// The hemisphere variables
const Hemispheres& hemisphere = apply<Hemispheres>(event, "Hemispheres");
if (iflav == 1) {
_h_rho_udsc->fill(hemisphere.scaledM2high());
_h_B_T_udsc->fill(hemisphere.Bsum());
_h_B_W_udsc->fill(hemisphere.Bmax());
}
else if (iflav == 5) {
_h_rho_bottom->fill(hemisphere.scaledM2high());
_h_B_T_bottom->fill(hemisphere.Bsum());
_h_B_W_bottom->fill(hemisphere.Bmax());
}
_h_rho->fill(hemisphere.scaledM2high());
_h_B_T->fill(hemisphere.Bsum());
_h_B_W->fill(hemisphere.Bmax());
const ParisiTensor& parisi = apply<ParisiTensor>(event, "Parisi");
if (iflav == 1) {
_h_C_udsc->fill(parisi.C());
}
else if (iflav == 5) {
_h_C_bottom->fill(parisi.C());
}
_h_C->fill(parisi.C());
// y_23
const FastJets& durjet = apply<FastJets>(event, "Jets");
const double y23 = durjet.clusterSeq()->exclusive_ymerge_max(2);
if (iflav == 1) {
_h_y23_udsc->fill(y23);
}
else if (iflav == 5) {
_h_y23_bottom->fill(y23);
}
_h_y23->fill(y23);
}
void finalize() {
scale(_h_T_udsc, 1. / *_sumW_udsc);
scale(_h_T_bottom, 1. / *_sumW_b);
normalize(_h_T);
scale(_h_rho_udsc, 1. / *_sumW_udsc);
scale(_h_rho_bottom, 1. / *_sumW_b);
normalize(_h_rho);
scale(_h_B_T_udsc, 1. / *_sumW_udsc);
scale(_h_B_T_bottom, 1. / *_sumW_b);
normalize(_h_B_T);
scale(_h_B_W_udsc, 1. / *_sumW_udsc);
scale(_h_B_W_bottom, 1. / *_sumW_b);
normalize(_h_B_W);
scale(_h_C_udsc, 1. / *_sumW_udsc);
scale(_h_C_bottom, 1. / *_sumW_b);
normalize(_h_C);
scale(_h_y23_udsc, 1. / *_sumW_udsc);
scale(_h_y23_bottom, 1. / *_sumW_b);
normalize(_h_y23);
}
/// @}
/// @name Histograms
/// @{
Histo1DPtr _h_T, _h_T_udsc, _h_T_bottom;
Histo1DPtr _h_rho, _h_rho_udsc, _h_rho_bottom;
Histo1DPtr _h_B_T, _h_B_T_udsc, _h_B_T_bottom;
Histo1DPtr _h_B_W, _h_B_W_udsc, _h_B_W_bottom;
Histo1DPtr _h_C, _h_C_udsc, _h_C_bottom;
Histo1DPtr _h_y23, _h_y23_udsc, _h_y23_bottom;
CounterPtr _sumW_udsc, _sumW_b;
/// @}
};
RIVET_DECLARE_PLUGIN(L3_2008_I825820);
}