ATLAS Offline Software
Loading...
Searching...
No Matches
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},
21}
22
23
25Gep::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
41std::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 " +
54 }
55
56 return scheme_it->first;
57}
58
59double deltaR (double eta_1, double eta_2, double phi_1, double phi_2);
60
61std::vector<Gep::Jet>
62Gep::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
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
106 // default option: add four-vectors of constituents
107 jet.vec = jetVec;
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
123std::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
131double 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
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
Scalar deltaR(const MatrixBase< Derived > &vec) const
static Double_t ss
std::string toString() const override
std::vector< std::pair< std::string, RecombScheme > > m_knownSchemes
virtual std::vector< Gep::Jet > makeJets(const std::vector< Gep::Cluster > &clusters) const override
std::string recombSchemeAsString() const
RecombScheme m_recombScheme
ConeJetMaker(float jetR, const xAOD::jFexSRJetRoIContainer &seeds, float seedEtThreshold=5.e3, const std::string &recombScheme="EScheme")
RecombScheme string2RecombScheme(const std::string &) const
const xAOD::jFexSRJetRoIContainer & m_seeds
jFexSRJetRoIContainer_v1 jFexSRJetRoIContainer