CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
magneticfield::VolumeBasedMagneticFieldESProducerFromDB Class Reference
Inheritance diagram for magneticfield::VolumeBasedMagneticFieldESProducerFromDB:
edm::ESProducer edm::ESProxyFactoryProducer edm::eventsetup::DataProxyProvider

Public Member Functions

std::unique_ptr< MagneticFieldproduce (const IdealMagneticFieldRecord &iRecord)
 
 VolumeBasedMagneticFieldESProducerFromDB (const edm::ParameterSet &iConfig)
 
- Public Member Functions inherited from edm::ESProducer
 ESProducer ()
 
ESProxyIndex const * getTokenIndices (unsigned int iIndex) const
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &) final
 
 ~ESProducer ()(false) override
 
- Public Member Functions inherited from edm::ESProxyFactoryProducer
 ESProxyFactoryProducer ()
 
void newInterval (const eventsetup::EventSetupRecordKey &iRecordType, const ValidityInterval &iInterval) override
 overrides DataProxyProvider method More...
 
 ~ESProxyFactoryProducer () noexcept(false) override
 
- Public Member Functions inherited from edm::eventsetup::DataProxyProvider
 DataProxyProvider ()
 
const ComponentDescriptiondescription () const
 
bool isUsingRecord (const EventSetupRecordKey &) const
 
const KeyedProxieskeyedProxies (const EventSetupRecordKey &iRecordKey) const
 
void resetProxies (const EventSetupRecordKey &iRecordType)
 
void resetProxiesIfTransient (const EventSetupRecordKey &iRecordType)
 
void setAppendToDataLabel (const edm::ParameterSet &)
 
void setDescription (const ComponentDescription &iDescription)
 
std::set< EventSetupRecordKeyusingRecords () const
 
virtual ~DataProxyProvider () noexcept(false)
 

Private Member Functions

std::string closerNominalLabel (float current)
 
const VolumeBasedMagneticFieldESProducerFromDBoperator= (const VolumeBasedMagneticFieldESProducerFromDB &)=delete
 
 VolumeBasedMagneticFieldESProducerFromDB (const VolumeBasedMagneticFieldESProducerFromDB &)=delete
 

Private Attributes

std::vector< int > nominalCurrents
 
std::vector< std::string > nominalLabels
 
edm::ParameterSet pset
 

Additional Inherited Members

- Public Types inherited from edm::eventsetup::DataProxyProvider
typedef std::vector< std::pair< DataKey, edm::propagate_const< std::shared_ptr< DataProxy > > > > KeyedProxies
 
typedef std::vector< EventSetupRecordKeyKeys
 
typedef std::map< EventSetupRecordKey, KeyedProxiesRecordProxies
 
- Static Public Member Functions inherited from edm::eventsetup::DataProxyProvider
static void prevalidate (ConfigurationDescriptions &)
 
- Protected Member Functions inherited from edm::ESProducer
 ESProducer (const ESProducer &)=delete
 
ESProducer const & operator= (const ESProducer &)=delete
 
template<typename T >
auto setWhatProduced (T *iThis, const es::Label &iLabel={})
 
template<typename T >
auto setWhatProduced (T *iThis, const char *iLabel)
 
template<typename T >
auto setWhatProduced (T *iThis, const std::string &iLabel)
 
template<typename T , typename TDecorator >
auto setWhatProduced (T *iThis, const TDecorator &iDec, const es::Label &iLabel={})
 
template<typename T , typename TReturn , typename TRecord >
auto setWhatProduced (T *iThis, TReturn(T::*iMethod)(const TRecord &), const es::Label &iLabel={})
 
template<typename T , typename TReturn , typename TRecord , typename TArg >
ESConsumesCollectorT< TRecord > setWhatProduced (T *iThis, TReturn(T::*iMethod)(const TRecord &), const TArg &iDec, const es::Label &iLabel={})
 
- Protected Member Functions inherited from edm::ESProxyFactoryProducer
template<class TFactory >
void registerFactory (std::unique_ptr< TFactory > iFactory, const std::string &iLabel=std::string())
 
virtual void registerFactoryWithKey (const eventsetup::EventSetupRecordKey &iRecord, std::unique_ptr< eventsetup::ProxyFactoryBase > iFactory, const std::string &iLabel=std::string())
 
void registerProxies (const eventsetup::EventSetupRecordKey &iRecord, KeyedProxies &aProxyList) override
 override DataProxyProvider method More...
 
- Protected Member Functions inherited from edm::eventsetup::DataProxyProvider
void eraseAll (const EventSetupRecordKey &iRecordKey)
 deletes all the Proxies in aStream More...
 
void invalidateProxies (const EventSetupRecordKey &iRecordKey)
 
template<class T >
void usingRecord ()
 
void usingRecordWithKey (const EventSetupRecordKey &)
 

Detailed Description

Definition at line 51 of file VolumeBasedMagneticFieldESProducerFromDB.cc.

Constructor & Destructor Documentation

VolumeBasedMagneticFieldESProducerFromDB::VolumeBasedMagneticFieldESProducerFromDB ( const edm::ParameterSet iConfig)
magneticfield::VolumeBasedMagneticFieldESProducerFromDB::VolumeBasedMagneticFieldESProducerFromDB ( const VolumeBasedMagneticFieldESProducerFromDB )
privatedelete

Member Function Documentation

std::string VolumeBasedMagneticFieldESProducerFromDB::closerNominalLabel ( float  current)
private

Definition at line 153 of file VolumeBasedMagneticFieldESProducerFromDB.cc.

References DEFINE_FWK_EVENTSETUP_MODULE, mps_fire::i, createfilelist::int, nominalCurrents, and nominalLabels.

Referenced by produce().

153  {
154 
155  int i=0;
156  for(;i<(int)nominalLabels.size()-1;i++) {
157  if(2*current < nominalCurrents[i]+nominalCurrents[i+1] )
158  return nominalLabels[i];
159  }
160  return nominalLabels[i];
161 }
const VolumeBasedMagneticFieldESProducerFromDB& magneticfield::VolumeBasedMagneticFieldESProducerFromDB::operator= ( const VolumeBasedMagneticFieldESProducerFromDB )
privatedelete
std::unique_ptr< MagneticField > VolumeBasedMagneticFieldESProducerFromDB::produce ( const IdealMagneticFieldRecord iRecord)

Definition at line 81 of file VolumeBasedMagneticFieldESProducerFromDB.cc.

References MagGeoBuilderFromDDD::barrelLayers(), MagGeoBuilderFromDDD::barrelVolumes(), MagGeoBuilderFromDDD::build(), closerNominalLabel(), debug, MagGeoBuilderFromDDD::endcapSectors(), MagGeoBuilderFromDDD::endcapVolumes(), MagFieldConfig::geometryVersion, ParametrizedMagneticFieldFactory::get(), edm::ParameterSet::getParameter(), edm::eventsetup::DependentRecordImplementation< RecordT, ListT >::getRecord(), edm::ParameterSet::getUntrackedParameter(), MagFieldConfig::gridFiles, MagFieldConfig::keys, RunInfo::m_avg_current, MagGeoBuilderFromDDD::maxR(), MagGeoBuilderFromDDD::maxZ(), writedatasetfile::parser, pset, MagGeoBuilderFromDDD::setGridFiles(), MagGeoBuilderFromDDD::setScaling(), MagFieldConfig::slaveFieldParameters, MagFieldConfig::slaveFieldVersion, MagFieldConfig::values, and MagFieldConfig::version.

82 {
83 
84  bool debug = pset.getUntrackedParameter<bool>("debugBuilder", false);
85 
86  // Get value of the current from condition DB
87  float current = pset.getParameter<int>("valueOverride");
88  string message;
89  if (current < 0) {
90  ESHandle<RunInfo> rInfo;
91  iRecord.getRecord<RunInfoRcd>().get(rInfo);
92  current = rInfo->m_avg_current;
93  message = " (from RunInfo DB)";
94  } else {
95  message = " (from valueOverride card)";
96  }
97  string configLabel = closerNominalLabel(current);
98 
99  // Get configuration
100  ESHandle<MagFieldConfig> confESH;
101  iRecord.getRecord<MagFieldConfigRcd>().get(configLabel, confESH);
102  const MagFieldConfig* conf = &*confESH;
103 
104  edm::LogInfo("MagneticField|AutoMagneticField") << "Current: " << current << message << "; using map configuration with label: " << configLabel << endl
105  << "Version: " << conf->version
106  << " geometryVersion: " << conf->geometryVersion
107  << " slaveFieldVersion: " << conf->slaveFieldVersion;
108 
109  // Get the parametrized field
110  std::unique_ptr<MagneticField> paramField = ParametrizedMagneticFieldFactory::get(conf->slaveFieldVersion, conf->slaveFieldParameters);
111 
112 
113  if (conf->version == "parametrizedMagneticField") {
114  // The map consist of only the parametrization in this case
115  return paramField;
116  } else {
117  // Full VolumeBased map + parametrization
118  MagGeoBuilderFromDDD builder(conf->version,
119  conf->geometryVersion,
120  debug);
121 
122  // Set scaling factors
123  if (!conf->keys.empty()) {
124  builder.setScaling(conf->keys, conf->values);
125  }
126 
127  // Set specification for the grid tables to be used.
128  if (!conf->gridFiles.empty()) {
129  builder.setGridFiles(conf->gridFiles);
130  }
131 
132  // Build the geomeytry (DDDCompactView) from the DB blob
133  // (code taken from GeometryReaders/XMLIdealGeometryESSource/src/XMLIdealMagneticFieldGeometryESProducer.cc)
135  iRecord.getRecord<MFGeometryFileRcd>().get( std::to_string(conf->geometryVersion), gdd );
136 
137  auto cpv = std::make_unique<DDCompactView>(DDName("cmsMagneticField:MAGF"));
138  DDLParser parser(*cpv);
139  parser.getDDLSAX2FileHandler()->setUserNS(true);
140  parser.clearFiles();
141  std::unique_ptr<std::vector<unsigned char> > tb = (*gdd).getUncompressedBlob();
142  parser.parse(*tb, tb->size());
143  cpv->lockdown();
144 
145  builder.build(*cpv);
146 
147  // Build the VB map. Ownership of the parametrization is transferred to it
148  return std::make_unique<VolumeBasedMagneticField>(conf->geometryVersion,builder.barrelLayers(), builder.endcapSectors(), builder.barrelVolumes(), builder.endcapVolumes(), builder.maxR(), builder.maxZ(), paramField.release(), true);
149  }
150 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
std::vector< double > values
magneticfield::TableFileMap gridFiles
Specification of which data table is to be used for each volume.
std::string slaveFieldVersion
Label or type of the tracker parametrization.
static std::unique_ptr< MagneticField > get(std::string version, const edm::ParameterSet &parameters)
std::vector< int > keys
Scaling factors for the field in specific volumes.
DDLParser is the main class of Detector Description Language Parser.
Definition: DDLParser.h:63
#define debug
Definition: HDRShower.cc:19
std::string version
Version of the data tables to be used.
float m_avg_current
Definition: RunInfo.h:29
int geometryVersion
Version of the geometry to be used.
std::vector< double > slaveFieldParameters

Member Data Documentation

std::vector<int> magneticfield::VolumeBasedMagneticFieldESProducerFromDB::nominalCurrents
private
std::vector<std::string> magneticfield::VolumeBasedMagneticFieldESProducerFromDB::nominalLabels
private
edm::ParameterSet magneticfield::VolumeBasedMagneticFieldESProducerFromDB::pset
private