38 #include <boost/regex.hpp>
59 muIsoExtractorCalo_(0),muIsoExtractorTrack_(0),muIsoExtractorJet_(0)
61 produces<reco::MuonCollection>();
62 produces<reco::CaloMuonCollection>();
63 produces<reco::MuonTimeExtraMap>(
"combined");
64 produces<reco::MuonTimeExtraMap>(
"dt");
65 produces<reco::MuonTimeExtraMap>(
"csc");
85 if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.
getParameter<
bool>(
"fillTrackerKink");
100 if (fillCaloCompatibility_){
109 std::string caloExtractorName = caloExtractorPSet.
getParameter<std::string>(
"ComponentName");
113 std::string trackExtractorName = trackExtractorPSet.
getParameter<std::string>(
"ComponentName");
117 std::string jetExtractorName = jetExtractorPSet.
getParameter<std::string>(
"ComponentName");
120 if (fillIsolation_ && writeIsoDeposits_){
136 throw cms::Exception(
"ConfigurationError") <<
"Number of input collection labels is different from number of types. " <<
137 "For each collection label there should be exactly one collection type specified.";
139 throw cms::Exception(
"ConfigurationError") <<
"Number of input collections should be from 1 to 4.";
143 <<
"========================================================================\n"
144 <<
"Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
145 <<
"========================================================================\n";
146 if (fillGlobalTrackQuality_){
150 if (fillTrackerKink_) {
223 LogTrace(
"MuonIdentification") <<
"Creating a muon from a track " << track.
get()->pt() <<
224 " Pt (GeV), eta: " << track.
get()->eta();
228 aMuon.setInnerTrack( track );
231 aMuon.setOuterTrack( track );
234 aMuon.setGlobalTrack( track );
255 LogTrace(
"MuonIdentification") <<
"Creating a muon from a link to tracks object";
275 LogTrace(
"MuonIdentification") <<
"Skipped low momentum track (Pt,P): " << track.
pt() <<
276 ", " << track.
p() <<
" GeV";
282 LogTrace(
"MuonIdentification") <<
"Skipped track with large pseudo rapidity (Eta: " << track.
eta() <<
" )";
290 switch (
id.det() ) {
292 switch (
id.subdetId() ) {
296 return detId.
rawId();
317 int numberOfCommonDetIds = 0;
320 track.
extra()->recHits().
isNull() )
return numberOfCommonDetIds;
321 const std::vector<reco::MuonChamberMatch>& matches( muon.
matches() );
322 for ( std::vector<reco::MuonChamberMatch>::const_iterator
match = matches.begin();
325 if (
match->segmentMatches.empty() )
continue;
326 bool foundCommonDetId =
false;
336 foundCommonDetId =
true;
340 if ( foundCommonDetId ) {
341 numberOfCommonDetIds++;
345 return numberOfCommonDetIds;
361 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits()) > 10 ){
368 if ( goodMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() <
369 badMuon.
globalTrack()->hitPattern().numberOfValidMuonHits() )
return false;
381 init(iEvent, iSetup);
407 outputMuons->push_back(*
muon);
412 if ( goodmuons.size()>1 ){
427 goodmuons[
j] =
false;
429 goodmuons[
i] =
false;
435 if ( !goodmuons[
i] )
continue;
438 if ( !goodmuons[
j] )
continue;
445 goodmuons[
j] =
false;
447 goodmuons[
i] =
false;
454 if ( !goodmuons[
i] )
continue;
459 for ( reco::MuonCollection::const_iterator
muon = outputMuons->begin();
460 muon != outputMuons->end(); ++
muon )
466 outputMuons->push_back(
makeMuon( *links ) );
474 LogTrace(
"MuonIdentification") <<
"Creating tracker muons";
479 bool splitTrack =
false;
482 std::vector<TrackDetectorAssociator::Direction>
directions;
489 for ( std::vector<TrackDetectorAssociator::Direction>::const_iterator direction = directions.begin();
490 direction != directions.end(); ++direction )
496 fillMuonId(iEvent, iSetup, trackerMuon, *direction);
510 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
511 muon != outputMuons->end(); ++
muon )
522 LogTrace(
"MuonIdentification") <<
"Found a corresponding global muon. Set energy, matches and move on";
527 if ( goodTrackerMuon ){
528 outputMuons->push_back( trackerMuon );
530 LogTrace(
"MuonIdentification") <<
"track failed minimal number of muon matches requirement";
533 caloMuons->push_back( caloMuon );
542 LogTrace(
"MuonIdentification") <<
"Looking for new muons among stand alone muon tracks";
547 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
548 muon != outputMuons->end(); ++
muon )
550 if ( !
muon->standAloneMuon().isNull() ) {
565 LogTrace(
"MuonIdentification") <<
"Found associated tracker muon. Set a reference and move on";
574 LogTrace(
"MuonIdentification") <<
"No associated stand alone track is found. Making a muon";
575 outputMuons->push_back(
makeMuon(iEvent, iSetup,
582 LogTrace(
"MuonIdentification") <<
"Dress up muons if it's necessary";
584 int nMuons=outputMuons->size();
586 std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
587 std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
588 std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
589 std::vector<reco::IsoDeposit> trackDepColl(nMuons);
590 std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
591 std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
592 std::vector<reco::IsoDeposit> hoDepColl(nMuons);
593 std::vector<reco::IsoDeposit> jetDepColl(nMuons);
597 for ( reco::MuonCollection::iterator
muon = outputMuons->begin();
muon != outputMuons->end(); ++
muon )
606 if (
muon->isStandAloneMuon() ) {
612 LogTrace(
"MuonIdentification") <<
"THIS SHOULD NEVER HAPPEN";
633 trackDepColl[i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
650 muon->setTime( muonTime);
651 dtTimeColl[
i] = dtTime;
652 cscTimeColl[
i] = cscTime;
653 combinedTimeColl[
i] = combinedTime;
659 LogTrace(
"MuonIdentification") <<
"number of muons produced: " << outputMuons->size();
665 filler.
insert(muonHandle, combinedTimeColl.begin(), combinedTimeColl.end());
667 fillerDT.
insert(muonHandle, dtTimeColl.begin(), dtTimeColl.end());
669 fillerCSC.
insert(muonHandle, cscTimeColl.begin(), cscTimeColl.end());
672 iEvent.
put(muonTimeMap,
"combined");
673 iEvent.
put(muonTimeMapDT,
"dt");
674 iEvent.
put(muonTimeMapCSC,
"csc");
677 trackDepFiller.
insert(muonHandle, trackDepColl.begin(), trackDepColl.end());
678 trackDepFiller.
fill();
680 ecalDepFiller.
insert(muonHandle, ecalDepColl.begin(), ecalDepColl.end());
681 ecalDepFiller.
fill();
683 hcalDepFiller.
insert(muonHandle, hcalDepColl.begin(), hcalDepColl.end());
684 hcalDepFiller.
fill();
686 hoDepFiller.
insert(muonHandle, hoDepColl.begin(), hoDepColl.end());
689 jetDepFiller.
insert(muonHandle, jetDepColl.begin(), jetDepColl.end());
694 iEvent.
put(caloMuons);
702 muon.
pt()<5 && fabs(muon.
eta())<1.5 &&
720 throw cms::Exception(
"FatalError") <<
"Failed to fill muon id information for a muon with undefined references to tracks";
742 for(std::vector<const EcalRecHit*>::const_iterator
hit=info.
ecalRecHits.begin();
744 if ((*hit)->id() != emMaxId)
continue;
745 muonEnergy.
emMax = (*hit)->energy();
749 for(std::vector<const HBHERecHit*>::const_iterator
hit=info.
hcalRecHits.begin();
751 if ((*hit)->id() != hadMaxId)
continue;
752 muonEnergy.
hadMax = (*hit)->energy();
760 std::vector<reco::MuonChamberMatch> muonChamberMatches;
761 unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
762 for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.
chambers.begin();
763 chamber!=info.
chambers.end(); chamber++ )
767 LocalError localError = chamber->tState.localError().positionError();
768 matchedChamber.
x = chamber->tState.localPosition().x();
769 matchedChamber.
y = chamber->tState.localPosition().y();
770 matchedChamber.
xErr =
sqrt( localError.
xx() );
771 matchedChamber.
yErr =
sqrt( localError.
yy() );
773 matchedChamber.
dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
774 matchedChamber.
dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
777 matchedChamber.
dXdZErr = trajectoryCovMatrix(1,1)>0?
sqrt(trajectoryCovMatrix(1,1)):0;
778 matchedChamber.
dYdZErr = trajectoryCovMatrix(2,2)>0?
sqrt(trajectoryCovMatrix(2,2)):0;
780 matchedChamber.
edgeX = chamber->localDistanceX;
781 matchedChamber.
edgeY = chamber->localDistanceY;
783 matchedChamber.
id = chamber->id;
784 if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
787 for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
788 segment != chamber->segments.end(); segment++ )
791 matchedSegment.
x = segment->segmentLocalPosition.x();
792 matchedSegment.
y = segment->segmentLocalPosition.y();
793 matchedSegment.
dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
794 matchedSegment.
dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
795 matchedSegment.
xErr = segment->segmentLocalErrorXX>0?
sqrt(segment->segmentLocalErrorXX):0;
796 matchedSegment.
yErr = segment->segmentLocalErrorYY>0?
sqrt(segment->segmentLocalErrorYY):0;
797 matchedSegment.
dXdZErr = segment->segmentLocalErrorDxDz>0?
sqrt(segment->segmentLocalErrorDxDz):0;
798 matchedSegment.
dYdZErr = segment->segmentLocalErrorDyDz>0?
sqrt(segment->segmentLocalErrorDyDz):0;
799 matchedSegment.
t0 = segment->t0;
800 matchedSegment.
mask = 0;
803 matchedSegment.
hasZed_ = segment->hasZed;
804 matchedSegment.
hasPhi_ = segment->hasPhi;
806 bool matchedX =
false;
807 bool matchedY =
false;
808 LogTrace(
"MuonIdentification") <<
" matching local x, segment x: " << matchedSegment.
x <<
809 ", chamber x: " << matchedChamber.
x <<
", max: " <<
maxAbsDx_;
810 LogTrace(
"MuonIdentification") <<
" matching local y, segment y: " << matchedSegment.
y <<
811 ", chamber y: " << matchedChamber.
y <<
", max: " <<
maxAbsDy_;
812 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 )
813 LogTrace(
"MuonIdentification") <<
" xpull: " <<
814 fabs(matchedSegment.
x - matchedChamber.
x)/
sqrt(
pow(matchedSegment.
xErr,2) +
pow(matchedChamber.
xErr,2));
815 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 )
816 LogTrace(
"MuonIdentification") <<
" ypull: " <<
817 fabs(matchedSegment.
y - matchedChamber.
y)/
sqrt(
pow(matchedSegment.
yErr,2) +
pow(matchedChamber.
yErr,2));
819 if (fabs(matchedSegment.
x - matchedChamber.
x) <
maxAbsDx_) matchedX =
true;
820 if (fabs(matchedSegment.
y - matchedChamber.
y) <
maxAbsDy_) matchedY =
true;
821 if (matchedSegment.
xErr>0 && matchedChamber.
xErr>0 &&
823 if (matchedSegment.
yErr>0 && matchedChamber.
yErr>0 &&
825 if (matchedX && matchedY) matchedChamber.
segmentMatches.push_back(matchedSegment);
827 muonChamberMatches.push_back(matchedChamber);
831 LogTrace(
"MuonIdentification") <<
"number of muon chambers: " << aMuon.
matches().size() <<
"\n"
832 <<
"number of chambers with segments according to the associator requirements: " <<
833 nubmerOfMatchesAccordingToTrackAssociator;
834 LogTrace(
"MuonIdentification") <<
"number of segment matches with the producer requirements: " <<
845 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs;
846 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs;
847 std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs;
850 for(
unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
853 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter1 = pOutputMuons->at(muonIndex1).matches().begin();
854 chamberIter1 != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter1 )
856 if(chamberIter1->segmentMatches.empty())
continue;
857 chamberPairs.clear();
860 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter1 = chamberIter1->segmentMatches.begin();
861 segmentIter1 != chamberIter1->segmentMatches.end(); ++segmentIter1 )
863 chamberPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
864 if(!segmentIter1->isMask())
866 arbitrationPairs.clear();
867 arbitrationPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
873 if (pOutputMuons->at(muonIndex1).isTrackerMuon()) {
875 for(
unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
878 if (! pOutputMuons->at(muonIndex2).isTrackerMuon())
continue;
880 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter2 = pOutputMuons->at(muonIndex2).matches().begin();
881 chamberIter2 != pOutputMuons->at(muonIndex2).matches().end(); ++chamberIter2 )
884 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter2->segmentMatches.begin();
885 segmentIter2 != chamberIter2->segmentMatches.end(); ++segmentIter2 )
887 if(segmentIter2->isMask())
continue;
888 if(fabs(segmentIter2->x - segmentIter1->x ) < 1E-3 &&
889 fabs(segmentIter2->y - segmentIter1->y ) < 1E-3 &&
890 fabs(segmentIter2->dXdZ - segmentIter1->dXdZ ) < 1E-3 &&
891 fabs(segmentIter2->dYdZ - segmentIter1->dYdZ ) < 1E-3 &&
892 fabs(segmentIter2->xErr - segmentIter1->xErr ) < 1E-3 &&
893 fabs(segmentIter2->yErr - segmentIter1->yErr ) < 1E-3 &&
894 fabs(segmentIter2->dXdZErr - segmentIter1->dXdZErr) < 1E-3 &&
895 fabs(segmentIter2->dYdZErr - segmentIter1->dYdZErr) < 1E-3)
896 arbitrationPairs.push_back(std::make_pair(&(*chamberIter2), &(*segmentIter2)));
903 if(arbitrationPairs.empty())
continue;
904 if(arbitrationPairs.size()==1) {
919 for(
unsigned int it = 0; it < arbitrationPairs.size(); ++it )
927 if(cscid.
ring() == 4)
928 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter1->segmentMatches.begin();
929 segmentIter2 != chamberIter1->segmentMatches.end(); ++segmentIter2 ) {
930 if( segmentIter1->cscSegmentRef.isNonnull() && segmentIter2->cscSegmentRef.isNonnull() )
932 (segmentIter2->mask & 0x1e0000) &&
933 (segmentIter1->mask & 0x1e0000) )
942 if(chamberPairs.empty())
continue;
943 if(chamberPairs.size()==1) {
962 for(
int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
964 stationPairs.clear();
967 for( std::vector<reco::MuonChamberMatch>::iterator chamberIter = pOutputMuons->at(muonIndex1).matches().begin();
968 chamberIter != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter )
970 if(!(chamberIter->station()==
stationIndex && chamberIter->detector()==detectorIndex))
continue;
971 if(chamberIter->segmentMatches.empty())
continue;
973 for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter = chamberIter->segmentMatches.begin();
974 segmentIter != chamberIter->segmentMatches.end(); ++segmentIter )
975 stationPairs.push_back(std::make_pair(&(*chamberIter), &(*segmentIter)));
978 if(stationPairs.empty())
continue;
979 if(stationPairs.size()==1) {
1018 throw cms::Exception(
"FatalError") <<
"Failed to compute muon isolation information for a muon with undefined references to tracks";
1026 if(caloDeps.size()!=3) {
1027 LogTrace(
"MuonIdentification") <<
"Failed to fill vector of calorimeter isolation deposits!";
1071 double energy =
sqrt(track.
p() * track.
p() + 0.011163691);
1084 if ( muonId.
sector() <= 12 )
1086 if ( muonId.
sector() == 13 ) phi = 3/6.*
M_PI;
1087 if ( muonId.
sector() == 14 ) phi = 9/6.*
M_PI;
1101 if ( muon.
matches().empty() ){
1104 return muon.
innerTrack()->outerPosition().phi();
1139 if (trackBAD || staBAD || glbBAD )
1141 edm::LogWarning(
"muonIDbadLinks") <<
"Global muon links to constituent tracks are invalid: trkBad "
1142 <<trackBAD <<
" standaloneBad "<<staBAD<<
" globalBad "<<glbBAD
1143 <<
". 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
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::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
math::XYZPointF hcal_position
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.
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)
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
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track