Go to the documentation of this file.00001 #include "DataFormats/Provenance/interface/Provenance.h"
00002 #include "DataFormats/Provenance/interface/ProcessConfiguration.h"
00003 #include "DataFormats/Provenance/interface/ProcessHistory.h"
00004 #include "DataFormats/Provenance/interface/ProcessHistoryRegistry.h"
00005 #include "DataFormats/Provenance/interface/ProductProvenance.h"
00006
00007
00008
00009
00010
00011 namespace edm {
00012
00013 Provenance::Provenance() :
00014 branchDescription_(),
00015 productID_(),
00016 productProvenanceValid_(false),
00017 productProvenancePtr_(new ProductProvenance),
00018 store_() {
00019 }
00020
00021 Provenance::Provenance(boost::shared_ptr<ConstBranchDescription> const& p, ProductID const& pid) :
00022 branchDescription_(p),
00023 productID_(pid),
00024 productProvenanceValid_(false),
00025 productProvenancePtr_(new ProductProvenance),
00026 store_() {
00027 }
00028
00029 ProductProvenance*
00030 Provenance::resolve() const {
00031 if (!productProvenanceValid_) {
00032 ProductProvenance const* prov = store_->branchIDToProvenance(branchDescription_->branchID());
00033 if (prov) {
00034 *productProvenancePtr_ = *prov;
00035 productProvenanceValid_ = true;
00036 }
00037 }
00038 return productProvenancePtr_.get();
00039 }
00040
00041 ProcessConfigurationID
00042 Provenance::processConfigurationID() const {
00043 if (parameterSetIDs().size() == 1) {
00044 return parameterSetIDs().begin()->first;
00045 }
00046 if (moduleNames().size() == 1) {
00047 return moduleNames().begin()->first;
00048 }
00049
00050 ProcessHistoryRegistry* phr = ProcessHistoryRegistry::instance();
00051 ProcessHistory ph;
00052 if (!phr->getMapped(store_->processHistoryID(), ph)) {
00053 return ProcessConfigurationID();
00054 }
00055
00056 ProcessConfiguration config;
00057 if (!ph.getConfigurationForProcess(processName(), config)) {
00058 return ProcessConfigurationID();
00059 }
00060 return config.id();
00061 }
00062
00063 ReleaseVersion const&
00064 Provenance::releaseVersion() const {
00065 ProcessConfiguration pc;
00066 ProcessConfigurationRegistry::instance()->getMapped(processConfigurationID(), pc);
00067 return pc.releaseVersion();
00068 }
00069
00070 ParameterSetID
00071 Provenance::psetID() const {
00072 if (product().parameterSetID().isValid()) {
00073 return product().parameterSetID();
00074 }
00075 if (parameterSetIDs().size() == 1) {
00076 return parameterSetIDs().begin()->second;
00077 }
00078 std::map<ProcessConfigurationID, ParameterSetID>::const_iterator it =
00079 parameterSetIDs().find(processConfigurationID());
00080 if (it == parameterSetIDs().end()) {
00081 return ParameterSetID();
00082 }
00083 return it->second;
00084 }
00085
00086 std::string
00087 Provenance::moduleName() const {
00088 if (!product().moduleName().empty()) {
00089 return product().moduleName();
00090 }
00091 if (moduleNames().size() == 1) {
00092 return moduleNames().begin()->second;
00093 }
00094 std::map<ProcessConfigurationID, std::string>::const_iterator it =
00095 moduleNames().find(processConfigurationID());
00096 if (it == moduleNames().end()) {
00097 return std::string();
00098 }
00099 return it->second;
00100 }
00101
00102 void
00103 Provenance::write(std::ostream& os) const {
00104
00105
00106 product().write(os);
00107 productProvenance()->write(os);
00108 }
00109
00110
00111 bool operator==(Provenance const& a, Provenance const& b) {
00112 return a.product() == b.product();
00113 }
00114
00115 void
00116 Provenance::resetProductProvenance() const {
00117 *productProvenancePtr_ = ProductProvenance();
00118 productProvenanceValid_ = false;
00119 }
00120
00121 void
00122 Provenance::setProductProvenance(ProductProvenance const& prov) const {
00123 *productProvenancePtr_ = prov;
00124 productProvenanceValid_ = true;
00125 }
00126
00127 void
00128 Provenance::swap(Provenance& iOther) {
00129 branchDescription_.swap(iOther.branchDescription_);
00130 productID_.swap(iOther.productID_);
00131 productProvenancePtr_.swap(iOther.productProvenancePtr_);
00132 store_.swap(iOther.store_);
00133 }
00134
00135 }
00136