diff --git a/Configuration/Geometry/python/MagneticFieldGeometryDB_cff.py b/Configuration/Geometry/python/MagneticFieldGeometryDB_cff.py new file mode 100644 index 0000000000000..a73c556aef883 --- /dev/null +++ b/Configuration/Geometry/python/MagneticFieldGeometryDB_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +# +# Magnetic Field Geometry master configuration +# +from GeometryReaders.XMLIdealGeometryESSource.cmsMagneticFieldGeometryDB_cff import * diff --git a/GeometryReaders/XMLIdealGeometryESSource/python/cmsMagneticFieldGeometryDB_cff.py b/GeometryReaders/XMLIdealGeometryESSource/python/cmsMagneticFieldGeometryDB_cff.py new file mode 100644 index 0000000000000..26c14ea537cc1 --- /dev/null +++ b/GeometryReaders/XMLIdealGeometryESSource/python/cmsMagneticFieldGeometryDB_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +XMLFromDBSource = cms.ESProducer("XMLIdealMagneticFieldGeometryESProducer", + rootDDName = cms.string('cmsMagneticField:MAGF'), + label = cms.string('magfield') + ) diff --git a/GeometryReaders/XMLIdealGeometryESSource/src/XMLIdealMagneticFieldGeometryESProducer.cc b/GeometryReaders/XMLIdealGeometryESSource/src/XMLIdealMagneticFieldGeometryESProducer.cc new file mode 100644 index 0000000000000..862aad12379bd --- /dev/null +++ b/GeometryReaders/XMLIdealGeometryESSource/src/XMLIdealMagneticFieldGeometryESProducer.cc @@ -0,0 +1,85 @@ +#include "boost/shared_ptr.hpp" + +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/ESProducer.h" + +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/ESTransientHandle.h" + +#include "DetectorDescription/Core/interface/DDCompactView.h" +#include "DetectorDescription/Core/interface/DDRoot.h" +#include "DetectorDescription/Parser/interface/DDLParser.h" +#include "CondFormats/Common/interface/FileBlob.h" +#include "Geometry/Records/interface/GeometryFileRcd.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" + +#include "DetectorDescription/Core/interface/DDMaterial.h" +#include "DetectorDescription/Core/interface/DDSolid.h" +#include "DetectorDescription/Core/interface/DDSpecifics.h" +#include "DetectorDescription/Base/interface/DDRotationMatrix.h" + +#include "DetectorDescription/Core/src/Material.h" +#include "DetectorDescription/Core/src/Solid.h" +#include "DetectorDescription/Core/src/LogicalPart.h" +#include "DetectorDescription/Core/src/Specific.h" + +class XMLIdealMagneticFieldGeometryESProducer : public edm::ESProducer +{ +public: + XMLIdealMagneticFieldGeometryESProducer( const edm::ParameterSet& ); + ~XMLIdealMagneticFieldGeometryESProducer(); + + typedef std::auto_ptr ReturnType; + + ReturnType produce( const IdealMagneticFieldRecord& ); + +private: + std::string rootDDName_; // this must be the form namespace:name + std::string label_; + + DDI::Store matStore_; + DDI::Store solidStore_; + DDI::Store lpStore_; + DDI::Store specStore_; + DDI::Store rotStore_; +}; + +XMLIdealMagneticFieldGeometryESProducer::XMLIdealMagneticFieldGeometryESProducer( const edm::ParameterSet& iConfig ) + : rootDDName_(iConfig.getParameter( "rootDDName" )), + label_(iConfig.getParameter( "label" )) +{ + setWhatProduced( this ); +} + + +XMLIdealMagneticFieldGeometryESProducer::~XMLIdealMagneticFieldGeometryESProducer( void ) +{} + +XMLIdealMagneticFieldGeometryESProducer::ReturnType +XMLIdealMagneticFieldGeometryESProducer::produce( const IdealMagneticFieldRecord& iRecord ) +{ + using namespace edm::es; + + edm::ESTransientHandle gdd; + iRecord.getRecord().get( label_, gdd ); + + DDName ddName(rootDDName_); + DDLogicalPart rootNode(ddName); + DDRootDef::instance().set(rootNode); + ReturnType returnValue(new DDCompactView(rootNode)); + DDLParser parser(*returnValue); + parser.getDDLSAX2FileHandler()->setUserNS(true); + parser.clearFiles(); + + std::vector* tb = (*gdd).getUncompressedBlob(); + + parser.parse(*tb, tb->size()); + + delete tb; + + returnValue->lockdown(); + + return returnValue ; +} + +DEFINE_FWK_EVENTSETUP_MODULE( XMLIdealMagneticFieldGeometryESProducer );