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
141
142
143
144
145
|
#ifndef JetReco_JPTJet_h
#define JetReco_JPTJet_h
/** \class reco::JPTJet
*
* \short Jets made from CaloJets corrected for ZSP and tracks
*
* JPTJet represents Jets made from CaloTowers
* and corrected for tracks
* in addition to generic Jet parameters it gives
* reference to the original jet, ZSP scale, associated tracks
*
* \author Olga Kodolova
*
************************************************************/
#include "DataFormats/JetReco/interface/Jet.h"
#include "DataFormats/JetReco/interface/JetCollection.h"
#include "DataFormats/JetReco/interface/CaloJet.h"
#include "DataFormats/JetReco/interface/CaloJetCollection.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h"
#include "DataFormats/Common/interface/Ref.h"
#include "DataFormats/Common/interface/RefVector.h"
namespace reco {
class JPTJet : public Jet {
public:
struct Specific {
Specific()
: mChargedHadronEnergy(0),
mChargedEmEnergy(0),
mResponseOfChargedWithEff(0),
mResponseOfChargedWithoutEff(0),
mSumPtOfChargedWithEff(0),
mSumPtOfChargedWithoutEff(0),
mSumEnergyOfChargedWithEff(0),
mSumEnergyOfChargedWithoutEff(0),
R2momtr(0),
Eta2momtr(0),
Phi2momtr(0),
Pout(0),
Zch(0),
JPTSeed(0) {}
edm::RefToBase<reco::Jet> theCaloJetRef;
reco::TrackRefVector pionsInVertexInCalo;
reco::TrackRefVector pionsInVertexOutCalo;
reco::TrackRefVector pionsOutVertexInCalo;
reco::TrackRefVector muonsInVertexInCalo;
reco::TrackRefVector muonsInVertexOutCalo;
reco::TrackRefVector muonsOutVertexInCalo;
reco::TrackRefVector elecsInVertexInCalo;
reco::TrackRefVector elecsInVertexOutCalo;
reco::TrackRefVector elecsOutVertexInCalo;
float mChargedHadronEnergy;
float mChargedEmEnergy;
float mResponseOfChargedWithEff;
float mResponseOfChargedWithoutEff;
float mSumPtOfChargedWithEff;
float mSumPtOfChargedWithoutEff;
float mSumEnergyOfChargedWithEff;
float mSumEnergyOfChargedWithoutEff;
float R2momtr;
float Eta2momtr;
float Phi2momtr;
float Pout;
float Zch;
int JPTSeed;
};
/** Default constructor*/
JPTJet() {}
/** Constructor from values*/
JPTJet(const LorentzVector& fP4,
const Point& fVertex,
const Specific& fSpecific,
const Jet::Constituents& fConstituents);
/** backward compatible, vertex=(0,0,0) */
JPTJet(const LorentzVector& fP4, const Specific& fSpecific, const Jet::Constituents& fConstituents);
~JPTJet() override {}
/// chargedHadronEnergy
float chargedHadronEnergy() const { return mspecific.mChargedHadronEnergy; }
/// chargedHadronEnergyFraction
float chargedHadronEnergyFraction() const { return chargedHadronEnergy() / energy(); }
/// chargedEmEnergy
float chargedEmEnergy() const { return mspecific.mChargedEmEnergy; }
/// chargedEmEnergyFraction
float chargedEmEnergyFraction() const { return chargedEmEnergy() / energy(); }
/// chargedMultiplicity
int chargedMultiplicity() const {
return mspecific.muonsInVertexInCalo.size() + mspecific.muonsInVertexOutCalo.size() +
mspecific.pionsInVertexInCalo.size() + mspecific.pionsInVertexOutCalo.size() +
mspecific.elecsInVertexInCalo.size() + mspecific.elecsInVertexOutCalo.size();
}
/// muonMultiplicity
int muonMultiplicity() const {
return mspecific.muonsInVertexInCalo.size() + mspecific.muonsInVertexOutCalo.size();
}
/// elecMultiplicity
int elecMultiplicity() const {
return mspecific.elecsInVertexInCalo.size() + mspecific.elecsInVertexOutCalo.size();
}
/// Tracks
const reco::TrackRefVector& getPionsInVertexInCalo() const { return mspecific.pionsInVertexInCalo; }
const reco::TrackRefVector& getPionsInVertexOutCalo() const { return mspecific.pionsInVertexOutCalo; }
const reco::TrackRefVector& getPionsOutVertexInCalo() const { return mspecific.pionsOutVertexInCalo; }
const reco::TrackRefVector& getMuonsInVertexInCalo() const { return mspecific.muonsInVertexInCalo; }
const reco::TrackRefVector& getMuonsInVertexOutCalo() const { return mspecific.muonsInVertexOutCalo; }
const reco::TrackRefVector& getMuonsOutVertexInCalo() const { return mspecific.muonsOutVertexInCalo; }
const reco::TrackRefVector& getElecsInVertexInCalo() const { return mspecific.elecsInVertexInCalo; }
const reco::TrackRefVector& getElecsInVertexOutCalo() const { return mspecific.elecsInVertexOutCalo; }
const reco::TrackRefVector& getElecsOutVertexInCalo() const { return mspecific.elecsOutVertexInCalo; }
const edm::RefToBase<reco::Jet>& getCaloJetRef() const { return mspecific.theCaloJetRef; }
/// block accessors
const Specific& getSpecific() const { return mspecific; }
/// Polymorphic clone
JPTJet* clone() const override;
/// Print object in details
virtual void printJet() const;
std::string print() const override;
private:
/// Polymorphic overlap
bool overlap(const Candidate&) const override;
//Variables specific to to the JPTJet class
Specific mspecific;
};
// streamer
//std::ostream& operator<<(std::ostream& out, const reco::JPTJet& jet);
} // namespace reco
// temporary fix before include_checcker runs globally
#include "DataFormats/JetReco/interface/JPTJetCollection.h" //INCLUDECHECKER:SKIP
#endif
|