41 return new Muon( *
this );
48 for (
int iC = 0; iC < nAll; ++iC){
59 for( std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
60 chamberMatch !=
muMatches_.end(); chamberMatch++ )
62 if(chamberMatch->segmentMatches.empty())
continue;
68 for( std::vector<MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
69 segmentMatch != chamberMatch->segmentMatches.end(); segmentMatch++ )
90 if(segmentMatch->isMask(type)) {
106 for(
int it = 0; it < 8; ++it)
107 if (theStationMask & 1<<it)
115 unsigned int totMask(0);
116 unsigned int curMask(0);
117 for( std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
118 chamberMatch !=
muMatches_.end(); chamberMatch++ )
120 if(chamberMatch->segmentMatches.empty())
continue;
122 curMask = 1<<( (chamberMatch->station()-1)+4*(chamberMatch->detector()-1) );
124 if(!(totMask & curMask))
129 for( std::vector<MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
130 segmentMatch != chamberMatch->segmentMatches.end(); segmentMatch++ )
134 curMask = 1<<( (chamberMatch->station()-1)+4*(chamberMatch->detector()-1) );
136 if(!(totMask & curMask))
143 curMask = 1<<( (chamberMatch->station()-1)+4*(chamberMatch->detector()-1) );
145 if(!(totMask & curMask))
153 curMask = 1<<( (chamberMatch->station()-1)+4*(chamberMatch->detector()-1) );
155 if(!(totMask & curMask))
160 if(segmentMatch->isMask(type)) {
161 curMask = 1<<( (chamberMatch->station()-1)+4*(chamberMatch->detector()-1) );
163 if(!(totMask & curMask))
175 unsigned int totMask(0);
178 for(
int detectorIndex = 1; detectorIndex < 4; detectorIndex++ )
180 unsigned int curMask(0);
181 for( std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
182 chamberMatch !=
muMatches_.end(); chamberMatch++ )
184 if(!(chamberMatch->station()==
stationIndex && chamberMatch->detector()==detectorIndex))
continue;
186 float edgeX = chamberMatch->edgeX;
187 float edgeY = chamberMatch->edgeY;
188 if(edgeX<0 && fabs(edgeX)>fabs(distanceCut) &&
189 edgeY<0 && fabs(edgeY)>fabs(distanceCut))
194 if( ( fabs(edgeX) < fabs(distanceCut) && edgeY < fabs(distanceCut) ) ||
195 ( fabs(edgeY) < fabs(distanceCut) && edgeX < fabs(distanceCut) ) )
208 unsigned int totMask(0);
211 for(
int detectorIndex = 1; detectorIndex < 4; detectorIndex++ )
213 unsigned int curMask(0);
214 for( std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
215 chamberMatch !=
muMatches_.end(); chamberMatch++ )
217 if(!(chamberMatch->station()==
stationIndex && chamberMatch->detector()==detectorIndex))
continue;
219 float edgeX = chamberMatch->edgeX;
220 float edgeY = chamberMatch->edgeY;
221 float xErr = chamberMatch->xErr+0.000001;
222 float yErr = chamberMatch->yErr+0.000001;
223 if(edgeX<0 && fabs(edgeX/xErr)>fabs(sigmaCut) &&
224 edgeY<0 && fabs(edgeY/yErr)>fabs(sigmaCut))
229 if( ( fabs(edgeX/xErr) < fabs(sigmaCut) && edgeY/yErr < fabs(sigmaCut) ) ||
230 ( fabs(edgeY/yErr) < fabs(sigmaCut) && edgeX/xErr < fabs(sigmaCut) ) )
244 for( std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
245 chamberMatch !=
muMatches_.end(); chamberMatch++ )
247 if(chamberMatch->segmentMatches.empty())
continue;
248 if(!(chamberMatch->station()==station && chamberMatch->detector()==muonSubdetId))
continue;
251 segments += chamberMatch->segmentMatches.size();
255 for( std::vector<MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin();
256 segmentMatch != chamberMatch->segmentMatches.end(); segmentMatch++ )
277 if(segmentMatch->isMask(type)) {
289 std::vector<const MuonChamberMatch*>
chambers;
290 for(std::vector<MuonChamberMatch>::const_iterator chamberMatch =
muMatches_.begin();
291 chamberMatch !=
muMatches_.end(); chamberMatch++)
292 if(chamberMatch->station()==station && chamberMatch->detector()==muonSubdetId)
293 chambers.push_back(&(*chamberMatch));
297 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*>
Muon::pair(
const std::vector<const MuonChamberMatch*> &
chambers,
302 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair(m,s);
304 if(chambers.empty())
return chamberSegmentPair;
305 for( std::vector<const MuonChamberMatch*>::const_iterator chamberMatch = chambers.begin();
306 chamberMatch != chambers.end(); chamberMatch++ )
308 if((*chamberMatch)->segmentMatches.empty())
continue;
310 return std::make_pair(*chamberMatch, &((*chamberMatch)->segmentMatches.front()));
312 for( std::vector<MuonSegmentMatch>::const_iterator segmentMatch = (*chamberMatch)->segmentMatches.begin();
313 segmentMatch != (*chamberMatch)->segmentMatches.end(); segmentMatch++ )
317 return std::make_pair(*chamberMatch, &(*segmentMatch));
321 return std::make_pair(*chamberMatch, &(*segmentMatch));
326 return std::make_pair(*chamberMatch, &(*segmentMatch));
328 if(segmentMatch->isMask(type))
329 return std::make_pair(*chamberMatch, &(*segmentMatch));
333 return chamberSegmentPair;
338 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
339 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
340 if(! chamberSegmentPair.second->hasPhi())
return 999999;
341 return chamberSegmentPair.first->x-chamberSegmentPair.second->x;
347 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
348 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
349 if(! chamberSegmentPair.second->hasZed())
return 999999;
350 return chamberSegmentPair.first->y-chamberSegmentPair.second->y;
355 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
356 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
357 if(! chamberSegmentPair.second->hasPhi())
return 999999;
358 return chamberSegmentPair.first->dXdZ-chamberSegmentPair.second->dXdZ;
364 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
365 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
366 if(! chamberSegmentPair.second->hasZed())
return 999999;
367 return chamberSegmentPair.first->dYdZ-chamberSegmentPair.second->dYdZ;
372 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
373 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
374 if(! chamberSegmentPair.second->hasPhi())
return 999999;
375 if(includeSegmentError)
376 return (chamberSegmentPair.first->x-chamberSegmentPair.second->x)/
sqrt(
pow(chamberSegmentPair.first->xErr,2)+
pow(chamberSegmentPair.second->xErr,2));
377 return (chamberSegmentPair.first->x-chamberSegmentPair.second->x)/chamberSegmentPair.first->xErr;
383 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
384 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
385 if(! chamberSegmentPair.second->hasZed())
return 999999;
386 if(includeSegmentError)
387 return (chamberSegmentPair.first->y-chamberSegmentPair.second->y)/
sqrt(
pow(chamberSegmentPair.first->yErr,2)+
pow(chamberSegmentPair.second->yErr,2));
388 return (chamberSegmentPair.first->y-chamberSegmentPair.second->y)/chamberSegmentPair.first->yErr;
393 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
394 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
395 if(! chamberSegmentPair.second->hasPhi())
return 999999;
396 if(includeSegmentError)
397 return (chamberSegmentPair.first->dXdZ-chamberSegmentPair.second->dXdZ)/
sqrt(
pow(chamberSegmentPair.first->dXdZErr,2)+
pow(chamberSegmentPair.second->dXdZErr,2));
398 return (chamberSegmentPair.first->dXdZ-chamberSegmentPair.second->dXdZ)/chamberSegmentPair.first->dXdZErr;
404 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
405 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
406 if(! chamberSegmentPair.second->hasZed())
return 999999;
407 if(includeSegmentError)
408 return (chamberSegmentPair.first->dYdZ-chamberSegmentPair.second->dYdZ)/
sqrt(
pow(chamberSegmentPair.first->dYdZErr,2)+
pow(chamberSegmentPair.second->dYdZErr,2));
409 return (chamberSegmentPair.first->dYdZ-chamberSegmentPair.second->dYdZ)/chamberSegmentPair.first->dYdZErr;
414 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
415 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
416 if(! chamberSegmentPair.second->hasPhi())
return 999999;
417 return chamberSegmentPair.second->x;
423 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
424 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
425 if(! chamberSegmentPair.second->hasZed())
return 999999;
426 return chamberSegmentPair.second->y;
431 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
432 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
433 if(! chamberSegmentPair.second->hasPhi())
return 999999;
434 return chamberSegmentPair.second->dXdZ;
440 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
441 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
442 if(! chamberSegmentPair.second->hasZed())
return 999999;
443 return chamberSegmentPair.second->dYdZ;
448 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
449 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
450 if(! chamberSegmentPair.second->hasPhi())
return 999999;
451 return chamberSegmentPair.second->xErr;
457 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
458 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
459 if(! chamberSegmentPair.second->hasZed())
return 999999;
460 return chamberSegmentPair.second->yErr;
465 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
466 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
467 if(! chamberSegmentPair.second->hasPhi())
return 999999;
468 return chamberSegmentPair.second->dXdZErr;
474 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(
chambers(station,muonSubdetId),type);
475 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0)
return 999999;
476 if(! chamberSegmentPair.second->hasZed())
return 999999;
477 return chamberSegmentPair.second->dYdZErr;
482 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
483 if(muonChambers.empty())
return 999999;
485 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
486 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
488 float supVar = 999999;
489 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
490 muonChamber != muonChambers.end(); ++muonChamber) {
491 float currDist = (*muonChamber)->dist();
494 supVar = (*muonChamber)->edgeX;
498 }
else return chamberSegmentPair.first->edgeX;
503 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
504 if(muonChambers.empty())
return 999999;
506 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
507 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
509 float supVar = 999999;
510 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
511 muonChamber != muonChambers.end(); ++muonChamber) {
512 float currDist = (*muonChamber)->dist();
515 supVar = (*muonChamber)->edgeY;
519 }
else return chamberSegmentPair.first->edgeY;
524 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
525 if(muonChambers.empty())
return 999999;
527 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
528 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
530 float supVar = 999999;
531 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
532 muonChamber != muonChambers.end(); ++muonChamber) {
533 float currDist = (*muonChamber)->dist();
536 supVar = (*muonChamber)->x;
540 }
else return chamberSegmentPair.first->x;
545 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
546 if(muonChambers.empty())
return 999999;
548 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
549 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
551 float supVar = 999999;
552 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
553 muonChamber != muonChambers.end(); ++muonChamber) {
554 float currDist = (*muonChamber)->dist();
557 supVar = (*muonChamber)->y;
561 }
else return chamberSegmentPair.first->y;
566 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
567 if(muonChambers.empty())
return 999999;
569 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
570 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
572 float supVar = 999999;
573 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
574 muonChamber != muonChambers.end(); ++muonChamber) {
575 float currDist = (*muonChamber)->dist();
578 supVar = (*muonChamber)->dXdZ;
582 }
else return chamberSegmentPair.first->dXdZ;
587 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
588 if(muonChambers.empty())
return 999999;
590 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
591 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
593 float supVar = 999999;
594 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
595 muonChamber != muonChambers.end(); ++muonChamber) {
596 float currDist = (*muonChamber)->dist();
599 supVar = (*muonChamber)->dYdZ;
603 }
else return chamberSegmentPair.first->dYdZ;
608 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
609 if(muonChambers.empty())
return 999999;
611 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
612 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
614 float supVar = 999999;
615 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
616 muonChamber != muonChambers.end(); ++muonChamber) {
617 float currDist = (*muonChamber)->dist();
620 supVar = (*muonChamber)->xErr;
624 }
else return chamberSegmentPair.first->xErr;
629 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
630 if(muonChambers.empty())
return 999999;
632 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
633 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
635 float supVar = 999999;
636 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
637 muonChamber != muonChambers.end(); ++muonChamber) {
638 float currDist = (*muonChamber)->dist();
641 supVar = (*muonChamber)->yErr;
645 }
else return chamberSegmentPair.first->yErr;
650 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
651 if(muonChambers.empty())
return 999999;
653 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
654 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
656 float supVar = 999999;
657 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
658 muonChamber != muonChambers.end(); ++muonChamber) {
659 float currDist = (*muonChamber)->dist();
662 supVar = (*muonChamber)->dXdZErr;
666 }
else return chamberSegmentPair.first->dXdZErr;
671 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
672 if(muonChambers.empty())
return 999999;
674 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
675 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
677 float supVar = 999999;
678 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
679 muonChamber != muonChambers.end(); ++muonChamber) {
680 float currDist = (*muonChamber)->dist();
683 supVar = (*muonChamber)->dYdZErr;
687 }
else return chamberSegmentPair.first->dYdZErr;
692 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
693 if(muonChambers.empty())
return 999999;
695 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
696 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
698 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
699 muonChamber != muonChambers.end(); ++muonChamber) {
700 float currDist = (*muonChamber)->dist();
701 if(currDist<dist) dist = currDist;
704 }
else return chamberSegmentPair.first->dist();
709 const std::vector<const MuonChamberMatch*> muonChambers =
chambers(station, muonSubdetId);
710 if(muonChambers.empty())
return 999999;
712 std::pair<const MuonChamberMatch*,const MuonSegmentMatch*> chamberSegmentPair =
pair(muonChambers,type);
713 if(chamberSegmentPair.first==0 || chamberSegmentPair.second==0) {
715 float supVar = 999999;
716 for(std::vector<const MuonChamberMatch*>::const_iterator muonChamber = muonChambers.begin();
717 muonChamber != muonChambers.end(); ++muonChamber) {
718 float currDist = (*muonChamber)->dist();
721 supVar = (*muonChamber)->distErr();
725 }
else return chamberSegmentPair.first->distErr();
float segmentXErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
int Charge
electric charge type
bool checkOverlap(const R &r1, const R &r2) const
check if two components overlap
reco::Candidate::LorentzVector pfP4_
float dDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
MuonIsolation isolationR05_
float trackDistErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
const std::vector< const MuonChamberMatch * > chambers(int station, int muonSubdetId) const
get vector of muon chambers for given station and detector
TrackRef muonTrack(const MuonTrackType &) const
float segmentDxDzErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual TrackRef innerTrack() const
float caloCompatibility_
muon hypothesis compatibility with observer calorimeter energy
unsigned int type_
muon type mask
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
virtual TrackRef track() const
reference to a Track
MuonPFIsolation pfIsolationR04_
static char chambers[TOTALCHAMBERS][20]
void setIsolation(const MuonIsolation &isoR03, const MuonIsolation &isoR05)
unsigned int stationGapMaskPull(float sigmaCut=3.) const
same as above for given number of sigmas
MuonPFIsolation pfIsolationR03_
PF Isolation information for two cones with dR=0.3 and dR=0.4.
float dY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual reco::TrackRef standAloneMuon() const
reference to a stand-alone muon Track
virtual TrackRef tpfmsTrack() const
static const unsigned int BestInStationByDR
float trackX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float trackEdgeX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
virtual void setStandAlone(const TrackRef &t)
virtual reco::TrackRef track() const
reference to a Track
bool isAValidMuonTrack(const MuonTrackType &type) const
bool isNonnull() const
Checks for non-null.
MuonTrackRefMap refittedTrackMap_
reference to the Global Track refitted with dedicated TeV reconstructors
std::pair< const MuonChamberMatch *, const MuonSegmentMatch * > pair(const std::vector< const MuonChamberMatch * > &, ArbitrationType type=SegmentAndTrackArbitration) const
get pointers to best segment and corresponding chamber in vector of chambers
float segmentDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
TrackRef innerTrack_
reference to Track reconstructed in the tracker only
ArbitrationType
define arbitration schemes
float trackY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float segmentY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float pullDxDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
MuonTrackType bestTrackType_
reference to the Track chosen to assign the momentum value to the muon
virtual TrackRef pickyTrack() const
static const unsigned int BestInChamberByDR
unsigned int stationMask(ArbitrationType type=SegmentAndTrackArbitration) const
float trackXErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
void setMuonTrack(const MuonTrackType &, const TrackRef &)
float trackDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float dDxDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float pullY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
float segmentX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
static const unsigned int BelongsToTrackByCleaning
virtual void setTrack(const TrackRef &t)
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
Muon * clone() const
create a clone
float trackDxDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float trackDyDzErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
int numberOfSegments(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
get number of segments
virtual TrackRef combinedMuon() const
reference to a stand-alone muon Track
int numberOfChambers() const
int numberOfChambersNoRPC() const
number of chambers not including RPC matches (MuonChamberMatches include RPC rolls) ...
static const unsigned int PFMuon
MuonIsolation isolationR03_
Isolation information for two cones with dR=0.3 and dR=0.5.
std::vector< MuonChamberMatch > & matches()
get muon matching information
float trackDxDzErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
math::XYZTLorentzVector LorentzVector
Lorentz vector.
TrackRef outerTrack_
reference to Track reconstructed in the muon detector only
virtual TrackRef dytTrack() const
std::vector< MuonChamberMatch > muMatches_
Information on matching between tracks and segments.
float trackDist(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
static const unsigned int BelongsToTrackByDR
float trackEdgeY(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float dX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float segmentDxDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
float trackYErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
int numberOfMatchedStations(ArbitrationType type=SegmentAndTrackArbitration) const
virtual bool overlap(const Candidate &) const
check overlap with another candidate
unsigned int type() const
virtual void setCombined(const TrackRef &t)
math::XYZPoint Point
point in the space
TrackRef globalTrack_
reference to Track reconstructed in both tracked and muon detector
virtual void setPFP4(const reco::Candidate::LorentzVector &p4_)
float segmentYErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
MuonTrackType
map for Global Muon refitters
float segmentDyDzErr(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration) const
void setPFIsolation(const MuonPFIsolation &isoR03, const MuonPFIsolation &isoR04)
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
unsigned int stationGapMaskDistance(float distanceCut=10.) const
Power< A, B >::type pow(const A &a, const B &b)
float pullDyDz(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
TrackRef muonTrackFromMap(const MuonTrackType &type) const
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
float pullX(int station, int muonSubdetId, ArbitrationType type=SegmentAndTrackArbitration, bool includeSegmentError=true) const
virtual reco::TrackRef combinedMuon() const
reference to a stand-alone muon Track
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track