diff --git a/DDG4/python/DDSim/DD4hepSimulation.py b/DDG4/python/DDSim/DD4hepSimulation.py index bf7057549d2a8bc3617f49c5eadd5a6f64d112e2..8c25b442aa698a1f5283d0abee1bfe6979d3816b 100644 --- a/DDG4/python/DDSim/DD4hepSimulation.py +++ b/DDG4/python/DDSim/DD4hepSimulation.py @@ -28,6 +28,7 @@ from DDSim.Helper.ConfigHelper import ConfigHelper from DDSim.Helper.MagneticField import MagneticField from DDSim.Helper.ParticleHandler import ParticleHandler from DDSim.Helper.Gun import Gun +from DDSim.Helper.UI import UI import argparse import ddsix as six import logging @@ -99,6 +100,7 @@ class DD4hepSimulation(object): self.geometry = Geometry() self.filter = Filter() self.physics = Physics() + self.ui = UI() self._argv = None @@ -331,12 +333,11 @@ class DD4hepSimulation(object): exit(1) # User Configuration for the Geant4Phases - uiaction.ConfigureCommands = self.physics._commandsConfigure - uiaction.TerminateCommands = self.physics._commandsTerminate - uiaction.PostRunCommands = self.physics._commandsPostRun - uiaction.PreRunCommands = self.physics._commandsPreRun - uiaction.InitializeCommands = self.physics._commandsInitialize - + uiaction.ConfigureCommands = self.ui._commandsConfigure + uiaction.InitializeCommands = self.ui._commandsInitialize + uiaction.PostRunCommands = self.ui._commandsPostRun + uiaction.PreRunCommands = self.ui._commandsPreRun + uiaction.TerminateCommands = self.ui._commandsTerminate kernel.NumEvents = self.numberOfEvents diff --git a/DDG4/python/DDSim/Helper/Physics.py b/DDG4/python/DDSim/Helper/Physics.py index 73ced27f93ea7588b5a7e81679de3bceb9618ae5..db1e82e335f65b7df7292795e1f678489e078fb7 100644 --- a/DDG4/python/DDSim/Helper/Physics.py +++ b/DDG4/python/DDSim/Helper/Physics.py @@ -30,12 +30,6 @@ class Physics(ConfigHelper): self._zeroTimePDGs = {11, 13, 15, 17} self._userFunctions = [] - self._commandsConfigure = [] - self._commandsTerminate = [] - self._commandsPostRun = [] - self._commandsPreRun = [] - self._commandsInitialize = [] - @property def rejectPDGs(self): """Set of PDG IDs that will not be passed from the input record to Geant4. @@ -122,46 +116,6 @@ class Physics(ConfigHelper): def list(self, val): # noqa: A003 self._list = val - @property - def commandsConfigure(self): - """List of UI commands to run during the 'Configure' phase.""" - return self._commandsConfigure - @commandsConfigure.setter - def commandsConfigure(self, val): - self._commandsConfigure = self.makeList(val) - - @property - def commandsInitialize(self): - """List of UI commands to run during the 'Initialize' phase.""" - return self._commandsInitialize - @commandsInitialize.setter - def commandsInitialize(self, val): - self._commandsInitialize = self.makeList(val) - - @property - def commandsTerminate(self): - """List of UI commands to run during the 'Terminate' phase.""" - return self._commandsTerminate - @commandsTerminate.setter - def commandsTerminate(self, val): - self._commandsTerminate = self.makeList(val) - - @property - def commandsPreRun(self): - """List of UI commands to run during the 'PreRun' phase.""" - return self._commandsPreRun - @commandsPreRun.setter - def commandsPreRun(self, val): - self._commandsPreRun = self.makeList(val) - - @property - def commandsPostRun(self): - """List of UI commands to run during the 'PostRun' phase.""" - return self._commandsPostRun - @commandsPostRun.setter - def commandsPostRun(self, val): - self._commandsPostRun = self.makeList(val) - def setupPhysics(self, kernel, name=None): seq = kernel.physicsList() seq.extends = name if name is not None else self.list diff --git a/DDG4/python/DDSim/Helper/UI.py b/DDG4/python/DDSim/Helper/UI.py new file mode 100644 index 0000000000000000000000000000000000000000..053cb84f320563495488152b910b195f96b71475 --- /dev/null +++ b/DDG4/python/DDSim/Helper/UI.py @@ -0,0 +1,76 @@ +"""Helper object for configuration of Geant4 commands to run during different phases.""" + +from DDSim.Helper.ConfigHelper import ConfigHelper + + +class UI(ConfigHelper): + """Configuration for setting commands to run during different phases. + + In this section, one can configure commands that should be run during the different phases of the Geant4 execution. + + 1. Configuration + 2. Initialization + 3. Pre Run + 4. Post Run + 5. Terminate / Finalization + + For example, one can add + + >>> SIM.ui.commandsConfigure = ['/physics_lists/em/SyncRadiation true'] + + Further details should be taken from the Geant4 documentation. + """ + + def __init__(self): + super(UI, self).__init__() + + self._commandsConfigure = [] + self._commandsInitialize = [] + self._commandsPostRun = [] + self._commandsPreRun = [] + self._commandsTerminate = [] + + @property + def commandsConfigure(self): + """List of UI commands to run during the 'Configure' phase.""" + return self._commandsConfigure + + @commandsConfigure.setter + def commandsConfigure(self, val): + self._commandsConfigure = self.makeList(val) + + @property + def commandsInitialize(self): + """List of UI commands to run during the 'Initialize' phase.""" + return self._commandsInitialize + + @commandsInitialize.setter + def commandsInitialize(self, val): + self._commandsInitialize = self.makeList(val) + + @property + def commandsPostRun(self): + """List of UI commands to run during the 'PostRun' phase.""" + return self._commandsPostRun + + @commandsPostRun.setter + def commandsPostRun(self, val): + self._commandsPostRun = self.makeList(val) + + @property + def commandsPreRun(self): + """List of UI commands to run during the 'PreRun' phase.""" + return self._commandsPreRun + + @commandsPreRun.setter + def commandsPreRun(self, val): + self._commandsPreRun = self.makeList(val) + + @property + def commandsTerminate(self): + """List of UI commands to run during the 'Terminate' phase.""" + return self._commandsTerminate + + @commandsTerminate.setter + def commandsTerminate(self, val): + self._commandsTerminate = self.makeList(val)