CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
QuickTrackAssociatorByHitsProducer Class Reference

#include <SimTracker/TrackAssociatorProducers/plugins/QuickTrackAssociatorByHitsProducer.cc>

Inheritance diagram for QuickTrackAssociatorByHitsProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 QuickTrackAssociatorByHitsProducer (const edm::ParameterSet &)
 
 ~QuickTrackAssociatorByHitsProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

void beginJob () override
 
void endJob () override
 
edm::ParameterSet makeHitAssociatorParameters (const edm::ParameterSet &)
 
void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 

Private Attributes

bool absoluteNumberOfHits_
 
edm::EDGetTokenT< ClusterTPAssociationcluster2TPToken_
 
double cutRecoToSim_
 
double pixelHitWeight_
 
double puritySimToReco_
 
double qualitySimToReco_
 
QuickTrackAssociatorByHitsImpl::SimToRecoDenomType simToRecoDenominator_
 
bool threeHitTracksAreSpecial_
 
TrackerHitAssociator::Config trackerHitAssociatorConfig_
 
bool useClusterTPAssociation_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 43 of file QuickTrackAssociatorByHitsProducer.cc.

Constructor & Destructor Documentation

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

Definition at line 82 of file QuickTrackAssociatorByHitsProducer.cc.

References cluster2TPToken_, QuickTrackAssociatorByHitsImpl::denomreco, QuickTrackAssociatorByHitsImpl::denomsim, Exception, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), LogDebug, simToRecoDenominator_, AlCaHLTBitMon_QueryRunRegistry::string, and useClusterTPAssociation_.

82  :
84  qualitySimToReco_( iConfig.getParameter<double>( "Quality_SimToReco" ) ),
85  puritySimToReco_( iConfig.getParameter<double>( "Purity_SimToReco" ) ),
86  pixelHitWeight_( iConfig.getParameter<double>( "PixelHitWeight" ) ),
87  cutRecoToSim_( iConfig.getParameter<double>( "Cut_RecoToSim" ) ),
88  threeHitTracksAreSpecial_( iConfig.getParameter<bool>( "ThreeHitTracksAreSpecial" ) ),
89  useClusterTPAssociation_( iConfig.getParameter<bool>( "useClusterTPAssociation" ) ),
90  absoluteNumberOfHits_( iConfig.getParameter<bool>( "AbsoluteNumberOfHits" ) )
91 {
92 
93  //
94  // Check whether the denominator when working out the percentage of shared hits should
95  // be the number of simulated hits or the number of reconstructed hits.
96  //
97  std::string denominatorString=iConfig.getParameter<std::string>("SimToRecoDenominator");
99  else if( denominatorString=="reco" ) simToRecoDenominator_=QuickTrackAssociatorByHitsImpl::denomreco;
100  else throw cms::Exception( "QuickTrackAssociatorByHitsImpl" ) << "SimToRecoDenominator not specified as sim or reco";
101 
102  //
103  // Do some checks on whether UseGrouped or UseSplitting have been set. They're not used
104  // unlike the standard TrackAssociatorByHits so show a warning.
105  //
106  bool useGrouped, useSplitting;
107  if( iConfig.exists("UseGrouped") ) useGrouped=iConfig.getParameter<bool>("UseGrouped");
108  else useGrouped=true;
109 
110  if( iConfig.exists("UseSplitting") ) useSplitting=iConfig.getParameter<bool>("UseSplitting");
111  else useSplitting=true;
112 
113  // This associator works as though both UseGrouped and UseSplitting were set to true, so show a
114  // warning if this isn't the case.
115  if( !(useGrouped && useSplitting) )
116  {
117  LogDebug("QuickTrackAssociatorByHitsImpl") << "UseGrouped and/or UseSplitting has been set to false, but this associator ignores that setting.";
118  }
119 
120  //register your products
121  produces<reco::TrackToTrackingParticleAssociator>();
122 
124  cluster2TPToken_ = consumes<ClusterTPAssociation>(iConfig.getParameter < edm::InputTag > ("cluster2TPSrc"));
125  }
126 
127 }
#define LogDebug(id)
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::ParameterSet makeHitAssociatorParameters(const edm::ParameterSet &)
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
QuickTrackAssociatorByHitsImpl::SimToRecoDenomType simToRecoDenominator_
edm::EDGetTokenT< ClusterTPAssociation > cluster2TPToken_
QuickTrackAssociatorByHitsProducer::~QuickTrackAssociatorByHitsProducer ( )
override

Definition at line 130 of file QuickTrackAssociatorByHitsProducer.cc.

131 {
132 
133  // do anything here that needs to be done at desctruction time
134  // (e.g. close files, deallocate resources etc.)
135 
136 }

Member Function Documentation

void QuickTrackAssociatorByHitsProducer::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::global::EDProducerBase.

Definition at line 196 of file QuickTrackAssociatorByHitsProducer.cc.

197 {
198 }
void QuickTrackAssociatorByHitsProducer::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::global::EDProducerBase.

Definition at line 202 of file QuickTrackAssociatorByHitsProducer.cc.

202  {
203 }
void QuickTrackAssociatorByHitsProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 208 of file QuickTrackAssociatorByHitsProducer.cc.

References edm::ConfigurationDescriptions::addDefault(), DEFINE_FWK_MODULE, and edm::ParameterSetDescription::setUnknown().

208  {
209  //The following says we do not know what parameters are allowed so do no validation
210  // Please change this to state exactly what you do use, even if it is no parameters
212  desc.setUnknown();
213  descriptions.addDefault(desc);
214 }
void addDefault(ParameterSetDescription const &psetDescription)
edm::ParameterSet QuickTrackAssociatorByHitsProducer::makeHitAssociatorParameters ( const edm::ParameterSet iConfig)
private

Definition at line 145 of file QuickTrackAssociatorByHitsProducer.cc.

References edm::ParameterSet::addParameter(), and edm::ParameterSet::getParameter().

145  {
146  edm::ParameterSet hitAssociatorParameters;
147  hitAssociatorParameters.addParameter<bool>( "associatePixel", iConfig.getParameter<bool>("associatePixel") );
148  hitAssociatorParameters.addParameter<bool>( "associateStrip", iConfig.getParameter<bool>("associateStrip") );
149  // This is the important one, it stops the hit associator searching through the list of sim hits.
150  // I only want to use the hit associator methods that work on the hit IDs (i.e. the uint32_t trackId
151  // and the EncodedEventId eventId) so I'm not interested in matching that to the PSimHit objects.
152  hitAssociatorParameters.addParameter<bool>("associateRecoTracks",true);
153  // add these new ones to allow redirection of inputs:
154  hitAssociatorParameters.addParameter<edm::InputTag>( "pixelSimLinkSrc", iConfig.getParameter<edm::InputTag>("pixelSimLinkSrc") );
155  hitAssociatorParameters.addParameter<edm::InputTag>( "stripSimLinkSrc", iConfig.getParameter<edm::InputTag>("stripSimLinkSrc") );
156 
157  return hitAssociatorParameters;
158 }
T getParameter(std::string const &) const
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:144
void QuickTrackAssociatorByHitsProducer::produce ( edm::StreamID  ,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 162 of file QuickTrackAssociatorByHitsProducer.cc.

References absoluteNumberOfHits_, cluster2TPToken_, cutRecoToSim_, edm::Event::getByToken(), iEvent, eostools::move(), pixelHitWeight_, edm::Handle< T >::product(), edm::Event::productGetter(), puritySimToReco_, edm::Event::put(), qualitySimToReco_, simToRecoDenominator_, threeHitTracksAreSpecial_, DBConfiguration_cff::toPut, trackerHitAssociatorConfig_, and useClusterTPAssociation_.

163 {
164  using namespace edm;
165 
166  const ClusterTPAssociation *clusterAssoc = nullptr;
167  std::unique_ptr<TrackerHitAssociator> trackAssoc;
169  edm::Handle<ClusterTPAssociation> clusterAssocHandle;
170  iEvent.getByToken(cluster2TPToken_,clusterAssocHandle);
171  clusterAssoc = clusterAssocHandle.product();
172  }
173  else {
174  // If control got this far then either useClusterTPAssociation_ was false or getting the cluster
175  // to TrackingParticle association from the event failed. Either way I need to create a hit associator.
176  trackAssoc = std::make_unique<TrackerHitAssociator>(iEvent, trackerHitAssociatorConfig_);
177  }
178 
179  auto impl = std::make_unique<QuickTrackAssociatorByHitsImpl>(iEvent.productGetter(),
180  std::move(trackAssoc),
181  clusterAssoc,
189 
190  auto toPut = std::make_unique<reco::TrackToTrackingParticleAssociator>(std::move(impl));
191  iEvent.put(std::move(toPut));
192 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
EDProductGetter const & productGetter() const
Definition: Event.cc:104
int iEvent
Definition: GenABIO.cc:230
QuickTrackAssociatorByHitsImpl::SimToRecoDenomType simToRecoDenominator_
T const * product() const
Definition: Handle.h:81
edm::EDGetTokenT< ClusterTPAssociation > cluster2TPToken_
HLT enums.
def move(src, dest)
Definition: eostools.py:510

Member Data Documentation

bool QuickTrackAssociatorByHitsProducer::absoluteNumberOfHits_
private

Definition at line 66 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

edm::EDGetTokenT<ClusterTPAssociation> QuickTrackAssociatorByHitsProducer::cluster2TPToken_
private
double QuickTrackAssociatorByHitsProducer::cutRecoToSim_
private

Definition at line 62 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

double QuickTrackAssociatorByHitsProducer::pixelHitWeight_
private

Definition at line 61 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

double QuickTrackAssociatorByHitsProducer::puritySimToReco_
private

Definition at line 60 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

double QuickTrackAssociatorByHitsProducer::qualitySimToReco_
private

Definition at line 59 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

QuickTrackAssociatorByHitsImpl::SimToRecoDenomType QuickTrackAssociatorByHitsProducer::simToRecoDenominator_
private
bool QuickTrackAssociatorByHitsProducer::threeHitTracksAreSpecial_
private

Definition at line 64 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

TrackerHitAssociator::Config QuickTrackAssociatorByHitsProducer::trackerHitAssociatorConfig_
private

Definition at line 57 of file QuickTrackAssociatorByHitsProducer.cc.

Referenced by produce().

bool QuickTrackAssociatorByHitsProducer::useClusterTPAssociation_
private