28 return (*it).energy();
48 : EgammaCandidateCollection_(
50 EgammaGsfTrackCollection_(
62 egammaPtCut(iConfig.getParameter<double>(
"egammaPtCut")),
63 egammaEtaCut(iConfig.getParameter<double>(
"egammaEtaCut")),
76 <<
"size of \"absEtaBinUpperEdges\" (" <<
absEtaBinUpperEdges.size() <<
") and \"egammaSigmaIEtaIEtaCut\" (" 82 throw cms::Exception(
"IncorrectValue") <<
"absEtaBinUpperEdges entries should be greater than or equal to zero.";
85 throw cms::Exception(
"ImproperBinning") <<
"absEtaBinUpperEdges entries should be in increasing order.";
92 <<
") should have a value larger than \"egammaEtaCut\" (" <<
egammaEtaCut <<
").";
96 produces<Run3ScoutingElectronCollection>();
97 produces<Run3ScoutingPhotonCollection>();
107 auto outElectrons = std::make_unique<Run3ScoutingElectronCollection>();
108 auto outPhotons = std::make_unique<Run3ScoutingPhotonCollection>();
215 for (
auto& candidate : *EgammaCandidateCollection) {
233 float sMin = moments.
sMin;
234 float sMaj = moments.
sMaj;
236 uint32_t seedId = (*SCseed).seed();
238 std::vector<DetId> mDetIds = EcalClusterTools::matrixDetId((topology), (*SCseed).seed(),
rechitMatrixSize);
240 int detSize = mDetIds.size();
241 std::vector<uint32_t> mDetIdIds;
242 std::vector<float> mEnergies;
243 std::vector<float> mTimes;
244 mDetIdIds.reserve(detSize);
245 mEnergies.reserve(detSize);
246 mTimes.reserve(detSize);
248 for (
int i = 0;
i < detSize;
i++) {
251 mDetIdIds.push_back(mDetIds[
i]);
260 auto const HoE = candidate.superCluster()->energy() != 0.
261 ? ((*HoverEMap)[candidateRef] / candidate.superCluster()->energy())
267 auto const sinin = candidate.superCluster()->energy() != 0. ? (*SigmaIEtaIEtaMap)[candidateRef] : 999.;
279 for (
auto&
track : *EgammaGsfTrackCollection) {
284 if (scRefFromTrk == scRef) {
291 outPhotons->emplace_back(candidate.pt(),
295 (*SigmaIEtaIEtaMap)[candidateRef],
297 (*EcalPFClusterIsoMap)[candidateRef],
298 (*HcalPFClusterIsoMap)[candidateRef],
300 (*R9Map)[candidateRef],
309 outElectrons->emplace_back(candidate.pt(),
315 (*DetaMap)[candidateRef],
316 (*DphiMap)[candidateRef],
317 (*SigmaIEtaIEtaMap)[candidateRef],
319 (*OneOEMinusOneOPMap)[candidateRef],
320 (*MissingHitsMap)[candidateRef],
322 (*EcalPFClusterIsoMap)[candidateRef],
323 (*HcalPFClusterIsoMap)[candidateRef],
324 (*EleGsfTrackIsoMap)[candidateRef],
325 (*R9Map)[candidateRef],
356 desc.add<
double>(
"egammaPtCut", 4.0);
357 desc.add<
double>(
"egammaEtaCut", 2.5);
358 desc.add<
double>(
"egammaHoverECut", 1.0);
359 desc.add<std::vector<double>>(
"egammaSigmaIEtaIEtaCut", {99999.0, 99999.0});
360 desc.add<std::vector<double>>(
"absEtaBinUpperEdges", {1.479, 5.0});
361 desc.add<
bool>(
"saveRecHitTiming",
false);
362 desc.add<
int>(
"mantissaPrecision", 10)->setComment(
"default float16, change to 23 for float32");
363 desc.add<
int>(
"rechitMatrixSize", 10);
364 desc.add<
bool>(
"rechitZeroSuppression",
true);
367 descriptions.
add(
"hltScoutingEgammaProducer",
desc);
helper::MatcherGetRef< C >::ref_type getRef(const Handle< C > &c, size_t k)
const int mantissaPrecision
const edm::EDGetTokenT< RecoEcalCandMap > SigmaIEtaIEtaMap_
const edm::EDGetTokenT< EcalRecHitCollection > ecalRechitEE_
edm::ESGetToken< CaloTopology, CaloTopologyRecord > topologyToken_
const edm::EDGetTokenT< RecoEcalCandMap > R9Map_
const std::vector< double > egammaSigmaIEtaIEtaCut
T const * product() const
std::vector< EcalRecHit >::const_iterator const_iterator
const edm::EDGetTokenT< reco::GsfTrackCollection > EgammaGsfTrackCollection_
const edm::EDGetTokenT< RecoEcalCandMap > EleGsfTrackIsoMap_
const edm::EDGetTokenT< RecoEcalCandMap > HoverEMap_
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > EgammaCandidateCollection_
const std::vector< double > absEtaBinUpperEdges
const edm::EDGetTokenT< RecoEcalCandMap > DetaMap_
const double egammaHoverECut
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
std::vector< GsfTrack > GsfTrackCollection
collection of GsfTracks
const int rechitMatrixSize
Abs< T >::type abs(const T &t)
const double egammaEtaCut
#define DEFINE_FWK_MODULE(type)
bool isNull() const
Checks for null.
float recHitT(const DetId id, const EcalRecHitCollection &recHits)
const edm::EDGetTokenT< RecoEcalCandMap > OneOEMinusOneOPMap_
const edm::EDGetTokenT< RecoEcalCandMap > MissingHitsMap_
const edm::EDGetTokenT< RecoEcalCandMap > DphiMap_
static constexpr float d0
const bool saveRecHitTiming
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
void produce(edm::StreamID sid, edm::Event &iEvent, edm::EventSetup const &setup) const final
static float reduceMantissaToNbitsRounding(const float &f)
const bool rechitZeroSuppression
const edm::EDGetTokenT< EcalRecHitCollection > ecalRechitEB_
float recHitE(const DetId id, const EcalRecHitCollection &recHits)
~HLTScoutingEgammaProducer() override
const edm::EDGetTokenT< RecoEcalCandMap > HcalPFClusterIsoMap_
const edm::EDGetTokenT< RecoEcalCandMap > EcalPFClusterIsoMap_
HLTScoutingEgammaProducer(const edm::ParameterSet &)