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
|
#include "Calibration/IsolatedParticles/interface/CaloConstants.h"
#include "Calibration/IsolatedParticles/interface/FindCaloHitCone.h"
#include "Calibration/IsolatedParticles/interface/FindDistCone.h"
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
#include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iostream>
namespace spr {
//Ecal Endcap OR Barrel RecHits
std::vector<EcalRecHitCollection::const_iterator> findCone(const CaloGeometry* geo,
edm::Handle<EcalRecHitCollection>& hits,
const GlobalPoint& hpoint1,
const GlobalPoint& point1,
double dR,
const GlobalVector& trackMom,
bool debug) {
std::vector<EcalRecHitCollection::const_iterator> hit;
for (EcalRecHitCollection::const_iterator j = hits->begin(); j != hits->end(); j++) {
bool keepHit = false;
if (j->id().subdetId() == EcalEndcap) {
EEDetId EEid = EEDetId(j->id());
const GlobalPoint& rechitPoint = geo->getPosition(EEid);
if (spr::getDistInPlaneTrackDir(point1, trackMom, rechitPoint, debug) < dR)
keepHit = true;
} else if (j->id().subdetId() == EcalBarrel) {
EBDetId EBid = EBDetId(j->id());
const GlobalPoint& rechitPoint = geo->getPosition(EBid);
if (spr::getDistInPlaneTrackDir(point1, trackMom, rechitPoint, debug) < dR)
keepHit = true;
}
if (keepHit)
hit.push_back(j);
}
return hit;
}
// Ecal Endcap AND Barrel RecHits
std::vector<EcalRecHitCollection::const_iterator> findCone(const CaloGeometry* geo,
edm::Handle<EcalRecHitCollection>& barrelhits,
edm::Handle<EcalRecHitCollection>& endcaphits,
const GlobalPoint& hpoint1,
const GlobalPoint& point1,
double dR,
const GlobalVector& trackMom,
bool debug) {
std::vector<EcalRecHitCollection::const_iterator> hit;
// Only check both barrel and endcap when track is near transition
// region: 1.479-2*0.087 < trkEta < 1.479+2*0.087
bool doBarrel = false, doEndcap = false;
if (std::abs(point1.eta()) < (spr::etaBEEcal + 2 * spr::deltaEta))
doBarrel = true; // 1.479+2*0.087
if (std::abs(point1.eta()) > (spr::etaBEEcal - 2 * spr::deltaEta))
doEndcap = true; // 1.479-2*0.087
if (doBarrel) {
for (EcalRecHitCollection::const_iterator j = barrelhits->begin(); j != barrelhits->end(); j++) {
bool keepHit = false;
if (j->id().subdetId() == EcalBarrel) {
EBDetId EBid = EBDetId(j->id());
const GlobalPoint& rechitPoint = geo->getPosition(EBid);
if (spr::getDistInPlaneTrackDir(point1, trackMom, rechitPoint, debug) < dR)
keepHit = true;
} else {
edm::LogWarning("IsoTrack") << "PROBLEM : Endcap RecHits in Barrel Collection!?";
}
if (keepHit)
hit.push_back(j);
}
} // doBarrel
if (doEndcap) {
for (EcalRecHitCollection::const_iterator j = endcaphits->begin(); j != endcaphits->end(); j++) {
bool keepHit = false;
if (j->id().subdetId() == EcalEndcap) {
EEDetId EEid = EEDetId(j->id());
const GlobalPoint& rechitPoint = geo->getPosition(EEid);
if (spr::getDistInPlaneTrackDir(point1, trackMom, rechitPoint, debug) < dR)
keepHit = true;
} else {
edm::LogWarning("IsoTrack") << "PROBLEM : Barrel RecHits in Endcap Collection!?";
}
if (keepHit)
hit.push_back(j);
}
} // doEndcap
return hit;
}
//HBHE RecHits
std::vector<HBHERecHitCollection::const_iterator> findCone(const CaloGeometry* geo,
edm::Handle<HBHERecHitCollection>& hits,
const GlobalPoint& hpoint1,
const GlobalPoint& point1,
double dR,
const GlobalVector& trackMom,
bool debug) {
std::vector<HBHERecHitCollection::const_iterator> hit;
// Loop over Hcal RecHits
for (HBHERecHitCollection::const_iterator j = hits->begin(); j != hits->end(); j++) {
DetId detId(j->id());
const GlobalPoint rechitPoint =
(static_cast<const HcalGeometry*>(geo->getSubdetectorGeometry(detId)))->getPosition(detId);
if (spr::getDistInPlaneTrackDir(hpoint1, trackMom, rechitPoint, debug) < dR)
hit.push_back(j);
}
return hit;
}
// PCalo SimHits
std::vector<edm::PCaloHitContainer::const_iterator> findCone(const CaloGeometry* geo,
edm::Handle<edm::PCaloHitContainer>& hits,
const GlobalPoint& hpoint1,
const GlobalPoint& point1,
double dR,
const GlobalVector& trackMom,
bool debug) {
std::vector<edm::PCaloHitContainer::const_iterator> hit;
edm::PCaloHitContainer::const_iterator ihit;
for (ihit = hits->begin(); ihit != hits->end(); ihit++) {
DetId detId(ihit->id());
const GlobalPoint rechitPoint =
(detId.det() == DetId::Hcal)
? (static_cast<const HcalGeometry*>(geo->getSubdetectorGeometry(detId)))->getPosition(detId)
: geo->getPosition(detId);
if (spr::getDistInPlaneTrackDir(hpoint1, trackMom, rechitPoint, debug) < dR) {
hit.push_back(ihit);
}
}
return hit;
}
} // namespace spr
|