Skip to content

Commit

Permalink
Add Magnetic Field geometry readers from DB payload.
Browse files Browse the repository at this point in the history
  • Loading branch information
ianna committed Jul 16, 2013
1 parent f1fd7e6 commit 62db3c5
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
6 changes: 6 additions & 0 deletions Configuration/Geometry/python/MagneticFieldGeometryDB_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import FWCore.ParameterSet.Config as cms

#
# Magnetic Field Geometry master configuration
#
from GeometryReaders.XMLIdealGeometryESSource.cmsMagneticFieldGeometryDB_cff import *
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import FWCore.ParameterSet.Config as cms

XMLFromDBSource = cms.ESProducer("XMLIdealMagneticFieldGeometryESProducer",
rootDDName = cms.string('cmsMagneticField:MAGF'),
label = cms.string('magfield')
)
Original file line number Diff line number Diff line change
@@ -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<DDCompactView> ReturnType;

ReturnType produce( const IdealMagneticFieldRecord& );

private:
std::string rootDDName_; // this must be the form namespace:name
std::string label_;

DDI::Store<DDName, DDI::Material*> matStore_;
DDI::Store<DDName, DDI::Solid*> solidStore_;
DDI::Store<DDName, DDI::LogicalPart*> lpStore_;
DDI::Store<DDName, DDI::Specific*> specStore_;
DDI::Store<DDName, DDRotationMatrix*> rotStore_;
};

XMLIdealMagneticFieldGeometryESProducer::XMLIdealMagneticFieldGeometryESProducer( const edm::ParameterSet& iConfig )
: rootDDName_(iConfig.getParameter<std::string>( "rootDDName" )),
label_(iConfig.getParameter<std::string>( "label" ))
{
setWhatProduced( this );
}


XMLIdealMagneticFieldGeometryESProducer::~XMLIdealMagneticFieldGeometryESProducer( void )
{}

XMLIdealMagneticFieldGeometryESProducer::ReturnType
XMLIdealMagneticFieldGeometryESProducer::produce( const IdealMagneticFieldRecord& iRecord )
{
using namespace edm::es;

edm::ESTransientHandle<FileBlob> gdd;
iRecord.getRecord<GeometryFileRcd>().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<unsigned char>* tb = (*gdd).getUncompressedBlob();

parser.parse(*tb, tb->size());

delete tb;

returnValue->lockdown();

return returnValue ;
}

DEFINE_FWK_EVENTSETUP_MODULE( XMLIdealMagneticFieldGeometryESProducer );

0 comments on commit 62db3c5

Please sign in to comment.