130 const std::vector<T> &
values,
138 using namespace reco;
145 deltaR_(pset.getParameter<double>(
"deltaR")),
149 max_Eta_L2(pset.getParameter<double> (
"MaxEta_L2")),
151 max_Dr_L2(pset.getParameter<double> (
"MaxDr_L2")),
152 max_Dz_L2(pset.getParameter<double> (
"MaxDz_L2")),
153 min_Pt_L2(pset.getParameter<double> (
"MinPt_L2")),
154 nsigma_Pt_L2(pset.getParameter<double> (
"NSigmaPt_L2")),
156 max_Eta_L3(pset.getParameter<double> (
"MaxEta_L3")),
158 max_Dr_L3(pset.getParameter<double> (
"MaxDr_L3")),
159 max_Dz_L3(pset.getParameter<double> (
"MaxDz_L3")),
160 min_Pt_L3(pset.getParameter<double> (
"MinPt_L3")),
161 nsigma_Pt_L3(pset.getParameter<double> (
"NSigmaPt_L3")),
173 metname =
"TriggerMatcherToHLTDebug";
175 produces<edm::ValueMap<int> > (
"propagatesToM2");
176 produces<edm::ValueMap<int> > (
"hasL1Particle");
177 produces<edm::ValueMap<int> > (
"hasL1Filtered");
178 produces<edm::ValueMap<int> > (
"hasL2Seed");
179 produces<edm::ValueMap<int> > (
"hasL2Muon");
180 produces<edm::ValueMap<int> > (
"hasL2MuonFiltered");
181 produces<edm::ValueMap<int> > (
"hasL3Seed");
182 produces<edm::ValueMap<int> > (
"hasL3Track");
183 produces<edm::ValueMap<int> > (
"hasL3Muon");
184 produces<edm::ValueMap<int> > (
"hasL3MuonFiltered");
186 produces<edm::ValueMap<reco::CandidatePtr> > (
"l1Candidate");
187 produces<edm::ValueMap<reco::CandidatePtr> > (
"l2Candidate");
188 produces<edm::ValueMap<reco::CandidatePtr> > (
"l3Candidate");
224 beamSpot = *recoBeamSpotHandle;
231 size_t nmu = muons->size();
232 std::vector<int> propagatesToM2(nmu), hasL1Particle(nmu), hasL1Filtered(nmu);
233 std::vector<int> hasL2Seed(nmu), hasL2Muon(nmu), hasL2MuonFiltered(nmu);
234 std::vector<int> hasL3Seed(nmu), hasL3Track(nmu), hasL3TrackFiltered(nmu), hasL3Muon(nmu), hasL3MuonFiltered(nmu);
235 std::vector<reco::CandidatePtr> l1ptr(nmu), l2ptr(nmu), l3ptr(nmu);
237 for (
size_t i = 0;
i < nmu; ++
i) {
242 if (!stateAtMB2.
isValid())
continue;
243 propagatesToM2[
i] = 1;
247 l1extra::L1MuonParticleCollection::const_iterator it;
248 vector<l1extra::L1MuonParticleRef>::const_iterator itMu3;
249 L2MuonTrajectorySeedCollection::const_iterator iSeed;
250 L3MuonTrajectorySeedCollection::const_iterator iSeedL3;
251 RecoChargedCandidateCollection::const_iterator iL2Muon;
252 reco::TrackCollection::const_iterator tktrackL3;
253 RecoChargedCandidateCollection::const_iterator iL3Muon;
256 for(it = L1Muons->begin(); it != L1Muons->end(); ++it) {
261 double L1phi =(*it).phi();
262 double L1eta =(*it).eta();
263 double L1pt =(*it).pt();
264 double dR=
deltaR(etaTk,phiTk,L1eta,L1phi);
269 if (!hasL1Particle[
i]) l1ptr[
i] = thisL1;
272 if ((quality <= 3) || (L1pt<7))
continue;
273 if (!hasL1Filtered[i]) l1ptr[
i] = thisL1;
276 if(!L2Seeds.
isValid())
continue;
278 for( iSeed = L2Seeds->begin(); iSeed != L2Seeds->end(); ++iSeed) {
281 if (l1FromSeed.
id() != L1Muons.
id())
throw cms::Exception(
"CorruptData") <<
"You're using a different L1 collection than the one used by L2 seeds.\n";
282 if (l1FromSeed.
key() != thisL1.
key())
continue;
283 if (!hasL2Seed[i]) l1ptr[
i] = thisL1;
286 if(!L2Muons.
isValid())
continue;
288 for( iL2Muon = L2Muons->begin(); iL2Muon != L2Muons->end(); ++iL2Muon) {
302 for(
size_t jjj=0; jjj<seeds.
size(); jjj++){
304 if(seeds[jjj]->l1Particle()!= l1FromSeed)
continue;
310 if (!hasL2Muon[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; }
315 double Eta_L2= L2Track.
eta();
316 double Pt_L2= L2Track.
pt();
318 double BSPos_L2 = L2Track.
dxy(beamSpot.
position());
319 double dz_L2 =L2Track.
dz();
320 double err0_L2 = L2Track.
error(0);
321 double abspar0_L2 = fabs(L2Track.
parameter(0));
322 double ptLx_L2 = Pt_L2;
323 if (abspar0_L2>0) ptLx_L2 +=
nsigma_Pt_L2*err0_L2/abspar0_L2*Pt_L2;
327 if (!passFilter)
continue;
328 if (!hasL2MuonFiltered[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; }
329 hasL2MuonFiltered[
i]++;
334 if (!L3Seeds.
isValid())
continue;
335 for (iSeedL3 = L3Seeds->begin(); iSeedL3!= L3Seeds->end(); ++iSeedL3){
337 TrackRef staTrack = iSeedL3->l2Track();
338 if (staTrack!=L2FilteredRef)
continue;
339 if (!hasL3Seed[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; }
342 if (!L3TkTracks.
isValid())
continue;
343 for (tktrackL3 = L3TkTracks->begin(); tktrackL3!= L3TkTracks->end(); ++tktrackL3){
346 TrackRef staTrack2 = l3seedRef->l2Track();
348 if (staTrack2!=L2FilteredRef)
continue;
349 if (!hasL3Track[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; }
352 if (!L3Muons.
isValid())
continue;
353 for (iL3Muon = L3Muons->begin(); iL3Muon != L3Muons->end(); ++iL3Muon) {
356 TrackRef staTrack3 = l3seedRef2->l2Track();
358 if (staTrack3!=L2FilteredRef)
continue;
361 if (!hasL3Muon[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; l3ptr[
i] = thisL3; }
365 double Eta_L3= L3Track.
eta();
366 double Pt_L3= L3Track.
pt();
368 double BSPos_L3 = L3Track.
dxy(beamSpot.
position());
369 double dz_L3 =L3Track.
dz();
370 double err0_L3 = L3Track.
error(0);
371 double abspar0_L3 = fabs(L3Track.
parameter(0));
372 double ptLx_L3 = Pt_L3;
374 if (abspar0_L3>0) ptLx_L3 +=
nsigma_Pt_L3*err0_L3/abspar0_L3*Pt_L3;
378 if (!hasL3MuonFiltered[i]) { l1ptr[
i] = thisL1; l2ptr[
i] = thisL2; l3ptr[
i] = thisL3; }
379 hasL3MuonFiltered[
i]++;
389 storeValueMap<int>(
event,
muons, propagatesToM2,
"propagatesToM2");
390 storeValueMap<int>(
event,
muons, hasL1Particle,
"hasL1Particle");
391 storeValueMap<int>(
event,
muons, hasL1Filtered,
"hasL1Filtered");
392 storeValueMap<int>(
event,
muons, hasL2Seed,
"hasL2Seed");
393 storeValueMap<int>(
event,
muons, hasL2Muon,
"hasL2Muon");
394 storeValueMap<int>(
event,
muons, hasL2MuonFiltered,
"hasL2MuonFiltered");
395 storeValueMap<int>(
event,
muons, hasL3Seed,
"hasL3Seed");
396 storeValueMap<int>(
event,
muons, hasL3Track,
"hasL3Track");
397 storeValueMap<int>(
event,
muons, hasL3Muon,
"hasL3Muon");
398 storeValueMap<int>(
event,
muons, hasL3MuonFiltered,
"hasL3MuonFiltered");
399 storeValueMap<reco::CandidatePtr>(
event,
muons, l1ptr,
"l1Candidate");
400 storeValueMap<reco::CandidatePtr>(
event,
muons, l2ptr,
"l2Candidate");
401 storeValueMap<reco::CandidatePtr>(
event,
muons, l3ptr,
"l3Candidate");
413 const std::vector<T> &
values,
415 using namespace edm;
using namespace std;
416 unique_ptr<ValueMap<T> > valMap(
new ValueMap<T>());
T getParameter(std::string const &) const
TrajectoryStateOnSurface extrapolate(const reco::Track &tk) const
Extrapolate reco::Track to the muon station 2, return an invalid TSOS if it fails.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
~TriggerMatcherToHLTDebug() override
Destructor.
#define DEFINE_FWK_MODULE(type)
void storeValueMap(edm::Event &iEvent, const edm::Handle< edm::View< reco::Muon > > &handle, const std::vector< T > &values, const std::string &label) const
Store extra information in a ValueMap.
edm::EDGetTokenT< l1extra::L1MuonParticleCollection > l1Token_
Geom::Phi< T > phi() const
void insert(const H &h, I begin, I end)
edm::EDGetTokenT< L3MuonTrajectorySeedCollection > theL3SeedsToken_
edm::EDGetTokenT< L2MuonTrajectorySeedCollection > theL2SeedsToken_
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > theL2MuonsToken_
GlobalPoint globalPosition() const
key_type key() const
Accessor for product key.
edm::AssociationMap< edm::OneToMany< std::vector< L2MuonTrajectorySeed >, std::vector< L2MuonTrajectorySeed > > > SeedMap
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > theL3MuonsToken_
ProductID id() const
Accessor for product ID.
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Propagate an object (usually a track) to the second muon station. Support for other muon stations wil...
double eta() const
pseudorapidity of momentum vector
TriggerMatcherToHLTDebug(const edm::ParameterSet &pset)
double pt() const
track transverse momentum
double error(int i) const
error on specified element
edm::EDGetTokenT< SeedMap > seedMapToken_
unsigned short numberOfValidHits() const
number of valid hits found
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double parameter(int i) const
i-th parameter ( i = 0, ... 4 )
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
double deltaR(double eta1, double eta2, double phi1, double phi2)
edm::EDGetTokenT< edm::View< reco::Muon > > tagToken_
unsigned int quality() const
get quality
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
void init(const edm::EventSetup &iSetup)
Call this method at the beginning of each run, to initialize geometry, magnetic field and propagators...
void beginRun(const edm::Run &run, const edm::EventSetup &eventSetup) override
void produce(edm::Event &event, const edm::EventSetup &eventSetup) override
edm::EDGetTokenT< reco::BeamSpot > beamspotToken_
edm::EDGetTokenT< reco::TrackCollection > theL3TkTracksToken_
size_type size() const
Size of the RefVector.
const Point & position() const
position
PropagateToMuon l1matcher_
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...