From 81e56deac8fe220ca977bb73ba512d2a340d00af Mon Sep 17 00:00:00 2001
From: Ete Remi <remi.ete@gmail.com>
Date: Wed, 28 Feb 2018 14:59:06 +0100
Subject: [PATCH] Moved event parameters cmd line parsing to Meta helper method

---
 DDSim/DD4hepSimulation.py | 37 +------------------------------------
 DDSim/Helper/Meta.py      | 30 +++++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py
index 9f4dc710a..bfc4e87a2 100644
--- a/DDSim/DD4hepSimulation.py
+++ b/DDSim/DD4hepSimulation.py
@@ -333,7 +333,7 @@ class DD4hepSimulation(object):
     if self.outputFile.endswith(".slcio"):
       lcOut = simple.setupLCIOOutput('LcioOutput', self.outputFile)
       lcOut.RunHeader = self.__addParametersToRunHeader()
-      lcOut.EventParametersString, lcOut.EventParametersInt, lcOut.EventParametersFloat = self.__addParametersToEvent( self.meta.eventParameters )
+      lcOut.EventParametersString, lcOut.EventParametersInt, lcOut.EventParametersFloat = self.meta.parseEventParameters()
       lcOut.RunNumberOffset = self.meta.runNumberOffset if self.meta.runNumberOffset > 0 else 0
       lcOut.EventNumberOffset = self.meta.eventNumberOffset if self.meta.eventNumberOffset > 0 else 0
     elif self.outputFile.endswith(".root"):
@@ -623,41 +623,6 @@ class DD4hepSimulation(object):
 
     return runHeader
 
-
-  def __addParametersToEvent(self, parameters):
-    """ extract event parameters from the command line, to write in the header
-    of each event.
-    
-    :param parameters: list of command line parameters to parse
-    """
-    stringParameters, intParameters, floatParameters, allParameters = {}, {}, {}, []
-    for p in parameters:
-      parameterAndValue = p.split( "=", 1 )
-      if len(parameterAndValue) != 2:
-        raise SyntaxError("ERROR: Couldn't decode event parameter '%s'" %(p))
-      parameterAndType = parameterAndValue[0].split( "/", 1 )
-      if len(parameterAndType) != 2:
-        raise SyntaxError("ERROR: Couldn't decode event parameter '%s'" %(p))
-      pname = parameterAndType[0]
-      ptype = parameterAndType[1]
-      pvalue = parameterAndValue[1]
-      if ptype.lower() not in ["c", "f", "i"]:
-        raise ValueError("ERROR: Event parameter '%s' with invalid type '%s'" %(pname, ptype))
-      if pname in allParameters:
-        raise RuntimeError("ERROR: Event parameter '%s' specified twice" %(pname))
-      if not pvalue:
-        raise RuntimeError("ERROR: Event parameter '%s' has empty value" %(pname))
-      allParameters.append(pname)
-      print "Event parameter '%s', type '%s', value='%s'"%(pname, ptype, pvalue)
-      if ptype.lower() == "c":
-        stringParameters[pname] = pvalue
-      elif ptype.lower() == "f":
-        floatParameters[pname] = pvalue
-      elif ptype.lower() == "i":
-        intParameters[pname] = pvalue
-    return stringParameters, intParameters, floatParameters
-            
-
   def __setupSensitiveDetectors(self, detectors, setupFuction, defaultFilter=None):
     """ attach sensitive detector actions for all subdetectors
     can be steered with the `Action` ConfigHelpers
diff --git a/DDSim/Helper/Meta.py b/DDSim/Helper/Meta.py
index d5f1b0435..611912d80 100644
--- a/DDSim/Helper/Meta.py
+++ b/DDSim/Helper/Meta.py
@@ -17,4 +17,32 @@ class Meta( ConfigHelper ):
                                              " E.g setting it to 42 will start counting events from 42 instead of 0"}
     self.eventNumberOffset = 0
 
-
+  def parseEventParameters(self):
+    """Parse the event parameters and return 3 event parameter dictionnaries, respectively for string, int and float parameters"""
+    stringParameters, intParameters, floatParameters, allParameters = {}, {}, {}, []
+    for p in self.eventParameters:
+      parameterAndValue = p.split( "=", 1 )
+      if len(parameterAndValue) != 2:
+        raise SyntaxError("ERROR: Couldn't decode event parameter '%s'" %(p))
+      parameterAndType = parameterAndValue[0].split( "/", 1 )
+      if len(parameterAndType) != 2:
+        raise SyntaxError("ERROR: Couldn't decode event parameter '%s'" %(p))
+      pname = parameterAndType[0]
+      ptype = parameterAndType[1]
+      pvalue = parameterAndValue[1]
+      if ptype.lower() not in ["c", "f", "i"]:
+        raise ValueError("ERROR: Event parameter '%s' with invalid type '%s'" %(pname, ptype))
+      if pname in allParameters:
+        raise RuntimeError("ERROR: Event parameter '%s' specified twice" %(pname))
+      if not pvalue:
+        raise RuntimeError("ERROR: Event parameter '%s' has empty value" %(pname))
+      allParameters.append(pname)
+      print "Event parameter '%s', type '%s', value='%s'"%(pname, ptype, pvalue)
+      if ptype.lower() == "c":
+        stringParameters[pname] = pvalue
+      elif ptype.lower() == "f":
+        floatParameters[pname] = pvalue
+      elif ptype.lower() == "i":
+        intParameters[pname] = pvalue
+    return stringParameters, intParameters, floatParameters
+    
\ No newline at end of file
-- 
GitLab