39 #include <boost/regex.hpp>
65 muIsoExtractorCalo_(0),muIsoExtractorTrack_(0),muIsoExtractorJet_(0)
67 produces<reco::MuonCollection>();
68 produces<reco::CaloMuonCollection>();
69 produces<reco::MuonTimeExtraMap>(
"combined");
70 produces<reco::MuonTimeExtraMap>(
"dt");
71 produces<reco::MuonTimeExtraMap>(
"csc");
92 if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.
getParameter<
bool>(
"fillTrackerKink");
107 if (fillCaloCompatibility_){
127 if (fillIsolation_ && writeIsoDeposits_){
143 throw cms::Exception(
"ConfigurationError") <<
"Number of input collection labels is different from number of types. " <<
144 "For each collection label there should be exactly one collection type specified.";
146 throw cms::Exception(
"ConfigurationError") <<
"Number of input collections should be from 1 to 7.";
150 <<
"========================================================================\n"
151 <<
"Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
152 <<
"========================================================================\n";
153 if (fillGlobalTrackQuality_){
157 if (fillTrackerKink_) {
258 LogTrace(
"MuonIdentification") <<
"Creating a muon from a track " << track.
get()->pt() <<
259 " Pt (GeV), eta: " << track.
get()->eta();
263 aMuon.setBestTrack(type);
264 aMuon.setTunePBestTrack(type);
283 LogTrace(
"MuonIdentification") <<
"Creating a muon from a link to tracks object";
289 bool useSigmaSwitch =
false;
297 if (tpfmsRef.
isNull() && pickyRef.isNull()){
298 edm::LogWarning(
"MakeMuonWithTEV")<<
"Failed to get TEV refits, fall back to sigma switch.";
299 useSigmaSwitch =
true;
302 useSigmaSwitch =
true;
314 aMuon =
makeMuon(*chosenTrack.first);
343 LogTrace(
"MuonIdentification") <<
"Skipped low momentum track (Pt,P): " << track.
pt() <<
344 ", " << track.
p() <<
" GeV";
350 LogTrace(
"MuonIdentification") <<
"Skipped track with large pseudo rapidity (Eta: " << track.
eta() <<
" )";
358 switch (
id.det() ) {
360 switch (
id.subdetId() ) {
364 return detId.
rawId();
385 int numberOfCommonDetIds = 0;
388 track.
extra()->recHits().
isNull() )
return numberOfCommonDetIds;
389 const std::vector<reco::MuonChamberMatch>& matches( muon.
matches() );
390 for ( std::vector<reco::MuonChamberMatch>::const_iterator
match = matches.begin();
393 if (
match->segmentMatches.empty() )
continue;
394 bool foundCommonDetId =
false;
404 foundCommonDetId =
true;
408 if ( foundCommonDetId ) {
409 numberOfCommonDetIds++;
413 return numberOfCommonDetIds;
429 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits()) > 10 ){
436 if ( goodMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() <
437 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() )
return false;
449 init(iEvent, iSetup);
475 outputMuons->push_back(*
muon);
480 if ( goodmuons.size()>1 ){
495 goodmuons[
j] =
false;
497 goodmuons[
i] =
false;
503 if ( !goodmuons[
i] )
continue;
506 if ( !goodmuons[
j] )
continue;
513 goodmuons[
j] =
false;
515 goodmuons[
i] =
false;
521 if ( !goodmuons[
i] )
continue;
526 for ( reco::MuonCollection::const_iterator
muon = outputMuons->begin();
527 muon != outputMuons->end(); ++
muon )
533 outputMuons->push_back(
makeMuon( *links ) );
541 LogTrace(
"MuonIdentification") <<
"Creating tracker muons";
546 bool splitTrack =
false;
549 std::vector<TrackDetectorAssociator::Direction>
directions;
556 for ( std::vector<TrackDetectorAssociator::Direction>::const_iterator direction = directions.begin();
557 direction != directions.end(); ++direction )
563 fillMuonId(iEvent, iSetup, trackerMuon, *direction);
578 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
579 muon != outputMuons->end(); ++
muon )
591 LogTrace(
"MuonIdentification") <<
"Found a corresponding global muon. Set energy, matches and move on";
596 if ( goodTrackerMuon ){
597 outputMuons->push_back( trackerMuon );
599 LogTrace(
"MuonIdentification") <<
"track failed minimal number of muon matches requirement";
602 caloMuons->push_back( caloMuon );
611 LogTrace(
"MuonIdentification") <<
"Looking for new muons among stand alone muon tracks";
616 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
617 muon != outputMuons->end(); ++
muon )
619 if ( !
muon->standAloneMuon().isNull() ) {
634 LogTrace(
"MuonIdentification") <<
"Found associated tracker muon. Set a reference and move on";
643 LogTrace(
"MuonIdentification") <<
"No associated stand alone track is found. Making a muon";
644 outputMuons->push_back(
makeMuon(iEvent, iSetup,
651 LogTrace(
"MuonIdentification") <<
"Dress up muons if it's necessary";
653 int nMuons=outputMuons->size();
655 std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
656 std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
657 std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
658 std::vector<reco::IsoDeposit> trackDepColl(nMuons);
659 std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
660 std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
661 std::vector<reco::IsoDeposit> hoDepColl(nMuons);
662 std::vector<reco::IsoDeposit> jetDepColl(nMuons);
666 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
muon != outputMuons->end(); ++
muon )
675 if (
muon->isStandAloneMuon() ) {
681 LogTrace(
"MuonIdentification") <<
"THIS SHOULD NEVER HAPPEN";
702 trackDepColl[i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
719 muon->setTime( muonTime);
720 dtTimeColl[
i] = dtTime;
721 cscTimeColl[
i] = cscTime;
722 combinedTimeColl[
i] = combinedTime;
728 LogTrace(
"MuonIdentification") <<
"number of muons produced: " << outputMuons->size();
734 filler.
insert(muonHandle, combinedTimeColl.begin(), combinedTimeColl.end());
736 fillerDT.
insert(muonHandle, dtTimeColl.begin(), dtTimeColl.end());
738 fillerCSC.
insert(muonHandle, cscTimeColl.begin(), cscTimeColl.end());
741 iEvent.
put(muonTimeMap,
"combined");
742 iEvent.
put(muonTimeMapDT,
"dt");
743 iEvent.
put(muonTimeMapCSC,
"csc");
746 trackDepFiller.
insert(muonHandle, trackDepColl.begin(), trackDepColl.end());
747 trackDepFiller.
fill();
749 ecalDepFiller.
insert(muonHandle, ecalDepColl.begin(), ecalDepColl.end());
750 ecalDepFiller.
fill();
752 hcalDepFiller.
insert(muonHandle, hcalDepColl.begin(), hcalDepColl.end());
753 hcalDepFiller.
fill();
755 hoDepFiller.
insert(muonHandle, hoDepColl.begin(), hoDepColl.end());
758 jetDepFiller.
insert(muonHandle, jetDepColl.begin(), jetDepColl.end());
763 iEvent.
put(caloMuons);
771 muon.
pt()<5 && fabs(muon.
eta())<1.5 &&
780 muon.
pt()<5 && fabs(muon.
eta())<1.5 &&
798 throw cms::Exception(
"FatalError") <<
"Failed to fill muon id information for a muon with undefined references to tracks";
820 for(std::vector<const EcalRecHit*>::const_iterator
hit=info.
ecalRecHits.begin();
822 if ((*hit)->id() != emMaxId)
continue;
823 muonEnergy.
emMax = (*hit)->energy();
827 for(std::vector<const HBHERecHit*>::const_iterator
hit=info.
hcalRecHits.begin();
829 if ((*hit)->id() != hadMaxId)
continue;
830 muonEnergy.
hadMax = (*hit)->energy();
841 std::vector<reco::MuonChamberMatch> muonChamberMatches;
842 unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
843 for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.
chambers.begin();
844 chamber!=info.
chambers.end(); chamber++ )
846 if (chamber->id.subdetId() == 3 && rpcRecHits.
isValid() )
continue;
849 LocalError localError = chamber->tState.localError().positionError();
850 matchedChamber.
x = chamber->tState.localPosition().x();
851 matchedChamber.
y = chamber->tState.localPosition().y();
852 matchedChamber.
xErr =
sqrt( localError.
xx() );
853 matchedChamber.
yErr =
sqrt( localError.
yy() );
855 matchedChamber.
dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
856 matchedChamber.
dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
859 matchedChamber.
dXdZErr = trajectoryCovMatrix(1,1)>0?
sqrt(trajectoryCovMatrix(1,1)):0;
860 matchedChamber.
dYdZErr = trajectoryCovMatrix(2,2)>0?
sqrt(trajectoryCovMatrix(2,2)):0;
862 matchedChamber.
edgeX = chamber->localDistanceX;
863 matchedChamber.
edgeY = chamber->localDistanceY;
865 matchedChamber.
id = chamber->id;
866 if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
869 for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
870 segment != chamber->segments.end(); segment++ )
873 matchedSegment.
x = segment->segmentLocalPosition.x();
874 matchedSegment.
y = segment->segmentLocalPosition.y();
875 matchedSegment.
dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
876 matchedSegment.
dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
877 matchedSegment.
xErr = segment->segmentLocalErrorXX>0?
sqrt(segment->segmentLocalErrorXX):0;
878 matchedSegment.
yErr = segment->segmentLocalErrorYY>0?
sqrt(segment->segmentLocalErrorYY):0;
879 matchedSegment.
dXdZErr = segment->segmentLocalErrorDxDz>0?
sqrt(segment->segmentLocalErrorDxDz):0;
880 matchedSegment.
dYdZErr = segment->segmentLocalErrorDyDz>0?
sqrt(segment->segmentLocalErrorDyDz):0;
881 matchedSegment.
t0 = segment->t0;
882 matchedSegment.
mask = 0;
885 matchedSegment.
hasZed_ = segment->hasZed;
886 matchedSegment.
hasPhi_ = segment->hasPhi;
888 bool matchedX =
false;
889 bool matchedY =
false;
890 LogTrace(
"MuonIdentification") <<
" matching local x, segment x: " << matchedSegment.
x <<
891 ", chamber x: " << matchedChamber.
x <<
", max: " <<
maxAbsDx_;
892 LogTrace(
"MuonIdentification") <<
" matching local y, segment y: " << matchedSegment.
y <<
893 ", chamber y: " << matchedChamber.
y <<
", max: " <<
maxAbsDy_;
894 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 )
895 LogTrace(
"MuonIdentification") <<
" xpull: " <<
896 fabs(matchedSegment.
x - matchedChamber.
x)/
sqrt(
pow(matchedSegment.
xErr,2) +
pow(matchedChamber.
xErr,2));
897 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 )
898 LogTrace(
"MuonIdentification") <<
" ypull: " <<
899 fabs(matchedSegment.
y - matchedChamber.
y)/
sqrt(
pow(matchedSegment.
yErr,2) +
pow(matchedChamber.
yErr,2));
901 if (fabs(matchedSegment.
x - matchedChamber.
x) <
maxAbsDx_) matchedX =
true;
902 if (fabs(matchedSegment.
y - matchedChamber.
y) <
maxAbsDy_) matchedY =
true;
903 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 &&
905 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 &&
907 if (matchedX && matchedY) matchedChamber.
segmentMatches.push_back(matchedSegment);
909 muonChamberMatches.push_back(matchedChamber);
916 for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.
chambers.begin();
917 chamber!=info.
chambers.end(); chamber++ )
920 if ( chamber->id.subdetId() != 3 )
continue;
924 LocalError localError = chamber->tState.localError().positionError();
925 matchedChamber.
x = chamber->tState.localPosition().x();
926 matchedChamber.
y = chamber->tState.localPosition().y();
927 matchedChamber.
xErr =
sqrt( localError.
xx() );
928 matchedChamber.
yErr =
sqrt( localError.
yy() );
930 matchedChamber.
dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
931 matchedChamber.
dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
934 matchedChamber.
dXdZErr = trajectoryCovMatrix(1,1)>0?
sqrt(trajectoryCovMatrix(1,1)):0;
935 matchedChamber.
dYdZErr = trajectoryCovMatrix(2,2)>0?
sqrt(trajectoryCovMatrix(2,2)):0;
937 matchedChamber.
edgeX = chamber->localDistanceX;
938 matchedChamber.
edgeY = chamber->localDistanceY;
940 matchedChamber.
id = chamber->id;
943 rpcRecHit != rpcRecHits->end(); ++rpcRecHit )
947 if ( rpcRecHit->rawId() != chamber->id.rawId() )
continue;
949 rpcHitMatch.
x = rpcRecHit->localPosition().x();
950 rpcHitMatch.
mask = 0;
951 rpcHitMatch.
bx = rpcRecHit->BunchX();
953 const double AbsDx = fabs(rpcRecHit->localPosition().x()-chamber->tState.localPosition().x());
954 if( AbsDx <= 20
or AbsDx/
sqrt(localError.
xx()) <= 4 ) matchedChamber.
rpcMatches.push_back(rpcHitMatch);
957 muonChamberMatches.push_back(matchedChamber);
963 LogTrace(
"MuonIdentification") <<
"number of muon chambers: " << aMuon.
matches().size() <<
"\n"
964 <<
"number of chambers with segments according to the associator requirements: " <<
965 nubmerOfMatchesAccordingToTrackAssociator;
966 LogTrace(
"MuonIdentification") <<
"number of segment matches with the producer requirements: " <<
977 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs;
978 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs;
979 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs;
982 for(
unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
985 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter1 = pOutputMuons->at(muonIndex1).matches().begin();
986 chamberIter1 != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter1 )
988 if(chamberIter1->segmentMatches.empty())
continue;
989 chamberPairs.clear();
992 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter1 = chamberIter1->segmentMatches.begin();
993 segmentIter1 != chamberIter1->segmentMatches.end(); ++segmentIter1 )
995 chamberPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
996 if(!segmentIter1->isMask())
998 arbitrationPairs.clear();
999 arbitrationPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
1005 if (pOutputMuons->at(muonIndex1).isTrackerMuon()) {
1007 for(
unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
1010 if (! pOutputMuons->at(muonIndex2).isTrackerMuon())
continue;
1012 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter2 = pOutputMuons->at(muonIndex2).matches().begin();
1013 chamberIter2 != pOutputMuons->at(muonIndex2).matches().end(); ++chamberIter2 )
1016 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter2->segmentMatches.begin();
1017 segmentIter2 != chamberIter2->segmentMatches.end(); ++segmentIter2 )
1019 if(segmentIter2->isMask())
continue;
1020 if(fabs(segmentIter2->x - segmentIter1->x ) < 1E-3 &&
1021 fabs(segmentIter2->y - segmentIter1->y ) < 1E-3 &&
1022 fabs(segmentIter2->dXdZ - segmentIter1->dXdZ ) < 1E-3 &&
1023 fabs(segmentIter2->dYdZ - segmentIter1->dYdZ ) < 1E-3 &&
1024 fabs(segmentIter2->xErr - segmentIter1->xErr ) < 1E-3 &&
1025 fabs(segmentIter2->yErr - segmentIter1->yErr ) < 1E-3 &&
1026 fabs(segmentIter2->dXdZErr - segmentIter1->dXdZErr) < 1E-3 &&
1027 fabs(segmentIter2->dYdZErr - segmentIter1->dYdZErr) < 1E-3)
1028 arbitrationPairs.push_back(std::make_pair(&(*chamberIter2), &(*segmentIter2)));
1035 if(arbitrationPairs.empty())
continue;
1036 if(arbitrationPairs.size()==1) {
1051 for(
unsigned int it = 0; it < arbitrationPairs.size(); ++it )
1059 if(cscid.
ring() == 4)
1060 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter1->segmentMatches.begin();
1061 segmentIter2 != chamberIter1->segmentMatches.end(); ++segmentIter2 ) {
1062 if( segmentIter1->cscSegmentRef.isNonnull() && segmentIter2->cscSegmentRef.isNonnull() )
1064 (segmentIter2->mask & 0x1e0000) &&
1065 (segmentIter1->mask & 0x1e0000) )
1074 if(chamberPairs.empty())
continue;
1075 if(chamberPairs.size()==1) {
1094 for(
int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
1096 stationPairs.clear();
1099 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter = pOutputMuons->at(muonIndex1).matches().begin();
1100 chamberIter != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter )
1102 if(!(chamberIter->station()==
stationIndex && chamberIter->detector()==detectorIndex))
continue;
1103 if(chamberIter->segmentMatches.empty())
continue;
1105 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter = chamberIter->segmentMatches.begin();
1106 segmentIter != chamberIter->segmentMatches.end(); ++segmentIter )
1107 stationPairs.push_back(std::make_pair(&(*chamberIter), &(*segmentIter)));
1110 if(stationPairs.empty())
continue;
1111 if(stationPairs.size()==1) {
1150 throw cms::Exception(
"FatalError") <<
"Failed to compute muon isolation information for a muon with undefined references to tracks";
1158 if(caloDeps.size()!=3) {
1159 LogTrace(
"MuonIdentification") <<
"Failed to fill vector of calorimeter isolation deposits!";
1203 double energy =
sqrt(track.
p() * track.
p() + 0.011163691);
1216 if ( muonId.
sector() <= 12 )
1218 if ( muonId.
sector() == 13 ) phi = 3/6.*
M_PI;
1219 if ( muonId.
sector() == 14 ) phi = 9/6.*
M_PI;
1233 if ( muon.
matches().empty() ){
1236 return muon.
innerTrack()->outerPosition().phi();
1271 if (trackBAD || staBAD || glbBAD )
1273 edm::LogWarning(
"muonIDbadLinks") <<
"Global muon links to constituent tracks are invalid: trkBad "
1274 <<trackBAD <<
" standaloneBad "<<staBAD<<
" globalBad "<<glbBAD
1275 <<
". There should be no such object. Muon is skipped.";
std::string hoDepositName_
double p() const
momentum vector magnitude
T getParameter(std::string const &) const
static const unsigned int BelongsToTrackByME1aClean
std::string jetDepositName_
double candEnergy() const
Get energy or pT attached to cand trajectory.
bool isGoodRPCMuon(const reco::Muon &muon)
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
static const unsigned int GlobalMuon
void fillMuonIsolation(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon, reco::IsoDeposit &trackDep, reco::IsoDeposit &ecalDep, reco::IsoDeposit &hcalDep, reco::IsoDeposit &hoDep, reco::IsoDeposit &jetDep)
static void truthMatchMuon(const edm::Event &iEvent, const edm::EventSetup &iSetup, reco::Muon &aMuon)
DTRecSegment4DRef dtSegmentRef
reco::TrackRef trackerTrack() const
get the tracker's track which match with the stand alone muon tracks
void runMesh(std::vector< reco::Muon > *p)
static bool crossedIP(const reco::Track &track)
float sumPt
sum-pt of tracks
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
void setType(unsigned int type)
TrackDetectorAssociator trackAssociator_
CSCSegmentRef cscSegmentRef
const TrackExtraRef & extra() const
reference to "extra" object
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
static const unsigned int Arbitrated
segment mask flags
void fillMuonId(edm::Event &, const edm::EventSetup &, reco::Muon &, TrackDetectorAssociator::Direction direction=TrackDetectorAssociator::InsideOut)
reco::isodeposit::IsoDepositExtractor * muIsoExtractorCalo_
virtual TrackRef innerTrack() const
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
bool isTrackerMuon() const
int overlap(const reco::Muon &muon, const reco::Track &track)
reco::TrackRef standAloneTrack() const
get the track built with the muon spectrometer alone
bool fillCaloCompatibility_
std::vector< const EcalRecHit * > ecalRecHits
hits in the cone
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
std::vector< DetId > crossedEcalIds
std::string trackDepositName_
void insert(const H &h, I begin, I end)
int numberOfMatchedRPCLayers(ArbitrationType type=RPCHitAndTrackArbitration) const
double phiOfMuonIneteractionRegion(const reco::Muon &muon) const
std::vector< CaloMuon > CaloMuonCollection
collection of Muon objects
DetId findMaxDeposition(EnergyType)
Find detector elements with highest energy deposition.
virtual void produce(edm::Event &, const edm::EventSetup &) override
float hadVetoEt
hcal sum-et in the veto region in r-phi
virtual TrackRef track() const
reference to a Track
bool isGlobalMuon() const
float emS9
energy deposited in 3x3 ECAL crystal shape around central crystal
std::vector< std::string > inputCollectionTypes_
double evaluate(const reco::Muon &)
MuonCaloCompatibility muonCaloCompatibility_
static const unsigned int BestInStationByDRSlope
bool isMatchesValid() const
void setIsolation(const MuonIsolation &isoR03, const MuonIsolation &isoR05)
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
double px() const
x coordinate of momentum vector
static const unsigned int BelongsToTrackByDXSlope
bool isStandAloneMuon() const
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
void fillGlbQuality(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon)
std::vector< DetId > crossedHcalIds
float trkRelChi2
chi2 value for the inner track stub with respect to the global track
std::auto_ptr< MuonKinkFinder > trackerKinkFinder_
double nXnEnergy(const DetId &, EnergyType, int gridSize=1)
get energy of the NxN shape (N = 2*gridSize + 1) around given detector element
float towerS9
total energy in 3x3 tower shape
static const unsigned int BestInStationByDR
MuonTime time() const
get timing information
std::vector< Muon > MuonCollection
collection of Muon objects
math::XYZPoint trkGlobPosAtHcal
float ecal_time
Calorimeter timing.
float ho
energy deposited in crossed HO towers
virtual void setTunePBestTrack(MuonTrackType muonType)
double depositWithin(double coneSize, const Vetos &vetos=Vetos(), bool skipDepositVeto=false) const
Get deposit.
uint32_t rawId() const
get the raw id
void setCSCGeometry(const CSCGeometry *pg)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void init(edm::Event &, const edm::EventSetup &)
C::const_iterator const_iterator
constant access iterator type
DetId hcal_id
DetId of the central HCAL tower with smallest depth.
reco::Muon::MuonTrackTypePair tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackRef &tpfmsTrack, const reco::TrackRef &pickyTrack, const double ptThreshold=200., const double tune1=17., const double tune2=40., const double dptcut=0.25)
virtual float phi() const GCC11_FINAL
momentum azimuthal angle
bool isNull() const
Checks for null.
double ptThresholdToFillCandidateP4WithGlobalFit_
double eta() const
pseudorapidity of momentum vector
reco::Muon::MuonTrackTypePair sigmaSwitch(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const double nSigma=2., const double ptThreshold=200.)
TrackAssociatorParameters parameters_
bool isCaloCompatibilityValid() const
void fillArbitrationInfo(reco::MuonCollection *)
void fillTrackerKink(reco::Muon &aMuon)
void setPropagator(const Propagator *)
use a user configured propagator
float emS25
energy deposited in 5x5 ECAL crystal shape around central crystal
double p() const
momentum vector magnitude
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
bool isGoodTrackerMuon(const reco::Muon &muon)
double pt() const
track transverse momentum
bool checkLinks(const reco::MuonTrackLinks *) const
Cos< T >::type cos(const T &t)
std::vector< TAMuonChamberMatch > chambers
int nJets
number of jets in the cone
std::vector< const HBHERecHit * > hcalRecHits
static const unsigned int BestInChamberByDX
std::string ecalDepositName_
MuonQuality combinedQuality() const
get energy deposition information
float timeAtIpOutIn
b) particle is moving from outside in
int nDof
number of muon stations used
CSCDetId chamberId() const
float hoS9
energy deposited in 3x3 HO tower shape around central tower
std::vector< reco::MuonRPCHitMatch > rpcMatches
static const unsigned int BestInChamberByDR
bool isQualityValid() const
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
void setMuonTrack(const MuonTrackType &, const TrackRef &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
double crossedEnergy(EnergyType)
energy in detector elements crossed by the track by types
static const unsigned int BestInStationByDXSlope
math::XYZPointF hcal_position
bool fillGlobalTrackRefits_
static double sectorPhi(const DetId &id)
bool isEnergyValid() const
float hoVetoEt
ho sum-et in the veto region in r-phi
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
double pz() const
z coordinate of momentum vector
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
MuonEnergy calEnergy() const
get energy deposition information
reco::CaloMuon makeCaloMuon(const reco::Muon &)
virtual ~MuonIdProducer()
int nTracks
number of tracks in the cone (excluding veto region)
static const unsigned int BestInChamberByDXSlope
float emMax
maximal energy of ECAL crystal in the 5x5 shape
reco::isodeposit::IsoDepositExtractor * muIsoExtractorTrack_
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
void setCaloCompatibility(float input)
static const unsigned int RPCMuon
virtual TrackRef combinedMuon() const
reference to a stand-alone muon Track
static const unsigned int TrackerMuon
float emVetoEt
ecal sum-et in the veto region in r-phi
void configure(const edm::ParameterSet &)
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
bool isDuplicateOf(const CSCSegmentRef &lhs, const CSCSegmentRef &rhs) const
MuonTimingFiller * theTimingFiller_
float hadMax
maximal energy of HCAL tower in the 3x3 shape
static const unsigned int BelongsToTrackByDRSlope
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
T const * product() const
void setCombinedQuality(const MuonQuality &combinedQuality)
set energy deposition information
std::vector< edm::InputTag > inputCollectionLabels_
std::vector< MuonChamberMatch > & matches()
get muon matching information
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
int triggerSector() const
MuonIdProducer(const edm::ParameterSet &)
std::vector< reco::MuonSegmentMatch > segmentMatches
bool fillGlobalTrackQuality_
DetId ecal_id
DetId of the central ECAL crystal.
static const unsigned int BelongsToTrackByDR
std::string hcalDepositName_
unsigned int chamberId(const DetId &)
reco::TrackRef getTevRefitTrack(const reco::TrackRef &combinedTrack, const reco::TrackToTrackMap &map)
static const unsigned int BelongsToTrackByDX
virtual void setBestTrack(MuonTrackType muonType)
functor predicate for standard library sort algorithm
std::pair< double, int > depositAndCountWithin(double coneSize, const Vetos &vetos=Vetos(), double threshold=-1e+36, bool skipDepositVeto=false) const
Get deposit.
edm::Handle< reco::TrackToTrackMap > tpfmsCollectionHandle_
static const unsigned int BestInStationByDX
TrackDetMatchInfo associate(const edm::Event &, const edm::EventSetup &, const FreeTrajectoryState &, const AssociatorParameters &)
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
math::XYZPoint trkGlobPosAtEcal
Track position at different parts of the calorimeter.
int charge() const
track electric charge
bool isGoodTrack(const reco::Track &track)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
MuonTrackType
map for Global Muon refitters
double sigmaThresholdToFillCandidateP4WithGlobalFit_
static const unsigned int StandAloneMuon
std::pair< TrackRef, Muon::MuonTrackType > MuonTrackTypePair
void setMatches(const std::vector< MuonChamberMatch > &matches)
set muon matching information
T const * get() const
Returns C++ pointer to the item.
virtual float pt() const GCC11_FINAL
transverse momentum
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
void fillTiming(const reco::Muon &muon, reco::MuonTimeExtra &dtTime, reco::MuonTimeExtra &cscTime, reco::MuonTimeExtra &combinedTime, edm::Event &iEvent, const edm::EventSetup &iSetup)
math::XYZPointF ecal_position
Trajectory position at the calorimeter.
static const unsigned int BestInChamberByDRSlope
float caloCompatibility() const
bool validateGlobalMuonPair(const reco::MuonTrackLinks &goodMuon, const reco::MuonTrackLinks &badMuon)
bool debugWithTruthMatching_
Power< A, B >::type pow(const A &a, const B &b)
float trackerVetoPt
(sum-)pt inside the veto region in r-phi
float hadS9
energy deposited in 3x3 HCAL tower shape around central tower
T get(const Candidate &c)
edm::InputTag globalTrackQualityInputTag_
edm::Handle< reco::MuonCollection > muonCollectionHandle_
void loadParameters(const edm::ParameterSet &)
double py() const
y coordinate of momentum vector
virtual void beginRun(const edm::Run &, const edm::EventSetup &) override
reco::TrackRef globalTrack() const
get the combined track
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track