#!/usr/bin/env python
"""
.. py:currentmodule:: FileFormat.RegionDimensions
.. moduleauthor:: Hendrix Demers <hendrix.demers@mail.mcgill.ca>
MCXRay region dimensions input file.
"""
# Script information for the file.
__author__ = "Hendrix Demers (hendrix.demers@mail.mcgill.ca)"
__version__ = ""
__date__ = ""
__copyright__ = "Copyright (c) 2012 Hendrix Demers"
__license__ = ""
# Subversion informations for the file.
__svnRevision__ = "$Revision$"
__svnDate__ = "$Date$"
__svnId__ = "$Id$"
# Standard library modules.
# Third party modules.
# Local modules.
# Project modules
import pymcxray.FileFormat.RegionType as RegionType
# Globals and constants variables.
REGION_DIMENSION_MINIMUM_X = "minimumX"
REGION_DIMENSION_MAXIMUM_X = "maximumX"
REGION_DIMENSION_MINIMUM_Y = "minimumY"
REGION_DIMENSION_MAXIMUM_Y = "maximumY"
REGION_DIMENSION_MINIMUM_Z = "minimumZ"
REGION_DIMENSION_MAXIMUM_Z = "maximumZ"
REGION_DIMENSION_POSITION_X = "positionX"
REGION_DIMENSION_POSITION_Y = "positionY"
REGION_DIMENSION_POSITION_Z = "positionZ"
REGION_DIMENSION_DIRECTION_X = "directionX"
REGION_DIMENSION_DIRECTION_Y = "directionY"
REGION_DIMENSION_DIRECTION_Z = "directionZ"
REGION_DIMENSION_LENGTH = "length"
REGION_DIMENSION_RADIUS = "radius"
KEY_REGION_PARAMETERS = "RegionParameters"
[docs]class RegionDimensions(object):
def __init__(self, parameters=None):
self._keys = self._createKeys()
self._parameters = {}
if parameters is not None:
assert len(parameters) == len(self._keys)
for key, parameter in zip(self._keys, parameters):
self._parameters[key] = parameter
def _createKeys(self): # pragma: no cover
raise NotImplementedError
[docs] def createLineOldVersion(self):
items = []
for key in self._keys:
items.append(self._parameters[key])
line = self.getLineFormat() % tuple(items)
return line
[docs] def createLineWithKey(self):
key = KEY_REGION_PARAMETERS
value = self.createLineOldVersion()
line = "%s=%s" % (key, value)
return line
def __eq__(self, other):
if len(self._parameters) == len(other._parameters) and self._parameters == other._parameters:
return True
else:
return False
[docs]class RegionDimensionsBox(RegionDimensions):
def _createKeys(self):
keys = []
keys.append(REGION_DIMENSION_MINIMUM_X)
keys.append(REGION_DIMENSION_MAXIMUM_X)
keys.append(REGION_DIMENSION_MINIMUM_Y)
keys.append(REGION_DIMENSION_MAXIMUM_Y)
keys.append(REGION_DIMENSION_MINIMUM_Z)
keys.append(REGION_DIMENSION_MAXIMUM_Z)
return keys
@property
def minimumX(self):
return self._parameters[REGION_DIMENSION_MINIMUM_X]
@minimumX.setter
def minimumX(self, minimumX):
self._parameters[REGION_DIMENSION_MINIMUM_X] = minimumX
@property
def maximumX(self):
return self._parameters[REGION_DIMENSION_MAXIMUM_X]
@maximumX.setter
def maximumX(self, maximumX):
self._parameters[REGION_DIMENSION_MAXIMUM_X] = maximumX
@property
def minimumY(self):
return self._parameters[REGION_DIMENSION_MINIMUM_Y]
@minimumY.setter
def minimumY(self, minimumY):
self._parameters[REGION_DIMENSION_MINIMUM_Y] = minimumY
@property
def maximumY(self):
return self._parameters[REGION_DIMENSION_MAXIMUM_Y]
@maximumY.setter
def maximumY(self, maximumY):
self._parameters[REGION_DIMENSION_MAXIMUM_Y] = maximumY
@property
def minimumZ(self):
return self._parameters[REGION_DIMENSION_MINIMUM_Z]
@minimumZ.setter
def minimumZ(self, minimumZ):
self._parameters[REGION_DIMENSION_MINIMUM_Z] = minimumZ
@property
def maximumZ(self):
return self._parameters[REGION_DIMENSION_MAXIMUM_Z]
@maximumZ.setter
def maximumZ(self, maximumZ):
self._parameters[REGION_DIMENSION_MAXIMUM_Z] = maximumZ
[docs]class RegionDimensionsSphere(RegionDimensions):
def _createKeys(self):
keys = []
keys.append(REGION_DIMENSION_POSITION_X)
keys.append(REGION_DIMENSION_POSITION_Y)
keys.append(REGION_DIMENSION_POSITION_Z)
keys.append(REGION_DIMENSION_RADIUS)
return keys
@property
def positionX(self):
return self._parameters[REGION_DIMENSION_POSITION_X]
@positionX.setter
def positionX(self, positionX):
self._parameters[REGION_DIMENSION_POSITION_X] = positionX
@property
def positionY(self):
return self._parameters[REGION_DIMENSION_POSITION_Y]
@positionY.setter
def positionY(self, positionY):
self._parameters[REGION_DIMENSION_POSITION_Y] = positionY
@property
def positionZ(self):
return self._parameters[REGION_DIMENSION_POSITION_Z]
@positionZ.setter
def positionZ(self, positionZ):
self._parameters[REGION_DIMENSION_POSITION_Z] = positionZ
@property
def radius(self):
return self._parameters[REGION_DIMENSION_RADIUS]
@radius.setter
def radius(self, radius):
self._parameters[REGION_DIMENSION_RADIUS] = radius
[docs]class RegionDimensionsCylinder(RegionDimensionsSphere):
def _createKeys(self):
keys = []
keys.append(REGION_DIMENSION_POSITION_X)
keys.append(REGION_DIMENSION_POSITION_Y)
keys.append(REGION_DIMENSION_POSITION_Z)
keys.append(REGION_DIMENSION_DIRECTION_X)
keys.append(REGION_DIMENSION_DIRECTION_Y)
keys.append(REGION_DIMENSION_DIRECTION_Z)
keys.append(REGION_DIMENSION_LENGTH)
keys.append(REGION_DIMENSION_RADIUS)
return keys
@property
def directionX(self):
return self._parameters[REGION_DIMENSION_DIRECTION_X]
@directionX.setter
def directionX(self, directionX):
self._parameters[REGION_DIMENSION_DIRECTION_X] = directionX
@property
def directionY(self):
return self._parameters[REGION_DIMENSION_DIRECTION_Y]
@directionY.setter
def directionY(self, directionY):
self._parameters[REGION_DIMENSION_DIRECTION_Y] = directionY
@property
def directionZ(self):
return self._parameters[REGION_DIMENSION_DIRECTION_Z]
@directionZ.setter
def directionZ(self, directionZ):
self._parameters[REGION_DIMENSION_DIRECTION_Z] = directionZ
@property
def length(self):
return self._parameters[REGION_DIMENSION_LENGTH]
@length.setter
def length(self, length):
self._parameters[REGION_DIMENSION_LENGTH] = length
[docs]def createRegionDimensions(regionType):
if regionType == RegionType.REGION_TYPE_BOX:
return RegionDimensionsBox()
elif regionType == RegionType.REGION_TYPE_CYLINDER:
return RegionDimensionsCylinder()
elif regionType == RegionType.REGION_TYPE_SPHERE:
return RegionDimensionsSphere()