CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Friends
edm::EDConsumerBase Class Reference

#include <EDConsumerBase.h>

Inheritance diagram for edm::EDConsumerBase:
edm::EDAnalyzer edm::EDFilter edm::EDProducer edm::global::EDAnalyzerBase edm::global::EDFilterBase edm::global::EDProducerBase edm::global::OutputModuleBase edm::one::EDAnalyzerBase edm::one::EDFilterBase edm::one::EDProducerBase edm::one::OutputModuleBase edm::OutputModule edm::stream::EDAnalyzerBase edm::stream::EDFilterBase edm::stream::EDProducerBase edm::SubProcess

Classes

struct  LabelPlacement
 
struct  TokenLookupInfo
 

Public Types

typedef ProductLabels Labels
 

Public Member Functions

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
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

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)
 

Private Types

enum  { kLookupInfo, kAlwaysGets, kLabels, kKind }
 

Private Member Functions

edm::InputTag const & checkIfEmpty (edm::InputTag const &tag)
 
unsigned int recordConsumes (BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
 
void throwBadToken (edm::TypeID const &iType, EDGetToken iToken) const
 
void throwBranchMismatch (BranchType, EDGetToken) const
 
void throwConsumesCallAfterFrozen (TypeToGet const &, InputTag const &) const
 
void throwTypeMismatch (edm::TypeID const &, EDGetToken) const
 

Private Attributes

bool containsCurrentProcessAlias_
 
bool frozen_
 
std::array< std::vector< ProductResolverIndexAndSkipBit >, edm::NumBranchTypesitemsToGetFromBranch_
 
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfTypem_tokenInfo
 
std::vector< char > m_tokenLabels
 

Friends

class ConsumesCollector
 
template<typename T >
class WillGetIfMatch
 

Detailed Description

Description: Allows declaration of what data is being consumed

Usage: The EDM modules all inherit from this base class

Definition at line 49 of file EDConsumerBase.h.

Member Typedef Documentation

Definition at line 84 of file EDConsumerBase.h.

Member Enumeration Documentation

anonymous enum
private

Constructor & Destructor Documentation

edm::EDConsumerBase::EDConsumerBase ( )
inline
EDConsumerBase::~EDConsumerBase ( )
virtualnoexcept

Definition at line 52 of file EDConsumerBase.cc.

Referenced by EDConsumerBase().

53 {
54 }
edm::EDConsumerBase::EDConsumerBase ( EDConsumerBase const &  )
delete
edm::EDConsumerBase::EDConsumerBase ( EDConsumerBase &&  )
default

Member Function Documentation

edm::InputTag const & EDConsumerBase::checkIfEmpty ( edm::InputTag const &  tag)
private

Definition at line 80 of file EDConsumerBase.cc.

References kWasEmpty, and edm::InputTag::label().

Referenced by consumes(), consumesMany(), and mayConsume().

80  {
81  if (iTag.label().empty()) {
82  return kWasEmpty;
83  }
84  return iTag;
85 }
static const edm::InputTag kWasEmpty("@EmptyLabel@")
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT<ProductType> edm::EDConsumerBase::consumes ( edm::InputTag const &  tag)
inlineprotected

Definition at line 104 of file EDConsumerBase.h.

References TtFullHadDaughter::B, checkIfEmpty(), and recordConsumes().

Referenced by AlCaECALRecHitReducer::AlCaECALRecHitReducer(), MixCollectionValidation::bookHistograms(), BTagPerformanceAnalyzerMC::BTagPerformanceAnalyzerMC(), BTagPerformanceAnalyzerOnData::BTagPerformanceAnalyzerOnData(), CrossingFramePSimHitToPSimHitsConverter::CrossingFramePSimHitToPSimHitsConverter(), EcalPileUpDepMonitor::EcalPileUpDepMonitor(), ElectronNHitSeedProducer::ElectronNHitSeedProducer(), EmDQMReco::EmDQMReco(), edm::EventContentAnalyzer::EventContentAnalyzer(), EcalDQMonitorTask::formSchedule(), GoodSeedProducer::GoodSeedProducer(), GsfTrackRefitter::GsfTrackRefitter(), HITrackClusterRemover::HITrackClusterRemover(), HLTMuonIsoFilter::HLTMuonIsoFilter(), HLTMuonPFIsoFilter::HLTMuonPFIsoFilter(), JetCollectionReducerT< T >::JetCollectionReducerT(), JetTagProducer::JetTagProducer(), edm::OutputModule::keepThisBranch(), edm::one::OutputModuleBase::keepThisBranch(), edm::SubProcess::keepThisBranch(), edm::global::OutputModuleBase::keepThisBranch(), cms::METSignificanceProducer::METSignificanceProducer(), MultiplicityCorrelator::MultiplicityCorrelator(), MuonProducer::MuonProducer(), MuonTrackValidator::MuonTrackValidator(), NewMuonTrackValidator::NewMuonTrackValidator(), NoPileUpPFMEtProducer::NoPileUpPFMEtProducer(), pat::PackedPFCandidateRefMixer::PackedPFCandidateRefMixer(), pat::PATElectronProducer::PATElectronProducer(), pat::PATGenericParticleProducer::PATGenericParticleProducer(), pat::PATMETProducer::PATMETProducer(), pat::PATMuonProducer::PATMuonProducer(), pat::PATMuonSlimmer::PATMuonSlimmer(), pat::PATPackedCandidateProducer::PATPackedCandidateProducer(), pat::PATPFParticleProducer::PATPFParticleProducer(), pat::PATPhotonProducer::PATPhotonProducer(), pat::PATTauProducer::PATTauProducer(), pat::PATVertexAssociationProducer::PATVertexAssociationProducer(), PFTrackProducer::PFTrackProducer(), PrimaryVertexAnalyzer4PUSlimmed::PrimaryVertexAnalyzer4PUSlimmed(), ReducedEGProducer::ReducedEGProducer(), SeedMultiplicityAnalyzer::SeedMultiplicityAnalyzer(), ShallowSimhitClustersProducer::ShallowSimhitClustersProducer(), SiStripMonitorDigi::SiStripMonitorDigi(), TrackingParticleNumberOfLayersProducer::TrackingParticleNumberOfLayersProducer(), TrackRefitter::TrackRefitter(), TTClusterAssociator< T >::TTClusterAssociator(), TTClusterBuilder< T >::TTClusterBuilder(), TTStubAssociator< T >::TTStubAssociator(), and TTTrackAssociator< T >::TTTrackAssociator().

104  {
105  TypeToGet tid=TypeToGet::make<ProductType>();
106  return EDGetTokenT<ProductType>{recordConsumes(B,tid, checkIfEmpty(tag),true)};
107  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
static const std::string B
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
EDGetToken edm::EDConsumerBase::consumes ( const TypeToGet id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 109 of file EDConsumerBase.h.

References checkIfEmpty(), edm::InEvent, and recordConsumes().

109  {
110  return EDGetToken{recordConsumes(InEvent, id, checkIfEmpty(tag), true)};
111  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
template<BranchType B>
EDGetToken edm::EDConsumerBase::consumes ( TypeToGet const &  id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 114 of file EDConsumerBase.h.

References TtFullHadDaughter::B, checkIfEmpty(), and recordConsumes().

114  {
115  return EDGetToken{recordConsumes(B, id, checkIfEmpty(tag), true)};
116  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
static const std::string B
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
ConsumesCollector EDConsumerBase::consumesCollector ( )
protected

Use a ConsumesCollector to gather consumes information from helper functions.

Definition at line 72 of file EDConsumerBase.cc.

References EnergyCorrector::c, and kWasEmpty.

Referenced by AlcaBeamMonitor::AlcaBeamMonitor(), AlcaBeamSpotProducer::AlcaBeamSpotProducer(), IsolatedParticlesGeneratedJets::analyze(), edm::AnalyzerWrapper< T >::AnalyzerWrapper(), BCToEFilter::BCToEFilter(), BeamMonitor::BeamMonitor(), BeamMonitorBx::BeamMonitorBx(), BeamSpotAnalyzer::BeamSpotAnalyzer(), FastTSGFromL2Muon::beginRun(), DTTrigTest::beginRun(), CaloCleaner< T >::CaloCleaner(), CandIsoDepositProducer::CandIsoDepositProducer(), CandIsolatorFromDeposits::CandIsolatorFromDeposits(), ConfigurableAnalysis::ConfigurableAnalysis(), CorrectedECALPFClusterProducer::CorrectedECALPFClusterProducer(), CosmicsMuonIdProducer::CosmicsMuonIdProducer(), CosmicSplitterValidation::CosmicSplitterValidation(), CSCDigiValidation::CSCDigiValidation(), CSCMonitorModule::CSCMonitorModule(), CSCRecHitValidation::CSCRecHitValidation(), CtfSpecialSeedGenerator::CtfSpecialSeedGenerator(), edm::DataMixingModule::DataMixingModule(), edm::OutputModule::doPreallocate(), edm::global::OutputModuleBase::doPreallocate(), edm::one::OutputModuleBase::doPreallocate(), DTTrigProd::DTTrigProd(), EcalCosmicsHists::EcalCosmicsHists(), EcalDQMonitorTask::EcalDQMonitorTask(), EcalRecHitProducer::EcalRecHitProducer(), EcalSelectiveReadoutValidation::EcalSelectiveReadoutValidation(), EcalUncalibRecHitProducer::EcalUncalibRecHitProducer(), EDMtoMEConverter::EDMtoMEConverter(), EgammaHLTFilteredSuperClusterProducer::EgammaHLTFilteredSuperClusterProducer(), EgammaHLTPixelMatchElectronProducers::EgammaHLTPixelMatchElectronProducers(), EgHLTOfflineSource::EgHLTOfflineSource(), ElectronSeedProducer::ElectronSeedProducer(), EopTreeWriter::EopTreeWriter(), EventWithHistoryEDFilter::EventWithHistoryEDFilter(), edm::FilterWrapper< T >::FilterWrapper(), FSQDiJetAve::FSQDiJetAve(), FTLRecHitProducer::FTLRecHitProducer(), FTLUncalibratedRecHitProducer::FTLUncalibratedRecHitProducer(), GEDPhotonProducer::GEDPhotonProducer(), GlobalCosmicMuonProducer::GlobalCosmicMuonProducer(), GlobalTrackQualityProducer::GlobalTrackQualityProducer(), HGCalClusterProducer::HGCalClusterProducer(), HGCalTriggerNtupleManager::HGCalTriggerNtupleManager(), HighPtTrackEcalDetIdProducer::HighPtTrackEcalDetIdProducer(), HitTripletEDProducerT< T_HitTripletGenerator >::HitTripletEDProducerT(), HLTBitAnalyzer::HLTBitAnalyzer(), HLTExoticaValidator::HLTExoticaValidator(), HLTHiggsValidator::HLTHiggsValidator(), HLTMuonIsoFilter::HLTMuonIsoFilter(), HLTMuonValidator::HLTMuonValidator(), HLTTagAndProbeOfflineSource< TagType, TagCollType, ProbeType, ProbeCollType >::HLTTagAndProbeOfflineSource(), HLTTauDQMOfflineSource::HLTTauDQMOfflineSource(), cms::CkfDebugTrackCandidateMaker::initDebugger(), InterestingTrackEcalDetIdProducer::InterestingTrackEcalDetIdProducer(), IsolatedTracksCone::IsolatedTracksCone(), JetCorrectorProducer< T >::JetCorrectorProducer(), JetMETHLTOfflineSource::JetMETHLTOfflineSource(), L1EventTreeProducer::L1EventTreeProducer(), L1GlobalTrigger::L1GlobalTrigger(), L1MuGlobalMuonTrigger::L1MuGlobalMuonTrigger(), l1t::L1TDigiToRaw::L1TDigiToRaw(), L2MuonIsolationProducer::L2MuonIsolationProducer(), L3MuonCombinedRelativeIsolationProducer::L3MuonCombinedRelativeIsolationProducer(), L3MuonIsolationProducer::L3MuonIsolationProducer(), LogMessageMonitor::LogMessageMonitor(), pat::helper::ManyThingsToValueMaps< Adaptor, Collection, value_type >::ManyThingsToValueMaps(), pat::PATMETSlimmer::maybeReadShifts(), edm::MixingModule::MixingModule(), pat::ModifiedObjectProducer< T >::ModifiedObjectProducer(), MuIsoDepositProducer::MuIsoDepositProducer(), MultiplicityCorrelator::MultiplicityCorrelator(), MultiplicityInvestigator::MultiplicityInvestigator(), MultiplicityTimeCorrelations::MultiplicityTimeCorrelations(), MultiTrackValidator::MultiTrackValidator(), MuonAssociatorEDProducer::MuonAssociatorEDProducer(), MuonIdProducer::MuonIdProducer(), cms::MuonMETValueMapProducer::MuonMETValueMapProducer(), MuonProducer::MuonProducer(), MuonSeedGenerator::MuonSeedGenerator(), MuonSeedProducer::MuonSeedProducer(), MuonShowerInformationProducer::MuonShowerInformationProducer(), MuonTimingProducer::MuonTimingProducer(), MuonToTrackingParticleAssociatorEDProducer::MuonToTrackingParticleAssociatorEDProducer(), MuPFIsoEmbedder::MuPFIsoEmbedder(), MVAValueMapProducer< ParticleType >::MVAValueMapProducer(), OccupancyPlots::OccupancyPlots(), edm::OutputModule::OutputModule(), edm::global::OutputModuleBase::OutputModuleBase(), edm::one::OutputModuleBase::OutputModuleBase(), pat::PATCleaner< PATObjType >::PATCleaner(), pat::PATCompositeCandidateProducer::PATCompositeCandidateProducer(), pat::PATElectronProducer::PATElectronProducer(), pat::PATElectronSlimmer::PATElectronSlimmer(), pat::PATGenericParticleProducer::PATGenericParticleProducer(), pat::PATIsolatedTrackProducer::PATIsolatedTrackProducer(), pat::PATJetProducer::PATJetProducer(), pat::PATJetSlimmer::PATJetSlimmer(), pat::PATJetUpdater::PATJetUpdater(), pat::PATMETProducer::PATMETProducer(), pat::PATMuonProducer::PATMuonProducer(), pat::PATMuonSlimmer::PATMuonSlimmer(), pat::PATPFParticleProducer::PATPFParticleProducer(), pat::PATPhotonProducer::PATPhotonProducer(), pat::PATPhotonSlimmer::PATPhotonSlimmer(), pat::PATTauProducer::PATTauProducer(), pat::PATTauSlimmer::PATTauSlimmer(), PFCandIsolatorFromDeposits::PFCandIsolatorFromDeposits(), PFClusterProducer::PFClusterProducer(), citk::PFIsolationSumProducer::PFIsolationSumProducer(), citk::PFIsolationSumProducerForPUPPI::PFIsolationSumProducerForPUPPI(), PFRecHitProducer::PFRecHitProducer(), PFRecoTauChargedHadronProducer::PFRecoTauChargedHadronProducer(), PFRecoTauDiscriminationByNProngs::PFRecoTauDiscriminationByNProngs(), PFTauPrimaryVertexProducer::PFTauPrimaryVertexProducer(), PhotonConversionTrajectorySeedProducerFromQuadruplets::PhotonConversionTrajectorySeedProducerFromQuadruplets(), PhotonConversionTrajectorySeedProducerFromSingleLeg::PhotonConversionTrajectorySeedProducerFromSingleLeg(), PhotonProducer::PhotonProducer(), PixelQuadrupletMergerEDProducer::PixelQuadrupletMergerEDProducer(), PixelTracksProducer::PixelTracksProducer(), PlottingDevice::PlottingDevice(), RecoTauCleanerImpl< Prod >::RecoTauCleanerImpl(), RecoTauPiZeroProducer::RecoTauPiZeroProducer(), RecoTauProducer::RecoTauProducer(), ReduceHcalRecHitCollectionProducer::ReduceHcalRecHitCollectionProducer(), SeedCreatorFromRegionHitsEDProducerT< T_SeedCreator >::SeedCreatorFromRegionHitsEDProducerT(), SeedGeneratorFromRegionHitsEDProducer::SeedGeneratorFromRegionHitsEDProducer(), SeedMultiplicityAnalyzer::SeedMultiplicityAnalyzer(), SETMuonSeedProducer::SETMuonSeedProducer(), SingleTopTChannelLeptonDQM::SingleTopTChannelLeptonDQM(), SingleTopTChannelLeptonDQM_miniAOD::SingleTopTChannelLeptonDQM_miniAOD(), SiPixelPhase1Base::SiPixelPhase1Base(), SiPixelRawToDigi::SiPixelRawToDigi(), SiStripDCSFilter::SiStripDCSFilter(), SiStripMonitorCluster::SiStripMonitorCluster(), SiStripMonitorDigi::SiStripMonitorDigi(), SiStripMonitorTrack::SiStripMonitorTrack(), edm::SubProcess::SubProcess(), TagProbeFitTreeProducer::TagProbeFitTreeProducer(), Tau3MuSkim::Tau3MuSkim(), TauTagValidation::TauTagValidation(), cms::TCMETProducer::TCMETProducer(), TopDiLeptonHLTOfflineDQM::TopDiLeptonHLTOfflineDQM(), TopDiLeptonOfflineDQM::TopDiLeptonOfflineDQM(), TopSingleLeptonDQM::TopSingleLeptonDQM(), TopSingleLeptonDQM_miniAOD::TopSingleLeptonDQM_miniAOD(), TopSingleLeptonHLTOfflineDQM::TopSingleLeptonHLTOfflineDQM(), TrackingMonitor::TrackingMonitor(), TrackingRecHitProducer::TrackingRecHitProducer(), TrajectorySeedProducer::TrajectorySeedProducer(), TSGFromL1Muon::TSGFromL1Muon(), TSGFromL2Muon::TSGFromL2Muon(), TtDilepEvtSolutionMaker::TtDilepEvtSolutionMaker(), TtSemiEvtSolutionMaker::TtSemiEvtSolutionMaker(), Type2CorrectionProducer::Type2CorrectionProducer(), and VersionedIdProducer< PhysicsObjectPtr, SelectorType >::VersionedIdProducer().

72  {
73  ConsumesCollector c{this};
74  return c;
75 }
std::vector< ConsumesInfo > EDConsumerBase::consumesInfo ( ) const

Definition at line 539 of file EDConsumerBase.cc.

References kAlwaysGets, kKind, kLabels, kLookupInfo, m_tokenInfo, m_tokenLabels, and mps_fire::result.

539  {
540 
541  // Use this to eliminate duplicate entries related
542  // to consumesMany items where only the type was specified
543  // and the there are multiple matches. In these cases the
544  // label, instance, and process will be empty.
545  std::set<edm::TypeID> alreadySeenTypes;
546 
547  std::vector<ConsumesInfo> result;
548  auto itAlways = m_tokenInfo.begin<kAlwaysGets>();
549  auto itKind = m_tokenInfo.begin<kKind>();
550  auto itLabels = m_tokenInfo.begin<kLabels>();
551  for(auto itInfo = m_tokenInfo.begin<kLookupInfo>(),itEnd = m_tokenInfo.end<kLookupInfo>();
552  itInfo != itEnd; ++itInfo,++itKind,++itLabels, ++itAlways) {
553 
554  const unsigned int labelStart = itLabels->m_startOfModuleLabel;
555  const char* consumedModuleLabel = &(m_tokenLabels[labelStart]);
556  const char* consumedInstance = consumedModuleLabel+itLabels->m_deltaToProductInstance;
557  const char* consumedProcessName = consumedModuleLabel+itLabels->m_deltaToProcessName;
558 
559  // consumesMany case
560  if(*consumedModuleLabel == '\0') {
561  if(!alreadySeenTypes.insert(itInfo->m_type).second) {
562  continue;
563  }
564  }
565 
566  // Just copy the information into the ConsumesInfo data structure
567  result.emplace_back(itInfo->m_type,
568  consumedModuleLabel,
569  consumedInstance,
570  consumedProcessName,
571  itInfo->m_branchType,
572  *itKind,
573  *itAlways,
574  itInfo->m_index.skipCurrentProcess());
575  }
576  return result;
577 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector< char > m_tokenLabels
template<typename ProductType , BranchType B = InEvent>
void edm::EDConsumerBase::consumesMany ( )
inlineprotected

Definition at line 134 of file EDConsumerBase.h.

134  {
135  TypeToGet tid=TypeToGet::make<ProductType>();
136  consumesMany<B>(tid);
137  }
void edm::EDConsumerBase::consumesMany ( const TypeToGet id)
inlineprotected

Definition at line 139 of file EDConsumerBase.h.

References hcalTTPDigis_cfi::id.

139  {
140  consumesMany<InEvent>(id);
141  }
template<BranchType B>
void edm::EDConsumerBase::consumesMany ( const TypeToGet id)
inlineprotected

Definition at line 144 of file EDConsumerBase.h.

References TtFullHadDaughter::B, checkIfEmpty(), recordConsumes(), GlobalPosition_Frontier_DevDB_cff::tag, throwBadToken(), throwBranchMismatch(), throwConsumesCallAfterFrozen(), and throwTypeMismatch().

144  {
145  recordConsumes(B,id,edm::InputTag{},true);
146  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
static const std::string B
void EDConsumerBase::convertCurrentProcessAlias ( std::string const &  processName)

Convert "@currentProcess" in InputTag process names to the actual current process name.

Definition at line 488 of file EDConsumerBase.cc.

References containsCurrentProcessAlias_, frozen_, edm::InputTag::kCurrentProcess, kLabels, m_tokenInfo, m_tokenLabels, eostools::move(), modifiedElectrons_cfi::processName, and AlCaHLTBitMon_QueryRunRegistry::string.

488  {
489 
490  frozen_ = true;
491 
494 
495  std::vector<char> newTokenLabels;
496 
497  // first calculate the size of the new vector and reserve memory for it
498  std::vector<char>::size_type newSize = 0;
499  std::string newProcessName;
500  for(auto iter = m_tokenInfo.begin<kLabels>(), itEnd = m_tokenInfo.end<kLabels>();
501  iter != itEnd; ++iter) {
502  newProcessName = &m_tokenLabels[iter->m_startOfModuleLabel + iter->m_deltaToProcessName];
503  if (newProcessName == InputTag::kCurrentProcess) {
504  newProcessName = processName;
505  }
506  newSize += (iter->m_deltaToProcessName + newProcessName.size() + 1);
507  }
508  newTokenLabels.reserve(newSize);
509 
510  unsigned int newStartOfModuleLabel = 0;
511  for(auto iter = m_tokenInfo.begin<kLabels>(), itEnd = m_tokenInfo.end<kLabels>();
512  iter != itEnd; ++iter) {
513 
514  unsigned int startOfModuleLabel = iter->m_startOfModuleLabel;
515  unsigned short deltaToProcessName = iter->m_deltaToProcessName;
516 
517  iter->m_startOfModuleLabel = newStartOfModuleLabel;
518 
519  newProcessName = &m_tokenLabels[startOfModuleLabel + deltaToProcessName];
520  if (newProcessName == InputTag::kCurrentProcess) {
521  newProcessName = processName;
522  }
523 
524  newStartOfModuleLabel += (deltaToProcessName + newProcessName.size() + 1);
525 
526  // Copy in both the module label and instance, they are the same
527  newTokenLabels.insert(newTokenLabels.end(),
528  m_tokenLabels.begin() + startOfModuleLabel,
529  m_tokenLabels.begin() + (startOfModuleLabel + deltaToProcessName));
530 
531  newTokenLabels.insert(newTokenLabels.end(), newProcessName.begin(), newProcessName.end());
532  newTokenLabels.push_back('\0');
533  }
534  m_tokenLabels = std::move(newTokenLabels);
535  }
536 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
uint16_t size_type
static const std::string kCurrentProcess
Definition: InputTag.h:51
std::vector< char > m_tokenLabels
def move(src, dest)
Definition: eostools.py:510
ProductResolverIndexAndSkipBit EDConsumerBase::indexFrom ( EDGetToken  iToken,
BranchType  iBranch,
TypeID const &  iType 
) const

Definition at line 204 of file EDConsumerBase.cc.

References edm::EDGetToken::index(), info(), kLookupInfo, likely, m_tokenInfo, edm::ProductResolverIndexInvalid, throwBadToken(), throwBranchMismatch(), throwTypeMismatch(), and unlikely.

Referenced by EDConsumerBase(), and edm::PrincipalGetAdapter::getByToken_().

205 {
206  if(unlikely(iToken.index()>=m_tokenInfo.size())) {
207  throwBadToken(iType,iToken);
208  }
209  const auto& info = m_tokenInfo.get<kLookupInfo>(iToken.index());
210  if (likely(iBranch == info.m_branchType)) {
211  if (likely(iType == info.m_type)) {
212  return info.m_index;
213  } else {
214  throwTypeMismatch(iType, iToken);
215  }
216  } else {
217  throwBranchMismatch(iBranch,iToken);
218  }
220 }
static const TGPicture * info(bool iBackgroundIsBlack)
void throwTypeMismatch(edm::TypeID const &, EDGetToken) const
void throwBadToken(edm::TypeID const &iType, EDGetToken iToken) const
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
#define unlikely(x)
#define likely(x)
void throwBranchMismatch(BranchType, EDGetToken) const
unsigned int index() const
Definition: EDGetToken.h:46
void EDConsumerBase::itemsMayGet ( BranchType  iBranch,
std::vector< ProductResolverIndexAndSkipBit > &  oIndices 
) const

Definition at line 259 of file EDConsumerBase.cc.

References KineDebug3::count(), kAlwaysGets, kLookupInfo, m_tokenInfo, and edm::ProductResolverIndexInvalid.

Referenced by EDConsumerBase(), and updateLookup().

260 {
261  //how many are we adding?
262  unsigned int count=0;
263  {
264  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
265  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
266  itEnd = m_tokenInfo.end<kLookupInfo>();
267  it != itEnd; ++it,++itAlwaysGet) {
268  if(iBranch==it->m_branchType) {
269  if (it->m_index.productResolverIndex() != ProductResolverIndexInvalid) {
270  if(not *itAlwaysGet) {
271  ++count;
272  }
273  }
274  }
275  }
276  }
277  oIndices.reserve(oIndices.size()+count);
278  {
279  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
280  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
281  itEnd = m_tokenInfo.end<kLookupInfo>();
282  it != itEnd; ++it,++itAlwaysGet) {
283  if(iBranch==it->m_branchType) {
284  if (it->m_index.productResolverIndex() != ProductResolverIndexInvalid) {
285  if(not *itAlwaysGet) {
286  oIndices.push_back(it->m_index);
287  }
288  }
289  }
290  }
291  }
292 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
void EDConsumerBase::itemsToGet ( BranchType  iBranch,
std::vector< ProductResolverIndexAndSkipBit > &  oIndices 
) const

Definition at line 223 of file EDConsumerBase.cc.

References KineDebug3::count(), kAlwaysGets, kLookupInfo, m_tokenInfo, and edm::ProductResolverIndexInvalid.

Referenced by EDConsumerBase(), and updateLookup().

224 {
225  //how many are we adding?
226  unsigned int count=0;
227  {
228  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
229  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
230  itEnd = m_tokenInfo.end<kLookupInfo>();
231  it != itEnd; ++it,++itAlwaysGet) {
232  if(iBranch==it->m_branchType) {
233  if (it->m_index.productResolverIndex() != ProductResolverIndexInvalid) {
234  if(*itAlwaysGet) {
235  ++count;
236  }
237  }
238  }
239  }
240  }
241  oIndices.reserve(oIndices.size()+count);
242  {
243  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
244  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
245  itEnd = m_tokenInfo.end<kLookupInfo>();
246  it != itEnd; ++it,++itAlwaysGet) {
247  if(iBranch==it->m_branchType) {
248  if (it->m_index.productResolverIndex() != ProductResolverIndexInvalid) {
249  if(*itAlwaysGet) {
250  oIndices.push_back(it->m_index);
251  }
252  }
253  }
254  }
255  }
256 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector<ProductResolverIndexAndSkipBit> const& edm::EDConsumerBase::itemsToGetFrom ( BranchType  iType) const
inline

Definition at line 70 of file EDConsumerBase.h.

References itemsToGetFromBranch_, registeredToConsume(), registeredToConsumeMany(), and updateLookup().

70 { return itemsToGetFromBranch_[iType]; }
std::array< std::vector< ProductResolverIndexAndSkipBit >, edm::NumBranchTypes > itemsToGetFromBranch_
void EDConsumerBase::labelsForToken ( EDGetToken  iToken,
Labels oLabels 
) const

Definition at line 295 of file EDConsumerBase.cc.

References edm::EDGetToken::index(), diffTreeTool::index, kLabels, tablePrinter::labels, m_tokenInfo, m_tokenLabels, edm::ProductLabels::module, edm::ProductLabels::process, edm::ProductLabels::productInstance, and command_line::start.

Referenced by EgammaBasicClusters::analyze(), AlCaElectronsTest::analyze(), SiPixelHitEfficiencySource::analyze(), EnergyScaleAnalyzer::analyze(), SiPixelTrackResidualSource::analyze(), HLTScalers::analyze(), EgammaObjects::analyzeElectrons(), EgammaObjects::analyzePhotons(), ElectronTagProbeAnalyzer::bookHistograms(), TkAlCaRecoMonitor::bookHistograms(), ElectronAnalyzer::bookHistograms(), HLTVertexPerformanceAnalyzer::dqmBeginRun(), HLTBTagPerformanceAnalyzer::dqmBeginRun(), TriggerBxMonitor::dqmBeginRun(), TriggerRatesMonitor::dqmBeginRun(), TrackingNtuple::fillSeeds(), TrackingNtuple::fillTracks(), EcalSimpleUncalibRecHitFilter::filter(), EcalMIPRecHitFilter::filter(), HLTBTagPerformanceAnalyzer::HLTBTagPerformanceAnalyzer(), HLTVertexPerformanceAnalyzer::HLTVertexPerformanceAnalyzer(), edm::PrincipalGetAdapter::labelsForToken(), edm::PrincipalGetAdapter::makeFailToGetException(), MultiTrackValidator::MultiTrackValidator(), MuonSimHitsValidAnalyzer::MuonSimHitsValidAnalyzer(), TrackRefitter::produce(), HIPixelTrackFilterProducer::produce(), GenTrackMatcher::produce(), ReducedESRecHitCollectionProducer::produce(), HIProtoTrackFilterProducer::produce(), EcalEBTrigPrimProducer::produce(), ReducedRecHitCollectionProducer::produce(), SeedClusterRemoverPhase2::produce(), SeedClusterRemover::produce(), EcalTrigPrimProducer::produce(), HITrackClusterRemover::produce(), cms::CosmicTrackFinder::produce(), and edm::PrincipalGetAdapter::throwAmbiguousException().

296 {
297  unsigned int index = iToken.index();
298  auto labels = m_tokenInfo.get<kLabels>(index);
299  unsigned int start = labels.m_startOfModuleLabel;
300  oLabels.module = &(m_tokenLabels[start]);
301  oLabels.productInstance = oLabels.module+labels.m_deltaToProductInstance;
302  oLabels.process = oLabels.module+labels.m_deltaToProcessName;
303 }
Definition: start.py:1
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector< char > m_tokenLabels
unsigned int index() const
Definition: EDGetToken.h:46
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT<ProductType> edm::EDConsumerBase::mayConsume ( edm::InputTag const &  tag)
inlineprotected

Definition at line 119 of file EDConsumerBase.h.

References TtFullHadDaughter::B, checkIfEmpty(), and recordConsumes().

Referenced by cms::PFMETProducer::PFMETProducer().

119  {
120  TypeToGet tid=TypeToGet::make<ProductType>();
121  return EDGetTokenT<ProductType>{recordConsumes(B, tid, checkIfEmpty(tag), false)};
122  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
static const std::string B
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
EDGetToken edm::EDConsumerBase::mayConsume ( const TypeToGet id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 124 of file EDConsumerBase.h.

References hcalTTPDigis_cfi::id, and GlobalPosition_Frontier_DevDB_cff::tag.

124  {
125  return mayConsume<InEvent>(id,tag);
126  }
template<BranchType B>
EDGetToken edm::EDConsumerBase::mayConsume ( const TypeToGet id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 129 of file EDConsumerBase.h.

References TtFullHadDaughter::B, checkIfEmpty(), and recordConsumes().

129  {
130  return EDGetToken{recordConsumes(B,id,checkIfEmpty(tag),false)};
131  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
static const std::string B
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
void EDConsumerBase::modulesWhoseProductsAreConsumed ( std::vector< ModuleDescription const * > &  modules,
ProductRegistry const &  preg,
std::map< std::string, ModuleDescription const * > const &  labelsToDesc,
std::string const &  processName 
) const

Definition at line 431 of file EDConsumerBase.cc.

References edm::ProductResolverIndexHelper::index(), edm::InEvent, kKind, kLabels, kLookupInfo, m_tokenInfo, m_tokenLabels, patRefSel_triggerMatching_cfi::matches, ErrorSummaryFilter_cfi::modules, edm::ProductRegistry::productLookup(), edm::ProductResolverIndexInvalid, and edm::ProductResolverIndexHelper::relatedIndexes().

434  {
435 
436  ProductResolverIndexHelper const& iHelper = *preg.productLookup(InEvent);
437 
438  std::set<std::string> alreadyFound;
439 
440  auto itKind = m_tokenInfo.begin<kKind>();
441  auto itLabels = m_tokenInfo.begin<kLabels>();
442  for(auto itInfo = m_tokenInfo.begin<kLookupInfo>(),itEnd = m_tokenInfo.end<kLookupInfo>();
443  itInfo != itEnd; ++itInfo,++itKind,++itLabels) {
444 
445  if(itInfo->m_branchType == InEvent and
446  (not itInfo->m_index.skipCurrentProcess())) {
447 
448  const unsigned int labelStart = itLabels->m_startOfModuleLabel;
449  const char* consumedModuleLabel = &(m_tokenLabels[labelStart]);
450  const char* consumedProcessName = consumedModuleLabel+itLabels->m_deltaToProcessName;
451 
452  if(*consumedModuleLabel != '\0') { // not a consumesMany
453  if(*consumedProcessName != '\0') { // process name is specified in consumes call
454  if (processName == consumedProcessName &&
455  iHelper.index(*itKind,
456  itInfo->m_type,
457  consumedModuleLabel,
458  consumedModuleLabel+itLabels->m_deltaToProductInstance,
459  consumedModuleLabel+itLabels->m_deltaToProcessName) != ProductResolverIndexInvalid) {
460  insertFoundModuleLabel(consumedModuleLabel, modules, alreadyFound, labelsToDesc, preg);
461  }
462  } else { // process name was empty
463  auto matches = iHelper.relatedIndexes(*itKind,
464  itInfo->m_type,
465  consumedModuleLabel,
466  consumedModuleLabel+itLabels->m_deltaToProductInstance);
467  for(unsigned int j = 0; j < matches.numberOfMatches(); ++j) {
468  if(processName == matches.processName(j)) {
469  insertFoundModuleLabel(consumedModuleLabel, modules, alreadyFound, labelsToDesc, preg);
470  }
471  }
472  }
473  // consumesMany case
474  } else if(itInfo->m_index.productResolverIndex() == ProductResolverIndexInvalid) {
475  auto matches = iHelper.relatedIndexes(*itKind,
476  itInfo->m_type);
477  for(unsigned int j = 0; j < matches.numberOfMatches(); ++j) {
478  if(processName == matches.processName(j)) {
479  insertFoundModuleLabel(matches.moduleLabel(j), modules, alreadyFound, labelsToDesc, preg);
480  }
481  }
482  }
483  }
484  }
485 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
Matches relatedIndexes(KindOfType kindOfType, TypeID const &typeID, char const *moduleLabel, char const *instance) const
std::vector< char > m_tokenLabels
ProductResolverIndex index(KindOfType kindOfType, TypeID const &typeID, char const *moduleLabel, char const *instance, char const *process=0) const
EDConsumerBase const& edm::EDConsumerBase::operator= ( EDConsumerBase const &  )
delete

Referenced by EDConsumerBase().

EDConsumerBase& edm::EDConsumerBase::operator= ( EDConsumerBase &&  )
default
unsigned int EDConsumerBase::recordConsumes ( BranchType  iBranch,
TypeToGet const &  iType,
edm::InputTag const &  iTag,
bool  iAlwaysGets 
)
private

Definition at line 88 of file EDConsumerBase.cc.

References containsCurrentProcessAlias_, frozen_, diffTreeTool::index, edm::InputTag::instance(), edm::InputTag::kCurrentProcess, edm::TypeToGet::kind(), edm::InputTag::label(), funct::m, m_tokenInfo, m_tokenLabels, edm::InputTag::process(), edm::ProductResolverIndexInvalid, AlCaHLTBitMon_QueryRunRegistry::string, throwConsumesCallAfterFrozen(), edm::TypeToGet::type(), and edm::InputTag::willSkipCurrentProcess().

Referenced by consumes(), consumesMany(), and mayConsume().

88  {
89 
90  if(frozen_) {
91  throwConsumesCallAfterFrozen(iType, iTag);
92  }
93 
94  unsigned int index =m_tokenInfo.size();
95 
96  bool skipCurrentProcess = iTag.willSkipCurrentProcess();
97 
98  const size_t labelSize = iTag.label().size();
99  const size_t productInstanceSize = iTag.instance().size();
100  unsigned int labelStart = m_tokenLabels.size();
101  unsigned short delta1 = labelSize+1;
102  unsigned short delta2 = labelSize+2+productInstanceSize;
103  m_tokenInfo.emplace_back(TokenLookupInfo{iType.type(), ProductResolverIndexInvalid, skipCurrentProcess, iBranch},
104  iAlwaysGets,
105  LabelPlacement{labelStart,delta1,delta2},
106  iType.kind());
107 
108  const size_t additionalSize =
109  skipCurrentProcess ?
110  labelSize+productInstanceSize+3 :
111  labelSize+productInstanceSize+iTag.process().size()+3;
112 
113  m_tokenLabels.reserve(m_tokenLabels.size()+additionalSize);
114  {
115  const std::string& m =iTag.label();
116  m_tokenLabels.insert(m_tokenLabels.end(),m.begin(),m.end());
117  m_tokenLabels.push_back('\0');
118  }
119  {
120  const std::string& m =iTag.instance();
121  m_tokenLabels.insert(m_tokenLabels.end(),m.begin(),m.end());
122  m_tokenLabels.push_back('\0');
123  }
124  {
125  const std::string& m = iTag.process();
126  if (m == InputTag::kCurrentProcess) {
128  }
129  if (!skipCurrentProcess) {
130  m_tokenLabels.insert(m_tokenLabels.end(),m.begin(),m.end());
131  m_tokenLabels.push_back('\0');
132  } else {
133  m_tokenLabels.push_back('\0');
134  }
135  }
136  return index;
137 }
void throwConsumesCallAfterFrozen(TypeToGet const &, InputTag const &) const
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
static const std::string kCurrentProcess
Definition: InputTag.h:51
std::vector< char > m_tokenLabels
bool EDConsumerBase::registeredToConsume ( ProductResolverIndex  iIndex,
bool  skipCurrentProcess,
BranchType  iBranch 
) const
Returns
true if the product corresponding to the index was registered via consumes or mayConsume call

Definition at line 306 of file EDConsumerBase.cc.

References kLookupInfo, m_tokenInfo, and edm::PRODUCT_TYPE.

Referenced by edm::Principal::findProductByLabel(), and itemsToGetFrom().

307 {
308  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
309  itEnd = m_tokenInfo.end<kLookupInfo>();
310  it != itEnd; ++it) {
311  if(it->m_index.productResolverIndex() == iIndex and
312  it->m_index.skipCurrentProcess() == skipCurrentProcess and
313  it->m_branchType == iBranch) {
314  return true;
315  }
316  }
317  //TEMPORARY: Remember so we do not have to do this again
318  //non thread-safe
319  EDConsumerBase* nonConstThis = const_cast<EDConsumerBase*>(this);
320  nonConstThis->m_tokenInfo.emplace_back(TokenLookupInfo{TypeID{}, iIndex, skipCurrentProcess, iBranch},
321  true,
322  LabelPlacement{0,0,0},
323  PRODUCT_TYPE);
324 
325  return false;
326 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
bool EDConsumerBase::registeredToConsumeMany ( TypeID const &  iType,
BranchType  iBranch 
) const
Returns
true of TypeID corresponds to a type specified in a consumesMany call

Definition at line 329 of file EDConsumerBase.cc.

References kLookupInfo, m_tokenInfo, edm::PRODUCT_TYPE, and edm::ProductResolverIndexInvalid.

Referenced by edm::Principal::getManyByType(), and itemsToGetFrom().

330 {
331  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
332  itEnd = m_tokenInfo.end<kLookupInfo>();
333  it != itEnd; ++it) {
334  //consumesMany entries do not have their index resolved
335  if(it->m_index.productResolverIndex() == ProductResolverIndexInvalid and
336  it->m_type == iType and
337  it->m_branchType == iBranch) {
338  return true;
339  }
340  }
341  //TEMPORARY: Remember so we do not have to do this again
342  //non thread-safe
343  EDConsumerBase* nonConstThis = const_cast<EDConsumerBase*>(this);
344  nonConstThis->m_tokenInfo.emplace_back(TokenLookupInfo{iType,ProductResolverIndexInvalid, false, iBranch},
345  true,
346  LabelPlacement{0,0,0},
347  PRODUCT_TYPE);
348  return false;
349 
350 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
void EDConsumerBase::throwBadToken ( edm::TypeID const &  iType,
EDGetToken  iToken 
) const
private

Definition at line 364 of file EDConsumerBase.cc.

References edm::TypeID::className(), Exception, edm::EDGetToken::index(), and edm::EDGetToken::isUninitialized().

Referenced by consumesMany(), and indexFrom().

365 {
366  if(iToken.isUninitialized()) {
367  throw cms::Exception("BadToken")<<"A get using a EDGetToken with the C++ type '"<<iType.className()<<"' was made using an uninitialized token.\n Please check that the variable is being initialized from a 'consumes' call.";
368  }
369  throw cms::Exception("BadToken")<<"A get using a EDGetToken with the C++ type '"<<iType.className()<<"' was made using a token with a value "<<iToken.index()<<" which is beyond the range used by this module.\n Please check that the variable is being initialized from a 'consumes' call from this module.\n You can not share EDGetToken values between modules.";
370 }
bool isUninitialized() const
Definition: EDGetToken.h:47
unsigned int index() const
Definition: EDGetToken.h:46
void EDConsumerBase::throwBranchMismatch ( BranchType  iBranch,
EDGetToken  iToken 
) const
private

Definition at line 359 of file EDConsumerBase.cc.

References edm::BranchTypeToString(), Exception, edm::EDGetToken::index(), kLookupInfo, and m_tokenInfo.

Referenced by consumesMany(), and indexFrom().

359  {
360  throw cms::Exception("BranchTypeMismatch")<<"A get using a EDGetToken was done in "<<BranchTypeToString(iBranch)<<" but the consumes call was for "<<BranchTypeToString(m_tokenInfo.get<kLookupInfo>(iToken.index()).m_branchType)<<".\n Please modify the consumes call to use the correct branch type.";
361 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::string const & BranchTypeToString(BranchType const &branchType)
Definition: BranchType.cc:99
unsigned int index() const
Definition: EDGetToken.h:46
void EDConsumerBase::throwConsumesCallAfterFrozen ( TypeToGet const &  typeToGet,
InputTag const &  inputTag 
) const
private

Definition at line 373 of file EDConsumerBase.cc.

References edm::ProductRegistry::aliasToOriginal(), Exception, AlCaHLTBitMon_QueryRunRegistry::string, edmPickEvents::target, and edm::TypeToGet::type().

Referenced by consumesMany(), and recordConsumes().

373  {
374  throw cms::Exception("LogicError") << "A module declared it consumes a product after its constructor.\n"
375  << "This must be done in the contructor\n"
376  << "The product type was: " << typeToGet.type() << "\n"
377  << "and " << inputTag << "\n";
378 }
void EDConsumerBase::throwTypeMismatch ( edm::TypeID const &  iType,
EDGetToken  iToken 
) const
private

Definition at line 354 of file EDConsumerBase.cc.

References edm::TypeID::className(), Exception, edm::EDGetToken::index(), kLookupInfo, and m_tokenInfo.

Referenced by consumesMany(), and indexFrom().

355 {
356  throw cms::Exception("TypeMismatch")<<"A get using a EDGetToken used the C++ type '"<<iType.className()<<"' but the consumes call was for type '"<<m_tokenInfo.get<kLookupInfo>(iToken.index()).m_type.className()<<"'.\n Please modify either the consumes or get call so the types match.";
357 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
unsigned int index() const
Definition: EDGetToken.h:46
void EDConsumerBase::updateLookup ( BranchType  iBranchType,
ProductResolverIndexHelper const &  iHelper,
bool  iPrefetchMayGet 
)

Definition at line 140 of file EDConsumerBase.cc.

References containsCurrentProcessAlias_, frozen_, mps_fire::i, edm::ProductResolverIndexHelper::index(), diffTreeTool::index, info(), itemsMayGet(), itemsToGet(), itemsToGetFromBranch_, kAlwaysGets, callgraph::kind, kKind, kLabels, kLookupInfo, tablePrinter::labels, m_tokenInfo, m_tokenLabels, patRefSel_triggerMatching_cfi::matches, edm::ProductResolverIndexInvalid, and edm::ProductResolverIndexHelper::relatedIndexes().

Referenced by edm::SubProcess::beginJob(), and itemsToGetFrom().

143 {
144  frozen_ = true;
146  {
147  auto itKind = m_tokenInfo.begin<kKind>();
148  auto itLabels = m_tokenInfo.begin<kLabels>();
149  for(auto itInfo = m_tokenInfo.begin<kLookupInfo>(),itEnd = m_tokenInfo.end<kLookupInfo>();
150  itInfo != itEnd; ++itInfo,++itKind,++itLabels) {
151  if(itInfo->m_branchType == iBranchType) {
152  const unsigned int labelStart = itLabels->m_startOfModuleLabel;
153  const char* moduleLabel = &(m_tokenLabels[labelStart]);
154  itInfo->m_index = ProductResolverIndexAndSkipBit(iHelper.index(*itKind,
155  itInfo->m_type,
156  moduleLabel,
157  moduleLabel+itLabels->m_deltaToProductInstance,
158  moduleLabel+itLabels->m_deltaToProcessName),
159  itInfo->m_index.skipCurrentProcess());
160  }
161  }
162  }
163 
164  //now add resolved requests to get many to the end of our list
165  // a get many will have an empty module label
166  for(size_t i=0, iEnd = m_tokenInfo.size(); i!=iEnd;++i) {
167  //need to copy since pointer could be invalidated by emplace_back
168  auto const info = m_tokenInfo.get<kLookupInfo>(i);
169  if(info.m_branchType == iBranchType &&
170  info.m_index.productResolverIndex() == ProductResolverIndexInvalid &&
171  m_tokenLabels[m_tokenInfo.get<kLabels>(i).m_startOfModuleLabel]=='\0') {
172  //find all matching types
173  const auto kind=m_tokenInfo.get<kKind>(i);
174  auto matches = iHelper.relatedIndexes(kind,info.m_type);
175 
176  //NOTE: This could be changed to contain the true labels for what is being
177  // requested but for now I want to remember these are part of a get many
178  const LabelPlacement labels= m_tokenInfo.get<kLabels>(i);
179  bool alwaysGet = m_tokenInfo.get<kAlwaysGets>(i);
180  for(unsigned int j=0;j!=matches.numberOfMatches();++j) {
181  //only keep the ones that are for a specific data item and not a collection
182  if(matches.isFullyResolved(j)) {
183  auto index =matches.index(j);
184  m_tokenInfo.emplace_back(TokenLookupInfo{info.m_type, index, info.m_index.skipCurrentProcess(), info.m_branchType},
185  alwaysGet,
186  labels,
187  kind);
188  }
189  }
190  }
191  }
192  m_tokenInfo.shrink_to_fit();
193 
194  itemsToGet(iBranchType, itemsToGetFromBranch_[iBranchType]);
195  if(iPrefetchMayGet) {
196  itemsMayGet(iBranchType, itemsToGetFromBranch_[iBranchType]);
197  }
198 }
static const TGPicture * info(bool iBackgroundIsBlack)
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
std::vector< char > m_tokenLabels
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
std::array< std::vector< ProductResolverIndexAndSkipBit >, edm::NumBranchTypes > itemsToGetFromBranch_

Friends And Related Function Documentation

friend class ConsumesCollector
friend

Definition at line 98 of file EDConsumerBase.h.

template<typename T >
friend class WillGetIfMatch
friend

Definition at line 99 of file EDConsumerBase.h.

Member Data Documentation

bool edm::EDConsumerBase::containsCurrentProcessAlias_
private

Definition at line 193 of file EDConsumerBase.h.

Referenced by convertCurrentProcessAlias(), recordConsumes(), and updateLookup().

bool edm::EDConsumerBase::frozen_
private

Definition at line 192 of file EDConsumerBase.h.

Referenced by convertCurrentProcessAlias(), recordConsumes(), and updateLookup().

std::array<std::vector<ProductResolverIndexAndSkipBit>, edm::NumBranchTypes> edm::EDConsumerBase::itemsToGetFromBranch_
private

Definition at line 190 of file EDConsumerBase.h.

Referenced by itemsToGetFrom(), and updateLookup().

edm::SoATuple<TokenLookupInfo,bool,LabelPlacement,edm::KindOfType> edm::EDConsumerBase::m_tokenInfo
private
std::vector<char> edm::EDConsumerBase::m_tokenLabels
private