37 LogTrace(
"MuonIdentification") <<
"RecoMuon/MuonIdProducer :: Constructor called";
39 produces<reco::MuonCollection>();
40 produces<reco::CaloMuonCollection>();
41 produces<reco::MuonTimeExtraMap>(
"combined");
42 produces<reco::MuonTimeExtraMap>(
"dt");
43 produces<reco::MuonTimeExtraMap>(
"csc");
70 if (fillGlobalTrackQuality_)
71 fillTrackerKink_ = iConfig.
getParameter<
bool>(
"fillTrackerKink");
74 iConfig.
getParameter<
double>(
"ptThresholdToFillCandidateP4WithGlobalFit");
76 iConfig.
getParameter<
double>(
"sigmaThresholdToFillCandidateP4WithGlobalFit");
87 theTimingFiller_ = std::make_unique<MuonTimingFiller>(timingParameters, consumesCollector());
90 if (fillShowerDigis_ && fillMatching_) {
92 theShowerDigiFiller_ = std::make_unique<MuonShowerDigiFiller>(showerDigiParameters, consumesCollector());
103 if (fillIsolation_) {
120 if (fillIsolation_ && writeIsoDeposits_) {
137 <<
"Number of input collection labels is different from number of types. "
138 <<
"For each collection label there should be exactly one collection type specified.";
140 throw cms::Exception(
"ConfigurationError") <<
"Number of input collections should be from 1 to 7.";
145 <<
"========================================================================\n"
146 <<
"Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
147 <<
"========================================================================\n";
151 if (fillGlobalTrackQuality_) {
153 glbQualToken_ = consumes<edm::ValueMap<reco::MuonQuality> >(glbQualTag);
156 if (fillTrackerKink_) {
161 if (selectHighPurity_) {
163 pvToken_ = mayConsume<reco::VertexCollection>(pvTag);
170 rpcHitToken_ = consumes<RPCRecHitCollection>(rpcHitTag);
270 LogTrace(
"MuonIdentification") <<
"Creating a muon from a track " << track.
get()->pt()
271 <<
" Pt (GeV), eta: " << track.
get()->eta();
274 LogTrace(
"MuonIdentification") <<
"Muon created from a track ";
276 aMuon.setMuonTrack(type, track);
277 aMuon.setBestTrack(type);
278 aMuon.setTunePBestTrack(type);
281 <<
"Muon created from a track and setMuonBestTrack, setBestTrack and setTunePBestTrack called";
287 LogTrace(
"MuonIdentification") <<
"Creating a CaloMuon from a Muon";
301 LogTrace(
"MuonIdentification") <<
"Creating a muon from a link to tracks object";
308 bool useSigmaSwitch =
false;
316 if (tpfmsRef.
isNull() && pickyRef.isNull() && dytRef.isNull()) {
317 edm::LogWarning(
"MakeMuonWithTEV") <<
"Failed to get TEV refits, fall back to sigma switch.";
318 useSigmaSwitch =
true;
321 useSigmaSwitch =
true;
324 if (useSigmaSwitch) {
337 aMuon =
makeMuon(*chosenTrack.first);
366 const double p = track.
p();
367 const double pt = track.
pt();
369 LogTrace(
"MuonIdentification") <<
"Skipped low momentum track (Pt,P): " << pt <<
", " << track.
p() <<
" GeV";
374 const double eta = track.
eta();
375 const double absEta =
std::abs(eta);
377 LogTrace(
"MuonIdentification") <<
"Skipped track with large pseudo rapidity (Eta: " << track.
eta() <<
" )";
388 const auto subdetId =
id.subdetId();
392 return CSCDetId(
id.rawId()).chamberId().rawId();
402 int numberOfCommonDetIds = 0;
403 const std::vector<reco::MuonChamberMatch>& matches(muon.
matches());
404 for (
const auto&
match : matches) {
405 if (
match.segmentMatches.empty())
408 bool foundCommonDetId =
false;
409 for (
auto hit = track.
extra()->recHitsBegin();
hit != track.
extra()->recHitsEnd(); ++
hit) {
415 foundCommonDetId =
true;
419 if (foundCommonDetId) {
420 ++numberOfCommonDetIds;
424 return numberOfCommonDetIds;
435 const int nHitsGood = goodMuon.
globalTrack()->hitPattern().numberOfValidMuonHits();
436 const int nHitsBad = badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits();
437 if (
std::min(nHitsGood, nHitsBad) > 10) {
438 const double chi2Good = goodMuon.
globalTrack()->normalizedChi2();
439 const double chi2Bad = badMuon.
globalTrack()->normalizedChi2();
440 return (chi2Good <= chi2Bad);
443 return (nHitsGood >= nHitsBad);
447 auto outputMuons = std::make_unique<reco::MuonCollection>();
448 auto caloMuons = std::make_unique<reco::CaloMuonCollection>();
450 init(iEvent, iSetup);
460 outputMuons->push_back(
muon);
467 std::vector<bool> goodmuons(nLink,
true);
470 for (
unsigned int i = 0;
i < nLink - 1; ++
i) {
472 if (iLink.trackerTrack().isNull() || !
checkLinks(&iLink))
474 for (
unsigned int j =
i + 1;
j < nLink; ++
j) {
478 if (iLink.trackerTrack() == jLink.trackerTrack()) {
484 goodmuons[
j] =
false;
486 goodmuons[
i] =
false;
491 for (
unsigned int i = 0;
i < nLink - 1; ++
i) {
495 if (iLink.standAloneTrack().isNull() || !
checkLinks(&iLink))
497 for (
unsigned int j = i + 1;
j < nLink; ++
j) {
503 if (iLink.standAloneTrack() == jLink.standAloneTrack()) {
505 goodmuons[j] =
false;
507 goodmuons[
i] =
false;
512 for (
unsigned int i = 0;
i < nLink; ++
i) {
520 for (
const auto&
muon : *outputMuons) {
521 if (
muon.track() == iLink.trackerTrack() &&
muon.standAloneMuon() == iLink.standAloneTrack() &&
522 muon.combinedMuon() == iLink.globalTrack()) {
528 outputMuons->push_back(
makeMuon(iLink));
536 LogTrace(
"MuonIdentification") <<
"Creating tracker muons";
537 std::vector<TrackDetectorAssociator::Direction> directions1, directions2;
553 if (!(*recoVertices)[0].isFake())
557 bool splitTrack =
false;
560 const auto&
directions = splitTrack ? directions1 : directions2;
564 fillMuonId(iEvent, iSetup, trackerMuon, direction);
589 for (
auto&
muon : *outputMuons) {
607 LogTrace(
"MuonIdentification") <<
"Found a corresponding global muon. Set energy, matches and move on";
612 if (goodTrackerMuon || goodRPCMuon || goodGEMMuon || goodME0Muon) {
613 outputMuons->push_back(trackerMuon);
615 LogTrace(
"MuonIdentification") <<
"track failed minimal number of muon matches requirement";
618 caloMuons->push_back(caloMuon);
627 LogTrace(
"MuonIdentification") <<
"Looking for new muons among stand alone muon tracks";
633 for (
auto&
muon : *outputMuons) {
634 if (!
muon.standAloneMuon().isNull()) {
636 if (
muon.standAloneMuon().get() == &outerTrack) {
649 LogTrace(
"MuonIdentification") <<
"Found associated tracker muon. Set a reference and move on";
658 LogTrace(
"MuonIdentification") <<
"No associated stand alone track is found. Making a muon";
659 outputMuons->push_back(
671 LogTrace(
"MuonIdentification") <<
"Dress up muons if it's necessary";
673 const int nMuons = outputMuons->size();
675 std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
676 std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
677 std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
678 std::vector<reco::IsoDeposit> trackDepColl(nMuons);
679 std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
680 std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
681 std::vector<reco::IsoDeposit> hoDepColl(nMuons);
682 std::vector<reco::IsoDeposit> jetDepColl(nMuons);
685 for (
unsigned int i = 0;
i < outputMuons->size(); ++
i) {
686 auto&
muon = outputMuons->at(
i);
692 if (
muon.isStandAloneMuon()) {
699 LogTrace(
"MuonIdentification") <<
"THIS SHOULD NEVER HAPPEN";
708 LogDebug(
"MuonIdentification") <<
"";
719 iEvent, iSetup,
muon, trackDepColl[
i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
731 muonTime.
nDof = combinedTime.
nDof();
737 muon.setTime(muonTime);
738 muon.setRPCTime(rpcTime);
739 dtTimeColl[
i] = dtTime;
740 cscTimeColl[
i] = cscTime;
741 combinedTimeColl[
i] = combinedTime;
744 LogTrace(
"MuonIdentification") <<
"number of muons produced: " << outputMuons->size();
754 auto oMap = std::make_unique<MapType>();
756 typename MapType::Filler filler(*oMap);
757 filler.insert(refH, vec.begin(), vec.end());
763 fillMap(muonHandle, combinedTimeColl, iEvent,
"combined");
764 fillMap(muonHandle, dtTimeColl, iEvent,
"dt");
765 fillMap(muonHandle, cscTimeColl, iEvent,
"csc");
819 LogTrace(
"MuonIdentification") <<
"RecoMuon/MuonIdProducer :: fillMuonId";
829 <<
"Failed to fill muon id information for a muon with undefined references to tracks";
833 LogTrace(
"MuonIdentification") <<
"RecoMuon/MuonIdProducer :: fillMuonId :: fillEnergy = " <<
fillEnergy_;
866 if (
hit->
id() != emMaxId)
873 if (
hit->
id() != hadMaxId)
884 LogTrace(
"MuonIdentification") <<
"RecoMuon/MuonIdProducer :: fillMuonId :: fill muon match info ";
885 std::vector<reco::MuonChamberMatch> muonChamberMatches;
886 unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
887 for (
const auto& chamber : info.
chambers) {
892 const auto& lErr = chamber.tState.localError();
893 const auto& lPos = chamber.tState.localPosition();
894 const auto& lDir = chamber.tState.localDirection();
896 const auto& localError = lErr.positionError();
897 matchedChamber.
x = lPos.x();
898 matchedChamber.
y = lPos.y();
899 matchedChamber.
xErr =
sqrt(localError.xx());
900 matchedChamber.
yErr =
sqrt(localError.yy());
902 matchedChamber.
dXdZ = lDir.z() != 0 ? lDir.x() / lDir.z() : 9999;
903 matchedChamber.
dYdZ = lDir.z() != 0 ? lDir.y() / lDir.z() : 9999;
906 matchedChamber.
dXdZErr = trajectoryCovMatrix(1, 1) > 0 ?
sqrt(trajectoryCovMatrix(1, 1)) : 0;
907 matchedChamber.
dYdZErr = trajectoryCovMatrix(2, 2) > 0 ?
sqrt(trajectoryCovMatrix(2, 2)) : 0;
909 matchedChamber.
edgeX = chamber.localDistanceX;
910 matchedChamber.
edgeY = chamber.localDistanceY;
912 matchedChamber.
id = chamber.id;
920 if (!chamber.segments.empty())
921 ++nubmerOfMatchesAccordingToTrackAssociator;
924 for (
const auto& segment : chamber.segments) {
926 matchedSegment.
x = segment.segmentLocalPosition.x();
927 matchedSegment.
y = segment.segmentLocalPosition.y();
928 matchedSegment.
dXdZ =
929 segment.segmentLocalDirection.z() ? segment.segmentLocalDirection.x() / segment.segmentLocalDirection.z() : 0;
930 matchedSegment.
dYdZ =
931 segment.segmentLocalDirection.z() ? segment.segmentLocalDirection.y() / segment.segmentLocalDirection.z() : 0;
932 matchedSegment.
xErr = segment.segmentLocalErrorXX > 0 ?
sqrt(segment.segmentLocalErrorXX) : 0;
933 matchedSegment.
yErr = segment.segmentLocalErrorYY > 0 ?
sqrt(segment.segmentLocalErrorYY) : 0;
934 matchedSegment.
dXdZErr = segment.segmentLocalErrorDxDz > 0 ?
sqrt(segment.segmentLocalErrorDxDz) : 0;
935 matchedSegment.
dYdZErr = segment.segmentLocalErrorDyDz > 0 ?
sqrt(segment.segmentLocalErrorDyDz) : 0;
936 matchedSegment.
t0 = segment.t0;
937 matchedSegment.
mask = 0;
942 matchedSegment.
hasZed_ = segment.hasZed;
943 matchedSegment.
hasPhi_ = segment.hasPhi;
945 bool matchedX =
false;
946 bool matchedY =
false;
947 LogTrace(
"MuonIdentification") <<
" matching local x, segment x: " << matchedSegment.
x
948 <<
", chamber x: " << matchedChamber.
x <<
", max: " <<
maxAbsDx_;
949 LogTrace(
"MuonIdentification") <<
" matching local y, segment y: " << matchedSegment.
y
950 <<
", chamber y: " << matchedChamber.
y <<
", max: " <<
maxAbsDy_;
951 const double matchedSegChDx =
std::abs(matchedSegment.
x - matchedChamber.
x);
952 const double matchedSegChDy =
std::abs(matchedSegment.
y - matchedChamber.
y);
953 if (matchedSegment.
xErr > 0 && matchedChamber.
xErr > 0)
954 LogTrace(
"MuonIdentification") <<
" xpull: "
957 if (matchedSegment.
yErr > 0 && matchedChamber.
yErr > 0)
958 LogTrace(
"MuonIdentification") <<
" ypull: "
964 else if (matchedSegment.
xErr > 0 && matchedChamber.
xErr > 0) {
966 if (matchedSegChDx * matchedSegChDx <
maxAbsPullX2_ * invMatchedSegChPullX2)
971 else if (matchedSegment.
yErr > 0 && matchedChamber.
yErr > 0) {
973 if (matchedSegChDy * matchedSegChDy <
maxAbsPullY2_ * invMatchedSegChPullY2)
976 if (matchedX && matchedY) {
978 matchedChamber.
me0Matches.push_back(matchedSegment);
980 matchedChamber.
gemMatches.push_back(matchedSegment);
985 muonChamberMatches.push_back(matchedChamber);
989 LogTrace(
"MuonIdentification") <<
"RecoMuon/MuonIdProducer :: fillMuonId :: fill RPC info";
991 for (
const auto& chamber : info.
chambers) {
994 const auto& lErr = chamber.tState.localError();
995 const auto& lPos = chamber.tState.localPosition();
996 const auto& lDir = chamber.tState.localDirection();
1000 LocalError localError = lErr.positionError();
1001 matchedChamber.
x = lPos.x();
1002 matchedChamber.
y = lPos.y();
1006 matchedChamber.
dXdZ = lDir.z() != 0 ? lDir.x() / lDir.z() : 9999;
1007 matchedChamber.
dYdZ = lDir.z() != 0 ? lDir.y() / lDir.z() : 9999;
1010 matchedChamber.
dXdZErr = trajectoryCovMatrix(1, 1) > 0 ?
sqrt(trajectoryCovMatrix(1, 1)) : 0;
1011 matchedChamber.
dYdZErr = trajectoryCovMatrix(2, 2) > 0 ?
sqrt(trajectoryCovMatrix(2, 2)) : 0;
1013 matchedChamber.
edgeX = chamber.localDistanceX;
1014 matchedChamber.
edgeY = chamber.localDistanceY;
1018 matchedChamber.
id = chamber.id;
1023 if (rpcRecHit.rawId() != chamber.id.rawId())
1026 rpcHitMatch.
x = rpcRecHit.localPosition().x();
1027 rpcHitMatch.
mask = 0;
1028 rpcHitMatch.
bx = rpcRecHit.BunchX();
1030 const double absDx =
std::abs(rpcRecHit.localPosition().x() - chamber.tState.localPosition().x());
1031 if (absDx <= 20
or absDx * absDx <= 16 * localError.
xx())
1032 matchedChamber.
rpcMatches.push_back(rpcHitMatch);
1035 muonChamberMatches.push_back(matchedChamber);
1041 LogTrace(
"MuonIdentification") <<
"number of muon chambers: " << aMuon.
matches().size() <<
"\n"
1042 <<
"number of chambers with segments according to the associator requirements: "
1043 << nubmerOfMatchesAccordingToTrackAssociator;
1044 LogTrace(
"MuonIdentification") <<
"number of segment matches with the producer requirements: "
1054 for (reco::MuonCollection::iterator
muon = muons->begin();
muon != muons->end();) {
1055 if (
muon->isTrackerMuon()) {
1061 if ((
muon->type() & (~mask)) == 0) {
1064 caloMuons->push_back(caloMuon);
1068 muon->setType(
muon->type() & (~
reco::Muon::TrackerMuon));
1080 std::vector<std::pair<reco::MuonChamberMatch*, reco::MuonSegmentMatch*> > chamberPairs;
1081 std::vector<std::pair<reco::MuonChamberMatch*, reco::MuonSegmentMatch*> > stationPairs;
1082 std::vector<std::pair<reco::MuonChamberMatch*, reco::MuonSegmentMatch*> >
1086 for (
unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1) {
1087 auto& muon1 = pOutputMuons->at(muonIndex1);
1089 for (
auto& chamber1 : muon1.matches()) {
1091 std::vector<reco::MuonSegmentMatch>* segmentMatches1 =
getSegmentMatches(chamber1, muonType);
1093 if (segmentMatches1->empty())
1095 chamberPairs.clear();
1097 for (
auto& segment1 : *segmentMatches1) {
1098 chamberPairs.push_back(std::make_pair(&chamber1, &segment1));
1099 if (!segment1.isMask())
1101 arbitrationPairs.clear();
1102 arbitrationPairs.push_back(std::make_pair(&chamber1, &segment1));
1106 if (muon1.type() & muonType) {
1108 for (
unsigned int muonIndex2 = muonIndex1 + 1; muonIndex2 < pOutputMuons->size(); ++muonIndex2) {
1109 auto& muon2 = pOutputMuons->at(muonIndex2);
1111 if (!(muon2.type() & muonType))
1114 for (
auto& chamber2 : muon2.matches()) {
1116 std::vector<reco::MuonSegmentMatch>* segmentMatches2 =
getSegmentMatches(chamber2, muonType);
1117 for (
auto& segment2 : *segmentMatches2) {
1118 if (segment2.isMask())
1123 approxEqual(segment2.dXdZErr, segment1.dXdZErr) &&
1124 approxEqual(segment2.dYdZErr, segment1.dYdZErr)) {
1125 arbitrationPairs.push_back(std::make_pair(&chamber2, &segment2));
1133 if (arbitrationPairs.empty())
1135 if (arbitrationPairs.size() == 1) {
1142 sort(arbitrationPairs.begin(),
1143 arbitrationPairs.end(),
1146 sort(arbitrationPairs.begin(),
1147 arbitrationPairs.end(),
1150 sort(arbitrationPairs.begin(),
1151 arbitrationPairs.end(),
1154 sort(arbitrationPairs.begin(),
1155 arbitrationPairs.end(),
1158 for (
auto& ap : arbitrationPairs) {
1166 CSCDetId(chamber1.id).ring() == 4) {
1167 for (
auto& segment2 : chamber1.segmentMatches) {
1168 if (segment1.cscSegmentRef.isNull() || segment2.cscSegmentRef.isNull())
1170 if (
meshAlgo_->isDuplicateOf(segment1.cscSegmentRef, segment2.cscSegmentRef) &&
1171 (segment2.mask & 0x1e0000) && (segment1.mask & 0x1e0000)) {
1181 if (chamberPairs.empty())
1183 if (chamberPairs.size() == 1) {
1189 sort(chamberPairs.begin(),
1193 sort(chamberPairs.begin(),
1197 sort(chamberPairs.begin(),
1201 sort(chamberPairs.begin(),
1210 for (
int detectorIndex = 1; detectorIndex <= 5;
1213 stationPairs.clear();
1216 for (
auto& chamber : muon1.matches()) {
1217 if (!(chamber.station() ==
stationIndex && chamber.detector() == detectorIndex))
1219 std::vector<reco::MuonSegmentMatch>* segmentMatches =
getSegmentMatches(chamber, muonType);
1220 if (segmentMatches->empty())
1223 for (
auto& segment : *segmentMatches) {
1224 stationPairs.push_back(std::make_pair(&chamber, &segment));
1228 if (stationPairs.empty())
1230 if (stationPairs.size() == 1) {
1236 sort(stationPairs.begin(),
1240 sort(stationPairs.begin(),
1244 sort(stationPairs.begin(),
1248 sort(stationPairs.begin(),
1280 <<
"Failed to compute muon isolation information for a muon with undefined references to tracks";
1286 std::vector<reco::IsoDeposit> caloDeps =
muIsoExtractorCalo_->deposits(iEvent, iSetup, *track);
1289 if (caloDeps.size() != 3) {
1290 LogTrace(
"MuonIdentification") <<
"Failed to fill vector of calorimeter isolation deposits!";
1333 const double energy =
std::sqrt(track.
p() * track.
p() + 0.105658369 * 0.105658369);
1342 if (muonId.
sector() <= 12)
1344 if (muonId.
sector() == 13)
1345 phi = 3 / 6. *
M_PI;
1346 if (muonId.
sector() == 14)
1347 phi = 9 / 6. *
M_PI;
1364 return muon.
innerTrack()->outerPosition().phi();
1396 if (trackBAD || staBAD || glbBAD) {
1397 edm::LogWarning(
"muonIDbadLinks") <<
"Global muon links to constituent tracks are invalid: trkBad " << trackBAD
1398 <<
" standaloneBad " << staBAD <<
" globalBad " << glbBAD
1399 <<
". There should be no such object. Muon is skipped.";
1409 desc.
add<
bool>(
"arbitrateTrackerMuons",
false);
1410 desc.
add<
bool>(
"storeCrossedHcalRecHits",
false);
1411 desc.
add<
bool>(
"fillShowerDigis",
false);
1420 descTrkAsoPar.
add<
bool>(
"useGEM",
false);
1421 descTrkAsoPar.
add<
bool>(
"useME0",
false);
std::string hoDepositName_
constexpr double deltaPhi(double phi1, double phi2)
double p() const
momentum vector magnitude
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)
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
int numberOfMatchedRPCLayers(ArbitrationType type=RPCHitAndTrackArbitration) const
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
GEMSegmentRef gemSegmentRef
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)
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
DTRecSegment4DRef dtSegmentRef
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
TrackRef combinedMuon() const override
reference to a stand-alone muon Track
bool isNonnull() const
Checks for non-null.
reco::TrackRef trackerTrack() const
get the tracker's track which match with the stand alone muon tracks
std::vector< reco::MuonSegmentMatch > gemMatches
static bool crossedIP(const reco::Track &track)
float sumPt
sum-pt of tracks
double pt() const final
transverse momentum
void setType(unsigned int type)
static void truthMatchMuon(const edm::Event &iEvent, const GlobalTrackingGeometry &iGeometry, reco::Muon &aMuon)
TrackDetectorAssociator trackAssociator_
CSCSegmentRef cscSegmentRef
std::unique_ptr< MuonKinkFinder > trackerKinkFinder_
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)
std::vector< const HBHERecHit * > crossedHcalRecHits
virtual TrackRef innerTrack() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void setAllowAnything()
allow any parameter label/value pairs
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
edm::EDGetTokenT< RPCRecHitCollection > rpcHitToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
bool isGoodGEMMuon(const reco::Muon &muon)
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
std::vector< DetId > crossedEcalIds
std::string trackDepositName_
void fillArbitrationInfo(reco::MuonCollection *, unsigned int muonType=reco::Muon::TrackerMuon)
std::vector< CaloMuon > CaloMuonCollection
collection of Muon objects
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomTokenRun_
void loadParameters(const edm::ParameterSet &, edm::ConsumesCollector &)
std::vector< reco::MuonSegmentMatch > * getSegmentMatches(reco::MuonChamberMatch &chamber, unsigned int muonType) const
get the segment matches of the appropriate type
DetId findMaxDeposition(EnergyType)
Find detector elements with highest energy deposition.
void produce(edm::Event &, const edm::EventSetup &) override
float hadVetoEt
hcal sum-et in the veto region in r-phi
float emS9
energy deposited in 3x3 ECAL crystal shape around central crystal
double evaluate(const reco::Muon &)
std::vector< Vertex > VertexCollection
collection of Vertex objects
MuonCaloCompatibility muonCaloCompatibility_
static const unsigned int BestInStationByDRSlope
bool isMatchesValid() const
tuple inputCollectionTypes
edm::EDGetTokenT< reco::TrackToTrackMap > pickyCollectionToken_
static std::string toStr(const ICTypeKey k)
double px() const
x coordinate of momentum vector
bool arbitrateTrackerMuons_
static const unsigned int BelongsToTrackByDXSlope
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
void fillGlbQuality(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon)
TrackRef track() const override
reference to a Track
std::vector< DetId > crossedHcalIds
float trkRelChi2
chi2 value for the inner track stub with respect to the global track
double nXnEnergy(const DetId &, EnergyType, int gridSize=1)
get energy of the NxN shape (N = 2*gridSize + 1) around given detector element
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorTrack_
float towerS9
total energy in 3x3 tower shape
static const unsigned int BestInStationByDR
MuonTime time() const
get DT/CSC combined timing information
std::vector< Muon > MuonCollection
collection of Muon objects
bool isTrackerMuon() const override
std::unique_ptr< MuonTimingFiller > theTimingFiller_
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.
bool approxEqual(const double a, const double b, const double tol=1E-3) const
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > globalGeomToken_
bool getData(T &iHolder) const
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorCalo_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void init(edm::Event &, const edm::EventSetup &)
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
DetId hcal_id
DetId of the central HCAL tower with smallest depth.
edm::EDGetTokenT< reco::TrackToTrackMap > tpfmsCollectionToken_
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
std::vector< reco::MuonSegmentMatch > me0Matches
std::unique_ptr< MuonShowerDigiFiller > theShowerDigiFiller_
edm::Handle< reco::VertexCollection > pvHandle_
double ptThresholdToFillCandidateP4WithGlobalFit_
double eta() const
pseudorapidity of momentum vector
void addDefault(ParameterSetDescription const &psetDescription)
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
bool isGoodME0Muon(const reco::Muon &muon)
reco::Muon::MuonTrackTypePair tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackRef &tpfmsTrack, const reco::TrackRef &pickyTrack, const reco::TrackRef &dytTrack, const double ptThreshold=200., const double tune1=17., const double tune2=40., const double dptcut=0.25)
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
static const unsigned int ME0Muon
ArbitrationType
define arbitration schemes
bool isGoodTrackerMuon(const reco::Muon &muon)
double pt() const
track transverse momentum
bool checkLinks(const reco::MuonTrackLinks *) const
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_
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
MuonQuality combinedQuality() const
get energy deposition information
float timeAtIpOutIn
b) particle is moving from outside in
int nDof
number of muon stations used
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
edm::EDGetTokenT< reco::TrackCollection > outerTrackCollectionToken_
edm::Handle< RPCRecHitCollection > rpcHitHandle_
float hoS9
energy deposited in 3x3 HO tower shape around central tower
std::vector< reco::MuonRPCHitMatch > rpcMatches
static const unsigned int BestInChamberByDR
T const * get() const
Returns C++ pointer to the item.
TrackRef standAloneMuon() const override
reference to a stand-alone muon Track
ME0SegmentRef me0SegmentRef
bool isQualityValid() const
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
edm::EDGetTokenT< reco::MuonTrackLinksCollection > linkCollectionToken_
double crossedEnergy(EnergyType)
energy in detector elements crossed by the track by types
bool isNull() const
Checks for null.
static const unsigned int BestInStationByDXSlope
math::XYZPointF hcal_position
bool fillGlobalTrackRefits_
static double sectorPhi(const DetId &id)
void setMuonTrack(const MuonTrackType &, const TrackRef &)
bool isEnergyValid() const
float hoVetoEt
ho sum-et in the veto region in r-phi
double pz() const
z coordinate of momentum vector
double phiOfMuonInteractionRegion(const reco::Muon &muon) const
MuonEnergy calEnergy() const
get energy deposition information
reco::CaloMuon makeCaloMuon(const reco::Muon &)
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
void setCaloCompatibility(float input)
static const unsigned int RPCMuon
static ICTypeKey toKey(const std::string &s)
static const unsigned int TrackerMuon
float emVetoEt
ecal sum-et in the veto region in r-phi
void configure(const edm::ParameterSet &)
T const * product() const
std::vector< ICTypes::ICTypeKey > inputCollectionTypes_
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
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
T getParameter(std::string const &) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void setCombinedQuality(const MuonQuality &combinedQuality)
set energy deposition information
std::vector< edm::InputTag > inputCollectionLabels_
static const unsigned int PFMuon
std::vector< MuonChamberMatch > & matches()
get muon matching information
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorJet_
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
int triggerSector() const
MuonIdProducer(const edm::ParameterSet &)
void arbitrateMuons(reco::MuonCollection *, reco::CaloMuonCollection *)
std::vector< reco::MuonSegmentMatch > segmentMatches
bool quality(const TrackQuality) const
Track quality.
bool fillGlobalTrackQuality_
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
DetId ecal_id
DetId of the central ECAL crystal.
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
static const unsigned int BelongsToTrackByDR
std::string hcalDepositName_
~MuonIdProducer() override
unsigned int chamberId(const DetId &)
reco::TrackRef getTevRefitTrack(const reco::TrackRef &combinedTrack, const reco::TrackToTrackMap &map)
static const unsigned int BelongsToTrackByDX
void setIsolation(const MuonIsolation &isoR03, const MuonIsolation &isoR05)
virtual void setBestTrack(MuonTrackType muonType)
functor predicate for standard library sort algorithm
static const unsigned int GEMMuon
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 &)
bool storeCrossedHcalRecHits_
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
unsigned int type() const
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.
edm::EDGetTokenT< reco::VertexCollection > pvToken_
MuonTrackType
map for Global Muon refitters
double sigmaThresholdToFillCandidateP4WithGlobalFit_
static const unsigned int StandAloneMuon
std::vector< HcalMuonRecHit > crossedHadRecHits
Log< level::Warning, false > LogWarning
std::pair< TrackRef, Muon::MuonTrackType > MuonTrackTypePair
void setMatches(const std::vector< MuonChamberMatch > &matches)
set muon matching information
double phi() const final
momentum azimuthal angle
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_
bool isGoodCaloMuon(const reco::CaloMuon &muon)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool isGlobalMuon() const override
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
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
edm::Handle< reco::MuonCollection > muonCollectionHandle_
double py() const
y coordinate of momentum vector
edm::Handle< edm::ValueMap< reco::MuonQuality > > glbQualHandle_
void beginRun(const edm::Run &, const edm::EventSetup &) override
reco::TrackRef globalTrack() const
get the combined track
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
std::unique_ptr< MuonMesh > meshAlgo_
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_
bool isStandAloneMuon() const override
double eta() const final
momentum pseudorapidity