ATLAS Offline Software
Loading...
Searching...
No Matches
Gep::ModAntikTJetMaker Class Reference

#include <ModAntikTJetMaker.h>

Inheritance diagram for Gep::ModAntikTJetMaker:
Collaboration diagram for Gep::ModAntikTJetMaker:

Public Member Functions

 ModAntikTJetMaker (const std::string &alg="ModAntikT", int nIter=10000, float jetR=0.4)
virtual std::vector< Gep::JetmakeJets (const std::vector< Gep::Cluster > &clusters) const override
virtual std::string toString () const override
void setName (const std::string &jetAlg)
void setNIter (int nIter)
void setJetR (float jetR)

Private Attributes

std::string m_jetAlg
int m_nIter
float m_jetR

Detailed Description

Definition at line 14 of file ModAntikTJetMaker.h.

Constructor & Destructor Documentation

◆ ModAntikTJetMaker()

Gep::ModAntikTJetMaker::ModAntikTJetMaker ( const std::string & alg = "ModAntikT",
int nIter = 10000,
float jetR = 0.4 )
inline

Member Function Documentation

◆ makeJets()

std::vector< Gep::Jet > Gep::ModAntikTJetMaker::makeJets ( const std::vector< Gep::Cluster > & clusters) const
overridevirtual

Implements Gep::IJetMaker.

Definition at line 10 of file ModAntikTJetMaker.cxx.

10 {
11
12 std::vector<Gep::Cluster> constituents = clusters;
13
14 std::vector<Gep::Jet> v_jets;
15
16 const unsigned int n_constituents = constituents.size();
17 std::vector< std::vector<int> > v_constitutents_in_jet_indices(n_constituents, std::vector<int>() );
18 // initialize vector of constituents with it's own index
19 for(unsigned int i = 0; i < n_constituents; i++){ v_constitutents_in_jet_indices.at(i).push_back(i); }
20
21 int niter = 0;
22
23 //Iterate over clusters
24 while(!constituents.empty() && niter < m_nIter){
25
26 const unsigned int n_clusters = constituents.size();
27
28 //create factorized separation list
29 std::vector< std::vector< float > > DeltaR2(n_clusters, std::vector< float >(n_clusters, 0.0));
30 std::vector< float > InvPt2 (n_clusters, 0.0);
31 for (unsigned int i = 0; i < n_clusters; i++){
32 InvPt2[i] = 1/constituents.at(i).vec.Perp2();
33 DeltaR2[i][i] = 1.0;
34 for(unsigned int j = i+1; j < n_clusters; j++){
35 float deltaEta = constituents.at(i).vec.Eta() - constituents.at(j).vec.Eta();
36 float deltaPhi = constituents.at(i).vec.DeltaPhi(constituents.at(j).vec);
37 DeltaR2[i][j] = (deltaEta*deltaEta + deltaPhi*deltaPhi)/(m_jetR*m_jetR);
38 DeltaR2[j][i] = (deltaEta*deltaEta + deltaPhi*deltaPhi)/(m_jetR*m_jetR);
39 }
40 }
41
42
43 // indices of minimum DeltaR in i-th row (aka j in d_ij)
44 std::vector< int > minDeltaR2_indices(n_clusters, 0.0);
45 for (unsigned int i = 0; i < n_clusters; i++ ) {
46 minDeltaR2_indices[i] = std::distance( DeltaR2[i].begin(), std::min_element(std::begin(DeltaR2[i]), std::end(DeltaR2[i])) );
47 }
48
49 //d_ij vector of with minDeltaR2_indices_ij
50 std::vector< float > InvPt2DeltaR2(n_clusters, 0.0);
51 for (unsigned int i = 0; i < n_clusters; i++ ) InvPt2DeltaR2[i] = InvPt2[i]*DeltaR2[i][minDeltaR2_indices[i]];
52
53 // index of minimum d_ij (aka i in d_ij)
54 int minInvPt2DeltaR2_index = std::distance(InvPt2DeltaR2.begin() , std::min_element(std::begin(InvPt2DeltaR2), std::end(InvPt2DeltaR2)) );
55
56 // if d_ij < diB, merge j into i, otherwise i is jet
57 if (InvPt2DeltaR2[minInvPt2DeltaR2_index] < InvPt2[minInvPt2DeltaR2_index]){
58 //This is the WTA pt merging scheme
59 // only momentum components are modified
60 TVector3 momentum_vector(constituents.at(minInvPt2DeltaR2_index).vec.Px() + constituents.at(minDeltaR2_indices[minInvPt2DeltaR2_index]).vec.Px(),
61 constituents.at(minInvPt2DeltaR2_index).vec.Py() + constituents.at(minDeltaR2_indices[minInvPt2DeltaR2_index]).vec.Py(),
62 constituents.at(minInvPt2DeltaR2_index).vec.Pz() + constituents.at(minDeltaR2_indices[minInvPt2DeltaR2_index]).vec.Pz());
63
64 //px, py and pz are recalculated from pt, eta and phi, leaving eta and phi unchanged
65 constituents.at(minInvPt2DeltaR2_index).vec.SetPtEtaPhiE(momentum_vector.Pt(),
66 constituents.at(minInvPt2DeltaR2_index).vec.Eta(),
67 constituents.at(minInvPt2DeltaR2_index).vec.Phi(),
68 momentum_vector.Mag() );
69
70 // add indices in j to lilst of constituents of subjet i
71 v_constitutents_in_jet_indices.at(minInvPt2DeltaR2_index).insert( v_constitutents_in_jet_indices.at(minInvPt2DeltaR2_index).end(),
72 v_constitutents_in_jet_indices.at(minDeltaR2_indices[minInvPt2DeltaR2_index]).begin(),
73 v_constitutents_in_jet_indices.at(minDeltaR2_indices[minInvPt2DeltaR2_index]).end() );
74
75 constituents.erase(constituents.begin() + minDeltaR2_indices[minInvPt2DeltaR2_index]);
76 v_constitutents_in_jet_indices.erase(v_constitutents_in_jet_indices.begin() + minDeltaR2_indices[minInvPt2DeltaR2_index]);
77 } else {
78
79 //create custom jet based on constituents.at(minInvPt2DeltaR2_index)
80 Gep::Jet jet;
81 jet.vec.SetXYZT(constituents.at(minInvPt2DeltaR2_index).vec.Px(), constituents.at(minInvPt2DeltaR2_index).vec.Py(),
82 constituents.at(minInvPt2DeltaR2_index).vec.Pz(), constituents.at(minInvPt2DeltaR2_index).vec.E());
83 jet.constituentsIndices.insert( jet.constituentsIndices.end(),
84 v_constitutents_in_jet_indices.at( minInvPt2DeltaR2_index).begin(),
85 v_constitutents_in_jet_indices.at( minInvPt2DeltaR2_index).end());
86
87 v_jets.push_back(std::move(jet));
88
89 constituents.erase(constituents.begin() + minInvPt2DeltaR2_index);
90 v_constitutents_in_jet_indices.erase(v_constitutents_in_jet_indices.begin() + minDeltaR2_indices[minInvPt2DeltaR2_index]);
91
92 }
93
94 niter++;
95 }
96
97 return v_jets;
98}
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
double deltaEta(const I4Momentum &p1, const I4Momentum &p2)
Computes efficiently .
Definition P4Helpers.h:66
std::vector< int > constituentsIndices

◆ setJetR()

void Gep::ModAntikTJetMaker::setJetR ( float jetR)
inline

Definition at line 30 of file ModAntikTJetMaker.h.

30{ m_jetR = jetR;}

◆ setName()

void Gep::ModAntikTJetMaker::setName ( const std::string & jetAlg)
inline

Definition at line 27 of file ModAntikTJetMaker.h.

27{ m_jetAlg = jetAlg;}

◆ setNIter()

void Gep::ModAntikTJetMaker::setNIter ( int nIter)
inline

Definition at line 29 of file ModAntikTJetMaker.h.

29{ m_nIter = nIter;}

◆ toString()

std::string Gep::ModAntikTJetMaker::toString ( ) const
overridevirtual

Implements Gep::IJetMaker.

Definition at line 101 of file ModAntikTJetMaker.cxx.

101 {
102
103 std::stringstream ss;
104 ss << "ModAntikTJetMaker. iterations: " << m_nIter
105 << " rad: " << m_jetR;
106 return ss.str();
107}
static Double_t ss

Member Data Documentation

◆ m_jetAlg

std::string Gep::ModAntikTJetMaker::m_jetAlg
private

Definition at line 35 of file ModAntikTJetMaker.h.

◆ m_jetR

float Gep::ModAntikTJetMaker::m_jetR
private

Definition at line 39 of file ModAntikTJetMaker.h.

◆ m_nIter

int Gep::ModAntikTJetMaker::m_nIter
private

Definition at line 38 of file ModAntikTJetMaker.h.


The documentation for this class was generated from the following files: