CMS 3D CMS Logo

Provenance.h

Go to the documentation of this file.
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

Generated on Tue Jun 9 17:31:36 2009 for CMSSW by  doxygen 1.5.4