Back to home page

Project CMSSW displayed by LXR

 
 

    


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   }  // namespace dqh
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 }  // namespace edm
0070 #endif