Source code for pymcxray.FileFormat.Results.PhirhozRegion

#!/usr/bin/env python
"""
.. py:currentmodule:: FileFormat.Results.PhirhozRegion
.. moduleauthor:: Hendrix Demers <hendrix.demers@mail.mcgill.ca>

MCXRay phirhoz results file for a region.
"""

# 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.Results.RegionVolume as RegionVolume
import pymcxray.FileFormat.Results.PhirhozElement as PhirhozElement
import pymcxray.FileFormat.Results.Phirhoz as Phirhoz

# Globals and constants variables.

KEY_REGION = "Region"
KEY_PHIRHOZ_DISTISTRIBUTION = "Phi_DistX"
KEY_ELEMENTS = "elements"
KEY_PHIRHOZ_BACKGROUND = "Background"
KEY_PHIRHOZ_BACKGROUND_SUMMARY = "Background Summary"

KEY_REGION_ID = "Region"

SHELL_K = "K"
SHELL_L = "L"
SHELL_M = "M"

[docs]class PhirhozRegion(object): def __init__(self, numberEnergyWindows, numberLayersZ): self._parameters = {} self._numberEnergyWindows = numberEnergyWindows self._numberLayersZ = numberLayersZ
[docs] def readFromLines(self, lines): indexLine = 0 for line in lines[indexLine:]: indexLine += 1 if line.startswith(KEY_REGION): items = line.split() self.regionID = int(items[1]) break indexLine += self.readRegionVolume(lines[indexLine:]) indexLine += self.readPhirhozDistributions(lines[indexLine:]) indexLine += self.readElements(lines[indexLine:]) indexLine += self.readBackgroundPhirhozs(lines[indexLine:]) indexLine += self.readCharacteristicPhirhozs(lines[indexLine:]) return indexLine
[docs] def readRegionVolume(self, lines): lineIndex = 0 regionVolume = RegionVolume.RegionVolume() # todo read region volume info. lineIndex += 8 return lineIndex
[docs] def readPhirhozDistributions(self, lines): indexLine = 0 for line in lines: indexLine += 1 if line.strip().startswith(KEY_PHIRHOZ_DISTISTRIBUTION): break else: message = "Cannot find the section header in the liens: %s" % (KEY_PHIRHOZ_DISTISTRIBUTION) raise ValueError(message) # todo read phirhoz distribution. indexLine += 2 return indexLine
[docs] def readElements(self, lines): indexLine = 0 self.elements = [] for line in lines: indexLine += 1 if line.strip().endswith(KEY_ELEMENTS): items = line.split() self.numberElements = int(items[0]) break else: message = "Cannot find the section header in the liens: %s" % (KEY_ELEMENTS) raise ValueError(message) for indexElements in range(self.numberElements): line = lines[indexLine] indexLine += 1 element = PhirhozElement.PhirhozElement() element.readFromLine(line) self.elements.append(element) assert len(self.elements) == self.numberElements return indexLine
[docs] def readBackgroundPhirhozs(self, lines): indexLine = 0 for indexWindows in range(self._numberEnergyWindows): for line in lines[indexLine:]: indexLine += 1 if line.strip().startswith(KEY_PHIRHOZ_BACKGROUND): items = line.split('=') intensity = float(items[-1]) indexStart = line.find('[') indexEnd = line.find(']') items = line[indexStart+1:indexEnd].split(',') energyWindowLow = float(items[0]) energyWindowHigh = float(items[1]) break else: message = "Cannot find the section header in the liens: %s" % (KEY_PHIRHOZ_BACKGROUND) raise ValueError(message) for indexDepth in range(self._numberLayersZ): line = lines[indexLine] indexLine += 1 items = line.split() depth_A = float(items[0]) phirhoz = float(items[1]) # Read summary for line in lines[indexLine:]: indexLine += 1 if line.strip().startswith(KEY_PHIRHOZ_BACKGROUND_SUMMARY): break else: message = "Cannot find the section header in the liens: %s" % (KEY_PHIRHOZ_BACKGROUND_SUMMARY) raise ValueError(message) for indexWindows in range(self._numberEnergyWindows): line = lines[indexLine] indexLine += 1 return indexLine
[docs] def readCharacteristicPhirhozs(self, lines): indexLine = 0 self.characteristicPhirhoz = {} for element in self.elements: self.characteristicPhirhoz.setdefault(element.symbol, {}) if element.isIonizationShell_K: phirhoz = Phirhoz.Phirhoz(element.symbol, SHELL_K) indexLine += phirhoz.readFromLines(lines[indexLine:]) self.characteristicPhirhoz[element.symbol][SHELL_K] = phirhoz if element.isIonizationShell_L: phirhoz = Phirhoz.Phirhoz(element.symbol, SHELL_L) indexLine += phirhoz.readFromLines(lines[indexLine:]) self.characteristicPhirhoz[element.symbol][SHELL_L] = phirhoz if element.isIonizationShell_M: phirhoz = Phirhoz.Phirhoz(element.symbol, SHELL_M) indexLine += phirhoz.readFromLines(lines[indexLine:]) self.characteristicPhirhoz[element.symbol][SHELL_M] = phirhoz return indexLine
@property def regionID(self): return self._parameters[KEY_REGION_ID] @regionID.setter def regionID(self, regionID): self._parameters[KEY_REGION_ID] = regionID