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 | 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

Classes

struct  LabelPlacement
 
struct  TokenLookupInfo
 

Public Types

typedef ProductLabels Labels
 

Public Member Functions

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 (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &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 ()
 

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)
 
 EDConsumerBase (const EDConsumerBase &)=delete
 
const EDConsumerBaseoperator= (const EDConsumerBase &)=delete
 
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 frozen_
 
std::vector
< ProductHolderIndexAndSkipBit
itemsToGetFromEvent_
 
edm::SoATuple< TokenLookupInfo,
bool, LabelPlacement,
edm::KindOfType
m_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 75 of file EDConsumerBase.h.

Member Enumeration Documentation

anonymous enum
private

Constructor & Destructor Documentation

edm::EDConsumerBase::EDConsumerBase ( )
inline

Definition at line 53 of file EDConsumerBase.h.

53 : frozen_(false) {}
EDConsumerBase::~EDConsumerBase ( )
virtual

Definition at line 52 of file EDConsumerBase.cc.

53 {
54 }
edm::EDConsumerBase::EDConsumerBase ( const EDConsumerBase )
privatedelete

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(), 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 97 of file EDConsumerBase.h.

References checkIfEmpty(), and recordConsumes().

Referenced by AlCaECALRecHitReducer::AlCaECALRecHitReducer(), MixCollectionValidation::bookHistograms(), BTagPerformanceAnalyzerMC::BTagPerformanceAnalyzerMC(), BTagPerformanceAnalyzerOnData::BTagPerformanceAnalyzerOnData(), pat::CandidateSummaryTable::CandidateSummaryTable(), EcalPileUpDepMonitor::EcalPileUpDepMonitor(), EGammaCutBasedEleIdAnalyzer::EGammaCutBasedEleIdAnalyzer(), EmDQMReco::EmDQMReco(), edm::EventContentAnalyzer::EventContentAnalyzer(), EcalDQMonitorTask::formSchedule(), GoodSeedProducer::GoodSeedProducer(), HITrackClusterRemover::HITrackClusterRemover(), HLTMuonIsoFilter::HLTMuonIsoFilter(), HLTMuonPFIsoFilter::HLTMuonPFIsoFilter(), JetTagProducer::JetTagProducer(), edm::OutputModule::keepThisBranch(), edm::one::OutputModuleBase::keepThisBranch(), edm::global::OutputModuleBase::keepThisBranch(), cms::METSignificanceProducer::METSignificanceProducer(), MultiplicityCorrelator::MultiplicityCorrelator(), MultiTrackValidator::MultiTrackValidator(), MuonProducer::MuonProducer(), MuonTrackValidator::MuonTrackValidator(), NoPileUpPFMEtProducer::NoPileUpPFMEtProducer(), pat::PATElectronProducer::PATElectronProducer(), pat::PATGenericParticleProducer::PATGenericParticleProducer(), pat::PATJetProducer::PATJetProducer(), pat::PATMETProducer::PATMETProducer(), pat::PATMuonProducer::PATMuonProducer(), pat::PATPackedCandidateProducer::PATPackedCandidateProducer(), pat::PATPFParticleProducer::PATPFParticleProducer(), pat::PATPhotonProducer::PATPhotonProducer(), pat::PATSingleVertexSelector::PATSingleVertexSelector(), pat::PATTauProducer::PATTauProducer(), pat::PATVertexAssociationProducer::PATVertexAssociationProducer(), PFTrackProducer::PFTrackProducer(), PrimaryVertexAnalyzer4PUSlimmed::PrimaryVertexAnalyzer4PUSlimmed(), ReducedEGProducer::ReducedEGProducer(), SeedMultiplicityAnalyzer::SeedMultiplicityAnalyzer(), ShallowSimhitClustersProducer::ShallowSimhitClustersProducer(), SiStripMonitorDigi::SiStripMonitorDigi(), and TrackingParticleNumberOfLayersProducer::TrackingParticleNumberOfLayersProducer().

97  {
98  TypeToGet tid=TypeToGet::make<ProductType>();
99  return EDGetTokenT<ProductType>{recordConsumes(B,tid, checkIfEmpty(tag),true)};
100  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
EDGetToken edm::EDConsumerBase::consumes ( const TypeToGet id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 102 of file EDConsumerBase.h.

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

102  {
103  return EDGetToken{recordConsumes(InEvent, id, checkIfEmpty(tag), true)};
104  }
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 107 of file EDConsumerBase.h.

References checkIfEmpty(), and recordConsumes().

107  {
108  return EDGetToken{recordConsumes(B, id, checkIfEmpty(tag), true)};
109  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
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.

Referenced by AlcaBeamMonitor::AlcaBeamMonitor(), AlcaBeamSpotProducer::AlcaBeamSpotProducer(), IsolatedParticlesGeneratedJets::analyze(), BCToEFilter::BCToEFilter(), BeamMonitor::BeamMonitor(), BeamMonitorBx::BeamMonitorBx(), BeamSpotAnalyzer::BeamSpotAnalyzer(), TSGFromL1Muon::beginRun(), FastTSGFromL2Muon::beginRun(), DTTrigTest::beginRun(), CandIsoDepositProducer::CandIsoDepositProducer(), CandIsolatorFromDeposits::CandIsolatorFromDeposits(), ConfigurableAnalysis::ConfigurableAnalysis(), CorrectedECALPFClusterProducer::CorrectedECALPFClusterProducer(), CorrectedMETProducerT< T >::CorrectedMETProducerT(), CosmicsMuonIdProducer::CosmicsMuonIdProducer(), CosmicSplitterValidation::CosmicSplitterValidation(), CSCDigiValidation::CSCDigiValidation(), CSCMonitorModule::CSCMonitorModule(), CSCRecHitValidation::CSCRecHitValidation(), CtfSpecialSeedGenerator::CtfSpecialSeedGenerator(), edm::DataMixingModule::DataMixingModule(), DTTrigProd::DTTrigProd(), EcalCosmicsHists::EcalCosmicsHists(), EcalDQMonitorTask::EcalDQMonitorTask(), EcalRecHitProducer::EcalRecHitProducer(), EcalSelectiveReadoutValidation::EcalSelectiveReadoutValidation(), EcalUncalibRecHitProducer::EcalUncalibRecHitProducer(), EDMtoMEConverter::EDMtoMEConverter(), EgammaHLTPixelMatchElectronProducers::EgammaHLTPixelMatchElectronProducers(), EgHLTOfflineSource::EgHLTOfflineSource(), ElectronSeedProducer::ElectronSeedProducer(), EopTreeWriter::EopTreeWriter(), EventWithHistoryEDFilter::EventWithHistoryEDFilter(), edm::FilterWrapper< T >::FilterWrapper(), FSQDiJetAve::FSQDiJetAve(), GEDPhotonProducer::GEDPhotonProducer(), GlobalCosmicMuonProducer::GlobalCosmicMuonProducer(), GlobalTrackQualityProducer::GlobalTrackQualityProducer(), HighPtTrackEcalDetIdProducer::HighPtTrackEcalDetIdProducer(), HLTAnalyzer::HLTAnalyzer(), HLTBitAnalyzer::HLTBitAnalyzer(), HLTExoticaValidator::HLTExoticaValidator(), HLTHiggsValidator::HLTHiggsValidator(), HLTMuonIsoFilter::HLTMuonIsoFilter(), HLTMuonValidator::HLTMuonValidator(), HLTTauDQMOfflineSource::HLTTauDQMOfflineSource(), cms::CkfDebugTrackCandidateMaker::initDebugger(), InterestingTrackEcalDetIdProducer::InterestingTrackEcalDetIdProducer(), IsolatedTracksCone::IsolatedTracksCone(), JetCorrectorProducer< T >::JetCorrectorProducer(), JetMETHLTOfflineSource::JetMETHLTOfflineSource(), L1GlobalTrigger::L1GlobalTrigger(), L1MuGlobalMuonTrigger::L1MuGlobalMuonTrigger(), l1t::L1TDigiToRaw::L1TDigiToRaw(), L2MuonIsolationProducer::L2MuonIsolationProducer(), L3MuonCombinedRelativeIsolationProducer::L3MuonCombinedRelativeIsolationProducer(), L3MuonIsolationProducer::L3MuonIsolationProducer(), LogMessageMonitor::LogMessageMonitor(), pat::helper::ManyThingsToValueMaps< Adaptor, Collection, value_type >::ManyThingsToValueMaps(), edm::MixingModule::MixingModule(), pat::ModifiedObjectProducer< T >::ModifiedObjectProducer(), MuIsoDepositProducer::MuIsoDepositProducer(), MultiplicityCorrelator::MultiplicityCorrelator(), MultiplicityInvestigator::MultiplicityInvestigator(), MultiplicityTimeCorrelations::MultiplicityTimeCorrelations(), MultiTrackValidator::MultiTrackValidator(), MuonAssociatorEDProducer::MuonAssociatorEDProducer(), MuonCaloCleanerAllCrossed::MuonCaloCleanerAllCrossed(), MuonCaloDistanceProducer::MuonCaloDistanceProducer(), MuonDetCleaner::MuonDetCleaner(), MuonIdProducer::MuonIdProducer(), cms::MuonMETValueMapProducer::MuonMETValueMapProducer(), MuonProducer::MuonProducer(), MuonSeedGenerator::MuonSeedGenerator(), MuonSeedProducer::MuonSeedProducer(), MuonShowerInformationProducer::MuonShowerInformationProducer(), MuonTimingProducer::MuonTimingProducer(), MuonToTrackingParticleAssociatorEDProducer::MuonToTrackingParticleAssociatorEDProducer(), MuPFIsoEmbedder::MuPFIsoEmbedder(), OscarMTProducer::OscarMTProducer(), pat::PATCleaner< PATObjType >::PATCleaner(), pat::PATCompositeCandidateProducer::PATCompositeCandidateProducer(), pat::PATElectronSlimmer::PATElectronSlimmer(), pat::PATJetSlimmer::PATJetSlimmer(), pat::PATMETProducer::PATMETProducer(), pat::PATMuonSlimmer::PATMuonSlimmer(), pat::PATPhotonSlimmer::PATPhotonSlimmer(), pat::PATTauSlimmer::PATTauSlimmer(), PFCandIsolatorFromDeposits::PFCandIsolatorFromDeposits(), PFRecHitProducer::PFRecHitProducer(), PFRecoTauChargedHadronProducer::PFRecoTauChargedHadronProducer(), PFRecoTauDiscriminationByNProngs::PFRecoTauDiscriminationByNProngs(), PFTauPrimaryVertexProducer::PFTauPrimaryVertexProducer(), PhotonConversionTrajectorySeedProducerFromQuadruplets::PhotonConversionTrajectorySeedProducerFromQuadruplets(), PhotonConversionTrajectorySeedProducerFromSingleLeg::PhotonConversionTrajectorySeedProducerFromSingleLeg(), PhotonProducer::PhotonProducer(), PixelTracksProducer::PixelTracksProducer(), PlottingDevice::PlottingDevice(), RecoTauPiZeroProducer::RecoTauPiZeroProducer(), RecoTauProducer::RecoTauProducer(), ReduceHcalRecHitCollectionProducer::ReduceHcalRecHitCollectionProducer(), SeedGeneratorFromRegionHitsEDProducer::SeedGeneratorFromRegionHitsEDProducer(), SeedMultiplicityAnalyzer::SeedMultiplicityAnalyzer(), SelectReplacementCandidates::SelectReplacementCandidates(), SETMuonSeedProducer::SETMuonSeedProducer(), SingleTopTChannelLeptonDQM::SingleTopTChannelLeptonDQM(), SingleTopTChannelLeptonDQM_miniAOD::SingleTopTChannelLeptonDQM_miniAOD(), SiPixelRawToDigi::SiPixelRawToDigi(), SiStripDCSFilter::SiStripDCSFilter(), SiStripMonitorCluster::SiStripMonitorCluster(), SiStripMonitorDigi::SiStripMonitorDigi(), SiStripMonitorTrack::SiStripMonitorTrack(), SmearedJetProducerT< T >::SmearedJetProducerT(), TagProbeFitTreeProducer::TagProbeFitTreeProducer(), Tau3MuSkim::Tau3MuSkim(), TauTagValidation::TauTagValidation(), cms::TCMETProducer::TCMETProducer(), TopDiLeptonHLTOfflineDQM::TopDiLeptonHLTOfflineDQM(), TopDiLeptonOfflineDQM::TopDiLeptonOfflineDQM(), TopSingleLeptonDQM::TopSingleLeptonDQM(), TopSingleLeptonDQM_miniAOD::TopSingleLeptonDQM_miniAOD(), TopSingleLeptonHLTOfflineDQM::TopSingleLeptonHLTOfflineDQM(), TrackingMonitor::TrackingMonitor(), TrajectorySeedProducer::TrajectorySeedProducer(), TSGFromL1Muon::TSGFromL1Muon(), TSGFromL2Muon::TSGFromL2Muon(), TtDilepEvtSolutionMaker::TtDilepEvtSolutionMaker(), TtSemiEvtSolutionMaker::TtSemiEvtSolutionMaker(), Type2CorrectionProducer::Type2CorrectionProducer(), and VirtualJetProducer::VirtualJetProducer().

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

Definition at line 510 of file EDConsumerBase.cc.

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

510  {
511 
512  // Use this to eliminate duplicate entries related
513  // to consumesMany items where only the type was specified
514  // and the there are multiple matches. In these cases the
515  // label, instance, and process will be empty.
516  std::set<edm::TypeID> alreadySeenTypes;
517 
518  std::vector<ConsumesInfo> result;
519  auto itAlways = m_tokenInfo.begin<kAlwaysGets>();
520  auto itKind = m_tokenInfo.begin<kKind>();
521  auto itLabels = m_tokenInfo.begin<kLabels>();
522  for(auto itInfo = m_tokenInfo.begin<kLookupInfo>(),itEnd = m_tokenInfo.end<kLookupInfo>();
523  itInfo != itEnd; ++itInfo,++itKind,++itLabels, ++itAlways) {
524 
525  const unsigned int labelStart = itLabels->m_startOfModuleLabel;
526  const char* consumedModuleLabel = &(m_tokenLabels[labelStart]);
527  const char* consumedInstance = consumedModuleLabel+itLabels->m_deltaToProductInstance;
528  const char* consumedProcessName = consumedModuleLabel+itLabels->m_deltaToProcessName;
529 
530  // consumesMany case
531  if(*consumedModuleLabel == '\0') {
532  if(!alreadySeenTypes.insert(itInfo->m_type).second) {
533  continue;
534  }
535  }
536 
537  // Just copy the information into the ConsumesInfo data structure
538  result.emplace_back(itInfo->m_type,
539  consumedModuleLabel,
540  consumedInstance,
541  consumedProcessName,
542  itInfo->m_branchType,
543  *itKind,
544  *itAlways,
545  itInfo->m_index.skipCurrentProcess());
546  }
547  return result;
548 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
tuple result
Definition: mps_fire.py:95
std::vector< char > m_tokenLabels
template<typename ProductType , BranchType B = InEvent>
void edm::EDConsumerBase::consumesMany ( )
inlineprotected

Definition at line 127 of file EDConsumerBase.h.

127  {
128  TypeToGet tid=TypeToGet::make<ProductType>();
129  consumesMany<B>(tid);
130  }
void edm::EDConsumerBase::consumesMany ( const TypeToGet id)
inlineprotected

Definition at line 132 of file EDConsumerBase.h.

132  {
133  consumesMany<InEvent>(id);
134  }
template<BranchType B>
void edm::EDConsumerBase::consumesMany ( const TypeToGet id)
inlineprotected

Definition at line 137 of file EDConsumerBase.h.

References recordConsumes().

137  {
138  recordConsumes(B,id,edm::InputTag{},true);
139  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
ProductHolderIndexAndSkipBit EDConsumerBase::indexFrom ( EDGetToken  iToken,
BranchType  iBranch,
TypeID const &  iType 
) const

Definition at line 198 of file EDConsumerBase.cc.

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

Referenced by edm::PrincipalGetAdapter::getByToken_().

199 {
200  if(unlikely(iToken.index()>=m_tokenInfo.size())) {
201  throwBadToken(iType,iToken);
202  }
203  const auto& info = m_tokenInfo.get<kLookupInfo>(iToken.index());
204  if (likely(iBranch == info.m_branchType)) {
205  if (likely(iType == info.m_type)) {
206  return info.m_index;
207  } else {
208  throwTypeMismatch(iType, iToken);
209  }
210  } else {
211  throwBranchMismatch(iBranch,iToken);
212  }
214 }
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< ProductHolderIndexAndSkipBit > &  oIndices 
) const

Definition at line 253 of file EDConsumerBase.cc.

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

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

Definition at line 217 of file EDConsumerBase.cc.

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

Referenced by updateLookup().

218 {
219  //how many are we adding?
220  unsigned int count=0;
221  {
222  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
223  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
224  itEnd = m_tokenInfo.end<kLookupInfo>();
225  it != itEnd; ++it,++itAlwaysGet) {
226  if(iBranch==it->m_branchType) {
227  if (it->m_index.productHolderIndex() != ProductHolderIndexInvalid) {
228  if(*itAlwaysGet) {
229  ++count;
230  }
231  }
232  }
233  }
234  }
235  oIndices.reserve(oIndices.size()+count);
236  {
237  auto itAlwaysGet = m_tokenInfo.begin<kAlwaysGets>();
238  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
239  itEnd = m_tokenInfo.end<kLookupInfo>();
240  it != itEnd; ++it,++itAlwaysGet) {
241  if(iBranch==it->m_branchType) {
242  if (it->m_index.productHolderIndex() != ProductHolderIndexInvalid) {
243  if(*itAlwaysGet) {
244  oIndices.push_back(it->m_index);
245  }
246  }
247  }
248  }
249  }
250 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector<ProductHolderIndexAndSkipBit> const& edm::EDConsumerBase::itemsToGetFromEvent ( ) const
inline

Definition at line 62 of file EDConsumerBase.h.

References itemsToGetFromEvent_.

62 { return itemsToGetFromEvent_; }
std::vector< ProductHolderIndexAndSkipBit > itemsToGetFromEvent_
void EDConsumerBase::labelsForToken ( EDGetToken  iToken,
Labels oLabels 
) const

Definition at line 289 of file EDConsumerBase.cc.

References edm::EDGetToken::index(), cmsHarvester::index, kLabels, HLT_FULL_cff::labels, m_tokenInfo, m_tokenLabels, edm::ProductLabels::module, edm::ProductLabels::process, edm::ProductLabels::productInstance, and dqm_diff::start.

Referenced by EgammaBasicClusters::analyze(), AlCaElectronsTest::analyze(), EnergyScaleAnalyzer::analyze(), HLTScalers::analyze(), EgammaObjects::analyzeElectrons(), EgammaObjects::analyzePhotons(), ElectronTagProbeAnalyzer::bookHistograms(), TkAlCaRecoMonitor::bookHistograms(), ElectronAnalyzer::bookHistograms(), HLTVertexPerformanceAnalyzer::dqmBeginRun(), HLTBTagPerformanceAnalyzer::dqmBeginRun(), TriggerBxMonitor::dqmBeginRun(), TriggerRatesMonitor::dqmBeginRun(), edm::PrincipalGetAdapter::labelsForToken(), edm::PrincipalGetAdapter::makeFailToGetException(), MuonSimHitsValidAnalyzer::MuonSimHitsValidAnalyzer(), ReducedESRecHitCollectionProducer::produce(), GenTrackMatcher::produce(), ReducedRecHitCollectionProducer::produce(), SeedClusterRemover::produce(), EcalTrigPrimProducer::produce(), HITrackClusterRemover::produce(), cms::CosmicTrackFinder::produce(), and edm::PrincipalGetAdapter::throwAmbiguousException().

290 {
291  unsigned int index = iToken.index();
292  auto labels = m_tokenInfo.get<kLabels>(index);
293  unsigned int start = labels.m_startOfModuleLabel;
294  oLabels.module = &(m_tokenLabels[start]);
295  oLabels.productInstance = oLabels.module+labels.m_deltaToProductInstance;
296  oLabels.process = oLabels.module+labels.m_deltaToProcessName;
297 }
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
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 112 of file EDConsumerBase.h.

References checkIfEmpty(), and recordConsumes().

Referenced by pat::PATJetUpdater::PATJetUpdater(), and cms::PFMETProducer::PFMETProducer().

112  {
113  TypeToGet tid=TypeToGet::make<ProductType>();
114  return EDGetTokenT<ProductType>{recordConsumes(B, tid, checkIfEmpty(tag), false)};
115  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
EDGetToken edm::EDConsumerBase::mayConsume ( const TypeToGet id,
edm::InputTag const &  tag 
)
inlineprotected

Definition at line 117 of file EDConsumerBase.h.

References GlobalPosition_Frontier_DevDB_cff::tag.

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

Definition at line 122 of file EDConsumerBase.h.

References checkIfEmpty(), and recordConsumes().

122  {
123  return EDGetToken{recordConsumes(B,id,checkIfEmpty(tag),false)};
124  }
unsigned int recordConsumes(BranchType iBranch, TypeToGet const &iType, edm::InputTag const &iTag, bool iAlwaysGets)
edm::InputTag const & checkIfEmpty(edm::InputTag const &tag)
void EDConsumerBase::modulesDependentUpon ( std::string const &  iProcessName,
std::string const &  iModuleLabel,
bool  iPrint,
std::vector< char const * > &  oModuleLabels 
) const

Definition at line 383 of file EDConsumerBase.cc.

References cmsHarvester::index, info(), kLabels, kLookupInfo, HLT_FULL_cff::labels, m_tokenInfo, m_tokenLabels, or, FSQHLTOfflineSource_cfi::processName, and dqm_diff::start.

386  {
387  std::set<char const*, CharStarComp> uniqueModules;
388  for(unsigned int index = 0, iEnd = m_tokenInfo.size(); index < iEnd; ++index) {
389  auto const& info = m_tokenInfo.get<kLookupInfo>(index);
390  if(not info.m_index.skipCurrentProcess()) {
391  auto const& labels = m_tokenInfo.get<kLabels>(index);
392  unsigned int const start = labels.m_startOfModuleLabel;
393  char const* processName = &(m_tokenLabels[start+labels.m_deltaToProcessName]);
394  if(iPrint) {
395  LogAbsolute("ModuleDependency") << "ModuleDependency '" << iModuleLabel <<
396  "' may consume product of type '" << info.m_type.className() <<
397  "' with input tag '" << &(m_tokenLabels[start]) <<
398  ':' << &(m_tokenLabels[start+labels.m_deltaToProductInstance]) <<
399  ':' << processName << "'";;
400  }
401  if((not processName) or processName[0]==0 or iProcessName == processName) {
402  uniqueModules.insert(&(m_tokenLabels[start]));
403  }
404  }
405  }
406 
407  oModuleLabels = std::vector<const char*>(uniqueModules.begin(),uniqueModules.end());
408 }
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
static const TGPicture * info(bool iBackgroundIsBlack)
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
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector< char > m_tokenLabels
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 454 of file EDConsumerBase.cc.

References edm::ProductHolderIndexHelper::index(), edm::InEvent, j, kKind, kLabels, kLookupInfo, m_tokenInfo, m_tokenLabels, matches, edmConvertToStreamModule::modules, edm::preg, edm::ProductHolderIndexInvalid, edm::ProductRegistry::productLookup(), and edm::ProductHolderIndexHelper::relatedIndexes().

457  {
458 
459  ProductHolderIndexHelper const& iHelper = *preg.productLookup(InEvent);
460 
461  std::set<std::string> alreadyFound;
462 
463  auto itKind = m_tokenInfo.begin<kKind>();
464  auto itLabels = m_tokenInfo.begin<kLabels>();
465  for(auto itInfo = m_tokenInfo.begin<kLookupInfo>(),itEnd = m_tokenInfo.end<kLookupInfo>();
466  itInfo != itEnd; ++itInfo,++itKind,++itLabels) {
467 
468  if(itInfo->m_branchType == InEvent) {
469 
470  const unsigned int labelStart = itLabels->m_startOfModuleLabel;
471  const char* consumedModuleLabel = &(m_tokenLabels[labelStart]);
472  const char* consumedProcessName = consumedModuleLabel+itLabels->m_deltaToProcessName;
473 
474  if(*consumedModuleLabel != '\0') { // not a consumesMany
475  if(*consumedProcessName != '\0') { // process name is specified in consumes call
476  if (processName == consumedProcessName &&
477  iHelper.index(*itKind,
478  itInfo->m_type,
479  consumedModuleLabel,
480  consumedModuleLabel+itLabels->m_deltaToProductInstance,
481  consumedModuleLabel+itLabels->m_deltaToProcessName) != ProductHolderIndexInvalid) {
482  insertFoundModuleLabel(consumedModuleLabel, modules, alreadyFound, labelsToDesc, preg);
483  }
484  } else { // process name was empty
485  auto matches = iHelper.relatedIndexes(*itKind,
486  itInfo->m_type,
487  consumedModuleLabel,
488  consumedModuleLabel+itLabels->m_deltaToProductInstance);
489  for(unsigned int j = 0; j < matches.numberOfMatches(); ++j) {
490  if(processName == matches.processName(j)) {
491  insertFoundModuleLabel(consumedModuleLabel, modules, alreadyFound, labelsToDesc, preg);
492  }
493  }
494  }
495  // consumesMany case
496  } else if(itInfo->m_index.productHolderIndex() == ProductHolderIndexInvalid) {
497  auto matches = iHelper.relatedIndexes(*itKind,
498  itInfo->m_type);
499  for(unsigned int j = 0; j < matches.numberOfMatches(); ++j) {
500  if(processName == matches.processName(j)) {
501  insertFoundModuleLabel(matches.moduleLabel(j), modules, alreadyFound, labelsToDesc, preg);
502  }
503  }
504  }
505  }
506  }
507 }
Matches relatedIndexes(KindOfType kindOfType, TypeID const &typeID, char const *moduleLabel, char const *instance) const
ProductHolderIndex index(KindOfType kindOfType, TypeID const &typeID, char const *moduleLabel, char const *instance, char const *process=0) const
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
int j
Definition: DBlmapReader.cc:9
std::vector< char > m_tokenLabels
preg
Definition: Schedule.cc:374
const EDConsumerBase& edm::EDConsumerBase::operator= ( const EDConsumerBase )
privatedelete
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 frozen_, cmsHarvester::index, edm::InputTag::instance(), edm::TypeToGet::kind(), edm::InputTag::label(), visualization-live-secondInstance_cfg::m, m_tokenInfo, m_tokenLabels, edm::InputTag::process(), edm::ProductHolderIndexInvalid, 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(), ProductHolderIndexInvalid, 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  if (!skipCurrentProcess) {
126  const std::string& m =iTag.process();
127  m_tokenLabels.insert(m_tokenLabels.end(),m.begin(),m.end());
128  m_tokenLabels.push_back('\0');
129  } else {
130  m_tokenLabels.push_back('\0');
131  }
132  }
133  return index;
134 }
void throwConsumesCallAfterFrozen(TypeToGet const &, InputTag const &) const
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
std::vector< char > m_tokenLabels
bool EDConsumerBase::registeredToConsume ( ProductHolderIndex  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 300 of file EDConsumerBase.cc.

References kLookupInfo, m_tokenInfo, and edm::PRODUCT_TYPE.

Referenced by edm::Principal::findProductByLabel().

301 {
302  for(auto it = m_tokenInfo.begin<kLookupInfo>(),
303  itEnd = m_tokenInfo.end<kLookupInfo>();
304  it != itEnd; ++it) {
305  if(it->m_index.productHolderIndex() == iIndex and
306  it->m_index.skipCurrentProcess() == skipCurrentProcess and
307  it->m_branchType == iBranch) {
308  return true;
309  }
310  }
311  //TEMPORARY: Remember so we do not have to do this again
312  //non thread-safe
313  EDConsumerBase* nonConstThis = const_cast<EDConsumerBase*>(this);
314  nonConstThis->m_tokenInfo.emplace_back(TokenLookupInfo{TypeID{}, iIndex, skipCurrentProcess, iBranch},
315  true,
316  LabelPlacement{0,0,0},
317  PRODUCT_TYPE);
318 
319  return false;
320 }
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 323 of file EDConsumerBase.cc.

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

Referenced by edm::Principal::getManyByType().

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

Definition at line 358 of file EDConsumerBase.cc.

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

Referenced by indexFrom().

359 {
360  if(iToken.isUninitialized()) {
361  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.";
362  }
363  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.";
364 }
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 353 of file EDConsumerBase.cc.

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

Referenced by indexFrom().

353  {
354  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.";
355 }
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 367 of file EDConsumerBase.cc.

References Exception, and edm::TypeToGet::type().

Referenced by recordConsumes().

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

Definition at line 348 of file EDConsumerBase.cc.

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

Referenced by indexFrom().

349 {
350  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.";
351 }
edm::SoATuple< TokenLookupInfo, bool, LabelPlacement, edm::KindOfType > m_tokenInfo
unsigned int index() const
Definition: EDGetToken.h:46
void EDConsumerBase::updateLookup ( BranchType  iBranchType,
ProductHolderIndexHelper const &  iHelper 
)

Definition at line 137 of file EDConsumerBase.cc.

References frozen_, i, edm::ProductHolderIndexHelper::index(), cmsHarvester::index, edm::InEvent, info(), itemsToGet(), itemsToGetFromEvent_, j, kAlwaysGets, class-composition::kind, kKind, kLabels, kLookupInfo, HLT_FULL_cff::labels, m_tokenInfo, m_tokenLabels, matches, edm::ProductHolderIndexInvalid, and edm::ProductHolderIndexHelper::relatedIndexes().

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

Friends And Related Function Documentation

friend class ConsumesCollector
friend

Definition at line 91 of file EDConsumerBase.h.

template<typename T >
friend class WillGetIfMatch
friend

Definition at line 92 of file EDConsumerBase.h.

Member Data Documentation

bool edm::EDConsumerBase::frozen_
private

Definition at line 189 of file EDConsumerBase.h.

Referenced by recordConsumes(), and updateLookup().

std::vector<ProductHolderIndexAndSkipBit> edm::EDConsumerBase::itemsToGetFromEvent_
private

Definition at line 187 of file EDConsumerBase.h.

Referenced by itemsToGetFromEvent(), and updateLookup().

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