54 if (energyLowEdges_.size() != thrRegularEB_.size()
or energyLowEdges_.size() != thrRegularEE_.size()
or 55 energyLowEdges_.size() != thrOverEEB_.size()
or energyLowEdges_.size() != thrOverEEE_.size()
or 56 energyLowEdges_.size() != thrOverE2EB_.size()
or energyLowEdges_.size() != thrOverE2EE_.size())
57 throw cms::Exception(
"IncompatibleVects") <<
"energyLowEdges and threshold vectors should be of the same size. \n";
59 if (energyLowEdges_.at(0) != 0.0)
60 throw cms::Exception(
"IncompleteCoverage") <<
"energyLowEdges should start from 0. \n";
62 for (
unsigned int aIt = 0; aIt < energyLowEdges_.size() - 1; aIt++) {
63 if ( !(energyLowEdges_.at( aIt ) < energyLowEdges_.at( aIt + 1 )) )
64 throw cms::Exception(
"ImproperBinning") <<
"energyLowEdges entries should be in increasing order. \n";
67 if (doRhoCorrection_) {
69 if (absEtaLowEdges_.size() != effectiveAreas_.size())
70 throw cms::Exception(
"IncompatibleVects") <<
"absEtaLowEdges and effectiveAreas should be of the same size. \n";
72 if (absEtaLowEdges_.at(0) != 0.0)
73 throw cms::Exception(
"IncompleteCoverage") <<
"absEtaLowEdges should start from 0. \n";
75 for (
unsigned int bIt = 0; bIt < absEtaLowEdges_.size() - 1; bIt++) {
76 if ( !(absEtaLowEdges_.at( bIt ) < absEtaLowEdges_.at( bIt + 1 )) )
77 throw cms::Exception(
"ImproperBinning") <<
"absEtaLowEdges entries should be in increasing order. \n";
89 desc.
add<std::vector<double> >(
"energyLowEdges", {0.0});
90 desc.
add<
bool>(
"lessThan",
true);
91 desc.
add<
bool>(
"useEt",
false);
92 desc.
add<std::vector<double> >(
"thrRegularEB", {0.0});
93 desc.
add<std::vector<double> >(
"thrRegularEE", {0.0});
94 desc.
add<std::vector<double> >(
"thrOverEEB", {-1.0});
95 desc.
add<std::vector<double> >(
"thrOverEEE", {-1.0});
96 desc.
add<std::vector<double> >(
"thrOverE2EB", {-1.0});
97 desc.
add<std::vector<double> >(
"thrOverE2EE", {-1.0});
98 desc.
add<
int>(
"ncandcut",1);
99 desc.
add<
bool>(
"doRhoCorrection",
false);
100 desc.
add<
double>(
"rhoMax", 9.9999999E7);
101 desc.
add<
double>(
"rhoScale", 1.0);
102 desc.
add<std::vector<double> >(
"effectiveAreas", {0.0, 0.0});
103 desc.
add<std::vector<double> >(
"absEtaLowEdges", {0.0, 1.479});
105 descriptions.
add(
"hltEgammaGenericQuadraticFilter", desc);
130 std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
152 for (
unsigned int i=0;
i<recoecalcands.size();
i++) {
154 ref = recoecalcands[
i];
157 float vali = mapi->
val;
158 float EtaSC = ref->eta();
166 float energy = ref->superCluster()->energy();
167 if (
useEt_) energy = energy *
sin (2*atan(
exp(-EtaSC)));
168 if (energy < 0.) energy = 0.;
171 double cutRegularEB_ = 9999., cutRegularEE_ = 9999.;
172 double cutOverEEB_ = 9999., cutOverEEE_ = 9999.;
173 double cutOverE2EB_ = 9999., cutOverE2EE_ = 9999.;
186 if ((
std::abs(EtaSC) < 1.479 && vali <= cutRegularEB_ + energy*cutOverEEB_ + energy*energy*cutOverE2EB_) || (
std::abs(EtaSC) >= 1.479 && vali <= cutRegularEE_ + energy*cutOverEEE_ + energy*energy*cutOverE2EE_) ) {
188 filterproduct.
addObject(trigger_type, ref);
192 if ((
std::abs(EtaSC) < 1.479 && vali >= cutRegularEB_ + energy*cutOverEEB_ + energy*energy*cutOverE2EB_) || (
std::abs(EtaSC) >= 1.479 && vali >= cutRegularEE_ + energy*cutOverEEE_ + energy*energy*cutOverE2EE_) ) {
194 filterproduct.
addObject(trigger_type, ref);
HLTEgammaGenericQuadraticFilter(const edm::ParameterSet &)
T getParameter(std::string const &) const
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< double > thrRegularEB_
~HLTEgammaGenericQuadraticFilter() override
Sin< T >::type sin(const T &t)
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
std::vector< double > thrOverEEB_
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
#define DEFINE_FWK_MODULE(type)
std::vector< double > energyLowEdges_
std::vector< double > thrOverE2EE_
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > candToken_
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
edm::EDGetTokenT< reco::RecoEcalCandidateIsolationMap > varToken_
std::vector< double > thrOverE2EB_
Abs< T >::type abs(const T &t)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< double > absEtaLowEdges_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< double > rhoToken_
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
T const * product() const
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< double > thrRegularEE_
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
std::vector< double > effectiveAreas_
std::vector< double > thrOverEEE_