ATLAS_2014_I1306615.cc
Go to the documentation of this file.
00001 /* 00002 * Rivet routine for H->yy differential cross-sections measurement 00003 * arXiv: http://arxiv.org/abs/ARXIV:1407.4222 00004 * HepData: http://hepdata.cedar.ac.uk/view/ins1306615 00005 * Author: Michaela Queitsch-Maitland <michaela.queitsch-maitland@cern.ch> 00006 */ 00007 00008 // -*- C++ -*- 00009 #include "Rivet/Analysis.hh" 00010 #include "Rivet/Projections/DressedLeptons.hh" 00011 #include "Rivet/Projections/VetoedFinalState.hh" 00012 #include "Rivet/Projections/FastJets.hh" 00013 00014 namespace Rivet { 00015 00016 class ATLAS_2014_I1306615 : public Analysis { 00017 public: 00018 00019 // Constructor 00020 ATLAS_2014_I1306615() 00021 : Analysis("ATLAS_2014_I1306615") 00022 { } 00023 00024 public: 00025 00026 // Book histograms and initialise projections before the run 00027 void init() { 00028 00029 // Final state 00030 // All particles within |eta| < 5.0 00031 const FinalState FS(Cuts::abseta<5.0); 00032 addProjection(FS,"FS"); 00033 00034 // Project photons with pT > 25 GeV and |eta| < 2.37 00035 //IdentifiedFinalState ph_FS(-2.37, 2.37, 25.0*GeV); 00036 IdentifiedFinalState ph_FS(Cuts::abseta<2.47 && Cuts::pT>25.0*GeV); 00037 ph_FS.acceptIdPair(PID::PHOTON); 00038 addProjection(ph_FS, "PH_FS"); 00039 00040 // Project photons for dressing 00041 IdentifiedFinalState ph_dressing_FS(FS); 00042 ph_dressing_FS.acceptIdPair(PID::PHOTON); 00043 00044 // Project bare electrons 00045 IdentifiedFinalState el_bare_FS(FS); 00046 el_bare_FS.acceptIdPair(PID::ELECTRON); 00047 addProjection(el_bare_FS,"el_bare_FS"); 00048 00049 // Project dressed electrons with pT > 15 GeV and |eta| < 2.47 00050 DressedLeptons el_dressed_FS(ph_dressing_FS, el_bare_FS, 0.1, Cuts::abseta < 2.47 && Cuts::pT > 15*GeV, true, false); 00051 addProjection(el_dressed_FS,"EL_DRESSED_FS"); 00052 00053 // Project bare muons 00054 IdentifiedFinalState mu_bare_FS(FS); 00055 mu_bare_FS.acceptIdPair(PID::MUON); 00056 00057 // Project dressed muons with pT > 15 GeV and |eta| < 2.47 00058 //DressedLeptons mu_dressed_FS(ph_dressing_FS, mu_bare_FS, 0.1, true, -2.47, 2.47, 15.0*GeV, false); 00059 DressedLeptons mu_dressed_FS(ph_dressing_FS, mu_bare_FS, 0.1, Cuts::abseta < 2.47 && Cuts::pT > 15*GeV, true, false); 00060 addProjection(mu_dressed_FS,"MU_DRESSED_FS"); 00061 00062 // Final state excluding muons and neutrinos (for jet building and photon isolation) 00063 VetoedFinalState veto_mu_nu_FS(FS); 00064 veto_mu_nu_FS.vetoNeutrinos(); 00065 veto_mu_nu_FS.addVetoPairId(PID::MUON); 00066 addProjection(veto_mu_nu_FS, "VETO_MU_NU_FS"); 00067 00068 // Build the anti-kT R=0.4 jets, using FinalState particles (vetoing muons and neutrinos) 00069 FastJets jets(veto_mu_nu_FS, FastJets::ANTIKT, 0.4); 00070 addProjection(jets, "JETS"); 00071 00072 // Book histograms 00073 // 1D distributions 00074 _h_pT_yy = bookHisto1D(1,1,1); 00075 _h_y_yy = bookHisto1D(2,1,1); 00076 _h_Njets30 = bookHisto1D(3,1,1); 00077 _h_Njets50 = bookHisto1D(4,1,1); 00078 _h_pT_j1 = bookHisto1D(5,1,1); 00079 _h_y_j1 = bookHisto1D(6,1,1); 00080 _h_HT = bookHisto1D(7,1,1); 00081 _h_pT_j2 = bookHisto1D(8,1,1); 00082 _h_Dy_jj = bookHisto1D(9,1,1); 00083 _h_Dphi_yy_jj = bookHisto1D(10,1,1); 00084 _h_cosTS_CS = bookHisto1D(11,1,1); 00085 _h_cosTS_CS_5bin = bookHisto1D(12,1,1); 00086 _h_Dphi_jj = bookHisto1D(13,1,1); 00087 _h_pTt_yy = bookHisto1D(14,1,1); 00088 _h_Dy_yy = bookHisto1D(15,1,1); 00089 _h_tau_jet = bookHisto1D(16,1,1); 00090 _h_sum_tau_jet = bookHisto1D(17,1,1); 00091 _h_y_j2 = bookHisto1D(18,1,1); 00092 _h_pT_j3 = bookHisto1D(19,1,1); 00093 _h_m_jj = bookHisto1D(20,1,1); 00094 _h_pT_yy_jj = bookHisto1D(21,1,1); 00095 00096 // 2D distributions of cosTS_CS x pT_yy 00097 _h_cosTS_pTyy_low = bookHisto1D(22,1,1); 00098 _h_cosTS_pTyy_high = bookHisto1D(22,1,2); 00099 _h_cosTS_pTyy_rest = bookHisto1D(22,1,3); 00100 00101 // 2D distributions of Njets x pT_yy 00102 _h_pTyy_Njets0 = bookHisto1D(23,1,1); 00103 _h_pTyy_Njets1 = bookHisto1D(23,1,2); 00104 _h_pTyy_Njets2 = bookHisto1D(23,1,3); 00105 00106 _h_pTj1_excl = bookHisto1D(24,1,1); 00107 00108 // Fiducial regions 00109 _h_fidXSecs = bookHisto1D(29,1,1); 00110 } 00111 00112 // Perform the per-event analysis 00113 void analyze(const Event& event) { 00114 00115 const double weight = event.weight(); 00116 _weight = weight; 00117 00118 // Get final state particles 00119 const ParticleVector& FS_ptcls = applyProjection<FinalState>(event, "FS").particles(); 00120 const ParticleVector& ptcls_veto_mu_nu = applyProjection<VetoedFinalState>(event, "VETO_MU_NU_FS").particles(); 00121 const ParticleVector& photons = applyProjection<IdentifiedFinalState>(event, "PH_FS").particlesByPt(); 00122 const vector<DressedLepton>& el_dressed = applyProjection<DressedLeptons>(event, "EL_DRESSED_FS").dressedLeptons(); 00123 const vector<DressedLepton>& mu_dressed = applyProjection<DressedLeptons>(event, "MU_DRESSED_FS").dressedLeptons(); 00124 00125 // For isolation calculation 00126 float dR_iso = 0.4; 00127 float ETcut_iso = 14.0; 00128 FourMomentum ET_iso; 00129 00130 // Fiducial selection: pT > 25 GeV, |eta| < 2.37 and isolation (in cone deltaR = 0.4) is < 14 GeV 00131 vector<const Particle*> fid_photons; 00132 foreach (const Particle& ph, photons) { 00133 00134 // Veto photons from hadron or tau decay 00135 if ( fromHadronDecay(ph) ) continue; 00136 00137 // Calculate isolation 00138 ET_iso = - ph.momentum(); 00139 // Loop over fs truth particles (excluding muons and neutrinos) 00140 foreach (const Particle& p, ptcls_veto_mu_nu) { 00141 // Check if the truth particle is in a cone of 0.4 00142 if ( deltaR(ph.momentum(), p.momentum()) < dR_iso ) 00143 ET_iso += p.momentum(); 00144 } 00145 00146 // Check isolation 00147 if ( ET_iso.Et() > ETcut_iso ) continue; 00148 00149 // Fill vector of photons passing fiducial selection 00150 fid_photons.push_back(&ph); 00151 } 00152 00153 if(fid_photons.size() < 2) vetoEvent; 00154 00155 const FourMomentum& y1 = fid_photons[0]->momentum(); 00156 const FourMomentum& y2 = fid_photons[1]->momentum(); 00157 00158 double m_yy = (y1 + y2).mass(); 00159 00160 // Relative pT cuts 00161 if ( y1.pT() < 0.35 * m_yy || y2.pT() < 0.25 * m_yy ) vetoEvent; 00162 00163 // Mass window cut 00164 if ( m_yy < 105 || m_yy > 160 ) vetoEvent; 00165 00166 // -------------------------------------------- // 00167 // Passed diphoton baseline fiducial selection! // 00168 // -------------------------------------------- // 00169 00170 // Electron selection 00171 vector<const Particle*> good_el; 00172 foreach(const DressedLepton& els, el_dressed) { 00173 00174 const Particle& el = els.constituentLepton(); 00175 if ( el.momentum().pT() < 15 ) continue; 00176 if ( fabs(el.momentum().eta()) > 2.47 ) continue; 00177 if ( deltaR(el.momentum(), y1) < 0.4 ) continue; 00178 if ( deltaR(el.momentum(), y2) < 0.4 ) continue; 00179 if ( fromHadronDecay(el) ) continue; // Veto electrons from hadron or tau decay 00180 good_el.push_back(&el); 00181 } 00182 00183 // Muon selection 00184 vector<const Particle*> good_mu; 00185 foreach(const DressedLepton& mus, mu_dressed) { 00186 00187 const Particle& mu = mus.constituentLepton(); 00188 if ( mu.momentum().pT() < 15 ) continue; 00189 if ( fabs(mu.momentum().eta()) > 2.47 ) continue; 00190 if ( deltaR(mu.momentum(), y1) < 0.4 ) continue; 00191 if ( deltaR(mu.momentum(), y2) < 0.4 ) continue; 00192 if ( fromHadronDecay(mu) ) continue; // Veto muons from hadron or tau decay 00193 good_mu.push_back(&mu); 00194 } 00195 00196 // Find prompt, invisible particles for missing ET calculation 00197 // Based on VisibleFinalState projection 00198 FourMomentum invisible(0,0,0,0); 00199 foreach (const Particle& p, FS_ptcls) { 00200 00201 // Veto non-prompt particles (from hadron or tau decay) 00202 if ( fromHadronDecay(p) ) continue; 00203 // Charged particles are visible 00204 if ( PID::threeCharge( p.pid() ) != 0 ) continue; 00205 // Neutral hadrons are visible 00206 if ( PID::isHadron( p.pid() ) ) continue; 00207 // Photons are visible 00208 if ( p.pid() == PID::PHOTON ) continue; 00209 // Gluons are visible (for parton level analyses) 00210 if ( p.pid() == PID::GLUON ) continue; 00211 // Everything else is invisible 00212 invisible += p.momentum(); 00213 } 00214 double MET = invisible.Et(); 00215 00216 // Jet selection 00217 // Get jets with pT > 25 GeV and |rapidity| < 4.4 00218 //const Jets& jets = applyProjection<FastJets>(event, "JETS").jetsByPt(25.0*GeV, MAXDOUBLE, -4.4, 4.4, RAPIDITY); 00219 const Jets& jets = applyProjection<FastJets>(event, "JETS").jetsByPt(Cuts::pT>25.0*GeV && Cuts::absrap <4.4); 00220 00221 vector<const Jet*> jets_25; 00222 vector<const Jet*> jets_30; 00223 vector<const Jet*> jets_50; 00224 00225 foreach (const Jet& jet, jets) { 00226 00227 bool passOverlap = true; 00228 // Overlap with leading photons 00229 if ( deltaR(y1, jet.momentum()) < 0.4 ) passOverlap = false; 00230 if ( deltaR(y2, jet.momentum()) < 0.4 ) passOverlap = false; 00231 00232 // Overlap with good electrons 00233 foreach (const Particle* el, good_el) 00234 if ( deltaR(el->momentum(), jet.momentum()) < 0.2 ) passOverlap = false; 00235 00236 if ( ! passOverlap ) continue; 00237 00238 if ( fabs(jet.momentum().eta()) < 2.4 || ( fabs(jet.momentum().eta()) > 2.4 && jet.momentum().pT() > 30 ) ) jets_25.push_back(&jet); 00239 if ( jet.momentum().pT() > 30 ) jets_30.push_back(&jet); 00240 if ( jet.momentum().pT() > 50 ) jets_50.push_back(&jet); 00241 } 00242 00243 // Fiducial regions 00244 _h_fidXSecs->fill(1,_weight); 00245 if ( jets_30.size() >= 1 ) _h_fidXSecs->fill(2, _weight); 00246 if ( jets_30.size() >= 2 ) _h_fidXSecs->fill(3, _weight); 00247 if ( jets_30.size() >= 3 ) _h_fidXSecs->fill(4, _weight); 00248 if ( jets_30.size() >= 2 && passVBFCuts(y1 + y2, jets_30.at(0)->momentum(), jets_30.at(1)->momentum()) ) _h_fidXSecs->fill(5, _weight); 00249 if ( (good_el.size() + good_mu.size()) > 0 ) _h_fidXSecs->fill(6, _weight); 00250 if ( MET > 80 ) _h_fidXSecs->fill(7, _weight); 00251 00252 // Fill histograms 00253 // Inclusive variables 00254 _pT_yy = (y1 + y2).pT(); 00255 _y_yy = fabs( (y1 + y2).rapidity() ); 00256 _cosTS_CS = cosTS_CS(y1, y2); 00257 _pTt_yy = pTt(y1, y2); 00258 _Dy_yy = fabs( deltaRap(y1, y2) ); 00259 00260 _Njets30 = jets_30.size() > 3 ? 3 : jets_30.size(); 00261 _Njets50 = jets_50.size() > 3 ? 3 : jets_50.size(); 00262 _h_Njets30->fill(_Njets30, _weight); 00263 _h_Njets50->fill(_Njets50, _weight); 00264 00265 _pT_j1 = jets_30.size() > 0 ? jets_30.at(0)->momentum().pT() : 0.; 00266 _pT_j2 = jets_30.size() > 1 ? jets_30.at(1)->momentum().pT() : 0.; 00267 _pT_j3 = jets_30.size() > 2 ? jets_30.at(2)->momentum().pT() : 0.; 00268 00269 _HT = 0.0; 00270 foreach (const Jet* jet, jets_30) 00271 _HT += jet->momentum().pT(); 00272 00273 _tau_jet = tau_jet_max(y1 + y2, jets_25); 00274 _sum_tau_jet = sum_tau_jet(y1 + y2, jets_25); 00275 00276 _h_pT_yy ->fill(_pT_yy ,_weight); 00277 _h_y_yy ->fill(_y_yy ,_weight); 00278 _h_pT_j1 ->fill(_pT_j1 ,_weight); 00279 _h_cosTS_CS ->fill(_cosTS_CS ,_weight); 00280 _h_cosTS_CS_5bin->fill(_cosTS_CS ,_weight); 00281 _h_HT ->fill(_HT ,_weight); 00282 _h_pTt_yy ->fill(_pTt_yy ,_weight); 00283 _h_Dy_yy ->fill(_Dy_yy ,_weight); 00284 _h_tau_jet ->fill(_tau_jet ,_weight); 00285 _h_sum_tau_jet ->fill(_sum_tau_jet,_weight); 00286 00287 // >=1 jet variables 00288 if ( jets_30.size() >= 1 ) { 00289 FourMomentum j1 = jets_30[0]->momentum(); 00290 _y_j1 = fabs( j1.rapidity() ); 00291 00292 _h_pT_j2->fill(_pT_j2 ,_weight); 00293 _h_y_j1 ->fill(_y_j1 ,_weight); 00294 } 00295 00296 // >=2 jet variables 00297 if ( jets_30.size() >= 2 ) { 00298 FourMomentum j1 = jets_30[0]->momentum(); 00299 FourMomentum j2 = jets_30[1]->momentum(); 00300 00301 _Dy_jj = fabs( deltaRap(j1, j2) ); 00302 _Dphi_jj = fabs( deltaPhi(j1, j2) ); 00303 _Dphi_yy_jj = fabs( deltaPhi(y1 + y2, j1 + j2) ); 00304 _m_jj = (j1 + j2).mass(); 00305 _pT_yy_jj = (y1 + y2 + j1 + j2).pT(); 00306 _y_j2 = fabs( j2.rapidity() ); 00307 00308 _h_Dy_jj ->fill(_Dy_jj ,_weight); 00309 _h_Dphi_jj ->fill(_Dphi_jj ,_weight); 00310 _h_Dphi_yy_jj ->fill(_Dphi_yy_jj,_weight); 00311 _h_m_jj ->fill(_m_jj ,_weight); 00312 _h_pT_yy_jj ->fill(_pT_yy_jj ,_weight); 00313 _h_pT_j3 ->fill(_pT_j3 ,_weight); 00314 _h_y_j2 ->fill(_y_j2 ,_weight); 00315 } 00316 00317 // 2D distributions of cosTS_CS x pT_yy 00318 if ( _pT_yy < 80 ) 00319 _h_cosTS_pTyy_low->fill(_cosTS_CS, _weight); 00320 else if ( _pT_yy > 80 && _pT_yy < 200 ) 00321 _h_cosTS_pTyy_high->fill(_cosTS_CS,_weight); 00322 else if ( _pT_yy > 200 ) 00323 _h_cosTS_pTyy_rest->fill(_cosTS_CS,_weight); 00324 00325 // 2D distributions of pT_yy x Njets 00326 if ( _Njets30 == 0 ) 00327 _h_pTyy_Njets0->fill(_pT_yy, _weight); 00328 else if ( _Njets30 == 1 ) 00329 _h_pTyy_Njets1->fill(_pT_yy, _weight); 00330 else if ( _Njets30 >= 2 ) 00331 _h_pTyy_Njets2->fill(_pT_yy, _weight); 00332 00333 if ( _Njets30 == 1 ) _h_pTj1_excl->fill(_pT_j1, _weight); 00334 00335 } 00336 00337 // Normalise histograms after the run 00338 void finalize() { 00339 00340 const double xs = crossSectionPerEvent()/femtobarn; 00341 00342 scale(_h_pT_yy, xs); 00343 scale(_h_y_yy, xs); 00344 scale(_h_pT_j1, xs); 00345 scale(_h_y_j1, xs); 00346 scale(_h_HT, xs); 00347 scale(_h_pT_j2, xs); 00348 scale(_h_Dy_jj, xs); 00349 scale(_h_Dphi_yy_jj, xs); 00350 scale(_h_cosTS_CS, xs); 00351 scale(_h_cosTS_CS_5bin, xs); 00352 scale(_h_Dphi_jj, xs); 00353 scale(_h_pTt_yy, xs); 00354 scale(_h_Dy_yy, xs); 00355 scale(_h_tau_jet, xs); 00356 scale(_h_sum_tau_jet, xs); 00357 scale(_h_y_j2, xs); 00358 scale(_h_pT_j3, xs); 00359 scale(_h_m_jj, xs); 00360 scale(_h_pT_yy_jj, xs); 00361 scale(_h_cosTS_pTyy_low, xs); 00362 scale(_h_cosTS_pTyy_high, xs); 00363 scale(_h_cosTS_pTyy_rest, xs); 00364 scale(_h_pTyy_Njets0, xs); 00365 scale(_h_pTyy_Njets1, xs); 00366 scale(_h_pTyy_Njets2, xs); 00367 scale(_h_pTj1_excl, xs); 00368 scale(_h_Njets30, xs); 00369 scale(_h_Njets50, xs); 00370 scale(_h_fidXSecs, xs); 00371 } 00372 00373 // Trace event record to see if particle came from a hadron (or a tau from a hadron decay) 00374 // Based on fromDecay() function 00375 bool fromHadronDecay(const Particle& p ) { 00376 00377 GenVertex* prodVtx = p.genParticle()->production_vertex(); 00378 if (prodVtx == NULL) return false; 00379 foreach (const GenParticle* ancestor, particles(prodVtx, HepMC::ancestors)) { 00380 const PdgId pid = ancestor->pdg_id(); 00381 if (ancestor->status() == 2 && PID::isHadron(pid)) return true; 00382 if (ancestor->status() == 2 && (abs(pid) == PID::TAU && fromHadronDecay(ancestor))) return true; 00383 } 00384 return false; 00385 } 00386 00387 // VBF-enhanced dijet topology selection cuts 00388 bool passVBFCuts(const FourMomentum &H, const FourMomentum &j1, const FourMomentum &j2) { 00389 return ( fabs(deltaRap(j1, j2)) > 2.8 && (j1 + j2).mass() > 400 && fabs(deltaPhi(H, j1 + j2)) > 2.6 ); 00390 } 00391 00392 // Cosine of the decay angle in the Collins-Soper frame 00393 double cosTS_CS(const FourMomentum &y1, const FourMomentum &y2) { 00394 return fabs( ( (y1.E() + y1.pz())* (y2.E() - y2.pz()) - (y1.E() - y1.pz()) * (y2.E() + y2.pz()) ) 00395 / ((y1 + y2).mass() * sqrt(pow((y1 + y2).mass(), 2) + pow((y1 + y2).pt(), 2)) ) ); 00396 } 00397 00398 // Diphoton pT along thrust axis 00399 double pTt(const FourMomentum &y1, const FourMomentum &y2) { 00400 return fabs(y1.px() * y2.py() - y2.px() * y1.py()) / (y1 - y2).pT()*2; 00401 } 00402 00403 // Tau of jet (see paper for description) 00404 // tau_jet = mT/(2*cosh(y*)), where mT = pT (+) m, and y* = rapidty in Higgs rest frame 00405 double tau_jet( const FourMomentum &H, const FourMomentum &jet ) { 00406 return sqrt( pow(jet.pT(),2) + pow(jet.mass(),2) ) / (2.0 * cosh( jet.rapidity() - H.rapidity() ) ); 00407 } 00408 00409 // Maximal (leading) tau_jet (see paper for description) 00410 double tau_jet_max( const FourMomentum &H, const vector<const Jet*> jets, double tau_jet_cut = 8. ) { 00411 double max_tj = 0; 00412 for (size_t i=0; i < jets.size(); ++i) { 00413 FourMomentum jet = jets[i]->momentum(); 00414 if ( tau_jet(H, jet) > tau_jet_cut ) 00415 max_tj = max( tau_jet(H, jet), max_tj ); 00416 } 00417 return max_tj; 00418 } 00419 00420 // Scalar sum of tau for all jets (see paper for description) 00421 double sum_tau_jet( const FourMomentum &H, const vector<const Jet*> jets, double tau_jet_cut = 8. ) { 00422 double sum_tj = 0; 00423 for (size_t i=0; i < jets.size(); ++i) { 00424 FourMomentum jet = jets[i]->momentum(); 00425 if ( tau_jet(H, jet) > tau_jet_cut ) 00426 sum_tj += tau_jet(H, jet); 00427 } 00428 return sum_tj; 00429 } 00430 00431 private: 00432 00433 Histo1DPtr _h_pT_yy; 00434 Histo1DPtr _h_y_yy; 00435 Histo1DPtr _h_Njets30; 00436 Histo1DPtr _h_Njets50; 00437 Histo1DPtr _h_pT_j1; 00438 Histo1DPtr _h_y_j1; 00439 Histo1DPtr _h_HT; 00440 Histo1DPtr _h_pT_j2; 00441 Histo1DPtr _h_Dy_jj; 00442 Histo1DPtr _h_Dphi_yy_jj; 00443 Histo1DPtr _h_cosTS_CS; 00444 Histo1DPtr _h_cosTS_CS_5bin; 00445 Histo1DPtr _h_Dphi_jj; 00446 Histo1DPtr _h_pTt_yy; 00447 Histo1DPtr _h_Dy_yy; 00448 Histo1DPtr _h_tau_jet; 00449 Histo1DPtr _h_sum_tau_jet; 00450 Histo1DPtr _h_y_j2; 00451 Histo1DPtr _h_pT_j3; 00452 Histo1DPtr _h_m_jj; 00453 Histo1DPtr _h_pT_yy_jj; 00454 Histo1DPtr _h_cosTS_pTyy_low; 00455 Histo1DPtr _h_cosTS_pTyy_high; 00456 Histo1DPtr _h_cosTS_pTyy_rest; 00457 Histo1DPtr _h_pTyy_Njets0; 00458 Histo1DPtr _h_pTyy_Njets1; 00459 Histo1DPtr _h_pTyy_Njets2; 00460 Histo1DPtr _h_pTj1_excl; 00461 Histo1DPtr _h_fidXSecs; 00462 00463 double _weight; 00464 int _Njets30; 00465 int _Njets50; 00466 double _pT_yy; 00467 double _y_yy; 00468 double _cosTS_CS; 00469 double _pT_j1; 00470 double _m_jj; 00471 double _y_j1; 00472 double _HT; 00473 double _pT_j2; 00474 double _y_j2; 00475 double _Dphi_yy_jj; 00476 double _pT_yy_jj; 00477 double _Dphi_jj; 00478 double _Dy_jj; 00479 double _pT_j3; 00480 double _pTt_yy; 00481 double _Dy_yy; 00482 double _tau_jet; 00483 double _sum_tau_jet; 00484 }; 00485 00486 // The hook for the plugin system 00487 DECLARE_RIVET_PLUGIN(ATLAS_2014_I1306615); 00488 00489 } Generated on Tue Mar 24 2015 17:35:25 for The Rivet MC analysis system by ![]() |