rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

D0_1996_I399364

Topological distributions of inclusive three- and four-jet events
Experiment: D0 (Tevatron Run 1)
Inspire ID: 399364
Status: VALIDATED
Authors:
  • Frank Siegert
References: Beams: p- p+
Beam energies: (900.0, 900.0) GeV
Run details:
  • $p \bar{p} \to$ jets at 1800 GeV with minimum jet pT in analysis = 20 GeV

The global topologies of inclusive three- and four-jet events produced in pbar p interactions are described. The three- and four-jet events are selected from data recorded by the D0 detector at the Fermilab Tevatron Collider operating at a center-of-mass energy of $\sqrt{s}$=1800 GeV. The studies also show that the topological distributions of the different subprocesses involving different numbers of quarks are very similar and reproduce the measured distributions well. The parton-shower Monte Carlo generators provide a less satisfactory description of the topologies of the three- and four-jet events.

Source code: D0_1996_I399364.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Math/LorentzTrans.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// D0 topological distributions of 3- and 4-jet events.
 11  class D0_1996_I399364 : public Analysis {
 12  public:
 13
 14    RIVET_DEFAULT_ANALYSIS_CTOR(D0_1996_I399364);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms
 21    void init() {
 22      const FinalState fs;
 23
 24      /// @todo Use correct jet algorithm --- tried FJ3 D0RunICone but does
 25      // not look as good as the Run2 cone alg used here
 26      declare(FastJets(fs, JetAlg::D0ILCONE, 0.7), "ConeJets");
 27
 28      book(_h_3j_x3 ,1, 1, 1);
 29      book(_h_3j_x5 ,2, 1, 1);
 30      book(_h_3j_costheta3 ,3, 1, 1);
 31      book(_h_3j_psi ,4, 1, 1);
 32      book(_h_3j_mu34 ,5, 1, 1);
 33      book(_h_3j_mu35 ,6, 1, 1);
 34      book(_h_3j_mu45 ,7, 1, 1);
 35
 36      book(_h_4j_x3 ,8, 1, 1);
 37      book(_h_4j_x4 ,9, 1, 1);
 38      book(_h_4j_x5 ,10, 1, 1);
 39      book(_h_4j_x6 ,11, 1, 1);
 40      book(_h_4j_costheta3 ,12, 1, 1);
 41      book(_h_4j_costheta4 ,13, 1, 1);
 42      book(_h_4j_costheta5 ,14, 1, 1);
 43      book(_h_4j_costheta6 ,15, 1, 1);
 44      book(_h_4j_cosomega34 ,16, 1, 1);
 45      book(_h_4j_cosomega35 ,17, 1, 1);
 46      book(_h_4j_cosomega36 ,18, 1, 1);
 47      book(_h_4j_cosomega45 ,19, 1, 1);
 48      book(_h_4j_cosomega46 ,20, 1, 1);
 49      book(_h_4j_cosomega56 ,21, 1, 1);
 50      book(_h_4j_mu34 ,22, 1, 1);
 51      book(_h_4j_mu35 ,23, 1, 1);
 52      book(_h_4j_mu36 ,24, 1, 1);
 53      book(_h_4j_mu45 ,25, 1, 1);
 54      book(_h_4j_mu46 ,26, 1, 1);
 55      book(_h_4j_mu56 ,27, 1, 1);
 56      book(_h_4j_theta_BZ ,28, 1, 1);
 57      book(_h_4j_costheta_NR ,29, 1, 1);
 58
 59    }
 60
 61
 62    void analyze(const Event& event) {
 63      Jets jets_in = apply<FastJets>(event, "ConeJets")
 64        .jets(Cuts::Et > 20*GeV && Cuts::abseta < 3, cmpMomByEt);
 65
 66      Jets jets_isolated;
 67      for (size_t i = 0; i < jets_in.size(); ++i) {
 68        bool isolated = true;
 69        for (size_t j = 0; j < jets_in.size(); ++j) {
 70          if (i != j && deltaR(jets_in[i], jets_in[j]) < 1.4) {
 71            isolated = false;
 72            break;
 73          }
 74        }
 75        if (isolated) jets_isolated.push_back(jets_in[i]);
 76      }
 77
 78      if (jets_isolated.empty() || jets_isolated[0].Et() < 60.0*GeV) vetoEvent;
 79
 80      if (jets_isolated.size() > 2) _threeJetAnalysis(jets_isolated);
 81      if (jets_isolated.size() > 3) _fourJetAnalysis(jets_isolated);
 82    }
 83
 84
 85    void finalize() {
 86      normalize(_h_3j_x3);
 87      normalize(_h_3j_x5);
 88      normalize(_h_3j_costheta3);
 89      normalize(_h_3j_psi);
 90      normalize(_h_3j_mu34);
 91      normalize(_h_3j_mu35);
 92      normalize(_h_3j_mu45);
 93      normalize(_h_4j_x3);
 94      normalize(_h_4j_x4);
 95      normalize(_h_4j_x5);
 96      normalize(_h_4j_x6);
 97      normalize(_h_4j_costheta3);
 98      normalize(_h_4j_costheta4);
 99      normalize(_h_4j_costheta5);
100      normalize(_h_4j_costheta6);
101      normalize(_h_4j_cosomega34);
102      normalize(_h_4j_cosomega35);
103      normalize(_h_4j_cosomega36);
104      normalize(_h_4j_cosomega45);
105      normalize(_h_4j_cosomega46);
106      normalize(_h_4j_cosomega56);
107      normalize(_h_4j_mu34);
108      normalize(_h_4j_mu35);
109      normalize(_h_4j_mu36);
110      normalize(_h_4j_mu45);
111      normalize(_h_4j_mu46);
112      normalize(_h_4j_mu56);
113      normalize(_h_4j_theta_BZ);
114      normalize(_h_4j_costheta_NR);
115    }
116
117    /// @}
118
119
120  private:
121
122    /// @name Helper functions
123    /// @{
124
125    void _threeJetAnalysis(const Jets& jets) {
126      // >=3 jet events
127      FourMomentum jjj(jets[0].mom() + jets[1].mom() + jets[2].mom());
128      const double sqrts = _safeMass(jjj);
129      if (sqrts<200*GeV)  return;
130
131      const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(jjj.betaVec());
132      vector<FourMomentum> jets_boosted;
133      for (Jet jet : jets) {
134        jets_boosted.push_back(cms_boost.transform(jet.mom()));
135      }
136      isortBy(jets_boosted, cmpMomByE);
137      FourMomentum p3(jets_boosted[0]);
138      FourMomentum p4(jets_boosted[1]);
139      FourMomentum p5(jets_boosted[2]);
140
141      Vector3 beam1(0.0, 0.0, 1.0);
142      Vector3 p1xp3 = beam1.cross(p3.p3());
143      Vector3 p4xp5 = p4.p3().cross(p5.p3());
144      const double cospsi = p1xp3.dot(p4xp5)/p1xp3.mod()/p4xp5.mod();
145
146      _h_3j_x3->fill(2.0*p3.E()/sqrts);
147      _h_3j_x5->fill(2.0*p5.E()/sqrts);
148      _h_3j_costheta3->fill(fabs(cos(p3.theta())));
149      _h_3j_psi->fill(acos(cospsi)/degree);
150      _h_3j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts);
151      _h_3j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts);
152      _h_3j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts);
153    }
154
155
156    void _fourJetAnalysis(const Jets& jets) {
157      // >=4 jet events
158      FourMomentum jjjj(jets[0].momentum() + jets[1].momentum() + jets[2].momentum()+ jets[3].momentum());
159      const double sqrts = _safeMass(jjjj);
160      if (sqrts < 200*GeV) return;
161
162      const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(jjjj.betaVec());
163      vector<FourMomentum> jets_boosted;
164      for (Jet jet : jets) {
165        jets_boosted.push_back(cms_boost.transform(jet.momentum()));
166      }
167      isortBy(jets_boosted, cmpMomByE);
168      FourMomentum p3(jets_boosted[0]);
169      FourMomentum p4(jets_boosted[1]);
170      FourMomentum p5(jets_boosted[2]);
171      FourMomentum p6(jets_boosted[3]);
172
173      Vector3 p3xp4 = p3.p3().cross(p4.p3());
174      Vector3 p5xp6 = p5.p3().cross(p6.p3());
175      const double costheta_BZ = p3xp4.dot(p5xp6)/p3xp4.mod()/p5xp6.mod();
176      const double costheta_NR = (p3.p3()-p4.p3()).dot(p5.p3()-p6.p3())/
177        (p3.p3()-p4.p3()).mod()/(p5.p3()-p6.p3()).mod();
178
179      _h_4j_x3->fill(2.0*p3.E()/sqrts);
180      _h_4j_x4->fill(2.0*p4.E()/sqrts);
181      _h_4j_x5->fill(2.0*p5.E()/sqrts);
182      _h_4j_x6->fill(2.0*p6.E()/sqrts);
183      _h_4j_costheta3->fill(fabs(cos(p3.theta())));
184      _h_4j_costheta4->fill(fabs(cos(p4.theta())));
185      _h_4j_costheta5->fill(fabs(cos(p5.theta())));
186      _h_4j_costheta6->fill(fabs(cos(p6.theta())));
187      _h_4j_cosomega34->fill(cos(p3.angle(p4)));
188      _h_4j_cosomega35->fill(cos(p3.angle(p5)));
189      _h_4j_cosomega36->fill(cos(p3.angle(p6)));
190      _h_4j_cosomega45->fill(cos(p4.angle(p5)));
191      _h_4j_cosomega46->fill(cos(p4.angle(p6)));
192      _h_4j_cosomega56->fill(cos(p5.angle(p6)));
193      _h_4j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts);
194      _h_4j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts);
195      _h_4j_mu36->fill(_safeMass(FourMomentum(p3+p6))/sqrts);
196      _h_4j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts);
197      _h_4j_mu46->fill(_safeMass(FourMomentum(p4+p6))/sqrts);
198      _h_4j_mu56->fill(_safeMass(FourMomentum(p5+p6))/sqrts);
199      _h_4j_theta_BZ->fill(acos(fabs(costheta_BZ))/degree);
200      _h_4j_costheta_NR->fill(fabs(costheta_NR));
201
202    }
203
204    double _safeMass(const FourMomentum& p) {
205      double mass2=p.mass2();
206      if (mass2>0.0) return sqrt(mass2);
207      else if (mass2<-1.0e-5) {
208        MSG_WARNING("m2 = " << m2 << ". Assuming m2=0.");
209        return 0.0;
210      }
211      else return 0.0;
212    }
213
214    /// @}
215
216
217  private:
218
219    /// @name Histograms
220    /// @{
221    Histo1DPtr _h_3j_x3;
222    Histo1DPtr _h_3j_x5;
223    Histo1DPtr _h_3j_costheta3;
224    Histo1DPtr _h_3j_psi;
225    Histo1DPtr _h_3j_mu34;
226    Histo1DPtr _h_3j_mu35;
227    Histo1DPtr _h_3j_mu45;
228
229    Histo1DPtr _h_4j_x3;
230    Histo1DPtr _h_4j_x4;
231    Histo1DPtr _h_4j_x5;
232    Histo1DPtr _h_4j_x6;
233    Histo1DPtr _h_4j_costheta3;
234    Histo1DPtr _h_4j_costheta4;
235    Histo1DPtr _h_4j_costheta5;
236    Histo1DPtr _h_4j_costheta6;
237    Histo1DPtr _h_4j_cosomega34;
238    Histo1DPtr _h_4j_cosomega35;
239    Histo1DPtr _h_4j_cosomega36;
240    Histo1DPtr _h_4j_cosomega45;
241    Histo1DPtr _h_4j_cosomega46;
242    Histo1DPtr _h_4j_cosomega56;
243    Histo1DPtr _h_4j_mu34;
244    Histo1DPtr _h_4j_mu35;
245    Histo1DPtr _h_4j_mu36;
246    Histo1DPtr _h_4j_mu45;
247    Histo1DPtr _h_4j_mu46;
248    Histo1DPtr _h_4j_mu56;
249    Histo1DPtr _h_4j_theta_BZ;
250    Histo1DPtr _h_4j_costheta_NR;
251    /// @}
252
253  };
254
255
256
257  RIVET_DECLARE_ALIASED_PLUGIN(D0_1996_I399364, D0_1996_S3214044);
258
259}