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
|
#include "HBHEDarkeningEP.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/FileInPath.h"
#include "FWCore/Framework/interface/SourceFactory.h"
#include <string>
#include <vector>
#include <map>
HBHEDarkeningEP::HBHEDarkeningEP(const edm::ParameterSet& pset)
: drdA_(pset.getParameter<double>("drdA")),
drdB_(pset.getParameter<double>("drdB")),
ieta_shift_(pset.getParameter<int>("ieta_shift")) {
setWhatProduced(this);
findingRecord<HBHEDarkeningRecord>();
const std::vector<edm::ParameterSet>& p_dosemaps = pset.getParameter<std::vector<edm::ParameterSet>>("dosemaps");
dosemaps_.reserve(p_dosemaps.size());
for (const auto& p_dosemap : p_dosemaps) {
dosemaps_.push_back({p_dosemap.getParameter<edm::FileInPath>("file"), p_dosemap.getParameter<int>("energy")});
}
//initialize years
const std::vector<edm::ParameterSet>& p_years = pset.getParameter<std::vector<edm::ParameterSet>>("years");
years_.reserve(p_years.size());
for (const auto& p_year : p_years) {
years_.emplace_back(p_year.getParameter<std::string>("year"),
p_year.getParameter<double>("intlumi"),
p_year.getParameter<double>("lumirate"),
p_year.getParameter<int>("energy"));
}
}
HBHEDarkeningEP::~HBHEDarkeningEP() {}
void HBHEDarkeningEP::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey,
const edm::IOVSyncValue& iTime,
edm::ValidityInterval& oInterval) {
oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); //infinite
}
void HBHEDarkeningEP::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<int>("ieta_shift");
desc.add<double>("drdA");
desc.add<double>("drdB");
edm::ParameterSetDescription desc_dosemaps;
desc_dosemaps.add<int>("energy");
desc_dosemaps.add<edm::FileInPath>("file");
std::vector<edm::ParameterSet> default_dosemap(1);
desc.addVPSet("dosemaps", desc_dosemaps, default_dosemap);
edm::ParameterSetDescription desc_years;
desc_years.add<std::string>("year");
desc_years.add<double>("intlumi");
desc_years.add<double>("lumirate");
desc_years.add<int>("energy");
std::vector<edm::ParameterSet> default_year(1);
desc.addVPSet("years", desc_years, default_year);
descriptions.addDefault(desc);
}
// ------------ method called to produce the data ------------
HBHEDarkeningEP::ReturnType HBHEDarkeningEP::produce(const HBHEDarkeningRecord& iRecord) {
//initialize dose maps
std::map<int, std::vector<std::vector<float>>> dosemaps;
for (const auto& p_dosemap : dosemaps_) {
dosemaps.emplace(p_dosemap.file_energy, HBHEDarkening::readDoseMap(p_dosemap.fp.fullPath()));
}
return std::make_unique<HBHEDarkening>(ieta_shift_, drdA_, drdB_, std::move(dosemaps), years_);
}
DEFINE_FWK_EVENTSETUP_SOURCE(HBHEDarkeningEP);
|