From 6b755fa9b5dfbbdbe6eee4c3c4635a4e9a9fabe3 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Mon, 12 Aug 2019 22:23:58 +0800 Subject: [PATCH] WIP: move the construction of world's logical volume into a DetElemTool. --- Examples/options/tut_detsim.py | 8 ++++ Simulation/DetSimCore/src/DetSimAlg.cpp | 2 +- .../DetSimCore/src/DetectorConstruction.cpp | 8 ++-- .../DetSimCore/src/DetectorConstruction.h | 7 ++- Simulation/DetSimGeom/CMakeLists.txt | 18 ++++++++ .../DetSimGeom/src/WorldDetElemTool.cpp | 46 +++++++++++++++++++ Simulation/DetSimGeom/src/WorldDetElemTool.h | 23 ++++++++++ 7 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 Simulation/DetSimGeom/CMakeLists.txt create mode 100644 Simulation/DetSimGeom/src/WorldDetElemTool.cpp create mode 100644 Simulation/DetSimGeom/src/WorldDetElemTool.h diff --git a/Examples/options/tut_detsim.py b/Examples/options/tut_detsim.py index dae38dd9..b536129a 100644 --- a/Examples/options/tut_detsim.py +++ b/Examples/options/tut_detsim.py @@ -6,6 +6,9 @@ from Configurables import DetSimSvc detsimsvc = DetSimSvc("DetSimSvc") +# from Configurables import ExampleAnaElemTool +# example_anatool = ExampleAnaElemTool("ExampleAnaElemTool") + from Configurables import DetSimAlg detsimalg = DetSimAlg("DetSimAlg") @@ -15,6 +18,11 @@ detsimalg.VisMacs = ["vis.mac"] detsimalg.RunCmds = [ "/tracking/verbose 1", ] +detsimalg.AnaElems = [ + # example_anatool.name() + "ExampleAnaElemTool" +] +detsimalg.RootDetElem = "WorldDetElemTool" # ApplicationMgr from Configurables import ApplicationMgr diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index 49eeedab..34420d42 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.cpp +++ b/Simulation/DetSimCore/src/DetSimAlg.cpp @@ -42,7 +42,7 @@ DetSimAlg::initialize() { // Detector Construction m_root_detelem = ToolHandle<IDetElemTool>(m_root_det_elem.value()); - runmgr->SetUserInitialization(new DetectorConstruction()); + runmgr->SetUserInitialization(new DetectorConstruction(m_root_detelem)); // Physics List G4VUserPhysicsList *physicsList = nullptr; if (m_physics_lists_name.value() == "CEPC") { diff --git a/Simulation/DetSimCore/src/DetectorConstruction.cpp b/Simulation/DetSimCore/src/DetectorConstruction.cpp index 3f53c580..f365b474 100644 --- a/Simulation/DetSimCore/src/DetectorConstruction.cpp +++ b/Simulation/DetSimCore/src/DetectorConstruction.cpp @@ -25,7 +25,8 @@ #include "G4ios.hh" -DetectorConstruction::DetectorConstruction() { +DetectorConstruction::DetectorConstruction(ToolHandle<IDetElemTool>& root_elem) + : m_root_detelem(root_elem) { } @@ -49,8 +50,8 @@ DetectorConstruction::Construct() { // ======================================================================= // World // ======================================================================= - G4VSolid* solidWorld= new G4Box("sWorld", 60*m, 60*m, 60*m); - G4LogicalVolume* logicWorld= new G4LogicalVolume( solidWorld, Galactic, "lWorld", 0, 0, 0); + G4LogicalVolume* logicWorld = m_root_detelem->getLV(); + G4VPhysicalVolume* physiWorld = new G4PVPlacement(0, // no rotation G4ThreeVector(), // at (0,0,0) logicWorld, // its logical volume @@ -60,4 +61,5 @@ DetectorConstruction::Construct() { 0); // no field specific to volume return physiWorld; + } diff --git a/Simulation/DetSimCore/src/DetectorConstruction.h b/Simulation/DetSimCore/src/DetectorConstruction.h index 8418f6d4..f757cb32 100644 --- a/Simulation/DetSimCore/src/DetectorConstruction.h +++ b/Simulation/DetSimCore/src/DetectorConstruction.h @@ -1,6 +1,9 @@ #ifndef DetectorConstruction_h #define DetectorConstruction_h +#include "GaudiKernel/ToolHandle.h" +#include "DetSimInterface/IDetElemTool.h" + #include "globals.hh" #include "G4VUserDetectorConstruction.hh" #include "G4OpticalSurface.hh" @@ -13,13 +16,13 @@ class DetectorConstruction: public G4VUserDetectorConstruction { public: - DetectorConstruction(); + DetectorConstruction(ToolHandle<IDetElemTool>& root_elem); ~DetectorConstruction(); public: G4VPhysicalVolume* Construct(); private: - + ToolHandle<IDetElemTool>& m_root_detelem; }; #endif diff --git a/Simulation/DetSimGeom/CMakeLists.txt b/Simulation/DetSimGeom/CMakeLists.txt new file mode 100644 index 00000000..5169f233 --- /dev/null +++ b/Simulation/DetSimGeom/CMakeLists.txt @@ -0,0 +1,18 @@ + +gaudi_subdir(DetSimGeom v0r0) + +gaudi_depends_on_subdirs( + Simulation/DetSimInterface +) + +find_package(Geant4 REQUIRED ui_all vis_all) +include(${Geant4_USE_FILE}) + +set(DetSimGeom_srcs + src/WorldDetElemTool.cpp +) + +gaudi_add_module(DetSimGeom ${DetSimGeom_srcs} + INCLUDE_DIRS DetSimInterface GaudiKernel Geant4 + LINK_LIBRARIES DetSimInterface GaudiKernel Geant4 +) diff --git a/Simulation/DetSimGeom/src/WorldDetElemTool.cpp b/Simulation/DetSimGeom/src/WorldDetElemTool.cpp new file mode 100644 index 00000000..93b92a93 --- /dev/null +++ b/Simulation/DetSimGeom/src/WorldDetElemTool.cpp @@ -0,0 +1,46 @@ +#include "WorldDetElemTool.h" + +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +#include "G4Isotope.hh" +#include "G4Element.hh" +#include "G4MaterialPropertiesTable.hh" + +#include "G4Box.hh" +#include "G4Sphere.hh" +#include "G4Tubs.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4SDManager.hh" +#include "G4Region.hh" +#include "G4RegionStore.hh" +#include "G4LogicalBorderSurface.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4OpticalSurface.hh" + + +DECLARE_COMPONENT(WorldDetElemTool) + +G4LogicalVolume* +WorldDetElemTool::getLV() { + + G4Material* Galactic = G4Material::GetMaterial("Galactic"); + + G4VSolid* solidWorld= new G4Box("sWorld", 60*m, 60*m, 60*m); + G4LogicalVolume* logicWorld= new G4LogicalVolume( solidWorld, Galactic, "lWorld", 0, 0, 0); + + return logicWorld; +} + +StatusCode +WorldDetElemTool::initialize() { + StatusCode sc; + return sc; +} + +StatusCode +WorldDetElemTool::finalize() { + StatusCode sc; + return sc; +} diff --git a/Simulation/DetSimGeom/src/WorldDetElemTool.h b/Simulation/DetSimGeom/src/WorldDetElemTool.h new file mode 100644 index 00000000..7612e75e --- /dev/null +++ b/Simulation/DetSimGeom/src/WorldDetElemTool.h @@ -0,0 +1,23 @@ +#ifndef WorldDetElemTool_h +#define WorldDetElemTool_h + +#include "GaudiKernel/AlgTool.h" +#include "DetSimInterface/IDetElemTool.h" + +class WorldDetElemTool: public extends<AlgTool, IDetElemTool> { + +public: + using extends::extends; + + G4LogicalVolume* getLV() override; + + StatusCode initialize() override; + StatusCode finalize() override; + +private: + double m_x; + double m_y; + double m_z; +}; + +#endif -- GitLab