33 for (
auto& it : footprint) {
34 if (it.key() == candidate.
key())
40 struct CachingPtrCandidate {
44 packed(
isAOD ? nullptr : static_cast<
const pat::PackedCandidate*>(cPtr)) {}
51 void getImpactParameters(
const CachingPtrCandidate& candidate,
const reco::Vertex&
pv,
float&
dxy,
float&
dz) {
52 if (candidate.track !=
nullptr) {
53 dxy = candidate.track->dxy(
pv.position());
54 dz = candidate.track->dz(
pv.position());
56 dxy = candidate.packed->dxy(
pv.position());
57 dz = candidate.packed->dz(
pv.position());
65 return static_cast<const reco::PFCandidate*>(candidate)->particleId();
69 const int pdgId = static_cast<const pat::PackedCandidate*>(candidate)->pdgId();
124 "phoFull5x5SigmaIEtaIEta",
125 "phoFull5x5SigmaIEtaIPhi",
132 "phoFull5x5E1x3byE5x5",
133 "phoFull5x5E2x2byE5x5",
134 "phoFull5x5E2x5byE5x5",
136 "phoChargedIsolation",
137 "phoNeutralHadronIsolation",
138 "phoPhotonIsolation",
139 "phoWorstChargedIsolation",
140 "phoWorstChargedIsolationConeVeto",
141 "phoWorstChargedIsolationConeVetoPVConstr",
144 "phoHcalPFClIsolation",
145 "phoEcalPFClIsolation"};
169 isAOD_(
cfg.getParameter<
bool>(
"isAOD")) {
184 }
else if (!
src->empty()) {
186 if (
test.isNull() || !
test.isAvailable()) {
188 <<
"DataFormat is detected as miniAOD but cannot cast to pat::Photon!";
204 for (
auto const& iPho :
src->ptrs()) {
208 const auto&
seed = *(iPho->superCluster()->seed());
214 std::vector<float> vCov = lazyToolnoZS.localCovariances(
seed);
216 vars[1].push_back(vCov[1]);
217 vars[2].push_back(lazyToolnoZS.e1x3(
seed));
218 vars[3].push_back(lazyToolnoZS.e2x2(
seed));
219 vars[4].push_back(lazyToolnoZS.e2x5Max(
seed));
220 vars[5].push_back(lazyToolnoZS.e5x5(
seed));
221 vars[6].push_back(lazyToolnoZS.eseffsirir(*(iPho->superCluster())));
232 iPho->superCluster()->x() -
pv.x(), iPho->superCluster()->y() -
pv.y(), iPho->superCluster()->z() -
pv.z());
235 float chargedIsoSum = 0.;
236 float neutralHadronIsoSum = 0.;
237 float photonIsoSum = 0.;
240 for (
auto const& iCand : pfCandsHandle->ptrs()) {
261 float dR2 =
deltaR2(phoWrtVtx.Eta(), phoWrtVtx.Phi(), iCand->eta(), iCand->phi());
267 if (isInFootprint((*particleBasedIsolationMap)[iPho], iCand))
271 if (isInFootprint(
patPhotonPtr->associatedPackedPFCandidates(), iCand))
285 getImpactParameters(CachingPtrCandidate(&*iCand,
isAOD_),
pv,
dxy,
dz);
291 chargedIsoSum += iCand->pt();
295 neutralHadronIsoSum += iCand->pt();
298 photonIsoSum += iCand->pt();
301 vars[10].push_back(chargedIsoSum);
302 vars[11].push_back(neutralHadronIsoSum);
303 vars[12].push_back(photonIsoSum);
318 vars[16].push_back(iPho->trkSumPtSolidConeDR04());
320 vars[17].push_back(0.
f);
321 vars[18].push_back(0.
f);
331 auto valMap = std::make_unique<edm::ValueMap<float>>();
349 desc.
add<
bool>(
"isAOD",
false);
350 descriptions.
add(
"photonIDValueMapProducer", desc);
361 float worstIsolation = 0.0;
365 std::vector<CachingPtrCandidate> chargedCands;
366 chargedCands.reserve(pfCands.
size());
367 for (
auto const& aCand : pfCands) {
376 chargedCands.emplace_back(&aCand,
isAOD);
380 for (
unsigned int ivtx = 0; ivtx <
vertices.size(); ++ivtx) {
387 const float phoWrtVtxPhi = phoWrtVtx.phi();
388 const float phoWrtVtxEta = phoWrtVtx.eta();
392 for (
auto const& aCCand : chargedCands) {
393 auto iCand = aCCand.candidate;
394 float dR2 =
deltaR2(phoWrtVtxEta, phoWrtVtxPhi, iCand->eta(), iCand->phi());
401 getImpactParameters(aCCand,
pv,
dxy,
dz);
403 getImpactParameters(aCCand, *
vtx,
dxy,
dz);
411 worstIsolation =
std::max(sum, worstIsolation);
414 return worstIsolation;