43 #include <boost/algorithm/string/split.hpp> 44 #include <boost/algorithm/string/classification.hpp> 45 #include <boost/lexical_cast.hpp> 67 static std::string_view closerNominalLabel(
float current);
81 VolumeBasedMagneticFieldESProducerFromDB::VolumeBasedMagneticFieldESProducerFromDB(
const edm::ParameterSet& iConfig)
82 : debug_(iConfig.getUntrackedParameter<
bool>(
"debugBuilder")) {
86 const int current = iConfig.
getParameter<
int>(
"valueOverride");
97 <<
" (from RunInfo DB); using map configuration with label: " <<
label;
98 return iGet(
"",
label);
106 <<
"Current :" << current <<
" (from valueOverride card); using map configuration with label: " <<
label;
120 if (iConfig->
version ==
"parametrizedMagneticField") {
121 return iGet.nothing();
134 return std::shared_ptr<MagFieldConfig const>(config.
product(), [](
auto*) {});
142 return std::shared_ptr<MagFieldConfig const>(
config.product(), [](
auto*) {});
150 std::unique_ptr<MagneticField> paramField =
154 <<
"Version: " << conf->version <<
" geometryVersion: " << conf->geometryVersion
155 <<
" slaveFieldVersion: " << conf->slaveFieldVersion;
157 if (conf->version ==
"parametrizedMagneticField") {
166 if (!conf->keys.empty()) {
171 if (!conf->gridFiles.empty()) {
184 std::unique_ptr<std::vector<unsigned char> > tb = blob->getUncompressedBlob();
185 parser.
parse(*tb, tb->size());
191 return std::make_unique<VolumeBasedMagneticField>(conf->geometryVersion,
198 paramField.release(),
204 constexpr std::array<std::string_view, 7> nominalLabels = {{
"3.8T",
"0T",
"2T",
"3T",
"3.5T",
"3.8T",
"4T"}};
207 for (; i < (
int)nominalLabels.size() - 1; i++) {
208 if (2 * current < nominalCurrents[i] + nominalCurrents[i + 1])
209 return nominalLabels[
i];
211 return nominalLabels[
i];
217 desc.
add<
int>(
"valueOverride", -1)->setComment(
"Force value of current (in A); take the value from DB if < 0.");
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T getParameter(std::string const &) const
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
T getUntrackedParameter(std::string const &, T const &) const
int parse(const DDLDocumentProvider &dp)
Parse all files. Return is meaningless.
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
ESHandle< ProductT > getHandle(ESGetToken< ProductT, DepRecordT > const &iToken) const
std::vector< MagBLayer * > barrelLayers() const
Get barrel layers.
DDName is used to identify DDD entities uniquely.
ESTransientHandle< ProductT > getTransientHandle(ESGetToken< ProductT, DepRecordT > const &iToken) const
Compact representation of the geometrical detector hierarchy.
std::vector< MagVolume6Faces * > barrelVolumes() const
static std::unique_ptr< MagneticField > get(std::string version, const edm::ParameterSet ¶meters)
virtual void build(const DDCompactView &cpv)
void addDefault(ParameterSetDescription const &psetDescription)
virtual void setUserNS(bool userns)
std::array< int, 7 > nominalCurrents
std::shared_ptr< MagFieldConfig const > chooseConfigAtRuntime(const IdealMagneticFieldRecord &iRecord)
edm::ESGetToken< MagFieldConfig, MagFieldConfigRcd > mayGetConfigToken_
std::vector< MagESector * > endcapSectors() const
Get endcap layers.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void clearFiles()
Clear the file list - see Warning!
DDLSAX2FileHandler * getDDLSAX2FileHandler()
To get the parent this class allows access to the handler.
DDLParser is the main class of Detector Description Language Parser.
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::ESGetToken< MagFieldConfig, IdealMagneticFieldRecord > chosenConfigToken_
static std::string_view closerNominalLabel(float current)
std::string version
Version of the data tables to be used.
void setScaling(const std::vector< int > &keys, const std::vector< double > &values)
std::shared_ptr< MagFieldConfig const > chooseConfigViaParameter(const IdealMagneticFieldRecord &iRecord)
std::vector< MagVolume6Faces * > endcapVolumes() const
int geometryVersion
Version of the geometry to be used.
edm::ESGetToken< MagFieldConfig, MagFieldConfigRcd > knownFromParamConfigToken_
std::unique_ptr< MagneticField > produce(const IdealMagneticFieldRecord &iRecord)
T const * product() const
void setGridFiles(const magneticfield::TableFileMap &gridFiles)
edm::ESGetToken< FileBlob, MFGeometryFileRcd > mayConsumeBlobToken_