39 #include <boost/regex.hpp>
60 muIsoExtractorCalo_(0),muIsoExtractorTrack_(0),muIsoExtractorJet_(0)
62 produces<reco::MuonCollection>();
63 produces<reco::CaloMuonCollection>();
64 produces<reco::MuonTimeExtraMap>(
"combined");
65 produces<reco::MuonTimeExtraMap>(
"dt");
66 produces<reco::MuonTimeExtraMap>(
"csc");
87 if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.
getParameter<
bool>(
"fillTrackerKink");
102 if (fillCaloCompatibility_){
111 std::string caloExtractorName = caloExtractorPSet.
getParameter<std::string>(
"ComponentName");
115 std::string trackExtractorName = trackExtractorPSet.
getParameter<std::string>(
"ComponentName");
119 std::string jetExtractorName = jetExtractorPSet.
getParameter<std::string>(
"ComponentName");
122 if (fillIsolation_ && writeIsoDeposits_){
138 throw cms::Exception(
"ConfigurationError") <<
"Number of input collection labels is different from number of types. " <<
139 "For each collection label there should be exactly one collection type specified.";
141 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";
148 if (fillGlobalTrackQuality_){
152 if (fillTrackerKink_) {
253 LogTrace(
"MuonIdentification") <<
"Creating a muon from a track " << track.
get()->pt() <<
254 " Pt (GeV), eta: " << track.
get()->eta();
258 aMuon.setBestTrack(type);
277 LogTrace(
"MuonIdentification") <<
"Creating a muon from a link to tracks object";
283 bool useSigmaSwitch =
false;
291 if (tpfmsRef.
isNull() && pickyRef.isNull()){
292 edm::LogWarning(
"MakeMuonWithTEV")<<
"Failed to get TEV refits, fall back to sigma switch.";
293 useSigmaSwitch =
true;
296 useSigmaSwitch =
true;
308 aMuon =
makeMuon(*chosenTrack.first);
336 LogTrace(
"MuonIdentification") <<
"Skipped low momentum track (Pt,P): " << track.
pt() <<
337 ", " << track.
p() <<
" GeV";
343 LogTrace(
"MuonIdentification") <<
"Skipped track with large pseudo rapidity (Eta: " << track.
eta() <<
" )";
351 switch (
id.det() ) {
353 switch (
id.subdetId() ) {
357 return detId.
rawId();
378 int numberOfCommonDetIds = 0;
381 track.
extra()->recHits().
isNull() )
return numberOfCommonDetIds;
382 const std::vector<reco::MuonChamberMatch>& matches( muon.
matches() );
383 for ( std::vector<reco::MuonChamberMatch>::const_iterator
match = matches.begin();
386 if (
match->segmentMatches.empty() )
continue;
387 bool foundCommonDetId =
false;
397 foundCommonDetId =
true;
401 if ( foundCommonDetId ) {
402 numberOfCommonDetIds++;
406 return numberOfCommonDetIds;
422 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits()) > 10 ){
429 if ( goodMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() <
430 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() )
return false;
442 init(iEvent, iSetup);
468 outputMuons->push_back(*
muon);
473 if ( goodmuons.size()>1 ){
488 goodmuons[
j] =
false;
490 goodmuons[
i] =
false;
496 if ( !goodmuons[
i] )
continue;
499 if ( !goodmuons[
j] )
continue;
506 goodmuons[
j] =
false;
508 goodmuons[
i] =
false;
514 if ( !goodmuons[
i] )
continue;
519 for ( reco::MuonCollection::const_iterator
muon = outputMuons->begin();
520 muon != outputMuons->end(); ++
muon )
526 outputMuons->push_back(
makeMuon( *links ) );
534 LogTrace(
"MuonIdentification") <<
"Creating tracker muons";
539 bool splitTrack =
false;
542 std::vector<TrackDetectorAssociator::Direction>
directions;
549 for ( std::vector<TrackDetectorAssociator::Direction>::const_iterator direction = directions.begin();
550 direction != directions.end(); ++direction )
556 fillMuonId(iEvent, iSetup, trackerMuon, *direction);
570 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
571 muon != outputMuons->end(); ++
muon )
582 LogTrace(
"MuonIdentification") <<
"Found a corresponding global muon. Set energy, matches and move on";
587 if ( goodTrackerMuon ){
588 outputMuons->push_back( trackerMuon );
590 LogTrace(
"MuonIdentification") <<
"track failed minimal number of muon matches requirement";
593 caloMuons->push_back( caloMuon );
602 LogTrace(
"MuonIdentification") <<
"Looking for new muons among stand alone muon tracks";
607 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
608 muon != outputMuons->end(); ++
muon )
610 if ( !
muon->standAloneMuon().isNull() ) {
625 LogTrace(
"MuonIdentification") <<
"Found associated tracker muon. Set a reference and move on";
634 LogTrace(
"MuonIdentification") <<
"No associated stand alone track is found. Making a muon";
635 outputMuons->push_back(
makeMuon(iEvent, iSetup,
642 LogTrace(
"MuonIdentification") <<
"Dress up muons if it's necessary";
644 int nMuons=outputMuons->size();
646 std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
647 std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
648 std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
649 std::vector<reco::IsoDeposit> trackDepColl(nMuons);
650 std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
651 std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
652 std::vector<reco::IsoDeposit> hoDepColl(nMuons);
653 std::vector<reco::IsoDeposit> jetDepColl(nMuons);
657 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
muon != outputMuons->end(); ++
muon )
666 if (
muon->isStandAloneMuon() ) {
672 LogTrace(
"MuonIdentification") <<
"THIS SHOULD NEVER HAPPEN";
693 trackDepColl[i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
710 muon->setTime( muonTime);
711 dtTimeColl[
i] = dtTime;
712 cscTimeColl[
i] = cscTime;
713 combinedTimeColl[
i] = combinedTime;
719 LogTrace(
"MuonIdentification") <<
"number of muons produced: " << outputMuons->size();
725 filler.
insert(muonHandle, combinedTimeColl.begin(), combinedTimeColl.end());
727 fillerDT.
insert(muonHandle, dtTimeColl.begin(), dtTimeColl.end());
729 fillerCSC.
insert(muonHandle, cscTimeColl.begin(), cscTimeColl.end());
732 iEvent.
put(muonTimeMap,
"combined");
733 iEvent.
put(muonTimeMapDT,
"dt");
734 iEvent.
put(muonTimeMapCSC,
"csc");
737 trackDepFiller.
insert(muonHandle, trackDepColl.begin(), trackDepColl.end());
738 trackDepFiller.
fill();
740 ecalDepFiller.
insert(muonHandle, ecalDepColl.begin(), ecalDepColl.end());
741 ecalDepFiller.
fill();
743 hcalDepFiller.
insert(muonHandle, hcalDepColl.begin(), hcalDepColl.end());
744 hcalDepFiller.
fill();
746 hoDepFiller.
insert(muonHandle, hoDepColl.begin(), hoDepColl.end());
749 jetDepFiller.
insert(muonHandle, jetDepColl.begin(), jetDepColl.end());
754 iEvent.
put(caloMuons);
762 muon.
pt()<5 && fabs(muon.
eta())<1.5 &&
780 throw cms::Exception(
"FatalError") <<
"Failed to fill muon id information for a muon with undefined references to tracks";
802 for(std::vector<const EcalRecHit*>::const_iterator
hit=info.
ecalRecHits.begin();
804 if ((*hit)->id() != emMaxId)
continue;
805 muonEnergy.
emMax = (*hit)->energy();
809 for(std::vector<const HBHERecHit*>::const_iterator
hit=info.
hcalRecHits.begin();
811 if ((*hit)->id() != hadMaxId)
continue;
812 muonEnergy.
hadMax = (*hit)->energy();
820 std::vector<reco::MuonChamberMatch> muonChamberMatches;
821 unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
822 for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.
chambers.begin();
823 chamber!=info.
chambers.end(); chamber++ )
827 LocalError localError = chamber->tState.localError().positionError();
828 matchedChamber.
x = chamber->tState.localPosition().x();
829 matchedChamber.
y = chamber->tState.localPosition().y();
830 matchedChamber.
xErr =
sqrt( localError.
xx() );
831 matchedChamber.
yErr =
sqrt( localError.
yy() );
833 matchedChamber.
dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
834 matchedChamber.
dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
837 matchedChamber.
dXdZErr = trajectoryCovMatrix(1,1)>0?
sqrt(trajectoryCovMatrix(1,1)):0;
838 matchedChamber.
dYdZErr = trajectoryCovMatrix(2,2)>0?
sqrt(trajectoryCovMatrix(2,2)):0;
840 matchedChamber.
edgeX = chamber->localDistanceX;
841 matchedChamber.
edgeY = chamber->localDistanceY;
843 matchedChamber.
id = chamber->id;
844 if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
847 for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
848 segment != chamber->segments.end(); segment++ )
851 matchedSegment.
x = segment->segmentLocalPosition.x();
852 matchedSegment.
y = segment->segmentLocalPosition.y();
853 matchedSegment.
dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
854 matchedSegment.
dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
855 matchedSegment.
xErr = segment->segmentLocalErrorXX>0?
sqrt(segment->segmentLocalErrorXX):0;
856 matchedSegment.
yErr = segment->segmentLocalErrorYY>0?
sqrt(segment->segmentLocalErrorYY):0;
857 matchedSegment.
dXdZErr = segment->segmentLocalErrorDxDz>0?
sqrt(segment->segmentLocalErrorDxDz):0;
858 matchedSegment.
dYdZErr = segment->segmentLocalErrorDyDz>0?
sqrt(segment->segmentLocalErrorDyDz):0;
859 matchedSegment.
t0 = segment->t0;
860 matchedSegment.
mask = 0;
863 matchedSegment.
hasZed_ = segment->hasZed;
864 matchedSegment.
hasPhi_ = segment->hasPhi;
866 bool matchedX =
false;
867 bool matchedY =
false;
868 LogTrace(
"MuonIdentification") <<
" matching local x, segment x: " << matchedSegment.
x <<
869 ", chamber x: " << matchedChamber.
x <<
", max: " <<
maxAbsDx_;
870 LogTrace(
"MuonIdentification") <<
" matching local y, segment y: " << matchedSegment.
y <<
871 ", chamber y: " << matchedChamber.
y <<
", max: " <<
maxAbsDy_;
872 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 )
873 LogTrace(
"MuonIdentification") <<
" xpull: " <<
874 fabs(matchedSegment.
x - matchedChamber.
x)/
sqrt(
pow(matchedSegment.
xErr,2) +
pow(matchedChamber.
xErr,2));
875 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 )
876 LogTrace(
"MuonIdentification") <<
" ypull: " <<
877 fabs(matchedSegment.
y - matchedChamber.
y)/
sqrt(
pow(matchedSegment.
yErr,2) +
pow(matchedChamber.
yErr,2));
879 if (fabs(matchedSegment.
x - matchedChamber.
x) <
maxAbsDx_) matchedX =
true;
880 if (fabs(matchedSegment.
y - matchedChamber.
y) <
maxAbsDy_) matchedY =
true;
881 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 &&
883 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 &&
885 if (matchedX && matchedY) matchedChamber.
segmentMatches.push_back(matchedSegment);
887 muonChamberMatches.push_back(matchedChamber);
891 LogTrace(
"MuonIdentification") <<
"number of muon chambers: " << aMuon.
matches().size() <<
"\n"
892 <<
"number of chambers with segments according to the associator requirements: " <<
893 nubmerOfMatchesAccordingToTrackAssociator;
894 LogTrace(
"MuonIdentification") <<
"number of segment matches with the producer requirements: " <<
905 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs;
906 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs;
907 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs;
910 for(
unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
913 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter1 = pOutputMuons->at(muonIndex1).matches().begin();
914 chamberIter1 != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter1 )
916 if(chamberIter1->segmentMatches.empty())
continue;
917 chamberPairs.clear();
920 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter1 = chamberIter1->segmentMatches.begin();
921 segmentIter1 != chamberIter1->segmentMatches.end(); ++segmentIter1 )
923 chamberPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
924 if(!segmentIter1->isMask())
926 arbitrationPairs.clear();
927 arbitrationPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
933 if (pOutputMuons->at(muonIndex1).isTrackerMuon()) {
935 for(
unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
938 if (! pOutputMuons->at(muonIndex2).isTrackerMuon())
continue;
940 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter2 = pOutputMuons->at(muonIndex2).matches().begin();
941 chamberIter2 != pOutputMuons->at(muonIndex2).matches().end(); ++chamberIter2 )
944 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter2->segmentMatches.begin();
945 segmentIter2 != chamberIter2->segmentMatches.end(); ++segmentIter2 )
947 if(segmentIter2->isMask())
continue;
948 if(fabs(segmentIter2->x - segmentIter1->x ) < 1E-3 &&
949 fabs(segmentIter2->y - segmentIter1->y ) < 1E-3 &&
950 fabs(segmentIter2->dXdZ - segmentIter1->dXdZ ) < 1E-3 &&
951 fabs(segmentIter2->dYdZ - segmentIter1->dYdZ ) < 1E-3 &&
952 fabs(segmentIter2->xErr - segmentIter1->xErr ) < 1E-3 &&
953 fabs(segmentIter2->yErr - segmentIter1->yErr ) < 1E-3 &&
954 fabs(segmentIter2->dXdZErr - segmentIter1->dXdZErr) < 1E-3 &&
955 fabs(segmentIter2->dYdZErr - segmentIter1->dYdZErr) < 1E-3)
956 arbitrationPairs.push_back(std::make_pair(&(*chamberIter2), &(*segmentIter2)));
963 if(arbitrationPairs.empty())
continue;
964 if(arbitrationPairs.size()==1) {
979 for(
unsigned int it = 0; it < arbitrationPairs.size(); ++it )
987 if(cscid.
ring() == 4)
988 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter1->segmentMatches.begin();
989 segmentIter2 != chamberIter1->segmentMatches.end(); ++segmentIter2 ) {
990 if( segmentIter1->cscSegmentRef.isNonnull() && segmentIter2->cscSegmentRef.isNonnull() )
992 (segmentIter2->mask & 0x1e0000) &&
993 (segmentIter1->mask & 0x1e0000) )
1002 if(chamberPairs.empty())
continue;
1003 if(chamberPairs.size()==1) {
1022 for(
int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
1024 stationPairs.clear();
1027 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter = pOutputMuons->at(muonIndex1).matches().begin();
1028 chamberIter != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter )
1030 if(!(chamberIter->station()==
stationIndex && chamberIter->detector()==detectorIndex))
continue;
1031 if(chamberIter->segmentMatches.empty())
continue;
1033 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter = chamberIter->segmentMatches.begin();
1034 segmentIter != chamberIter->segmentMatches.end(); ++segmentIter )
1035 stationPairs.push_back(std::make_pair(&(*chamberIter), &(*segmentIter)));
1038 if(stationPairs.empty())
continue;
1039 if(stationPairs.size()==1) {
1078 throw cms::Exception(
"FatalError") <<
"Failed to compute muon isolation information for a muon with undefined references to tracks";
1086 if(caloDeps.size()!=3) {
1087 LogTrace(
"MuonIdentification") <<
"Failed to fill vector of calorimeter isolation deposits!";
1131 double energy =
sqrt(track.
p() * track.
p() + 0.011163691);
1144 if ( muonId.
sector() <= 12 )
1146 if ( muonId.
sector() == 13 ) phi = 3/6.*
M_PI;
1147 if ( muonId.
sector() == 14 ) phi = 9/6.*
M_PI;
1161 if ( muon.
matches().empty() ){
1164 return muon.
innerTrack()->outerPosition().phi();
1199 if (trackBAD || staBAD || glbBAD )
1201 edm::LogWarning(
"muonIDbadLinks") <<
"Global muon links to constituent tracks are invalid: trkBad "
1202 <<trackBAD <<
" standaloneBad "<<staBAD<<
" globalBad "<<glbBAD
1203 <<
". 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.
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
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)
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.
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
virtual double eta() const
momentum pseudorapidity
MuonTime time() const
get timing information
virtual void beginRun(edm::Run &, const edm::EventSetup &)
std::vector< Muon > MuonCollection
collection of Muon objects
math::XYZPoint trkGlobPosAtHcal
float ecal_time
Calorimeter timing.
float ho
energy deposited in crossed HO towers
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 &)
DetId hcal_id
DetId of the central HCAL tower with smallest depth.
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
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
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)
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
virtual double pt() const
transverse momentum
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.
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=4., const double tune2=6., const double dptcut=-1.)
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 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.
virtual void produce(edm::Event &, const edm::EventSetup &)
virtual double phi() const
momentum azimuthal angle
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
reco::TrackRef globalTrack() const
get the combined track
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track