17 const std::string& leptonDef) {
22 size_t se = m_electrons->size();
27 size_t sj = m_jets->size();
29 fOrigJetTLVs.resize(sj);
31 fJetD3PDTrkPtSums.resize(sj);
32 fJetD3PDTrkPtPVSums.resize(sj);
34 for (
size_t i = 0;
i < sj;
i++) {
35 fJetTLVs[
i].SetPtEtaPhiE(m_jets->at(
i)->pt(), m_jets->at(
i)->eta(), m_jets->at(
i)->phi(), m_jets->at(
i)->e());
36 fOrigJetTLVs[
i].SetPtEtaPhiE(m_jets->at(
i)->pt(), m_jets->at(
i)->eta(), m_jets->at(
i)->phi(), m_jets->at(
i)->e());
45 cout <<
" - (pre-OR) Jet # " <<
i <<
47 fJetTLVs[
i].Pt() <<
" " <<
48 fJetTLVs[
i].Eta() <<
" " <<
49 fJetTLVs[
i].Phi() << endl;
53 for (
size_t i = 0;
i <
se;
i++) {
54 fElGood[
i] = m_electrons->at(
i)->auxdataConst<
char>(leptonDef.c_str());
56 if (m_electrons->at(
i)->caloCluster()) {
57 fElClTLVs[
i].SetPtEtaPhiM(m_electrons->at(
i)->caloCluster()->e() /
58 std::cosh(m_electrons->at(
i)->caloCluster()->eta()),
59 m_electrons->at(
i)->caloCluster()->eta(), m_electrons->at(
60 i)->caloCluster()->phi(), 0.511);
62 fElClTLVs[
i] = m_electrons->at(
i)->p4();
65 if (m_electrons->at(
i)->trackParticle() && m_electrons->at(
i)->caloCluster()) {
66 fElTLVs[
i].SetPtEtaPhiM(m_electrons->at(
i)->caloCluster()->e() /
67 std::cosh(m_electrons->at(
i)->trackParticle()->eta()),
68 m_electrons->at(
i)->trackParticle()->eta(), m_electrons->at(
69 i)->trackParticle()->phi(), 0.511);
71 fElTLVs[
i] = m_electrons->at(
i)->p4();
74 cout <<
" - (pre-OR) El # " <<
i <<
76 fElTLVs[
i].Pt() <<
" " <<
77 fElTLVs[
i].Eta() <<
" " <<
78 fElTLVs[
i].Phi() << endl;
84 size_t nJets = m_jets->size();
86 fJetAssocElCls = vector<set<int> >(nJets);
87 size_t nEls = m_electrons->size();
88 fElClAssocJet = vector<int>(nEls, -1);
92 TLorentzVector elcl,
jet;
93 for (
size_t z = 0;
z < nEls; ++
z) {
94 if (!fElGood[
z])
continue;
98 for (
size_t y = 0;
y < nJets; ++
y) {
100 dr = elcl.DeltaR(
jet);
107 if (drmin_idx == -1)
continue;
108 fJetAssocElCls[drmin_idx].insert(
z);
109 fElClAssocJet[
z] = drmin_idx;
114 size_t nJets = m_jets->size();
117 fSubJets.resize(nJets);
118 for (
unsigned int k = 0;
k < nJets; ++
k) {
122 for (
size_t iJet = 0; iJet < nJets; iJet++) {
123 TLorentzVector originalJet = fOrigJetTLVs[iJet];
126 TLorentzVector elcorr = fElTLVs[ElIdx];
127 fJetTLVs[iJet] -= elcorr;
134 size_t nEls = m_electrons->size();
136 fGoodEls = vector<bool>(nEls,
true);
138 size_t nJets = fJetTLVs.size();
139 vector<TLorentzVector> TmpJetTLVs = fJetTLVs;
140 vector<TLorentzVector> TmpOrigJetTLVs = fOrigJetTLVs;
141 TLorentzVector
el,
jet, jetOrig;
143 for (
size_t iEl = 0; iEl < nEls; iEl++) {
144 if (!fElGood[iEl])
continue;
149 cout <<
" - (good) El # " << iEl <<
156 for (
size_t iJet = 0; iJet < nJets; iJet++) {
157 jet = fJetTLVs[iJet];
158 jetOrig = fOrigJetTLVs[iJet];
160 cout <<
" - (good) Jet # " << iJet <<
175 if ((jetOrig.Pt() >= 30
e3 && jetOrig.Pt() < 50
e3) &&
jet.Pt() < 20
e3) {
177 }
else if ((jetOrig.Pt() >= 50
e3 && jetOrig.Pt() < 100
e3) &&
jet.Pt() < 30
e3) {
179 }
else if ((jetOrig.Pt() >= 100
e3 && jetOrig.Pt() < 400
e3) &&
jet.Pt() < 90
e3) {
181 }
else if ((jetOrig.Pt() >= 400
e3 && jetOrig.Pt() < 800
e3) &&
jet.Pt() < 130
e3) {
183 }
else if ((jetOrig.Pt() >= 800
e3 && jetOrig.Pt() < 1200
e3) &&
jet.Pt() < 230
e3) {
185 }
else if ((jetOrig.Pt() >= 1200
e3 && jetOrig.Pt() < 1600
e3) &&
jet.Pt() < 700
e3) {
187 }
else if ((jetOrig.Pt() >= 1600
e3 && jetOrig.Pt() < 2000
e3) &&
jet.Pt() < 1250
e3) {
189 }
else if ((jetOrig.Pt() >= 2000
e3 && jetOrig.Pt() < 2200
e3) &&
jet.Pt() < 1300
e3) {
191 }
else if (jetOrig.Pt() > 2200
e3 &&
jet.Pt() < 1350
e3) {
196 if (
jet.DeltaR(
el) < 0.2) {
197 if (fDebug) cout <<
" El too close to jet. Removing." << endl;
200 fGoodEls[iEl] =
false;
202 if (fElClAssocJet[iEl] >= 0) {
204 TmpJetTLVs[fElClAssocJet[iEl]] +=
el;
208 fJetAssocElCls[iJet].erase(iEl);
214 fJetTLVs = TmpJetTLVs;
215 fOrigJetTLVs = TmpOrigJetTLVs;
216 fGoodJets = vector<bool>(nJets,
true);
218 for (
size_t iJet = 0; iJet < nJets; iJet++) {
219 jetOrig = fOrigJetTLVs[iJet];
221 if (jetOrig.Pt() >= 30
e3 && jetOrig.Pt() < 50
e3) {
222 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 20
e3;
223 }
else if (jetOrig.Pt() >= 50
e3 && jetOrig.Pt() < 100
e3) {
224 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 30
e3;
225 }
else if (jetOrig.Pt() >= 100
e3 && jetOrig.Pt() < 400
e3) {
226 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 90
e3;
227 }
else if (jetOrig.Pt() >= 400
e3 && jetOrig.Pt() < 800
e3) {
228 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 130
e3;
229 }
else if (jetOrig.Pt() >= 800
e3 && jetOrig.Pt() < 1200
e3) {
230 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 230
e3;
231 }
else if (jetOrig.Pt() >= 1200
e3 && jetOrig.Pt() < 1600
e3) {
232 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 700
e3;
233 }
else if (jetOrig.Pt() >= 1600
e3 && jetOrig.Pt() < 2000
e3) {
234 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 1250
e3;
235 }
else if (jetOrig.Pt() >= 2000
e3 && jetOrig.Pt() < 2200
e3) {
236 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 1300
e3;
237 }
else if (jetOrig.Pt() > 2200
e3) {
238 fGoodJets[iJet] = fJetTLVs[iJet].Pt() > 1350
e3;
244 size_t nJets = m_jets->size();
249 for (
size_t iJet = 0; iJet < nJets; iJet++) {
251 if (!fJetJVFs[iJet] ||
252 fJetJVFs[iJet] < 0)
continue;
255 iEl != fJetAssocElCls[iJet].end(); ++iEl) {
258 trk.SetPtEtaPhiE(m_electrons->at(ElIdx)->trackParticle()->pt(),
259 m_electrons->at(ElIdx)->trackParticle()->eta(), m_electrons->at(
260 ElIdx)->trackParticle()->phi(), m_electrons->at(ElIdx)->trackParticle()->e());
263 bool foundMatch =
false;
264 std::vector<const xAOD::TrackParticle*> jetTracks;
266 for (
size_t t = 0;
t < jetTracks.size(); ++
t) {
267 TLorentzVector jet_trk;
268 jet_trk.SetPtEtaPhiE(jetTracks[
t]->
pt(), jetTracks[
t]->
eta(), jetTracks[
t]->
phi(), jetTracks[
t]->
e());
269 if (jet_trk.DeltaR(trk) < 0.01) {
274 if (!foundMatch)
continue;
277 fJetD3PDTrkPtSums[iJet] -= trk.Pt();
279 if (std::fabs(
std::sin(m_electrons->at(ElIdx)->trackParticle()->theta()) *
280 m_electrons->at(ElIdx)->trackParticle()->z0()) < 1.0 &&
281 std::fabs(m_electrons->at(ElIdx)->trackParticle()->d0()) < 1.0) fJetD3PDTrkPtPVSums[iJet] -= trk.Pt();
285 if (fJetD3PDTrkPtSums[iJet] < 0 ||
286 fJetD3PDTrkPtPVSums[iJet] < 0) fJetJVFs[iJet] = 0;
288 else if (fJetD3PDTrkPtSums[iJet] == 0) fJetJVFs[iJet] = -1;
290 else fJetJVFs[iJet] = fJetD3PDTrkPtPVSums[iJet] / fJetD3PDTrkPtSums[iJet];
301 size_t se = m_electrons->size();
302 size_t sj = m_jets->size();
303 for (
size_t i = 0;
i < sj;
i++) {
307 if (fGoodJets[
i]) m_jets->at(
i)->auxdata<
char>(
"passesFancyOR") = 1;
317 else m_jets->at(
i)->auxdata<
char>(
"passesFancyOR") = 0;
319 if (fSubJets[
i] == 1) m_jets->at(
i)->auxdata<
char>(
"subtractedJet") = 1;
328 else m_jets->at(
i)->auxdata<
char>(
"subtractedJet") = 0;
335 cout <<
" - (final) Jet # " <<
i <<
337 m_jets->at(
i)->pt() <<
" " <<
338 m_jets->at(
i)->eta() <<
" " <<
339 m_jets->at(
i)->phi() <<
" " <<
340 m_jets->at(
i)->m() <<
" good " << (
int) m_jets->at(
i)->auxdata<
char>(leptonDef.c_str()) << endl;
345 for (
size_t j = 0; j <
se; j++) {
346 if (!fGoodEls[j] || !fElGood[j]) {
347 m_electrons->at(j)->auxdata<
char>(leptonDef.c_str()) = 0;
349 m_electrons->at(j)->auxdata<
char>(leptonDef.c_str()) = 1;
353 cout <<
" - (final) El # " << j <<
355 m_electrons->at(j)->pt() <<
" " <<
356 m_electrons->at(j)->eta() <<
" " <<
357 m_electrons->at(j)->phi() <<
" " <<
358 m_electrons->at(j)->m() <<
" good " << (
int) m_electrons->at(j)->auxdata<
char>(leptonDef.c_str()) << endl;