CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | 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

Classes

struct  ICTypes
 

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 Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

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
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 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
std::vector< ConsumesInfoconsumesInfo () const
 
 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
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) 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

bool approxEqual (const double a, const double b, const double tol=1E-3) const
 
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::Handle< edm::ValueMap
< reco::MuonQuality > > 
glbQualHandle_
 
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< ICTypes::ICTypeKeyinputCollectionTypes_
 
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::Handle< RPCRecHitCollectionrpcHitHandle_
 
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::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 34 of file MuonIdProducer.cc.

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

34  :
36 {
37  produces<reco::MuonCollection>();
38  produces<reco::CaloMuonCollection>();
39  produces<reco::MuonTimeExtraMap>("combined");
40  produces<reco::MuonTimeExtraMap>("dt");
41  produces<reco::MuonTimeExtraMap>("csc");
42 
43  minPt_ = iConfig.getParameter<double>("minPt");
44  minP_ = iConfig.getParameter<double>("minP");
45  minPCaloMuon_ = iConfig.getParameter<double>("minPCaloMuon");
46  minNumberOfMatches_ = iConfig.getParameter<int>("minNumberOfMatches");
47  addExtraSoftMuons_ = iConfig.getParameter<bool>("addExtraSoftMuons");
48  maxAbsEta_ = iConfig.getParameter<double>("maxAbsEta");
49  maxAbsDx_ = iConfig.getParameter<double>("maxAbsDx");
50  maxAbsPullX_ = iConfig.getParameter<double>("maxAbsPullX");
51  maxAbsDy_ = iConfig.getParameter<double>("maxAbsDy");
52  maxAbsPullY_ = iConfig.getParameter<double>("maxAbsPullY");
53  fillCaloCompatibility_ = iConfig.getParameter<bool>("fillCaloCompatibility");
54  fillEnergy_ = iConfig.getParameter<bool>("fillEnergy");
55  fillMatching_ = iConfig.getParameter<bool>("fillMatching");
56  fillIsolation_ = iConfig.getParameter<bool>("fillIsolation");
57  writeIsoDeposits_ = iConfig.getParameter<bool>("writeIsoDeposits");
58  fillGlobalTrackQuality_ = iConfig.getParameter<bool>("fillGlobalTrackQuality");
59  fillGlobalTrackRefits_ = iConfig.getParameter<bool>("fillGlobalTrackRefits");
60  //SK: (maybe temporary) run it only if the global is also run
61  fillTrackerKink_ = false;
62  if (fillGlobalTrackQuality_) fillTrackerKink_ = iConfig.getParameter<bool>("fillTrackerKink");
63 
64  ptThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("ptThresholdToFillCandidateP4WithGlobalFit");
65  sigmaThresholdToFillCandidateP4WithGlobalFit_ = iConfig.getParameter<double>("sigmaThresholdToFillCandidateP4WithGlobalFit");
66  caloCut_ = iConfig.getParameter<double>("minCaloCompatibility"); //CaloMuons
67  arbClean_ = iConfig.getParameter<bool>("runArbitrationCleaner"); // muon mesh
68 
69  // Load TrackDetectorAssociator parameters
70  edm::ParameterSet parameters = iConfig.getParameter<edm::ParameterSet>("TrackAssociatorParameters");
72  parameters_.loadParameters( parameters, iC );
73 
74  // Load parameters for the TimingFiller
75  edm::ParameterSet timingParameters = iConfig.getParameter<edm::ParameterSet>("TimingFillerParameters");
76  theTimingFiller_ = new MuonTimingFiller(timingParameters,consumesCollector());
77 
78 
79  if (fillCaloCompatibility_){
80  // Load MuonCaloCompatibility parameters
81  parameters = iConfig.getParameter<edm::ParameterSet>("MuonCaloCompatibility");
82  muonCaloCompatibility_.configure( parameters );
83  }
84 
85  if (fillIsolation_){
86  // Load MuIsoExtractor parameters
87  edm::ParameterSet caloExtractorPSet = iConfig.getParameter<edm::ParameterSet>("CaloExtractorPSet");
88  std::string caloExtractorName = caloExtractorPSet.getParameter<std::string>("ComponentName");
89  muIsoExtractorCalo_ = IsoDepositExtractorFactory::get()->create( caloExtractorName, caloExtractorPSet,consumesCollector());
90 
91  edm::ParameterSet trackExtractorPSet = iConfig.getParameter<edm::ParameterSet>("TrackExtractorPSet");
92  std::string trackExtractorName = trackExtractorPSet.getParameter<std::string>("ComponentName");
93  muIsoExtractorTrack_ = IsoDepositExtractorFactory::get()->create( trackExtractorName, trackExtractorPSet,consumesCollector());
94 
95  edm::ParameterSet jetExtractorPSet = iConfig.getParameter<edm::ParameterSet>("JetExtractorPSet");
96  std::string jetExtractorName = jetExtractorPSet.getParameter<std::string>("ComponentName");
97  muIsoExtractorJet_ = IsoDepositExtractorFactory::get()->create( jetExtractorName, jetExtractorPSet,consumesCollector());
98  }
99  if (fillIsolation_ && writeIsoDeposits_){
100  trackDepositName_ = iConfig.getParameter<std::string>("trackDepositName");
101  produces<reco::IsoDepositMap>(trackDepositName_);
102  ecalDepositName_ = iConfig.getParameter<std::string>("ecalDepositName");
103  produces<reco::IsoDepositMap>(ecalDepositName_);
104  hcalDepositName_ = iConfig.getParameter<std::string>("hcalDepositName");
105  produces<reco::IsoDepositMap>(hcalDepositName_);
106  hoDepositName_ = iConfig.getParameter<std::string>("hoDepositName");
107  produces<reco::IsoDepositMap>(hoDepositName_);
108  jetDepositName_ = iConfig.getParameter<std::string>("jetDepositName");
109  produces<reco::IsoDepositMap>(jetDepositName_);
110  }
111 
112  inputCollectionLabels_ = iConfig.getParameter<std::vector<edm::InputTag> >("inputCollectionLabels");
113  const auto inputCollectionTypes = iConfig.getParameter<std::vector<std::string> >("inputCollectionTypes");
114  if (inputCollectionLabels_.size() != inputCollectionTypes.size())
115  throw cms::Exception("ConfigurationError") << "Number of input collection labels is different from number of types. " <<
116  "For each collection label there should be exactly one collection type specified.";
117  if (inputCollectionLabels_.size()>7 ||inputCollectionLabels_.empty())
118  throw cms::Exception("ConfigurationError") << "Number of input collections should be from 1 to 7.";
119 
120  debugWithTruthMatching_ = iConfig.getParameter<bool>("debugWithTruthMatching");
121  if (debugWithTruthMatching_) edm::LogWarning("MuonIdentification")
122  << "========================================================================\n"
123  << "Debugging mode with truth matching is turned on!!! Make sure you understand what you are doing!\n"
124  << "========================================================================\n";
125  if (fillGlobalTrackQuality_){
126  const auto& glbQualTag = iConfig.getParameter<edm::InputTag>("globalTrackQualityInputTag");
127  glbQualToken_ = consumes<edm::ValueMap<reco::MuonQuality> >(glbQualTag);
128  }
129 
130  if (fillTrackerKink_) {
131  trackerKinkFinder_.reset(new MuonKinkFinder(iConfig.getParameter<edm::ParameterSet>("TrackerKinkFinderParameters")));
132  }
133 
134  //create mesh holder
135  meshAlgo_ = new MuonMesh(iConfig.getParameter<edm::ParameterSet>("arbitrationCleanerOptions"));
136 
137 
138  edm::InputTag rpcHitTag("rpcRecHits");
139  rpcHitToken_ = consumes<RPCRecHitCollection>(rpcHitTag);
140 
141 
142  //Consumes... UGH
144  for ( unsigned int i = 0; i < inputCollectionLabels_.size(); ++i ) {
145  const auto inputLabel = inputCollectionLabels_[i];
146  const auto inputType = ICTypes::toKey(inputCollectionTypes[i]); // Note: thorws exception if type is undefined.
147 
148  if ( inputType == ICTypes::INNER_TRACKS ) {
149  innerTrackCollectionToken_ = consumes<reco::TrackCollection>(inputLabel);
150  }
151  else if ( inputType == ICTypes::OUTER_TRACKS ) {
152  outerTrackCollectionToken_ = consumes<reco::TrackCollection>(inputLabel);
153  }
154  else if ( inputType == ICTypes::LINKS ) {
155  linkCollectionToken_ = consumes<reco::MuonTrackLinksCollection>(inputLabel);
156  }
157  else if ( inputType == ICTypes::MUONS ) {
158  muonCollectionToken_ = consumes<reco::MuonCollection>(inputLabel);
159  }
160  else if ( inputType == ICTypes::TEV_FIRSTHIT ) {
161  tpfmsCollectionToken_ = consumes<reco::TrackToTrackMap>(inputLabel);
162  }
163  else if ( fillGlobalTrackRefits_ && inputType == ICTypes::TEV_PICKY ) {
164  pickyCollectionToken_ = consumes<reco::TrackToTrackMap>(inputLabel);
165  }
166  else if ( fillGlobalTrackRefits_ && inputType == ICTypes::TEV_DYT ) {
167  dytCollectionToken_ = consumes<reco::TrackToTrackMap>(inputCollectionLabels_.at(i));
168  }
169 
170  inputCollectionTypes_[i] = inputType;
171  }
172 }
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 &)
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_
static ICTypeKey toKey(const std::string &s)
void configure(const edm::ParameterSet &)
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
MuonTimingFiller * theTimingFiller_
std::vector< ICTypes::ICTypeKey > inputCollectionTypes_
std::vector< edm::InputTag > inputCollectionLabels_
bool fillGlobalTrackQuality_
std::string hcalDepositName_
double sigmaThresholdToFillCandidateP4WithGlobalFit_
bool debugWithTruthMatching_
T get(const Candidate &c)
Definition: component.h:55
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_
MuonIdProducer::~MuonIdProducer ( )
virtual

Definition at line 176 of file MuonIdProducer.cc.

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

177 {
182  if (meshAlgo_) delete meshAlgo_;
183  // TimingReport::current()->dump(std::cout);
184 }
reco::isodeposit::IsoDepositExtractor * muIsoExtractorCalo_
MuonMesh * meshAlgo_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorTrack_
reco::isodeposit::IsoDepositExtractor * muIsoExtractorJet_
MuonTimingFiller * theTimingFiller_

Member Function Documentation

bool MuonIdProducer::approxEqual ( const double  a,
const double  b,
const double  tol = 1E-3 
) const
inlineprivate

Definition at line 117 of file MuonIdProducer.h.

References funct::abs().

Referenced by fillArbitrationInfo().

118  {
119  return std::abs(a-b) < tol;
120  }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
void MuonIdProducer::beginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overridevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 414 of file MuonIdProducer.cc.

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

415 {
416  edm::ESHandle<CSCGeometry> geomHandle;
417  iSetup.get<MuonGeometryRecord>().get(geomHandle);
418 
419  meshAlgo_->setCSCGeometry(geomHandle.product());
420 
421 }
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 365 of file MuonIdProducer.cc.

References MuonSubdetId::CSC, CSCDetId, MuonSubdetId::DT, DTChamberId, and DetId::Muon.

Referenced by overlap().

366 {
367  if ( id.det() != DetId::Muon ) return 0;
368 
369  const auto subdetId = id.subdetId();
370  if ( subdetId == MuonSubdetId::DT ) {
371  return DTChamberId(id.rawId()).rawId();
372  }
373  else if ( subdetId == MuonSubdetId::CSC ) {
374  return CSCDetId(id.rawId()).chamberId().rawId();
375  }
376 
377  return 0;
378 }
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 1226 of file MuonIdProducer.cc.

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

Referenced by produce().

1226  {
1227  const bool trackBAD = links->trackerTrack().isNull();
1228  const bool staBAD = links->standAloneTrack().isNull();
1229  const bool glbBAD = links->globalTrack().isNull();
1230  if (trackBAD || staBAD || glbBAD )
1231  {
1232  edm::LogWarning("muonIDbadLinks") << "Global muon links to constituent tracks are invalid: trkBad "
1233  <<trackBAD <<" standaloneBad "<<staBAD<<" globalBad "<<glbBAD
1234  <<". There should be no such object. Muon is skipped.";
1235  return false;
1236  }
1237  return true;
1238 }
bool isNull() const
Checks for null.
Definition: Ref.h:249
void MuonIdProducer::fillArbitrationInfo ( reco::MuonCollection pOutputMuons)
private

Definition at line 944 of file MuonIdProducer.cc.

References approxEqual(), 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, CSCDetId, MuonMesh::isDuplicateOf(), meshAlgo_, MuonMesh::runMesh(), python.multivaluedict::sort(), and plotscripts::stationIndex().

Referenced by produce().

945 {
946  //
947  // apply segment flags
948  //
949  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > chamberPairs; // for chamber segment sorting
950  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > stationPairs; // for station segment sorting
951  std::vector<std::pair<reco::MuonChamberMatch*,reco::MuonSegmentMatch*> > arbitrationPairs; // for muon segment arbitration
952 
953  // muonIndex1
954  for( unsigned int muonIndex1 = 0; muonIndex1 < pOutputMuons->size(); ++muonIndex1 )
955  {
956  auto& muon1 = pOutputMuons->at(muonIndex1);
957  // chamberIter1
958  for ( auto& chamber1 : muon1.matches() )
959  {
960  if(chamber1.segmentMatches.empty()) continue;
961  chamberPairs.clear();
962 
963  // segmentIter1
964  for ( auto& segment1 : chamber1.segmentMatches )
965  {
966  chamberPairs.push_back(std::make_pair(&chamber1, &segment1));
967  if(!segment1.isMask()) // has not yet been arbitrated
968  {
969  arbitrationPairs.clear();
970  arbitrationPairs.push_back(std::make_pair(&chamber1, &segment1));
971 
972  // find identical segments with which to arbitrate
973  // tracker muons only
974  if (muon1.isTrackerMuon()) {
975  // muonIndex2
976  for( unsigned int muonIndex2 = muonIndex1+1; muonIndex2 < pOutputMuons->size(); ++muonIndex2 )
977  {
978  auto& muon2 = pOutputMuons->at(muonIndex2);
979  // tracker muons only
980  if ( !muon2.isTrackerMuon() ) continue;
981  // chamberIter2
982  for ( auto& chamber2 : muon2.matches() )
983  {
984  // segmentIter2
985  for ( auto& segment2 : chamber2.segmentMatches )
986  {
987  if(segment2.isMask()) continue; // has already been arbitrated
988  if(approxEqual(segment2.x , segment1.x ) &&
989  approxEqual(segment2.y , segment1.y ) &&
990  approxEqual(segment2.dXdZ , segment1.dXdZ ) &&
991  approxEqual(segment2.dYdZ , segment1.dYdZ ) &&
992  approxEqual(segment2.xErr , segment1.xErr ) &&
993  approxEqual(segment2.yErr , segment1.yErr ) &&
994  approxEqual(segment2.dXdZErr, segment1.dXdZErr) &&
995  approxEqual(segment2.dYdZErr, segment1.dYdZErr))
996  {
997  arbitrationPairs.push_back(std::make_pair(&chamber2, &segment2));
998  }
999  } // segmentIter2
1000  } // chamberIter2
1001  } // muonIndex2
1002  }
1003 
1004  // arbitration segment sort
1005  if(arbitrationPairs.empty()) continue; // this should never happen
1006  if(arbitrationPairs.size()==1) {
1007  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDRSlope);
1008  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDXSlope);
1009  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDR);
1010  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDX);
1011  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::Arbitrated);
1012  } else {
1013  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDRSlope));
1014  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDRSlope);
1015  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDXSlope));
1016  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDXSlope);
1017  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDR));
1018  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDR);
1019  sort(arbitrationPairs.begin(), arbitrationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BelongsToTrackByDX));
1020  arbitrationPairs.front().second->setMask(reco::MuonSegmentMatch::BelongsToTrackByDX);
1021  for ( auto& ap : arbitrationPairs ) {
1022  ap.second->setMask(reco::MuonSegmentMatch::Arbitrated);
1023  }
1024  }
1025  }
1026 
1027  // setup me1a cleaning for later
1028  if( chamber1.id.subdetId() == MuonSubdetId::CSC && arbClean_ &&
1029  CSCDetId(chamber1.id).ring() == 4) {
1030  for ( auto& segment2 : chamber1.segmentMatches ) {
1031  if( segment1.cscSegmentRef.isNull() || segment2.cscSegmentRef.isNull() ) continue;
1032  if( meshAlgo_->isDuplicateOf(segment1.cscSegmentRef,segment2.cscSegmentRef) &&
1033  (segment2.mask & 0x1e0000) &&
1034  (segment1.mask & 0x1e0000) ) {
1036  //if the track has lost the segment already through normal arbitration no need to do it again.
1037  }
1038  }
1039  }// mark all ME1/a duplicates that this track owns
1040 
1041  } // segmentIter1
1042 
1043  // chamber segment sort
1044  if(chamberPairs.empty()) continue; // this should never happen
1045  if(chamberPairs.size()==1) {
1046  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDRSlope);
1047  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDXSlope);
1048  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDR);
1049  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDX);
1050  } else {
1051  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDRSlope));
1052  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDRSlope);
1053  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDXSlope));
1054  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDXSlope);
1055  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDR));
1056  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDR);
1057  sort(chamberPairs.begin(), chamberPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInChamberByDX));
1058  chamberPairs.front().second->setMask(reco::MuonSegmentMatch::BestInChamberByDX);
1059  }
1060  } // chamberIter1
1061 
1062  // station segment sort
1063  for( int stationIndex = 1; stationIndex < 5; ++stationIndex )
1064  {
1065  for( int detectorIndex = 1; detectorIndex < 4; ++detectorIndex )
1066  {
1067  stationPairs.clear();
1068 
1069  // chamberIter
1070  for ( auto& chamber : muon1.matches() )
1071  {
1072  if(!(chamber.station()==stationIndex && chamber.detector()==detectorIndex)) continue;
1073  if(chamber.segmentMatches.empty()) continue;
1074 
1075  for ( auto& segment : chamber.segmentMatches ) {
1076  stationPairs.push_back(std::make_pair(&chamber, &segment));
1077  }
1078  } // chamberIter
1079 
1080  if(stationPairs.empty()) continue; // this may very well happen
1081  if(stationPairs.size()==1) {
1082  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDRSlope);
1083  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDXSlope);
1084  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDR);
1085  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDX);
1086  } else {
1087  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDRSlope));
1088  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDRSlope);
1089  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDXSlope));
1090  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDXSlope);
1091  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDR));
1092  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDR);
1093  sort(stationPairs.begin(), stationPairs.end(), SortMuonSegmentMatches(reco::MuonSegmentMatch::BestInStationByDX));
1094  stationPairs.front().second->setMask(reco::MuonSegmentMatch::BestInStationByDX);
1095  }
1096  }
1097  }
1098 
1099  } // muonIndex1
1100 
1101  if(arbClean_) {
1102  // clear old mesh, create and prune new mesh!
1103  meshAlgo_->clearMesh();
1104  meshAlgo_->runMesh(pOutputMuons);
1105  }
1106 }
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_
bool approxEqual(const double a, const double b, const double tol=1E-3) const
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 1205 of file MuonIdProducer.cc.

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

Referenced by produce().

1206 {
1208  aMuon.setCombinedQuality((*glbQualHandle_)[aMuon.combinedMuon()]);
1209  }
1210 
1211  LogDebug("MuonIdentification") << "tkChiVal " << aMuon.combinedQuality().trkRelChi2;
1212 
1213 }
#define LogDebug(id)
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:75
bool failedToGet() const
Definition: HandleBase.h:79
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
edm::Handle< edm::ValueMap< reco::MuonQuality > > glbQualHandle_
void MuonIdProducer::fillMuonId ( edm::Event iEvent,
const edm::EventSetup iSetup,
reco::Muon aMuon,
TrackDetectorAssociator::Direction  direction = TrackDetectorAssociator::InsideOut 
)
private

Definition at line 767 of file MuonIdProducer.cc.

References funct::abs(), 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, Exception, fillEnergy_, fillMatching_, TrackDetMatchInfo::findMaxDeposition(), edm::Ref< C, T, F >::get(), 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, hit::id, info(), edm::Ref< C, T, F >::isNonnull(), 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_, rpcHitHandle_, reco::MuonChamberMatch::rpcMatches, 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().

770 {
771  // perform track - detector association
772  const reco::Track* track = 0;
773  if ( aMuon.track().isNonnull() ) track = aMuon.track().get();
774  else if ( aMuon.standAloneMuon().isNonnull() ) track = aMuon.standAloneMuon().get();
775  else throw cms::Exception("FatalError") << "Failed to fill muon id information for a muon with undefined references to tracks";
776 
777  TrackDetMatchInfo info = trackAssociator_.associate(iEvent, iSetup, *track, parameters_, direction);
778 
779  if ( fillEnergy_ ) {
780  reco::MuonEnergy muonEnergy;
783  muonEnergy.ho = info.crossedEnergy(TrackDetMatchInfo::HORecHits);
785  muonEnergy.emS9 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,1); // 3x3 energy
786  muonEnergy.emS25 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits,2); // 5x5 energy
787  muonEnergy.hadS9 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits,1); // 3x3 energy
788  muonEnergy.hoS9 = info.nXnEnergy(TrackDetMatchInfo::HORecHits,1); // 3x3 energy
789  muonEnergy.towerS9 = info.nXnEnergy(TrackDetMatchInfo::TowerTotal,1); // 3x3 energy
790  muonEnergy.ecal_position = info.trkGlobPosAtEcal;
791  muonEnergy.hcal_position = info.trkGlobPosAtHcal;
792  if (! info.crossedEcalIds.empty() ) muonEnergy.ecal_id = info.crossedEcalIds.front();
793  if (! info.crossedHcalIds.empty() ) muonEnergy.hcal_id = info.crossedHcalIds.front();
794  // find maximal energy depositions and their time
795  DetId emMaxId = info.findMaxDeposition(TrackDetMatchInfo::EcalRecHits,2); // max energy deposit in 5x5 shape
796  for ( const auto& hit : info.ecalRecHits ) {
797  if (hit->id() != emMaxId) continue;
798  muonEnergy.emMax = hit->energy();
799  muonEnergy.ecal_time = hit->time();
800  }
801  DetId hadMaxId = info.findMaxDeposition(TrackDetMatchInfo::HcalRecHits,1); // max energy deposit in 3x3 shape
802  for ( const auto& hit : info.hcalRecHits ) {
803  if (hit->id() != hadMaxId) continue;
804  muonEnergy.hadMax = hit->energy();
805  muonEnergy.hcal_time = hit->time();
806  }
807  aMuon.setCalEnergy( muonEnergy );
808  }
809  if ( ! fillMatching_ && ! aMuon.isTrackerMuon() && ! aMuon.isRPCMuon() ) return;
810 
811  // fill muon match info
812  std::vector<reco::MuonChamberMatch> muonChamberMatches;
813  unsigned int nubmerOfMatchesAccordingToTrackAssociator = 0;
814  for ( const auto& chamber : info.chambers )
815  {
816  if (chamber.id.subdetId() == 3 && rpcHitHandle_.isValid() ) continue; // Skip RPC chambers, they are taken care of below)
817  reco::MuonChamberMatch matchedChamber;
818 
819  const auto& lErr = chamber.tState.localError();
820  const auto& lPos = chamber.tState.localPosition();
821  const auto& lDir = chamber.tState.localDirection();
822 
823  const auto& localError = lErr.positionError();
824  matchedChamber.x = lPos.x();
825  matchedChamber.y = lPos.y();
826  matchedChamber.xErr = sqrt( localError.xx() );
827  matchedChamber.yErr = sqrt( localError.yy() );
828 
829  matchedChamber.dXdZ = lDir.z()!=0?lDir.x()/lDir.z():9999;
830  matchedChamber.dYdZ = lDir.z()!=0?lDir.y()/lDir.z():9999;
831  // DANGEROUS - compiler cannot guaranty parameters ordering
832  AlgebraicSymMatrix55 trajectoryCovMatrix = lErr.matrix();
833  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
834  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
835 
836  matchedChamber.edgeX = chamber.localDistanceX;
837  matchedChamber.edgeY = chamber.localDistanceY;
838 
839  matchedChamber.id = chamber.id;
840  if ( ! chamber.segments.empty() ) ++nubmerOfMatchesAccordingToTrackAssociator;
841 
842  // fill segments
843  for ( const auto& segment : chamber.segments )
844  {
845  reco::MuonSegmentMatch matchedSegment;
846  matchedSegment.x = segment.segmentLocalPosition.x();
847  matchedSegment.y = segment.segmentLocalPosition.y();
848  matchedSegment.dXdZ = segment.segmentLocalDirection.z()?segment.segmentLocalDirection.x()/segment.segmentLocalDirection.z():0;
849  matchedSegment.dYdZ = segment.segmentLocalDirection.z()?segment.segmentLocalDirection.y()/segment.segmentLocalDirection.z():0;
850  matchedSegment.xErr = segment.segmentLocalErrorXX>0?sqrt(segment.segmentLocalErrorXX):0;
851  matchedSegment.yErr = segment.segmentLocalErrorYY>0?sqrt(segment.segmentLocalErrorYY):0;
852  matchedSegment.dXdZErr = segment.segmentLocalErrorDxDz>0?sqrt(segment.segmentLocalErrorDxDz):0;
853  matchedSegment.dYdZErr = segment.segmentLocalErrorDyDz>0?sqrt(segment.segmentLocalErrorDyDz):0;
854  matchedSegment.t0 = segment.t0;
855  matchedSegment.mask = 0;
856  matchedSegment.dtSegmentRef = segment.dtSegmentRef;
857  matchedSegment.cscSegmentRef = segment.cscSegmentRef;
858  matchedSegment.hasZed_ = segment.hasZed;
859  matchedSegment.hasPhi_ = segment.hasPhi;
860  // test segment
861  bool matchedX = false;
862  bool matchedY = false;
863  LogTrace("MuonIdentification") << " matching local x, segment x: " << matchedSegment.x <<
864  ", chamber x: " << matchedChamber.x << ", max: " << maxAbsDx_;
865  LogTrace("MuonIdentification") << " matching local y, segment y: " << matchedSegment.y <<
866  ", chamber y: " << matchedChamber.y << ", max: " << maxAbsDy_;
867  const double matchedSegChDx = std::abs(matchedSegment.x - matchedChamber.x);
868  const double matchedSegChDy = std::abs(matchedSegment.y - matchedChamber.y);
869  const double matchedSegChPullX = matchedSegChDx/std::hypot(matchedSegment.xErr, matchedChamber.xErr);
870  const double matchedSegChPullY = matchedSegChDy/std::hypot(matchedSegment.yErr, matchedChamber.yErr);
871  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 )
872  LogTrace("MuonIdentification") << " xpull: " << matchedSegChPullX;
873  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 )
874  LogTrace("MuonIdentification") << " ypull: " << matchedSegChPullY;
875 
876  if (matchedSegChDx < maxAbsDx_) matchedX = true;
877  if (matchedSegChDy < maxAbsDy_) matchedY = true;
878  if (matchedSegment.xErr>0 && matchedChamber.xErr>0 && matchedSegChPullX < maxAbsPullX_) matchedX = true;
879  if (matchedSegment.yErr>0 && matchedChamber.yErr>0 && matchedSegChPullY < maxAbsPullY_) matchedY = true;
880  if (matchedX && matchedY) matchedChamber.segmentMatches.push_back(matchedSegment);
881  }
882  muonChamberMatches.push_back(matchedChamber);
883  }
884 
885  // Fill RPC info
886  if ( rpcHitHandle_.isValid() )
887  {
888  for ( const auto& chamber : info.chambers )
889  {
890  if ( chamber.id.subdetId() != 3 ) continue; // Consider RPC chambers only
891  const auto& lErr = chamber.tState.localError();
892  const auto& lPos = chamber.tState.localPosition();
893  const auto& lDir = chamber.tState.localDirection();
894 
895  reco::MuonChamberMatch matchedChamber;
896 
897  LocalError localError = lErr.positionError();
898  matchedChamber.x = lPos.x();
899  matchedChamber.y = lPos.y();
900  matchedChamber.xErr = sqrt( localError.xx() );
901  matchedChamber.yErr = sqrt( localError.yy() );
902 
903  matchedChamber.dXdZ = lDir.z()!=0?lDir.x()/lDir.z():9999;
904  matchedChamber.dYdZ = lDir.z()!=0?lDir.y()/lDir.z():9999;
905  // DANGEROUS - compiler cannot guaranty parameters ordering
906  AlgebraicSymMatrix55 trajectoryCovMatrix = lErr.matrix();
907  matchedChamber.dXdZErr = trajectoryCovMatrix(1,1)>0?sqrt(trajectoryCovMatrix(1,1)):0;
908  matchedChamber.dYdZErr = trajectoryCovMatrix(2,2)>0?sqrt(trajectoryCovMatrix(2,2)):0;
909 
910  matchedChamber.edgeX = chamber.localDistanceX;
911  matchedChamber.edgeY = chamber.localDistanceY;
912 
913  matchedChamber.id = chamber.id;
914 
915  for ( const auto& rpcRecHit : *rpcHitHandle_ )
916  {
917  reco::MuonRPCHitMatch rpcHitMatch;
918 
919  if ( rpcRecHit.rawId() != chamber.id.rawId() ) continue;
920 
921  rpcHitMatch.x = rpcRecHit.localPosition().x();
922  rpcHitMatch.mask = 0;
923  rpcHitMatch.bx = rpcRecHit.BunchX();
924 
925  const double absDx = std::abs(rpcRecHit.localPosition().x()-chamber.tState.localPosition().x());
926  if( absDx <= 20 or absDx/sqrt(localError.xx()) <= 4 ) matchedChamber.rpcMatches.push_back(rpcHitMatch);
927  }
928 
929  muonChamberMatches.push_back(matchedChamber);
930  }
931  }
932 
933  aMuon.setMatches(muonChamberMatches);
934 
935  LogTrace("MuonIdentification") << "number of muon chambers: " << aMuon.matches().size() << "\n"
936  << "number of chambers with segments according to the associator requirements: " <<
937  nubmerOfMatchesAccordingToTrackAssociator;
938  LogTrace("MuonIdentification") << "number of segment matches with the producer requirements: " <<
940 
941  // fillTime( iEvent, iSetup, aMuon );
942 }
float xx() const
Definition: LocalError.h:24
DTRecSegment4DRef dtSegmentRef
static const TGPicture * info(bool iBackgroundIsBlack)
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
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 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
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::Handle< RPCRecHitCollection > rpcHitHandle_
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:244
bool isValid() const
Definition: HandleBase.h:75
double crossedEnergy(EnergyType)
energy in detector elements crossed by the track by types
#define LogTrace(id)
math::XYZPointF hcal_position
Definition: MuonEnergy.h:44
unsigned int id
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
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 1108 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, Exception, edm::Ref< C, T, F >::get(), reco::MuonIsolation::hadEt, reco::MuonIsolation::hadVetoEt, reco::MuonIsolation::hoEt, reco::MuonIsolation::hoVetoEt, edm::Ref< C, T, F >::isNonnull(), 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().

1111 {
1112  const reco::Track* track = 0;
1113  if ( aMuon.track().isNonnull() ) track = aMuon.track().get();
1114  else if ( aMuon.standAloneMuon().isNonnull() ) track = aMuon.standAloneMuon().get();
1115  else throw cms::Exception("FatalError") << "Failed to compute muon isolation information for a muon with undefined references to tracks";
1116 
1117  reco::MuonIsolation isoR03, isoR05;
1118 
1119  // get deposits
1120  reco::IsoDeposit depTrk = muIsoExtractorTrack_->deposit(iEvent, iSetup, *track );
1121  std::vector<reco::IsoDeposit> caloDeps = muIsoExtractorCalo_->deposits(iEvent, iSetup, *track);
1122  reco::IsoDeposit depJet = muIsoExtractorJet_->deposit(iEvent, iSetup, *track );
1123 
1124  if(caloDeps.size()!=3) {
1125  LogTrace("MuonIdentification") << "Failed to fill vector of calorimeter isolation deposits!";
1126  return;
1127  }
1128 
1129  reco::IsoDeposit depEcal = caloDeps.at(0);
1130  reco::IsoDeposit depHcal = caloDeps.at(1);
1131  reco::IsoDeposit depHo = caloDeps.at(2);
1132 
1133  trackDep = depTrk;
1134  ecalDep = depEcal;
1135  hcalDep = depHcal;
1136  hoDep = depHo;
1137  jetDep = depJet;
1138 
1139  isoR03.sumPt = depTrk.depositWithin(0.3);
1140  isoR03.emEt = depEcal.depositWithin(0.3);
1141  isoR03.hadEt = depHcal.depositWithin(0.3);
1142  isoR03.hoEt = depHo.depositWithin(0.3);
1143  isoR03.nTracks = depTrk.depositAndCountWithin(0.3).second;
1144  isoR03.nJets = depJet.depositAndCountWithin(0.3).second;
1145  isoR03.trackerVetoPt = depTrk.candEnergy();
1146  isoR03.emVetoEt = depEcal.candEnergy();
1147  isoR03.hadVetoEt = depHcal.candEnergy();
1148  isoR03.hoVetoEt = depHo.candEnergy();
1149 
1150  isoR05.sumPt = depTrk.depositWithin(0.5);
1151  isoR05.emEt = depEcal.depositWithin(0.5);
1152  isoR05.hadEt = depHcal.depositWithin(0.5);
1153  isoR05.hoEt = depHo.depositWithin(0.5);
1154  isoR05.nTracks = depTrk.depositAndCountWithin(0.5).second;
1155  isoR05.nJets = depJet.depositAndCountWithin(0.5).second;
1156  isoR05.trackerVetoPt = depTrk.candEnergy();
1157  isoR05.emVetoEt = depEcal.candEnergy();
1158  isoR05.hadVetoEt = depHcal.candEnergy();
1159  isoR05.hoVetoEt = depHo.candEnergy();
1160 
1161 
1162  aMuon.setIsolation(isoR03, isoR05);
1163 
1164 }
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:9
double candEnergy() const
Get energy or pT attached to cand trajectory.
Definition: IsoDeposit.h:136
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
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:244
#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 1215 of file MuonIdProducer.cc.

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

Referenced by produce().

1215  {
1216  // skip muons with no tracks
1217  if (aMuon.innerTrack().isNull()) return;
1218  // get quality from muon if already there, otherwise make empty one
1220  // fill it
1221  const bool filled = trackerKinkFinder_->fillTrkKink(quality, *aMuon.innerTrack());
1222  // if quality was there, or if we filled it, commit to the muon
1223  if (filled || aMuon.isQualityValid()) aMuon.setCombinedQuality(quality);
1224 }
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:249
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 186 of file MuonIdProducer.cc.

References edm::HandleBase::clear(), dytCollectionHandle_, dytCollectionToken_, Exception, fillGlobalTrackQuality_, fillGlobalTrackRefits_, fillTrackerKink_, edm::EventSetup::get(), edm::Event::getByToken(), glbQualHandle_, glbQualToken_, i, MuonIdProducer::ICTypes::INNER_TRACKS, innerTrackCollectionHandle_, innerTrackCollectionToken_, inputCollectionLabels_, inputCollectionTypes_, dtTPAnalyzer_cfg::inputLabel, edm::HandleBase::isValid(), linkCollectionHandle_, linkCollectionToken_, MuonIdProducer::ICTypes::LINKS, LogTrace, muonCollectionHandle_, muonCollectionToken_, MuonIdProducer::ICTypes::MUONS, MuonIdProducer::ICTypes::OUTER_TRACKS, outerTrackCollectionHandle_, outerTrackCollectionToken_, pickyCollectionHandle_, pickyCollectionToken_, edm::ESHandle< class >::product(), HLT_25ns14e33_v1_cff::propagator, rpcHitHandle_, rpcHitToken_, TrackDetectorAssociator::setPropagator(), MuonIdProducer::ICTypes::TEV_DYT, MuonIdProducer::ICTypes::TEV_FIRSTHIT, MuonIdProducer::ICTypes::TEV_PICKY, MuonIdProducer::ICTypes::toStr(), tpfmsCollectionHandle_, tpfmsCollectionToken_, trackAssociator_, and trackerKinkFinder_.

Referenced by produce().

187 {
192 
196 
197 
199  iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
200  trackAssociator_.setPropagator(propagator.product());
201 
202  if (fillTrackerKink_) trackerKinkFinder_->init(iSetup);
203 
204  for ( unsigned int i = 0; i < inputCollectionLabels_.size(); ++i ) {
205  const auto& inputLabel = inputCollectionLabels_[i];
206  const auto inputType = inputCollectionTypes_[i];
207  if ( inputType == ICTypes::INNER_TRACKS ) {
210  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputLabel;
211  LogTrace("MuonIdentification") << "Number of input inner tracks: " << innerTrackCollectionHandle_->size();
212  }
213  else if ( inputType == ICTypes::OUTER_TRACKS ) {
216  throw cms::Exception("FatalError") << "Failed to get input track collection with label: " << inputLabel;
217  LogTrace("MuonIdentification") << "Number of input outer tracks: " << outerTrackCollectionHandle_->size();
218  }
219  else if ( inputType == ICTypes::LINKS ) {
222  throw cms::Exception("FatalError") << "Failed to get input link collection with label: " << inputLabel;
223  LogTrace("MuonIdentification") << "Number of input links: " << linkCollectionHandle_->size();
224  }
225  else if ( inputType == ICTypes::MUONS ) {
228  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputLabel;
229  LogTrace("MuonIdentification") << "Number of input muons: " << muonCollectionHandle_->size();
230  }
231  else if ( fillGlobalTrackRefits_ && inputType == ICTypes::TEV_FIRSTHIT ) {
234  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputLabel;
235  LogTrace("MuonIdentification") << "Number of input muons: " << tpfmsCollectionHandle_->size();
236  }
237  else if ( fillGlobalTrackRefits_ && inputType == ICTypes::TEV_PICKY ) {
240  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputLabel;
241  LogTrace("MuonIdentification") << "Number of input muons: " << pickyCollectionHandle_->size();
242  }
243  else if ( fillGlobalTrackRefits_ && inputType == ICTypes::TEV_DYT ) {
245  if (! dytCollectionHandle_.isValid())
246  throw cms::Exception("FatalError") << "Failed to get input muon collection with label: " << inputLabel;
247  LogTrace("MuonIdentification") << "Number of input muons: " << dytCollectionHandle_->size();
248  }
249  else throw cms::Exception("FatalError") << "Unknown input collection type: #" << ICTypes::toStr(inputType);
250  }
251 
254 
255 }
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
TrackDetectorAssociator trackAssociator_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
edm::EDGetTokenT< RPCRecHitCollection > rpcHitToken_
edm::EDGetTokenT< reco::TrackToTrackMap > pickyCollectionToken_
static std::string toStr(const ICTypeKey k)
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< RPCRecHitCollection > rpcHitHandle_
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
bool isValid() const
Definition: HandleBase.h:75
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
edm::EDGetTokenT< reco::MuonTrackLinksCollection > linkCollectionToken_
#define LogTrace(id)
bool fillGlobalTrackRefits_
std::vector< ICTypes::ICTypeKey > inputCollectionTypes_
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
std::vector< edm::InputTag > inputCollectionLabels_
bool fillGlobalTrackQuality_
edm::Handle< reco::TrackToTrackMap > tpfmsCollectionHandle_
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
edm::Handle< reco::MuonCollection > muonCollectionHandle_
edm::Handle< edm::ValueMap< reco::MuonQuality > > glbQualHandle_
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_
bool MuonIdProducer::isGoodRPCMuon ( const reco::Muon muon)
private

Definition at line 758 of file MuonIdProducer.cc.

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

Referenced by produce().

759 {
760  if(muon.track()->pt() < minPt_ || muon.track()->p() < minP_) return false;
761  if ( addExtraSoftMuons_ &&
762  muon.pt()<5 && std::abs(muon.eta())<1.5 &&
765 }
int numberOfMatchedRPCLayers(ArbitrationType type=RPCHitAndTrackArbitration) const
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
virtual double eta() const
momentum pseudorapidity
virtual double pt() const
transverse momentum
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool MuonIdProducer::isGoodTrack ( const reco::Track track)
private

Definition at line 343 of file MuonIdProducer.cc.

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

Referenced by produce().

344 {
345  // Pt and absolute momentum requirement
346  const double p = track.p();
347  const double pt = track.pt();
348  if (pt < minPt_ || (p < minP_ && p < minPCaloMuon_)){
349  LogTrace("MuonIdentification") << "Skipped low momentum track (Pt,P): " << pt
350  << ", " << track.p() << " GeV";
351  return false;
352  }
353 
354  // Eta requirement
355  const double eta = track.eta();
356  const double absEta = std::abs(eta);
357  if ( absEta > maxAbsEta_ ){
358  LogTrace("MuonIdentification") << "Skipped track with large pseudo rapidity (Eta: " << track.eta() << " )";
359  return false;
360  }
361 
362  return true;
363 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:578
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:614
double pt() const
track transverse momentum
Definition: TrackBase.h:584
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define LogTrace(id)
bool MuonIdProducer::isGoodTrackerMuon ( const reco::Muon muon)
private

Definition at line 749 of file MuonIdProducer.cc.

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

Referenced by produce().

750 {
751  if(muon.track()->pt() < minPt_ || muon.track()->p() < minP_) return false;
752  if ( addExtraSoftMuons_ &&
753  muon.pt()<5 && std::abs(muon.eta())<1.5 &&
754  muon.numberOfMatches( reco::Muon::NoArbitration ) >= 1 ) return true;
756 }
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
virtual double eta() const
momentum pseudorapidity
virtual double pt() const
transverse momentum
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
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 271 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().

272 {
273  reco::CaloMuon aMuon;
274  aMuon.setInnerTrack( muon.innerTrack() );
275 
276  if (muon.isEnergyValid()) aMuon.setCalEnergy( muon.calEnergy() );
277  // get calo compatibility
279  return aMuon;
280 }
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 257 of file MuonIdProducer.cc.

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

Referenced by makeMuon(), and produce().

259 {
260  LogTrace("MuonIdentification") << "Creating a muon from a track " << track.get()->pt() <<
261  " Pt (GeV), eta: " << track.get()->eta();
262  reco::Muon aMuon( makeMuon( *(track.get()) ) );
263 
264  aMuon.setMuonTrack(type,track);
265  aMuon.setBestTrack(type);
266  aMuon.setTunePBestTrack(type);
267 
268  return aMuon;
269 }
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:244
#define LogTrace(id)
void setMuonTrack(const MuonTrackType &, const TrackRef &)
reco::Muon MuonIdProducer::makeMuon ( const reco::MuonTrackLinks links)
private

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

284 {
285  LogTrace("MuonIdentification") << "Creating a muon from a link to tracks object";
286 
287  reco::Muon aMuon;
288  reco::Muon::MuonTrackTypePair chosenTrack;
289  reco::TrackRef tpfmsRef;
290  reco::TrackRef pickyRef;
291  reco::TrackRef dytRef;
292  bool useSigmaSwitch = false;
293 
296 
300 
301  if (tpfmsRef.isNull() && pickyRef.isNull() && dytRef.isNull()){
302  edm::LogWarning("MakeMuonWithTEV")<<"Failed to get TEV refits, fall back to sigma switch.";
303  useSigmaSwitch = true;
304  }
305  } else {
306  useSigmaSwitch = true;
307  }
308 
309  if (useSigmaSwitch){
310  chosenTrack = muon::sigmaSwitch( links.globalTrack(), links.trackerTrack(),
313  } else {
314  chosenTrack = muon::tevOptimized( links.globalTrack(), links.trackerTrack(),
315  tpfmsRef, pickyRef, dytRef,
317  }
318  aMuon = makeMuon(*chosenTrack.first);
319  aMuon.setInnerTrack( links.trackerTrack() );
320  aMuon.setOuterTrack( links.standAloneTrack() );
321  aMuon.setGlobalTrack( links.globalTrack() );
322  aMuon.setBestTrack(chosenTrack.second);
323  aMuon.setTunePBestTrack(chosenTrack.second);
324 
328  if (it != tpfmsCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::TPFMS, (it->val));
329  }
332  if (it != pickyCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::Picky, (it->val));
333  }
336  if (it != dytCollectionHandle_->end()) aMuon.setMuonTrack(reco::Muon::DYT, (it->val));
337  }
338  }
339  return aMuon;
340 }
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:75
bool isNull() const
Checks for null.
Definition: Ref.h:249
#define LogTrace(id)
bool fillGlobalTrackRefits_
void setMuonTrack(const MuonTrackType &, const TrackRef &)
bool failedToGet() const
Definition: HandleBase.h:79
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 1166 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(), and reco::TrackBase::vertex().

1167 {
1168  const double energy = hypot(track.p(), 0.105658369);
1169  const math::XYZTLorentzVector p4(track.px(), track.py(), track.pz(), energy);
1170  return reco::Muon( track.charge(), p4, track.vertex() );
1171 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:578
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:590
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:650
double p4[4]
Definition: TauolaWrapper.h:92
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:602
int charge() const
track electric charge
Definition: TrackBase.h:530
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:596
int MuonIdProducer::overlap ( const reco::Muon muon,
const reco::Track track 
)
private

Definition at line 381 of file MuonIdProducer.cc.

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

Referenced by produce().

382 {
383  if ( ! muon.isMatchesValid() ||
384  track.extra().isNull() ||
385  track.extra()->recHitsSize()==0 ) return 0;
386 
387  int numberOfCommonDetIds = 0;
388  const std::vector<reco::MuonChamberMatch>& matches( muon.matches() );
389  for ( const auto& match : matches )
390  {
391  if ( match.segmentMatches.empty() ) continue;
392 
393  bool foundCommonDetId = false;
394  for ( auto hit = track.extra()->recHitsBegin();
395  hit != track.extra()->recHitsEnd(); ++hit )
396  {
397  // LogTrace("MuonIdentification") << "hit DetId: " << std::hex << hit->get()->geographicalId().rawId() <<
398  // "\t hit chamber DetId: " << getChamberId(hit->get()->geographicalId()) <<
399  // "\t segment DetId: " << match->id.rawId() << std::dec;
400 
401  if ( chamberId((*hit)->geographicalId()) == match.id.rawId() ) {
402  foundCommonDetId = true;
403  break;
404  }
405  }
406  if ( foundCommonDetId ) {
407  ++numberOfCommonDetIds;
408  break;
409  }
410  }
411  return numberOfCommonDetIds;
412 }
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:249
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:10
double MuonIdProducer::phiOfMuonIneteractionRegion ( const reco::Muon muon) const
private

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

1192 {
1193  if ( muon.isStandAloneMuon() ) return muon.standAloneMuon()->innerPosition().phi();
1194  // the rest is tracker muon only
1195  if ( muon.matches().empty() ) {
1196  if ( muon.innerTrack().isAvailable() &&
1197  muon.innerTrack()->extra().isAvailable() )
1198  return muon.innerTrack()->outerPosition().phi();
1199  else
1200  return muon.phi(); // makes little sense, but what else can I use
1201  }
1202  return sectorPhi(muon.matches().at(0).id);
1203 }
bool isAvailable() const
Definition: Ref.h:576
virtual TrackRef innerTrack() const
Definition: Muon.h:48
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 double phi() const
momentum azimuthal angle
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 437 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, 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_, LogDebug, LogTrace, makeCaloMuon(), makeMuon(), reco::Muon::matches(), minPCaloMuon_, metsig::muon, muonCaloCompatibility_, muonCollectionHandle_, reco::MuonTime::nDof, reco::MuonTimeExtra::nDof(), reco::Muon::OuterTrack, outerTrackCollectionHandle_, TrackDetectorAssociator::OutsideIn, overlap(), reco::CaloMuon::p(), phiOfMuonIneteractionRegion(), edm::Event::put(), reco::Muon::RPCMuon, reco::Muon::setType(), reco::Muon::StandAloneMuon, 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, MuonIdTruthInfo::truthMatchMuon(), reco::Muon::type(), validateGlobalMuonPair(), and writeIsoDeposits_.

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

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

Referenced by phiOfMuonIneteractionRegion().

1174 {
1175  double phi = 0;
1176  if( id.subdetId() == MuonSubdetId::DT ) { // DT
1177  DTChamberId muonId(id.rawId());
1178  if ( muonId.sector() <= 12 )
1179  phi = (muonId.sector()-1)/6.*M_PI;
1180  if ( muonId.sector() == 13 ) phi = 3/6.*M_PI;
1181  if ( muonId.sector() == 14 ) phi = 9/6.*M_PI;
1182  }
1183  if( id.subdetId() == MuonSubdetId::CSC ) { // CSC
1184  CSCDetId muonId(id.rawId());
1185  phi = M_PI/4+(muonId.triggerSector()-1)/3.*M_PI;
1186  }
1187  if ( phi > M_PI ) phi -= 2*M_PI;
1188  return phi;
1189 }
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

Member Data Documentation

bool MuonIdProducer::addExtraSoftMuons_
private

Definition at line 171 of file MuonIdProducer.h.

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

bool MuonIdProducer::arbClean_
private

Definition at line 231 of file MuonIdProducer.h.

Referenced by fillArbitrationInfo(), and MuonIdProducer().

double MuonIdProducer::caloCut_
private

Definition at line 229 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::debugWithTruthMatching_
private

Definition at line 188 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

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

Definition at line 196 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

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

Definition at line 204 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::string MuonIdProducer::ecalDepositName_
private

Definition at line 217 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::fillCaloCompatibility_
private

Definition at line 180 of file MuonIdProducer.h.

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

bool MuonIdProducer::fillEnergy_
private

Definition at line 181 of file MuonIdProducer.h.

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

bool MuonIdProducer::fillGlobalTrackQuality_
private

Definition at line 222 of file MuonIdProducer.h.

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

bool MuonIdProducer::fillGlobalTrackRefits_
private

Definition at line 223 of file MuonIdProducer.h.

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

bool MuonIdProducer::fillIsolation_
private

Definition at line 183 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

bool MuonIdProducer::fillMatching_
private

Definition at line 182 of file MuonIdProducer.h.

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

bool MuonIdProducer::fillTrackerKink_
private

Definition at line 226 of file MuonIdProducer.h.

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

edm::Handle<edm::ValueMap<reco::MuonQuality> > MuonIdProducer::glbQualHandle_
private

Definition at line 210 of file MuonIdProducer.h.

Referenced by fillGlbQuality(), and init().

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

Definition at line 207 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

edm::InputTag MuonIdProducer::globalTrackQualityInputTag_
private

Definition at line 224 of file MuonIdProducer.h.

std::string MuonIdProducer::hcalDepositName_
private

Definition at line 218 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

std::string MuonIdProducer::hoDepositName_
private

Definition at line 219 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

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

Definition at line 190 of file MuonIdProducer.h.

Referenced by init(), and produce().

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

Definition at line 198 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

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

Definition at line 160 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::vector<ICTypes::ICTypeKey> MuonIdProducer::inputCollectionTypes_
private

Definition at line 161 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

std::string MuonIdProducer::jetDepositName_
private

Definition at line 220 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

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

Definition at line 193 of file MuonIdProducer.h.

Referenced by init(), and produce().

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

Definition at line 201 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

double MuonIdProducer::maxAbsDx_
private

Definition at line 174 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsDy_
private

Definition at line 176 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsEta_
private

Definition at line 170 of file MuonIdProducer.h.

Referenced by isGoodTrack(), and MuonIdProducer().

double MuonIdProducer::maxAbsPullX_
private

Definition at line 175 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

double MuonIdProducer::maxAbsPullY_
private

Definition at line 177 of file MuonIdProducer.h.

Referenced by fillMuonId(), and MuonIdProducer().

MuonMesh* MuonIdProducer::meshAlgo_
private

Definition at line 232 of file MuonIdProducer.h.

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

int MuonIdProducer::minNumberOfMatches_
private

Definition at line 169 of file MuonIdProducer.h.

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

double MuonIdProducer::minP_
private

Definition at line 167 of file MuonIdProducer.h.

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

double MuonIdProducer::minPCaloMuon_
private

Definition at line 168 of file MuonIdProducer.h.

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

double MuonIdProducer::minPt_
private

Definition at line 166 of file MuonIdProducer.h.

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

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

Definition at line 213 of file MuonIdProducer.h.

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

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

Definition at line 215 of file MuonIdProducer.h.

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

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

Definition at line 214 of file MuonIdProducer.h.

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

MuonCaloCompatibility MuonIdProducer::muonCaloCompatibility_
private

Definition at line 212 of file MuonIdProducer.h.

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

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

Definition at line 192 of file MuonIdProducer.h.

Referenced by init(), and produce().

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

Definition at line 200 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

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

Definition at line 191 of file MuonIdProducer.h.

Referenced by init(), and produce().

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

Definition at line 199 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

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

Definition at line 195 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

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

Definition at line 203 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

double MuonIdProducer::ptThresholdToFillCandidateP4WithGlobalFit_
private

Definition at line 185 of file MuonIdProducer.h.

Referenced by makeMuon(), and MuonIdProducer().

edm::Handle<RPCRecHitCollection> MuonIdProducer::rpcHitHandle_
private

Definition at line 209 of file MuonIdProducer.h.

Referenced by fillMuonId(), and init().

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

Definition at line 206 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

double MuonIdProducer::sigmaThresholdToFillCandidateP4WithGlobalFit_
private

Definition at line 186 of file MuonIdProducer.h.

Referenced by makeMuon(), and MuonIdProducer().

MuonTimingFiller* MuonIdProducer::theTimingFiller_
private

Definition at line 163 of file MuonIdProducer.h.

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

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

Definition at line 194 of file MuonIdProducer.h.

Referenced by init(), and makeMuon().

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

Definition at line 202 of file MuonIdProducer.h.

Referenced by init(), and MuonIdProducer().

TrackDetectorAssociator MuonIdProducer::trackAssociator_
private

Definition at line 122 of file MuonIdProducer.h.

Referenced by fillMuonId(), and init().

std::string MuonIdProducer::trackDepositName_
private

Definition at line 216 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().

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

Definition at line 227 of file MuonIdProducer.h.

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

bool MuonIdProducer::writeIsoDeposits_
private

Definition at line 184 of file MuonIdProducer.h.

Referenced by MuonIdProducer(), and produce().