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::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef reco::Muon::MuonTrackType TrackType
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase 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::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- 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
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) 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::stream::EDProducerBase
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 54 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_.

54  :
56 {
57  produces<reco::MuonCollection>();
58  produces<reco::CaloMuonCollection>();
59  produces<reco::MuonTimeExtraMap>("combined");
60  produces<reco::MuonTimeExtraMap>("dt");
61  produces<reco::MuonTimeExtraMap>("csc");
62 
63  minPt_ = iConfig.getParameter<double>("minPt");
64  minP_ = iConfig.getParameter<double>("minP");
65  minPCaloMuon_ = iConfig.getParameter<double>("minPCaloMuon");
66  minNumberOfMatches_ = iConfig.getParameter<int>("minNumberOfMatches");
67  addExtraSoftMuons_ = iConfig.getParameter<bool>("addExtraSoftMuons");
68  maxAbsEta_ = iConfig.getParameter<double>("maxAbsEta");
69  maxAbsDx_ = iConfig.getParameter<double>("maxAbsDx");
70  maxAbsPullX_ = iConfig.getParameter<double>("maxAbsPullX");
71  maxAbsDy_ = iConfig.getParameter<double>("maxAbsDy");
72  maxAbsPullY_ = iConfig.getParameter<double>("maxAbsPullY");
73  fillCaloCompatibility_ = iConfig.getParameter<bool>("fillCaloCompatibility");
74  fillEnergy_ = iConfig.getParameter<bool>("fillEnergy");
75  fillMatching_ = iConfig.getParameter<bool>("fillMatching");
76  fillIsolation_ = iConfig.getParameter<bool>("fillIsolation");
77  writeIsoDeposits_ = iConfig.getParameter<bool>("writeIsoDeposits");
78  fillGlobalTrackQuality_ = iConfig.getParameter<bool>("fillGlobalTrackQuality");
79  fillGlobalTrackRefits_ = iConfig.getParameter<bool>("fillGlobalTrackRefits");
80  //SK: (maybe temporary) run it only if the global is also run
81  fillTrackerKink_ = false;
82  if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.getParameter<bool>("fillTrackerKink");
83 
84  ptThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("ptThresholdToFillCandidateP4WithGlobalFit");
85  sigmaThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("sigmaThresholdToFillCandidateP4WithGlobalFit");
86  caloCut_ = iConfig.getParameter<double>("minCaloCompatibility"); //CaloMuons
87  arbClean_ = iConfig.getParameter<bool>("runArbitrationCleaner"); // muon mesh
88 
89  // Load TrackDetectorAssociator parameters
90  edm::ParameterSet parameters = iConfig.getParameter<edm::ParameterSet>("TrackAssociatorParameters");
92  parameters_.loadParameters( parameters, iC );
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_
void loadParameters(const edm::ParameterSet &, edm::ConsumesCollector &)
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_
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::stream::EDProducerBase.

Definition at line 449 of file MuonIdProducer.cc.

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

450 {
451  edm::ESHandle<CSCGeometry> geomHandle;
452  iSetup.get<MuonGeometryRecord>().get(geomHandle);
453 
454  meshAlgo_->setCSCGeometry(geomHandle.product());
455 
456 }
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:86
unsigned int MuonIdProducer::chamberId ( const DetId id)
private

Definition at line 389 of file MuonIdProducer.cc.

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

Referenced by overlap().

390 {
391  switch ( id.det() ) {
392  case DetId::Muon:
393  switch ( id.subdetId() ) {
394  case MuonSubdetId::DT:
395  {
396  DTChamberId detId(id.rawId());
397  return detId.rawId();
398  }
399  break;
400  case MuonSubdetId::CSC:
401  {
402  CSCDetId detId(id.rawId());
403  return detId.chamberId().rawId();
404  }
405  break;
406  default:
407  return 0;
408  }
409  default:
410  return 0;
411  }
412  return 0;
413 }
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 1290 of file MuonIdProducer.cc.

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

Referenced by produce().

1290  {
1291  bool trackBAD = links->trackerTrack().isNull();
1292  bool staBAD = links->standAloneTrack().isNull();
1293  bool glbBAD = links->globalTrack().isNull();
1294  if (trackBAD || staBAD || glbBAD )
1295  {
1296  edm::LogWarning("muonIDbadLinks") << "Global muon links to constituent tracks are invalid: trkBad "
1297  <<trackBAD <<" standaloneBad "<<staBAD<<" globalBad "<<glbBAD
1298  <<". There should be no such object. Muon is skipped.";
1299  return false;
1300  }
1301  return true;
1302 }
bool isNull() const
Checks for null.
Definition: Ref.h:247
void MuonIdProducer::fillArbitrationInfo ( reco::MuonCollection pOutputMuons)
private

Definition at line 995 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().

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

1267 {
1269  iEvent.getByToken(glbQualToken_, glbQualH);
1270 
1271  if(aMuon.isGlobalMuon() && glbQualH.isValid() && !glbQualH.failedToGet()) {
1272  aMuon.setCombinedQuality((*glbQualH)[aMuon.combinedMuon()]);
1273  }
1274 
1275  LogDebug("MuonIdentification") << "tkChiVal " << aMuon.combinedQuality().trkRelChi2;
1276 
1277 }
#define LogDebug(id)
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
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 808 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().

811 {
812  // perform track - detector association
813  const reco::Track* track = 0;
814  if ( ! aMuon.track().isNull() )
815  track = aMuon.track().get();
816  else
817  {
818  if ( ! aMuon.standAloneMuon().isNull() )
819  track = aMuon.standAloneMuon().get();
820  else
821  throw cms::Exception("FatalError") << "Failed to fill muon id information for a muon with undefined references to tracks";
822  }
823 
824  TrackDetMatchInfo info = trackAssociator_.associate(iEvent, iSetup, *track, parameters_, direction);
825 
826  if ( fillEnergy_ ) {
827  reco::MuonEnergy muonEnergy;
830  muonEnergy.ho = info.crossedEnergy(TrackDetMatchInfo::HORecHits);
832  muonEnergy.emS9 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,1); // 3x3 energy
833  muonEnergy.emS25 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,2); // 5x5 energy
834  muonEnergy.hadS9 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits,1); // 3x3 energy
835  muonEnergy.hoS9 = info.nXnEnergy(TrackDetMatchInfo::HORecHits,1); // 3x3 energy
836  muonEnergy.towerS9 = info.nXnEnergy(TrackDetMatchInfo::TowerTotal,1); // 3x3 energy
837  muonEnergy.ecal_position = info.trkGlobPosAtEcal;
838  muonEnergy.hcal_position = info.trkGlobPosAtHcal;
839  if (! info.crossedEcalIds.empty() ) muonEnergy.ecal_id = info.crossedEcalIds.front();
840  if (! info.crossedHcalIds.empty() ) muonEnergy.hcal_id = info.crossedHcalIds.front();
841  // find maximal energy depositions and their time
842  DetId emMaxId = info.findMaxDeposition(TrackDetMatchInfo::EcalRecHits,2); // max energy deposit in 5x5 shape
843  for(std::vector<const EcalRecHit*>::const_iterator hit=info.ecalRecHits.begin();
844  hit!=info.ecalRecHits.end(); ++hit) {
845  if ((*hit)->id() != emMaxId) continue;
846  muonEnergy.emMax = (*hit)->energy();
847  muonEnergy.ecal_time = (*hit)->time();
848  }
849  DetId hadMaxId = info.findMaxDeposition(TrackDetMatchInfo::HcalRecHits,1); // max energy deposit in 3x3 shape
850  for(std::vector<const HBHERecHit*>::const_iterator hit=info.hcalRecHits.begin();
851  hit!=info.hcalRecHits.end(); ++hit) {
852  if ((*hit)->id() != hadMaxId) continue;
853  muonEnergy.hadMax = (*hit)->energy();
854  muonEnergy.hcal_time = (*hit)->time();
855  }
856  aMuon.setCalEnergy( muonEnergy );
857  }
858  if ( ! fillMatching_ && ! aMuon.isTrackerMuon() && ! aMuon.isRPCMuon() ) return;
859 
861  iEvent.getByToken(rpcHitToken_, rpcRecHits);
862 
863  // fill muon match info
864  std::vector<reco::MuonChamberMatch> muonChamberMatches;
865  unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
866  for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.chambers.begin();
867  chamber!=info.chambers.end(); chamber++ )
868  {
869  if (chamber->id.subdetId() == 3 && rpcRecHits.isValid() ) continue; // Skip RPC chambers, they are taken care of below)
870  reco::MuonChamberMatch matchedChamber;
871 
872  LocalError localError = chamber->tState.localError().positionError();
873  matchedChamber.x = chamber->tState.localPosition().x();
874  matchedChamber.y = chamber->tState.localPosition().y();
875  matchedChamber.xErr = sqrt( localError.xx() );
876  matchedChamber.yErr = sqrt( localError.yy() );
877 
878  matchedChamber.dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
879  matchedChamber.dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
880  // DANGEROUS - compiler cannot guaranty parameters ordering
881  AlgebraicSymMatrix55 trajectoryCovMatrix = chamber->tState.localError().matrix();
882  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
883  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
884 
885  matchedChamber.edgeX = chamber->localDistanceX;
886  matchedChamber.edgeY = chamber->localDistanceY;
887 
888  matchedChamber.id = chamber->id;
889  if ( ! chamber->segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
890 
891  // fill segments
892  for( std::vector<TAMuonSegmentMatch>::const_iterator segment = chamber->segments.begin();
893  segment != chamber->segments.end(); segment++ )
894  {
895  reco::MuonSegmentMatch matchedSegment;
896  matchedSegment.x = segment->segmentLocalPosition.x();
897  matchedSegment.y = segment->segmentLocalPosition.y();
898  matchedSegment.dXdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.x()/segment->segmentLocalDirection.z():0;
899  matchedSegment.dYdZ = segment->segmentLocalDirection.z()?segment->segmentLocalDirection.y()/segment->segmentLocalDirection.z():0;
900  matchedSegment.xErr = segment->segmentLocalErrorXX>0?sqrt(segment->segmentLocalErrorXX):0;
901  matchedSegment.yErr = segment->segmentLocalErrorYY>0?sqrt(segment->segmentLocalErrorYY):0;
902  matchedSegment.dXdZErr = segment->segmentLocalErrorDxDz>0?sqrt(segment->segmentLocalErrorDxDz):0;
903  matchedSegment.dYdZErr = segment->segmentLocalErrorDyDz>0?sqrt(segment->segmentLocalErrorDyDz):0;
904  matchedSegment.t0 = segment->t0;
905  matchedSegment.mask = 0;
906  matchedSegment.dtSegmentRef = segment->dtSegmentRef;
907  matchedSegment.cscSegmentRef = segment->cscSegmentRef;
908  matchedSegment.hasZed_ = segment->hasZed;
909  matchedSegment.hasPhi_ = segment->hasPhi;
910  // test segment
911  bool matchedX = false;
912  bool matchedY = false;
913  LogTrace("MuonIdentification") << " matching local x, segment x: " << matchedSegment.x <<
914  ", chamber x: " << matchedChamber.x << ", max: " << maxAbsDx_;
915  LogTrace("MuonIdentification") << " matching local y, segment y: " << matchedSegment.y <<
916  ", chamber y: " << matchedChamber.y << ", max: " << maxAbsDy_;
917  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 )
918  LogTrace("MuonIdentification") << " xpull: " <<
919  fabs(matchedSegment.x - matchedChamber.x)/sqrt(pow(matchedSegment.xErr,2) + pow(matchedChamber.xErr,2));
920  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 )
921  LogTrace("MuonIdentification") << " ypull: " <<
922  fabs(matchedSegment.y - matchedChamber.y)/sqrt(pow(matchedSegment.yErr,2) + pow(matchedChamber.yErr,2));
923 
924  if (fabs(matchedSegment.x - matchedChamber.x) < maxAbsDx_) matchedX = true;
925  if (fabs(matchedSegment.y - matchedChamber.y) < maxAbsDy_) matchedY = true;
926  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 &&
927  fabs(matchedSegment.x - matchedChamber.x)/sqrt(pow(matchedSegment.xErr,2) + pow(matchedChamber.xErr,2)) < maxAbsPullX_) matchedX = true;
928  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 &&
929  fabs(matchedSegment.y - matchedChamber.y)/sqrt(pow(matchedSegment.yErr,2) + pow(matchedChamber.yErr,2)) < maxAbsPullY_) matchedY = true;
930  if (matchedX && matchedY) matchedChamber.segmentMatches.push_back(matchedSegment);
931  }
932  muonChamberMatches.push_back(matchedChamber);
933  }
934 
935  // Fill RPC info
936  if ( rpcRecHits.isValid() )
937  {
938 
939  for( std::vector<TAMuonChamberMatch>::const_iterator chamber=info.chambers.begin();
940  chamber!=info.chambers.end(); chamber++ )
941  {
942 
943  if ( chamber->id.subdetId() != 3 ) continue; // Consider RPC chambers only
944 
945  reco::MuonChamberMatch matchedChamber;
946 
947  LocalError localError = chamber->tState.localError().positionError();
948  matchedChamber.x = chamber->tState.localPosition().x();
949  matchedChamber.y = chamber->tState.localPosition().y();
950  matchedChamber.xErr = sqrt( localError.xx() );
951  matchedChamber.yErr = sqrt( localError.yy() );
952 
953  matchedChamber.dXdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().x()/chamber->tState.localDirection().z():9999;
954  matchedChamber.dYdZ = chamber->tState.localDirection().z()!=0?chamber->tState.localDirection().y()/chamber->tState.localDirection().z():9999;
955  // DANGEROUS - compiler cannot guaranty parameters ordering
956  AlgebraicSymMatrix55 trajectoryCovMatrix = chamber->tState.localError().matrix();
957  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
958  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
959 
960  matchedChamber.edgeX = chamber->localDistanceX;
961  matchedChamber.edgeY = chamber->localDistanceY;
962 
963  matchedChamber.id = chamber->id;
964 
965  for ( RPCRecHitCollection::const_iterator rpcRecHit = rpcRecHits->begin();
966  rpcRecHit != rpcRecHits->end(); ++rpcRecHit )
967  {
968  reco::MuonRPCHitMatch rpcHitMatch;
969 
970  if ( rpcRecHit->rawId() != chamber->id.rawId() ) continue;
971 
972  rpcHitMatch.x = rpcRecHit->localPosition().x();
973  rpcHitMatch.mask = 0;
974  rpcHitMatch.bx = rpcRecHit->BunchX();
975 
976  const double AbsDx = fabs(rpcRecHit->localPosition().x()-chamber->tState.localPosition().x());
977  if( AbsDx <= 20 or AbsDx/sqrt(localError.xx()) <= 4 ) matchedChamber.rpcMatches.push_back(rpcHitMatch);
978  }
979 
980  muonChamberMatches.push_back(matchedChamber);
981  }
982  }
983 
984  aMuon.setMatches(muonChamberMatches);
985 
986  LogTrace("MuonIdentification") << "number of muon chambers: " << aMuon.matches().size() << "\n"
987  << "number of chambers with segments according to the associator requirements: " <<
988  nubmerOfMatchesAccordingToTrackAssociator;
989  LogTrace("MuonIdentification") << "number of segment matches with the producer requirements: " <<
991 
992  // fillTime( iEvent, iSetup, aMuon );
993 }
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:446
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
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
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
bool isValid() const
Definition: HandleBase.h:76
double crossedEnergy(EnergyType)
energy in detector elements crossed by the track by types
bool isNull() const
Checks for null.
Definition: Ref.h:247
#define LogTrace(id)
math::XYZPointF hcal_position
Definition: MuonEnergy.h:44
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
int numberOfMatches(ArbitrationType type=SegmentAndTrackArbitration) const
get number of chambers with matched segments
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
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 1160 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().

1163 {
1164  reco::MuonIsolation isoR03, isoR05;
1165  const reco::Track* track = 0;
1166  if ( ! aMuon.track().isNull() )
1167  track = aMuon.track().get();
1168  else
1169  {
1170  if ( ! aMuon.standAloneMuon().isNull() )
1171  track = aMuon.standAloneMuon().get();
1172  else
1173  throw cms::Exception("FatalError") << "Failed to compute muon isolation information for a muon with undefined references to tracks";
1174  }
1175 
1176  // get deposits
1177  reco::IsoDeposit depTrk = muIsoExtractorTrack_->deposit(iEvent, iSetup, *track );
1178  std::vector<reco::IsoDeposit> caloDeps = muIsoExtractorCalo_->deposits(iEvent, iSetup, *track);
1179  reco::IsoDeposit depJet = muIsoExtractorJet_->deposit(iEvent, iSetup, *track );
1180 
1181  if(caloDeps.size()!=3) {
1182  LogTrace("MuonIdentification") << "Failed to fill vector of calorimeter isolation deposits!";
1183  return;
1184  }
1185 
1186  reco::IsoDeposit depEcal = caloDeps.at(0);
1187  reco::IsoDeposit depHcal = caloDeps.at(1);
1188  reco::IsoDeposit depHo = caloDeps.at(2);
1189 
1190  trackDep = depTrk;
1191  ecalDep = depEcal;
1192  hcalDep = depHcal;
1193  hoDep = depHo;
1194  jetDep = depJet;
1195 
1196  isoR03.sumPt = depTrk.depositWithin(0.3);
1197  isoR03.emEt = depEcal.depositWithin(0.3);
1198  isoR03.hadEt = depHcal.depositWithin(0.3);
1199  isoR03.hoEt = depHo.depositWithin(0.3);
1200  isoR03.nTracks = depTrk.depositAndCountWithin(0.3).second;
1201  isoR03.nJets = depJet.depositAndCountWithin(0.3).second;
1202  isoR03.trackerVetoPt = depTrk.candEnergy();
1203  isoR03.emVetoEt = depEcal.candEnergy();
1204  isoR03.hadVetoEt = depHcal.candEnergy();
1205  isoR03.hoVetoEt = depHo.candEnergy();
1206 
1207  isoR05.sumPt = depTrk.depositWithin(0.5);
1208  isoR05.emEt = depEcal.depositWithin(0.5);
1209  isoR05.hadEt = depHcal.depositWithin(0.5);
1210  isoR05.hoEt = depHo.depositWithin(0.5);
1211  isoR05.nTracks = depTrk.depositAndCountWithin(0.5).second;
1212  isoR05.nJets = depJet.depositAndCountWithin(0.5).second;
1213  isoR05.trackerVetoPt = depTrk.candEnergy();
1214  isoR05.emVetoEt = depEcal.candEnergy();
1215  isoR05.hadVetoEt = depHcal.candEnergy();
1216  isoR05.hoVetoEt = depHo.candEnergy();
1217 
1218 
1219  aMuon.setIsolation(isoR03, isoR05);
1220 
1221 }
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
double depositWithin(double coneSize, const Vetos &vetos=Vetos(), bool skipDepositVeto=false) const
Get deposit.
Definition: IsoDeposit.cc:34
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
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
bool isNull() const
Checks for null.
Definition: Ref.h:247
#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
void setIsolation(const MuonIsolation &isoR03, const MuonIsolation &isoR05)
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
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 1279 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().

1279  {
1280  // skip muons with no tracks
1281  if (aMuon.innerTrack().isNull()) return;
1282  // get quality from muon if already there, otherwise make empty one
1283  reco::MuonQuality quality = (aMuon.isQualityValid() ? aMuon.combinedQuality() : reco::MuonQuality());
1284  // fill it
1285  bool filled = trackerKinkFinder_->fillTrkKink(quality, *aMuon.innerTrack());
1286  // if quality was there, or if we filled it, commit to the muon
1287  if (filled || aMuon.isQualityValid()) aMuon.setCombinedQuality(quality);
1288 }
virtual TrackRef innerTrack() const
Definition: Muon.h:48
std::auto_ptr< MuonKinkFinder > trackerKinkFinder_
MuonQuality combinedQuality() const
get energy deposition information
Definition: Muon.h:121
bool isQualityValid() const
Definition: Muon.h:119
bool isNull() const
Checks for null.
Definition: Ref.h:247
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(), TrackDetectorAssociator::setPropagator(), tpfmsCollectionHandle_, tpfmsCollectionToken_, trackAssociator_, and trackerKinkFinder_.

Referenced by produce().

213 {
218 
222 
223 
224  edm::ESHandle<Propagator> propagator;
225  iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
226  trackAssociator_.setPropagator(propagator.product());
227 
228  if (fillTrackerKink_) trackerKinkFinder_->init(iSetup);
229 
230  for ( unsigned int i = 0; i < inputCollectionLabels_.size(); ++i ) {
231  if ( inputCollectionTypes_[i] == "inner tracks" ) {
234  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputCollectionLabels_[i];
235  LogTrace("MuonIdentification") << "Number of input inner tracks: " << innerTrackCollectionHandle_->size();
236  continue;
237  }
238  if ( inputCollectionTypes_[i] == "outer tracks" ) {
241  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputCollectionLabels_[i];
242  LogTrace("MuonIdentification") << "Number of input outer tracks: " << outerTrackCollectionHandle_->size();
243  continue;
244  }
245  if ( inputCollectionTypes_[i] == "links" ) {
248  throw cms::Exception("FatalError") << "Failed to get input link collection with label: " << inputCollectionLabels_[i];
249  LogTrace("MuonIdentification") << "Number of input links: " << linkCollectionHandle_->size();
250  continue;
251  }
252  if ( inputCollectionTypes_[i] == "muons" ) {
255  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
256  LogTrace("MuonIdentification") << "Number of input muons: " << muonCollectionHandle_->size();
257  continue;
258  }
259  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev firstHit" ) {
262  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
263  LogTrace("MuonIdentification") << "Number of input muons: " << tpfmsCollectionHandle_->size();
264  continue;
265  }
266 
267  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev picky" ) {
270  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
271  LogTrace("MuonIdentification") << "Number of input muons: " << pickyCollectionHandle_->size();
272  continue;
273  }
274 
275  if ( fillGlobalTrackRefits_ && inputCollectionTypes_[i] == "tev dyt" ) {
277  if (! dytCollectionHandle_.isValid())
278  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputCollectionLabels_[i];
279  LogTrace("MuonIdentification") << "Number of input muons: " << dytCollectionHandle_->size();
280  continue;
281  }
282  throw cms::Exception("FatalError") << "Unknown input collection type: " << inputCollectionTypes_[i];
283  }
284 }
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
TrackDetectorAssociator trackAssociator_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
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:86
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 799 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().

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

Definition at line 372 of file MuonIdProducer.cc.

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

Referenced by produce().

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

Definition at line 790 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().

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

Definition at line 300 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().

301 {
302  reco::CaloMuon aMuon;
303  aMuon.setInnerTrack( muon.innerTrack() );
304 
305  if (muon.isEnergyValid()) aMuon.setCalEnergy( muon.calEnergy() );
306  // get calo compatibility
308  return aMuon;
309 }
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 286 of file MuonIdProducer.cc.

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

Referenced by makeMuon(), and produce().

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

Definition at line 312 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().

313 {
314  LogTrace("MuonIdentification") << "Creating a muon from a link to tracks object";
315 
316  reco::Muon aMuon;
317  reco::Muon::MuonTrackTypePair chosenTrack;
318  reco::TrackRef tpfmsRef;
319  reco::TrackRef pickyRef;
320  reco::TrackRef dytRef;
321  bool useSigmaSwitch = false;
322 
325 
329 
330  if (tpfmsRef.isNull() && pickyRef.isNull() && dytRef.isNull()){
331  edm::LogWarning("MakeMuonWithTEV")<<"Failed to get TEV refits, fall back to sigma switch.";
332  useSigmaSwitch = true;
333  }
334  } else {
335  useSigmaSwitch = true;
336  }
337 
338  if (useSigmaSwitch){
339  chosenTrack = muon::sigmaSwitch( links.globalTrack(), links.trackerTrack(),
342  } else {
343  chosenTrack = muon::tevOptimized( links.globalTrack(), links.trackerTrack(),
344  tpfmsRef, pickyRef, dytRef,
346  }
347  aMuon = makeMuon(*chosenTrack.first);
348  aMuon.setInnerTrack( links.trackerTrack() );
349  aMuon.setOuterTrack( links.standAloneTrack() );
350  aMuon.setGlobalTrack( links.globalTrack() );
351  aMuon.setBestTrack(chosenTrack.second);
352  aMuon.setTunePBestTrack(chosenTrack.second);
353 
357  if (it != tpfmsCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::TPFMS, (it->val));
358  }
361  if (it != pickyCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::Picky, (it->val));
362  }
365  if (it != dytCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::DYT, (it->val));
366  }
367  }
368  return aMuon;
369 }
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
virtual void setTunePBestTrack(MuonTrackType muonType)
Definition: Muon.h:93
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
double ptThresholdToFillCandidateP4WithGlobalFit_
reco::Muon::MuonTrackTypePair sigmaSwitch(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const double nSigma=2., const double ptThreshold=200.)
reco::Muon::MuonTrackTypePair tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackRef &tpfmsTrack, const reco::TrackRef &pickyTrack, const reco::TrackRef &dytTrack, const double ptThreshold=200., const double tune1=17., const double tune2=40., const double dptcut=0.25)
Definition: MuonCocktails.cc:9
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
bool isValid() const
Definition: HandleBase.h:76
bool isNull() const
Checks for null.
Definition: Ref.h:247
#define LogTrace(id)
bool fillGlobalTrackRefits_
void setMuonTrack(const MuonTrackType &, const TrackRef &)
bool failedToGet() const
Definition: HandleBase.h:80
virtual void setOuterTrack(const TrackRef &t)
set reference to Track
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
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
reco::Muon MuonIdProducer::makeMuon ( const reco::Track track)
private

Definition at line 1223 of file MuonIdProducer.cc.

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

1224 {
1225  //FIXME: E = sqrt(p^2 + m^2), where m == 0.105658369(9)GeV
1226  double energy = sqrt(track.p() * track.p() + 0.011163691);
1227  math::XYZTLorentzVector p4(track.px(),
1228  track.py(),
1229  track.pz(),
1230  energy);
1231  return reco::Muon( track.charge(), p4, track.vertex() );
1232 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:663
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:675
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:735
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:687
int charge() const
track electric charge
Definition: TrackBase.h:615
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:681
int MuonIdProducer::overlap ( const reco::Muon muon,
const reco::Track track 
)
private

Definition at line 416 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().

417 {
418  int numberOfCommonDetIds = 0;
419  if ( ! muon.isMatchesValid() ||
420  track.extra().isNull() ||
421  track.extra()->recHitsSize()==0 ) return numberOfCommonDetIds;
422  const std::vector<reco::MuonChamberMatch>& matches( muon.matches() );
423  for ( std::vector<reco::MuonChamberMatch>::const_iterator match = matches.begin();
424  match != matches.end(); ++match )
425  {
426  if ( match->segmentMatches.empty() ) continue;
427  bool foundCommonDetId = false;
428 
429  for ( auto hit = track.extra()->recHitsBegin();
430  hit != track.extra()->recHitsEnd(); ++hit )
431  {
432  // LogTrace("MuonIdentification") << "hit DetId: " << std::hex << hit->get()->geographicalId().rawId() <<
433  // "\t hit chamber DetId: " << getChamberId(hit->get()->geographicalId()) <<
434  // "\t segment DetId: " << match->id.rawId() << std::dec;
435 
436  if ( chamberId((*hit)->geographicalId()) == match->id.rawId() ) {
437  foundCommonDetId = true;
438  break;
439  }
440  }
441  if ( foundCommonDetId ) {
442  numberOfCommonDetIds++;
443  break;
444  }
445  }
446  return numberOfCommonDetIds;
447 }
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:189
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 1252 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().

1253 {
1254  if ( muon.isStandAloneMuon() ) return muon.standAloneMuon()->innerPosition().phi();
1255  // the rest is tracker muon only
1256  if ( muon.matches().empty() ){
1257  if ( muon.innerTrack().isAvailable() &&
1258  muon.innerTrack()->extra().isAvailable() )
1259  return muon.innerTrack()->outerPosition().phi();
1260  else
1261  return muon.phi(); // makes little sense, but what else can I use
1262  }
1263  return sectorPhi(muon.matches().at(0).id);
1264 }
bool isAvailable() const
Definition: Ref.h:614
virtual TrackRef innerTrack() const
Definition: Muon.h:48
virtual float phi() const
momentum azimuthal angle
bool isStandAloneMuon() const
Definition: Muon.h:220
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::stream::EDProducerBase.

Definition at line 474 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_, trackingTruthProducerFastSim_cfi::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(), reco::Muon::type(), validateGlobalMuonPair(), and writeIsoDeposits_.

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

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

Referenced by phiOfMuonIneteractionRegion().

1235 {
1236  double phi = 0;
1237  if( id.subdetId() == MuonSubdetId::DT ) { // DT
1238  DTChamberId muonId(id.rawId());
1239  if ( muonId.sector() <= 12 )
1240  phi = (muonId.sector()-1)/6.*M_PI;
1241  if ( muonId.sector() == 13 ) phi = 3/6.*M_PI;
1242  if ( muonId.sector() == 14 ) phi = 9/6.*M_PI;
1243  }
1244  if( id.subdetId() == MuonSubdetId::CSC ) { // CSC
1245  CSCDetId muonId(id.rawId());
1246  phi = M_PI/4+(muonId.triggerSector()-1)/3.*M_PI;
1247  }
1248  if ( phi > M_PI ) phi -= 2*M_PI;
1249  return phi;
1250 }
bool muonId(HWW &, unsigned int index, SelectionType type)
static const int CSC
Definition: MuonSubdetId.h:13
#define M_PI
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().