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