![]() |
![]() |
00001 #ifndef DataFormats_Provenance_Provenance_h 00002 #define DataFormats_Provenance_Provenance_h 00003 00004 /*---------------------------------------------------------------------- 00005 00006 Provenance: The full description of a product and how it came into 00007 existence. 00008 00009 ----------------------------------------------------------------------*/ 00010 #include <iosfwd> 00011 00012 #include "DataFormats/Provenance/interface/BranchDescription.h" 00013 #include "DataFormats/Provenance/interface/BranchMapper.h" 00014 #include "DataFormats/Provenance/interface/EventEntryInfo.h" 00015 #include "DataFormats/Provenance/interface/EventEntryDescription.h" 00016 #include "DataFormats/Provenance/interface/RunLumiEntryInfo.h" 00017 #include "DataFormats/Provenance/interface/ConstBranchDescription.h" 00018 #include "boost/shared_ptr.hpp" 00019 00020 /* 00021 Provenance 00022 00023 definitions: 00024 Product: The EDProduct to which a provenance object is associated 00025 00026 Creator: The EDProducer that made the product. 00027 00028 Parents: The EDProducts used as input by the creator. 00029 */ 00030 00031 namespace edm { 00032 class Provenance { 00033 public: 00034 explicit Provenance(ConstBranchDescription const& p); 00035 explicit Provenance(BranchDescription const& p); 00036 Provenance(ConstBranchDescription const& p, boost::shared_ptr<EventEntryInfo> entryDesc); 00037 Provenance(BranchDescription const& p, boost::shared_ptr<EventEntryInfo> entryDesc); 00038 Provenance(ConstBranchDescription const& p, boost::shared_ptr<RunLumiEntryInfo> entryDesc); 00039 Provenance(BranchDescription const& p, boost::shared_ptr<RunLumiEntryInfo> entryDesc); 00040 00041 ~Provenance() {} 00042 00043 EventEntryDescription const& event() const {return entryDescription();} 00044 BranchDescription const& product() const {return branchDescription_.me();} 00045 00046 BranchDescription const& branchDescription() const {return branchDescription_.me();} 00047 ConstBranchDescription const& constBranchDescription() const {return branchDescription_;} 00048 EventEntryInfo const* branchEntryInfoPtr() const {return branchEntryInfoPtr_.get();} 00049 boost::shared_ptr<EventEntryInfo> branchEntryInfoSharedPtr() const {return branchEntryInfoPtr_;} 00050 boost::shared_ptr<EventEntryInfo> resolve() const; 00051 EventEntryInfo const& branchEntryInfo() const { 00052 if (branchEntryInfoPtr_.get()) return *branchEntryInfoPtr_; 00053 return *resolve(); 00054 } 00055 EventEntryDescription const& entryDescription() const {return branchEntryInfo().entryDescription();} 00056 BranchID const& branchID() const {return product().branchID();} 00057 std::string const& branchName() const {return product().branchName();} 00058 std::string const& className() const {return product().className();} 00059 std::string const& moduleLabel() const {return product().moduleLabel();} 00060 std::string const& moduleName() const {return entryDescription().moduleName();} 00061 PassID const& passID() const {return entryDescription().passID();} 00062 std::string const& processName() const {return product().processName();} 00063 ProductID const& productID() const {return branchEntryInfo().productID();} 00064 ProductStatus const& productStatus() const {return branchEntryInfo().productStatus();} 00065 std::string const& productInstanceName() const {return product().productInstanceName();} 00066 std::string const& friendlyClassName() const {return product().friendlyClassName();} 00067 std::set<ParameterSetID> const& psetIDs() const {return product().psetIDs();} 00068 ParameterSetID const& psetID() const {return entryDescription().psetID();} 00069 ReleaseVersion const& releaseVersion() const {return entryDescription().releaseVersion();} 00070 std::set<std::string> const& branchAliases() const {return product().branchAliases();} 00071 ModuleDescriptionID const& moduleDescriptionID() const {return entryDescription().moduleDescriptionID();} 00072 ModuleDescription const& moduleDescription() const {return entryDescription().moduleDescription();} 00073 bool isPresent() const {return productstatus::present(productStatus());} 00074 00075 std::vector<BranchID> const& parents() const {return entryDescription().parents();} 00076 00077 void write(std::ostream& os) const; 00078 00079 void setEventEntryInfo(boost::shared_ptr<EventEntryInfo> bei) const; 00080 00081 void setStore(boost::shared_ptr<BranchMapper> store) const {store_ = store;} 00082 00083 private: 00084 ConstBranchDescription const branchDescription_; 00085 mutable boost::shared_ptr<EventEntryInfo> branchEntryInfoPtr_; 00086 mutable boost::shared_ptr<BranchMapper> store_; 00087 }; 00088 00089 inline 00090 std::ostream& 00091 operator<<(std::ostream& os, Provenance const& p) { 00092 p.write(os); 00093 return os; 00094 } 00095 00096 bool operator==(Provenance const& a, Provenance const& b); 00097 } 00098 #endif