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");
TrajectoryStateOnSurface extrapolate(const reco::Track &tk) const
Extrapolate reco::Track to the muon station 2, return an invalid TSOS if it fails.
edm::EDGetTokenT< l1extra::L1MuonParticleCollection > l1Token_
Geom::Phi< T > phi() const
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::EDGetTokenT< reco::RecoChargedCandidateCollection > theL3MuonsToken_
ProductID id() const
Accessor for product ID.
double eta() const
pseudorapidity of momentum vector
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
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...