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
|
// -*- C++ -*-
//
// Package: CondTools/RunInfo
// Class: MagFieldConfigTestESProducer
//
/**\class MagFieldConfigTestESProducer
Description: [one line class summary]
Implementation:
[Notes on implementation]
*/
//
// Original Author: Christopher Jones
// Created: Wed, 02 Oct 2019 17:34:35 GMT
//
//
// system include files
#include <memory>
#include <unordered_map>
// user include files
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "CondFormats/MFObjects/interface/MagFieldConfig.h"
#include "CondFormats/DataRecord/interface/MagFieldConfigRcd.h"
//
// class declaration
//
class MagFieldConfigTestESProducer : public edm::ESProducer {
public:
MagFieldConfigTestESProducer(const edm::ParameterSet&);
using ReturnType = std::unique_ptr<MagFieldConfig>;
ReturnType produce(const MagFieldConfigRcd&);
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
std::pair<unsigned int, MagFieldConfig> makeMagFieldConfig(edm::ParameterSet const& pset) const;
// ----------member data ---------------------------
std::unordered_map<unsigned int, MagFieldConfig> configs_;
};
//
// constants, enums and typedefs
//
//
// static data member definitions
//
//
// constructors and destructor
//
MagFieldConfigTestESProducer::MagFieldConfigTestESProducer(const edm::ParameterSet& iConfig) {
std::vector<edm::ParameterSet> const& configs = iConfig.getParameter<std::vector<edm::ParameterSet>>("configs");
configs_.reserve(configs.size());
for (auto const& pset : configs) {
configs_.insert(makeMagFieldConfig(pset));
}
setWhatProduced(this);
}
//
// member functions
//
// ------------ method called to produce the data ------------
MagFieldConfigTestESProducer::ReturnType MagFieldConfigTestESProducer::produce(const MagFieldConfigRcd& iRecord) {
const unsigned int run = iRecord.validityInterval().first().eventID().run();
auto itFound = configs_.find(run);
if (itFound == configs_.end()) {
return nullptr;
}
return std::make_unique<MagFieldConfig>(itFound->second);
}
std::pair<unsigned int, MagFieldConfig> MagFieldConfigTestESProducer::makeMagFieldConfig(
edm::ParameterSet const& pset) const {
return std::pair<unsigned int, MagFieldConfig>(pset.getParameter<unsigned int>("run"),
pset.getParameter<edm::ParameterSet>("config"));
}
void MagFieldConfigTestESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
{
edm::ParameterSetDescription entryDesc;
entryDesc.add<unsigned int>("run");
{
//Do not enforce what the MagFieldConfig wants
edm::ParameterSetDescription magConfig;
magConfig.setAllowAnything();
entryDesc.add<edm::ParameterSetDescription>("config", magConfig);
}
desc.addVPSet("configs", entryDesc, {});
}
descriptions.addDefault(desc);
}
//define this as a plug-in
DEFINE_FWK_EVENTSETUP_MODULE(MagFieldConfigTestESProducer);
|