38 #include <boost/regex.hpp>
57 muIsoExtractorCalo_(0),muIsoExtractorTrack_(0),muIsoExtractorJet_(0)
59 produces<reco::MuonCollection>();
60 produces<reco::CaloMuonCollection>();
61 produces<reco::MuonTimeExtraMap>(
"combined");
62 produces<reco::MuonTimeExtraMap>(
"dt");
63 produces<reco::MuonTimeExtraMap>(
"csc");
94 if (fillCaloCompatibility_){
103 std::string caloExtractorName = caloExtractorPSet.
getParameter<std::string>(
"ComponentName");
107 std::string trackExtractorName = trackExtractorPSet.
getParameter<std::string>(
"ComponentName");
111 std::string jetExtractorName = jetExtractorPSet.
getParameter<std::string>(
"ComponentName");
114 if (fillIsolation_ && writeIsoDeposits_){
130 throw cms::Exception(
"ConfigurationError") <<
"Number of input collection labels is different from number of types. " <<
131 "For each collection label there should be exactly one collection type specified.";
133 throw cms::Exception(
"ConfigurationError") <<
"Number of input collections should be from 1 to 4.";
137 <<
"========================================================================\n"
138 <<
"Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
139 <<
"========================================================================\n";
140 if (fillGlobalTrackQuality_){
211 LogTrace(
"MuonIdentification") <<
"Creating a muon from a track " << track.
get()->pt() <<
212 " Pt (GeV), eta: " << track.
get()->eta();
216 aMuon.setInnerTrack( track );
219 aMuon.setOuterTrack( track );
222 aMuon.setGlobalTrack( track );
243 LogTrace(
"MuonIdentification") <<
"Creating a muon from a link to tracks object";
263 LogTrace(
"MuonIdentification") <<
"Skipped low momentum track (Pt,P): " << track.
pt() <<
264 ", " << track.
p() <<
" GeV";
270 LogTrace(
"MuonIdentification") <<
"Skipped track with large pseudo rapidity (Eta: " << track.
eta() <<
" )";
278 switch (
id.det() ) {
280 switch (
id.subdetId() ) {
284 return detId.
rawId();
305 int numberOfCommonDetIds = 0;
308 track.
extra()->recHits().
isNull() )
return numberOfCommonDetIds;
309 const std::vector<reco::MuonChamberMatch>& matches( muon.
matches() );
310 for ( std::vector<reco::MuonChamberMatch>::const_iterator
match = matches.begin();
313 if (
match->segmentMatches.empty() )
continue;
314 bool foundCommonDetId =
false;
324 foundCommonDetId =
true;
328 if ( foundCommonDetId ) {
329 numberOfCommonDetIds++;
333 return numberOfCommonDetIds;
349 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits()) > 10 ){
356 if ( goodMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() <
357 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() )
return false;
369 init(iEvent, iSetup);
395 outputMuons->push_back(*
muon);
400 if ( goodmuons.size()>1 ){
415 goodmuons[
j] =
false;
417 goodmuons[
i] =
false;
423 if ( !goodmuons[
i] )
continue;
426 if ( !goodmuons[
j] )
continue;
433 goodmuons[
j] =
false;
435 goodmuons[
i] =
false;
442 if ( !goodmuons[
i] )
continue;
447 for ( reco::MuonCollection::const_iterator
muon = outputMuons->begin();
448 muon != outputMuons->end(); ++
muon )
454 outputMuons->push_back(
makeMuon( *links ) );
462 LogTrace(
"MuonIdentification") <<
"Creating tracker muons";
467 bool splitTrack =
false;
470 std::vector<TrackDetectorAssociator::Direction>
directions;
477 for ( std::vector<TrackDetectorAssociator::Direction>::const_iterator direction = directions.begin();
478 direction != directions.end(); ++direction )
484 fillMuonId(iEvent, iSetup, trackerMuon, *direction);
498 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
499 muon != outputMuons->end(); ++
muon )
510 LogTrace(
"MuonIdentification") <<
"Found a corresponding global muon. Set energy, matches and move on";
515 if ( goodTrackerMuon ){
516 outputMuons->push_back( trackerMuon );
518 LogTrace(
"MuonIdentification") <<
"track failed minimal number of muon matches requirement";
521 caloMuons->push_back( caloMuon );
530 LogTrace(
"MuonIdentification") <<
"Looking for new muons among stand alone muon tracks";
535 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
536 muon != outputMuons->end(); ++
muon )
538 if ( !
muon->standAloneMuon().isNull() ) {
553 LogTrace(
"MuonIdentification") <<
"Found associated tracker muon. Set a reference and move on";
562 LogTrace(
"MuonIdentification") <<
"No associated stand alone track is found. Making a muon";
563 outputMuons->push_back(
makeMuon(iEvent, iSetup,
570 LogTrace(
"MuonIdentification") <<
"Dress up muons if it's necessary";
572 int nMuons=outputMuons->size();
574 std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
575 std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
576 std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
577 std::vector<reco::IsoDeposit> trackDepColl(nMuons);
578 std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
579 std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
580 std::vector<reco::IsoDeposit> hoDepColl(nMuons);
581 std::vector<reco::IsoDeposit> jetDepColl(nMuons);
585 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
muon != outputMuons->end(); ++
muon )
594 if (
muon->isStandAloneMuon() ) {
600 LogTrace(
"MuonIdentification") <<
"THIS SHOULD NEVER HAPPEN";
617 trackDepColl[i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
634 muon->setTime( muonTime);
635 dtTimeColl[
i] = dtTime;
636 cscTimeColl[
i] = cscTime;
637 combinedTimeColl[
i] = combinedTime;
643 LogTrace(
"MuonIdentification") <<
"number of muons produced: " << outputMuons->size();
649 filler.
insert(muonHandle, combinedTimeColl.begin(), combinedTimeColl.end());
651 fillerDT.
insert(muonHandle, dtTimeColl.begin(), dtTimeColl.end());
653 fillerCSC.
insert(muonHandle, cscTimeColl.begin(), cscTimeColl.end());
656 iEvent.
put(muonTimeMap,
"combined");
657 iEvent.
put(muonTimeMapDT,
"dt");
658 iEvent.
put(muonTimeMapCSC,
"csc");
661 trackDepFiller.
insert(muonHandle, trackDepColl.begin(), trackDepColl.end());
662 trackDepFiller.
fill();
664 ecalDepFiller.
insert(muonHandle, ecalDepColl.begin(), ecalDepColl.end());
665 ecalDepFiller.
fill();
667 hcalDepFiller.
insert(muonHandle, hcalDepColl.begin(), hcalDepColl.end());
668 hcalDepFiller.
fill();
670 hoDepFiller.
insert(muonHandle, hoDepColl.begin(), hoDepColl.end());
673 jetDepFiller.
insert(muonHandle, jetDepColl.begin(), jetDepColl.end());
678 iEvent.
put(caloMuons);
686 muon.
pt()<5 && fabs(muon.
eta())<1.5 &&
704 throw cms::Exception(
"FatalError") <<
"Failed to fill muon id information for a muon with undefined references to tracks";
726 for(std::vector<const EcalRecHit*>::const_iterator
hit=info.
ecalRecHits.begin();
728 if ((*hit)->id() != emMaxId)
continue;
729 muonEnergy.
emMax = (*hit)->energy();
733 for(std::vector<const HBHERecHit*>::const_iterator
hit=info.
hcalRecHits.begin();
735 if ((*hit)->id() != hadMaxId)
continue;
736 muonEnergy.
hadMax = (*hit)->energy();
744 std::vector<reco::MuonChamberMatch> muonChamberMatches;
745 unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
746 for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.
chambers.begin();
747 chamber!=info.
chambers.end(); chamber++ )
751 LocalError localError = chamber->tState.localError().positionError();
752 matchedChamber.
x = chamber->tState.localPosition().x();
753 matchedChamber.
y = chamber->tState.localPosition().y();
754 matchedChamber.
xErr =
sqrt( localError.
xx() );
755 matchedChamber.
yErr =
sqrt( localError.
yy() );
757 matchedChamber.
dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
758 matchedChamber.
dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
761 matchedChamber.
dXdZErr = trajectoryCovMatrix(1,1)>0?
sqrt(trajectoryCovMatrix(1,1)):0;
762 matchedChamber.
dYdZErr = trajectoryCovMatrix(2,2)>0?
sqrt(trajectoryCovMatrix(2,2)):0;
764 matchedChamber.
edgeX = chamber->localDistanceX;
765 matchedChamber.
edgeY = chamber->localDistanceY;
767 matchedChamber.
id = chamber->id;
768 if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
771 for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
772 segment != chamber->segments.end(); segment++ )
775 matchedSegment.
x = segment->segmentLocalPosition.x();
776 matchedSegment.
y = segment->segmentLocalPosition.y();
777 matchedSegment.
dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
778 matchedSegment.
dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
779 matchedSegment.
xErr = segment->segmentLocalErrorXX>0?
sqrt(segment->segmentLocalErrorXX):0;
780 matchedSegment.
yErr = segment->segmentLocalErrorYY>0?
sqrt(segment->segmentLocalErrorYY):0;
781 matchedSegment.
dXdZErr = segment->segmentLocalErrorDxDz>0?
sqrt(segment->segmentLocalErrorDxDz):0;
782 matchedSegment.
dYdZErr = segment->segmentLocalErrorDyDz>0?
sqrt(segment->segmentLocalErrorDyDz):0;
783 matchedSegment.
t0 = segment->t0;
784 matchedSegment.
mask = 0;
787 matchedSegment.
hasZed_ = segment->hasZed;
788 matchedSegment.
hasPhi_ = segment->hasPhi;
790 bool matchedX =
false;
791 bool matchedY =
false;
792 LogTrace(
"MuonIdentification") <<
" matching local x, segment x: " << matchedSegment.
x <<
793 ", chamber x: " << matchedChamber.
x <<
", max: " <<
maxAbsDx_;
794 LogTrace(
"MuonIdentification") <<
" matching local y, segment y: " << matchedSegment.
y <<
795 ", chamber y: " << matchedChamber.
y <<
", max: " <<
maxAbsDy_;
796 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 )
797 LogTrace(
"MuonIdentification") <<
" xpull: " <<
798 fabs(matchedSegment.
x - matchedChamber.
x)/
sqrt(
pow(matchedSegment.
xErr,2) +
pow(matchedChamber.
xErr,2));
799 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 )
800 LogTrace(
"MuonIdentification") <<
" ypull: " <<
801 fabs(matchedSegment.
y - matchedChamber.
y)/
sqrt(
pow(matchedSegment.
yErr,2) +
pow(matchedChamber.
yErr,2));
803 if (fabs(matchedSegment.
x - matchedChamber.
x) <
maxAbsDx_) matchedX =
true;
804 if (fabs(matchedSegment.
y - matchedChamber.
y) <
maxAbsDy_) matchedY =
true;
805 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 &&
807 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 &&
809 if (matchedX && matchedY) matchedChamber.
segmentMatches.push_back(matchedSegment);
811 muonChamberMatches.push_back(matchedChamber);
815 LogTrace(
"MuonIdentification") <<
"number of muon chambers: " << aMuon.
matches().size() <<
"\n"
816 <<
"number of chambers with segments according to the associator requirements: " <<
817 nubmerOfMatchesAccordingToTrackAssociator;
818 LogTrace(
"MuonIdentification") <<
"number of segment matches with the producer requirements: " <<
829 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs;
830 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs;
831 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs;
834 for(
unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
837 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter1 = pOutputMuons->at(muonIndex1).matches().begin();
838 chamberIter1 != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter1 )
840 if(chamberIter1->segmentMatches.empty())
continue;
841 chamberPairs.clear();
844 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter1 = chamberIter1->segmentMatches.begin();
845 segmentIter1 != chamberIter1->segmentMatches.end(); ++segmentIter1 )
847 chamberPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
848 if(!segmentIter1->isMask())
850 arbitrationPairs.clear();
851 arbitrationPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
857 if (pOutputMuons->at(muonIndex1).isTrackerMuon()) {
859 for(
unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
862 if (! pOutputMuons->at(muonIndex2).isTrackerMuon())
continue;
864 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter2 = pOutputMuons->at(muonIndex2).matches().begin();
865 chamberIter2 != pOutputMuons->at(muonIndex2).matches().end(); ++chamberIter2 )
868 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter2->segmentMatches.begin();
869 segmentIter2 != chamberIter2->segmentMatches.end(); ++segmentIter2 )
871 if(segmentIter2->isMask())
continue;
872 if(fabs(segmentIter2->x - segmentIter1->x ) < 1E-3 &&
873 fabs(segmentIter2->y - segmentIter1->y ) < 1E-3 &&
874 fabs(segmentIter2->dXdZ - segmentIter1->dXdZ ) < 1E-3 &&
875 fabs(segmentIter2->dYdZ - segmentIter1->dYdZ ) < 1E-3 &&
876 fabs(segmentIter2->xErr - segmentIter1->xErr ) < 1E-3 &&
877 fabs(segmentIter2->yErr - segmentIter1->yErr ) < 1E-3 &&
878 fabs(segmentIter2->dXdZErr - segmentIter1->dXdZErr) < 1E-3 &&
879 fabs(segmentIter2->dYdZErr - segmentIter1->dYdZErr) < 1E-3)
880 arbitrationPairs.push_back(std::make_pair(&(*chamberIter2), &(*segmentIter2)));
887 if(arbitrationPairs.empty())
continue;
888 if(arbitrationPairs.size()==1) {
903 for(
unsigned int it = 0; it < arbitrationPairs.size(); ++it )
911 if(cscid.
ring() == 4)
912 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter1->segmentMatches.begin();
913 segmentIter2 != chamberIter1->segmentMatches.end(); ++segmentIter2 ) {
914 if( segmentIter1->cscSegmentRef.isNonnull() && segmentIter2->cscSegmentRef.isNonnull() )
916 (segmentIter2->mask & 0x1e0000) &&
917 (segmentIter1->mask & 0x1e0000) )
926 if(chamberPairs.empty())
continue;
927 if(chamberPairs.size()==1) {
946 for(
int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
948 stationPairs.clear();
951 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter = pOutputMuons->at(muonIndex1).matches().begin();
952 chamberIter != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter )
954 if(!(chamberIter->station()==
stationIndex && chamberIter->detector()==detectorIndex))
continue;
955 if(chamberIter->segmentMatches.empty())
continue;
957 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter = chamberIter->segmentMatches.begin();
958 segmentIter != chamberIter->segmentMatches.end(); ++segmentIter )
959 stationPairs.push_back(std::make_pair(&(*chamberIter), &(*segmentIter)));
962 if(stationPairs.empty())
continue;
963 if(stationPairs.size()==1) {
1002 throw cms::Exception(
"FatalError") <<
"Failed to compute muon isolation information for a muon with undefined references to tracks";
1010 if(caloDeps.size()!=3) {
1011 LogTrace(
"MuonIdentification") <<
"Failed to fill vector of calorimeter isolation deposits!";
1055 double energy =
sqrt(track.
p() * track.
p() + 0.011163691);
1068 if ( muonId.
sector() <= 12 )
1070 if ( muonId.
sector() == 13 ) phi = 3/6.*
M_PI;
1071 if ( muonId.
sector() == 14 ) phi = 9/6.*
M_PI;
1085 if ( muon.
matches().empty() ){
1088 return muon.
innerTrack()->outerPosition().phi();
1113 if (trackBAD || staBAD || glbBAD )
1115 edm::LogWarning(
"muonIDbadLinks") <<
"Global muon links to constituent tracks are invalid: trkBad "
1116 <<trackBAD <<
" standaloneBad "<<staBAD<<
" globalBad "<<glbBAD
1117 <<
". 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
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
TrackAssociatorParameters parameters_
bool isCaloCompatibilityValid() const
void fillArbitrationInfo(reco::MuonCollection *)
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
math::XYZPoint ecal_position
Trajectory position at the calorimeter.
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
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
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 &)
static const unsigned int BelongsToTrackByDX
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.
math::XYZPoint hcal_position
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.
double sigmaThresholdToFillCandidateP4WithGlobalFit_
static const unsigned int StandAloneMuon
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)
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
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track