11 candTag_ (iConfig.getParameter<
edm::InputTag>(
"CandTag") ),
13 previousCandTag_ (iConfig.getParameter<
edm::InputTag>(
"PreviousCandTag") ),
14 previousCandToken_(consumes<
trigger::TriggerFilterObjectWithRefs>(previousCandTag_)),
15 minN_( iConfig.getParameter<
int>(
"MinN") ),
16 centralBxOnly_( iConfig.getParameter<
bool>(
"CentralBxOnly") )
22 const vector<ParameterSet>
cuts = iConfig.
getParameter<vector<ParameterSet> >(
"Cuts");
23 size_t ranges = cuts.size();
32 vector<double>
etaRange = cuts[
i].getParameter<vector<double> >(
"EtaRange");
33 if(etaRange.size() != 2 || etaRange[0] >= etaRange[1]){
44 minPts_.push_back( cuts[
i].getParameter<double>(
"MinPt") );
48 vector<unsigned int> qualities = cuts[
i].getParameter<vector<unsigned int> >(
"QualityBits");
49 for(
unsigned int qualitie : qualities){
60 ss<<
"Constructed with parameters:"<<endl;
64 for(
size_t i=1;
i<etaBoundaries_.size();
i++){
65 ss<<
'\t'<<etaBoundaries_[
i];
68 ss<<
" MinPts = \t "<<
minPts_[0];
69 for(
size_t i=1;
i<minPts_.size();
i++){
70 ss<<
"\t "<<minPts_[
i];
74 for(
size_t i=1;
i<qualityBitMasks_.size();
i++){
75 ss<<
"\t "<<qualityBitMasks_[
i];
78 ss<<
" MinN = "<<
minN_<<endl;
80 LogDebug(
"HLTMuonL1TRegionalFilter")<<ss.str();
92 desc.
add<
int>(
"MinN",1);
93 desc.
add<
bool>(
"CentralBxOnly",
true);
96 std::vector<edm::ParameterSet>
defaults(3);
103 etaRange.push_back(-2.5);
104 etaRange.push_back(+2.5);
107 qualityBits.push_back(6);
108 qualityBits.push_back(7);
109 validator.add<std::vector<double> >(
"EtaRange",
etaRange);
110 validator.add<
double>(
"MinPt",
minPt);
111 validator.add<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
115 etaRange.push_back(-2.5);
116 etaRange.push_back(-1.6);
119 qualityBits.push_back(6);
120 qualityBits.push_back(7);
121 defaults[0].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
122 defaults[0].addParameter<
double>(
"MinPt",
minPt);
123 defaults[0].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
127 etaRange.push_back(-1.6);
128 etaRange.push_back(+1.6);
131 qualityBits.push_back(7);
132 defaults[1].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
133 defaults[1].addParameter<
double>(
"MinPt",
minPt);
134 defaults[1].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
138 etaRange.push_back(+1.6);
139 etaRange.push_back(+2.5);
142 qualityBits.push_back(6);
143 qualityBits.push_back(7);
145 defaults[2].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
146 defaults[2].addParameter<
double>(
"MinPt",
minPt);
147 defaults[2].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
149 desc.
addVPSet(
"Cuts",validator,defaults);
151 descriptions.
add(
"hltMuonL1TRegionalFilter", desc);
172 vector<MuonRef> prevMuons;
181 for (
auto it = allMuons->
begin(ibx); it != allMuons->
end(ibx); it++){
186 if(
find(prevMuons.begin(), prevMuons.end(),
muon) == prevMuons.end())
continue;
197 if(region == -1)
continue;
204 int quality = (it->hwQual() == 0 ? 0 : (1 << it->hwQual()));
223 LogTrace(
"HLTMuonL1TRegionalFilter")<<
"\nHLTMuonL1TRegionalFilter -----------------------------------------------" << endl;
224 LogTrace(
"HLTMuonL1TRegionalFilter")<<
"L1mu#" <<
'\t' 225 <<
"q*pt" <<
'\t' <<
'\t' 226 <<
"eta" <<
'\t' <<
"phi" <<
'\t' 227 <<
"quality" <<
'\t' <<
"isPrev\t " << endl;
228 LogTrace(
"HLTMuonL1TRegionalFilter")<<
"--------------------------------------------------------------------------" << endl;
230 vector<MuonRef> firedMuons;
232 for(
size_t i=0;
i<firedMuons.size();
i++){
234 bool isPrev =
find(prevMuons.begin(), prevMuons.end(),
mu) != prevMuons.end();
235 LogTrace(
"HLTMuonL1TRegionalFilter")<<
i <<
'\t' << setprecision(2) << scientific
236 << mu->charge()* mu->pt() <<
'\t' <<
fixed 237 << mu->eta() <<
'\t' << mu->phi() <<
'\t' 238 << mu->hwQual() <<
'\t' << isPrev << endl;
240 LogTrace(
"HLTMuonL1TRegionalFilter")<<
"--------------------------------------------------------------------------" << endl;
241 LogTrace(
"HLTMuonL1TRegionalFilter")<<
"Decision of this filter is " << accept <<
", number of muons passing = " << filterproduct.
l1tmuonSize();
const_iterator end(int bx) const
T getParameter(std::string const &) const
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
~HLTMuonL1TRegionalFilter() override
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
std::vector< int > qualityBitMasks_
HLTMuonL1TRegionalFilter(const edm::ParameterSet &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
bool centralBxOnly_
use central bx only muons
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
std::vector< double > minPts_
the vector of MinPt values, one for eta each region
#define DEFINE_FWK_MODULE(type)
def defaults(locpath, dataType, var)
int minN_
required number of passing candidates to pass the filter
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
BXVector< Muon > MuonBxCollection
edm::EDGetTokenT< l1t::MuonBxCollection > candToken_
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< double > etaBoundaries_
the vector of eta region boundaries; note: # of boundaries = # of regions + 1
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
edm::InputTag candTag_
input tag identifying the product containing muons
edm::InputTag previousCandTag_
input tag identifying the product containing refs to muons passing the previous level ...
size_type l1tmuonSize() const
const_iterator begin(int bx) const