File indexing completed on 2025-03-14 23:36:21
0001 #ifndef FWCore_Sources_DaqProvenanceHelper_h
0002 #define FWCore_Sources_DaqProvenanceHelper_h
0003
0004 #include <map>
0005 #include <string>
0006 #include <vector>
0007 #include "oneapi/tbb/concurrent_unordered_map.h"
0008
0009 #include "DataFormats/Provenance/interface/ProductDescription.h"
0010 #include "DataFormats/Provenance/interface/ProductDependenciesFwd.h"
0011 #include "DataFormats/Provenance/interface/ParentageID.h"
0012 #include "DataFormats/Provenance/interface/ProcessConfiguration.h"
0013 #include "DataFormats/Provenance/interface/ProcessHistoryID.h"
0014 #include "DataFormats/Provenance/interface/ProductProvenance.h"
0015 #include "DataFormats/Provenance/interface/BranchID.h"
0016 #include "DataFormats/Provenance/interface/BranchIDList.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018
0019 namespace edm {
0020 class ProcessHistoryRegistry;
0021
0022 namespace dqh {
0023 struct parentage_hash {
0024 std::size_t operator()(edm::ParentageID const& iKey) const { return iKey.smallHash(); }
0025 };
0026 }
0027
0028 struct DaqProvenanceHelper {
0029 typedef std::map<ProcessHistoryID, ProcessHistoryID> ProcessHistoryIDMap;
0030 typedef oneapi::tbb::concurrent_unordered_map<ParentageID, ParentageID, dqh::parentage_hash> ParentageIDMap;
0031 explicit DaqProvenanceHelper(TypeID const& rawDataType);
0032 explicit DaqProvenanceHelper(TypeID const& rawDataType,
0033 std::string const& collectionName,
0034 std::string const& friendlyName,
0035 std::string const& sourceLabel);
0036 ProcessHistoryID daqInit(ProductRegistry& productRegistry, ProcessHistoryRegistry& processHistoryRegistry) const;
0037 void saveInfo(ProductDescription const& oldBD, ProductDescription const& newBD) {
0038 oldProcessName_ = oldBD.processName();
0039 oldBranchID_ = oldBD.branchID();
0040 newBranchID_ = newBD.branchID();
0041 }
0042 bool matchProcesses(ProcessConfiguration const& pc, ProcessHistory const& ph) const;
0043 void fixMetaData(ProcessConfigurationVector& pcv, std::vector<ProcessHistory>& phv);
0044 void fixMetaData(std::vector<BranchID>& branchIDs) const;
0045 void fixMetaData(BranchIDLists const&) const;
0046 void fixMetaData(ProductDependencies& productDependencies) const;
0047 ProcessHistoryID const& mapProcessHistoryID(ProcessHistoryID const& phid);
0048 ParentageID const& mapParentageID(ParentageID const& phid) const;
0049 BranchID const& mapBranchID(BranchID const& branchID) const;
0050
0051 ProductDescription const& productDescription() const { return constProductDescription_; }
0052 ProcessHistoryID const* oldProcessHistoryID() const { return oldProcessHistoryID_; }
0053 ProductProvenance const& dummyProvenance() const { return dummyProvenance_; }
0054
0055 void setOldParentageIDToNew(ParentageID const& iOld, ParentageID const& iNew);
0056
0057 private:
0058 ProductDescription const constProductDescription_;
0059 ProductProvenance dummyProvenance_;
0060 ParameterSet processParameterSet_;
0061
0062 std::string oldProcessName_;
0063 BranchID oldBranchID_;
0064 BranchID newBranchID_;
0065 ProcessHistoryID const* oldProcessHistoryID_;
0066 ProcessHistoryIDMap phidMap_;
0067 ParentageIDMap parentageIDMap_;
0068 };
0069 }
0070 #endif