** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=lxr at /lxr/lib/LXR/Common.pm line 1113.
Last-Modified: Sat, 11 Jul 2025 23:37:54 GMT
Content-Type: text/html; charset=utf-8
/CMSSW_15_1_X_2025-07-11-2300/RecoHI/HiEgammaAlgos/plugins/photonIsolationHIProducer.cc
File indexing completed on 2024-04-06 12:25:17
0001 #include "FWCore /Framework /interface /EventSetup.h "
0002 #include "FWCore /Framework /interface /Frameworkfwd.h "
0003 #include "FWCore /Framework /interface /stream /EDProducer.h "
0004 #include "FWCore /Framework /interface /ESHandle.h "
0005 #include "FWCore /Framework /interface /Event.h "
0006 #include "FWCore /Framework /interface /MakerMacros.h "
0007 #include "FWCore /Framework /interface /ESHandle.h "
0008 #include "FWCore /ParameterSet /interface /ParameterSet.h "
0009 #include "FWCore /Utilities /interface /EDGetToken.h "
0010 #include "FWCore /Utilities /interface /InputTag.h "
0011 #include "FWCore /MessageLogger /interface /MessageLogger.h "
0012
0013 #include "DataFormats /EgammaCandidates /interface /HIPhotonIsolation.h "
0014 #include "DataFormats /EgammaCandidates /interface /PhotonFwd.h "
0015 #include "DataFormats /EcalRecHit /interface /EcalRecHitCollections.h "
0016
0017 #include "RecoEcal /EgammaCoreTools /interface /EcalClusterLazyTools.h "
0018
0019 #include "RecoHI /HiEgammaAlgos /interface /EcalClusterIsoCalculator.h "
0020 #include "RecoHI /HiEgammaAlgos /interface /HcalRechitIsoCalculator.h "
0021 #include "RecoHI /HiEgammaAlgos /interface /TrackIsoCalculator.h "
0022
0023 class photonIsolationHIProducer : public edm ::stream ::EDProducer <> {
0024 public :
0025 explicit photonIsolationHIProducer (const edm ::ParameterSet & ps );
0026
0027 static void fillDescriptions (edm ::ConfigurationDescriptions & descriptions );
0028
0029 private :
0030 void produce (edm ::Event & evt , const edm ::EventSetup & es ) override ;
0031
0032 edm ::EDGetTokenT <reco ::PhotonCollection > photonProducer_ ;
0033 edm ::EDGetTokenT <EcalRecHitCollection > barrelEcalHits_ ;
0034 edm ::EDGetTokenT <EcalRecHitCollection > endcapEcalHits_ ;
0035 edm ::EDGetTokenT <HBHERecHitCollection > hbhe_ ;
0036 edm ::EDGetTokenT <HFRecHitCollection > hf_ ;
0037 edm ::EDGetTokenT <HORecHitCollection > ho_ ;
0038 edm ::EDGetTokenT <reco ::BasicClusterCollection > barrelClusters_ ;
0039 edm ::EDGetTokenT <reco ::BasicClusterCollection > endcapClusters_ ;
0040 edm ::EDGetTokenT <reco ::TrackCollection > tracks_ ;
0041
0042 const EcalClusterLazyTools ::ESGetTokens ecalClusterToolsESGetTokens_ ;
0043 const edm ::ESGetToken <CaloGeometry , CaloGeometryRecord > geometryToken_ ;
0044
0045 std ::string trackQuality_ ;
0046 };
0047
0048 photonIsolationHIProducer ::photonIsolationHIProducer (const edm ::ParameterSet & config )
0049 : photonProducer_ (consumes (config .getParameter <edm ::InputTag >("photonProducer" ))),
0050 barrelEcalHits_ (consumes (config .getParameter <edm ::InputTag >("ebRecHitCollection" ))),
0051 endcapEcalHits_ (consumes (config .getParameter <edm ::InputTag >("eeRecHitCollection" ))),
0052 hbhe_ (consumes (config .getParameter <edm ::InputTag >("hbhe" ))),
0053 hf_ (consumes (config .getParameter <edm ::InputTag >("hf" ))),
0054 ho_ (consumes (config .getParameter <edm ::InputTag >("ho" ))),
0055 barrelClusters_ (consumes (config .getParameter <edm ::InputTag >("basicClusterBarrel" ))),
0056 endcapClusters_ (consumes (config .getParameter <edm ::InputTag >("basicClusterEndcap" ))),
0057 tracks_ (consumes (config .getParameter <edm ::InputTag >("trackCollection" ))),
0058 ecalClusterToolsESGetTokens_ {consumesCollector ()},
0059 geometryToken_ {esConsumes ()},
0060 trackQuality_ (config .getParameter <std ::string >("trackQuality" )) {
0061 produces <reco ::HIPhotonIsolationMap >();
0062 }
0063
0064 void photonIsolationHIProducer ::produce (edm ::Event & evt , const edm ::EventSetup & es ) {
0065 edm ::Handle <reco ::PhotonCollection > photons ;
0066 evt .getByToken (photonProducer_ , photons );
0067 edm ::Handle <EcalRecHitCollection > barrelEcalHits ;
0068 evt .getByToken (barrelEcalHits_ , barrelEcalHits );
0069 edm ::Handle <EcalRecHitCollection > endcapEcalHits ;
0070 evt .getByToken (endcapEcalHits_ , endcapEcalHits );
0071 edm ::Handle <HBHERecHitCollection > hbhe ;
0072 evt .getByToken (hbhe_ , hbhe );
0073 edm ::Handle <HFRecHitCollection > hf ;
0074 evt .getByToken (hf_ , hf );
0075 edm ::Handle <HORecHitCollection > ho ;
0076 evt .getByToken (ho_ , ho );
0077 edm ::Handle <reco ::BasicClusterCollection > barrelClusters ;
0078 evt .getByToken (barrelClusters_ , barrelClusters );
0079 edm ::Handle <reco ::BasicClusterCollection > endcapClusters ;
0080 evt .getByToken (endcapClusters_ , endcapClusters );
0081 edm ::Handle <reco ::TrackCollection > trackCollection ;
0082 evt .getByToken (tracks_ , trackCollection );
0083
0084 auto outputMap = std ::make_unique <reco ::HIPhotonIsolationMap >();
0085 reco ::HIPhotonIsolationMap ::Filler filler (*outputMap );
0086 std ::vector <reco ::HIPhotonIsolation > isoVector ;
0087
0088 EcalClusterIsoCalculator CxC (barrelClusters , endcapClusters );
0089 edm ::ESHandle <CaloGeometry > geometryHandle = es .getHandle (geometryToken_ );
0090 const CaloGeometry * geometry = nullptr ;
0091 if (geometryHandle .isValid ()) {
0092 geometry = geometryHandle .product ();
0093 }
0094 HcalRechitIsoCalculator RxC (geometry , hbhe , hf , ho );
0095 TrackIsoCalculator TxC(*trackCollection , trackQuality_ );
0096 EcalClusterLazyTools lazyTool (evt , ecalClusterToolsESGetTokens_ .get (es ), barrelEcalHits_ , endcapEcalHits_ );
0097
0098 for (reco ::PhotonCollection ::const_iterator phoItr = photons ->begin (); phoItr != photons ->end (); ++phoItr) {
0099 reco ::HIPhotonIsolation iso ;
0100
0101 iso .ecalClusterIsoR1 (CxC .getBkgSubEcalClusterIso (phoItr->superCluster (), 1, 0));
0102 iso .ecalClusterIsoR2 (CxC .getBkgSubEcalClusterIso (phoItr->superCluster (), 2, 0));
0103 iso .ecalClusterIsoR3 (CxC .getBkgSubEcalClusterIso (phoItr->superCluster (), 3, 0));
0104 iso .ecalClusterIsoR4 (CxC .getBkgSubEcalClusterIso (phoItr->superCluster (), 4, 0));
0105 iso .ecalClusterIsoR5 (CxC .getBkgSubEcalClusterIso (phoItr->superCluster (), 5, 0));
0106
0107 iso .hcalRechitIsoR1 (RxC .getBkgSubHcalRechitIso (phoItr->superCluster (), 1, 0));
0108 iso .hcalRechitIsoR2 (RxC .getBkgSubHcalRechitIso (phoItr->superCluster (), 2, 0));
0109 iso .hcalRechitIsoR3 (RxC .getBkgSubHcalRechitIso (phoItr->superCluster (), 3, 0));
0110 iso .hcalRechitIsoR4 (RxC .getBkgSubHcalRechitIso (phoItr->superCluster (), 4, 0));
0111 iso .hcalRechitIsoR5 (RxC .getBkgSubHcalRechitIso (phoItr->superCluster (), 5, 0));
0112
0113 iso .trackIsoR1PtCut20 (TxC.getBkgSubTrackIso (*phoItr, 1, 2));
0114 iso .trackIsoR2PtCut20 (TxC.getBkgSubTrackIso (*phoItr, 2, 2));
0115 iso .trackIsoR3PtCut20 (TxC.getBkgSubTrackIso (*phoItr, 3, 2));
0116 iso .trackIsoR4PtCut20 (TxC.getBkgSubTrackIso (*phoItr, 4, 2));
0117 iso .trackIsoR5PtCut20 (TxC.getBkgSubTrackIso (*phoItr, 5, 2));
0118
0119
0120 const reco ::CaloClusterPtr seed = phoItr->superCluster ()->seed ();
0121 const DetId & id = lazyTool .getMaximum (*seed ).first ;
0122 float time = -999.;
0123 const EcalRecHitCollection & rechits = (phoItr->isEB () ? *barrelEcalHits : *endcapEcalHits );
0124 EcalRecHitCollection ::const_iterator it = rechits .find (id );
0125 if (it != rechits .end ()) {
0126 time = it ->time ();
0127 }
0128 iso .seedTime (time );
0129
0130
0131 float eMax = lazyTool .eMax (*seed );
0132 float eRight = lazyTool .eRight (*seed );
0133 float eLeft = lazyTool .eLeft (*seed );
0134 float eTop = lazyTool .eTop (*seed );
0135 float eBottom = lazyTool .eBottom (*seed );
0136 iso .swissCrx (1 - (eRight + eLeft + eTop + eBottom ) / eMax );
0137
0138 isoVector .push_back (iso );
0139 }
0140 filler .insert (photons , isoVector .begin (), isoVector .end ());
0141 filler .fill ();
0142 evt .put (std ::move (outputMap ));
0143 }
0144
0145 void photonIsolationHIProducer ::fillDescriptions (edm ::ConfigurationDescriptions & descriptions ) {
0146 edm ::ParameterSetDescription desc ;
0147
0148 desc .add <edm ::InputTag >("photonProducer" , edm ::InputTag ("photons" ));
0149 desc .add <edm ::InputTag >("ebRecHitCollection" , edm ::InputTag ("ecalRecHit:EcalRecHitsEB" ));
0150 desc .add <edm ::InputTag >("eeRecHitCollection" , edm ::InputTag ("ecalRecHit:EcalRecHitsEE" ));
0151 desc .add <edm ::InputTag >("hbhe" , edm ::InputTag ("hbhereco" ));
0152 desc .add <edm ::InputTag >("hf" , edm ::InputTag ("hfreco" ));
0153 desc .add <edm ::InputTag >("ho" , edm ::InputTag ("horeco" ));
0154 desc .add <edm ::InputTag >("basicClusterBarrel" , edm ::InputTag ("islandBasicClusters:islandBarrelBasicClusters" ));
0155 desc .add <edm ::InputTag >("basicClusterEndcap" , edm ::InputTag ("islandBasicClusters:islandEndcapBasicClusters" ));
0156 desc .add <edm ::InputTag >("trackCollection" , edm ::InputTag ("hiGeneralTracks" ));
0157 desc .add <std ::string >("trackQuality" , "highPurity" );
0158
0159 descriptions .add ("photonIsolationHIProducer" , desc );
0160 }
0161
0162 DEFINE_FWK_MODULE (photonIsolationHIProducer );