43 useUncalib_ (ps.getParameter<
bool>(
"useUncalib")),
44 doIsolated_ (ps.getParameter<
bool>(
"doIsolated")),
46 l1TokenNonIsolated_(consumes<
T1Collection>(ps.getParameter<
edm::InputTag>(
"l1TagNonIsolated"))),
47 l1LowerThr_ (ps.getParameter<double> (
"l1LowerThr")),
48 l1UpperThr_ (ps.getParameter<double> (
"l1UpperThr")),
49 l1LowerThrIgnoreIsolation_(ps.getParameter<double> (
"l1LowerThrIgnoreIsolation")),
50 regionEtaMargin_(ps.getParameter<double>(
"regionEtaMargin")),
51 regionPhiMargin_(ps.getParameter<double>(
"regionPhiMargin")),
52 hitLabels (ps.getParameter<
std::vector<
edm::InputTag>>(
"ecalhitLabels")),
53 productLabels(ps.getParameter<
std::vector<
std::
string>>(
"productLabels")) {
75 std::vector<std::string> productTags;
76 productTags.push_back(
"EcalRegionalRecHitsEB");
77 productTags.push_back(
"EcalRegionalRecHitsEE");
78 desc.
add<std::vector<std::string>>(
"productLabels", productTags);
80 inputTags.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEB"));
81 inputTags.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEE"));
82 inputTags.push_back(
edm::InputTag(
"hltESRegionalEgammaRecHit:EcalRecHitsES"));
83 desc.
add<std::vector<edm::InputTag>>(
"ecalhitLabels",
inputTags);
86 desc.
add<
bool>(
"useUncalib",
true);
87 desc.
add<
bool>(
"doIsolated",
true);
88 desc.
add<
double>(
"l1LowerThr", 5.0);
89 desc.
add<
double>(
"l1UpperThr", 999.);
90 desc.
add<
double>(
"l1LowerThrIgnoreIsolation", 0.0);
91 desc.
add<
double>(
"regionEtaMargin", 0.14);
92 desc.
add<
double>(
"regionPhiMargin", 0.4);
104 std::unique_ptr<const CaloSubdetectorTopology>
topology;
120 std::vector<RectangularEtaPhiRegion>
regions;
130 auto uhits = std::make_unique<EcalUncalibratedRecHitCollection>();
133 if (!(urhcH[i].isValid())) {
134 edm::LogError(
"ProductNotFound")<<
"could not get a handle on the EcalRecHitCollection! (" <<
hitLabels[
i].encode() <<
")" << std::endl;
139 if (!uncalibRecHits->
empty()) {
140 if ((*uncalibRecHits)[0].id().subdetId() ==
EcalBarrel) {
142 topology = std::make_unique<EcalBarrelTopology>(*geoHandle);
143 }
else if ((*uncalibRecHits)[0].
id().subdetId() ==
EcalEndcap) {
145 topology = std::make_unique<EcalEndcapTopology>(*geoHandle);
146 }
else if ((*uncalibRecHits)[0].
id().subdetId() ==
EcalPreshower) {
148 topology = std::make_unique<EcalPreshowerTopology>();
149 }
else throw(std::runtime_error(
"\n\nProducer encountered invalied ecalhitcollection type.\n\n"));
151 if(!regions.empty()) {
154 for (it = uncalibRecHits->
begin(); it != uncalibRecHits->
end(); it++){
155 auto this_cell = geometry_p->
getGeometry(it->id());
157 std::vector<RectangularEtaPhiRegion>::const_iterator region;
158 for (region=regions.begin(); region!=regions.end(); region++) {
159 if (region->inRegion(this_cell->etaPos(),this_cell->phiPos())) {
160 uhits->push_back(*it);
175 auto hits = std::make_unique<EcalRecHitCollection>();
178 if (!(rhcH[i].isValid())) {
179 edm::LogError(
"ProductNotFound")<<
"could not get a handle on the EcalRecHitCollection! (" <<
hitLabels[
i].encode() <<
")" << std::endl;
184 if (!recHits->
empty()) {
185 if ((*recHits)[0].id().subdetId() ==
EcalBarrel) {
187 topology = std::make_unique<EcalBarrelTopology>(*geoHandle);
188 }
else if ((*recHits)[0].
id().subdetId() ==
EcalEndcap) {
190 topology = std::make_unique<EcalEndcapTopology>(*geoHandle);
193 topology = std::make_unique<EcalPreshowerTopology>();
194 }
else throw(std::runtime_error(
"\n\nProducer encountered invalied ecalhitcollection type.\n\n"));
196 if(!regions.empty()) {
198 for (it = recHits->
begin(); it != recHits->
end(); it++){
199 auto this_cell = geometry_p->
getGeometry(it->id());
201 std::vector<RectangularEtaPhiRegion>::const_iterator region;
202 for (region=regions.begin(); region!=regions.end(); region++) {
203 if (region->inRegion(this_cell->etaPos(),this_cell->phiPos())) {
204 hits->push_back(*it);
219 for (
unsigned int candItr = 0 ; candItr < theCandidateCollection.size(); candItr++){
250 template<
typename T1>
252 for (
unsigned int candItr = 0 ; candItr < theCandidateCollection.size(); candItr++){
253 T1 emItr = theCandidateCollection.at(candItr);
HLTRechitInRegionsProducer(const edm::ParameterSet &ps)
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< T1 > T1Collection
double etaBinHighEdge(unsigned int etaIndex, bool central=true) const
HLTRechitInRegionsProducer< reco::RecoChargedCandidate > MuonHLTRechitInRegionsProducer
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const std::vector< edm::InputTag > hitLabels
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
const std::vector< std::string > productLabels
std::vector< T >::const_iterator const_iterator
const L1GctEmCand * gctEmCand() const
const edm::EDGetTokenT< T1Collection > l1TokenIsolated_
std::string defaultModuleLabel()
std::vector< edm::EDGetTokenT< EcalRecHitCollection > > hitTokens
unsigned phiIndex() const override
get phi index (0-17)
unsigned etaIndex() const override
get eta index -6 to -0, +0 to +6 (bit 3 is sign, 1 for -ve Z, 0 for +ve Z)
#define DEFINE_FWK_MODULE(type)
double et() const final
transverse energy
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
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const_iterator end() const
void produce(edm::Event &, const edm::EventSetup &) override
T const * product() const
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void getEtaPhiRegions(std::vector< RectangularEtaPhiRegion > *, T1Collection, const L1CaloGeometry &, bool)
const double regionEtaMargin_
~HLTRechitInRegionsProducer() override
const double regionPhiMargin_
const edm::EDGetTokenT< T1Collection > l1TokenNonIsolated_
double emJetPhiBinLowEdge(unsigned int phiIndex) const
const double l1LowerThrIgnoreIsolation_
const_iterator begin() const
std::vector< edm::EDGetTokenT< EcalUncalibratedRecHitCollection > > uncalibHitTokens
double emJetPhiBinHighEdge(unsigned int phiIndex) const