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");
70 const auto useEBModelInGap = pset_dnn.getParameter<
bool>(
"useEBModelInGap");
74 const auto runMVABasedHaloTagger = conf.
getParameter<
bool>(
"runMVABasedHaloTagger");
77 if (runMVABasedHaloTagger) {
228 std::unique_ptr<PhotonEcalPFClusterIsolation>
ecalisoAlgo =
nullptr;
246 std::unique_ptr<PhotonHcalPFClusterIsolation>
hcalisoAlgo =
nullptr;
254 const auto v = position - origin;
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;
300 if (config.
exists(
"pfECALClusIsolation")) {
303 if (config.
exists(
"pfHCALClusIsolation")) {
312 if (not pfEg.label().empty()) {
321 if (not hbhetag.label().empty())
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);
367 cfgCone.
maxSeverityHB = config.getParameter<
int>(
"maxHcalRecHitSeverity");
378 cfgBc.
maxSeverityHB = config.getParameter<
int>(
"maxHcalRecHitSeverity");
382 hcalHelperCone_ = std::make_unique<ElectronHcalHelper>(cfgCone, consumesCollector());
383 hcalHelperBc_ = std::make_unique<ElectronHcalHelper>(cfgBc, consumesCollector());
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")};
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")};
423 consumesCollector());
432 std::make_unique<PhotonMVABasedHaloTagger>(mvaBasedHaloVariableSet, consumesCollector());
451 useHF_ = pfHCALClusIsolCfg.getParameter<
bool>(
"useHF");
452 hcaldrMax_ = pfHCALClusIsolCfg.getParameter<
double>(
"drMax");
459 hcaluseEt_ = pfHCALClusIsolCfg.getParameter<
bool>(
"useEt");
469 if (dnnPFidEnabled_) {
476 return std::make_unique<CacheData>(
config);
488 auto outputPhotonCollection_p = std::make_unique<reco::PhotonCollection>();
492 bool validPhotonCoreHandle =
false;
494 bool validPhotonHandle =
false;
525 if (photonHandle.isValid()) {
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";
585 photonEnergyCorrector_->init(eventSetup);
586 if (photonEnergyCorrector_->gedRegression()) {
587 photonEnergyCorrector_->gedRegression()->setEvent(theEvent);
588 photonEnergyCorrector_->gedRegression()->setEventContent(eventSetup);
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;
676 filler.insert(pfEGCandidateHandle, values.begin(), values.end());
678 theEvent.
put(
std::move(pfEGCandToPhotonMap_p), valueMapPFCandPhoton_);
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])
734 float maxXtal = (hits !=
nullptr ? EcalClusterTools::eMax(*(scRef->seed()), hits) : 0.f);
738 float e1x5 = (hits !=
nullptr ? EcalClusterTools::e1x5(*(scRef->seed()), hits, topology) : 0.f);
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]);
775 float full5x5_sigmaIetaIeta =
sqrt(full5x5_locCov[0]);
776 float full5x5_sigmaIetaIphi = full5x5_locCov[1];
782 double photonEnergy = 1.;
784 if (!vertexCollection.empty())
785 vtx = vertexCollection.begin()->position();
793 reco::Photon newCandidate(p4, caloPosition, coreRef, vtx);
804 newCandidate.setFiducialVolumeFlags(fiducialFlags);
805 newCandidate.setIsolationVariables(isolVarR04, isolVarR03);
809 showerShape.
e1x5 = e1x5;
810 showerShape.
e2x5 = e2x5;
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);
846 Cluster2ndMoments clus2ndMoments = EcalClusterTools::cluster2ndMoments(*(scRef->seed()), *hits);
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);
966 photonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es);
967 if (candidateP4type_ ==
"fromEcalEnergy") {
970 newCandidate.setMass(0.0);
971 }
else if (candidateP4type_ ==
"fromRegression1") {
974 newCandidate.setMass(0.0);
975 }
else if (candidateP4type_ ==
"fromRegression2") {
978 newCandidate.setMass(0.0);
979 }
else if (candidateP4type_ ==
"fromRefinedSCRegression") {
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])
1024 outputPhotonCollection.push_back(newCandidate);
1029 LogDebug(
"GEDPhotonProducer") <<
"Getting DNN PFId for photons";
1030 const auto& dnn_photon_pfid = globalCache()->photonDNNEstimator->evaluate(outputPhotonCollection,
tfSessions_);
1032 for (
auto& photon : outputPhotonCollection) {
1033 const auto&
values = dnn_photon_pfid[ipho];
1036 photon.setPflowIDVariables(pfID);
1058 std::vector<double> preselCutValues;
1060 for (
unsigned int lSC = 0; lSC < photonHandle->size(); lSC++) {
1064 DetId::Detector thedet = scRef->seed()->hitsAndFractions()[0].first.det();
1065 int subdet = scRef->seed()->hitsAndFractions()[0].first.subdetId();
1073 edm::LogWarning(
"") <<
"GEDPhotonProducer: do not know if it is a barrel or endcap SuperCluster" << thedet <<
' '
1079 ptFast(parentSCRef->energy(), parentSCRef->position(), {0, 0, 0}) <= preselCutValues[0])
1085 if (runMVABasedHaloTagger_) {
1100 pfIso.
photonIso = (*photons)[photonPtr];
1113 photonEnergyCorrector_->calculate(evt, newCandidate, subdet, vertexCollection, es);
1114 if (candidateP4type_ ==
"fromEcalEnergy") {
1118 }
else if (candidateP4type_ ==
"fromRegression1") {
1122 }
else if (candidateP4type_ ==
"fromRegression2") {
1126 }
else if (candidateP4type_ ==
"fromRefinedSCRegression") {
1132 outputPhotonCollection.push_back(newCandidate);
void setPflowIsolationVariables(const PflowIsolationVariables &pfisol)
Set Particle Flow Isolation variables.
GEDPhotonProducer(const edm::ParameterSet &ps, const CacheData *gcache)
std::unique_ptr< PhotonHcalPFClusterIsolation > hcalisoAlgo
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool isNonnull() const
Checks for non-null.
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)
double hcalESum(const reco::SuperCluster &, int depth) const
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
uint16_t *__restrict__ id
void setMass(double m) final
set particle mass
const edm::ESGetToken< EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd > ecalPFRechitThresholdsToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double ecaletaStripEndcap_
#define DEFINE_FWK_MODULE(type)
double ecaletaStripBarrel_
void produce(edm::Event &evt, const edm::EventSetup &es) override
std::unique_ptr< PhotonMVABasedHaloTagger > photonMVABasedHaloTagger_
std::unique_ptr< PhotonEnergyCorrector > photonEnergyCorrector_
constexpr bool isUninitialized() const noexcept
CaloGeometry const * caloGeom_
std::unique_ptr< PhotonEcalPFClusterIsolation > ecalisoAlgo
bool exists(std::string const ¶meterName) const
checks if a parameter exists
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFEM_
std::vector< int > flagsexclEB_
float chargedHadronWorstVtxGeomVetoIso
void endStream() override
std::vector< Vertex > VertexCollection
collection of Vertex objects
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)
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)
bool getData(T &iHolder) const
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Handle< PROD > getHandle(EDGetTokenT< PROD > token) 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)
T get() const
get a component
std::vector< int > flagsexclEE_
std::unique_ptr< const PhotonDNNEstimator > photonDNNEstimator
auto hcalTowersBehindClusters(const reco::SuperCluster &sc) const
bool get(ProductID const &oid, Handle< PROD > &result) const
edm::EDGetTokenT< reco::PhotonCoreCollection > photonCoreProducerT_
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)
const_iterator end() const
Log< level::Info, false > LogInfo
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHits_
edm::EDGetTokenT< edm::ValueMap< float > > phoNeutralHadronIsolationToken_
DetId seed() const
return DetId of seed
edm::EDGetTokenT< edm::ValueMap< float > > phoChargedWorstVtxIsoToken_
bool hasActiveHcal(const reco::SuperCluster &sc) const
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_
T getParameter(std::string const &) const
const EcalClusterLazyTools::ESGetTokens ecalClusterESGetTokens_
const edm::InputTag photonProducer_
const LorentzVector & p4(P4type type) const
std::unique_ptr< ElectronHcalHelper > hcalHelperBc_
static void globalEndJob(const CacheData *)
std::string candidateP4type_
edm::EDGetTokenT< edm::ValueMap< float > > phoPhotonIsolationToken_
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
tuple config
parse the configuration file
float chargedHadronPFPVIso
iterator find(key_type k)
static int position[264][3]
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducer_
edm::EDGetTokenT< edm::ValueMap< float > > phoPFECALClusIsolationToken_
bool runMVABasedHaloTagger_
std::string fullPath() 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