37 for (
size_t hitNr = 0; hitNr <
seed.hitInfo().size(); hitNr++) {
38 int subDetBit = 0x1 << hitNr;
44 int layerBit = 0x1 << layerOffset <<
seed.layerOrDiskNr(hitNr);
47 int nrLayersAlongTrajShifted =
seed.nrLayersAlongTraj() << 12;
48 info |= nrLayersAlongTrajShifted;
62 valMap_ = std::make_unique<reco::RecoEcalCandidateIsolationMap>(candHandle);
63 valInfoMap_ = std::make_unique<reco::RecoEcalCandidateIsolationMap>(candHandle);
93 std::unique_ptr<reco::RecoEcalCandidateIsolationMap>
valMap_;
94 std::unique_ptr<reco::RecoEcalCandidateIsolationMap>
valInfoMap_;
126 : recoEcalCandidateToken_(
133 productsToWrite_(
config.getParameter<
int>(
"productsToWrite")),
138 produces<reco::RecoEcalCandidateIsolationMap>(
"s2");
140 produces<reco::RecoEcalCandidateIsolationMap>(
"dPhi1BestS2");
141 produces<reco::RecoEcalCandidateIsolationMap>(
"dPhi2BestS2");
142 produces<reco::RecoEcalCandidateIsolationMap>(
"dzBestS2");
146 for (
size_t hitNr = 1; hitNr <=
nrHits_; hitNr++) {
147 produces<reco::RecoEcalCandidateIsolationMap>(
"dPhi" + std::to_string(hitNr));
148 produces<reco::RecoEcalCandidateIsolationMap>(
"dPhi" + std::to_string(hitNr) +
"Info");
149 produces<reco::RecoEcalCandidateIsolationMap>(
"dRZ" + std::to_string(hitNr));
150 produces<reco::RecoEcalCandidateIsolationMap>(
"dRZ" + std::to_string(hitNr) +
"Info");
152 produces<reco::RecoEcalCandidateIsolationMap>(
"nrClus");
153 produces<reco::RecoEcalCandidateIsolationMap>(
"seedClusEFrac");
154 produces<reco::RecoEcalCandidateIsolationMap>(
"phiWidth");
155 produces<reco::RecoEcalCandidateIsolationMap>(
"etaWidth");
190 varParamDesc.addVPSet(
"bins", binParamDesc);
191 desc.
add(
"dPhi1SParams", varParamDesc);
192 desc.
add(
"dPhi2SParams", varParamDesc);
193 desc.
add(
"dRZ2SParams", varParamDesc);
194 desc.
add<
int>(
"productsToWrite", 0);
195 descriptions.
add((
"hltEgammaHLTPixelMatchVarProducer"), desc);
206 if (!recoEcalCandHandle.
isValid())
208 else if (!pixelSeedsHandle.
isValid()) {
209 auto s2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
210 for (
unsigned int candNr = 0; candNr < recoEcalCandHandle->size(); candNr++) {
212 s2Map->insert(candRef, 0);
221 auto dPhi1BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
222 auto dPhi2BestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
223 auto dzBestS2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
224 auto s2Map = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
226 auto nrClusMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
227 auto seedClusEFracMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
228 auto phiWidthMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
229 auto etaWidthMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandHandle);
231 std::vector<PixelData> pixelData;
232 for (
size_t hitNr = 0; hitNr <
nrHits_; hitNr++) {
237 for (
unsigned int candNr = 0; candNr < recoEcalCandHandle->size(); candNr++) {
245 for (
auto&
seed : *pixelSeedsHandle) {
248 if (&(*candSCRef) == &(*pixelSCRef)) {
249 std::array<float, 4> s2Data =
calS2(
seed, -1);
250 std::array<float, 4> s2DataPos =
calS2(
seed, +1);
251 if (s2Data[0] < bestS2[0])
253 if (s2DataPos[0] < bestS2[0])
257 for (
auto& pixelDatum : pixelData) {
258 pixelDatum.fill(
seed);
264 s2Map->insert(candRef, bestS2[0]);
266 dPhi1BestS2Map->insert(candRef, bestS2[1]);
267 dPhi2BestS2Map->insert(candRef, bestS2[2]);
268 dzBestS2Map->insert(candRef, bestS2[3]);
271 nrClusMap->insert(candRef, candSCRef->clustersSize());
272 float seedClusEFrac = candSCRef->rawEnergy() > 0 ? candSCRef->seed()->energy() / candSCRef->rawEnergy() : 0.;
275 seedClusEFracMap->insert(candRef, seedClusEFrac);
276 float phiWidth = candSCRef->phiWidth();
277 float etaWidth = candSCRef->etaWidth();
278 phiWidthMap->insert(candRef, phiWidth);
279 etaWidthMap->insert(candRef, etaWidth);
281 for (
auto& pixelDatum : pixelData) {
282 pixelDatum.fill(candRef);
294 for (
auto& pixelDatum : pixelData) {
295 pixelDatum.putInto(
iEvent);
309 float dPhi1 = (
charge < 0 ?
seed.dPhiNeg(0) :
seed.dPhiPos(0)) / dPhi1Const;
310 float dPhi2 = (
charge < 0 ?
seed.dPhiNeg(1) :
seed.dPhiPos(1)) / dPhi2Const;
311 float dRz2 = (
charge < 0 ?
seed.dRZNeg(1) :
seed.dRZPos(1)) / dRZ2Const;
313 float s2 = dPhi1 * dPhi1 + dPhi2 * dPhi2 + dRz2 * dRz2;
314 return std::array<float, 4>{{
s2, dPhi1, dPhi2, dRz2}};