CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions

edm::ProductHolderBase Class Reference

#include <ProductHolder.h>

Inheritance diagram for edm::ProductHolderBase:
edm::AliasProductHolder edm::InputProductHolder edm::NoProcessProductHolder edm::ProducedProductHolder edm::ScheduledProductHolder edm::SourceProductHolder edm::UnscheduledProductHolder

List of all members.

Public Types

enum  ResolveStatus { ProductFound, ProductNotFound, Ambiguous }

Public Member Functions

ConstBranchDescription const & branchDescription () const
void checkType (WrapperOwningHolder const &prod) const
void deleteProduct ()
void mergeProduct (WrapperOwningHolder const &edp, ProductProvenance &productProvenance)
void mergeProduct (WrapperOwningHolder const &edp) const
void mergeTheProduct (WrapperOwningHolder const &edp) const
std::string const & moduleLabel () const
bool onDemand () const
ProductHolderBaseoperator= (ProductHolderBase const &)
std::string const & processName () const
boost::shared_ptr< void const > product () const
ProductData const & productData () const
ProductDataproductData ()
 ProductHolderBase ()
 ProductHolderBase (ProductHolderBase const &)
ProductID const & productID () const
std::string const & productInstanceName () const
ProductProvenanceproductProvenancePtr () const
TypeID productType () const
bool productUnavailable () const
bool productWasDeleted () const
Provenanceprovenance () const
bool provenanceAvailable () const
bool putOrMergeProduct () const
void putProduct (WrapperOwningHolder const &edp, ProductProvenance const &productProvenance)
void putProduct (WrapperOwningHolder const &edp) const
void reallyCheckType (WrapperOwningHolder const &prod) const
void resetBranchDescription (boost::shared_ptr< ConstBranchDescription > bd)
void resetProductData ()
void resetStatus ()
std::string const & resolvedModuleLabel () const
ProductData const * resolveProduct (ResolveStatus &resolveStatus, bool skipCurrentProcess) const
void setPrincipal (Principal *principal)
void setProcessHistoryID (ProcessHistoryID const &phid)
void setProductDeleted ()
void setProductProvenance (ProductProvenance const &prov) const
void setProvenance (boost::shared_ptr< BranchMapper > mapper, ProcessHistoryID const &phid, ProductID const &pid)
bool singleProduct () const
void swap (ProductHolderBase &rhs)
void throwProductDeletedException () const
WrapperHolder wrapper () const
void write (std::ostream &os) const
virtual ~ProductHolderBase ()

Private Member Functions

virtual ConstBranchDescription
const & 
branchDescription_ () const =0
virtual void checkType_ (WrapperOwningHolder const &prod) const =0
virtual ProductDatagetProductData ()=0
virtual ProductData const & getProductData () const =0
virtual void mergeProduct_ (WrapperOwningHolder const &edp, ProductProvenance &productProvenance)=0
virtual void mergeProduct_ (WrapperOwningHolder const &edp) const =0
virtual bool onDemand_ () const =0
virtual ProductProvenanceproductProvenancePtr_ () const =0
virtual bool productUnavailable_ () const =0
virtual bool productWasDeleted_ () const =0
virtual bool putOrMergeProduct_ () const =0
virtual void putProduct_ (WrapperOwningHolder const &edp, ProductProvenance const &productProvenance)=0
virtual void putProduct_ (WrapperOwningHolder const &edp) const =0
virtual void resetBranchDescription_ (boost::shared_ptr< ConstBranchDescription > bd)=0
virtual void resetProductData_ ()=0
virtual void resetStatus_ ()=0
virtual std::string const & resolvedModuleLabel_ () const =0
virtual ProductData const * resolveProduct_ (ResolveStatus &resolveStatus, bool skipCurrentProcess) const =0
virtual void setPrincipal_ (Principal *principal)=0
virtual void setProcessHistoryID_ (ProcessHistoryID const &phid)=0
virtual void setProductDeleted_ ()=0
virtual void setProvenance_ (boost::shared_ptr< BranchMapper > mapper, ProcessHistoryID const &phid, ProductID const &pid)=0
virtual bool singleProduct_ () const =0
virtual void swap_ (ProductHolderBase &rhs)=0

Detailed Description

Definition at line 30 of file ProductHolder.h.


Member Enumeration Documentation

Enumerator:
ProductFound 
ProductNotFound 
Ambiguous 

Definition at line 33 of file ProductHolder.h.


Constructor & Destructor Documentation

edm::ProductHolderBase::ProductHolderBase ( )

Definition at line 27 of file ProductHolder.cc.

{}
edm::ProductHolderBase::~ProductHolderBase ( ) [virtual]

Definition at line 29 of file ProductHolder.cc.

{}
edm::ProductHolderBase::ProductHolderBase ( ProductHolderBase const &  )

Member Function Documentation

ConstBranchDescription const& edm::ProductHolderBase::branchDescription ( ) const [inline]
virtual ConstBranchDescription const& edm::ProductHolderBase::branchDescription_ ( ) const [private, pure virtual]
void edm::ProductHolderBase::checkType ( WrapperOwningHolder const &  prod) const [inline]
virtual void edm::ProductHolderBase::checkType_ ( WrapperOwningHolder const &  prod) const [private, pure virtual]
void edm::ProductHolderBase::deleteProduct ( ) [inline]
virtual ProductData const& edm::ProductHolderBase::getProductData ( ) const [private, pure virtual]
virtual ProductData& edm::ProductHolderBase::getProductData ( ) [private, pure virtual]
void edm::ProductHolderBase::mergeProduct ( WrapperOwningHolder const &  edp) const [inline]

Definition at line 157 of file ProductHolder.h.

References mergeProduct_().

                                                            {
      mergeProduct_(edp);
    }
void edm::ProductHolderBase::mergeProduct ( WrapperOwningHolder const &  edp,
ProductProvenance productProvenance 
) [inline]

Definition at line 153 of file ProductHolder.h.

References mergeProduct_().

Referenced by edm::AliasProductHolder::mergeProduct_(), and edm::Principal::putOrMerge().

                                                                                            {
      mergeProduct_(edp, productProvenance);
    }
virtual void edm::ProductHolderBase::mergeProduct_ ( WrapperOwningHolder const &  edp,
ProductProvenance productProvenance 
) [private, pure virtual]
virtual void edm::ProductHolderBase::mergeProduct_ ( WrapperOwningHolder const &  edp) const [private, pure virtual]
void edm::ProductHolderBase::mergeTheProduct ( WrapperOwningHolder const &  edp) const

Definition at line 201 of file ProductHolder.cc.

References branchDescription(), edm::ConstBranchDescription::className(), edm::WrapperHolder::hasIsProductEqual(), edm::WrapperHolder::isProductEqual(), edm::WrapperHolder::mergeProduct(), moduleLabel(), processName(), productInstanceName(), wrapper(), and edm::WrapperHolder::wrapper().

Referenced by edm::InputProductHolder::mergeProduct_(), and edm::ProducedProductHolder::mergeProduct_().

                                                                         {
    if(wrapper().isMergeable()) {
      wrapper().mergeProduct(edp.wrapper());
    } else if(wrapper().hasIsProductEqual()) {
      if(!wrapper().isProductEqual(edp.wrapper())) {
        LogError("RunLumiMerging")
              << "ProductHolderBase::mergeTheProduct\n"
              << "Two run/lumi products for the same run/lumi which should be equal are not\n"
              << "Using the first, ignoring the second\n"
              << "className = " << branchDescription().className() << "\n"
              << "moduleLabel = " << moduleLabel() << "\n"
              << "instance = " << productInstanceName() << "\n"
              << "process = " << processName() << "\n";
      }
    } else {
      LogWarning("RunLumiMerging")
          << "ProductHolderBase::mergeTheProduct\n"
          << "Run/lumi product has neither a mergeProduct nor isProductEqual function\n"
          << "Using the first, ignoring the second in merge\n"
          << "className = " << branchDescription().className() << "\n"
          << "moduleLabel = " << moduleLabel() << "\n"
          << "instance = " << productInstanceName() << "\n"
          << "process = " << processName() << "\n";
    }
  }
std::string const& edm::ProductHolderBase::moduleLabel ( ) const [inline]
bool edm::ProductHolderBase::onDemand ( ) const [inline]
virtual bool edm::ProductHolderBase::onDemand_ ( ) const [private, pure virtual]
ProductHolderBase& edm::ProductHolderBase::operator= ( ProductHolderBase const &  )
std::string const& edm::ProductHolderBase::processName ( ) const [inline]

Definition at line 115 of file ProductHolder.h.

References branchDescription(), and edm::ConstBranchDescription::processName().

Referenced by mergeTheProduct(), and throwProductDeletedException().

{return branchDescription().processName();}
boost::shared_ptr<void const> edm::ProductHolderBase::product ( ) const [inline]
ProductData const& edm::ProductHolderBase::productData ( ) const [inline]
ProductData& edm::ProductHolderBase::productData ( ) [inline]

Definition at line 45 of file ProductHolder.h.

References getProductData().

                               {
      return getProductData();
    }
ProductID const& edm::ProductHolderBase::productID ( ) const [inline]

Definition at line 135 of file ProductHolder.h.

References getProductData(), edm::Provenance::productID(), and edm::ProductData::prov_.

Referenced by write().

{return getProductData().prov_.productID();}
std::string const& edm::ProductHolderBase::productInstanceName ( ) const [inline]

Definition at line 112 of file ProductHolder.h.

References branchDescription(), and edm::ConstBranchDescription::productInstanceName().

Referenced by mergeTheProduct(), and throwProductDeletedException().

{return branchDescription().productInstanceName();}
ProductProvenance* edm::ProductHolderBase::productProvenancePtr ( ) const [inline]

Definition at line 87 of file ProductHolder.h.

References productProvenancePtr_().

{ return productProvenancePtr_(); }
virtual ProductProvenance* edm::ProductHolderBase::productProvenancePtr_ ( ) const [private, pure virtual]
TypeID edm::ProductHolderBase::productType ( ) const

Definition at line 353 of file ProductHolder.cc.

References wrapper().

                                       {
    return TypeID(wrapper().interface()->wrappedTypeInfo());
  }
bool edm::ProductHolderBase::productUnavailable ( ) const [inline]
virtual bool edm::ProductHolderBase::productUnavailable_ ( ) const [private, pure virtual]
bool edm::ProductHolderBase::productWasDeleted ( ) const [inline]
virtual bool edm::ProductHolderBase::productWasDeleted_ ( ) const [private, pure virtual]
Provenance * edm::ProductHolderBase::provenance ( ) const
bool edm::ProductHolderBase::provenanceAvailable ( ) const

Definition at line 341 of file ProductHolder.cc.

References branchDescription(), edm::WrapperHolder::isPresent(), edm::es::produced, product(), and wrapper().

                                               {
    // If this product is from a the current process,
    // the provenance is available if and only if a product has been put.
    if(branchDescription().produced()) {
      return product() && wrapper().isPresent();
    }
    // If this product is from a prior process, the provenance is available,
    // although the per event part may have been dropped.
    return true;
  }
bool edm::ProductHolderBase::putOrMergeProduct ( ) const [inline]
virtual bool edm::ProductHolderBase::putOrMergeProduct_ ( ) const [private, pure virtual]
void edm::ProductHolderBase::putProduct ( WrapperOwningHolder const &  edp) const [inline]

Definition at line 143 of file ProductHolder.h.

References putProduct_().

                                                          {
      putProduct_(edp);
    }
void edm::ProductHolderBase::putProduct ( WrapperOwningHolder const &  edp,
ProductProvenance const &  productProvenance 
) [inline]
virtual void edm::ProductHolderBase::putProduct_ ( WrapperOwningHolder const &  edp,
ProductProvenance const &  productProvenance 
) [private, pure virtual]
virtual void edm::ProductHolderBase::putProduct_ ( WrapperOwningHolder const &  edp) const [private, pure virtual]
void edm::ProductHolderBase::reallyCheckType ( WrapperOwningHolder const &  prod) const

Definition at line 358 of file ProductHolder.cc.

References branchDescription(), edm::ConstBranchDescription::branchName(), edm::ConstBranchDescription::className(), edm::WrapperHolder::dynamicTypeInfo(), edm::errors::EventCorruption, Exception, and edm::ConstBranchDescription::unwrappedTypeID().

Referenced by edm::ProducedProductHolder::checkType_().

                                                                          {
    // Check if the types match.
    TypeID typeID(prod.dynamicTypeInfo());
    if(typeID != branchDescription().unwrappedTypeID()) {
      // Types do not match.
      throw Exception(errors::EventCorruption)
          << "Product on branch " << branchDescription().branchName() << " is of wrong type.\n"
          << "It is supposed to be of type " << branchDescription().className() << ".\n"
          << "It is actually of type " << typeID.className() << ".\n";
    }
  }
void edm::ProductHolderBase::resetBranchDescription ( boost::shared_ptr< ConstBranchDescription bd) [inline]
virtual void edm::ProductHolderBase::resetBranchDescription_ ( boost::shared_ptr< ConstBranchDescription bd) [private, pure virtual]
void edm::ProductHolderBase::resetProductData ( ) [inline]

Definition at line 61 of file ProductHolder.h.

References resetProductData_().

virtual void edm::ProductHolderBase::resetProductData_ ( ) [private, pure virtual]
void edm::ProductHolderBase::resetStatus ( ) [inline]
virtual void edm::ProductHolderBase::resetStatus_ ( ) [private, pure virtual]
std::string const& edm::ProductHolderBase::resolvedModuleLabel ( ) const [inline]

Definition at line 109 of file ProductHolder.h.

References resolvedModuleLabel_().

Referenced by edm::EventPrincipal::resolveProduct_().

virtual std::string const& edm::ProductHolderBase::resolvedModuleLabel_ ( ) const [private, pure virtual]
ProductData const* edm::ProductHolderBase::resolveProduct ( ResolveStatus resolveStatus,
bool  skipCurrentProcess 
) const [inline]

Definition at line 49 of file ProductHolder.h.

References resolveProduct_().

Referenced by edm::AliasProductHolder::resolveProduct_(), and edm::NoProcessProductHolder::resolveProduct_().

                                                                                                   {
      return resolveProduct_(resolveStatus, skipCurrentProcess);
    }
virtual ProductData const* edm::ProductHolderBase::resolveProduct_ ( ResolveStatus resolveStatus,
bool  skipCurrentProcess 
) const [private, pure virtual]
void edm::ProductHolderBase::setPrincipal ( Principal principal) [inline]

Definition at line 98 of file ProductHolder.h.

References setPrincipal_().

virtual void edm::ProductHolderBase::setPrincipal_ ( Principal principal) [private, pure virtual]
void edm::ProductHolderBase::setProcessHistoryID ( ProcessHistoryID const &  phid) [inline]

Definition at line 124 of file ProductHolder.h.

References setProcessHistoryID_().

virtual void edm::ProductHolderBase::setProcessHistoryID_ ( ProcessHistoryID const &  phid) [private, pure virtual]
void edm::ProductHolderBase::setProductDeleted ( ) [inline]

Definition at line 57 of file ProductHolder.h.

References setProductDeleted_().

Referenced by edm::AliasProductHolder::setProductDeleted_().

virtual void edm::ProductHolderBase::setProductDeleted_ ( ) [private, pure virtual]
void edm::ProductHolderBase::setProductProvenance ( ProductProvenance const &  prov) const
void edm::ProductHolderBase::setProvenance ( boost::shared_ptr< BranchMapper mapper,
ProcessHistoryID const &  phid,
ProductID const &  pid 
) [inline]

Definition at line 121 of file ProductHolder.h.

References setProvenance_().

{ setProvenance_(mapper, phid, pid); }
virtual void edm::ProductHolderBase::setProvenance_ ( boost::shared_ptr< BranchMapper mapper,
ProcessHistoryID const &  phid,
ProductID const &  pid 
) [private, pure virtual]
bool edm::ProductHolderBase::singleProduct ( ) const [inline]
virtual bool edm::ProductHolderBase::singleProduct_ ( ) const [private, pure virtual]
void edm::ProductHolderBase::swap ( ProductHolderBase rhs) [inline]
virtual void edm::ProductHolderBase::swap_ ( ProductHolderBase rhs) [private, pure virtual]
void edm::ProductHolderBase::throwProductDeletedException ( ) const

Definition at line 14 of file ProductHolder.cc.

References branchDescription(), exception, moduleLabel(), processName(), productInstanceName(), and edm::ConstBranchDescription::unwrappedTypeID().

Referenced by edm::InputProductHolder::resolveProduct_(), edm::SourceProductHolder::resolveProduct_(), edm::UnscheduledProductHolder::resolveProduct_(), and edm::ScheduledProductHolder::resolveProduct_().

                                                             {
    ProductDeletedException exception;
    exception << "ProductHolderBase::resolveProduct_: The product matching all criteria was already deleted\n"
      << "Looking for type: " << branchDescription().unwrappedTypeID() << "\n"
      << "Looking for module label: " << moduleLabel() << "\n"
      << "Looking for productInstanceName: " << productInstanceName() << "\n"
      << (processName().empty() ? "" : "Looking for process: ") << processName() << "\n"
      << "This means there is a configuration error.\n"
      << "The module which is asking for this data must be configured to state that it will read this data.";
    throw exception;
    
  }
WrapperHolder edm::ProductHolderBase::wrapper ( ) const [inline]
void edm::ProductHolderBase::write ( std::ostream &  os) const

Definition at line 376 of file ProductHolder.cc.

References productID(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by edm::operator<<().

                                               {
    // This is grossly inadequate. It is also not critical for the
    // first pass.
    os << std::string("ProductHolder for product with ID: ")
       << productID();
  }