Back to home page

Project CMSSW displayed by LXR

 
 

    


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