diff --git a/DDSim/DD4hepSimulation.py b/DDSim/DD4hepSimulation.py index 9f4dc710a0518da2d6bff6e3f26c5e0f3028bca1..bfc4e87a21489d31bf7f5e74419b422f95420ded 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 d5f1b0435f0c6ad733988655d214fe1100b355bc..611912d80a77801e696766da34d04dc4fba70aab 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