00001 #include "FWCore/Framework/interface/EventSetupProvider.h" 00002 #include "FWCore/Framework/interface/recordGetImplementation.icc" 00003 00004 #include "SimG4Core/Geometry/interface/DDDWorld.h" 00005 #include "SimG4Core/Geometry/interface/DDG4Builder.h" 00006 00007 #include "DetectorDescription/Core/interface/DDCompactView.h" 00008 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00009 00010 #include "G4RunManagerKernel.hh" 00011 #include "G4PVPlacement.hh" 00012 00013 using namespace edm; 00014 00015 DDDWorld::DDDWorld(const DDCompactView* cpv, 00016 G4LogicalVolumeToDDLogicalPartMap & map, 00017 SensitiveDetectorCatalog & catalog, 00018 bool check) { 00019 00020 std::auto_ptr<DDG4Builder> theBuilder(new DDG4Builder(cpv, check)); 00021 00022 DDGeometryReturnType ret = theBuilder->BuildGeometry(); 00023 G4LogicalVolume * world = ret.logicalVolume(); 00024 G4VPhysicalVolume * pv = 00025 new G4PVPlacement(0,G4ThreeVector(),world,"DDDWorld",0,false,0); 00026 SetAsWorld(pv); 00027 map = ret.lvToDDLPMap(); 00028 catalog = ret.sdCatalog(); 00029 } 00030 00031 DDDWorld::~DDDWorld() {} 00032 00033 void DDDWorld::SetAsWorld(G4VPhysicalVolume * pv) { 00034 G4RunManagerKernel * kernel = G4RunManagerKernel::GetRunManagerKernel(); 00035 if (kernel != 0) kernel->DefineWorldVolume(pv); 00036 edm::LogInfo("SimG4CoreGeometry") << " World volume defined "; 00037 } 00038