Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-31 02:19:10

0001 #ifndef DataFormats_Provenance_StableProvenance_h
0002 #define DataFormats_Provenance_StableProvenance_h
0003 
0004 /*----------------------------------------------------------------------
0005 
0006 StableProvenance: The full description of a product, excluding the parentage.
0007 The parentage can change from event to event.
0008 
0009 ----------------------------------------------------------------------*/
0010 
0011 #include "DataFormats/Provenance/interface/ProductDescription.h"
0012 #include "DataFormats/Provenance/interface/ParameterSetID.h"
0013 #include "DataFormats/Provenance/interface/ProcessHistory.h"
0014 #include "DataFormats/Provenance/interface/ProductID.h"
0015 #include "DataFormats/Provenance/interface/ReleaseVersion.h"
0016 
0017 #include <memory>
0018 
0019 #include <iosfwd>
0020 /*
0021   StableProvenance
0022 
0023   definitions:
0024   Product: The EDProduct to which a provenance object is associated
0025 
0026   Creator: The EDProducer that made the product.
0027 */
0028 
0029 namespace edm {
0030   class StableProvenance {
0031   public:
0032     StableProvenance();
0033 
0034     StableProvenance(std::shared_ptr<ProductDescription const> const& p, ProductID const& pid);
0035 
0036     ProductDescription const& productDescription() const { return *productDescription_; }
0037     std::shared_ptr<ProductDescription const> const& constProductDescriptionPtr() const { return productDescription_; }
0038 
0039     BranchID const& branchID() const { return productDescription().branchID(); }
0040     BranchID const& originalBranchID() const { return productDescription().originalBranchID(); }
0041     std::string const& branchName() const { return productDescription().branchName(); }
0042     std::string const& className() const { return productDescription().className(); }
0043     std::string const& moduleLabel() const { return productDescription().moduleLabel(); }
0044     std::string const& processName() const { return productDescription().processName(); }
0045     std::string const& productInstanceName() const { return productDescription().productInstanceName(); }
0046     std::string const& friendlyClassName() const { return productDescription().friendlyClassName(); }
0047     std::set<std::string> const& branchAliases() const { return productDescription().branchAliases(); }
0048 
0049     void write(std::ostream& os) const;
0050 
0051     ProductID const& productID() const { return productID_; }
0052 
0053     void setProductID(ProductID const& pid) { productID_ = pid; }
0054 
0055     void setProductDescription(std::shared_ptr<ProductDescription const> const& p) { productDescription_ = p; }
0056 
0057     void swap(StableProvenance&);
0058 
0059   private:
0060     std::shared_ptr<ProductDescription const> productDescription_;
0061     ProductID productID_;
0062   };
0063 
0064   inline std::ostream& operator<<(std::ostream& os, StableProvenance const& p) {
0065     p.write(os);
0066     return os;
0067   }
0068 
0069   bool operator==(StableProvenance const& a, StableProvenance const& b);
0070 
0071 }  // namespace edm
0072 #endif