ATLAS Offline Software
ConeJetMaker.cxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3  */
4 
5 #include "./Jet.h"
6 #include "./ConeJetMaker.h"
7 
8 #include <sstream>
9 
10 #include <cassert>
11 #include <algorithm>
12 
14  const xAOD::jFexSRJetRoIContainer& seeds,
15  float seedEtThreshold,
16  const std::string& scheme) :
17  m_jetR{jetR},
18  m_seeds{seeds},
19  m_seedEtThreshold{seedEtThreshold},
20  m_recombScheme{string2RecombScheme(scheme)}{
21 }
22 
23 
25 Gep::ConeJetMaker::string2RecombScheme(const std::string& scheme) const {
26  auto schemeMatches =
27  [&scheme](const std::pair<std::string, RecombScheme>& p){return (p.first) == scheme;};
28 
29  auto scheme_it = std::find_if(m_knownSchemes.cbegin(),
30  m_knownSchemes.cend(),
31  schemeMatches);
32 
33  if (scheme_it == m_knownSchemes.end()){
34  throw std::runtime_error("GEP ConeJetMaker unknown recombinaton scheme " +
35  scheme);
36  }
37 
38  return scheme_it->second;
39 }
40 
41 std::string
43  auto schemeMatches =
44  [&scheme=m_recombScheme](const std::pair<std::string, RecombScheme>& p){
45  return (p.second) == scheme;};
46 
47  auto scheme_it = std::find_if(m_knownSchemes.cbegin(),
48  m_knownSchemes.cend(),
49  schemeMatches);
50 
51  if (scheme_it == m_knownSchemes.end()){
52  throw std::runtime_error("GEP ConeJetMaker unknown recombinaton scheme " +
53  recombSchemeAsString());
54  }
55 
56  return scheme_it->first;
57 }
58 
59 double deltaR (double eta_1, double eta_2, double phi_1, double phi_2);
60 
61 std::vector<Gep::Jet>
62 Gep::ConeJetMaker::makeJets( const std::vector<Gep::Cluster> &clusters) const
63 {
64  std::vector<Gep::Jet> jets;
65  for (const auto seed: m_seeds) {
66 
67  float seedEt = seed->et();
68 
69  // skip seeds with Et below threshold
70  if(seedEt < m_seedEtThreshold) continue;
71  float seedEta = seed->eta();
72  float seedPhi = seed->phi();
73 
74  Gep::Jet jet;
75 
76  jet.radius = m_jetR;
77  jet.seedEta = seedEta;
78  jet.seedPhi = seedPhi;
79  jet.seedEt = seedEt;
80 
81  TLorentzVector jetVec;
82  float px{0}, py{0};
83  int clusterIndex {0};
84 
85  //build jet with clusters within dR from seed
86  for (const auto &cl: clusters) {
87  float dR_seed_cl = deltaR(seedEta, cl.vec.Eta(), seedPhi, cl.vec.Phi());
88 
89  if (dR_seed_cl < m_jetR) {
90  jetVec += cl.vec;
91  px += cl.vec.Px();
92  py += cl.vec.Py();
93 
94  jet.constituentsIndices.push_back(clusterIndex);
95  }
96  clusterIndex++;
97  }
98 
99 
100  // skip cone jets with 0 constituents
101  if (jet.constituentsIndices.empty()) {continue;}
102 
103 
104  // recombination scheme
105  if (m_recombScheme == RecombScheme::EScheme) {
106  // default option: add four-vectors of constituents
107  jet.vec = jetVec;
108  } else if (m_recombScheme == RecombScheme::SeedScheme) {
109  // massless jet, correct pt, re-using seed (eta,phi)
110  float m = 0;
111  float pt = std::sqrt(px*px + py*py);
112  jet.vec.SetPtEtaPhiM(pt, seedEta, seedPhi, m);
113  } else {
114  throw std::runtime_error("GEP ConeJetMaker recombinaton scheme error");
115  }
116  jets.emplace_back(std::move(jet));
117  }
118 
119  return jets;
120 }
121 
122 
123 std::string Gep::ConeJetMaker::toString() const {
124  std::stringstream ss;
125  ss << "ConeJetMaker. seed thresholds: " << m_seedEtThreshold
126  << " rad: " << m_jetR << " recombinaton scheme: " << recombSchemeAsString();
127  return ss.str();
128 }
129 
130 
131 double deltaR (double eta1, double eta2, double phi1, double phi2) {
132  double deltaPhi = TVector2::Phi_mpi_pi(phi1 - phi2);
133  double deltaEta = eta1 - eta2;
134  return std::sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi );
135 }
136 
137 
Gep::ConeJetMaker::string2RecombScheme
RecombScheme string2RecombScheme(const std::string &) const
Definition: ConeJetMaker.cxx:25
test_pyathena.px
px
Definition: test_pyathena.py:18
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:161
Gep::ConeJetMaker::ConeJetMaker
ConeJetMaker(float jetR, const xAOD::jFexSRJetRoIContainer &seeds, float seedEtThreshold=5.e3, const std::string &recombScheme="EScheme")
Definition: ConeJetMaker.cxx:13
Jet.h
Gep::ConeJetMaker::makeJets
virtual std::vector< Gep::Jet > makeJets(const std::vector< Gep::Cluster > &clusters) const override
Definition: ConeJetMaker.cxx:62
test_pyathena.pt
pt
Definition: test_pyathena.py:11
deltaR
double deltaR(double eta_1, double eta_2, double phi_1, double phi_2)
Definition: ConeJetMaker.cxx:131
defineDB.jets
jets
Definition: JetTagCalibration/share/defineDB.py:24
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
Phi_mpi_pi
__HOSTDEV__ double Phi_mpi_pi(double)
Definition: GeoRegion.cxx:10
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
P4Helpers::deltaEta
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition: P4Helpers.h:66
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Gep::Jet
Definition: Trigger/TrigT1/TrigGepPerf/src/Jet.h:12
Gep::ConeJetMaker::toString
std::string toString() const override
Definition: ConeJetMaker.cxx:123
Amg::py
@ py
Definition: GeoPrimitives.h:39
Gep::ConeJetMaker::RecombScheme
RecombScheme
Definition: ConeJetMaker.h:44
ConeJetMaker.h
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:25
Gep::ConeJetMaker::recombSchemeAsString
std::string recombSchemeAsString() const
Definition: ConeJetMaker.cxx:42
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106