Skip to content

Commit 62db3c5

Browse files
committed
Add Magnetic Field geometry readers from DB payload.
1 parent f1fd7e6 commit 62db3c5

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import FWCore.ParameterSet.Config as cms
2+
3+
#
4+
# Magnetic Field Geometry master configuration
5+
#
6+
from GeometryReaders.XMLIdealGeometryESSource.cmsMagneticFieldGeometryDB_cff import *
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import FWCore.ParameterSet.Config as cms
2+
3+
XMLFromDBSource = cms.ESProducer("XMLIdealMagneticFieldGeometryESProducer",
4+
rootDDName = cms.string('cmsMagneticField:MAGF'),
5+
label = cms.string('magfield')
6+
)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#include "boost/shared_ptr.hpp"
2+
3+
#include "FWCore/Framework/interface/ModuleFactory.h"
4+
#include "FWCore/Framework/interface/ESProducer.h"
5+
6+
#include "FWCore/Framework/interface/ESHandle.h"
7+
#include "FWCore/Framework/interface/ESTransientHandle.h"
8+
9+
#include "DetectorDescription/Core/interface/DDCompactView.h"
10+
#include "DetectorDescription/Core/interface/DDRoot.h"
11+
#include "DetectorDescription/Parser/interface/DDLParser.h"
12+
#include "CondFormats/Common/interface/FileBlob.h"
13+
#include "Geometry/Records/interface/GeometryFileRcd.h"
14+
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
15+
16+
#include "DetectorDescription/Core/interface/DDMaterial.h"
17+
#include "DetectorDescription/Core/interface/DDSolid.h"
18+
#include "DetectorDescription/Core/interface/DDSpecifics.h"
19+
#include "DetectorDescription/Base/interface/DDRotationMatrix.h"
20+
21+
#include "DetectorDescription/Core/src/Material.h"
22+
#include "DetectorDescription/Core/src/Solid.h"
23+
#include "DetectorDescription/Core/src/LogicalPart.h"
24+
#include "DetectorDescription/Core/src/Specific.h"
25+
26+
class XMLIdealMagneticFieldGeometryESProducer : public edm::ESProducer
27+
{
28+
public:
29+
XMLIdealMagneticFieldGeometryESProducer( const edm::ParameterSet& );
30+
~XMLIdealMagneticFieldGeometryESProducer();
31+
32+
typedef std::auto_ptr<DDCompactView> ReturnType;
33+
34+
ReturnType produce( const IdealMagneticFieldRecord& );
35+
36+
private:
37+
std::string rootDDName_; // this must be the form namespace:name
38+
std::string label_;
39+
40+
DDI::Store<DDName, DDI::Material*> matStore_;
41+
DDI::Store<DDName, DDI::Solid*> solidStore_;
42+
DDI::Store<DDName, DDI::LogicalPart*> lpStore_;
43+
DDI::Store<DDName, DDI::Specific*> specStore_;
44+
DDI::Store<DDName, DDRotationMatrix*> rotStore_;
45+
};
46+
47+
XMLIdealMagneticFieldGeometryESProducer::XMLIdealMagneticFieldGeometryESProducer( const edm::ParameterSet& iConfig )
48+
: rootDDName_(iConfig.getParameter<std::string>( "rootDDName" )),
49+
label_(iConfig.getParameter<std::string>( "label" ))
50+
{
51+
setWhatProduced( this );
52+
}
53+
54+
55+
XMLIdealMagneticFieldGeometryESProducer::~XMLIdealMagneticFieldGeometryESProducer( void )
56+
{}
57+
58+
XMLIdealMagneticFieldGeometryESProducer::ReturnType
59+
XMLIdealMagneticFieldGeometryESProducer::produce( const IdealMagneticFieldRecord& iRecord )
60+
{
61+
using namespace edm::es;
62+
63+
edm::ESTransientHandle<FileBlob> gdd;
64+
iRecord.getRecord<GeometryFileRcd>().get( label_, gdd );
65+
66+
DDName ddName(rootDDName_);
67+
DDLogicalPart rootNode(ddName);
68+
DDRootDef::instance().set(rootNode);
69+
ReturnType returnValue(new DDCompactView(rootNode));
70+
DDLParser parser(*returnValue);
71+
parser.getDDLSAX2FileHandler()->setUserNS(true);
72+
parser.clearFiles();
73+
74+
std::vector<unsigned char>* tb = (*gdd).getUncompressedBlob();
75+
76+
parser.parse(*tb, tb->size());
77+
78+
delete tb;
79+
80+
returnValue->lockdown();
81+
82+
return returnValue ;
83+
}
84+
85+
DEFINE_FWK_EVENTSETUP_MODULE( XMLIdealMagneticFieldGeometryESProducer );

0 commit comments

Comments
 (0)