1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#ifndef JetReco_GenJet_h
#define JetReco_GenJet_h
/** \class reco::GenJet
*
* \short Jets made from MC generator particles
*
* GenJet represents Jets made from MC candidates
* Provide energy contributions from different particle types
* in addition to generic Jet parameters
*
* \author Fedor Ratnikov, UMd
*
* \version Original March 31, 2006 by F.R.
* Added GenJet specifics, 2019 by Salvatore Rappoccio
************************************************************/
#include "DataFormats/JetReco/interface/Jet.h"
namespace reco {
class GenParticle;
class GenJet : public Jet {
public:
struct Specific {
Specific()
: m_EmEnergy(0),
m_HadEnergy(0),
m_InvisibleEnergy(0),
m_AuxiliaryEnergy(0),
m_ChargedHadronEnergy(0),
m_NeutralHadronEnergy(0),
m_ChargedEmEnergy(0),
m_NeutralEmEnergy(0),
m_MuonEnergy(0),
m_ChargedHadronMultiplicity(0),
m_NeutralHadronMultiplicity(0),
m_ChargedEmMultiplicity(0),
m_NeutralEmMultiplicity(0),
m_MuonMultiplicity(0) {}
/// Calo-like definitions:
/// Energy of EM particles
float m_EmEnergy;
/// Energy of Hadrons
float m_HadEnergy;
/// Invisible energy (mu, nu, ...)
float m_InvisibleEnergy;
/// Anything else (undecayed Sigmas etc.)
float m_AuxiliaryEnergy;
/// PF-like definitions:
/// pi+, K+, etc
float m_ChargedHadronEnergy;
/// K0, etc
float m_NeutralHadronEnergy;
/// Electrons
float m_ChargedEmEnergy;
/// Photons
float m_NeutralEmEnergy;
/// Muons
float m_MuonEnergy;
/// Corresponding multiplicities:
int m_ChargedHadronMultiplicity;
int m_NeutralHadronMultiplicity;
int m_ChargedEmMultiplicity;
int m_NeutralEmMultiplicity;
int m_MuonMultiplicity;
};
/** Default constructor*/
GenJet() {}
/** Constructor from values*/
GenJet(const LorentzVector& fP4,
const Point& fVertex,
const Specific& fSpecific,
const Jet::Constituents& fConstituents);
GenJet(const LorentzVector& fP4, const Point& fVertex, const Specific& fSpecific);
/** backward compatible, vertex=(0,0,0) */
GenJet(const LorentzVector& fP4, const Specific& fSpecific, const Jet::Constituents& fConstituents);
~GenJet() override {}
/** Returns energy of electromagnetic particles*/
float emEnergy() const { return m_specific.m_EmEnergy; };
/** Returns energy of hadronic particles*/
float hadEnergy() const { return m_specific.m_HadEnergy; };
/** Returns invisible energy*/
float invisibleEnergy() const { return m_specific.m_InvisibleEnergy; };
/** Returns other energy (undecayed Sigmas etc.)*/
float auxiliaryEnergy() const { return m_specific.m_AuxiliaryEnergy; };
// PF-like definitions
float chargedHadronEnergy() const { return m_specific.m_ChargedHadronEnergy; }
float neutralHadronEnergy() const { return m_specific.m_NeutralHadronEnergy; }
float chargedEmEnergy() const { return m_specific.m_ChargedEmEnergy; }
float neutralEmEnergy() const { return m_specific.m_NeutralEmEnergy; }
float muonEnergy() const { return m_specific.m_MuonEnergy; }
int chargedHadronMultiplicity() const { return m_specific.m_ChargedHadronMultiplicity; }
int neutralHadronMultiplicity() const { return m_specific.m_NeutralHadronMultiplicity; }
int chargedEmMultiplicity() const { return m_specific.m_ChargedEmMultiplicity; }
int neutralEmMultiplicity() const { return m_specific.m_NeutralEmMultiplicity; }
int muonMultiplicity() const { return m_specific.m_MuonMultiplicity; }
/// Detector Eta (use reference Z and jet kinematics only)
float detectorEta(float fZVertex) const;
/// convert generic constituent to specific type
static const GenParticle* genParticle(const reco::Candidate* fConstituent);
/// get specific constituent
virtual const GenParticle* getGenConstituent(unsigned fIndex) const;
/// get all constituents
virtual std::vector<const GenParticle*> getGenConstituents() const;
// block accessors
const Specific& getSpecific() const { return m_specific; }
/// set the specific (note: responsibility of keeping it consistent with the jet daughers belongs to the caller)
void setSpecific(const Specific& spec) { m_specific = spec; }
/// Polymorphic clone
GenJet* clone() const override;
/// Print object
std::string print() const override;
private:
/// Polymorphic overlap
bool overlap(const Candidate&) const override;
// Data members
//Variables specific to to the GenJet class
Specific m_specific;
};
} // namespace reco
// temporary fix before include_checcker runs globally
#include "DataFormats/JetReco/interface/GenJetCollection.h" //INCLUDECHECKER:SKIP
#endif
|