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 
24  public:
25 
26  explicit photonIsolationHIProducer (const edm::ParameterSet& ps);
28 
29  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
30 
31  private:
32 
33  virtual void produce(edm::Event& evt, const edm::EventSetup& es) override;
34 
44 
46 
47 };
48 
50  :
51  photonProducer_ (
52  consumes<reco::PhotonCollection>(config.getParameter<edm::InputTag>("photonProducer"))),
53  barrelEcalHits_ (
54  consumes<EcalRecHitCollection>(config.getParameter<edm::InputTag>("ebRecHitCollection"))),
55  endcapEcalHits_ (
56  consumes<EcalRecHitCollection>(config.getParameter<edm::InputTag>("eeRecHitCollection"))),
57  hbhe_ ( consumes<HBHERecHitCollection>(config.getParameter<edm::InputTag>("hbhe"))),
58  hf_ ( consumes<HFRecHitCollection>(config.getParameter<edm::InputTag>("hf"))),
59  ho_ ( consumes<HORecHitCollection>(config.getParameter<edm::InputTag>("ho"))),
60  barrelClusters_ ( consumes<reco::BasicClusterCollection>(config.getParameter<edm::InputTag>("basicClusterBarrel"))),
61  endcapClusters_ ( consumes<reco::BasicClusterCollection>(config.getParameter<edm::InputTag>("basicClusterEndcap"))),
62  tracks_ ( consumes<reco::TrackCollection>(config.getParameter<edm::InputTag>("trackCollection"))),
63  trackQuality_ ( config.getParameter<std::string>("trackQuality"))
64 {
65  produces< reco::HIPhotonIsolationMap >();
66 }
67 
69 
70 void
72 {
74  evt.getByToken(photonProducer_, photons);
75  edm::Handle<EcalRecHitCollection> barrelEcalHits;
76  evt.getByToken(barrelEcalHits_, barrelEcalHits);
77  edm::Handle<EcalRecHitCollection> endcapEcalHits;
78  evt.getByToken(endcapEcalHits_, endcapEcalHits);
80  evt.getByToken(hbhe_, hbhe);
82  evt.getByToken(hf_, hf);
84  evt.getByToken(ho_, ho);
86  evt.getByToken(barrelClusters_, barrelClusters);
88  evt.getByToken(endcapClusters_, endcapClusters);
90  evt.getByToken(tracks_, trackCollection);
91 
92  std::auto_ptr<reco::HIPhotonIsolationMap> outputMap (new reco::HIPhotonIsolationMap);
93  reco::HIPhotonIsolationMap::Filler filler(*outputMap);
94  std::vector<reco::HIPhotonIsolation> isoVector;
95 
96  EcalClusterIsoCalculator CxC(evt,es, barrelClusters, endcapClusters);
97  HcalRechitIsoCalculator RxC(evt,es, hbhe, hf, ho);
98  TrackIsoCalculator TxC(evt, es, trackCollection, trackQuality_);
100 
101  for (reco::PhotonCollection::const_iterator phoItr = photons->begin(); phoItr != photons->end(); ++phoItr)
102  {
104  // HI-style isolation info
105  iso.ecalClusterIsoR1(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(),1,0));
106  iso.ecalClusterIsoR2(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(),2,0));
107  iso.ecalClusterIsoR3(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(),3,0));
108  iso.ecalClusterIsoR4(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(),4,0));
109  iso.ecalClusterIsoR5(CxC.getBkgSubEcalClusterIso(phoItr->superCluster(),5,0));
110 
111  iso.hcalRechitIsoR1(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(),1,0));
112  iso.hcalRechitIsoR2(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(),2,0));
113  iso.hcalRechitIsoR3(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(),3,0));
114  iso.hcalRechitIsoR4(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(),4,0));
115  iso.hcalRechitIsoR5(RxC.getBkgSubHcalRechitIso(phoItr->superCluster(),5,0));
116 
117  iso.trackIsoR1PtCut20(TxC.getBkgSubTrackIso(*phoItr,1,2));
118  iso.trackIsoR2PtCut20(TxC.getBkgSubTrackIso(*phoItr,2,2));
119  iso.trackIsoR3PtCut20(TxC.getBkgSubTrackIso(*phoItr,3,2));
120  iso.trackIsoR4PtCut20(TxC.getBkgSubTrackIso(*phoItr,4,2));
121  iso.trackIsoR5PtCut20(TxC.getBkgSubTrackIso(*phoItr,5,2));
122 
123  // ecal spike rejection info (seed timing)
124  const reco::CaloClusterPtr seed = phoItr->superCluster()->seed();
125  const DetId &id = lazyTool.getMaximum(*seed).first;
126  float time = -999.;
127  const EcalRecHitCollection & rechits = ( phoItr->isEB() ? *barrelEcalHits : *endcapEcalHits);
128  EcalRecHitCollection::const_iterator it = rechits.find( id );
129  if( it != rechits.end() ) {
130  time = it->time();
131  }
132  iso.seedTime(time);
133 
134  // ecal spike rejectino info (swiss cross)
135  float eMax = lazyTool.eMax(*seed);
136  float eRight = lazyTool.eRight(*seed);
137  float eLeft = lazyTool.eLeft(*seed);
138  float eTop = lazyTool.eTop(*seed);
139  float eBottom = lazyTool.eBottom(*seed);
140  iso.swissCrx( 1 - (eRight + eLeft + eTop + eBottom)/eMax );
141 
142  isoVector.push_back(iso);
143  }
144  filler.insert(photons, isoVector.begin(), isoVector.end() );
145  filler.fill();
146  evt.put(outputMap);
147 }
148 
149 void
152 
153  desc.add<edm::InputTag>("photonProducer",edm::InputTag("photons"));
154  desc.add<edm::InputTag>("ebRecHitCollection",edm::InputTag("ecalRecHit:EcalRecHitsEB"));
155  desc.add<edm::InputTag>("eeRecHitCollection",edm::InputTag("ecalRecHit:EcalRecHitsEE"));
156  desc.add<edm::InputTag>("hbhe",edm::InputTag("hbhereco"));
157  desc.add<edm::InputTag>("hf",edm::InputTag("hfreco"));
158  desc.add<edm::InputTag>("ho",edm::InputTag("horeco"));
159  desc.add<edm::InputTag>("basicClusterBarrel",edm::InputTag("islandBasicClusters:islandBarrelBasicClusters"));
160  desc.add<edm::InputTag>("basicClusterEndcap",edm::InputTag("islandBasicClusters:islandEndcapBasicClusters"));
161  desc.add<edm::InputTag>("trackCollection",edm::InputTag("hiGeneralTracks"));
162  desc.add<std::string>("trackQuality","highPurity");
163 
164  descriptions.add("photonIsolationHIProducer", desc);
165 }
166 
photonIsolationHIProducer(const edm::ParameterSet &ps)
float hcalRechitIsoR1() const
Rechit-based isolation (HCAL) R = 0.1.
edm::EDGetTokenT< HORecHitCollection > ho_
edm::EDGetTokenT< HBHERecHitCollection > hbhe_
const std::vector< reco::PFCandidatePtr > & tracks_
float ecalClusterIsoR1() const
Cluster-based isolation (ECAL) R = 0.1.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void insert(const H &h, I begin, I end)
Definition: ValueMap.h:52
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:13
std::vector< EcalRecHit >::const_iterator const_iterator
edm::EDGetTokenT< reco::BasicClusterCollection > endcapClusters_
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.
edm::EDGetTokenT< HFRecHitCollection > hf_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:115
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.
virtual 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&gt;2.0GeV, R = 0.5.
float ecalClusterIsoR5() const
Cluster-based isolation (ECAL) R = 0.5.
edm::EDGetTokenT< EcalRecHitCollection > endcapEcalHits_
Definition: DetId.h:18
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&gt;2.0GeV, R = 0.1.
float swissCrx() const
SwissCross crystal ratio.
float trackIsoR4PtCut20() const
Track-based isolation, pt&gt;2.0GeV, R = 0.4.
iterator find(key_type k)
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&gt;2.0GeV, R = 0.2.
float trackIsoR3PtCut20() const
Track-based isolation, pt&gt;2.0GeV, R = 0.3.
float ecalClusterIsoR3() const
Cluster-based isolation (ECAL) R = 0.3.
edm::EDGetTokenT< reco::TrackCollection > tracks_