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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "CondTools/Ecal/interface/ESDBCopy.h"
#include <vector>
ESDBCopy::ESDBCopy(const edm::ParameterSet& iConfig)
: m_timetype(iConfig.getParameter<std::string>("timetype")),
m_cacheIDs(),
m_records(),
esPedestalsToken_(esConsumes()),
esADCToGeVConstantToken_(esConsumes()),
esChannelStatusToken_(esConsumes()),
esIntercalibConstantsToken_(esConsumes()),
esWeightStripGroupsToken_(esConsumes()),
esTBWeightsToken_(esConsumes()) {
std::string container;
std::string record;
typedef std::vector<edm::ParameterSet> Parameters;
Parameters toCopy = iConfig.getParameter<Parameters>("toCopy");
for (const auto& iparam : toCopy) {
container = iparam.getParameter<std::string>("container");
record = iparam.getParameter<std::string>("record");
m_cacheIDs.emplace(container, 0);
m_records.emplace(container, record);
}
}
ESDBCopy::~ESDBCopy() {}
void ESDBCopy::analyze(const edm::Event& evt, const edm::EventSetup& evtSetup) {
for (const auto& irec : m_records) {
if (shouldCopy(evtSetup, irec.first)) {
copyToDB(evtSetup, irec.first);
}
}
}
bool ESDBCopy::shouldCopy(const edm::EventSetup& evtSetup, const std::string& container) {
unsigned long long cacheID = 0;
if (container == "ESPedestals") {
cacheID = evtSetup.get<ESPedestalsRcd>().cacheIdentifier();
} else if (container == "ESADCToGeVConstant") {
cacheID = evtSetup.get<ESADCToGeVConstantRcd>().cacheIdentifier();
} else if (container == "ESIntercalibConstants") {
cacheID = evtSetup.get<ESIntercalibConstantsRcd>().cacheIdentifier();
} else if (container == "ESWeightStripGroups") {
cacheID = evtSetup.get<ESWeightStripGroupsRcd>().cacheIdentifier();
} else if (container == "ESTBWeights") {
cacheID = evtSetup.get<ESTBWeightsRcd>().cacheIdentifier();
} else if (container == "ESChannelStatus") {
cacheID = evtSetup.get<ESChannelStatusRcd>().cacheIdentifier();
} else {
throw cms::Exception("Unknown container");
}
if (m_cacheIDs[container] == cacheID) {
return false;
} else {
m_cacheIDs[container] = cacheID;
return true;
}
}
void ESDBCopy::copyToDB(const edm::EventSetup& evtSetup, const std::string& container) {
edm::Service<cond::service::PoolDBOutputService> dbOutput;
if (!dbOutput.isAvailable()) {
throw cms::Exception("PoolDBOutputService is not available");
}
std::string recordName = m_records[container];
if (container == "ESPedestals") {
const auto& obj = evtSetup.getData(esPedestalsToken_);
edm::LogInfo("ESDBCopy") << "ped pointer is: " << &obj;
dbOutput->createOneIOV<const ESPedestals>(obj, dbOutput->beginOfTime(), recordName);
} else if (container == "ESADCToGeVConstant") {
const auto& obj = evtSetup.getData(esADCToGeVConstantToken_);
edm::LogInfo("ESDBCopy") << "adc pointer is: " << &obj;
dbOutput->createOneIOV<const ESADCToGeVConstant>(obj, dbOutput->beginOfTime(), recordName);
} else if (container == "ESChannelStatus") {
const auto& obj = evtSetup.getData(esChannelStatusToken_);
edm::LogInfo("ESDBCopy") << "channel status pointer is: " << &obj;
dbOutput->createOneIOV<const ESChannelStatus>(obj, dbOutput->beginOfTime(), recordName);
} else if (container == "ESIntercalibConstants") {
const auto& obj = evtSetup.getData(esIntercalibConstantsToken_);
edm::LogInfo("ESDBCopy") << "inter pointer is: " << &obj;
dbOutput->createOneIOV<const ESIntercalibConstants>(obj, dbOutput->beginOfTime(), recordName);
} else if (container == "ESWeightStripGroups") {
const auto& obj = evtSetup.getData(esWeightStripGroupsToken_);
edm::LogInfo("ESDBCopy") << "weight pointer is: " << &obj;
dbOutput->createOneIOV<const ESWeightStripGroups>(obj, dbOutput->beginOfTime(), recordName);
} else if (container == "ESTBWeights") {
const auto& obj = evtSetup.getData(esTBWeightsToken_);
edm::LogInfo("ESDBCopy") << "tbweight pointer is: " << &obj;
dbOutput->createOneIOV<const ESTBWeights>(obj, dbOutput->beginOfTime(), recordName);
} else {
throw cms::Exception("Unknown container");
}
edm::LogInfo("ESDBCopy") << "ESDBCopy wrote " << recordName;
}
|