46 useUncalib_ (ps.getParameter<bool>(
"useUncalib")),
47 l1TagIsolated_ (ps.getParameter< edm::
InputTag > (
"l1TagIsolated")),
48 l1TagNonIsolated_(ps.getParameter< edm::
InputTag > (
"l1TagNonIsolated")),
49 doIsolated_ (ps.getParameter<bool>(
"doIsolated")),
50 l1LowerThr_ (ps.getParameter<double> (
"l1LowerThr")),
51 l1UpperThr_ (ps.getParameter<double> (
"l1UpperThr")),
52 l1LowerThrIgnoreIsolation_(ps.getParameter<double> (
"l1LowerThrIgnoreIsolation")),
53 regionEtaMargin_(ps.getParameter<double>(
"regionEtaMargin")),
54 regionPhiMargin_(ps.getParameter<double>(
"regionPhiMargin")),
55 hitLabels (ps.getParameter<std::vector<edm::
InputTag>>(
"ecalhitLabels")),
78 std::vector<std::string> productTags;
79 productTags.push_back(
"EcalRegionalRecHitsEB");
80 productTags.push_back(
"EcalRegionalRecHitsEE");
81 desc.
add<std::vector<std::string>>(
"productLabels", productTags);
82 std::vector<edm::InputTag> inputTags;
83 inputTags.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEB"));
84 inputTags.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEE"));
85 inputTags.push_back(
edm::InputTag(
"hltESRegionalEgammaRecHit:EcalRecHitsES"));
86 desc.
add<std::vector<edm::InputTag>>(
"ecalhitLabels", inputTags);
89 desc.
add<
bool>(
"useUncalib",
true);
90 desc.
add<
bool>(
"doIsolated",
true);
91 desc.
add<
double>(
"l1LowerThr", 5.0);
92 desc.
add<
double>(
"l1UpperThr", 999.);
93 desc.
add<
double>(
"l1LowerThrIgnoreIsolation", 0.0);
94 desc.
add<
double>(
"regionEtaMargin", 0.14);
95 desc.
add<
double>(
"regionPhiMargin", 0.4);
107 std::auto_ptr<const CaloSubdetectorTopology>
topology;
116 evt.
getByLabel(l1TagNonIsolated_, emNonIsolColl);
122 std::vector<EcalEtaPhiRegion> regions;
123 if(doIsolated_) getEtaPhiRegions(®ions, *emIsolColl, *l1CaloGeom,
true);
125 if(!doIsolated_
or (l1LowerThrIgnoreIsolation_ < 64)) getEtaPhiRegions(®ions, *emNonIsolColl, *l1CaloGeom,
false);
131 for (
unsigned int i=0;
i<hitLabels.size();
i++) {
135 if (!(urhcH[i].isValid())) {
136 edm::LogError(
"ProductNotFound")<<
"could not get a handle on the EcalRecHitCollection! (" << hitLabels[
i].encode() <<
")" << std::endl;
141 if (uncalibRecHits->
size() > 0) {
142 if ((*uncalibRecHits)[0].id().subdetId() ==
EcalBarrel) {
145 }
else if ((*uncalibRecHits)[0].
id().subdetId() ==
EcalEndcap) {
148 }
else if ((*uncalibRecHits)[0].
id().subdetId() ==
EcalPreshower) {
151 }
else throw(std::runtime_error(
"\n\nProducer encountered invalied ecalhitcollection type.\n\n"));
153 if(regions.size() != 0) {
156 for (it = uncalibRecHits->
begin(); it != uncalibRecHits->
end(); it++){
160 std::vector<EcalEtaPhiRegion>::const_iterator region;
161 for (region=regions.begin(); region!=regions.end(); region++) {
162 if (region->inRegion(position)) {
163 uhits->push_back(*it);
177 for (
unsigned int i=0;
i<hitLabels.size();
i++) {
181 if (!(rhcH[i].isValid())) {
182 edm::LogError(
"ProductNotFound")<<
"could not get a handle on the EcalRecHitCollection! (" << hitLabels[
i].encode() <<
")" << std::endl;
187 if (recHits->
size() > 0) {
188 if ((*recHits)[0].id().subdetId() ==
EcalBarrel) {
191 }
else if ((*recHits)[0].
id().subdetId() ==
EcalEndcap) {
197 }
else throw(std::runtime_error(
"\n\nProducer encountered invalied ecalhitcollection type.\n\n"));
199 if(regions.size() != 0) {
201 for (it = recHits->
begin(); it != recHits->
end(); it++){
205 std::vector<EcalEtaPhiRegion>::const_iterator region;
206 for (region=regions.begin(); region!=regions.end(); region++) {
207 if (region->inRegion(position)) {
208 hits->push_back(*it);
223 for (
unsigned int candItr = 0 ; candItr < theCandidateCollection.size(); candItr++){
227 if(doIsolated_ and (emItr.
et() < l1LowerThrIgnoreIsolation_))
continue;
230 if ((emItr.
et() > l1LowerThr_) and (emItr.
et() < l1UpperThr_)) {
242 etaLow -= regionEtaMargin_;
243 etaHigh += regionEtaMargin_;
244 phiLow -= regionPhiMargin_;
245 phiHigh += regionPhiMargin_;
254 template<
typename T1>
256 for (
unsigned int candItr = 0 ; candItr < theCandidateCollection.size(); candItr++){
257 T1 emItr = theCandidateCollection.at(candItr);
258 if ((emItr.et() > l1LowerThr_) and (emItr.et() < l1UpperThr_)) {
260 double etaLow = emItr.eta() - regionEtaMargin_;
261 double etaHigh = emItr.eta() + regionEtaMargin_;
262 double phiLow = emItr.phi() - regionPhiMargin_;
263 double phiHigh = emItr.phi() + regionPhiMargin_;
HLTRechitInRegionsProducer(const edm::ParameterSet &ps)
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
std::string defaultModuleLabel()
std::vector< T1 > T1Collection
double etaBinHighEdge(unsigned int etaIndex, bool central=true) const
HLTRechitInRegionsProducer< reco::RecoChargedCandidate > MuonHLTRechitInRegionsProducer
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
const std::vector< edm::InputTag > hitLabels
virtual double et() const
transverse energy
CaloTopology const * topology(0)
double etaBinLowEdge(unsigned int etaIndex, bool central=true) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
HLTRechitInRegionsProducer< l1extra::L1EmParticle > EgammaHLTRechitInRegionsProducer
#define DEFINE_FWK_MODULE(type)
const std::vector< std::string > productLabels
std::vector< EcalUncalibratedRecHit >::const_iterator const_iterator
const L1GctEmCand * gctEmCand() const
unsigned phiIndex() const
get phi index (0-17)
std::vector< edm::EDGetTokenT< EcalRecHitCollection > > hitTokens
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
unsigned etaIndex() const
get eta index -6 to -0, +0 to +6 (bit 3 is sign, 1 for -ve Z, 0 for +ve Z)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
const_iterator end() const
void produce(edm::Event &, const edm::EventSetup &) override
T const * product() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~HLTRechitInRegionsProducer()
ESHandle< TrackerGeometry > geometry
static int position[264][3]
double emJetPhiBinLowEdge(unsigned int phiIndex) const
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
void getEtaPhiRegions(std::vector< EcalEtaPhiRegion > *, T1Collection, const L1CaloGeometry &, bool)
const_iterator begin() const
std::vector< edm::EDGetTokenT< EcalUncalibratedRecHitCollection > > uncalibHitTokens
double emJetPhiBinHighEdge(unsigned int phiIndex) const