CMS 3D CMS Logo

HLTHcalPFClusterIsolationProducer.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <vector>
3 #include <memory>
4 
6 
7 // Framework
16 
19 
20 template<typename T1>
22  pfClusterProducerHCAL_ ( consumes<reco::PFClusterCollection>(config.getParameter<edm::InputTag>("pfClusterProducerHCAL"))),
23  rhoProducer_ ( consumes<double>(config.getParameter<edm::InputTag>("rhoProducer"))),
24  pfClusterProducerHFEM_ ( consumes<reco::PFClusterCollection>(config.getParameter<edm::InputTag>("pfClusterProducerHFEM"))),
25  pfClusterProducerHFHAD_ ( consumes<reco::PFClusterCollection>(config.getParameter<edm::InputTag>("pfClusterProducerHFHAD"))),
26  useHF_ ( config.getParameter<bool>("useHF")),
27  drMax_ ( config.getParameter<double>("drMax")),
28  drVetoBarrel_ ( config.getParameter<double>("drVetoBarrel")),
29  drVetoEndcap_ ( config.getParameter<double>("drVetoEndcap")),
30  etaStripBarrel_ ( config.getParameter<double>("etaStripBarrel")),
31  etaStripEndcap_ ( config.getParameter<double>("etaStripEndcap")),
32  energyBarrel_ ( config.getParameter<double>("energyBarrel")),
33  energyEndcap_ ( config.getParameter<double>("energyEndcap")),
34  useEt_ ( config.getParameter<bool>("useEt")),
35  doRhoCorrection_ ( config.getParameter<bool>("doRhoCorrection")),
36  rhoMax_ ( config.getParameter<double>("rhoMax")),
37  rhoScale_ ( config.getParameter<double>("rhoScale")),
38  effectiveAreas_ ( config.getParameter<std::vector<double> >("effectiveAreas")) ,
39  absEtaLowEdges_ ( config.getParameter<std::vector<double> >("absEtaLowEdges")) {
40 
41  if (doRhoCorrection_) {
42  if (absEtaLowEdges_.size() != effectiveAreas_.size())
43  throw cms::Exception("IncompatibleVects") << "absEtaLowEdges and effectiveAreas should be of the same size. \n";
44 
45  if (absEtaLowEdges_.at(0) != 0.0)
46  throw cms::Exception("IncompleteCoverage") << "absEtaLowEdges should start from 0. \n";
47 
48  for (unsigned int aIt = 0; aIt < absEtaLowEdges_.size() - 1; aIt++) {
49  if ( !(absEtaLowEdges_.at( aIt ) < absEtaLowEdges_.at( aIt + 1 )) )
50  throw cms::Exception("ImproperBinning") << "absEtaLowEdges entries should be in increasing order. \n";
51  }
52  }
53 
54  std::string recoCandidateProducerName = "recoCandidateProducer";
55  if ((typeid(HLTHcalPFClusterIsolationProducer<T1>) == typeid(HLTHcalPFClusterIsolationProducer<reco::RecoEcalCandidate>))) recoCandidateProducerName = "recoEcalCandidateProducer";
56  recoCandidateProducer_ = consumes<T1Collection>(config.getParameter<edm::InputTag>(recoCandidateProducerName));
57 
58  produces <T1IsolationMap >();
59 }
60 
61 template<typename T1>
63 {}
64 
65 template<typename T1>
67 
68  std::string recoCandidateProducerName = "recoCandidateProducer";
69  if ((typeid(HLTHcalPFClusterIsolationProducer<T1>) == typeid(HLTHcalPFClusterIsolationProducer<reco::RecoEcalCandidate>))) recoCandidateProducerName = "recoEcalCandidateProducer";
70 
72  desc.add<edm::InputTag>(recoCandidateProducerName, edm::InputTag("hltL1SeededRecoEcalCandidatePF"));
73  desc.add<edm::InputTag>("pfClusterProducerHCAL", edm::InputTag("hltParticleFlowClusterHCAL"));
74  desc.ifValue(edm::ParameterDescription<bool>("useHF", false, true),
75  true >> (edm::ParameterDescription<edm::InputTag>("pfClusterProducerHFEM", edm::InputTag("hltParticleFlowClusterHFEM"), true) and
76  edm::ParameterDescription<edm::InputTag>("pfClusterProducerHFHAD", edm::InputTag("hltParticleFlowClusterHFHAD"), true)) or
77  false >> (edm::ParameterDescription<edm::InputTag>("pfClusterProducerHFEM", edm::InputTag(""), true) and
78  edm::ParameterDescription<edm::InputTag>("pfClusterProducerHFHAD", edm::InputTag(""), true)));
79  desc.add<edm::InputTag>("rhoProducer", edm::InputTag("fixedGridRhoFastjetAllCalo"));
80  desc.add<bool>("doRhoCorrection", false);
81  desc.add<double>("rhoMax", 9.9999999E7);
82  desc.add<double>("rhoScale", 1.0);
83  desc.add<double>("drMax", 0.3);
84  desc.add<double>("drVetoBarrel", 0.0);
85  desc.add<double>("drVetoEndcap", 0.0);
86  desc.add<double>("etaStripBarrel", 0.0);
87  desc.add<double>("etaStripEndcap", 0.0);
88  desc.add<double>("energyBarrel", 0.0);
89  desc.add<double>("energyEndcap", 0.0);
90  desc.add<bool>("useEt", true);
91  desc.add<std::vector<double> >("effectiveAreas", {0.2, 0.25}); // 2016 post-ichep sinEle default
92  desc.add<std::vector<double> >("absEtaLowEdges", {0.0, 1.479}); // Barrel, Endcap
94 }
95 
96 template<typename T1>
98 
99  edm::Handle<double> rhoHandle;
100  double rho = 0.0;
101  if (doRhoCorrection_) {
102  iEvent.getByToken(rhoProducer_, rhoHandle);
103  rho = *(rhoHandle.product());
104  }
105 
106  if (rho > rhoMax_)
107  rho = rhoMax_;
108 
109  rho = rho*rhoScale_;
110 
111  edm::Handle<T1Collection> recoCandHandle;
112 
113  std::vector<edm::Handle<reco::PFClusterCollection>> clusterHandles;
114  edm::Handle<reco::PFClusterCollection> clusterHcalHandle;
115  edm::Handle<reco::PFClusterCollection> clusterHfemHandle;
116  edm::Handle<reco::PFClusterCollection> clusterHfhadHandle;
117 
118  iEvent.getByToken(recoCandidateProducer_,recoCandHandle);
119  iEvent.getByToken(pfClusterProducerHCAL_, clusterHcalHandle);
120  //const reco::PFClusterCollection* forIsolationHcal = clusterHcalHandle.product();
121  clusterHandles.push_back(clusterHcalHandle);
122 
123  if (useHF_) {
124  iEvent.getByToken(pfClusterProducerHFEM_, clusterHfemHandle);
125  clusterHandles.push_back(clusterHfemHandle);
126  iEvent.getByToken(pfClusterProducerHFHAD_, clusterHfhadHandle);
127  clusterHandles.push_back(clusterHfhadHandle);
128  }
129 
130  T1IsolationMap recoCandMap(recoCandHandle);
132 
133  for (unsigned int iReco = 0; iReco < recoCandHandle->size(); iReco++) {
134  T1Ref candRef(recoCandHandle, iReco);
135 
136  float sum = isoAlgo.getSum(candRef, clusterHandles);
137 
138  if (doRhoCorrection_) {
139  int iEA = -1;
140  auto cEta = std::abs(candRef->eta());
141  for (int bIt = absEtaLowEdges_.size() - 1; bIt > -1; bIt--) {
142  if ( cEta > absEtaLowEdges_.at(bIt) ) {
143  iEA = bIt;
144  break;
145  }
146  }
147 
148  sum = sum - rho*effectiveAreas_.at(iEA);
149  }
150 
151  recoCandMap.insert(candRef, sum);
152  }
153 
154  iEvent.put(std::make_unique<T1IsolationMap>(recoCandMap));
155 }
156 
159 
T getParameter(std::string const &) const
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
Definition: config.py:1
std::string defaultModuleLabel()
const edm::EDGetTokenT< double > rhoProducer_
const edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFHAD_
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHCAL_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HLTHcalPFClusterIsolationProducer< reco::RecoEcalCandidate > EgammaHLTHcalPFClusterIsolationProducer
ParameterDescriptionBase * add(U const &iLabel, T const &value)
double getSum(const T1Ref candRef, const std::vector< edm::Handle< reco::PFClusterCollection >> &clusterHandles)
void produce(edm::StreamID sid, edm::Event &, const edm::EventSetup &) const override
edm::EDGetTokenT< T1Collection > recoCandidateProducer_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T const * product() const
Definition: Handle.h:74
void insert(const key_type &k, const data_type &v)
insert an association
void add(std::string const &label, ParameterSetDescription const &psetDescription)
fixed size matrix
HLT enums.
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
const edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFEM_
HLTHcalPFClusterIsolationProducer(const edm::ParameterSet &)
HLTHcalPFClusterIsolationProducer< reco::RecoChargedCandidate > MuonHLTHcalPFClusterIsolationProducer