rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ALEPH_2004_S5765862

Jet rates and event shapes at LEP I and II
Experiment: ALEPH (LEP Run 1 and 2)
Inspire ID: 636645
Status: VALIDATED
Authors:
  • Frank Siegert
References: Beams: e+ e-
Beam energies: (45.6, 45.6); (66.5, 66.5); (80.5, 80.5); (86.0, 86.0); (91.5, 91.5); (94.5, 94.5); (98.5, 98.5); (100.0, 100.0); (103.0, 103.0) GeV
Run details:
  • $e^+ e^- \to$ jet jet (+ jets)

Jet rates, event-shape variables and inclusive charged particle spectra are measured in $e^+ e^-$ collisions at CMS energies between 91 and 209 GeV. The previously published data at 91.2 GeV and 133 GeV have been re-processed and the higher energy data are presented here for the first time. Note that the data have been corrected to include neutrinos.

Source code: ALEPH_2004_S5765862.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/Thrust.hh"
#include "Rivet/Projections/Sphericity.hh"
#include "Rivet/Projections/ParisiTensor.hh"
#include "Rivet/Projections/Hemispheres.hh"
#include "Rivet/Projections/Beam.hh"

namespace Rivet {


  /// @brief ALEPH jet rates and event shapes at LEP 1 and 2
  class ALEPH_2004_S5765862 : public Analysis {
  public:

    ALEPH_2004_S5765862()
      : Analysis("ALEPH_2004_S5765862") , _initialisedJets(false),
        _initialisedSpectra(false), _weightedTotalChargedPartNum(0)
    {
    }


  public:

    void init() {
      _initialisedJets    = true;
      _initialisedSpectra = true;
      // TODO: According to the paper they seem to discard neutral particles
      //       between 1 and 2 GeV. That correction is included in the systematic
      //       uncertainties and overly complicated to program, so we ignore it.
      const FinalState fs;
      declare(fs, "FS");
      FastJets durhamjets(fs, FastJets::DURHAM, 0.7);
      durhamjets.useInvisibles(true);
      declare(durhamjets, "DurhamJets");

      const Thrust thrust(fs);
      declare(thrust, "Thrust");
      declare(Sphericity(fs), "Sphericity");
      declare(ParisiTensor(fs), "Parisi");
      declare(Hemispheres(thrust), "Hemispheres");

      const ChargedFinalState cfs;
      declare(Beam(), "Beams");
      declare(cfs, "CFS");

      // Histos
      // offset for the event shapes and jets
      int offset = 0;
      switch (int(sqrtS()/GeV + 0.5)) {
        case 91: offset = 0; break;
        case 133: offset = 1; break;
        case 161: offset = 2; break;
        case 172: offset = 3; break;
        case 183: offset = 4; break;
        case 189: offset = 5; break;
        case 200: offset = 6; break;
        case 206: offset = 7; break;
        default:
          _initialisedJets = false;
      }
      // event shapes
      if(_initialisedJets) {
        _h_thrust = bookHisto1D(offset+54, 1, 1);
        _h_heavyjetmass = bookHisto1D(offset+62, 1, 1);
        _h_totaljetbroadening = bookHisto1D(offset+70, 1, 1);
        _h_widejetbroadening = bookHisto1D(offset+78, 1, 1);
        _h_cparameter = bookHisto1D(offset+86, 1, 1);
        _h_thrustmajor = bookHisto1D(offset+94, 1, 1);
        _h_thrustminor = bookHisto1D(offset+102, 1, 1);
        _h_jetmassdifference = bookHisto1D(offset+110, 1, 1);
        _h_aplanarity = bookHisto1D(offset+118, 1, 1);
        _h_planarity  = offset==0 ? Histo1DPtr() : bookHisto1D(offset+125, 1, 1);
        _h_oblateness = bookHisto1D(offset+133, 1, 1);
        _h_sphericity = bookHisto1D(offset+141, 1, 1);

        // Durham n->m jet resolutions
        _h_y_Durham[0] = bookHisto1D(offset+149, 1, 1);   // y12 d149 ... d156
        _h_y_Durham[1] = bookHisto1D(offset+157, 1, 1);   // y23 d157 ... d164
        if (offset<6) { // there is no y34, y45 and y56 for 200 gev
          _h_y_Durham[2] = bookHisto1D(offset+165, 1, 1); // y34 d165 ... d172, but not 171
          _h_y_Durham[3] = bookHisto1D(offset+173, 1, 1); // y45 d173 ... d179
          _h_y_Durham[4] = bookHisto1D(offset+180, 1, 1); // y56 d180 ... d186
        }
        else if (offset==6) {
          _h_y_Durham[2].reset();
          _h_y_Durham[3].reset();
          _h_y_Durham[4].reset();
        }
        else if (offset==7) {
          _h_y_Durham[2] = bookHisto1D(172, 1, 1);
          _h_y_Durham[3] = bookHisto1D(179, 1, 1);
          _h_y_Durham[4] = bookHisto1D(186, 1, 1);
        }

        // Durham n-jet fractions
        _h_R_Durham[0] = bookHisto1D(offset+187, 1, 1); // R1 d187 ... d194
        _h_R_Durham[1] = bookHisto1D(offset+195, 1, 1); // R2 d195 ... d202
        _h_R_Durham[2] = bookHisto1D(offset+203, 1, 1); // R3 d203 ... d210
        _h_R_Durham[3] = bookHisto1D(offset+211, 1, 1); // R4 d211 ... d218
        _h_R_Durham[4] = bookHisto1D(offset+219, 1, 1); // R5 d219 ... d226
        _h_R_Durham[5] = bookHisto1D(offset+227, 1, 1); // R>=6 d227 ... d234
      }
      // offset for the charged particle distributions
      offset = 0;
      switch (int(sqrtS()/GeV + 0.5)) {
        case 133: offset = 0; break;
        case 161: offset = 1; break;
        case 172: offset = 2; break;
        case 183: offset = 3; break;
        case 189: offset = 4; break;
        case 196: offset = 5; break;
        case 200: offset = 6; break;
        case 206: offset = 7; break;
        default:
          _initialisedSpectra=false;
      }
      if (_initialisedSpectra) {
        _h_xp = bookHisto1D( 2+offset, 1, 1);
        _h_xi = bookHisto1D(11+offset, 1, 1);
        _h_xe = bookHisto1D(19+offset, 1, 1);
        _h_pTin  = bookHisto1D(27+offset, 1, 1);
        _h_pTout = offset!=7 ? Histo1DPtr() : bookHisto1D(35, 1, 1);
        _h_rapidityT = bookHisto1D(36+offset, 1, 1);
        _h_rapidityS = bookHisto1D(44+offset, 1, 1);
      }

      if (!_initialisedSpectra && !_initialisedJets) {
        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
                    << " doesn't match any available analysis energy .");
      }
    }


    void analyze(const Event& e) {
      const double weight = e.weight();

      const Thrust& thrust = apply<Thrust>(e, "Thrust");
      const Sphericity& sphericity = apply<Sphericity>(e, "Sphericity");

      if(_initialisedJets) {
        bool LEP1 = fuzzyEquals(sqrtS(),91.2*GeV,0.01);
        // event shapes
        double thr = LEP1 ? thrust.thrust() : 1.0 - thrust.thrust();
        _h_thrust->fill(thr,weight);
        _h_thrustmajor->fill(thrust.thrustMajor(),weight);
        if(LEP1)
          _h_thrustminor->fill(log(thrust.thrustMinor()),weight);
        else
          _h_thrustminor->fill(thrust.thrustMinor(),weight);
        _h_oblateness->fill(thrust.oblateness(),weight);

        const Hemispheres& hemi = apply<Hemispheres>(e, "Hemispheres");
        _h_heavyjetmass->fill(hemi.scaledM2high(),weight);
        _h_jetmassdifference->fill(hemi.scaledM2diff(),weight);
        _h_totaljetbroadening->fill(hemi.Bsum(),weight);
        _h_widejetbroadening->fill(hemi.Bmax(),weight);

        const ParisiTensor& parisi = apply<ParisiTensor>(e, "Parisi");
        _h_cparameter->fill(parisi.C(),weight);

        _h_aplanarity->fill(sphericity.aplanarity(),weight);
        if(_h_planarity)
          _h_planarity->fill(sphericity.planarity(),weight);
        _h_sphericity->fill(sphericity.sphericity(),weight);

        // Jet rates
        const FastJets& durjet = apply<FastJets>(e, "DurhamJets");
        double log10e = log10(exp(1.));
        if (durjet.clusterSeq()) {
          double logynm1=0.;
          double logyn;
          for (size_t i=0; i<5; ++i) {
            double yn = durjet.clusterSeq()->exclusive_ymerge_max(i+1);
            if (yn<=0.0) continue;
            logyn = -log(yn);
            if (_h_y_Durham[i]) {
              _h_y_Durham[i]->fill(logyn, weight);
            }
            if(!LEP1) logyn *= log10e;
            for (size_t j = 0; j < _h_R_Durham[i]->numBins(); ++j) {
              double val   = _h_R_Durham[i]->bin(j).xMin();
              double width = _h_R_Durham[i]->bin(j).xWidth();
              if(-val<=logynm1) break;
              if(-val<logyn) {
                _h_R_Durham[i]->fill(val+0.5*width, weight*width);
              }
            }
            logynm1 = logyn;
          }
          for (size_t j = 0; j < _h_R_Durham[5]->numBins(); ++j) {
            double val   = _h_R_Durham[5]->bin(j).xMin();
            double width = _h_R_Durham[5]->bin(j).xWidth();
            if(-val<=logynm1) break;
            _h_R_Durham[5]->fill(val+0.5*width, weight*width);
          }
        }
        if( !_initialisedSpectra) {
          const ChargedFinalState& cfs = apply<ChargedFinalState>(e, "CFS");
          const size_t numParticles = cfs.particles().size();
          _weightedTotalChargedPartNum += numParticles * weight;
        }
      }

      // charged particle distributions
      if(_initialisedSpectra) {
        const ChargedFinalState& cfs = apply<ChargedFinalState>(e, "CFS");
        const size_t numParticles = cfs.particles().size();
        _weightedTotalChargedPartNum += numParticles * weight;
        const ParticlePair& beams = apply<Beam>(e, "Beams").beams();
        const double meanBeamMom = ( beams.first.p3().mod() +
                                     beams.second.p3().mod() ) / 2.0;
        foreach (const Particle& p, cfs.particles()) {
          const double xp = p.p3().mod()/meanBeamMom;
          _h_xp->fill(xp   , weight);
          const double logxp = -std::log(xp);
          _h_xi->fill(logxp, weight);
          const double xe = p.E()/meanBeamMom;
          _h_xe->fill(xe   , weight);
          const double pTinT  = dot(p.p3(), thrust.thrustMajorAxis());
          const double pToutT = dot(p.p3(), thrust.thrustMinorAxis());
          _h_pTin->fill(fabs(pTinT/GeV), weight);
          if(_h_pTout) _h_pTout->fill(fabs(pToutT/GeV), weight);
          const double momT = dot(thrust.thrustAxis()        ,p.p3());
          const double rapidityT = 0.5 * std::log((p.E() + momT) /
                                                  (p.E() - momT));
          _h_rapidityT->fill(fabs(rapidityT), weight);
          const double momS = dot(sphericity.sphericityAxis(),p.p3());
          const double rapidityS = 0.5 * std::log((p.E() + momS) /
                                                  (p.E() - momS));
          _h_rapidityS->fill(fabs(rapidityS), weight);
        }
      }
    }

    void finalize() {
      if(!_initialisedJets && !_initialisedSpectra) return;

      if (_initialisedJets) {
        normalize(_h_thrust);
        normalize(_h_heavyjetmass);
        normalize(_h_totaljetbroadening);
        normalize(_h_widejetbroadening);
        normalize(_h_cparameter);
        normalize(_h_thrustmajor);
        normalize(_h_thrustminor);
        normalize(_h_jetmassdifference);
        normalize(_h_aplanarity);
        if(_h_planarity) normalize(_h_planarity);
        normalize(_h_oblateness);
        normalize(_h_sphericity);

        for (size_t n=0; n<6; ++n) {
          scale(_h_R_Durham[n], 1./sumOfWeights());
        }

        for (size_t n = 0; n < 5; ++n) {
          if (_h_y_Durham[n]) {
            scale(_h_y_Durham[n], 1.0/sumOfWeights());
          }
        }
      }

      Histo1D temphisto(refData(1, 1, 1));
      const double avgNumParts = _weightedTotalChargedPartNum / sumOfWeights();
      Scatter2DPtr  mult = bookScatter2D(1, 1, 1);
      for (size_t b = 0; b < temphisto.numBins(); b++) {
        const double x  = temphisto.bin(b).xMid();
        const double ex = temphisto.bin(b).xWidth()/2.;
        if (inRange(sqrtS()/GeV, x-ex, x+ex)) {
          mult->addPoint(x, avgNumParts, ex, 0.);
        }
      }

      if (_initialisedSpectra) {
        normalize(_h_xp, avgNumParts);
        normalize(_h_xi, avgNumParts);
        normalize(_h_xe, avgNumParts);
        normalize(_h_pTin , avgNumParts);
        if (_h_pTout) normalize(_h_pTout, avgNumParts);
        normalize(_h_rapidityT, avgNumParts);
        normalize(_h_rapidityS, avgNumParts);
      }
    }

  private:

    bool _initialisedJets;
    bool _initialisedSpectra;

    Histo1DPtr _h_xp;
    Histo1DPtr _h_xi;
    Histo1DPtr _h_xe;
    Histo1DPtr _h_pTin;
    Histo1DPtr _h_pTout;
    Histo1DPtr _h_rapidityT;
    Histo1DPtr _h_rapidityS;
    Histo1DPtr _h_thrust;
    Histo1DPtr _h_heavyjetmass;
    Histo1DPtr _h_totaljetbroadening;
    Histo1DPtr _h_widejetbroadening;
    Histo1DPtr _h_cparameter;
    Histo1DPtr _h_thrustmajor;
    Histo1DPtr _h_thrustminor;
    Histo1DPtr _h_jetmassdifference;
    Histo1DPtr _h_aplanarity;
    Histo1DPtr _h_planarity;
    Histo1DPtr _h_oblateness;
    Histo1DPtr _h_sphericity;

    Histo1DPtr _h_R_Durham[6];
    Histo1DPtr _h_y_Durham[5];

    double _weightedTotalChargedPartNum;

  };



  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(ALEPH_2004_S5765862);

}