From eea3d3a7afef6f3f3f42a21fbb94a38140548e49 Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Fri, 4 Mar 2016 17:09:51 +0000
Subject: [PATCH] DDSim: Add logic to add help for non-property helper
 variables, add logic to add choices for all helper options

---
 DDSim/DD4hepSimulation.py    |  3 ++-
 DDSim/Helper/ConfigHelper.py | 10 ++++++++--
 DDSim/Helper/Gun.py          |  4 ++++
 DDSim/Helper/Output.py       |  7 +++++++
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py
index b27dba242..23ebac58c 100644
--- a/DDSim/DD4hepSimulation.py
+++ b/DDSim/DD4hepSimulation.py
@@ -490,7 +490,8 @@ class DD4hepSimulation(object):
                               action="store",
                               dest="%s.%s" % (name, var),
                               default = valAndDoc[0],
-                              help = valAndDoc[1]
+                              help = valAndDoc[1],
+                              choices = valAndDoc[2],
                               # type = type(val),
                              )
 
diff --git a/DDSim/Helper/ConfigHelper.py b/DDSim/Helper/ConfigHelper.py
index 03a27801b..540fbeeeb 100644
--- a/DDSim/Helper/ConfigHelper.py
+++ b/DDSim/Helper/ConfigHelper.py
@@ -19,12 +19,18 @@ class ConfigHelper( object ):
     allVars = vars(self)
     for var,val in allVars.iteritems():
       if not var.startswith('_'):
-        finalVars[var] = (val,'')
+        helpName = "_%s_HELP" % var
+        optName = "_%s_OPTIONS" % var
+        doc = getattr(self, helpName) if hasattr(self, helpName) else ''
+        choices = getattr(self, optName) if hasattr(self, optName) else None
+        finalVars[var] = (val, doc, choices)
 
     # now get things defined with @property
     props = [(p, getattr(type(self),p)) for p in dir(type(self)) if isinstance(getattr(type(self),p),property)]
     for propName, prop in props:
-      finalVars[propName] = (getattr(self, propName), prop.__doc__)
+      optName =  "_%s_OPTIONS" % propName
+      choices = getattr(self, optName) if hasattr(self, optName) else None
+      finalVars[propName] = (getattr(self, propName), prop.__doc__, choices)
 
     return finalVars
 
diff --git a/DDSim/Helper/Gun.py b/DDSim/Helper/Gun.py
index bbeff4616..6c33c2ffc 100644
--- a/DDSim/Helper/Gun.py
+++ b/DDSim/Helper/Gun.py
@@ -13,10 +13,14 @@ class Gun( ConfigHelper ):
     self._position = (0.0,0.0,0.0)
     self._isotrop = False
     self._direction = (0,0,1)
+
+    self._phiMin_HELP = "Minimal azimuthal angle for random distribution"
     self.phiMin = None
     self.phiMax = None
     self.thetaMin = None
     self.thetaMax = None
+
+    self._distribution_OPTIONS = ['uniform', 'cos(theta)', 'eta', 'pseudorapidity', 'ffbar'] ## (1+cos^2 theta)
     self._distribution = None
 
 
diff --git a/DDSim/Helper/Output.py b/DDSim/Helper/Output.py
index 93aed3281..747e4c540 100644
--- a/DDSim/Helper/Output.py
+++ b/DDSim/Helper/Output.py
@@ -7,9 +7,16 @@ class Output( ConfigHelper ):
   """Configuration for the output levels of DDG4 components"""
   def __init__( self ):
     super(Output, self).__init__()
+    self._kernel_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._kernel = outputLevel('INFO')
+
+    self._part_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._part = outputLevel('INFO')
+
+    self._inputStage_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._inputStage = outputLevel('INFO')
+
+    self._random_OPTIONS = (1,2,3,4,5,6,7,'VERBOSE','DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL', 'ALWAYS')
     self._random = outputLevel('FATAL')
 
   @property
-- 
GitLab