File indexing completed on 2024-04-06 11:58:08
0001 #include "HBHEDarkeningEP.h"
0002 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0004 #include "FWCore/ParameterSet/interface/FileInPath.h"
0005 #include "FWCore/Framework/interface/SourceFactory.h"
0006
0007 #include <string>
0008 #include <vector>
0009 #include <map>
0010
0011 HBHEDarkeningEP::HBHEDarkeningEP(const edm::ParameterSet& pset)
0012 : drdA_(pset.getParameter<double>("drdA")),
0013 drdB_(pset.getParameter<double>("drdB")),
0014 ieta_shift_(pset.getParameter<int>("ieta_shift")) {
0015 setWhatProduced(this);
0016 findingRecord<HBHEDarkeningRecord>();
0017
0018 const std::vector<edm::ParameterSet>& p_dosemaps = pset.getParameter<std::vector<edm::ParameterSet>>("dosemaps");
0019 dosemaps_.reserve(p_dosemaps.size());
0020 for (const auto& p_dosemap : p_dosemaps) {
0021 dosemaps_.push_back({p_dosemap.getParameter<edm::FileInPath>("file"), p_dosemap.getParameter<int>("energy")});
0022 }
0023
0024
0025 const std::vector<edm::ParameterSet>& p_years = pset.getParameter<std::vector<edm::ParameterSet>>("years");
0026 years_.reserve(p_years.size());
0027 for (const auto& p_year : p_years) {
0028 years_.emplace_back(p_year.getParameter<std::string>("year"),
0029 p_year.getParameter<double>("intlumi"),
0030 p_year.getParameter<double>("lumirate"),
0031 p_year.getParameter<int>("energy"));
0032 }
0033 }
0034
0035 HBHEDarkeningEP::~HBHEDarkeningEP() {}
0036
0037 void HBHEDarkeningEP::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey,
0038 const edm::IOVSyncValue& iTime,
0039 edm::ValidityInterval& oInterval) {
0040 oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime());
0041 }
0042
0043 void HBHEDarkeningEP::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0044 edm::ParameterSetDescription desc;
0045 desc.add<int>("ieta_shift");
0046 desc.add<double>("drdA");
0047 desc.add<double>("drdB");
0048 edm::ParameterSetDescription desc_dosemaps;
0049 desc_dosemaps.add<int>("energy");
0050 desc_dosemaps.add<edm::FileInPath>("file");
0051 std::vector<edm::ParameterSet> default_dosemap(1);
0052 desc.addVPSet("dosemaps", desc_dosemaps, default_dosemap);
0053 edm::ParameterSetDescription desc_years;
0054 desc_years.add<std::string>("year");
0055 desc_years.add<double>("intlumi");
0056 desc_years.add<double>("lumirate");
0057 desc_years.add<int>("energy");
0058 std::vector<edm::ParameterSet> default_year(1);
0059 desc.addVPSet("years", desc_years, default_year);
0060
0061 descriptions.addDefault(desc);
0062 }
0063
0064
0065 HBHEDarkeningEP::ReturnType HBHEDarkeningEP::produce(const HBHEDarkeningRecord& iRecord) {
0066
0067 std::map<int, std::vector<std::vector<float>>> dosemaps;
0068 for (const auto& p_dosemap : dosemaps_) {
0069 dosemaps.emplace(p_dosemap.file_energy, HBHEDarkening::readDoseMap(p_dosemap.fp.fullPath()));
0070 }
0071
0072 return std::make_unique<HBHEDarkening>(ieta_shift_, drdA_, drdB_, std::move(dosemaps), years_);
0073 }
0074
0075 DEFINE_FWK_EVENTSETUP_SOURCE(HBHEDarkeningEP);