Skip to content
Snippets Groups Projects
Meta.py 2.48 KiB
Newer Older
"""Helper object for configuring the LCIO output file (meta)"""

from DDSim.Helper.ConfigHelper import ConfigHelper

class Meta( ConfigHelper ):
  """Configuration for the LCIO output file settings"""
  def __init__( self ):
    super(Meta, self).__init__()
    self._eventParameters_EXTRA = {'help': "Event parameters to write in every event. " \
                                           "Use C/F/I ids to specify parameter type. E.g parameterName/F=0.42 to set a float parameter",
                                   'nargs': '+'}
    self.eventParameters = []
    self._runNumberOffset_EXTRA = {'help': "The run number offset to write in slcio output file. "\
                                           "E.g setting it to 42 will start counting runs from 42 instead of 0"}
    self.runNumberOffset = 0
    self._eventNumberOffset_EXTRA = {'help': "The event number offset to write in slcio output file."\
                                             " 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