CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::PrincipalGetAdapter Class Reference

#include <PrincipalGetAdapter.h>

Public Types

typedef std::vector< BasicHandleBasicHandleVec
 

Public Member Functions

template<typename PROD >
bool checkIfComplete () const
 
BranchDescription const & getBranchDescription (TypeID const &type, std::string const &productInstanceName) const
 
BasicHandle getByLabel_ (TypeID const &tid, InputTag const &tag, ModuleCallingContext const *mcc) const
 
BasicHandle getByLabel_ (TypeID const &tid, std::string const &label, std::string const &instance, std::string const &process, ModuleCallingContext const *mcc) const
 
BasicHandle getByToken_ (TypeID const &id, KindOfType kindOfType, EDGetToken token, ModuleCallingContext const *mcc) const
 
template<typename PROD >
void getManyByType (std::vector< Handle< PROD > > &results, ModuleCallingContext const *mcc) const
 
void getManyByType_ (TypeID const &tid, BasicHandleVec &results, ModuleCallingContext const *mcc) const
 
BasicHandle getMatchingSequenceByLabel_ (TypeID const &typeID, InputTag const &tag, ModuleCallingContext const *mcc) const
 
BasicHandle getMatchingSequenceByLabel_ (TypeID const &typeID, std::string const &label, std::string const &instance, std::string const &process, ModuleCallingContext const *mcc) const
 
bool isComplete () const
 
void labelsForToken (EDGetToken const &iToken, ProductLabels &oLabels) const
 
PrincipalGetAdapteroperator= (PrincipalGetAdapter const &)=delete
 
Principal const & principal () const
 
 PrincipalGetAdapter (Principal const &pcpl, ModuleDescription const &md)
 
 PrincipalGetAdapter (PrincipalGetAdapter const &)=delete
 
ProcessHistory const & processHistory () const
 
EDProductGetter const * prodGetter () const
 
void setConsumer (EDConsumerBase const *iConsumer)
 
void setSharedResourcesAcquirer (SharedResourcesAcquirer *iSra)
 
 ~PrincipalGetAdapter ()
 

Private Member Functions

BranchType const & branchType () const
 
BasicHandle makeFailToGetException (KindOfType, TypeID const &, EDGetToken) const
 
void throwAmbiguousException (TypeID const &productType, EDGetToken token) const
 

Private Attributes

EDConsumerBase const * consumer_
 
ModuleDescription const & md_
 
Principal const & principal_
 
SharedResourcesAcquirerresourcesAcquirer_
 

Detailed Description

Definition at line 129 of file PrincipalGetAdapter.h.

Member Typedef Documentation

Definition at line 168 of file PrincipalGetAdapter.h.

Constructor & Destructor Documentation

PrincipalGetAdapter::PrincipalGetAdapter ( Principal const &  pcpl,
ModuleDescription const &  md 
)

Definition at line 20 of file PrincipalGetAdapter.cc.

21  :
22  //putProducts_(),
23  principal_(pcpl),
24  md_(md),
25  consumer_(nullptr),
26  resourcesAcquirer_(nullptr)
27  {
28  }
SharedResourcesAcquirer * resourcesAcquirer_
EDConsumerBase const * consumer_
ModuleDescription const & md_
PrincipalGetAdapter::~PrincipalGetAdapter ( )

Definition at line 30 of file PrincipalGetAdapter.cc.

30  {
31  }
edm::PrincipalGetAdapter::PrincipalGetAdapter ( PrincipalGetAdapter const &  )
delete

Member Function Documentation

BranchType const & PrincipalGetAdapter::branchType ( ) const
private

Definition at line 143 of file PrincipalGetAdapter.cc.

References edm::Principal::branchType(), and principal_.

Referenced by getByToken_().

143  {
144  return principal_.branchType();
145  }
BranchType const & branchType() const
Definition: Principal.h:179
template<typename PROD >
bool PrincipalGetAdapter::checkIfComplete ( ) const
inline
BranchDescription const & PrincipalGetAdapter::getBranchDescription ( TypeID const &  type,
std::string const &  productInstanceName 
) const

Definition at line 223 of file PrincipalGetAdapter.cc.

References assert(), edm::ProductHolderBase::branchDescription(), Exception, edm::TypeID::friendlyClassName(), edm::Principal::getProductHolderByIndex(), edm::ProductHolderIndexHelper::index(), cmsHarvester::index, edm::errors::InsertFailure, md_, edm::ModuleDescription::moduleLabel(), principal_, edm::ModuleDescription::processName(), edm::PRODUCT_TYPE, edm::ProductHolderIndexInvalid, edm::Principal::productLookup(), and edm::Principal::productRegistry().

Referenced by edm::Event::getRefBeforePut(), edm::LuminosityBlock::put(), edm::Run::put(), and edm::Event::put().

224  {
225  ProductHolderIndexHelper const& productHolderIndexHelper = principal_.productLookup();
226  ProductHolderIndex index = productHolderIndexHelper.index(PRODUCT_TYPE, type, md_.moduleLabel().c_str(),productInstanceName.c_str(), md_.processName().c_str());
227  if(index == ProductHolderIndexInvalid) {
229  << "Illegal attempt to 'put' an unregistered product.\n"
230  << "No product is registered for\n"
231  << " product friendly class name: '" << type.friendlyClassName() << "'\n"
232  << " module label: '" << md_.moduleLabel() << "'\n"
233  << " product instance name: '" << productInstanceName << "'\n"
234  << " process name: '" << md_.processName() << "'\n"
235 
236  << "The ProductRegistry contains:\n"
238  << '\n';
239  }
240  ProductHolderBase const* phb = principal_.getProductHolderByIndex(index);
241  assert(phb != nullptr);
242  return phb->branchDescription();
243  }
type
Definition: HCALResponse.h:21
ProductRegistry const & productRegistry() const
Definition: Principal.h:154
std::string const & processName() const
assert(m_qm.get())
unsigned int ProductHolderIndex
std::string const & moduleLabel() const
ConstProductHolderPtr getProductHolderByIndex(ProductHolderIndex const &oid) const
Definition: Principal.cc:469
ModuleDescription const & md_
ProductHolderIndexHelper const & productLookup() const
Definition: Principal.h:156
BasicHandle PrincipalGetAdapter::getByLabel_ ( TypeID const &  tid,
InputTag const &  tag,
ModuleCallingContext const *  mcc 
) const

Definition at line 148 of file PrincipalGetAdapter.cc.

References consumer_, edm::Principal::getByLabel(), principal_, edm::PRODUCT_TYPE, and resourcesAcquirer_.

Referenced by edm::LuminosityBlock::getByLabel(), edm::Run::getByLabel(), edm::Event::getByLabel(), edm::LuminosityBlock::getByLabelImpl(), edm::Run::getByLabelImpl(), and edm::Event::getByLabelImpl().

150  {
152  }
SharedResourcesAcquirer * resourcesAcquirer_
EDConsumerBase const * consumer_
BasicHandle getByLabel(KindOfType kindOfType, TypeID const &typeID, InputTag const &inputTag, EDConsumerBase const *consumes, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:476
BasicHandle PrincipalGetAdapter::getByLabel_ ( TypeID const &  tid,
std::string const &  label,
std::string const &  instance,
std::string const &  process,
ModuleCallingContext const *  mcc 
) const

Definition at line 155 of file PrincipalGetAdapter.cc.

References consumer_, edm::Principal::getByLabel(), principal_, edm::PRODUCT_TYPE, and resourcesAcquirer_.

159  {
161  }
SharedResourcesAcquirer * resourcesAcquirer_
static PFTauRenderPlugin instance
EDConsumerBase const * consumer_
BasicHandle getByLabel(KindOfType kindOfType, TypeID const &typeID, InputTag const &inputTag, EDConsumerBase const *consumes, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:476
tuple process
Definition: LaserDQM_cfg.py:3
BasicHandle PrincipalGetAdapter::getByToken_ ( TypeID const &  id,
KindOfType  kindOfType,
EDGetToken  token,
ModuleCallingContext const *  mcc 
) const

Definition at line 164 of file PrincipalGetAdapter.cc.

References branchType(), consumer_, edm::Principal::getByToken(), h, cmsHarvester::index, edm::EDConsumerBase::indexFrom(), edm::BasicHandle::isValid(), makeFailToGetException(), principal_, edm::ProductHolderIndexAndSkipBit::productHolderIndex(), edm::ProductHolderIndexAmbiguous, edm::ProductHolderIndexInvalid, resourcesAcquirer_, edm::ProductHolderIndexAndSkipBit::skipCurrentProcess(), throwAmbiguousException(), and unlikely.

Referenced by edm::LuminosityBlock::getByToken(), edm::Run::getByToken(), edm::Event::getByToken(), edm::StreamerOutputModuleBase::getTriggerResults(), and edm::OutputModule::getTriggerResults().

165  {
166  ProductHolderIndexAndSkipBit indexAndBit = consumer_->indexFrom(token,branchType(),id);
167  ProductHolderIndex index = indexAndBit.productHolderIndex();
168  bool skipCurrentProcess = indexAndBit.skipCurrentProcess();
169  if( unlikely(index == ProductHolderIndexInvalid)) {
170  return makeFailToGetException(kindOfType,id,token);
171  } else if( unlikely(index == ProductHolderIndexAmbiguous)) {
172  // This deals with ambiguities where the process is specified
173  throwAmbiguousException(id, token);
174  }
175  bool ambiguous = false;
176  BasicHandle h = principal_.getByToken(kindOfType, id, index, skipCurrentProcess, ambiguous, resourcesAcquirer_, mcc);
177  if (ambiguous) {
178  // This deals with ambiguities where the process is not specified
179  throwAmbiguousException(id, token);
180  } else if(!h.isValid()) {
181  return makeFailToGetException(kindOfType,id,token);
182  }
183  return h;
184  }
SharedResourcesAcquirer * resourcesAcquirer_
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
ProductHolderIndexAndSkipBit indexFrom(EDGetToken, BranchType, TypeID const &) const
EDConsumerBase const * consumer_
unsigned int ProductHolderIndex
#define unlikely(x)
BranchType const & branchType() const
BasicHandle getByToken(KindOfType kindOfType, TypeID const &typeID, ProductHolderIndex index, bool skipCurrentProcess, bool &ambiguous, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:512
BasicHandle makeFailToGetException(KindOfType, TypeID const &, EDGetToken) const
void throwAmbiguousException(TypeID const &productType, EDGetToken token) const
template<typename PROD >
void PrincipalGetAdapter::getManyByType ( std::vector< Handle< PROD > > &  results,
ModuleCallingContext const *  mcc 
) const
inline

Definition at line 325 of file PrincipalGetAdapter.h.

References edm::convert_handle(), end, getManyByType_(), eostools::move(), PROD, edm::es::products(), query::result, and bookConverter::results.

Referenced by edm::LuminosityBlock::getManyByType(), edm::Run::getManyByType(), and edm::Event::getManyByType().

326  {
327  BasicHandleVec bhv;
328  this->getManyByType_(TypeID(typeid(PROD)), bhv, mcc);
329 
330  // Go through the returned handles; for each element,
331  // 1. create a Handle<PROD> and
332  //
333  // This function presents an exception safety difficulty. If an
334  // exception is thrown when converting a handle, the "got
335  // products" record will be wrong.
336  //
337  // Since EDProducers are not allowed to use this function,
338  // the problem does not seem too severe.
339  //
340  // Question: do we even need to keep track of the "got products"
341  // for this function, since it is *not* to be used by EDProducers?
342  std::vector<Handle<PROD> > products;
343 
344  typename BasicHandleVec::iterator it = bhv.begin();
345  typename BasicHandleVec::iterator end = bhv.end();
346 
347  while (it != end) {
349  convert_handle(std::move(*it), result); // throws on conversion error
350  products.push_back(result);
351  ++it;
352  }
353  results.swap(products);
354  }
dictionary results
ESProducts< T, S > products(const T &i1, const S &i2)
Definition: ESProducts.h:189
tuple result
Definition: query.py:137
def move
Definition: eostools.py:510
#define end
Definition: vmac.h:37
void convert_handle(BasicHandle &&bh, Handle< T > &result)
Definition: ConvertHandle.h:19
void getManyByType_(TypeID const &tid, BasicHandleVec &results, ModuleCallingContext const *mcc) const
#define PROD(A, B)
std::vector< BasicHandle > BasicHandleVec
void PrincipalGetAdapter::getManyByType_ ( TypeID const &  tid,
BasicHandleVec results,
ModuleCallingContext const *  mcc 
) const

Definition at line 211 of file PrincipalGetAdapter.cc.

References consumer_, edm::Principal::getManyByType(), principal_, and resourcesAcquirer_.

Referenced by getManyByType().

213  {
215  }
SharedResourcesAcquirer * resourcesAcquirer_
dictionary results
EDConsumerBase const * consumer_
void getManyByType(TypeID const &typeID, BasicHandleVec &results, EDConsumerBase const *consumes, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:545
BasicHandle PrincipalGetAdapter::getMatchingSequenceByLabel_ ( TypeID const &  typeID,
InputTag const &  tag,
ModuleCallingContext const *  mcc 
) const

Definition at line 187 of file PrincipalGetAdapter.cc.

References consumer_, edm::ELEMENT_TYPE, edm::Principal::getByLabel(), principal_, and resourcesAcquirer_.

Referenced by edm::Event::getByLabel().

189  {
191  }
SharedResourcesAcquirer * resourcesAcquirer_
EDConsumerBase const * consumer_
BasicHandle getByLabel(KindOfType kindOfType, TypeID const &typeID, InputTag const &inputTag, EDConsumerBase const *consumes, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:476
BasicHandle PrincipalGetAdapter::getMatchingSequenceByLabel_ ( TypeID const &  typeID,
std::string const &  label,
std::string const &  instance,
std::string const &  process,
ModuleCallingContext const *  mcc 
) const

Definition at line 194 of file PrincipalGetAdapter.cc.

References consumer_, edm::ELEMENT_TYPE, edm::Principal::getByLabel(), h, principal_, and resourcesAcquirer_.

198  {
200  typeID,
201  label,
202  instance,
203  process,
204  consumer_,
206  mcc);
207  return h;
208  }
SharedResourcesAcquirer * resourcesAcquirer_
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
static PFTauRenderPlugin instance
EDConsumerBase const * consumer_
BasicHandle getByLabel(KindOfType kindOfType, TypeID const &typeID, InputTag const &inputTag, EDConsumerBase const *consumes, SharedResourcesAcquirer *sra, ModuleCallingContext const *mcc) const
Definition: Principal.cc:476
tuple process
Definition: LaserDQM_cfg.py:3
bool PrincipalGetAdapter::isComplete ( ) const

Definition at line 251 of file PrincipalGetAdapter.cc.

References edm::Principal::isComplete(), and principal_.

Referenced by checkIfComplete().

251  {
252  return principal_.isComplete();
253  }
bool isComplete() const
Definition: Principal.h:210
void PrincipalGetAdapter::labelsForToken ( EDGetToken const &  iToken,
ProductLabels oLabels 
) const

Definition at line 101 of file PrincipalGetAdapter.cc.

References consumer_, and edm::EDConsumerBase::labelsForToken().

Referenced by edm::LuminosityBlock::labelsForToken(), edm::Run::labelsForToken(), and edm::Event::labelsForToken().

101  {
102  consumer_->labelsForToken(iToken,oLabels);
103  }
EDConsumerBase const * consumer_
void labelsForToken(EDGetToken iToken, Labels &oLabels) const
BasicHandle PrincipalGetAdapter::makeFailToGetException ( KindOfType  kindOfType,
TypeID const &  productType,
EDGetToken  token 
) const
private

Definition at line 106 of file PrincipalGetAdapter.cc.

References consumer_, cppFunctionSkipper::exception, HLT_FULL_cff::labels, edm::EDConsumerBase::labelsForToken(), edm::makeHandleExceptionFactory(), edm::ProductLabels::module, edm::ProductLabels::process, edm::PRODUCT_TYPE, edm::ProductLabels::productInstance, and edm::errors::ProductNotFound.

Referenced by getByToken_().

108  {
110  consumer_->labelsForToken(token,labels);
111  //no need to copy memory since the exception will no occur after the
112  // const char* have been deleted
113  return BasicHandle(makeHandleExceptionFactory([labels,kindOfType,productType]()->std::shared_ptr<cms::Exception> {
114  std::shared_ptr<cms::Exception> exception(std::make_shared<Exception>(errors::ProductNotFound));
115  if (kindOfType == PRODUCT_TYPE) {
116  *exception << "Principal::getByToken: Found zero products matching all criteria\nLooking for type: " << productType << "\n"
117  << "Looking for module label: " << labels.module << "\n" << "Looking for productInstanceName: " << labels.productInstance << "\n"
118  << (0==labels.process[0] ? "" : "Looking for process: ") << labels.process << "\n";
119  } else {
120  *exception << "Principal::getByToken: Found zero products matching all criteria\nLooking for a container with elements of type: " << productType << "\n"
121  << "Looking for module label: " << labels.module << "\n" << "Looking for productInstanceName: " << labels.productInstance << "\n"
122  << (0==labels.process[0] ? "" : "Looking for process: ") << labels.process << "\n";
123  }
124  return exception;
125  }));
126  }
EDConsumerBase const * consumer_
std::shared_ptr< HandleExceptionFactory > makeHandleExceptionFactory(T &&iFunctor)
ProductLabels Labels
void labelsForToken(EDGetToken iToken, Labels &oLabels) const
PrincipalGetAdapter& edm::PrincipalGetAdapter::operator= ( PrincipalGetAdapter const &  )
delete
Principal const& edm::PrincipalGetAdapter::principal ( ) const
inline
ProcessHistory const & PrincipalGetAdapter::processHistory ( ) const

Definition at line 218 of file PrincipalGetAdapter.cc.

References principal_, and edm::Principal::processHistory().

Referenced by edm::LuminosityBlock::processHistory(), edm::Run::processHistory(), and edm::Event::processHistory().

218  {
219  return principal_.processHistory();
220  }
ProcessHistory const & processHistory() const
Definition: Principal.h:144
EDProductGetter const * PrincipalGetAdapter::prodGetter ( ) const

Definition at line 246 of file PrincipalGetAdapter.cc.

References principal_, and edm::Principal::prodGetter().

Referenced by edm::Event::getRefBeforePut().

246  {
247  return principal_.prodGetter();
248  }
EDProductGetter const * prodGetter() const
Definition: Principal.h:96
void edm::PrincipalGetAdapter::setConsumer ( EDConsumerBase const *  iConsumer)
inline
void edm::PrincipalGetAdapter::setSharedResourcesAcquirer ( SharedResourcesAcquirer iSra)
inline
void PrincipalGetAdapter::throwAmbiguousException ( TypeID const &  productType,
EDGetToken  token 
) const
private

Definition at line 129 of file PrincipalGetAdapter.cc.

References consumer_, cppFunctionSkipper::exception, HLT_FULL_cff::labels, edm::EDConsumerBase::labelsForToken(), edm::ProductLabels::module, edm::ProductLabels::process, and edm::ProductLabels::productInstance.

Referenced by getByToken_().

130  {
132  consumer_->labelsForToken(token,labels);
133  cms::Exception exception("AmbiguousProduct");
134  exception << "Principal::getByToken: More than 1 product matches all criteria\nLooking for a container with elements of type: " << productType << "\n"
135  << "Looking for module label: " << labels.module << "\n" << "Looking for productInstanceName: " << labels.productInstance << "\n"
136  << (0==labels.process[0] ? "" : "Looking for process: ") << labels.process << "\n"
137  << "This can only occur with get function calls using a Handle<View> argument.\n"
138  << "Try a get not using a View or change the instance name of one of the products";
139  throw exception;
140  }
EDConsumerBase const * consumer_
ProductLabels Labels
void labelsForToken(EDGetToken iToken, Labels &oLabels) const

Member Data Documentation

EDConsumerBase const* edm::PrincipalGetAdapter::consumer_
private
ModuleDescription const& edm::PrincipalGetAdapter::md_
private

Definition at line 236 of file PrincipalGetAdapter.h.

Referenced by getBranchDescription().

Principal const& edm::PrincipalGetAdapter::principal_
private
SharedResourcesAcquirer* edm::PrincipalGetAdapter::resourcesAcquirer_
private