Source code for pymcxray.FileFormat.Results.DetectorParameters

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

MCXRay detector parameters from results 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

# Globals and constants variables.
KEY_DETECTOR_PARAMETERS = "Detector Parameters"

KEY_CRYSTAL_NAME = "Detector crystal"
KEY_CRYSTAL_DENSITY_g_cm3 = "Crystal density"
KEY_CRYSTAL_THICKNESS_cm = "Crystal thichness"
KEY_CRYSTAL_RADIUS_cm = "Crystal radius"
KEY_BEAM_DETECTOR_DISTANCE_cm = "Distance beam-detector"
KEY_DEAD_LAYER_THICKNESS_A = "Dead layer"
KEY_DIFFUSION_LENGTH_A = "Diffusion length"
KEY_SURFACE_QUALITY_FACTOR = "Surface quality factor"
KEY_NOISE_EDS_DETECTOR_eV = "Noise at EDS detector"
KEY_THICKNESS_BE_WINDOW_um = "Thickness of Be window"
KEY_THICKNESS_AL_WINDOW_um = "Thickness of Al window"
KEY_THICKNESS_TI_WINDOW_um = "Thickness of Ti window"
KEY_THICKNESS_OIL_um = "Thickness of Oil"
KEY_THICKNESS_H2O_um = "Thickness of H2O"
KEY_THICKNESS_MOXTEK_um = "Thickness of Moxtek"
KEY_THICKNESS_AIR_um = "Thickness of air path"
KEY_ANGLE_BETWEEN_DETECTOR_SPECIMEN_NORMAL_deg = "Angle between detector axis and specimen normal"
KEY_ANGLE_BETWEEN_DETECTORX_AXIS_deg = "Angle between detector and x axis on the X-Y plane"
KEY_TAKEOFF_ANGLE_NORMAL_INCIDENCE_deg = "Take Off Angle at Normal Incidence"
KEY_TAKEOFF_ANGLE_EFFECTIVE_deg = "Effective Take Off Angle"
KEY_SOLID_ANGLE_deg = "Solid angle of the detector"

[docs]class DetectorParameters(object): def __init__(self): self._parameters = {} def _createKeys(self): keys = [] keys.append(KEY_CRYSTAL_NAME) keys.append(KEY_CRYSTAL_DENSITY_g_cm3) keys.append(KEY_CRYSTAL_THICKNESS_cm) keys.append(KEY_CRYSTAL_RADIUS_cm) keys.append(KEY_BEAM_DETECTOR_DISTANCE_cm) keys.append(KEY_DEAD_LAYER_THICKNESS_A) keys.append(KEY_DIFFUSION_LENGTH_A) keys.append(KEY_SURFACE_QUALITY_FACTOR) keys.append(KEY_NOISE_EDS_DETECTOR_eV) keys.append(KEY_THICKNESS_BE_WINDOW_um) keys.append(KEY_THICKNESS_AL_WINDOW_um) keys.append(KEY_THICKNESS_TI_WINDOW_um) keys.append(KEY_THICKNESS_OIL_um) keys.append(KEY_THICKNESS_H2O_um) keys.append(KEY_THICKNESS_MOXTEK_um) keys.append(KEY_THICKNESS_AIR_um) keys.append(KEY_ANGLE_BETWEEN_DETECTOR_SPECIMEN_NORMAL_deg) keys.append(KEY_ANGLE_BETWEEN_DETECTORX_AXIS_deg) keys.append(KEY_TAKEOFF_ANGLE_NORMAL_INCIDENCE_deg) keys.append(KEY_TAKEOFF_ANGLE_EFFECTIVE_deg) keys.append(KEY_SOLID_ANGLE_deg) return keys
[docs] def readFromLines(self, lines): # Skip header line. indexLine = 0 for line in lines: indexLine += 1 if line.strip().startswith(KEY_DETECTOR_PARAMETERS): break else: message = "Cannot find the section header in the liens: %s" % (KEY_DETECTOR_PARAMETERS) raise ValueError(message) for key in self._createKeys(): line = lines[indexLine] indexLine += 1 if key == KEY_CRYSTAL_NAME: label, value = line.split('is') if label.strip() == key: self._parameters[key] = str(value).strip() continue label, value = line.split('=') if label.strip() == key: self._parameters[key] = self._extractValue(value) return indexLine
def _extractValue(self, valueText): if '(' in valueText: endIndex = valueText.find('(') return float(valueText[:endIndex]) else: return float(valueText) @property def crystalName(self): return self._parameters[KEY_CRYSTAL_NAME] @crystalName.setter def crystalName(self, crystalName): self._parameters[KEY_CRYSTAL_NAME] = crystalName @property def crystalDensity_g_cm3(self): return self._parameters[KEY_CRYSTAL_DENSITY_g_cm3] @crystalDensity_g_cm3.setter def crystalDensity_g_cm3(self, crystalDensity_g_cm3): self._parameters[KEY_CRYSTAL_DENSITY_g_cm3] = crystalDensity_g_cm3 @property def crystalThickness_cm(self): return self._parameters[KEY_CRYSTAL_THICKNESS_cm] @crystalThickness_cm.setter def crystalThickness_cm(self, crystalThickness_cm): self._parameters[KEY_CRYSTAL_THICKNESS_cm] = crystalThickness_cm @property def crystalRadius_cm(self): return self._parameters[KEY_CRYSTAL_RADIUS_cm] @crystalRadius_cm.setter def crystalRadius_cm(self, crystalRadius_cm): self._parameters[KEY_CRYSTAL_RADIUS_cm] = crystalRadius_cm @property def beamDetectorDistance_cm(self): return self._parameters[KEY_BEAM_DETECTOR_DISTANCE_cm] @beamDetectorDistance_cm.setter def beamDetectorDistance_cm(self, beamDetectorDistance_cm): self._parameters[KEY_BEAM_DETECTOR_DISTANCE_cm] = beamDetectorDistance_cm @property def deadLayerThickness_A(self): return self._parameters[KEY_DEAD_LAYER_THICKNESS_A] @deadLayerThickness_A.setter def deadLayerThickness_A(self, deadLayerThickness_A): self._parameters[KEY_DEAD_LAYER_THICKNESS_A] = deadLayerThickness_A @property def diffusionLength_A(self): return self._parameters[KEY_DIFFUSION_LENGTH_A] @diffusionLength_A.setter def diffusionLength_A(self, diffusionLength_A): self._parameters[KEY_DIFFUSION_LENGTH_A] = diffusionLength_A @property def surfaceQualityFactor(self): return self._parameters[KEY_SURFACE_QUALITY_FACTOR] @surfaceQualityFactor.setter def surfaceQualityFactor(self, surfaceQualityFactor): self._parameters[KEY_SURFACE_QUALITY_FACTOR] = surfaceQualityFactor @property def noiseEdsDetector_eV(self): return self._parameters[KEY_NOISE_EDS_DETECTOR_eV] @noiseEdsDetector_eV.setter def noiseEdsDetector_eV(self, noiseEdsDetector_eV): self._parameters[KEY_NOISE_EDS_DETECTOR_eV] = noiseEdsDetector_eV @property def thicknessBeWindow_um(self): return self._parameters[KEY_THICKNESS_BE_WINDOW_um] @thicknessBeWindow_um.setter def thicknessBeWindow_um(self, thicknessBeWindow_um): self._parameters[KEY_THICKNESS_BE_WINDOW_um] = thicknessBeWindow_um @property def thicknessAlWindow_um(self): return self._parameters[KEY_THICKNESS_AL_WINDOW_um] @thicknessAlWindow_um.setter def thicknessAlWindow_um(self, thicknessAlWindow_um): self._parameters[KEY_THICKNESS_AL_WINDOW_um] = thicknessAlWindow_um @property def thicknessTiWindow_um(self): return self._parameters[KEY_THICKNESS_TI_WINDOW_um] @thicknessTiWindow_um.setter def thicknessTiWindow_um(self, thicknessTiWindow_um): self._parameters[KEY_THICKNESS_TI_WINDOW_um] = thicknessTiWindow_um @property def thicknessOil_um(self): return self._parameters[KEY_THICKNESS_OIL_um] @thicknessOil_um.setter def thicknessOil_um(self, thicknessOil_um): self._parameters[KEY_THICKNESS_OIL_um] = thicknessOil_um @property def thicknessH2O_um(self): return self._parameters[KEY_THICKNESS_H2O_um] @thicknessH2O_um.setter def thicknessH2O_um(self, thicknessH2O_um): self._parameters[KEY_THICKNESS_H2O_um] = thicknessH2O_um @property def thicknessMoxtek_um(self): return self._parameters[KEY_THICKNESS_MOXTEK_um] @thicknessMoxtek_um.setter def thicknessMoxtek_um(self, thicknessMoxtek_um): self._parameters[KEY_THICKNESS_MOXTEK_um] = thicknessMoxtek_um @property def thicknessAir_um(self): return self._parameters[KEY_THICKNESS_AIR_um] @thicknessAir_um.setter def thicknessAir_um(self, thicknessAir_um): self._parameters[KEY_THICKNESS_AIR_um] = thicknessAir_um @property def angleBetweenDetectorSpecimenNormal_deg(self): return self._parameters[KEY_ANGLE_BETWEEN_DETECTOR_SPECIMEN_NORMAL_deg] @angleBetweenDetectorSpecimenNormal_deg.setter def angleBetweenDetectorSpecimenNormal_deg(self, angleBetweenDetectorSpecimenNormal_deg): self._parameters[KEY_ANGLE_BETWEEN_DETECTOR_SPECIMEN_NORMAL_deg] = angleBetweenDetectorSpecimenNormal_deg @property def angleBetweenDetectorXAxis_deg(self): return self._parameters[KEY_ANGLE_BETWEEN_DETECTORX_AXIS_deg] @angleBetweenDetectorXAxis_deg.setter def angleBetweenDetectorXAxis_deg(self, angleBetweenDetectorXAxis_deg): self._parameters[KEY_ANGLE_BETWEEN_DETECTORX_AXIS_deg] = angleBetweenDetectorXAxis_deg @property def takeoffAngleNormalIncidence_deg(self): return self._parameters[KEY_TAKEOFF_ANGLE_NORMAL_INCIDENCE_deg] @takeoffAngleNormalIncidence_deg.setter def takeoffAngleNormalIncidence_deg(self, takeoffAngleNormalIncidence_deg): self._parameters[KEY_TAKEOFF_ANGLE_NORMAL_INCIDENCE_deg] = takeoffAngleNormalIncidence_deg @property def takeoffAngleEffective_deg(self): return self._parameters[KEY_TAKEOFF_ANGLE_EFFECTIVE_deg] @takeoffAngleEffective_deg.setter def takeoffAngleEffective_deg(self, takeoffAngleEffective_deg): self._parameters[KEY_TAKEOFF_ANGLE_EFFECTIVE_deg] = takeoffAngleEffective_deg @property def solidAngle_deg(self): return self._parameters[KEY_SOLID_ANGLE_deg] @solidAngle_deg.setter def solidAngle_deg(self, solidAngle_deg): self._parameters[KEY_SOLID_ANGLE_deg] = solidAngle_deg