From 4fc73eaf493f1511ef27a03eccd65425f55fe26a Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Fri, 9 Oct 2015 17:07:06 +0000
Subject: [PATCH] DDSim: add configuration for random generator

---
 DDSim/DD4hepSimulation.py | 17 +++++++++++++++++
 DDSim/Helper/Output.py    |  9 +++++++++
 DDSim/Helper/Random.py    | 13 +++++++++++++
 3 files changed, 39 insertions(+)
 create mode 100644 DDSim/Helper/Random.py

diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py
index caf11cb3e..089f840a3 100644
--- a/DDSim/DD4hepSimulation.py
+++ b/DDSim/DD4hepSimulation.py
@@ -37,6 +37,7 @@ from DDSim.Helper.Output import Output
 from DDSim.Helper.MagneticField import MagneticField
 from DDSim.Helper.ConfigHelper import ConfigHelper
 from DDSim.Helper.Action import Action
+from DDSim.Helper.Random import Random
 import os
 import sys
 
@@ -67,6 +68,7 @@ class DD4hepSimulation(object):
 
     ## objects for extended configuration option
     self.output = Output()
+    self.random = Random()
     self.gun = Gun()
     self.part = ParticleHandler()
     self.field = MagneticField()
@@ -285,6 +287,11 @@ class DD4hepSimulation(object):
 
     actionList = []
 
+    ##configure the random seed
+    rndm = DDG4.Action(kernel,'Geant4Random/R1')
+    self.__setupRandomGenerator(rndm)
+    rndm.initialize()
+
     if self.enableGun:
       gun = DDG4.GeneratorAction(kernel,"Geant4ParticleGun/"+"Gun")
       self.__setGunOptions( gun )
@@ -434,6 +441,16 @@ class DD4hepSimulation(object):
     gun.isotrop      = self.gun.isotrop
     gun.direction    = self.gun.direction
 
+  def __setupRandomGenerator(self, rndm):
+    """set the properties for the random number generator"""
+    if self.random.seed is not None:
+      rndm.Seed = self.random.seed
+      rndm.Luxury = self.random.luxury
+    if self.random.type is not None:
+      rndm.Type = self.random.type
+    if self.output.random <= 3:
+      rndm.showStatus()
+
   def __setMagneticFieldOptions(self, simple):
     """ create and configure the magnetic tracking setup """
     field = simple.addConfig('Geant4FieldTrackingSetupAction/MagFieldTrackingSetup')
diff --git a/DDSim/Helper/Output.py b/DDSim/Helper/Output.py
index a4e71efe7..f55c799ae 100644
--- a/DDSim/Helper/Output.py
+++ b/DDSim/Helper/Output.py
@@ -10,6 +10,7 @@ class Output( ConfigHelper ):
     self._kernel = outputLevel('INFO')
     self._part = outputLevel('INFO')
     self._inputStage = outputLevel('INFO')
+    self._random = outputLevel('FATAL')
 
   @property
   def inputStage( self ):
@@ -34,3 +35,11 @@ class Output( ConfigHelper ):
   @part.setter
   def part(self, level):
     self._part = outputLevel(level)
+
+  @property
+  def random( self ):
+    """Output level for Random Number Generator setup"""
+    return self._random
+  @random.setter
+  def random(self, level):
+    self._random = outputLevel(level)
diff --git a/DDSim/Helper/Random.py b/DDSim/Helper/Random.py
new file mode 100644
index 000000000..6f3102628
--- /dev/null
+++ b/DDSim/Helper/Random.py
@@ -0,0 +1,13 @@
+"""Helper object for random number generator objects"""
+
+from DDSim.Helper.ConfigHelper import ConfigHelper
+
+class Random (ConfigHelper):
+  """Properties for random number generator"""
+  def __init__ (self):
+    super(Random, self).__init__()
+    self.seed = None
+    self.type = None
+    self.luxury = 1
+    self.replace_gRandom = True
+    self.file = None
-- 
GitLab