63 const auto dnnEnabled = pset_dnn.
getParameter<
bool>(
"enabled");
67 config.modelsFiles = pset_dnn.getParameter<std::vector<std::string>>(
"modelsFiles");
68 config.scalersFiles = pset_dnn.getParameter<std::vector<std::string>>(
"scalersFiles");
69 config.outputDim = pset_dnn.getParameter<std::vector<unsigned int>>(
"outputDim");
70 const auto useEBModelInGap = pset_dnn.getParameter<
bool>(
"useEBModelInGap");
228 std::unique_ptr<PhotonEcalPFClusterIsolation>
ecalisoAlgo =
nullptr;
246 std::unique_ptr<PhotonHcalPFClusterIsolation>
hcalisoAlgo =
nullptr;
262 else if (
step ==
"oot")
264 else if (
step ==
"ootfinal")
266 else if (
step ==
"tmp")
270 <<
" reconstructStep " <<
step <<
" is invalid, the options are: tmp, final,oot or ootfinal" << std::endl;
276 ecalClusterESGetTokens_{consumesCollector()},
281 hcalHelperCone_(
nullptr),
282 hcalHelperBc_(
nullptr) {
283 if (recoStep_.isFinal()) {
284 photonProducerT_ = consumes(photonProducer_);
291 phoChargedIsolationToken_ = getVMToken(
"chargedHadronIso");
292 phoNeutralHadronIsolationToken_ = getVMToken(
"neutralHadronIso");
293 phoPhotonIsolationToken_ = getVMToken(
"photonIso");
294 phoChargedWorstVtxIsoToken_ = getVMToken(
"chargedHadronWorstVtxIso");
295 phoChargedWorstVtxGeomVetoIsoToken_ = getVMToken(
"chargedHadronWorstVtxGeomVetoIso");
296 phoChargedPFPVIsoToken_ = getVMToken(
"chargedHadronPFPVIso");
300 if (
config.exists(
"pfECALClusIsolation")) {
301 phoPFECALClusIsolationToken_ = consumes(
config.getParameter<
edm::InputTag>(
"pfECALClusIsolation"));
303 if (
config.exists(
"pfHCALClusIsolation")) {
304 phoPFHCALClusIsolationToken_ = consumes(
config.getParameter<
edm::InputTag>(
"pfHCALClusIsolation"));
308 photonCoreProducerT_ = consumes(photonProducer_);
312 if (not pfEg.label().empty()) {
313 pfEgammaCandidates_ = consumes(pfEg);
321 if (not hbhetag.label().empty())
322 hbheRecHits_ = consumes<HBHERecHitCollection>(hbhetag);
326 multThresEB_ =
config.getParameter<
double>(
"multThresEB");
327 multThresEE_ =
config.getParameter<
double>(
"multThresEE");
328 hOverEConeSize_ =
config.getParameter<
double>(
"hOverEConeSize");
329 highEt_ =
config.getParameter<
double>(
"highEt");
331 minR9Barrel_ =
config.getParameter<
double>(
"minR9Barrel");
332 minR9Endcap_ =
config.getParameter<
double>(
"minR9Endcap");
333 usePrimaryVertex_ =
config.getParameter<
bool>(
"usePrimaryVertex");
334 runMIPTagger_ =
config.getParameter<
bool>(
"runMIPTagger");
335 runMVABasedHaloTagger_ =
config.getParameter<
bool>(
"runMVABasedHaloTagger");
342 auto const& flagnamesEB =
config.getParameter<std::vector<std::string>>(
"RecHitFlagToBeExcludedEB");
343 auto const& flagnamesEE =
config.getParameter<std::vector<std::string>>(
"RecHitFlagToBeExcludedEE");
345 flagsexclEB_ = StringToEnumValue<EcalRecHit::Flags>(flagnamesEB);
346 flagsexclEE_ = StringToEnumValue<EcalRecHit::Flags>(flagnamesEE);
348 auto const& severitynamesEB =
config.getParameter<std::vector<std::string>>(
"RecHitSeverityToBeExcludedEB");
349 auto const& severitynamesEE =
config.getParameter<std::vector<std::string>>(
"RecHitSeverityToBeExcludedEE");
351 severitiesexclEB_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEB);
352 severitiesexclEE_ = StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEE);
354 photonEnergyCorrector_ = std::make_unique<PhotonEnergyCorrector>(
config, consumesCollector());
356 checkHcalStatus_ =
config.getParameter<
bool>(
"checkHcalStatus");
357 if (not hbheRecHits_.isUninitialized()) {
382 hcalHelperCone_ = std::make_unique<ElectronHcalHelper>(cfgCone, consumesCollector());
383 hcalHelperBc_ = std::make_unique<ElectronHcalHelper>(cfgBc, consumesCollector());
386 hcalRun2EffDepth_ =
config.getParameter<
bool>(
"hcalRun2EffDepth");
389 preselCutValuesBarrel_ = {
config.getParameter<
double>(
"minSCEtBarrel"),
390 config.getParameter<
double>(
"maxHoverEBarrel"),
391 config.getParameter<
double>(
"ecalRecHitSumEtOffsetBarrel"),
392 config.getParameter<
double>(
"ecalRecHitSumEtSlopeBarrel"),
393 config.getParameter<
double>(
"hcalRecHitSumEtOffsetBarrel"),
394 config.getParameter<
double>(
"hcalRecHitSumEtSlopeBarrel"),
395 config.getParameter<
double>(
"nTrackSolidConeBarrel"),
396 config.getParameter<
double>(
"nTrackHollowConeBarrel"),
397 config.getParameter<
double>(
"trackPtSumSolidConeBarrel"),
398 config.getParameter<
double>(
"trackPtSumHollowConeBarrel"),
399 config.getParameter<
double>(
"sigmaIetaIetaCutBarrel")};
401 preselCutValuesEndcap_ = {
config.getParameter<
double>(
"minSCEtEndcap"),
402 config.getParameter<
double>(
"maxHoverEEndcap"),
403 config.getParameter<
double>(
"ecalRecHitSumEtOffsetEndcap"),
404 config.getParameter<
double>(
"ecalRecHitSumEtSlopeEndcap"),
405 config.getParameter<
double>(
"hcalRecHitSumEtOffsetEndcap"),
406 config.getParameter<
double>(
"hcalRecHitSumEtSlopeEndcap"),
407 config.getParameter<
double>(
"nTrackSolidConeEndcap"),
408 config.getParameter<
double>(
"nTrackHollowConeEndcap"),
409 config.getParameter<
double>(
"trackPtSumSolidConeEndcap"),
410 config.getParameter<
double>(
"trackPtSumHollowConeEndcap"),
411 config.getParameter<
double>(
"sigmaIetaIetaCutEndcap")};
415 if (!recoStep_.isFinal()) {
416 photonIsoCalculator_ = std::make_unique<PhotonIsolationCalculator>();
423 consumesCollector());
424 photonMIPHaloTagger_ = std::make_unique<PhotonMIPHaloTagger>();
429 if (recoStep_.isFinal() && runMVABasedHaloTagger_) {
431 photonMVABasedHaloTagger_ =
462 produces<reco::PhotonCollection>(photonCollection_);
463 if (not pfEgammaCandidates_.isUninitialized()) {
464 produces<edm::ValueMap<reco::PhotonRef>>(valueMapPFCandPhoton_);
468 dnnPFidEnabled_ = pset_dnn.
getParameter<
bool>(
"enabled");
469 if (dnnPFidEnabled_) {
470 tfSessions_ = gcache->photonDNNEstimator->getSessions();
476 return std::make_unique<CacheData>(
config);
488 auto outputPhotonCollection_p = std::make_unique<reco::PhotonCollection>();
492 bool validPhotonCoreHandle =
false;
494 bool validPhotonHandle =
false;
526 validPhotonHandle =
true;
532 if (photonCoreHandle.
isValid()) {
533 validPhotonCoreHandle =
true;
549 if (!pfEGCandidateHandle.
isValid()) {
550 throw cms::Exception(
"GEDPhotonProducer") <<
"Error! Can't get the pfEgammaCandidates";
561 throw cms::Exception(
"GEDPhotonProducer") <<
"Error! Can't get the pfCandidates";
611 if (validPhotonCoreHandle)
623 *outputPhotonCollection_p,
635 *outputPhotonCollection_p,
637 phoChargedIsolationMap,
638 phoNeutralHadronIsolationMap,
639 phoPhotonIsolationMap,
640 phoChargedWorstVtxIsoMap,
641 phoChargedWorstVtxGeomVetoIsoMap,
642 phoChargedPFPVIsoMap,
643 phoPFECALClusIsolationMap,
644 phoPFHCALClusIsolationMap);
647 edm::LogInfo(
"GEDPhotonProducer") <<
" Put in the event " << iSC <<
" Photon Candidates \n";
651 for (
auto& pho : *outputPhotonCollection_p)
652 pho.hcalToRun2EffDepth();
658 auto pfEGCandToPhotonMap_p = std::make_unique<edm::ValueMap<reco::PhotonRef>>();
660 unsigned nObj = pfEGCandidateHandle->size();
661 std::vector<reco::PhotonRef>
values(nObj);
663 for (
unsigned int lCand = 0; lCand < nObj; lCand++) {
667 for (
unsigned int lSC = 0; lSC < photonOrphHandle->size(); lSC++) {
670 if (pfScRef != scRef)
672 values[lCand] = photonRef;
696 std::vector<double> preselCutValues;
697 std::vector<int> flags_, severitiesexcl_;
699 for (
unsigned int lSC = 0; lSC < photonCoreHandle->size(); lSC++) {
707 DetId::Detector thedet = scRef->seed()->hitsAndFractions()[0].first.det();
708 int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
711 hits = ecalBarrelHits;
716 hits = ecalEndcapHits;
725 edm::LogWarning(
"") <<
"GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster: " << thedet
731 ptFast(parentSCRef->energy(), parentSCRef->position(), {0, 0, 0}) <= preselCutValues[0])
739 float e2x5 = (
hits !=
nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()),
hits, topology) : 0.f);
740 float e3x3 = (
hits !=
nullptr ? EcalClusterTools::e3x3(*(scRef->seed()),
hits, topology) : 0.f);
741 float e5x5 = (
hits !=
nullptr ? EcalClusterTools::e5x5(*(scRef->seed()),
hits, topology) : 0.f);
742 const auto& cov = (
hits !=
nullptr ? EcalClusterTools::covariances(*(scRef->seed()),
hits, topology,
caloGeom_)
743 : std::array<float, 3>({{0.f, 0.f, 0.f}}));
745 const auto& locCov = (
hits !=
nullptr ? EcalClusterTools::localCovariances(*(scRef->seed()),
hits, topology)
746 : std::array<float, 3>({{0.f, 0.f, 0.f}}));
749 float sigmaIetaIeta =
std::sqrt(locCov[0]);
758 const auto& full5x5_cov =
760 : std::array<float, 3>({{0.f, 0.f, 0.f}}));
764 const auto& full5x5_locCov =
772 : std::array<float, 3>({{0.f, 0.f, 0.f}}));
774 float full5x5_sigmaEtaEta =
sqrt(full5x5_cov[0]);
776 float full5x5_sigmaIetaIphi = full5x5_locCov[1];
804 newCandidate.setFiducialVolumeFlags(fiducialFlags);
805 newCandidate.setIsolationVariables(isolVarR04, isolVarR03);
811 showerShape.
e3x3 = e3x3;
812 showerShape.
e5x5 = e5x5;
818 (hcalHelperCone !=
nullptr) ? hcalHelperCone->
hcalESum(*scRef,
id + 1) / scRef->energy() : 0.f;
821 (hcalHelperBc !=
nullptr) ? hcalHelperBc->
hcalESum(*scRef,
id + 1) / scRef->energy() : 0.f;
824 if (hcalHelperBc !=
nullptr)
830 const float sep = locCov[1];
833 showerShape.
e2nd = (
hits !=
nullptr ? EcalClusterTools::e2nd(*(scRef->seed()),
hits) : 0.f);
834 showerShape.
eTop = (
hits !=
nullptr ? EcalClusterTools::eTop(*(scRef->seed()),
hits, topology) : 0.f);
835 showerShape.
eLeft = (
hits !=
nullptr ? EcalClusterTools::eLeft(*(scRef->seed()),
hits, topology) : 0.f);
836 showerShape.
eRight = (
hits !=
nullptr ? EcalClusterTools::eRight(*(scRef->seed()),
hits, topology) : 0.f);
837 showerShape.
eBottom = (
hits !=
nullptr ? EcalClusterTools::eBottom(*(scRef->seed()),
hits, topology) : 0.f);
838 showerShape.
e1x3 = (
hits !=
nullptr ? EcalClusterTools::e1x3(*(scRef->seed()),
hits, topology) : 0.f);
839 showerShape.
e2x2 = (
hits !=
nullptr ? EcalClusterTools::e2x2(*(scRef->seed()),
hits, topology) : 0.f);
840 showerShape.
e2x5Max = (
hits !=
nullptr ? EcalClusterTools::e2x5Max(*(scRef->seed()),
hits, topology) : 0.f);
841 showerShape.
e2x5Left = (
hits !=
nullptr ? EcalClusterTools::e2x5Left(*(scRef->seed()),
hits, topology) : 0.f);
842 showerShape.
e2x5Right = (
hits !=
nullptr ? EcalClusterTools::e2x5Right(*(scRef->seed()),
hits, topology) : 0.f);
843 showerShape.
e2x5Top = (
hits !=
nullptr ? EcalClusterTools::e2x5Top(*(scRef->seed()),
hits, topology) : 0.f);
844 showerShape.
e2x5Bottom = (
hits !=
nullptr ? EcalClusterTools::e2x5Bottom(*(scRef->seed()),
hits, topology) : 0.f);
859 const float sigmaRR = toolsforES.eseffsirir(*scRef);
861 newCandidate.setShowerShapeVariables(showerShape);
865 int nSaturatedXtals = 0;
866 bool isSeedSaturated =
false;
867 if (
hits !=
nullptr) {
868 const auto hitsAndFractions = scRef->hitsAndFractions();
869 for (
auto const& hitFractionPair : hitsAndFractions) {
873 if (
ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
876 isSeedSaturated =
true;
883 newCandidate.setSaturationInfo(saturationInfo);
887 full5x5_showerShape.
e1x5 = full5x5_e1x5;
888 full5x5_showerShape.
e2x5 = full5x5_e2x5;
889 full5x5_showerShape.
e3x3 = full5x5_e3x3;
890 full5x5_showerShape.
e5x5 = full5x5_e5x5;
892 full5x5_showerShape.
sigmaEtaEta = full5x5_sigmaEtaEta;
896 const float full5x5_sep = full5x5_sigmaIetaIphi;
901 full5x5_showerShape.
eLeft =
903 full5x5_showerShape.
eRight =
925 full5x5_showerShape.
smMajor = 0.f;
926 full5x5_showerShape.
smMinor = 0.f;
927 full5x5_showerShape.
smAlpha = 0.f;
933 (hcalHelperCone !=
nullptr) ? hcalHelperCone->
hcalESum(*scRef,
id + 1) / full5x5_e5x5 : 0.f;
935 (hcalHelperBc !=
nullptr) ? hcalHelperBc->
hcalESum(*scRef,
id + 1) / full5x5_e5x5 : 0.f;
938 newCandidate.full5x5_setShowerShapeVariables(full5x5_showerShape);
958 newCandidate.setPflowIsolationVariables(pfIso);
970 newCandidate.setMass(0.0);
974 newCandidate.setMass(0.0);
978 newCandidate.setMass(0.0);
982 newCandidate.setMass(0.0);
987 newCandidate.setP4(p4);
991 fiducialFlags.
isEE =
true;
992 newCandidate.setFiducialVolumeFlags(fiducialFlags);
999 newCandidate.setMIPVariables(mipVar);
1003 bool isLooseEM =
true;
1004 if (newCandidate.pt() <
highEt_) {
1005 if (newCandidate.hadronicOverEm() >= preselCutValues[1])
1007 if (newCandidate.ecalRecHitSumEtConeDR04() > preselCutValues[2] + preselCutValues[3] * newCandidate.pt())
1009 if (newCandidate.hcalTowerSumEtConeDR04() > preselCutValues[4] + preselCutValues[5] * newCandidate.pt())
1011 if (newCandidate.nTrkSolidConeDR04() >
int(preselCutValues[6]))
1013 if (newCandidate.nTrkHollowConeDR04() >
int(preselCutValues[7]))
1015 if (newCandidate.trkSumPtSolidConeDR04() > preselCutValues[8])
1017 if (newCandidate.trkSumPtHollowConeDR04() > preselCutValues[9])
1019 if (newCandidate.sigmaIetaIeta() > preselCutValues[10])
1029 LogDebug(
"GEDPhotonProducer") <<
"Getting DNN PFId for photons";
1033 const auto& [iModel,
values] = dnn_photon_pfid[ipho];
1037 photon.setPflowIDVariables(pfID);
1059 std::vector<double> preselCutValues;
1061 for (
unsigned int lSC = 0; lSC < photonHandle->size(); lSC++) {
1065 DetId::Detector thedet = scRef->seed()->hitsAndFractions()[0].first.det();
1066 int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
1074 edm::LogWarning(
"") <<
"GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster" << thedet <<
' ' 1080 ptFast(parentSCRef->energy(), parentSCRef->position(), {0, 0, 0}) <= preselCutValues[0])
1101 pfIso.
photonIso = (*photons)[photonPtr];
void setPflowIsolationVariables(const PflowIsolationVariables &pfisol)
Set Particle Flow Isolation variables.
GEDPhotonProducer(const edm::ParameterSet &ps, const CacheData *gcache)
std::unique_ptr< PhotonHcalPFClusterIsolation > hcalisoAlgo
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidates_
void fillPhotonCollection(edm::Event &evt, edm::EventSetup const &es, const edm::Handle< reco::PhotonCoreCollection > &photonCoreHandle, const CaloTopology *topology, const EcalRecHitCollection *ecalBarrelHits, const EcalRecHitCollection *ecalEndcapHits, const EcalRecHitCollection *preshowerHits, const ElectronHcalHelper *hcalHelperCone, const ElectronHcalHelper *hcalHelperBc, const reco::VertexCollection &pvVertices, reco::PhotonCollection &outputCollection, int &iSC, EcalPFRecHitThresholds const &thresholds)
HcalPFClusterIsolation< reco::Photon > PhotonHcalPFClusterIsolation
std::vector< CaloTowerDetId > hcalTowersBehindClusters
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
void setCandidateP4type(const P4type type)
static constexpr float kRelEnCut
bool get(ProductID const &oid, Handle< PROD > &result) const
isolationSumsCalculatorSet
void setMass(double m) final
set particle mass
std::string fullPath() const
bool hasActiveHcal(const reco::SuperCluster &sc) const
const edm::ESGetToken< EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd > ecalPFRechitThresholdsToken_
double ecaletaStripEndcap_
double ecaletaStripBarrel_
void produce(edm::Event &evt, const edm::EventSetup &es) override
std::unique_ptr< PhotonMVABasedHaloTagger > photonMVABasedHaloTagger_
DetId seed() const
return DetId of seed
std::unique_ptr< PhotonEnergyCorrector > photonEnergyCorrector_
constexpr bool isUninitialized() const noexcept
CaloGeometry const * caloGeom_
std::unique_ptr< PhotonEcalPFClusterIsolation > ecalisoAlgo
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFEM_
std::vector< int > flagsexclEB_
bool isNonnull() const
Checks for non-null.
float chargedHadronWorstVtxGeomVetoIso
void endStream() override
std::vector< Vertex > VertexCollection
collection of Vertex objects
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const edm::ESGetToken< CaloTopology, CaloTopologyRecord > caloTopologyToken_
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
float chargedHadronWorstVtxIso
std::array< float, 7 > hcalOverEcalBc
void setHaloTaggerMVAVal(float x)
set the haloTaggerMVAVal here
constexpr bool isFinite(T x)
T get() const
get a component
std::vector< int > severitiesexclEE_
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHits
double ptFast(const double energy, const math::XYZPoint &position, const math::XYZPoint &origin)
std::string photonCollection_
RecoStepInfo(const std::string &recoStep)
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
double hcalESum(const reco::SuperCluster &, int depth) const
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedPFPVIsoToken_
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
static std::unique_ptr< CacheData > initializeGlobalCache(const edm::ParameterSet &)
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedWorstVtxGeomVetoIsoToken_
std::unique_ptr< ElectronHcalHelper > hcalHelperCone_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedIsolationToken_
std::unique_ptr< PhotonIsolationCalculator > photonIsoCalculator_
edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > particleBasedIsolationToken
bool closeSession(Session *&session)
std::vector< int > flagsexclEE_
std::unique_ptr< const PhotonDNNEstimator > photonDNNEstimator
edm::EDGetTokenT< reco::PhotonCoreCollection > photonCoreProducerT_
#define DEFINE_FWK_MODULE(type)
std::vector< tensorflow::Session * > tfSessions_
edm::EDGetTokenT< edm::ValueMap< float > > phoPFHCALClusIsolationToken_
edm::EDGetTokenT< reco::PFCandidateCollection > pfEgammaCandidates_
double hcaletaStripBarrel_
std::vector< int > severitiesexclEB_
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFHAD_
CacheData(const edm::ParameterSet &conf)
Log< level::Info, false > LogInfo
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHits_
edm::EDGetTokenT< edm::ValueMap< float > > phoNeutralHadronIsolationToken_
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedWorstVtxIsoToken_
std::vector< double > preselCutValuesBarrel_
edm::EDGetTokenT< reco::PhotonCollection > photonProducerT_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
EcalPFClusterIsolation< reco::Photon > PhotonEcalPFClusterIsolation
XYZPointD XYZPoint
point in space with cartesian internal representation
std::array< float, 7 > hcalOverEcal
std::vector< Photon > PhotonCollection
collectin of Photon objects
std::vector< double > preselCutValuesEndcap_
config
parse the configuration file
const EcalClusterLazyTools::ESGetTokens ecalClusterESGetTokens_
const edm::InputTag photonProducer_
std::unique_ptr< ElectronHcalHelper > hcalHelperBc_
auto hcalTowersBehindClusters(const reco::SuperCluster &sc) const
static void globalEndJob(const CacheData *)
std::string candidateP4type_
edm::EDGetTokenT< edm::ValueMap< float > > phoPhotonIsolationToken_
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
float chargedHadronPFPVIso
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
static int position[264][3]
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducer_
edm::EDGetTokenT< edm::ValueMap< float > > phoPFECALClusIsolationToken_
bool runMVABasedHaloTagger_
const LorentzVector & p4(P4type type) const
EgammaHcalIsolation::arrayHB eThresHB
EgammaHcalIsolation::arrayHE eThresHE
double hcaletaStripEndcap_
edm::EDGetTokenT< reco::VertexCollection > vertexProducer_
Log< level::Warning, false > LogWarning
std::array< double, 4 > arrayHB
std::unique_ptr< PhotonMIPHaloTagger > photonMIPHaloTagger_
edm::EDGetTokenT< EcalRecHitCollection > preshowerHits_
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHCAL_
void setP4(P4type type, const LorentzVector &p4, float p4Error, bool setToRecoCandidate)
std::unique_ptr< const GBRForest > haloTaggerGBR
std::string valueMapPFCandPhoton_
std::array< double, 7 > arrayHE