From 2d4a4f880bf9b8fd211c2bf29ba47d8f5f215f8c Mon Sep 17 00:00:00 2001 From: Luis Antonio Obis Aparicio Date: Fri, 15 Dec 2023 21:04:32 -0600 Subject: [PATCH] working on physics list --- .../include/geant4_application/Application.h | 5 ++-- .../geant4_application/DetectorConstruction.h | 1 + .../include/geant4_application/PhysicsList.h | 3 +++ src/geant4_application/src/Application.cpp | 11 +++++++++ .../src/DetectorConstruction.cpp | 9 +++++++ src/geant4_application/src/PhysicsList.cpp | 24 +++++++++++++++++++ src/geant4_python_application/physics.py | 8 +++++++ src/python/module.cpp | 3 ++- 8 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/geant4_python_application/physics.py diff --git a/src/geant4_application/include/geant4_application/Application.h b/src/geant4_application/include/geant4_application/Application.h index 448b723..5180aa2 100644 --- a/src/geant4_application/include/geant4_application/Application.h +++ b/src/geant4_application/include/geant4_application/Application.h @@ -63,11 +63,12 @@ class Application { static void ListCommands(const std::string& directory); static G4UImanager* GetUIManager(); + static std::filesystem::path GetTemporaryApplicationDirectory(); + const PrimaryGeneratorAction& GetPrimaryGeneratorAction() const; const StackingAction& GetStackingAction() const; const DetectorConstruction& GetDetectorConstruction() const; - - static std::filesystem::path GetTemporaryApplicationDirectory(); + const PhysicsList& GetPhysicsList() const; }; }// namespace geant4_app diff --git a/src/geant4_application/include/geant4_application/DetectorConstruction.h b/src/geant4_application/include/geant4_application/DetectorConstruction.h index 3a2d79e..908806a 100644 --- a/src/geant4_application/include/geant4_application/DetectorConstruction.h +++ b/src/geant4_application/include/geant4_application/DetectorConstruction.h @@ -29,6 +29,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction { void SetGDML(const std::string& gdml); static std::set GetMaterialNames(); + static std::set GetNISTMaterialNames(); static std::set GetLogicalVolumeNames(); static std::set GetPhysicalVolumeNames(); diff --git a/src/geant4_application/include/geant4_application/PhysicsList.h b/src/geant4_application/include/geant4_application/PhysicsList.h index c8fab88..cd34eff 100644 --- a/src/geant4_application/include/geant4_application/PhysicsList.h +++ b/src/geant4_application/include/geant4_application/PhysicsList.h @@ -18,5 +18,8 @@ namespace geant4_app { class PhysicsList : public G4VModularPhysicsList { public: PhysicsList(); + + static std::set GetPhysicsListNames(); + static std::set GetProcessNames(); }; }// namespace geant4_app diff --git a/src/geant4_application/src/Application.cpp b/src/geant4_application/src/Application.cpp index 9c538fd..c7eeb8e 100644 --- a/src/geant4_application/src/Application.cpp +++ b/src/geant4_application/src/Application.cpp @@ -195,6 +195,17 @@ const DetectorConstruction& Application::GetDetectorConstruction() const { return *detectorConstruction; } +const PhysicsList& Application::GetPhysicsList() const { + if (runManager == nullptr) { + throw runtime_error("RunManager needs to be set up first"); + } + const auto physicsList = dynamic_cast(runManager->GetUserPhysicsList()); + if (physicsList == nullptr) { + throw runtime_error("Physics list is not available"); + } + return *physicsList; +} + filesystem::path Application::GetTemporaryApplicationDirectory() { const auto dir = filesystem::temp_directory_path() / "geant4_python_application"; if (!filesystem::exists(dir)) { diff --git a/src/geant4_application/src/DetectorConstruction.cpp b/src/geant4_application/src/DetectorConstruction.cpp index 14b5b83..ba26ca8 100644 --- a/src/geant4_application/src/DetectorConstruction.cpp +++ b/src/geant4_application/src/DetectorConstruction.cpp @@ -101,6 +101,15 @@ set DetectorConstruction::GetMaterialNames() { return names; } +set DetectorConstruction::GetNISTMaterialNames() { + set names; + const auto materialTable = G4NistManager::Instance()->GetNistMaterialNames(); + for (const auto& material: materialTable) { + names.insert(material); + } + return names; +} + set DetectorConstruction::GetLogicalVolumeNames() { set names; const auto logicalVolumeTable = G4LogicalVolumeStore::GetInstance(); diff --git a/src/geant4_application/src/PhysicsList.cpp b/src/geant4_application/src/PhysicsList.cpp index 90b4ab1..6e7d05d 100644 --- a/src/geant4_application/src/PhysicsList.cpp +++ b/src/geant4_application/src/PhysicsList.cpp @@ -1,17 +1,29 @@ #include "geant4_application/PhysicsList.h" +#include #include #include #include #include #include +#include #include +#include +#include #include +#include #include +#include +#include +#include +#include #include #include +#include #include +#include +#include using namespace geant4_app; @@ -42,3 +54,15 @@ PhysicsList::PhysicsList() : G4VModularPhysicsList() { // Neutron tracking cut RegisterPhysics(new G4NeutronTrackingCut()); } + +std::set PhysicsList::GetPhysicsListNames() { + std::set names; + // TODO + return names; +} + +std::set PhysicsList::GetProcessNames() { + std::set names; + // TODO + return names; +} diff --git a/src/geant4_python_application/physics.py b/src/geant4_python_application/physics.py new file mode 100644 index 0000000..d28d590 --- /dev/null +++ b/src/geant4_python_application/physics.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from geant4_python_application import Application + + +class Physics: + def __init__(self, application: Application): + self._application = application diff --git a/src/python/module.cpp b/src/python/module.cpp index 76a4a26..89fc883 100644 --- a/src/python/module.cpp +++ b/src/python/module.cpp @@ -35,7 +35,8 @@ PYBIND11_MODULE(_geant4_application, m) { .def_static("list_commands", &Application::ListCommands, py::arg("directory") = "/") .def_property_readonly("generator", &Application::GetPrimaryGeneratorAction, py::return_value_policy::reference_internal) .def_property_readonly("detector", &Application::GetDetectorConstruction, py::return_value_policy::reference_internal) - .def_property_readonly("stacking", &Application::GetStackingAction, py::return_value_policy::reference_internal); + .def_property_readonly("stacking", &Application::GetStackingAction, py::return_value_policy::reference_internal) + .def_property_readonly("physics", &Application::GetPhysicsList, py::return_value_policy::reference_internal); py::class_(m, "PrimaryGeneratorAction") .def_property_static(