CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
photonIsolationHIProducer.cc
Go to the documentation of this file.
11 
15 
17 
21 
23 public:
24  explicit photonIsolationHIProducer(const edm::ParameterSet& ps);
25  ~photonIsolationHIProducer() override;
26 
27  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
28 
29 private:
30  void produce(edm::Event& evt, const edm::EventSetup& es) override;
31 
41 
43 };
44 
46  : photonProducer_(consumes<reco::PhotonCollection>(config.getParameter<edm::InputTag>("photonProducer"))),
47  barrelEcalHits_(consumes<EcalRecHitCollection>(config.getParameter<edm::InputTag>("ebRecHitCollection"))),
48  endcapEcalHits_(consumes<EcalRecHitCollection>(config.getParameter<edm::InputTag>("eeRecHitCollection"))),
49  hbhe_(consumes<HBHERecHitCollection>(config.getParameter<edm::InputTag>("hbhe"))),
50  hf_(consumes<HFRecHitCollection>(config.getParameter<edm::InputTag>("hf"))),
51  ho_(consumes<HORecHitCollection>(config.getParameter<edm::InputTag>("ho"))),
52  barrelClusters_(consumes<reco::BasicClusterCollection>(config.getParameter<edm::InputTag>("basicClusterBarrel"))),
53  endcapClusters_(consumes<reco::BasicClusterCollection>(config.getParameter<edm::InputTag>("basicClusterEndcap"))),
54  tracks_(consumes<reco::TrackCollection>(config.getParameter<edm::InputTag>("trackCollection"))),
55  trackQuality_(config.getParameter<std::string>("trackQuality")) {
56  produces<reco::HIPhotonIsolationMap>();
57 }
58 
60 
63  evt.getByToken(photonProducer_, photons);
65  evt.getByToken(barrelEcalHits_, barrelEcalHits);
67  evt.getByToken(endcapEcalHits_, endcapEcalHits);
69  evt.getByToken(hbhe_, hbhe);
71  evt.getByToken(hf_, hf);
73  evt.getByToken(ho_, ho);
75  evt.getByToken(barrelClusters_, barrelClusters);
77  evt.getByToken(endcapClusters_, endcapClusters);
79  evt.getByToken(tracks_, trackCollection);
80 
81  auto outputMap = std::make_unique<reco::HIPhotonIsolationMap>();
83  std::vector<reco::HIPhotonIsolation> isoVector;
84 
85  EcalClusterIsoCalculator CxC(evt, es, barrelClusters, endcapClusters);
86  HcalRechitIsoCalculator RxC(evt, es, hbhe, hf, ho);
87  TrackIsoCalculator TxC(evt, es, trackCollection, trackQuality_);
89 
90  for (reco::PhotonCollection::const_iterator phoItr = photons->begin(); phoItr != photons->end(); ++phoItr) {
92  // HI-style isolation info
93  iso.ecalClusterIsoR1(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(), 1, 0));
94  iso.ecalClusterIsoR2(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(), 2, 0));
95  iso.ecalClusterIsoR3(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(), 3, 0));
96  iso.ecalClusterIsoR4(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(), 4, 0));
97  iso.ecalClusterIsoR5(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(), 5, 0));
98 
99  iso.hcalRechitIsoR1(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(), 1, 0));
100  iso.hcalRechitIsoR2(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(), 2, 0));
101  iso.hcalRechitIsoR3(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(), 3, 0));
102  iso.hcalRechitIsoR4(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(), 4, 0));
103  iso.hcalRechitIsoR5(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(), 5, 0));
104 
105  iso.trackIsoR1PtCut20(TxC.getBkgSubTrackIso(*phoItr, 1, 2));
106  iso.trackIsoR2PtCut20(TxC.getBkgSubTrackIso(*phoItr, 2, 2));
107  iso.trackIsoR3PtCut20(TxC.getBkgSubTrackIso(*phoItr, 3, 2));
108  iso.trackIsoR4PtCut20(TxC.getBkgSubTrackIso(*phoItr, 4, 2));
109  iso.trackIsoR5PtCut20(TxC.getBkgSubTrackIso(*phoItr, 5, 2));
110 
111  // ecal spike rejection info (seed timing)
112  const reco::CaloClusterPtr seed = phoItr->superCluster()->seed();
113  const DetId& id = lazyTool.getMaximum(*seed).first;
114  float time = -999.;
115  const EcalRecHitCollection& rechits = (phoItr->isEB() ? *barrelEcalHits : *endcapEcalHits);
117  if (it != rechits.end()) {
118  time = it->time();
119  }
120  iso.seedTime(time);
121 
122  // ecal spike rejectino info (swiss cross)
123  float eMax = lazyTool.eMax(*seed);
124  float eRight = lazyTool.eRight(*seed);
125  float eLeft = lazyTool.eLeft(*seed);
126  float eTop = lazyTool.eTop(*seed);
127  float eBottom = lazyTool.eBottom(*seed);
128  iso.swissCrx(1 - (eRight + eLeft + eTop + eBottom) / eMax);
129 
130  isoVector.push_back(iso);
131  }
132  filler.insert(photons, isoVector.begin(), isoVector.end());
133  filler.fill();
134  evt.put(std::move(outputMap));
135 }
136 
139 
140  desc.add<edm::InputTag>("photonProducer", edm::InputTag("photons"));
141  desc.add<edm::InputTag>("ebRecHitCollection", edm::InputTag("ecalRecHit:EcalRecHitsEB"));
142  desc.add<edm::InputTag>("eeRecHitCollection", edm::InputTag("ecalRecHit:EcalRecHitsEE"));
143  desc.add<edm::InputTag>("hbhe", edm::InputTag("hbhereco"));
144  desc.add<edm::InputTag>("hf", edm::InputTag("hfreco"));
145  desc.add<edm::InputTag>("ho", edm::InputTag("horeco"));
146  desc.add<edm::InputTag>("basicClusterBarrel", edm::InputTag("islandBasicClusters:islandBarrelBasicClusters"));
147  desc.add<edm::InputTag>("basicClusterEndcap", edm::InputTag("islandBasicClusters:islandEndcapBasicClusters"));
148  desc.add<edm::InputTag>("trackCollection", edm::InputTag("hiGeneralTracks"));
149  desc.add<std::string>("trackQuality", "highPurity");
150 
151  descriptions.add("photonIsolationHIProducer", desc);
152 }
153 
photonIsolationHIProducer(const edm::ParameterSet &ps)
float hcalRechitIsoR1() const
Rechit-based isolation (HCAL) R = 0.1.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
edm::EDGetTokenT< HORecHitCollection > ho_
edm::EDGetTokenT< HBHERecHitCollection > hbhe_
float ecalClusterIsoR1() const
Cluster-based isolation (ECAL) R = 0.1.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
std::vector< EcalRecHit >::const_iterator const_iterator
edm::EDGetTokenT< reco::BasicClusterCollection > endcapClusters_
Definition: config.py:1
float seedTime() const
Ecal rechit seed time.
float hcalRechitIsoR3() const
Rechit-based isolation (HCAL) R = 0.3.
float ecalClusterIsoR4() const
Cluster-based isolation (ECAL) R = 0.4.
double getBkgSubEcalClusterIso(const reco::SuperClusterRef clus, const double radius, const double threshold)
Return the background-subtracted ecal cluster energy in a cone around the SC.
float hcalRechitIsoR4() const
Rechit-based isolation (HCAL) R = 0.4.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< HFRecHitCollection > hf_
double getBkgSubTrackIso(const reco::Photon clus, const double i, const double threshold, const double innerDR=0)
Return the background-subtracted tracker energy in a cone around the photon.
void produce(edm::Event &evt, const edm::EventSetup &es) override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
float trackIsoR5PtCut20() const
Track-based isolation, pt>2.0GeV, R = 0.5.
float ecalClusterIsoR5() const
Cluster-based isolation (ECAL) R = 0.5.
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
Definition: DetId.h:17
float ecalClusterIsoR2() const
Cluster-based isolation (ECAL) R = 0.2.
edm::EDGetTokenT< reco::BasicClusterCollection > barrelClusters_
float hcalRechitIsoR5() const
Rechit-based isolation (HCAL) R = 0.5.
float hcalRechitIsoR2() const
Rechit-based isolation (HCAL) R = 0.2.
edm::EDGetTokenT< EcalRecHitCollection > barrelEcalHits_
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< BasicCluster > BasicClusterCollection
collection of BasicCluster objects
float trackIsoR1PtCut20() const
Track-based isolation, pt>2.0GeV, R = 0.1.
float swissCrx() const
SwissCross crystal ratio.
float trackIsoR4PtCut20() const
Track-based isolation, pt>2.0GeV, R = 0.4.
fixed size matrix
HLT enums.
edm::EDGetTokenT< reco::PhotonCollection > photonProducer_
double getBkgSubHcalRechitIso(const reco::SuperClusterRef clus, const double i, const double threshold, const double innerR=0.0)
Return the background-subtracted hcal rechit energy in a cone around the SC.
float trackIsoR2PtCut20() const
Track-based isolation, pt>2.0GeV, R = 0.2.
float trackIsoR3PtCut20() const
Track-based isolation, pt>2.0GeV, R = 0.3.
float ecalClusterIsoR3() const
Cluster-based isolation (ECAL) R = 0.3.
edm::EDGetTokenT< reco::TrackCollection > tracks_
def move(src, dest)
Definition: eostools.py:511