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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
#ifndef DataFormats_BTauReco_CombinedTauTagInfo_h
#define DataFormats_BTauReco_CombinedTauTagInfo_h
/* class CombinedTauTagInfo
* Extended object for the Tau Combination algorithm,
* created: Dec 18 2006,
* revised: Jul 02 2007
* author: Ludovic Houchu.
*/
#include <limits>
#include <cmath>
#include "CLHEP/Vector/LorentzVector.h"
#include "DataFormats/BTauReco/interface/RefMacros.h"
#include "DataFormats/JetReco/interface/Jet.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/JetReco/interface/JetTracksAssociation.h"
#include "DataFormats/BTauReco/interface/JTATagInfo.h"
#include "DataFormats/BTauReco/interface/IsolatedTauTagInfo.h"
namespace reco {
class CombinedTauTagInfo : public JTATagInfo {
public:
CombinedTauTagInfo() {}
CombinedTauTagInfo(const JetTracksAssociationRef& jtaRef) : JTATagInfo(jtaRef) {
thecandidate_passed_trackerselection = false;
thecandidate_is_GoodTauCandidate = false;
thecandidate_is_infact_GoodElectronCandidate = false;
thecandidate_is_infact_GoodMuonCandidate = false;
thecandidate_needs_LikelihoodRatio_discrimination = false;
filtered_Tks_.clear();
signal_Tks_.clear();
isol_Tks_.clear();
theleadTk_signedipt_significance = NAN;
theleadTk_signedip3D_significance = NAN;
thesignedflightpath_significance = NAN;
theTksEt_o_JetEt = NAN;
theneutralE = NAN;
theisolneutralE = NAN;
theisolneutralEtsum = NAN;
theneutralECALClus_number = std::numeric_limits<int>::quiet_NaN();
theneutralECALClus_radius = NAN;
theneutralE_o_TksEneutralE = NAN;
theisolneutralE_o_TksEneutralE = NAN;
theneutralE_ratio = NAN;
thealternatrecJet_HepLV.setPx(NAN);
thealternatrecJet_HepLV.setPy(NAN);
thealternatrecJet_HepLV.setPz(NAN);
thealternatrecJet_HepLV.setE(NAN);
theECALEt_o_leadTkPt = NAN;
theHCALEt_o_leadTkPt = NAN;
}
~CombinedTauTagInfo() override {}
// float discriminator() returns 0. if candidate did not pass tracker selection,
// 1. if candidate passed tracker selection and did not contain neutral ECAL clus.,
// 0<= <=1 if candidate passed tracker selection, contained neutral ECAL clus. and went through the likelihood ratio mechanism,
// NaN the values of the likelihood functions PDFs are 0 (test the result of discriminator() with bool isnan(.));
//the reference to the IsolatedTauTagInfo
const IsolatedTauTagInfoRef& isolatedtautaginfoRef() const { return IsolatedTauTagInfoRef_; }
void setisolatedtautaginfoRef(const IsolatedTauTagInfoRef& x) { IsolatedTauTagInfoRef_ = x; }
//get the tracks from the JetTag
const TrackRefVector& allTks() const { return m_jetTracksAssociation->second; }
//the tracks considered in the isolation strip and signal cone selections
const TrackRefVector& selectedTks() const { return filtered_Tks_; }
void setselectedTks(const TrackRefVector& x) { filtered_Tks_ = x; }
//the tracks in the signal cone
const TrackRefVector& signalTks() const { return signal_Tks_; }
void setsignalTks(const TrackRefVector& x) { signal_Tks_ = x; }
int signalTks_qsum() const { // NaN : (int)(signal_Tks_.size())=0;
int signal_Tks_qsum_ = std::numeric_limits<int>::quiet_NaN();
if ((int)(signal_Tks_.size()) != 0) {
signal_Tks_qsum_ = 0;
for (TrackRefVector::const_iterator iTk = signal_Tks_.begin(); iTk != signal_Tks_.end(); iTk++) {
signal_Tks_qsum_ += (**iTk).charge();
}
}
return signal_Tks_qsum_;
}
//the tracks in the isolation band
const TrackRefVector& isolTks() const { return isol_Tks_; }
void setisolTks(const TrackRefVector& x) { isol_Tks_ = x; }
CombinedTauTagInfo* clone() const override { return new CombinedTauTagInfo(*this); }
bool passed_trackerselection() const { return (thecandidate_passed_trackerselection); }
void setpassed_trackerselection(bool x) { thecandidate_passed_trackerselection = x; }
bool is_GoodTauCandidate() const {
return (thecandidate_is_GoodTauCandidate);
} // true : passed tracker sel. and no neutral activity inside jet;
void setis_GoodTauCandidate(bool x) { thecandidate_is_GoodTauCandidate = x; }
bool infact_GoodElectronCandidate() const {
return (thecandidate_is_infact_GoodElectronCandidate);
} // true : passed tracker sel., contains 1 signal tk, e-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space;
void setinfact_GoodElectronCandidate(bool x) { thecandidate_is_infact_GoodElectronCandidate = x; }
bool infact_GoodMuonCandidate() const {
return (thecandidate_is_infact_GoodMuonCandidate);
} // true : passed tracker sel., contains 1 signal tk, mu-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space;
void setinfact_GoodMuonCandidate(bool x) { thecandidate_is_infact_GoodMuonCandidate = x; }
bool needs_LikelihoodRatio_discrimination() const {
return (thecandidate_needs_LikelihoodRatio_discrimination);
} // true : passed tracker sel. and neutral activity inside jet;
void setneeds_LikelihoodRatio_discrimination(bool x) { thecandidate_needs_LikelihoodRatio_discrimination = x; }
double leadTk_signedipt_significance() const { return (theleadTk_signedipt_significance); } // NaN : failure;
void setleadTk_signedipt_significance(double x) { theleadTk_signedipt_significance = x; }
double leadTk_signedip3D_significance() const { return (theleadTk_signedip3D_significance); } // NaN : failure;
void setleadTk_signedip3D_significance(double x) { theleadTk_signedip3D_significance = x; }
double signedflightpath_significance() const {
return (thesignedflightpath_significance);
} // NaN : failure, did not build a SV.;
void setsignedflightpath_significance(double x) { thesignedflightpath_significance = x; }
// Ettks/Etjet;
double TksEt_o_JetEt() const { return (theTksEt_o_JetEt); }
void setTksEt_o_JetEt(double x) { theTksEt_o_JetEt = x; }
// Eneutr.clus.;
double neutralE() const { return (theneutralE); }
void setneutralE(double x) { theneutralE = x; }
// Eneutr.clus.,isol.band;
double isolneutralE() const { return (theisolneutralE); }
void setisolneutralE(double x) { theisolneutralE = x; }
// sum of Etneutr.clus.,isol.band;
double isolneutralEtsum() const { return (theisolneutralEtsum); }
void setisolneutralEtsum(double x) { theisolneutralEtsum = x; }
int neutralECALClus_number() const { return (theneutralECALClus_number); }
void setneutralECALClus_number(int x) { theneutralECALClus_number = x; }
//mean DRneutr.clus.-lead.tk
double neutralECALClus_radius() const { return (theneutralECALClus_radius); } // NaN : neutralECALClus_number()=0;
void setneutralECALClus_radius(double x) { theneutralECALClus_radius = x; }
// Eneutr.clus. / (Eneutr.clus. + Etks) , Etks built with tks impulsion and charged pi mass hypothesis;
double neutralE_o_TksEneutralE() const { return (theneutralE_o_TksEneutralE); }
void setneutralE_o_TksEneutralE(double x) { theneutralE_o_TksEneutralE = x; }
// Eneutr.clus.,isol.band / (Eneutr.clus. + Etks);
double isolneutralE_o_TksEneutralE() const { return (theisolneutralE_o_TksEneutralE); }
void setisolneutralE_o_TksEneutralE(double x) { theisolneutralE_o_TksEneutralE = x; }
// Eneutr.clus.,isol.band / Eneutr.clus.;
double neutralE_ratio() const { return (theneutralE_ratio); } // NaN : neutralECALClus_number()=0;
void setneutralE_ratio(double x) { theneutralE_ratio = x; }
CLHEP::HepLorentzVector alternatrecJet_HepLV() const {
return (thealternatrecJet_HepLV);
} // rec. pi+/- candidates + neutral ECAL clus. combined;
void setalternatrecJet_HepLV(CLHEP::HepLorentzVector x) { thealternatrecJet_HepLV = x; }
// EtECAL*/Ptlead.tk *using ECAL cell hits inside a DR cone around lead tk ECAL impact point direction;
double ECALEt_o_leadTkPt() const {
return (theECALEt_o_leadTkPt);
} // NaN : failure when trying to find the lead. tk contact on ECAL surface point;
void setECALEt_o_leadTkPt(double x) { theECALEt_o_leadTkPt = x; }
// EtHCAL**/Ptlead.tk; **using HCAL tower hits inside a DR cone around lead tk ECAL impact point direction;
double HCALEt_o_leadTkPt() const {
return (theHCALEt_o_leadTkPt);
} // NaN : failure when trying to find the lead. tk contact on ECAL surface point;
void setHCALEt_o_leadTkPt(double x) { theHCALEt_o_leadTkPt = x; }
private:
IsolatedTauTagInfoRef IsolatedTauTagInfoRef_;
TrackRefVector filtered_Tks_;
TrackRefVector signal_Tks_;
TrackRefVector isol_Tks_;
bool thecandidate_passed_trackerselection;
bool thecandidate_is_GoodTauCandidate;
bool thecandidate_is_infact_GoodElectronCandidate;
bool thecandidate_is_infact_GoodMuonCandidate;
bool thecandidate_needs_LikelihoodRatio_discrimination;
double theleadTk_signedipt_significance;
double theleadTk_signedip3D_significance;
double thesignedflightpath_significance;
double theTksEt_o_JetEt;
double theneutralE;
double theisolneutralE;
double theisolneutralEtsum;
int theneutralECALClus_number;
double theneutralECALClus_radius;
double theneutralE_o_TksEneutralE;
double theisolneutralE_o_TksEneutralE;
double theneutralE_ratio;
CLHEP::HepLorentzVector thealternatrecJet_HepLV;
double theECALEt_o_leadTkPt;
double theHCALEt_o_leadTkPt;
};
DECLARE_EDM_REFS(CombinedTauTagInfo)
} // namespace reco
#endif // DataFormsts_BTauReco_CombinedTauTagInfo_h
|