CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
MuonIdProducer Class Reference

#include <MuonIdProducer.h>

Inheritance diagram for MuonIdProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef reco::Muon::MuonTrackType TrackType
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

virtual void beginRun (const edm::Run &, const edm::EventSetup &) override
 
 MuonIdProducer (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &) override
 
virtual ~MuonIdProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static double sectorPhi (const DetId &id)
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

unsigned int chamberId (const DetId &)
 
bool checkLinks (const reco::MuonTrackLinks *) const
 
void fillArbitrationInfo (reco::MuonCollection *)
 
void fillGlbQuality (edm::Event &, const edm::EventSetup &, reco::Muon &aMuon)
 
void fillMuonId (edm::Event &, const edm::EventSetup &, reco::Muon &, TrackDetectorAssociator::Direction direction=TrackDetectorAssociator::InsideOut)
 
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)
 
void fillTrackerKink (reco::Muon &aMuon)
 
void init (edm::Event &, const edm::EventSetup &)
 
bool isGoodRPCMuon (const reco::Muon &muon)
 
bool isGoodTrack (const reco::Track &track)
 
bool isGoodTrackerMuon (const reco::Muon &muon)
 
reco::CaloMuon makeCaloMuon (const reco::Muon &)
 
reco::Muon makeMuon (edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
 
reco::Muon makeMuon (const reco::MuonTrackLinks &links)
 
reco::Muon makeMuon (const reco::Track &track)
 
int overlap (const reco::Muon &muon, const reco::Track &track)
 
double phiOfMuonIneteractionRegion (const reco::Muon &muon) const
 

Private Attributes

bool addExtraSoftMuons_
 
bool arbClean_
 
double caloCut_
 
bool debugWithTruthMatching_
 
edm::Handle
< reco::TrackToTrackMap
dytCollectionHandle_
 
edm::EDGetTokenT
< reco::TrackToTrackMap
dytCollectionToken_
 
std::string ecalDepositName_
 
bool fillCaloCompatibility_
 
bool fillEnergy_
 
bool fillGlobalTrackQuality_
 
bool fillGlobalTrackRefits_
 
bool fillIsolation_
 
bool fillMatching_
 
bool fillTrackerKink_
 
edm::EDGetTokenT
< edm::ValueMap
< reco::MuonQuality > > 
glbQualToken_
 
edm::InputTag globalTrackQualityInputTag_
 
std::string hcalDepositName_
 
std::string hoDepositName_
 
edm::Handle
< reco::TrackCollection
innerTrackCollectionHandle_
 
edm::EDGetTokenT
< reco::TrackCollection
innerTrackCollectionToken_
 
std::vector< edm::InputTaginputCollectionLabels_
 
std::vector< std::string > inputCollectionTypes_
 
std::string jetDepositName_
 
edm::Handle
< reco::MuonTrackLinksCollection
linkCollectionHandle_
 
edm::EDGetTokenT
< reco::MuonTrackLinksCollection
linkCollectionToken_
 
double maxAbsDx_
 
double maxAbsDy_
 
double maxAbsEta_
 
double maxAbsPullX_
 
double maxAbsPullY_
 
MuonMeshmeshAlgo_
 
int minNumberOfMatches_
 
double minP_
 
double minPCaloMuon_
 
double minPt_
 
reco::isodeposit::IsoDepositExtractormuIsoExtractorCalo_
 
reco::isodeposit::IsoDepositExtractormuIsoExtractorJet_
 
reco::isodeposit::IsoDepositExtractormuIsoExtractorTrack_
 
MuonCaloCompatibility muonCaloCompatibility_
 
edm::Handle< reco::MuonCollectionmuonCollectionHandle_
 
edm::EDGetTokenT
< reco::MuonCollection
muonCollectionToken_
 
edm::Handle
< reco::TrackCollection
outerTrackCollectionHandle_
 
edm::EDGetTokenT
< reco::TrackCollection
outerTrackCollectionToken_
 
TrackAssociatorParameters parameters_
 
edm::Handle
< reco::TrackToTrackMap
pickyCollectionHandle_
 
edm::EDGetTokenT
< reco::TrackToTrackMap
pickyCollectionToken_
 
double ptThresholdToFillCandidateP4WithGlobalFit_
 
edm::EDGetTokenT
< RPCRecHitCollection
rpcHitToken_
 
double sigmaThresholdToFillCandidateP4WithGlobalFit_
 
MuonTimingFillertheTimingFiller_
 
edm::Handle
< reco::TrackToTrackMap
tpfmsCollectionHandle_
 
edm::EDGetTokenT
< reco::TrackToTrackMap
tpfmsCollectionToken_
 
TrackDetectorAssociator trackAssociator_
 
std::string trackDepositName_
 
std::auto_ptr< MuonKinkFindertrackerKinkFinder_
 
bool writeIsoDeposits_
 

Additional Inherited Members

- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 67 of file MuonIdProducer.h.

Member Typedef Documentation

Definition at line 69 of file MuonIdProducer.h.

Constructor & Destructor Documentation

MuonIdProducer::MuonIdProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 55 of file MuonIdProducer.cc.

References addExtraSoftMuons_, arbClean_, caloCut_, MuonCaloCompatibility::configure(), edm::EDConsumerBase::consumesCollector(), debugWithTruthMatching_, dytCollectionToken_, ecalDepositName_, edm::hlt::Exception, fillCaloCompatibility_, fillEnergy_, fillGlobalTrackQuality_, fillGlobalTrackRefits_, fillIsolation_, fillMatching_, fillTrackerKink_, reco::get(), edm::ParameterSet::getParameter(), glbQualToken_, globalTrackQualityInputTag_, hcalDepositName_, hoDepositName_, i, innerTrackCollectionToken_, inputCollectionLabels_, inputCollectionTypes_, jetDepositName_, linkCollectionToken_, TrackAssociatorParameters::loadParameters(), maxAbsDx_, maxAbsDy_, maxAbsEta_, maxAbsPullX_, maxAbsPullY_, meshAlgo_, minNumberOfMatches_, minP_, minPCaloMuon_, minPt_, muIsoExtractorCalo_, muIsoExtractorJet_, muIsoExtractorTrack_, muonCaloCompatibility_, muonCollectionToken_, outerTrackCollectionToken_, Parameters::parameters, parameters_, pickyCollectionToken_, ptThresholdToFillCandidateP4WithGlobalFit_, rpcHitToken_, sigmaThresholdToFillCandidateP4WithGlobalFit_, AlCaHLTBitMon_QueryRunRegistry::string, theTimingFiller_, tpfmsCollectionToken_, trackDepositName_, trackerKinkFinder_, and writeIsoDeposits_.

55  :
57 {
58  produces<reco::MuonCollection>();
59  produces<reco::CaloMuonCollection>();
60  produces<reco::MuonTimeExtraMap>("combined");
61  produces<reco::MuonTimeExtraMap>("dt");
62  produces<reco::MuonTimeExtraMap>("csc");
63 
64  minPt_ = iConfig.getParameter<double>("minPt");
65  minP_ = iConfig.getParameter<double>("minP");
66  minPCaloMuon_ = iConfig.getParameter<double>("minPCaloMuon");
67  minNumberOfMatches_ = iConfig.getParameter<int>("minNumberOfMatches");
68  addExtraSoftMuons_ = iConfig.getParameter<bool>("addExtraSoftMuons");
69  maxAbsEta_ = iConfig.getParameter<double>("maxAbsEta");
70  maxAbsDx_ = iConfig.getParameter<double>("maxAbsDx");
71  maxAbsPullX_ = iConfig.getParameter<double>("maxAbsPullX");
72  maxAbsDy_ = iConfig.getParameter<double>("maxAbsDy");
73  maxAbsPullY_ = iConfig.getParameter<double>("maxAbsPullY");
74  fillCaloCompatibility_ = iConfig.getParameter<bool>("fillCaloCompatibility");
75  fillEnergy_ = iConfig.getParameter<bool>("fillEnergy");
76  fillMatching_ = iConfig.getParameter<bool>("fillMatching");
77  fillIsolation_ = iConfig.getParameter<bool>("fillIsolation");
78  writeIsoDeposits_ = iConfig.getParameter<bool>("writeIsoDeposits");
79  fillGlobalTrackQuality_ = iConfig.getParameter<bool>("fillGlobalTrackQuality");
80  fillGlobalTrackRefits_ = iConfig.getParameter<bool>("fillGlobalTrackRefits");
81  //SK: (maybe temporary) run it only if the global is also run
82  fillTrackerKink_ = false;
83  if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.getParameter<bool>("fillTrackerKink");
84 
85  ptThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("ptThresholdToFillCandidateP4WithGlobalFit");
86  sigmaThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("sigmaThresholdToFillCandidateP4WithGlobalFit");
87  caloCut_ = iConfig.getParameter<double>("minCaloCompatibility"); //CaloMuons
88  arbClean_ = iConfig.getParameter<bool>("runArbitrationCleaner"); // muon mesh
89 
90  // Load TrackDetectorAssociator parameters
91  edm::ParameterSet parameters = iConfig.getParameter<edm::ParameterSet>("TrackAssociatorParameters");
92  parameters_.loadParameters( parameters );
93 
94  // Load parameters for the TimingFiller
95  edm::ParameterSet timingParameters = iConfig.getParameter<edm::ParameterSet>("TimingFillerParameters");
96  theTimingFiller_ = new MuonTimingFiller(timingParameters,consumesCollector());
97 
98 
99  if (fillCaloCompatibility_){
100  // Load MuonCaloCompatibility parameters
101  parameters = iConfig.getParameter<edm::ParameterSet>("MuonCaloCompatibility");
102  muonCaloCompatibility_.configure( parameters );
103  }
104 
105  if (fillIsolation_){
106  // Load MuIsoExtractor parameters
107  edm::ParameterSet caloExtractorPSet = iConfig.getParameter<edm::ParameterSet>("CaloExtractorPSet");
108  std::string caloExtractorName = caloExtractorPSet.getParameter<std::string>("ComponentName");
109  muIsoExtractorCalo_ = IsoDepositExtractorFactory::get()->create( caloExtractorName, caloExtractorPSet,consumesCollector());
110 
111  edm::ParameterSet trackExtractorPSet = iConfig.getParameter<edm::ParameterSet>("TrackExtractorPSet");
112  std::string trackExtractorName = trackExtractorPSet.getParameter<std::string>("ComponentName");
113  muIsoExtractorTrack_ = IsoDepositExtractorFactory::get()->create( trackExtractorName, trackExtractorPSet,consumesCollector());
114 
115  edm::ParameterSet jetExtractorPSet = iConfig.getParameter<edm::ParameterSet>("JetExtractorPSet");
116  std::string jetExtractorName = jetExtractorPSet.getParameter<std::string>("ComponentName");
117  muIsoExtractorJet_ = IsoDepositExtractorFactory::get()->create( jetExtractorName, jetExtractorPSet,consumesCollector());
118  }
119  if (fillIsolation_ && writeIsoDeposits_){
120  trackDepositName_ = iConfig.getParameter<std::string>("trackDepositName");
121  produces<reco::IsoDepositMap>(trackDepositName_);
122  ecalDepositName_ = iConfig.getParameter<std::string>("ecalDepositName");
123  produces<reco::IsoDepositMap>(ecalDepositName_);
124  hcalDepositName_ = iConfig.getParameter<std::string>("hcalDepositName");
125  produces<reco::IsoDepositMap>(hcalDepositName_);
126  hoDepositName_ = iConfig.getParameter<std::string>("hoDepositName");
127  produces<reco::IsoDepositMap>(hoDepositName_);
128  jetDepositName_ = iConfig.getParameter<std::string>("jetDepositName");
129  produces<reco::IsoDepositMap>(jetDepositName_);
130  }
131 
132  inputCollectionLabels_ = iConfig.getParameter<std::vector<edm::InputTag> >("inputCollectionLabels");
133  inputCollectionTypes_ = iConfig.getParameter<std::vector<std::string> >("inputCollectionTypes");
134  if (inputCollectionLabels_.size() != inputCollectionTypes_.size())
135  throw cms::Exception("ConfigurationError") << "Number of input collection labels is different from number of types. " <<
136  "For each collection label there should be exactly one collection type specified.";
137  if (inputCollectionLabels_.size()>7 ||inputCollectionLabels_.empty())
138  throw cms::Exception("ConfigurationError") << "Number of input collections should be from 1 to 7.";
139 
140  debugWithTruthMatching_ = iConfig.getParameter<bool>("debugWithTruthMatching");
141  if (debugWithTruthMatching_) edm::LogWarning("MuonIdentification")
142  << "========================================================================\n"
143  << "Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
144  << "========================================================================\n";
145  if (fillGlobalTrackQuality_){
146  globalTrackQualityInputTag_ = iConfig.getParameter<edm::InputTag>("globalTrackQualityInputTag");
147  }
148 
149  if (fillTrackerKink_) {
150  trackerKinkFinder_.reset(new MuonKinkFinder(iConfig.getParameter<edm::ParameterSet>("TrackerKinkFinderParameters")));
151  }
152 
153  //create mesh holder
154  meshAlgo_ = new MuonMesh(iConfig.getParameter<edm::ParameterSet>("arbitrationCleanerOptions"));
155 
156 
157  edm::InputTag rpcHitTag("rpcRecHits");
158  rpcHitToken_ = consumes<RPCRecHitCollection>(rpcHitTag);
159  glbQualToken_ = consumes<edm::ValueMap<reco::MuonQuality> >(globalTrackQualityInputTag_);
160 
161 
162  //Consumes... UGH
163  for ( unsigned int i = 0; i < inputCollectionLabels_.size(); ++i ) {
164  if ( inputCollectionTypes_[i] == "inner tracks" ) {
165  innerTrackCollectionToken_ = consumes<reco::TrackCollection>(inputCollectionLabels_.at(i));
166  continue;
167  }
168  if ( inputCollectionTypes_[i] == "outer tracks" ) {
169  outerTrackCollectionToken_ = consumes<reco::TrackCollection>(inputCollectionLabels_.at(i));
170  continue;
171  }
172  if ( inputCollectionTypes_[i] == "links" ) {
173  linkCollectionToken_ = consumes<reco::MuonTrackLinksCollection>(inputCollectionLabels_.at(i));
174  continue;
175  }
176  if ( inputCollectionTypes_[i] == "muons" ) {
177  muonCollectionToken_ = consumes<reco::MuonCollection>(inputCollectionLabels_.at(i));
178  continue;
179  }
180  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev firstHit" ) {
181  tpfmsCollectionToken_ = consumes<reco::TrackToTrackMap>(inputCollectionLabels_.at(i));
182  continue;
183  }
184 
185  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev picky" ) {
186  pickyCollectionToken_ = consumes<reco::TrackToTrackMap>(inputCollectionLabels_.at(i));
187  continue;
188  }
189 
190  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev dyt" ) {
191  dytCollectionToken_ = consumes<reco::TrackToTrackMap>(inputCollectionLabels_.at(i));
192  continue;
193  }
194  throw cms::Exception("FatalError") << "Unknown input collection type: " << inputCollectionTypes_[i];
195  }
196 
197 
198 }
std::string hoDepositName_
T getParameter(std::string const &) const
std::string jetDepositName_
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
dictionary parameters
Definition: Parameters.py:2
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorCalo_
edm::EDGetTokenT< RPCRecHitCollection > rpcHitToken_
bool fillCaloCompatibility_
std::string trackDepositName_
std::vector< std::string > inputCollectionTypes_
MuonCaloCompatibility muonCaloCompatibility_
edm::EDGetTokenT< reco::TrackToTrackMap > pickyCollectionToken_
std::auto_ptr< MuonKinkFinder > trackerKinkFinder_
MuonMesh * meshAlgo_
edm::EDGetTokenT< reco::TrackToTrackMap > tpfmsCollectionToken_
double ptThresholdToFillCandidateP4WithGlobalFit_
TrackAssociatorParameters parameters_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::string ecalDepositName_
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
edm::EDGetTokenT< reco::TrackCollection > outerTrackCollectionToken_
edm::EDGetTokenT< reco::MuonTrackLinksCollection > linkCollectionToken_
bool fillGlobalTrackRefits_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorTrack_
void configure(const edm::ParameterSet &)
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
MuonTimingFiller * theTimingFiller_
std::vector< edm::InputTag > inputCollectionLabels_
bool fillGlobalTrackQuality_
std::string hcalDepositName_
double sigmaThresholdToFillCandidateP4WithGlobalFit_
bool debugWithTruthMatching_
T get(const Candidate &c)
Definition: component.h:55
edm::InputTag globalTrackQualityInputTag_
void loadParameters(const edm::ParameterSet &)
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_
MuonIdProducer::~MuonIdProducer ( )
virtual

Definition at line 202 of file MuonIdProducer.cc.

References meshAlgo_, muIsoExtractorCalo_, muIsoExtractorJet_, muIsoExtractorTrack_, and theTimingFiller_.

203 {
208  if (meshAlgo_) delete meshAlgo_;
209  // TimingReport::current()->dump(std::cout);
210 }
reco::isodeposit::IsoDepositExtractor * muIsoExtractorCalo_
MuonMesh * meshAlgo_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorTrack_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
MuonTimingFiller * theTimingFiller_

Member Function Documentation

void MuonIdProducer::beginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overridevirtual

Reimplemented from edm::EDProducer.

Definition at line 452 of file MuonIdProducer.cc.

References edm::EventSetup::get(), meshAlgo_, edm::ESHandle< class >::product(), and MuonMesh::setCSCGeometry().

453 {
454  edm::ESHandle<CSCGeometry> geomHandle;
455  iSetup.get<MuonGeometryRecord>().get(geomHandle);
456 
457  meshAlgo_->setCSCGeometry(geomHandle.product());
458 
459 }
MuonMesh * meshAlgo_
void setCSCGeometry(const CSCGeometry *pg)
Definition: MuonMesh.h:43
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
unsigned int MuonIdProducer::chamberId ( const DetId id)
private

Definition at line 392 of file MuonIdProducer.cc.

References CSCDetId::chamberId(), MuonSubdetId::CSC, MuonSubdetId::DT, DetId::Muon, and DetId::rawId().

Referenced by overlap().

393 {
394  switch ( id.det() ) {
395  case DetId::Muon:
396  switch ( id.subdetId() ) {
397  case MuonSubdetId::DT:
398  {
399  DTChamberId detId(id.rawId());
400  return detId.rawId();
401  }
402  break;
403  case MuonSubdetId::CSC:
404  {
405  CSCDetId detId(id.rawId());
406  return detId.chamberId().rawId();
407  }
408  break;
409  default:
410  return 0;
411  }
412  default:
413  return 0;
414  }
415  return 0;
416 }
static const int CSC
Definition: MuonSubdetId.h:13
static const int DT
Definition: MuonSubdetId.h:12
bool MuonIdProducer::checkLinks ( const reco::MuonTrackLinks links) const
private

Definition at line 1303 of file MuonIdProducer.cc.

References reco::MuonTrackLinks::globalTrack(), edm::Ref< C, T, F >::isNull(), reco::MuonTrackLinks::standAloneTrack(), and reco::MuonTrackLinks::trackerTrack().

Referenced by produce().

1303  {
1304  bool trackBAD = links->trackerTrack().isNull();
1305  bool staBAD = links->standAloneTrack().isNull();
1306  bool glbBAD = links->globalTrack().isNull();
1307  if (trackBAD || staBAD || glbBAD )
1308  {
1309  edm::LogWarning("muonIDbadLinks") << "Global muon links to constituent tracks are invalid: trkBad "
1310  <<trackBAD <<" standaloneBad "<<staBAD<<" globalBad "<<glbBAD
1311  <<". There should be no such object. Muon is skipped.";
1312  return false;
1313  }
1314  return true;
1315 }
bool isNull() const
Checks for null.
Definition: Ref.h:247
void MuonIdProducer::fillArbitrationInfo ( reco::MuonCollection pOutputMuons)
private

Definition at line 1008 of file MuonIdProducer.cc.

References arbClean_, reco::MuonSegmentMatch::Arbitrated, reco::MuonSegmentMatch::BelongsToTrackByDR, reco::MuonSegmentMatch::BelongsToTrackByDRSlope, reco::MuonSegmentMatch::BelongsToTrackByDX, reco::MuonSegmentMatch::BelongsToTrackByDXSlope, reco::MuonSegmentMatch::BelongsToTrackByME1aClean, reco::MuonSegmentMatch::BestInChamberByDR, reco::MuonSegmentMatch::BestInChamberByDRSlope, reco::MuonSegmentMatch::BestInChamberByDX, reco::MuonSegmentMatch::BestInChamberByDXSlope, reco::MuonSegmentMatch::BestInStationByDR, reco::MuonSegmentMatch::BestInStationByDRSlope, reco::MuonSegmentMatch::BestInStationByDX, reco::MuonSegmentMatch::BestInStationByDXSlope, MuonMesh::clearMesh(), MuonSubdetId::CSC, MuonMesh::isDuplicateOf(), meshAlgo_, CSCDetId::ring(), MuonMesh::runMesh(), python.multivaluedict::sort(), and plotscripts::stationIndex().

Referenced by produce().

1009 {
1010  //
1011  // apply segment flags
1012  //
1013  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs; // for chamber segment sorting
1014  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs; // for station segment sorting
1015  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs; // for muon segment arbitration
1016 
1017  // muonIndex1
1018  for( unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
1019  {
1020  // chamberIter1
1021  for( std::vector<reco::MuonChamberMatch>::iterator chamberIter1 = pOutputMuons->at(muonIndex1).matches().begin();
1022  chamberIter1 != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter1 )
1023  {
1024  if(chamberIter1->segmentMatches.empty()) continue;
1025  chamberPairs.clear();
1026 
1027  // segmentIter1
1028  for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter1 = chamberIter1->segmentMatches.begin();
1029  segmentIter1 != chamberIter1->segmentMatches.end(); ++segmentIter1 )
1030  {
1031  chamberPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
1032  if(!segmentIter1->isMask()) // has not yet been arbitrated
1033  {
1034  arbitrationPairs.clear();
1035  arbitrationPairs.push_back(std::make_pair(&(*chamberIter1), &(*segmentIter1)));
1036 
1037 
1038 
1039  // find identical segments with which to arbitrate
1040  // tracker muons only
1041  if (pOutputMuons->at(muonIndex1).isTrackerMuon()) {
1042  // muonIndex2
1043  for( unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
1044  {
1045  // tracker muons only
1046  if (! pOutputMuons->at(muonIndex2).isTrackerMuon()) continue;
1047  // chamberIter2
1048  for( std::vector<reco::MuonChamberMatch>::iterator chamberIter2 = pOutputMuons->at(muonIndex2).matches().begin();
1049  chamberIter2 != pOutputMuons->at(muonIndex2).matches().end(); ++chamberIter2 )
1050  {
1051  // segmentIter2
1052  for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter2->segmentMatches.begin();
1053  segmentIter2 != chamberIter2->segmentMatches.end(); ++segmentIter2 )
1054  {
1055  if(segmentIter2->isMask()) continue; // has already been arbitrated
1056  if(fabs(segmentIter2->x - segmentIter1->x ) < 1E-3 &&
1057  fabs(segmentIter2->y - segmentIter1->y ) < 1E-3 &&
1058  fabs(segmentIter2->dXdZ - segmentIter1->dXdZ ) < 1E-3 &&
1059  fabs(segmentIter2->dYdZ - segmentIter1->dYdZ ) < 1E-3 &&
1060  fabs(segmentIter2->xErr - segmentIter1->xErr ) < 1E-3 &&
1061  fabs(segmentIter2->yErr - segmentIter1->yErr ) < 1E-3 &&
1062  fabs(segmentIter2->dXdZErr - segmentIter1->dXdZErr) < 1E-3 &&
1063  fabs(segmentIter2->dYdZErr - segmentIter1->dYdZErr) < 1E-3)
1064  arbitrationPairs.push_back(std::make_pair(&(*chamberIter2), &(*segmentIter2)));
1065  } // segmentIter2
1066  } // chamberIter2
1067  } // muonIndex2
1068  }
1069 
1070  // arbitration segment sort
1071  if(arbitrationPairs.empty()) continue; // this should never happen
1072  if(arbitrationPairs.size()==1) {
1073  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDRSlope);
1074  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDXSlope);
1075  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDR);
1076  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDX);
1077  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::Arbitrated);
1078  } else {
1079  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDRSlope));
1080  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDRSlope);
1081  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDXSlope));
1082  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDXSlope);
1083  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDR));
1084  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDR);
1085  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDX));
1086  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDX);
1087  for( unsigned int it = 0; it < arbitrationPairs.size(); ++it )
1088  arbitrationPairs.at(it).second->setMask(reco::MuonSegmentMatch::Arbitrated);
1089  }
1090  }
1091 
1092  // setup me1a cleaning for later
1093  if( chamberIter1->id.subdetId() == MuonSubdetId::CSC && arbClean_ ) {
1094  CSCDetId cscid(chamberIter1->id);
1095  if(cscid.ring() == 4)
1096  for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter2 = chamberIter1->segmentMatches.begin();
1097  segmentIter2 != chamberIter1->segmentMatches.end(); ++segmentIter2 ) {
1098  if( segmentIter1->cscSegmentRef.isNonnull() && segmentIter2->cscSegmentRef.isNonnull() )
1099  if( meshAlgo_->isDuplicateOf(segmentIter1->cscSegmentRef,segmentIter2->cscSegmentRef) &&
1100  (segmentIter2->mask & 0x1e0000) &&
1101  (segmentIter1->mask & 0x1e0000) )
1103  //if the track has lost the segment already through normal arbitration no need to do it again.
1104  }
1105  }// mark all ME1/a duplicates that this track owns
1106 
1107  } // segmentIter1
1108 
1109  // chamber segment sort
1110  if(chamberPairs.empty()) continue; // this should never happen
1111  if(chamberPairs.size()==1) {
1112  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDRSlope);
1113  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDXSlope);
1114  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDR);
1115  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDX);
1116  } else {
1117  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDRSlope));
1118  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDRSlope);
1119  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDXSlope));
1120  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDXSlope);
1121  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDR));
1122  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDR);
1123  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDX));
1124  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDX);
1125  }
1126  } // chamberIter1
1127 
1128  // station segment sort
1129  for( int stationIndex = 1; stationIndex < 5; ++stationIndex )
1130  for( int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
1131  {
1132  stationPairs.clear();
1133 
1134  // chamberIter
1135  for( std::vector<reco::MuonChamberMatch>::iterator chamberIter = pOutputMuons->at(muonIndex1).matches().begin();
1136  chamberIter != pOutputMuons->at(muonIndex1).matches().end(); ++chamberIter )
1137  {
1138  if(!(chamberIter->station()==stationIndex && chamberIter->detector()==detectorIndex)) continue;
1139  if(chamberIter->segmentMatches.empty()) continue;
1140 
1141  for( std::vector<reco::MuonSegmentMatch>::iterator segmentIter = chamberIter->segmentMatches.begin();
1142  segmentIter != chamberIter->segmentMatches.end(); ++segmentIter )
1143  stationPairs.push_back(std::make_pair(&(*chamberIter), &(*segmentIter)));
1144  } // chamberIter
1145 
1146  if(stationPairs.empty()) continue; // this may very well happen
1147  if(stationPairs.size()==1) {
1148  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDRSlope);
1149  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDXSlope);
1150  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDR);
1151  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDX);
1152  } else {
1153  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDRSlope));
1154  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDRSlope);
1155  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDXSlope));
1156  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDXSlope);
1157  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDR));
1158  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDR);
1159  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDX));
1160  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDX);
1161  }
1162  }
1163 
1164  } // muonIndex1
1165 
1166  if(arbClean_) {
1167  // clear old mesh, create and prune new mesh!
1168  meshAlgo_->clearMesh();
1169  meshAlgo_->runMesh(pOutputMuons);
1170  }
1171 }
static const unsigned int BelongsToTrackByME1aClean
void runMesh(std::vector< reco::Muon > *p)
Definition: MuonMesh.h:39
static const unsigned int Arbitrated
segment mask flags
static const unsigned int BestInStationByDRSlope
static const unsigned int BelongsToTrackByDXSlope
static const unsigned int BestInStationByDR
void clearMesh()
Definition: MuonMesh.h:41
MuonMesh * meshAlgo_
static const int CSC
Definition: MuonSubdetId.h:13
static const unsigned int BestInChamberByDX
static const unsigned int BestInChamberByDR
static const unsigned int BestInStationByDXSlope
static const unsigned int BestInChamberByDXSlope
bool isDuplicateOf(const CSCSegmentRef &lhs, const CSCSegmentRef &rhs) const
Definition: MuonMesh.cc:342
static const unsigned int BelongsToTrackByDRSlope
static const unsigned int BelongsToTrackByDR
static const unsigned int BelongsToTrackByDX
functor predicate for standard library sort algorithm
def stationIndex
Definition: plotscripts.py:353
static const unsigned int BestInStationByDX
static const unsigned int BestInChamberByDRSlope
void MuonIdProducer::fillGlbQuality ( edm::Event iEvent,
const edm::EventSetup iSetup,
reco::Muon aMuon 
)
private

Definition at line 1279 of file MuonIdProducer.cc.

References reco::Muon::combinedMuon(), reco::Muon::combinedQuality(), edm::HandleBase::failedToGet(), edm::Event::getByToken(), glbQualToken_, reco::Muon::isGlobalMuon(), edm::HandleBase::isValid(), LogDebug, reco::Muon::setCombinedQuality(), and reco::MuonQuality::trkRelChi2.

Referenced by produce().

1280 {
1282  iEvent.getByToken(glbQualToken_, glbQualH);
1283 
1284  if(aMuon.isGlobalMuon() && glbQualH.isValid() && !glbQualH.failedToGet()) {
1285  aMuon.setCombinedQuality((*glbQualH)[aMuon.combinedMuon()]);
1286  }
1287 
1288  LogDebug("MuonIdentification") << "tkChiVal " << aMuon.combinedQuality().trkRelChi2;
1289 
1290 }
#define LogDebug(id)
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
bool isGlobalMuon() const
Definition: Muon.h:218
float trkRelChi2
chi2 value for the inner track stub with respect to the global track
Definition: MuonQuality.h:15
MuonQuality combinedQuality() const
get energy deposition information
Definition: Muon.h:121
bool isValid() const
Definition: HandleBase.h:76
bool failedToGet() const
Definition: HandleBase.h:80
virtual TrackRef combinedMuon() const
reference to a stand-alone muon Track
Definition: Muon.h:55
void setCombinedQuality(const MuonQuality &combinedQuality)
set energy deposition information
Definition: Muon.h:123
void MuonIdProducer::fillMuonId ( edm::Event iEvent,
const edm::EventSetup iSetup,
reco::Muon aMuon,
TrackDetectorAssociator::Direction  direction = TrackDetectorAssociator::InsideOut 
)
private

Definition at line 821 of file MuonIdProducer.cc.

References TrackDetectorAssociator::associate(), reco::MuonRPCHitMatch::bx, TrackDetMatchInfo::chambers, TrackDetMatchInfo::crossedEcalIds, TrackDetMatchInfo::crossedEnergy(), TrackDetMatchInfo::crossedHcalIds, reco::MuonSegmentMatch::cscSegmentRef, reco::MuonSegmentMatch::dtSegmentRef, reco::MuonChamberMatch::dXdZ, reco::MuonSegmentMatch::dXdZ, reco::MuonChamberMatch::dXdZErr, reco::MuonSegmentMatch::dXdZErr, reco::MuonChamberMatch::dYdZ, reco::MuonSegmentMatch::dYdZ, reco::MuonChamberMatch::dYdZErr, reco::MuonSegmentMatch::dYdZErr, reco::MuonEnergy::ecal_id, reco::MuonEnergy::ecal_position, reco::MuonEnergy::ecal_time, TrackDetMatchInfo::EcalRecHits, TrackDetMatchInfo::ecalRecHits, reco::MuonChamberMatch::edgeX, reco::MuonChamberMatch::edgeY, reco::MuonEnergy::em, reco::MuonEnergy::emMax, reco::MuonEnergy::emS25, reco::MuonEnergy::emS9, edm::hlt::Exception, fillEnergy_, fillMatching_, TrackDetMatchInfo::findMaxDeposition(), edm::Ref< C, T, F >::get(), edm::Event::getByToken(), reco::MuonEnergy::had, reco::MuonEnergy::hadMax, reco::MuonEnergy::hadS9, reco::MuonSegmentMatch::hasPhi_, reco::MuonSegmentMatch::hasZed_, reco::MuonEnergy::hcal_id, reco::MuonEnergy::hcal_position, reco::MuonEnergy::hcal_time, TrackDetMatchInfo::HcalRecHits, TrackDetMatchInfo::hcalRecHits, reco::MuonEnergy::ho, TrackDetMatchInfo::HORecHits, reco::MuonEnergy::hoS9, reco::MuonChamberMatch::id, info(), edm::Ref< C, T, F >::isNull(), reco::Muon::isRPCMuon(), reco::Muon::isTrackerMuon(), edm::HandleBase::isValid(), LogTrace, reco::MuonRPCHitMatch::mask, reco::MuonSegmentMatch::mask, reco::Muon::matches(), maxAbsDx_, maxAbsDy_, maxAbsPullX_, maxAbsPullY_, reco::Muon::NoArbitration, reco::Muon::numberOfMatches(), TrackDetMatchInfo::nXnEnergy(), or, parameters_, funct::pow(), rpcHitToken_, reco::MuonChamberMatch::rpcMatches, rpcRecHits_cfi::rpcRecHits, reco::MuonChamberMatch::segmentMatches, reco::Muon::setCalEnergy(), reco::Muon::setMatches(), mathSSE::sqrt(), reco::Muon::standAloneMuon(), reco::MuonSegmentMatch::t0, reco::MuonEnergy::tower, reco::MuonEnergy::towerS9, TrackDetMatchInfo::TowerTotal, reco::Muon::track(), trackAssociator_, TrackDetMatchInfo::trkGlobPosAtEcal, TrackDetMatchInfo::trkGlobPosAtHcal, reco::MuonRPCHitMatch::x, reco::MuonChamberMatch::x, reco::MuonSegmentMatch::x, reco::MuonChamberMatch::xErr, reco::MuonSegmentMatch::xErr, LocalError::xx(), reco::MuonChamberMatch::y, reco::MuonSegmentMatch::y, reco::MuonChamberMatch::yErr, reco::MuonSegmentMatch::yErr, and LocalError::yy().

Referenced by produce().

824 {
825  // perform track - detector association
826  const reco::Track* track = 0;
827  if ( ! aMuon.track().isNull() )
828  track = aMuon.track().get();
829  else
830  {
831  if ( ! aMuon.standAloneMuon().isNull() )
832  track = aMuon.standAloneMuon().get();
833  else
834  throw cms::Exception("FatalError") << "Failed to fill muon id information for a muon with undefined references to tracks";
835  }
836 
837  TrackDetMatchInfo info = trackAssociator_.associate(iEvent, iSetup, *track, parameters_, direction);
838 
839  if ( fillEnergy_ ) {
840  reco::MuonEnergy muonEnergy;
843  muonEnergy.ho = info.crossedEnergy(TrackDetMatchInfo::HORecHits);
845  muonEnergy.emS9 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,1); // 3x3 energy
846  muonEnergy.emS25 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,2); // 5x5 energy
847  muonEnergy.hadS9 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits,1); // 3x3 energy
848  muonEnergy.hoS9 = info.nXnEnergy(TrackDetMatchInfo::HORecHits,1); // 3x3 energy
849  muonEnergy.towerS9 = info.nXnEnergy(TrackDetMatchInfo::TowerTotal,1); // 3x3 energy
850  muonEnergy.ecal_position = info.trkGlobPosAtEcal;
851  muonEnergy.hcal_position = info.trkGlobPosAtHcal;
852  if (! info.crossedEcalIds.empty() ) muonEnergy.ecal_id = info.crossedEcalIds.front();
853  if (! info.crossedHcalIds.empty() ) muonEnergy.hcal_id = info.crossedHcalIds.front();
854  // find maximal energy depositions and their time
855  DetId emMaxId = info.findMaxDeposition(TrackDetMatchInfo::EcalRecHits,2); // max energy deposit in 5x5 shape
856  for(std::vector<const EcalRecHit*>::const_iterator hit=info.ecalRecHits.begin();
857  hit!=info.ecalRecHits.end(); ++hit) {
858  if ((*hit)->id() != emMaxId) continue;
859  muonEnergy.emMax = (*hit)->energy();
860  muonEnergy.ecal_time = (*hit)->time();
861  }
862  DetId hadMaxId = info.findMaxDeposition(TrackDetMatchInfo::HcalRecHits,1); // max energy deposit in 3x3 shape
863  for(std::vector<const HBHERecHit*>::const_iterator hit=info.hcalRecHits.begin();
864  hit!=info.hcalRecHits.end(); ++hit) {
865  if ((*hit)->id() != hadMaxId) continue;
866  muonEnergy.hadMax = (*hit)->energy();
867  muonEnergy.hcal_time = (*hit)->time();
868  }
869  aMuon.setCalEnergy( muonEnergy );
870  }
871  if ( ! fillMatching_ && ! aMuon.isTrackerMuon() && ! aMuon.isRPCMuon() ) return;
872 
874  iEvent.getByToken(rpcHitToken_, rpcRecHits);
875 
876  // fill muon match info
877  std::vector<reco::MuonChamberMatch> muonChamberMatches;
878  unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
879  for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.chambers.begin();
880  chamber!=info.chambers.end(); chamber++ )
881  {
882  if (chamber->id.subdetId() == 3 && rpcRecHits.isValid() ) continue; // Skip RPC chambers, they are taken care of below)
883  reco::MuonChamberMatch matchedChamber;
884 
885  LocalError localError = chamber->tState.localError().positionError();
886  matchedChamber.x = chamber->tState.localPosition().x();
887  matchedChamber.y = chamber->tState.localPosition().y();
888  matchedChamber.xErr = sqrt( localError.xx() );
889  matchedChamber.yErr = sqrt( localError.yy() );
890 
891  matchedChamber.dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
892  matchedChamber.dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
893  // DANGEROUS - compiler cannot guaranty parameters ordering
894  AlgebraicSymMatrix55 trajectoryCovMatrix = chamber->tState.localError().matrix();
895  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
896  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
897 
898  matchedChamber.edgeX = chamber->localDistanceX;
899  matchedChamber.edgeY = chamber->localDistanceY;
900 
901  matchedChamber.id = chamber->id;
902  if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
903 
904  // fill segments
905  for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
906  segment != chamber->segments.end(); segment++ )
907  {
908  reco::MuonSegmentMatch matchedSegment;
909  matchedSegment.x = segment->segmentLocalPosition.x();
910  matchedSegment.y = segment->segmentLocalPosition.y();
911  matchedSegment.dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
912  matchedSegment.dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
913  matchedSegment.xErr = segment->segmentLocalErrorXX>0?sqrt(segment->segmentLocalErrorXX):0;
914  matchedSegment.yErr = segment->segmentLocalErrorYY>0?sqrt(segment->segmentLocalErrorYY):0;
915  matchedSegment.dXdZErr = segment->segmentLocalErrorDxDz>0?sqrt(segment->segmentLocalErrorDxDz):0;
916  matchedSegment.dYdZErr = segment->segmentLocalErrorDyDz>0?sqrt(segment->segmentLocalErrorDyDz):0;
917  matchedSegment.t0 = segment->t0;
918  matchedSegment.mask = 0;
919  matchedSegment.dtSegmentRef = segment->dtSegmentRef;
920  matchedSegment.cscSegmentRef = segment->cscSegmentRef;
921  matchedSegment.hasZed_ = segment->hasZed;
922  matchedSegment.hasPhi_ = segment->hasPhi;
923  // test segment
924  bool matchedX = false;
925  bool matchedY = false;
926  LogTrace("MuonIdentification") << " matching local x, segment x: " << matchedSegment.x <<
927  ", chamber x: " << matchedChamber.x << ", max: " << maxAbsDx_;
928  LogTrace("MuonIdentification") << " matching local y, segment y: " << matchedSegment.y <<
929  ", chamber y: " << matchedChamber.y << ", max: " << maxAbsDy_;
930  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 )
931  LogTrace("MuonIdentification") << " xpull: " <<
932  fabs(matchedSegment.x - matchedChamber.x)/sqrt(pow(matchedSegment.xErr,2) + pow(matchedChamber.xErr,2));
933  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 )
934  LogTrace("MuonIdentification") << " ypull: " <<
935  fabs(matchedSegment.y - matchedChamber.y)/sqrt(pow(matchedSegment.yErr,2) + pow(matchedChamber.yErr,2));
936 
937  if (fabs(matchedSegment.x - matchedChamber.x) < maxAbsDx_) matchedX = true;
938  if (fabs(matchedSegment.y - matchedChamber.y) < maxAbsDy_) matchedY = true;
939  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 &&
940  fabs(matchedSegment.x - matchedChamber.x)/sqrt(pow(matchedSegment.xErr,2) + pow(matchedChamber.xErr,2)) < maxAbsPullX_) matchedX = true;
941  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 &&
942  fabs(matchedSegment.y - matchedChamber.y)/sqrt(pow(matchedSegment.yErr,2) + pow(matchedChamber.yErr,2)) < maxAbsPullY_) matchedY = true;
943  if (matchedX && matchedY) matchedChamber.segmentMatches.push_back(matchedSegment);
944  }
945  muonChamberMatches.push_back(matchedChamber);
946  }
947 
948  // Fill RPC info
949  if ( rpcRecHits.isValid() )
950  {
951 
952  for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.chambers.begin();
953  chamber!=info.chambers.end(); chamber++ )
954  {
955 
956  if ( chamber->id.subdetId() != 3 ) continue; // Consider RPC chambers only
957 
958  reco::MuonChamberMatch matchedChamber;
959 
960  LocalError localError = chamber->tState.localError().positionError();
961  matchedChamber.x = chamber->tState.localPosition().x();
962  matchedChamber.y = chamber->tState.localPosition().y();
963  matchedChamber.xErr = sqrt( localError.xx() );
964  matchedChamber.yErr = sqrt( localError.yy() );
965 
966  matchedChamber.dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
967  matchedChamber.dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
968  // DANGEROUS - compiler cannot guaranty parameters ordering
969  AlgebraicSymMatrix55 trajectoryCovMatrix = chamber->tState.localError().matrix();
970  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
971  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
972 
973  matchedChamber.edgeX = chamber->localDistanceX;
974  matchedChamber.edgeY = chamber->localDistanceY;
975 
976  matchedChamber.id = chamber->id;
977 
978  for ( RPCRecHitCollection::const_iterator rpcRecHit = rpcRecHits->begin();
979  rpcRecHit != rpcRecHits->end(); ++rpcRecHit )
980  {
981  reco::MuonRPCHitMatch rpcHitMatch;
982 
983  if ( rpcRecHit->rawId() != chamber->id.rawId() ) continue;
984 
985  rpcHitMatch.x = rpcRecHit->localPosition().x();
986  rpcHitMatch.mask = 0;
987  rpcHitMatch.bx = rpcRecHit->BunchX();
988 
989  const double AbsDx = fabs(rpcRecHit->localPosition().x()-chamber->tState.localPosition().x());
990  if( AbsDx <= 20 or AbsDx/sqrt(localError.xx()) <= 4 ) matchedChamber.rpcMatches.push_back(rpcHitMatch);
991  }
992 
993  muonChamberMatches.push_back(matchedChamber);
994  }
995  }
996 
997  aMuon.setMatches(muonChamberMatches);
998 
999  LogTrace("MuonIdentification") << "number of muon chambers: " << aMuon.matches().size() << "\n"
1000  << "number of chambers with segments according to the associator requirements: " <<
1001  nubmerOfMatchesAccordingToTrackAssociator;
1002  LogTrace("MuonIdentification") << "number of segment matches with the producer requirements: " <<
1004 
1005  // fillTime( iEvent, iSetup, aMuon );
1006 }
float xx() const
Definition: LocalError.h:24
DTRecSegment4DRef dtSegmentRef
static const TGPicture * info(bool iBackgroundIsBlack)
TrackDetectorAssociator trackAssociator_
CSCSegmentRef cscSegmentRef
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
Definition: Activities.doc:12
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
edm::EDGetTokenT< RPCRecHitCollection > rpcHitToken_
bool isTrackerMuon() const
Definition: Muon.h:219
std::vector< const EcalRecHit * > ecalRecHits
hits in the cone
std::vector< DetId > crossedEcalIds
DetId findMaxDeposition(EnergyType)
Find detector elements with highest energy deposition.
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
float emS9
energy deposited in 3x3 ECAL crystal shape around central crystal
Definition: MuonEnergy.h:18
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
Definition: Muon.h:113
std::vector< DetId > crossedHcalIds
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
Definition: MuonEnergy.h:12
math::XYZPoint trkGlobPosAtHcal
float ecal_time
Calorimeter timing.
Definition: MuonEnergy.h:37
float ho
energy deposited in crossed HO towers
Definition: MuonEnergy.h:32
bool isRPCMuon() const
Definition: Muon.h:223
DetId hcal_id
DetId of the central HCAL tower with smallest depth.
Definition: MuonEnergy.h:50
bool isNull() const
Checks for null.
Definition: Ref.h:247
TrackAssociatorParameters parameters_
float yy() const
Definition: LocalError.h:26
float emS25
energy deposited in 5x5 ECAL crystal shape around central crystal
Definition: MuonEnergy.h:20
T sqrt(T t)
Definition: SSEVec.h:48
std::vector< TAMuonChamberMatch > chambers
std::vector< const HBHERecHit * > hcalRecHits
float hoS9
energy deposited in 3x3 HO tower shape around central tower
Definition: MuonEnergy.h:34
std::vector< reco::MuonRPCHitMatch > rpcMatches
bool isValid() const
Definition: HandleBase.h:76
double crossedEnergy(EnergyType)
energy in detector elements crossed by the track by types
#define LogTrace(id)
math::XYZPointF hcal_position
Definition: MuonEnergy.h:44
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
Definition: Muon.cc:60
float emMax
maximal energy of ECAL crystal in the 5x5 shape
Definition: MuonEnergy.h:22
Definition: DetId.h:18
float hadMax
maximal energy of HCAL tower in the 3x3 shape
Definition: MuonEnergy.h:30
std::vector< MuonChamberMatch > & matches()
get muon matching information
Definition: Muon.h:140
std::vector< reco::MuonSegmentMatch > segmentMatches
DetId ecal_id
DetId of the central ECAL crystal.
Definition: MuonEnergy.h:47
TrackDetMatchInfo associate(const edm::Event &, const edm::EventSetup &, const FreeTrajectoryState &, const AssociatorParameters &)
math::XYZPoint trkGlobPosAtEcal
Track position at different parts of the calorimeter.
void setMatches(const std::vector< MuonChamberMatch > &matches)
set muon matching information
Definition: Muon.h:143
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
math::XYZPointF ecal_position
Trajectory position at the calorimeter.
Definition: MuonEnergy.h:43
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
float hadS9
energy deposited in 3x3 HCAL tower shape around central tower
Definition: MuonEnergy.h:28
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track
Definition: Muon.h:52
void MuonIdProducer::fillMuonIsolation ( edm::Event iEvent,
const edm::EventSetup iSetup,
reco::Muon aMuon,
reco::IsoDeposit trackDep,
reco::IsoDeposit ecalDep,
reco::IsoDeposit hcalDep,
reco::IsoDeposit hoDep,
reco::IsoDeposit jetDep 
)
private

Definition at line 1173 of file MuonIdProducer.cc.

References reco::IsoDeposit::candEnergy(), reco::isodeposit::IsoDepositExtractor::deposit(), reco::IsoDeposit::depositAndCountWithin(), reco::isodeposit::IsoDepositExtractor::deposits(), reco::IsoDeposit::depositWithin(), reco::MuonIsolation::emEt, reco::MuonIsolation::emVetoEt, edm::hlt::Exception, edm::Ref< C, T, F >::get(), reco::MuonIsolation::hadEt, reco::MuonIsolation::hadVetoEt, reco::MuonIsolation::hoEt, reco::MuonIsolation::hoVetoEt, edm::Ref< C, T, F >::isNull(), LogTrace, muIsoExtractorCalo_, muIsoExtractorJet_, muIsoExtractorTrack_, reco::MuonIsolation::nJets, reco::MuonIsolation::nTracks, reco::Muon::setIsolation(), reco::Muon::standAloneMuon(), reco::MuonIsolation::sumPt, reco::Muon::track(), and reco::MuonIsolation::trackerVetoPt.

Referenced by produce().

1176 {
1177  reco::MuonIsolation isoR03, isoR05;
1178  const reco::Track* track = 0;
1179  if ( ! aMuon.track().isNull() )
1180  track = aMuon.track().get();
1181  else
1182  {
1183  if ( ! aMuon.standAloneMuon().isNull() )
1184  track = aMuon.standAloneMuon().get();
1185  else
1186  throw cms::Exception("FatalError") << "Failed to compute muon isolation information for a muon with undefined references to tracks";
1187  }
1188 
1189  // get deposits
1190  reco::IsoDeposit depTrk = muIsoExtractorTrack_->deposit(iEvent, iSetup, *track );
1191  std::vector<reco::IsoDeposit> caloDeps = muIsoExtractorCalo_->deposits(iEvent, iSetup, *track);
1192  reco::IsoDeposit depJet = muIsoExtractorJet_->deposit(iEvent, iSetup, *track );
1193 
1194  if(caloDeps.size()!=3) {
1195  LogTrace("MuonIdentification") << "Failed to fill vector of calorimeter isolation deposits!";
1196  return;
1197  }
1198 
1199  reco::IsoDeposit depEcal = caloDeps.at(0);
1200  reco::IsoDeposit depHcal = caloDeps.at(1);
1201  reco::IsoDeposit depHo = caloDeps.at(2);
1202 
1203  trackDep = depTrk;
1204  ecalDep = depEcal;
1205  hcalDep = depHcal;
1206  hoDep = depHo;
1207  jetDep = depJet;
1208 
1209  isoR03.sumPt = depTrk.depositWithin(0.3);
1210  isoR03.emEt = depEcal.depositWithin(0.3);
1211  isoR03.hadEt = depHcal.depositWithin(0.3);
1212  isoR03.hoEt = depHo.depositWithin(0.3);
1213  isoR03.nTracks = depTrk.depositAndCountWithin(0.3).second;
1214  isoR03.nJets = depJet.depositAndCountWithin(0.3).second;
1215  isoR03.trackerVetoPt = depTrk.candEnergy();
1216  isoR03.emVetoEt = depEcal.candEnergy();
1217  isoR03.hadVetoEt = depHcal.candEnergy();
1218  isoR03.hoVetoEt = depHo.candEnergy();
1219 
1220  isoR05.sumPt = depTrk.depositWithin(0.5);
1221  isoR05.emEt = depEcal.depositWithin(0.5);
1222  isoR05.hadEt = depHcal.depositWithin(0.5);
1223  isoR05.hoEt = depHo.depositWithin(0.5);
1224  isoR05.nTracks = depTrk.depositAndCountWithin(0.5).second;
1225  isoR05.nJets = depJet.depositAndCountWithin(0.5).second;
1226  isoR05.trackerVetoPt = depTrk.candEnergy();
1227  isoR05.emVetoEt = depEcal.candEnergy();
1228  isoR05.hadVetoEt = depHcal.candEnergy();
1229  isoR05.hoVetoEt = depHo.candEnergy();
1230 
1231 
1232  aMuon.setIsolation(isoR03, isoR05);
1233 
1234 }
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:9
double candEnergy() const
Get energy or pT attached to cand trajectory.
Definition: IsoDeposit.h:136
float sumPt
sum-pt of tracks
Definition: MuonIsolation.h:7
reco::isodeposit::IsoDepositExtractor * muIsoExtractorCalo_
float hadVetoEt
hcal sum-et in the veto region in r-phi
Definition: MuonIsolation.h:15
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
void setIsolation(const MuonIsolation &isoR03, const MuonIsolation &isoR05)
Definition: Muon.cc:805
double depositWithin(double coneSize, const Vetos &vetos=Vetos(), bool skipDepositVeto=false) const
Get deposit.
Definition: IsoDeposit.cc:34
bool isNull() const
Checks for null.
Definition: Ref.h:247
float emEt
ecal sum-Et
Definition: MuonIsolation.h:8
int nJets
number of jets in the cone
Definition: MuonIsolation.h:12
float hoEt
ho sum-Et
Definition: MuonIsolation.h:10
#define LogTrace(id)
float hoVetoEt
ho sum-et in the veto region in r-phi
Definition: MuonIsolation.h:16
int nTracks
number of tracks in the cone (excluding veto region)
Definition: MuonIsolation.h:11
reco::isodeposit::IsoDepositExtractor * muIsoExtractorTrack_
float emVetoEt
ecal sum-et in the veto region in r-phi
Definition: MuonIsolation.h:14
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
virtual std::vector< reco::IsoDeposit > deposits(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const
std::pair< double, int > depositAndCountWithin(double coneSize, const Vetos &vetos=Vetos(), double threshold=-1e+36, bool skipDepositVeto=false) const
Get deposit.
Definition: IsoDeposit.cc:44
virtual reco::IsoDeposit deposit(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const =0
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
float trackerVetoPt
(sum-)pt inside the veto region in r-phi
Definition: MuonIsolation.h:13
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track
Definition: Muon.h:52
void MuonIdProducer::fillTrackerKink ( reco::Muon aMuon)
private

Definition at line 1292 of file MuonIdProducer.cc.

References reco::Muon::combinedQuality(), reco::Muon::innerTrack(), edm::Ref< C, T, F >::isNull(), reco::Muon::isQualityValid(), reco::Muon::setCombinedQuality(), and trackerKinkFinder_.

Referenced by produce().

1292  {
1293  // skip muons with no tracks
1294  if (aMuon.innerTrack().isNull()) return;
1295  // get quality from muon if already there, otherwise make empty one
1296  reco::MuonQuality quality = (aMuon.isQualityValid() ? aMuon.combinedQuality() : reco::MuonQuality());
1297  // fill it
1298  bool filled = trackerKinkFinder_->fillTrkKink(quality, *aMuon.innerTrack());
1299  // if quality was there, or if we filled it, commit to the muon
1300  if (filled || aMuon.isQualityValid()) aMuon.setCombinedQuality(quality);
1301 }
virtual TrackRef innerTrack() const
Definition: Muon.h:48
std::auto_ptr< MuonKinkFinder > trackerKinkFinder_
bool isNull() const
Checks for null.
Definition: Ref.h:247
MuonQuality combinedQuality() const
get energy deposition information
Definition: Muon.h:121
bool isQualityValid() const
Definition: Muon.h:119
void setCombinedQuality(const MuonQuality &combinedQuality)
set energy deposition information
Definition: Muon.h:123
void MuonIdProducer::init ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
private

Definition at line 212 of file MuonIdProducer.cc.

References edm::HandleBase::clear(), dytCollectionHandle_, dytCollectionToken_, edm::hlt::Exception, fillGlobalTrackRefits_, fillTrackerKink_, edm::EventSetup::get(), edm::Event::getByToken(), i, innerTrackCollectionHandle_, innerTrackCollectionToken_, inputCollectionLabels_, inputCollectionTypes_, edm::HandleBase::isValid(), linkCollectionHandle_, linkCollectionToken_, LogTrace, muonCollectionHandle_, muonCollectionToken_, outerTrackCollectionHandle_, outerTrackCollectionToken_, pickyCollectionHandle_, pickyCollectionToken_, edm::ESHandle< class >::product(), LargeD0_PixelPairStep_cff::propagator, TrackDetectorAssociator::setPropagator(), tpfmsCollectionHandle_, tpfmsCollectionToken_, trackAssociator_, and trackerKinkFinder_.

Referenced by produce().

213 {
214  // TimerStack timers;
215  // timers.push("MuonIdProducer::produce::init");
216 
221 
225 
226 
227  // timers.push("MuonIdProducer::produce::init::getPropagator");
229  iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
230  trackAssociator_.setPropagator(propagator.product());
231 
232  if (fillTrackerKink_) trackerKinkFinder_->init(iSetup);
233 
234  // timers.pop_and_push("MuonIdProducer::produce::init::getInputCollections");
235  for ( unsigned int i = 0; i < inputCollectionLabels_.size(); ++i ) {
236  if ( inputCollectionTypes_[i] == "inner tracks" ) {
239  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputCollectionLabels_[i];
240  LogTrace("MuonIdentification") << "Number of input inner tracks: " << innerTrackCollectionHandle_->size();
241  continue;
242  }
243  if ( inputCollectionTypes_[i] == "outer tracks" ) {
246  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputCollectionLabels_[i];
247  LogTrace("MuonIdentification") << "Number of input outer tracks: " << outerTrackCollectionHandle_->size();
248  continue;
249  }
250  if ( inputCollectionTypes_[i] == "links" ) {
253  throw cms::Exception("FatalError") << "Failed to get input link collection with label: " << inputCollectionLabels_[i];
254  LogTrace("MuonIdentification") << "Number of input links: " << linkCollectionHandle_->size();
255  continue;
256  }
257  if ( inputCollectionTypes_[i] == "muons" ) {
260  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
261  LogTrace("MuonIdentification") << "Number of input muons: " << muonCollectionHandle_->size();
262  continue;
263  }
264  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev firstHit" ) {
267  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
268  LogTrace("MuonIdentification") << "Number of input muons: " << tpfmsCollectionHandle_->size();
269  continue;
270  }
271 
272  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev picky" ) {
275  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
276  LogTrace("MuonIdentification") << "Number of input muons: " << pickyCollectionHandle_->size();
277  continue;
278  }
279 
280  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev dyt" ) {
282  if (! dytCollectionHandle_.isValid())
283  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
284  LogTrace("MuonIdentification") << "Number of input muons: " << dytCollectionHandle_->size();
285  continue;
286  }
287  throw cms::Exception("FatalError") << "Unknown input collection type: " << inputCollectionTypes_[i];
288  }
289 }
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
TrackDetectorAssociator trackAssociator_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
std::vector< std::string > inputCollectionTypes_
edm::EDGetTokenT< reco::TrackToTrackMap > pickyCollectionToken_
std::auto_ptr< MuonKinkFinder > trackerKinkFinder_
edm::EDGetTokenT< reco::TrackToTrackMap > tpfmsCollectionToken_
void setPropagator(const Propagator *)
use a user configured propagator
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
edm::EDGetTokenT< reco::TrackCollection > outerTrackCollectionToken_
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
bool isValid() const
Definition: HandleBase.h:76
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
edm::EDGetTokenT< reco::MuonTrackLinksCollection > linkCollectionToken_
#define LogTrace(id)
bool fillGlobalTrackRefits_
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::vector< edm::InputTag > inputCollectionLabels_
edm::Handle< reco::TrackToTrackMap > tpfmsCollectionHandle_
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
edm::Handle< reco::MuonCollection > muonCollectionHandle_
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_
bool MuonIdProducer::isGoodRPCMuon ( const reco::Muon muon)
private

Definition at line 812 of file MuonIdProducer.cc.

References addExtraSoftMuons_, reco::LeafCandidate::eta(), minNumberOfMatches_, minP_, minPt_, reco::Muon::numberOfMatchedRPCLayers(), reco::LeafCandidate::pt(), reco::Muon::RPCHitAndTrackArbitration, and reco::Muon::track().

Referenced by produce().

813 {
814  if(muon.track()->pt() < minPt_ || muon.track()->p() < minP_) return false;
815  if ( addExtraSoftMuons_ &&
816  muon.pt()<5 && fabs(muon.eta())<1.5 &&
819 }
int numberOfMatchedRPCLayers(ArbitrationType type=RPCHitAndTrackArbitration) const
Definition: Muon.cc:203
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
virtual float pt() const GCC11_FINAL
transverse momentum
bool MuonIdProducer::isGoodTrack ( const reco::Track track)
private

Definition at line 375 of file MuonIdProducer.cc.

References reco::TrackBase::eta(), LogTrace, maxAbsEta_, minP_, minPCaloMuon_, minPt_, reco::TrackBase::p(), and reco::TrackBase::pt().

Referenced by produce().

376 {
377  // Pt and absolute momentum requirement
378  if (track.pt() < minPt_ || (track.p() < minP_ && track.p() < minPCaloMuon_)){
379  LogTrace("MuonIdentification") << "Skipped low momentum track (Pt,P): " << track.pt() <<
380  ", " << track.p() << " GeV";
381  return false;
382  }
383 
384  // Eta requirement
385  if ( fabs(track.eta()) > maxAbsEta_ ){
386  LogTrace("MuonIdentification") << "Skipped track with large pseudo rapidity (Eta: " << track.eta() << " )";
387  return false;
388  }
389  return true;
390 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:127
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:139
double pt() const
track transverse momentum
Definition: TrackBase.h:129
#define LogTrace(id)
bool MuonIdProducer::isGoodTrackerMuon ( const reco::Muon muon)
private

Definition at line 803 of file MuonIdProducer.cc.

References addExtraSoftMuons_, reco::LeafCandidate::eta(), minNumberOfMatches_, minP_, minPt_, reco::Muon::NoArbitration, reco::Muon::numberOfMatches(), reco::LeafCandidate::pt(), and reco::Muon::track().

Referenced by produce().

804 {
805  if(muon.track()->pt() < minPt_ || muon.track()->p() < minP_) return false;
806  if ( addExtraSoftMuons_ &&
807  muon.pt()<5 && fabs(muon.eta())<1.5 &&
808  muon.numberOfMatches( reco::Muon::NoArbitration ) >= 1 ) return true;
810 }
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
Definition: Muon.cc:60
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
virtual float pt() const GCC11_FINAL
transverse momentum
reco::CaloMuon MuonIdProducer::makeCaloMuon ( const reco::Muon muon)
private

Definition at line 305 of file MuonIdProducer.cc.

References reco::Muon::calEnergy(), MuonCaloCompatibility::evaluate(), fillCaloCompatibility_, reco::Muon::innerTrack(), reco::Muon::isEnergyValid(), muonCaloCompatibility_, reco::CaloMuon::setCalEnergy(), reco::CaloMuon::setCaloCompatibility(), and reco::CaloMuon::setInnerTrack().

Referenced by produce().

306 {
307  reco::CaloMuon aMuon;
308  aMuon.setInnerTrack( muon.innerTrack() );
309 
310  if (muon.isEnergyValid()) aMuon.setCalEnergy( muon.calEnergy() );
311  // get calo compatibility
313  return aMuon;
314 }
virtual TrackRef innerTrack() const
Definition: Muon.h:48
bool fillCaloCompatibility_
double evaluate(const reco::Muon &)
MuonCaloCompatibility muonCaloCompatibility_
bool isEnergyValid() const
Definition: Muon.h:109
MuonEnergy calEnergy() const
get energy deposition information
Definition: Muon.h:111
void setCaloCompatibility(float input)
Definition: CaloMuon.h:43
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
Definition: CaloMuon.h:30
void setCalEnergy(const MuonEnergy &calEnergy)
set energy deposition information
Definition: CaloMuon.h:37
reco::Muon MuonIdProducer::makeMuon ( edm::Event iEvent,
const edm::EventSetup iSetup,
const reco::TrackRef track,
MuonIdProducer::TrackType  type 
)
private

Definition at line 291 of file MuonIdProducer.cc.

References edm::Ref< C, T, F >::get(), LogTrace, and reco::Muon::setMuonTrack().

Referenced by makeMuon(), and produce().

293 {
294  LogTrace("MuonIdentification") << "Creating a muon from a track " << track.get()->pt() <<
295  " Pt (GeV), eta: " << track.get()->eta();
296  reco::Muon aMuon( makeMuon( *(track.get()) ) );
297 
298  aMuon.setMuonTrack(type,track);
299  aMuon.setBestTrack(type);
300  aMuon.setTunePBestTrack(type);
301 
302  return aMuon;
303 }
type
Definition: HCALResponse.h:21
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
void setMuonTrack(const MuonTrackType &, const TrackRef &)
Definition: Muon.cc:869
#define LogTrace(id)
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
reco::Muon MuonIdProducer::makeMuon ( const reco::MuonTrackLinks links)
private

Definition at line 317 of file MuonIdProducer.cc.

References edm::AssociationMap< edm::OneToOne< reco::TrackCollection, reco::TrackCollection > >::const_iterator, reco::Muon::DYT, dytCollectionHandle_, edm::HandleBase::failedToGet(), fillGlobalTrackRefits_, muon::getTevRefitTrack(), reco::MuonTrackLinks::globalTrack(), edm::Ref< C, T, F >::isNull(), edm::HandleBase::isValid(), LogTrace, makeMuon(), reco::Muon::Picky, pickyCollectionHandle_, ptThresholdToFillCandidateP4WithGlobalFit_, reco::Muon::setBestTrack(), reco::Muon::setGlobalTrack(), reco::Muon::setInnerTrack(), reco::Muon::setMuonTrack(), reco::Muon::setOuterTrack(), reco::Muon::setTunePBestTrack(), muon::sigmaSwitch(), sigmaThresholdToFillCandidateP4WithGlobalFit_, reco::MuonTrackLinks::standAloneTrack(), muon::tevOptimized(), reco::Muon::TPFMS, tpfmsCollectionHandle_, and reco::MuonTrackLinks::trackerTrack().

318 {
319  LogTrace("MuonIdentification") << "Creating a muon from a link to tracks object";
320 
321  reco::Muon aMuon;
322  reco::Muon::MuonTrackTypePair chosenTrack;
323  reco::TrackRef tpfmsRef;
324  reco::TrackRef pickyRef;
325  bool useSigmaSwitch = false;
326 
329 
332 
333  if (tpfmsRef.isNull() && pickyRef.isNull()){
334  edm::LogWarning("MakeMuonWithTEV")<<"Failed to get TEV refits, fall back to sigma switch.";
335  useSigmaSwitch = true;
336  }
337  } else {
338  useSigmaSwitch = true;
339  }
340 
341  if (useSigmaSwitch){
342  chosenTrack = muon::sigmaSwitch( links.globalTrack(), links.trackerTrack(),
345  } else {
346  chosenTrack = muon::tevOptimized( links.globalTrack(), links.trackerTrack(),
347  tpfmsRef, pickyRef,
349  }
350  aMuon = makeMuon(*chosenTrack.first);
351  aMuon.setInnerTrack( links.trackerTrack() );
352  aMuon.setOuterTrack( links.standAloneTrack() );
353  aMuon.setGlobalTrack( links.globalTrack() );
354  aMuon.setBestTrack(chosenTrack.second);
355  aMuon.setTunePBestTrack(chosenTrack.second);
356 
360  if (it != tpfmsCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::TPFMS, (it->val));
361  }
364  if (it != pickyCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::Picky, (it->val));
365  }
368  if (it != dytCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::DYT, (it->val));
369  }
370  }
371  return aMuon;
372 }
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
Definition: Muon.cc:845
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
Definition: Muon.cc:846
virtual void setTunePBestTrack(MuonTrackType muonType)
Definition: Muon.h:93
reco::Muon::MuonTrackTypePair tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackRef &tpfmsTrack, const reco::TrackRef &pickyTrack, const double ptThreshold=200., const double tune1=17., const double tune2=40., const double dptcut=0.25)
Definition: MuonCocktails.cc:9
bool isNull() const
Checks for null.
Definition: Ref.h:247
double ptThresholdToFillCandidateP4WithGlobalFit_
reco::Muon::MuonTrackTypePair sigmaSwitch(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const double nSigma=2., const double ptThreshold=200.)
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
bool isValid() const
Definition: HandleBase.h:76
void setMuonTrack(const MuonTrackType &, const TrackRef &)
Definition: Muon.cc:869
#define LogTrace(id)
bool fillGlobalTrackRefits_
bool failedToGet() const
Definition: HandleBase.h:80
reco::TrackRef getTevRefitTrack(const reco::TrackRef &combinedTrack, const reco::TrackToTrackMap &map)
virtual void setBestTrack(MuonTrackType muonType)
Definition: Muon.h:91
edm::Handle< reco::TrackToTrackMap > tpfmsCollectionHandle_
double sigmaThresholdToFillCandidateP4WithGlobalFit_
std::pair< TrackRef, Muon::MuonTrackType > MuonTrackTypePair
Definition: Muon.h:40
virtual void setGlobalTrack(const TrackRef &t)
set reference to Track
Definition: Muon.cc:849
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
reco::Muon MuonIdProducer::makeMuon ( const reco::Track track)
private

Definition at line 1236 of file MuonIdProducer.cc.

References reco::TrackBase::charge(), relval_parameters_module::energy, reco::TrackBase::p(), p4, reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), mathSSE::sqrt(), and reco::TrackBase::vertex().

1237 {
1238  //FIXME: E = sqrt(p^2 + m^2), where m == 0.105658369(9)GeV
1239  double energy = sqrt(track.p() * track.p() + 0.011163691);
1240  math::XYZTLorentzVector p4(track.px(),
1241  track.py(),
1242  track.pz(),
1243  energy);
1244  return reco::Muon( track.charge(), p4, track.vertex() );
1245 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:127
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:131
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
T sqrt(T t)
Definition: SSEVec.h:48
double p4[4]
Definition: TauolaWrapper.h:92
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:135
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:154
int charge() const
track electric charge
Definition: TrackBase.h:111
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:133
int MuonIdProducer::overlap ( const reco::Muon muon,
const reco::Track track 
)
private

Definition at line 419 of file MuonIdProducer.cc.

References chamberId(), reco::Track::extra(), reco::Muon::isMatchesValid(), edm::Ref< C, T, F >::isNull(), match(), and reco::Muon::matches().

Referenced by produce().

420 {
421  int numberOfCommonDetIds = 0;
422  if ( ! muon.isMatchesValid() ||
423  track.extra().isNull() ||
424  track.extra()->recHits().isNull() ) return numberOfCommonDetIds;
425  const std::vector<reco::MuonChamberMatch>& matches( muon.matches() );
426  for ( std::vector<reco::MuonChamberMatch>::const_iterator match = matches.begin();
427  match != matches.end(); ++match )
428  {
429  if ( match->segmentMatches.empty() ) continue;
430  bool foundCommonDetId = false;
431 
432  for ( TrackingRecHitRefVector::const_iterator hit = track.extra()->recHitsBegin();
433  hit != track.extra()->recHitsEnd(); ++hit )
434  {
435  // LogTrace("MuonIdentification") << "hit DetId: " << std::hex << hit->get()->geographicalId().rawId() <<
436  // "\t hit chamber DetId: " << getChamberId(hit->get()->geographicalId()) <<
437  // "\t segment DetId: " << match->id.rawId() << std::dec;
438 
439  if ( chamberId(hit->get()->geographicalId()) == match->id.rawId() ) {
440  foundCommonDetId = true;
441  break;
442  }
443  }
444  if ( foundCommonDetId ) {
445  numberOfCommonDetIds++;
446  break;
447  }
448  }
449  return numberOfCommonDetIds;
450 }
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:96
bool isMatchesValid() const
Definition: Muon.h:138
bool isNull() const
Checks for null.
Definition: Ref.h:247
std::vector< MuonChamberMatch > & matches()
get muon matching information
Definition: Muon.h:140
unsigned int chamberId(const DetId &)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:6
double MuonIdProducer::phiOfMuonIneteractionRegion ( const reco::Muon muon) const
private

Definition at line 1265 of file MuonIdProducer.cc.

References reco::Muon::innerTrack(), edm::Ref< C, T, F >::isAvailable(), reco::Muon::isStandAloneMuon(), reco::Muon::matches(), reco::LeafCandidate::phi(), sectorPhi(), and reco::Muon::standAloneMuon().

Referenced by produce().

1266 {
1267  if ( muon.isStandAloneMuon() ) return muon.standAloneMuon()->innerPosition().phi();
1268  // the rest is tracker muon only
1269  if ( muon.matches().empty() ){
1270  if ( muon.innerTrack().isAvailable() &&
1271  muon.innerTrack()->extra().isAvailable() )
1272  return muon.innerTrack()->outerPosition().phi();
1273  else
1274  return muon.phi(); // makes little sense, but what else can I use
1275  }
1276  return sectorPhi(muon.matches().at(0).id);
1277 }
virtual TrackRef innerTrack() const
Definition: Muon.h:48
bool isAvailable() const
Definition: Ref.h:276
bool isStandAloneMuon() const
Definition: Muon.h:220
virtual float phi() const GCC11_FINAL
momentum azimuthal angle
static double sectorPhi(const DetId &id)
std::vector< MuonChamberMatch > & matches()
get muon matching information
Definition: Muon.h:140
virtual TrackRef standAloneMuon() const
reference to a stand-alone muon Track
Definition: Muon.h:52
void MuonIdProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

Implements edm::EDProducer.

Definition at line 477 of file MuonIdProducer.cc.

References TrackDetectorAssociator::Any, reco::Muon::calEnergy(), reco::CaloMuon::caloCompatibility(), caloCut_, checkLinks(), funct::cos(), TrackDetectorAssociator::crossedIP(), debugWithTruthMatching_, ecalDepositName_, MuonCaloCompatibility::evaluate(), reco::Track::extra(), edm::helper::Filler< Map >::fill(), fillArbitrationInfo(), fillCaloCompatibility_, fillEnergy_, fillGlbQuality(), fillGlobalTrackQuality_, fillIsolation_, fillMatching_, fillMuonId(), fillMuonIsolation(), MuonTimingFiller::fillTiming(), fillTrackerKink(), fillTrackerKink_, edm::Ref< C, T, F >::get(), reco::Muon::GlobalMuon, reco::MuonTrackLinks::globalTrack(), hcalDepositName_, hoDepositName_, i, init(), reco::Muon::InnerTrack, reco::Muon::innerTrack(), innerTrackCollectionHandle_, edm::helper::Filler< Map >::insert(), TrackDetectorAssociator::InsideOut, edm::Ref< C, T, F >::isAvailable(), reco::CaloMuon::isCaloCompatibilityValid(), reco::Muon::isEnergyValid(), isGoodRPCMuon(), isGoodTrack(), isGoodTrackerMuon(), reco::Muon::isTimeValid(), edm::HandleBase::isValid(), j, jetDepositName_, linkCollectionHandle_, electronStore::links, LogDebug, LogTrace, makeCaloMuon(), makeMuon(), reco::Muon::matches(), minPCaloMuon_, metsig::muon, muonCaloCompatibility_, muonCollectionHandle_, reco::MuonTime::nDof, reco::MuonTimeExtra::nDof(), reco::Muon::OuterTrack, outerTrackCollectionHandle_, TrackDetectorAssociator::OutsideIn, overlap(), reco::CaloMuon::p(), phiOfMuonIneteractionRegion(), edm::Event::put(), reco::Muon::RPCMuon, reco::Muon::setType(), reco::Muon::StandAloneMuon, reco::MuonTrackLinks::standAloneTrack(), theTimingFiller_, reco::Muon::time(), reco::MuonTime::timeAtIpInOut, reco::MuonTimeExtra::timeAtIpInOut(), reco::MuonTime::timeAtIpInOutErr, reco::MuonTimeExtra::timeAtIpInOutErr(), reco::MuonTime::timeAtIpOutIn, reco::MuonTimeExtra::timeAtIpOutIn(), reco::MuonTime::timeAtIpOutInErr, reco::MuonTimeExtra::timeAtIpOutInErr(), trackDepositName_, susybsm::HSCParticleType::trackerMuon, reco::Muon::TrackerMuon, reco::MuonTrackLinks::trackerTrack(), MuonIdTruthInfo::truthMatchMuon(), validateGlobalMuonPair(), and writeIsoDeposits_.

478 {
479  // TimerStack timers;
480  // timers.push("MuonIdProducer::produce");
481 
482  std::auto_ptr<reco::MuonCollection> outputMuons(new reco::MuonCollection);
483  std::auto_ptr<reco::CaloMuonCollection> caloMuons( new reco::CaloMuonCollection );
484 
485  init(iEvent, iSetup);
486 
487  std::auto_ptr<reco::MuonTimeExtraMap> muonTimeMap(new reco::MuonTimeExtraMap());
488  reco::MuonTimeExtraMap::Filler filler(*muonTimeMap);
489  std::auto_ptr<reco::MuonTimeExtraMap> muonTimeMapDT(new reco::MuonTimeExtraMap());
490  reco::MuonTimeExtraMap::Filler fillerDT(*muonTimeMapDT);
491  std::auto_ptr<reco::MuonTimeExtraMap> muonTimeMapCSC(new reco::MuonTimeExtraMap());
492  reco::MuonTimeExtraMap::Filler fillerCSC(*muonTimeMapCSC);
493 
494  std::auto_ptr<reco::IsoDepositMap> trackDepMap(new reco::IsoDepositMap());
495  reco::IsoDepositMap::Filler trackDepFiller(*trackDepMap);
496  std::auto_ptr<reco::IsoDepositMap> ecalDepMap(new reco::IsoDepositMap());
497  reco::IsoDepositMap::Filler ecalDepFiller(*ecalDepMap);
498  std::auto_ptr<reco::IsoDepositMap> hcalDepMap(new reco::IsoDepositMap());
499  reco::IsoDepositMap::Filler hcalDepFiller(*hcalDepMap);
500  std::auto_ptr<reco::IsoDepositMap> hoDepMap(new reco::IsoDepositMap());
501  reco::IsoDepositMap::Filler hoDepFiller(*hoDepMap);
502  std::auto_ptr<reco::IsoDepositMap> jetDepMap(new reco::IsoDepositMap());
503  reco::IsoDepositMap::Filler jetDepFiller(*jetDepMap);
504 
505  // loop over input collections
506 
507  // muons first - no cleaning, take as is.
509  for ( reco::MuonCollection::const_iterator muon = muonCollectionHandle_->begin();
510  muon != muonCollectionHandle_->end(); ++muon )
511  outputMuons->push_back(*muon);
512 
513  // links second ( assume global muon type )
515  std::vector<bool> goodmuons(linkCollectionHandle_->size(),true);
516  if ( goodmuons.size()>1 ){
517  // check for shared tracker tracks
518  for ( unsigned int i=0; i<linkCollectionHandle_->size()-1; ++i ){
519  if (!checkLinks(&linkCollectionHandle_->at(i))) continue;
520  for ( unsigned int j=i+1; j<linkCollectionHandle_->size(); ++j ){
521  if (!checkLinks(&linkCollectionHandle_->at(j))) continue;
522  if ( linkCollectionHandle_->at(i).trackerTrack().isNonnull() &&
523  linkCollectionHandle_->at(i).trackerTrack() ==
524  linkCollectionHandle_->at(j).trackerTrack() )
525  {
526  // Tracker track is the essential part that dominates muon resolution
527  // so taking either muon is fine. All that is important is to preserve
528  // the muon identification information. If number of hits is small,
529  // keep the one with large number of hits, otherwise take the smalest chi2/ndof
531  goodmuons[j] = false;
532  else
533  goodmuons[i] = false;
534  }
535  }
536  }
537  // check for shared stand-alone muons.
538  for ( unsigned int i=0; i<linkCollectionHandle_->size()-1; ++i ){
539  if ( !goodmuons[i] ) continue;
540  if (!checkLinks(&linkCollectionHandle_->at(i))) continue;
541  for ( unsigned int j=i+1; j<linkCollectionHandle_->size(); ++j ){
542  if ( !goodmuons[j] ) continue;
543  if (!checkLinks(&linkCollectionHandle_->at(j))) continue;
544  if ( linkCollectionHandle_->at(i).standAloneTrack().isNonnull() &&
545  linkCollectionHandle_->at(i).standAloneTrack() ==
546  linkCollectionHandle_->at(j).standAloneTrack() )
547  {
549  goodmuons[j] = false;
550  else
551  goodmuons[i] = false;
552  }
553  }
554  }
555  }
556  for ( unsigned int i=0; i<linkCollectionHandle_->size(); ++i ){
557  if ( !goodmuons[i] ) continue;
559  if ( ! checkLinks(links)) continue;
560  // check if this muon is already in the list
561  bool newMuon = true;
562  for ( reco::MuonCollection::const_iterator muon = outputMuons->begin();
563  muon != outputMuons->end(); ++muon )
564  if ( muon->track() == links->trackerTrack() &&
565  muon->standAloneMuon() == links->standAloneTrack() &&
566  muon->combinedMuon() == links->globalTrack() )
567  newMuon = false;
568  if ( newMuon ) {
569  outputMuons->push_back( makeMuon( *links ) );
570  outputMuons->back().setType(reco::Muon::GlobalMuon | reco::Muon::StandAloneMuon);
571  }
572  }
573  }
574 
575  // tracker and calo muons are next
577  LogTrace("MuonIdentification") << "Creating tracker muons";
578  for ( unsigned int i = 0; i < innerTrackCollectionHandle_->size(); ++i )
579  {
580  const reco::Track& track = innerTrackCollectionHandle_->at(i);
581  if ( ! isGoodTrack( track ) ) continue;
582  bool splitTrack = false;
583  if ( track.extra().isAvailable() &&
584  TrackDetectorAssociator::crossedIP( track ) ) splitTrack = true;
585  std::vector<TrackDetectorAssociator::Direction> directions;
586  if ( splitTrack ) {
587  directions.push_back(TrackDetectorAssociator::InsideOut);
588  directions.push_back(TrackDetectorAssociator::OutsideIn);
589  } else {
590  directions.push_back(TrackDetectorAssociator::Any);
591  }
592  for ( std::vector<TrackDetectorAssociator::Direction>::const_iterator direction = directions.begin();
593  direction != directions.end(); ++direction )
594  {
595  // make muon
596  // timers.push("MuonIdProducer::produce::fillMuonId");
599  fillMuonId(iEvent, iSetup, trackerMuon, *direction);
600  // timers.pop();
601 
602  if ( debugWithTruthMatching_ ) {
603  // add MC hits to a list of matched segments.
604  // Since it's debugging mode - code is slow
606  }
607 
608  // check if this muon is already in the list
609  // have to check where muon hits are really located
610  // to match properly
611  bool newMuon = true;
612  bool goodTrackerMuon = isGoodTrackerMuon( trackerMuon );
613  bool goodRPCMuon = isGoodRPCMuon( trackerMuon );
614  for ( reco::MuonCollection::iterator muon = outputMuons->begin();
615  muon != outputMuons->end(); ++muon )
616  {
617  if ( muon->innerTrack().get() == trackerMuon.innerTrack().get() &&
620  {
621  newMuon = false;
622  muon->setMatches( trackerMuon.matches() );
623  if (trackerMuon.isTimeValid()) muon->setTime( trackerMuon.time() );
624  if (trackerMuon.isEnergyValid()) muon->setCalEnergy( trackerMuon.calEnergy() );
625  if (goodTrackerMuon) muon->setType( muon->type() | reco::Muon::TrackerMuon );
626  if (goodRPCMuon) muon->setType( muon->type() | reco::Muon::RPCMuon );
627  LogTrace("MuonIdentification") << "Found a corresponding global muon. Set energy, matches and move on";
628  break;
629  }
630  }
631  if ( newMuon ) {
632  if ( goodTrackerMuon ){
633  outputMuons->push_back( trackerMuon );
634  } else {
635  LogTrace("MuonIdentification") << "track failed minimal number of muon matches requirement";
636  const reco::CaloMuon& caloMuon = makeCaloMuon(trackerMuon);
637  if ( ! caloMuon.isCaloCompatibilityValid() || caloMuon.caloCompatibility() < caloCut_ || caloMuon.p() < minPCaloMuon_) continue;
638  caloMuons->push_back( caloMuon );
639  }
640  }
641  }
642  }
643  }
644 
645  // and at last the stand alone muons
647  LogTrace("MuonIdentification") << "Looking for new muons among stand alone muon tracks";
648  for ( unsigned int i = 0; i < outerTrackCollectionHandle_->size(); ++i )
649  {
650  // check if this muon is already in the list of global muons
651  bool newMuon = true;
652  for ( reco::MuonCollection::iterator muon = outputMuons->begin();
653  muon != outputMuons->end(); ++muon )
654  {
655  if ( ! muon->standAloneMuon().isNull() ) {
656  // global muon
657  if ( muon->standAloneMuon().get() == &(outerTrackCollectionHandle_->at(i)) ) {
658  newMuon = false;
659  break;
660  }
661  } else {
662  // tracker muon - no direct links to the standalone muon
663  // since we have only a few real muons in an event, matching
664  // the stand alone muon to the tracker muon by DetIds should
665  // be good enough for association. At the end it's up to a
666  // user to redefine the association and what it means. Here
667  // we would like to avoid obvious double counting and we
668  // tolerate a potential miss association
669  if ( overlap(*muon,outerTrackCollectionHandle_->at(i))>0 ) {
670  LogTrace("MuonIdentification") << "Found associated tracker muon. Set a reference and move on";
671  newMuon = false;
672  muon->setOuterTrack( reco::TrackRef( outerTrackCollectionHandle_, i ) );
673  muon->setType( muon->type() | reco::Muon::StandAloneMuon );
674  break;
675  }
676  }
677  }
678  if ( newMuon ) {
679  LogTrace("MuonIdentification") << "No associated stand alone track is found. Making a muon";
680  outputMuons->push_back( makeMuon(iEvent, iSetup,
682  outputMuons->back().setType( reco::Muon::StandAloneMuon );
683  }
684  }
685  }
686 
687  LogTrace("MuonIdentification") << "Dress up muons if it's necessary";
688 
689  int nMuons=outputMuons->size();
690 
691  std::vector<reco::MuonTimeExtra> dtTimeColl(nMuons);
692  std::vector<reco::MuonTimeExtra> cscTimeColl(nMuons);
693  std::vector<reco::MuonTimeExtra> combinedTimeColl(nMuons);
694  std::vector<reco::IsoDeposit> trackDepColl(nMuons);
695  std::vector<reco::IsoDeposit> ecalDepColl(nMuons);
696  std::vector<reco::IsoDeposit> hcalDepColl(nMuons);
697  std::vector<reco::IsoDeposit> hoDepColl(nMuons);
698  std::vector<reco::IsoDeposit> jetDepColl(nMuons);
699 
700  // Fill various information
701  unsigned int i=0;
702  for ( reco::MuonCollection::iterator muon = outputMuons->begin(); muon != outputMuons->end(); ++muon )
703  {
704  // Fill muonID
705  // timers.push("MuonIdProducer::produce::fillMuonId");
706  if ( ( fillMatching_ && ! muon->isMatchesValid() ) ||
707  ( fillEnergy_ && !muon->isEnergyValid() ) )
708  {
709  // predict direction based on the muon interaction region location
710  // if it's available
711  if ( muon->isStandAloneMuon() ) {
712  if ( cos(phiOfMuonIneteractionRegion(*muon) - muon->phi()) > 0 )
714  else
716  } else {
717  LogTrace("MuonIdentification") << "THIS SHOULD NEVER HAPPEN";
718  fillMuonId(iEvent, iSetup, *muon);
719  }
720  }
721 
723  // Fill global quality information
724  fillGlbQuality(iEvent, iSetup, *muon);
725  }
726  LogDebug("MuonIdentification");
727 
728  if (fillTrackerKink_) {
730  }
731 
732  // timers.push("MuonIdProducer::produce::fillCaloCompatibility");
733  if ( fillCaloCompatibility_ ) muon->setCaloCompatibility( muonCaloCompatibility_.evaluate(*muon) );
734  // timers.pop();
735 
736  // timers.push("MuonIdProducer::produce::fillIsolation");
737  if ( fillIsolation_ ) fillMuonIsolation(iEvent, iSetup, *muon,
738  trackDepColl[i], ecalDepColl[i], hcalDepColl[i], hoDepColl[i], jetDepColl[i]);
739  // timers.pop();
740 
741  // fill timing information
742  reco::MuonTime muonTime;
743  reco::MuonTimeExtra dtTime;
744  reco::MuonTimeExtra cscTime;
745  reco::MuonTimeExtra combinedTime;
746 
747  theTimingFiller_->fillTiming(*muon, dtTime, cscTime, combinedTime, iEvent, iSetup);
748 
749  muonTime.nDof=combinedTime.nDof();
750  muonTime.timeAtIpInOut=combinedTime.timeAtIpInOut();
751  muonTime.timeAtIpInOutErr=combinedTime.timeAtIpInOutErr();
752  muonTime.timeAtIpOutIn=combinedTime.timeAtIpOutIn();
753  muonTime.timeAtIpOutInErr=combinedTime.timeAtIpOutInErr();
754 
755  muon->setTime( muonTime);
756  dtTimeColl[i] = dtTime;
757  cscTimeColl[i] = cscTime;
758  combinedTimeColl[i] = combinedTime;
759 
760  i++;
761 
762  }
763 
764  LogTrace("MuonIdentification") << "number of muons produced: " << outputMuons->size();
765  // timers.push("MuonIdProducer::produce::fillArbitration");
766  if ( fillMatching_ ) fillArbitrationInfo( outputMuons.get() );
767  // timers.pop();
768  edm::OrphanHandle<reco::MuonCollection> muonHandle = iEvent.put(outputMuons);
769 
770  filler.insert(muonHandle, combinedTimeColl.begin(), combinedTimeColl.end());
771  filler.fill();
772  fillerDT.insert(muonHandle, dtTimeColl.begin(), dtTimeColl.end());
773  fillerDT.fill();
774  fillerCSC.insert(muonHandle, cscTimeColl.begin(), cscTimeColl.end());
775  fillerCSC.fill();
776 
777  iEvent.put(muonTimeMap,"combined");
778  iEvent.put(muonTimeMapDT,"dt");
779  iEvent.put(muonTimeMapCSC,"csc");
780 
782  trackDepFiller.insert(muonHandle, trackDepColl.begin(), trackDepColl.end());
783  trackDepFiller.fill();
784  iEvent.put(trackDepMap, trackDepositName_);
785  ecalDepFiller.insert(muonHandle, ecalDepColl.begin(), ecalDepColl.end());
786  ecalDepFiller.fill();
787  iEvent.put(ecalDepMap, ecalDepositName_);
788  hcalDepFiller.insert(muonHandle, hcalDepColl.begin(), hcalDepColl.end());
789  hcalDepFiller.fill();
790  iEvent.put(hcalDepMap, hcalDepositName_);
791  hoDepFiller.insert(muonHandle, hoDepColl.begin(), hoDepColl.end());
792  hoDepFiller.fill();
793  iEvent.put(hoDepMap, hoDepositName_);
794  jetDepFiller.insert(muonHandle, jetDepColl.begin(), jetDepColl.end());
795  jetDepFiller.fill();
796  iEvent.put(jetDepMap, jetDepositName_);
797  }
798 
799  iEvent.put(caloMuons);
800 }
#define LogDebug(id)
std::string hoDepositName_
std::string jetDepositName_
bool isGoodRPCMuon(const reco::Muon &muon)
int i
Definition: DBlmapReader.cc:9
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
static const unsigned int GlobalMuon
Definition: Muon.h:207
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)
static bool crossedIP(const reco::Track &track)
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:96
void fillMuonId(edm::Event &, const edm::EventSetup &, reco::Muon &, TrackDetectorAssociator::Direction direction=TrackDetectorAssociator::InsideOut)
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
int overlap(const reco::Muon &muon, const reco::Track &track)
bool fillCaloCompatibility_
std::string trackDepositName_
double phiOfMuonIneteractionRegion(const reco::Muon &muon) const
std::vector< CaloMuon > CaloMuonCollection
collection of Muon objects
Definition: MuonFwd.h:27
double evaluate(const reco::Muon &)
MuonCaloCompatibility muonCaloCompatibility_
float timeAtIpOutInErr() const
Definition: MuonTimeExtra.h:49
bool isAvailable() const
Definition: Ref.h:276
void fillGlbQuality(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon)
int nDof() const
number of measurements used in timing calculation
Definition: MuonTimeExtra.h:22
float timeAtIpOutInErr
Definition: MuonTime.h:18
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
void init(edm::Event &, const edm::EventSetup &)
bool isCaloCompatibilityValid() const
Definition: CaloMuon.h:44
void fillArbitrationInfo(reco::MuonCollection *)
void fillTrackerKink(reco::Muon &aMuon)
double p() const
momentum vector magnitude
Definition: CaloMuon.h:51
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
bool isGoodTrackerMuon(const reco::Muon &muon)
bool checkLinks(const reco::MuonTrackLinks *) const
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
float timeAtIpInOutErr
Definition: MuonTime.h:15
std::string ecalDepositName_
float timeAtIpOutIn
b) particle is moving from outside in
Definition: MuonTime.h:17
int nDof
number of muon stations used
Definition: MuonTime.h:10
float timeAtIpInOutErr() const
Definition: MuonTimeExtra.h:44
int j
Definition: DBlmapReader.cc:9
bool isValid() const
Definition: HandleBase.h:76
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
#define LogTrace(id)
reco::CaloMuon makeCaloMuon(const reco::Muon &)
static const unsigned int RPCMuon
Definition: Muon.h:212
static const unsigned int TrackerMuon
Definition: Muon.h:208
MuonTimingFiller * theTimingFiller_
float timeAtIpInOut() const
Definition: MuonTimeExtra.h:43
bool fillGlobalTrackQuality_
std::string hcalDepositName_
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
bool isGoodTrack(const reco::Track &track)
static const unsigned int StandAloneMuon
Definition: Muon.h:209
float timeAtIpOutIn() const
b) particle is moving from outside in
Definition: MuonTimeExtra.h:48
void fillTiming(const reco::Muon &muon, reco::MuonTimeExtra &dtTime, reco::MuonTimeExtra &cscTime, reco::MuonTimeExtra &combinedTime, edm::Event &iEvent, const edm::EventSetup &iSetup)
float caloCompatibility() const
Definition: CaloMuon.h:42
bool validateGlobalMuonPair(const reco::MuonTrackLinks &goodMuon, const reco::MuonTrackLinks &badMuon)
bool debugWithTruthMatching_
float timeAtIpInOut
Definition: MuonTime.h:14
edm::Handle< reco::MuonCollection > muonCollectionHandle_
double MuonIdProducer::sectorPhi ( const DetId id)
static

Definition at line 1247 of file MuonIdProducer.cc.

References MuonSubdetId::CSC, MuonSubdetId::DT, M_PI, phi, DTChamberId::sector(), and CSCDetId::triggerSector().

Referenced by phiOfMuonIneteractionRegion().

1248 {
1249  double phi = 0;
1250  if( id.subdetId() == MuonSubdetId::DT ) { // DT
1251  DTChamberId muonId(id.rawId());
1252  if ( muonId.sector() <= 12 )
1253  phi = (muonId.sector()-1)/6.*M_PI;
1254  if ( muonId.sector() == 13 ) phi = 3/6.*M_PI;
1255  if ( muonId.sector() == 14 ) phi = 9/6.*M_PI;
1256  }
1257  if( id.subdetId() == MuonSubdetId::CSC ) { // CSC
1258  CSCDetId muonId(id.rawId());
1259  phi = M_PI/4+(muonId.triggerSector()-1)/3.*M_PI;
1260  }
1261  if ( phi > M_PI ) phi -= 2*M_PI;
1262  return phi;
1263 }
static const int CSC
Definition: MuonSubdetId.h:13
#define M_PI
Definition: BFit3D.cc:3
static const int DT
Definition: MuonSubdetId.h:12
Definition: DDAxes.h:10

Member Data Documentation

bool MuonIdProducer::addExtraSoftMuons_
private

Definition at line 132 of file MuonIdProducer.h.

Referenced by isGoodRPCMuon(), isGoodTrackerMuon(), and MuonIdProducer().

bool MuonIdProducer::arbClean_
private

Definition at line 191 of file MuonIdProducer.h.

Referenced by fillArbitrationInfo(), and MuonIdProducer().

double MuonIdProducer::caloCut_
private

Definition at line 189 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::debugWithTruthMatching_
private

Definition at line 149 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

edm::Handle<reco::TrackToTrackMap> MuonIdProducer::dytCollectionHandle_
private

Definition at line 157 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonIdProducer::dytCollectionToken_
private

Definition at line 165 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::string MuonIdProducer::ecalDepositName_
private

Definition at line 177 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::fillCaloCompatibility_
private

Definition at line 141 of file MuonIdProducer.h.

Referenced by makeCaloMuon(), MuonIdProducer(), and produce().

bool MuonIdProducer::fillEnergy_
private

Definition at line 142 of file MuonIdProducer.h.

Referenced by fillMuonId(), MuonIdProducer(), and produce().

bool MuonIdProducer::fillGlobalTrackQuality_
private

Definition at line 182 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::fillGlobalTrackRefits_
private

Definition at line 183 of file MuonIdProducer.h.

Referenced by init(), makeMuon(), and MuonIdProducer().

bool MuonIdProducer::fillIsolation_
private

Definition at line 144 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::fillMatching_
private

Definition at line 143 of file MuonIdProducer.h.

Referenced by fillMuonId(), MuonIdProducer(), and produce().

bool MuonIdProducer::fillTrackerKink_
private

Definition at line 186 of file MuonIdProducer.h.

Referenced by init(), MuonIdProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<reco::MuonQuality> > MuonIdProducer::glbQualToken_
private

Definition at line 168 of file MuonIdProducer.h.

Referenced by fillGlbQuality(), and MuonIdProducer().

edm::InputTag MuonIdProducer::globalTrackQualityInputTag_
private

Definition at line 184 of file MuonIdProducer.h.

Referenced by MuonIdProducer().

std::string MuonIdProducer::hcalDepositName_
private

Definition at line 178 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

std::string MuonIdProducer::hoDepositName_
private

Definition at line 179 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

edm::Handle<reco::TrackCollection> MuonIdProducer::innerTrackCollectionHandle_
private

Definition at line 151 of file MuonIdProducer.h.

Referenced by init(), and produce().

edm::EDGetTokenT<reco::TrackCollection> MuonIdProducer::innerTrackCollectionToken_
private

Definition at line 159 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::vector<edm::InputTag> MuonIdProducer::inputCollectionLabels_
private

Definition at line 121 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::vector<std::string> MuonIdProducer::inputCollectionTypes_
private

Definition at line 122 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::string MuonIdProducer::jetDepositName_
private

Definition at line 180 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

edm::Handle<reco::MuonTrackLinksCollection> MuonIdProducer::linkCollectionHandle_
private

Definition at line 154 of file MuonIdProducer.h.

Referenced by init(), and produce().

edm::EDGetTokenT<reco::MuonTrackLinksCollection> MuonIdProducer::linkCollectionToken_
private

Definition at line 162 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

double MuonIdProducer::maxAbsDx_
private

Definition at line 135 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsDy_
private

Definition at line 137 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsEta_
private

Definition at line 131 of file MuonIdProducer.h.

Referenced by isGoodTrack(), and MuonIdProducer().

double MuonIdProducer::maxAbsPullX_
private

Definition at line 136 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsPullY_
private

Definition at line 138 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

MuonMesh* MuonIdProducer::meshAlgo_
private

Definition at line 192 of file MuonIdProducer.h.

Referenced by beginRun(), fillArbitrationInfo(), MuonIdProducer(), and ~MuonIdProducer().

int MuonIdProducer::minNumberOfMatches_
private

Definition at line 130 of file MuonIdProducer.h.

Referenced by isGoodRPCMuon(), isGoodTrackerMuon(), and MuonIdProducer().

double MuonIdProducer::minP_
private

Definition at line 128 of file MuonIdProducer.h.

Referenced by isGoodRPCMuon(), isGoodTrack(), isGoodTrackerMuon(), and MuonIdProducer().

double MuonIdProducer::minPCaloMuon_
private

Definition at line 129 of file MuonIdProducer.h.

Referenced by isGoodTrack(), MuonIdProducer(), and produce().

double MuonIdProducer::minPt_
private

Definition at line 127 of file MuonIdProducer.h.

Referenced by isGoodRPCMuon(), isGoodTrack(), isGoodTrackerMuon(), and MuonIdProducer().

reco::isodeposit::IsoDepositExtractor* MuonIdProducer::muIsoExtractorCalo_
private

Definition at line 173 of file MuonIdProducer.h.

Referenced by fillMuonIsolation(), MuonIdProducer(), and ~MuonIdProducer().

reco::isodeposit::IsoDepositExtractor* MuonIdProducer::muIsoExtractorJet_
private

Definition at line 175 of file MuonIdProducer.h.

Referenced by fillMuonIsolation(), MuonIdProducer(), and ~MuonIdProducer().

reco::isodeposit::IsoDepositExtractor* MuonIdProducer::muIsoExtractorTrack_
private

Definition at line 174 of file MuonIdProducer.h.

Referenced by fillMuonIsolation(), MuonIdProducer(), and ~MuonIdProducer().

MuonCaloCompatibility MuonIdProducer::muonCaloCompatibility_
private

Definition at line 172 of file MuonIdProducer.h.

Referenced by makeCaloMuon(), MuonIdProducer(), and produce().

edm::Handle<reco::MuonCollection> MuonIdProducer::muonCollectionHandle_
private

Definition at line 153 of file MuonIdProducer.h.

Referenced by init(), and produce().

edm::EDGetTokenT<reco::MuonCollection> MuonIdProducer::muonCollectionToken_
private

Definition at line 161 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

edm::Handle<reco::TrackCollection> MuonIdProducer::outerTrackCollectionHandle_
private

Definition at line 152 of file MuonIdProducer.h.

Referenced by init(), and produce().

edm::EDGetTokenT<reco::TrackCollection> MuonIdProducer::outerTrackCollectionToken_
private

Definition at line 160 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

TrackAssociatorParameters MuonIdProducer::parameters_
private
edm::Handle<reco::TrackToTrackMap> MuonIdProducer::pickyCollectionHandle_
private

Definition at line 156 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonIdProducer::pickyCollectionToken_
private

Definition at line 164 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

double MuonIdProducer::ptThresholdToFillCandidateP4WithGlobalFit_
private

Definition at line 146 of file MuonIdProducer.h.

Referenced by makeMuon(), and MuonIdProducer().

edm::EDGetTokenT<RPCRecHitCollection> MuonIdProducer::rpcHitToken_
private

Definition at line 167 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::sigmaThresholdToFillCandidateP4WithGlobalFit_
private

Definition at line 147 of file MuonIdProducer.h.

Referenced by makeMuon(), and MuonIdProducer().

MuonTimingFiller* MuonIdProducer::theTimingFiller_
private

Definition at line 124 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), produce(), and ~MuonIdProducer().

edm::Handle<reco::TrackToTrackMap> MuonIdProducer::tpfmsCollectionHandle_
private

Definition at line 155 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

edm::EDGetTokenT<reco::TrackToTrackMap> MuonIdProducer::tpfmsCollectionToken_
private

Definition at line 163 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

TrackDetectorAssociator MuonIdProducer::trackAssociator_
private

Definition at line 118 of file MuonIdProducer.h.

Referenced by fillMuonId(), and init().

std::string MuonIdProducer::trackDepositName_
private

Definition at line 176 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

std::auto_ptr<MuonKinkFinder> MuonIdProducer::trackerKinkFinder_
private

Definition at line 187 of file MuonIdProducer.h.

Referenced by fillTrackerKink(), init(), and MuonIdProducer().

bool MuonIdProducer::writeIsoDeposits_
private

Definition at line 145 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().