1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#ifndef FWCore_Sources_DaqProvenanceHelper_h
#define FWCore_Sources_DaqProvenanceHelper_h
#include <map>
#include <string>
#include <vector>
#include "oneapi/tbb/concurrent_unordered_map.h"
#include "DataFormats/Provenance/interface/ProductDescription.h"
#include "DataFormats/Provenance/interface/ProductDependenciesFwd.h"
#include "DataFormats/Provenance/interface/ParentageID.h"
#include "DataFormats/Provenance/interface/ProcessConfiguration.h"
#include "DataFormats/Provenance/interface/ProcessHistoryID.h"
#include "DataFormats/Provenance/interface/ProductProvenance.h"
#include "DataFormats/Provenance/interface/BranchID.h"
#include "DataFormats/Provenance/interface/BranchIDList.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
namespace edm {
class ProcessHistoryRegistry;
namespace dqh {
struct parentage_hash {
std::size_t operator()(edm::ParentageID const& iKey) const { return iKey.smallHash(); }
};
} // namespace dqh
struct DaqProvenanceHelper {
typedef std::map<ProcessHistoryID, ProcessHistoryID> ProcessHistoryIDMap;
typedef oneapi::tbb::concurrent_unordered_map<ParentageID, ParentageID, dqh::parentage_hash> ParentageIDMap;
explicit DaqProvenanceHelper(TypeID const& rawDataType);
explicit DaqProvenanceHelper(TypeID const& rawDataType,
std::string const& collectionName,
std::string const& friendlyName,
std::string const& sourceLabel);
ProcessHistoryID daqInit(ProductRegistry& productRegistry, ProcessHistoryRegistry& processHistoryRegistry) const;
void saveInfo(ProductDescription const& oldBD, ProductDescription const& newBD) {
oldProcessName_ = oldBD.processName();
oldBranchID_ = oldBD.branchID();
newBranchID_ = newBD.branchID();
}
bool matchProcesses(ProcessConfiguration const& pc, ProcessHistory const& ph) const;
void fixMetaData(ProcessConfigurationVector& pcv, std::vector<ProcessHistory>& phv);
void fixMetaData(std::vector<BranchID>& branchIDs) const;
void fixMetaData(BranchIDLists const&) const;
void fixMetaData(ProductDependencies& productDependencies) const;
ProcessHistoryID const& mapProcessHistoryID(ProcessHistoryID const& phid);
ParentageID const& mapParentageID(ParentageID const& phid) const;
BranchID const& mapBranchID(BranchID const& branchID) const;
ProductDescription const& productDescription() const { return constProductDescription_; }
ProcessHistoryID const* oldProcessHistoryID() const { return oldProcessHistoryID_; }
ProductProvenance const& dummyProvenance() const { return dummyProvenance_; }
void setOldParentageIDToNew(ParentageID const& iOld, ParentageID const& iNew);
private:
ProductDescription const constProductDescription_;
ProductProvenance dummyProvenance_;
ParameterSet processParameterSet_;
std::string oldProcessName_;
BranchID oldBranchID_;
BranchID newBranchID_;
ProcessHistoryID const* oldProcessHistoryID_;
ProcessHistoryIDMap phidMap_;
ParentageIDMap parentageIDMap_;
};
} // namespace edm
#endif
|