Newer
Older
"""Helper object for particle gun properties"""
from DDSim.Helper.ConfigHelper import ConfigHelper
from SystemOfUnits import GeV
class Gun( ConfigHelper ):
"""Configuration for the DDG4 ParticleGun"""
def __init__( self ):
super(Gun, self).__init__()
self.energy = 10*GeV
self.particle = "mu-"
self.multiplicity = 1
Andre Sailer
committed
self._position = (0.0,0.0,0.0)
self._isotrop = False
self._direction = (0,0,1)
self.phiMin = None
self.phiMax = None
self.thetaMin = None
self.thetaMax = None
Andre Sailer
committed
@property
def isotrop( self ):
Andre Sailer
committed
""" isotropic distribution for the particle gun
use the options phiMin, phiMax, thetaMin, and thetaMax to limit the range of randomly distributed directions
if one of these options is not None the random distribution will be set to True and cannot be turned off!
"""
Andre Sailer
committed
return self._isotrop
@isotrop.setter
def isotrop( self, val ):
"""check that value is equivalent to bool"""
try:
self._isotrop = ConfigHelper.makeBool( val )
except RuntimeError:
raise RuntimeError( "malformed input '%s' for gun.isotrop " % val)
Andre Sailer
committed
@property
def direction( self ):
""" direction of the particle gun, 3 vector """
return self._direction
@direction.setter
def direction( self, val ):
""" make sure the direction is parseable by boost, i.e. (1.0, 1.0, 1.0) """
self._direction = ConfigHelper.makeTuple( val )
if len(self._direction) != 3:
raise RuntimeError(" gun.direction: malformed input '%s', needs to be a string representing a three vector " % val )
@property
def position( self ):
""" position of the particle gun, 3 vector """
return self._position
@position.setter
def position( self, val ):
"""check that the position is a three vector and can be parsed by ddg4"""
self._position = ConfigHelper.makeTuple( val )
if len(self._position) != 3:
raise RuntimeError(" gun.position: malformed input '%s', needs to be a string representing a three vector " % val )