14 candTag_ (iConfig.getParameter<
edm::InputTag>(
"CandTag") ),
16 previousCandTag_ (iConfig.getParameter<
edm::InputTag>(
"PreviousCandTag") ),
17 previousCandToken_(consumes<
trigger::TriggerFilterObjectWithRefs>(previousCandTag_)),
18 minN_( iConfig.getParameter<
int>(
"MinN") )
24 const vector<ParameterSet>
cuts = iConfig.
getParameter<vector<ParameterSet> >(
"Cuts");
25 size_t ranges = cuts.size();
34 vector<double>
etaRange = cuts[
i].getParameter<vector<double> >(
"EtaRange");
35 if(etaRange.size() != 2 || etaRange[0] >= etaRange[1]){
46 minPts_.push_back( cuts[
i].getParameter<double>(
"MinPt") );
50 vector<unsigned int> qualities = cuts[
i].getParameter<vector<unsigned int> >(
"QualityBits");
51 for(
unsigned int qualitie : qualities){
62 ss<<
"Constructed with parameters:"<<endl;
66 for(
size_t i=1;
i<etaBoundaries_.size();
i++){
67 ss<<
'\t'<<etaBoundaries_[
i];
70 ss<<
" MinPts = \t "<<
minPts_[0];
71 for(
size_t i=1;
i<minPts_.size();
i++){
72 ss<<
"\t "<<minPts_[
i];
76 for(
size_t i=1;
i<qualityBitMasks_.size();
i++){
77 ss<<
"\t "<<qualityBitMasks_[
i];
80 ss<<
" MinN = "<<
minN_<<endl;
82 LogDebug(
"HLTMuonL1RegionalFilter")<<ss.str();
94 desc.
add<
int>(
"MinN",1);
97 std::vector<edm::ParameterSet>
defaults(3);
104 etaRange.push_back(-2.5);
105 etaRange.push_back(+2.5);
108 qualityBits.push_back(6);
109 qualityBits.push_back(7);
110 validator.add<std::vector<double> >(
"EtaRange",
etaRange);
111 validator.add<
double>(
"MinPt",
minPt);
112 validator.add<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
116 etaRange.push_back(-2.5);
117 etaRange.push_back(-1.6);
120 qualityBits.push_back(6);
121 qualityBits.push_back(7);
122 defaults[0].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
123 defaults[0].addParameter<
double>(
"MinPt",
minPt);
124 defaults[0].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
128 etaRange.push_back(-1.6);
129 etaRange.push_back(+1.6);
132 qualityBits.push_back(7);
133 defaults[1].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
134 defaults[1].addParameter<
double>(
"MinPt",
minPt);
135 defaults[1].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
139 etaRange.push_back(+1.6);
140 etaRange.push_back(+2.5);
143 qualityBits.push_back(6);
144 qualityBits.push_back(7);
146 defaults[2].addParameter<std::vector<double> >(
"EtaRange",
etaRange);
147 defaults[2].addParameter<
double>(
"MinPt",
minPt);
148 defaults[2].addParameter<std::vector<unsigned int> >(
"QualityBits",
qualityBits);
150 desc.
addVPSet(
"Cuts",validator,defaults);
152 descriptions.
add(
"hltMuonL1RegionalFilter", desc);
172 vector<L1MuonParticleRef> prevMuons;
177 for (
size_t i = 0;
i < allMuons->size();
i++) {
181 if(
find(prevMuons.begin(), prevMuons.end(),
muon) == prevMuons.end() )
continue;
184 float eta = muon->eta();
192 if(region == -1)
continue;
195 if(muon->pt() <
minPts_[region])
continue;
199 int quality = muon->gmtMuonCand().empty() ? 0 : (1 << muon->gmtMuonCand().quality());
218 ss<<
"L1mu#"<<
'\t'<<
"q*pt"<<
'\t'<<
'\t'<<
"eta"<<
'\t'<<
"phi"<<
'\t'<<
"quality"<<
'\t'<<
"isPrev"<<
'\t'<<
"isFired"<<endl;
219 ss<<
"---------------------------------------------------------------"<<endl;
221 vector<L1MuonParticleRef> firedMuons;
223 for(
size_t i=0;
i<allMuons->size();
i++){
225 int quality = mu->gmtMuonCand().empty() ? 0 : mu->gmtMuonCand().quality();
226 bool isPrev =
find(prevMuons.begin(), prevMuons.end(),
mu) != prevMuons.end();
227 bool isFired =
find(firedMuons.begin(), firedMuons.end(),
mu) != firedMuons.end();
228 ss<<
i<<
'\t'<<scientific<<mu->charge()*mu->pt()<<
fixed<<
'\t'<<mu->eta()<<
'\t'<<mu->phi()<<
'\t'<<quality<<
'\t'<<isPrev<<
'\t'<<isFired<<endl;
230 ss<<
"---------------------------------------------------------------"<<endl;
231 LogDebug(
"HLTMuonL1RegionalFilter")<<ss.str()<<
"Decision of filter is "<<accept<<
", number of muons passing = "<<filterproduct.
l1muonSize();
T getParameter(std::string const &) const
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
size_type l1muonSize() const
std::vector< int > qualityBitMasks_
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)
edm::EDGetTokenT< l1extra::L1MuonParticleCollection > candToken_
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define DEFINE_FWK_MODULE(type)
int minN_
required number of passing candidates to pass the filter
def defaults(locpath, dataType, var)
edm::InputTag candTag_
input tag identifying the product containing muons
std::vector< double > etaBoundaries_
the vector of eta region boundaries; note: # of boundaries = # of regions + 1
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
~HLTMuonL1RegionalFilter() override
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLTMuonL1RegionalFilter(const edm::ParameterSet &)
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > previousCandToken_
std::vector< double > minPts_
the vector of MinPt values, one for eta each region
edm::InputTag previousCandTag_
input tag identifying the product containing refs to muons passing the previous level ...