Source code for pymcxray.FileFormat.Models

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

MCXRay models 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.
import copy

# Third party modules.

# Local modules.
import pymcxray.FileFormat.MCXRayModel as MCXRayModel

# Project modules
import pymcxray.FileFormat.Version as Version

# Globals and constants variables.

KEY_ATOM_MEAN_IONIZATION_POTENTIAL_MODEL = "AtomMeanIonizationPotentialModel"
KEY_ATOM_ENERGY_LOSS_MODEL = "AtomEnergyLossModel"
KEY_ATOM_SCREENING_MODEL = "AtomScreeningModel"
KEY_ATOM_CROSS_SECTION_MODEL = "AtomCrossSectionModel"
ATOM_CROSS_SECTION_MODEL_BROWNING = 0
ATOM_CROSS_SECTION_MODEL_GAUVIN_DROUIN = 1
KEY_ATOM_CROSS_SECTION_SCREENING_MODEL = "AtomCrossSectionScreeningModel"
KEY_ATOM_COLLISION_MODEL = "AtomCollisionModel"
ATOM_COLLISION_MODEL_RUTHERFORD = 0
ATOM_COLLISION_MODEL_BROWNING = 1
ATOM_COLLISION_MODEL_GAUVIN = 2
KEY_ATOM_COLLISION_SCREENING_MODEL = "AtomCollisionScreeningModel"
KEY_ATOM_ELECTRON_RANGE_MODEL = "AtomElectronRangeModel"
KEY_XRAY_CS_CHARACTERISTIC_MODEL = "XRayCSCharacteristicModel"
XRAY_CS_CHARACTERISTIC_MODEL_CASNATI = 0
XRAY_CS_CHARACTERISTIC_MODEL_BOTE = 1 
KEY_XRAY_CS_BREMSSTRAHLUNG_MODEL = "XRayCSBremsstrahlungModel"
XRAY_CS_BREMSSTRAHLUNG_MODEL_BETHE_HEITLER = 0
XRAY_CS_BREMSSTRAHLUNG_MODEL_KIRPATRICK_WIEDMAN = 1
XRAY_CS_BREMSSTRAHLUNG_MODEL_DING = 2
KEY_SAMPLE_ENERGY_LOSS_MODEL = "SampleEnergyLossModel"
SAMPLE_ENERGY_LOSS_MODEL_BETHE_JOY_LUO = 0
SAMPLE_ENERGY_LOSS_MODEL_BETHE = 1
SAMPLE_ENERGY_LOSS_MODEL_BETHE_RELATIVISTIC = 2
SAMPLE_ENERGY_LOSS_MODEL_JOY_LUO_GAUVIN = 3
SAMPLE_ENERGY_LOSS_MODEL_JOY_LUO_MONSEL = 4
KEY_REGION_ENERGY_LOSS_MODEL = "RegionEnergyLossModel"
KEY_MASS_ABSORPTION_COEFFICIENT_MODEL = "XRayMassAbsorptionCoefficientMode"
MASS_ABSORPTION_COEFFICIENT_MODEL_HENKE = 0
MASS_ABSORPTION_COEFFICIENT_MODEL_HEINRICH_DATA = 1
MASS_ABSORPTION_COEFFICIENT_MODEL_HEINRICH_PARAMETERS = 2
MASS_ABSORPTION_COEFFICIENT_MODEL_CHANTLER = 3


[docs]class Models(object): def __init__(self): self.version = copy.deepcopy(Version.CURRENT_VERSION) self._keys = self._createKeys() self._modelList = self._createModelList() def _createKeys(self): keys = [] keys.append(KEY_ATOM_MEAN_IONIZATION_POTENTIAL_MODEL) keys.append(KEY_ATOM_ENERGY_LOSS_MODEL) keys.append(KEY_ATOM_SCREENING_MODEL) keys.append(KEY_ATOM_CROSS_SECTION_MODEL) keys.append(KEY_ATOM_CROSS_SECTION_SCREENING_MODEL) keys.append(KEY_ATOM_COLLISION_MODEL) keys.append(KEY_ATOM_COLLISION_SCREENING_MODEL) keys.append(KEY_ATOM_ELECTRON_RANGE_MODEL) keys.append(KEY_XRAY_CS_CHARACTERISTIC_MODEL) keys.append(KEY_XRAY_CS_BREMSSTRAHLUNG_MODEL) keys.append(KEY_SAMPLE_ENERGY_LOSS_MODEL) keys.append(KEY_REGION_ENERGY_LOSS_MODEL) keys.append(KEY_MASS_ABSORPTION_COEFFICIENT_MODEL) return keys def _createModelList(self): modelList = {} modelList[KEY_ATOM_MEAN_IONIZATION_POTENTIAL_MODEL] = MCXRayModel.AtomMeanIonizationPotentialModel() modelList[KEY_ATOM_ENERGY_LOSS_MODEL] = MCXRayModel.AtomEnergyLossModel() modelList[KEY_ATOM_SCREENING_MODEL] = MCXRayModel.AtomScreeningModel() modelList[KEY_ATOM_CROSS_SECTION_MODEL] = MCXRayModel.AtomCrossSectionModel() modelList[KEY_ATOM_CROSS_SECTION_SCREENING_MODEL] = MCXRayModel.AtomCrossSectionScreeningModel() modelList[KEY_ATOM_COLLISION_MODEL] = MCXRayModel.AtomCollisionModel() modelList[KEY_ATOM_COLLISION_SCREENING_MODEL] = MCXRayModel.AtomCollisionScreeningModel() modelList[KEY_ATOM_ELECTRON_RANGE_MODEL] = MCXRayModel.AtomElectronRangeModel() modelList[KEY_XRAY_CS_CHARACTERISTIC_MODEL] = MCXRayModel.XRayCSCharacteristicModel() modelList[KEY_XRAY_CS_BREMSSTRAHLUNG_MODEL] = MCXRayModel.XRayCSBremsstrahlungModel() modelList[KEY_SAMPLE_ENERGY_LOSS_MODEL] = MCXRayModel.SampleEnergyLossModel() modelList[KEY_REGION_ENERGY_LOSS_MODEL] = MCXRayModel.RegionEnergyLossModel() modelList[KEY_MASS_ABSORPTION_COEFFICIENT_MODEL] = MCXRayModel.MassAbsorptionCoefficientModel() return modelList
[docs] def read(self, filepath): self.version.readFromFile(filepath) lines = open(filepath, 'r').readlines() for line in lines: line = line.strip() for key in self._keys: if line.startswith(key): items = line.split('=') self._modelList[key].setModel(int(items[-1]))
[docs] def getModelList(self): return self._modelList
[docs] def write(self, filepath): outputFile = open(filepath, 'w') self._writeHeader(outputFile) self.version.writeLine(outputFile) keys = self._createKeys() if self.version >= Version.VERSION_1_4_1: keys.remove(KEY_SAMPLE_ENERGY_LOSS_MODEL) else: keys.remove(KEY_REGION_ENERGY_LOSS_MODEL) keys.remove(KEY_MASS_ABSORPTION_COEFFICIENT_MODEL) for key in keys: line = "%s=%s\n" % (key, self._modelList[key].getModel()) outputFile.write(line)
def _writeHeader(self, outputFile): headerLines = [] headerLines.append("********************************************************************************") headerLines.append("*** PHYSICAL MODEL") headerLines.append("***") headerLines.append("*** AtomMeanIonizationPotentialModel = 0 Joy & Luo") headerLines.append("*** AtomEnergyLossModel = 0 Bethe") headerLines.append("*** AtomScreeningModel = 0 Henoc & Maurice") headerLines.append("*** AtomCrossSectionModel = 0 Browning") headerLines.append("*** 1 Gauvin & Drouin") headerLines.append("*** AtomCrossSectionScreeningModel = 0 Henoc & Maurice") headerLines.append("*** AtomCollisionModel = 0 Rutherford") headerLines.append("*** 1 Browning") headerLines.append("*** 2 Gauvin") headerLines.append("*** AtomCollisionScreeningModel = 0 Henoc & Maurice") headerLines.append("*** AtomElectronRangeModel = 0 Kanaya & Okayama") if self.version >= Version.VERSION_1_2_2: headerLines.append("*** XRayCSCharacteristicModel = 0 Casnati") else: headerLines.append("*** XRayCSCharacteristicModel = 0 Castani") headerLines.append("*** XRayCSBremsstrahlungModel = 0 Bethe & Heitler") headerLines.append("*** 1 Kirkpatrick & Wiedman") headerLines.append("*** 2 Ding") headerLines.append("*** 3 Gauvin") if self.version >= Version.VERSION_1_4_1: headerLines.append("*** RegionEnergyLossModel = 0 Bethe & Joy & Luo") headerLines.append("*** 1 Bethe") headerLines.append("*** 2 Bethe Relativistic") headerLines.append("*** 3 Joy & Luo & Gauvin") headerLines.append("*** 4 Joy & Luo & Monsel") headerLines.append("*** MAC = 0 Henke") headerLines.append("*** 1 Heinrich Data (1966)") headerLines.append("*** 2 Heinrich Parameters (1987)") headerLines.append("*** 3 Chantler (2005)") else: headerLines.append("*** SampleEnergyLossModel = 0 Bethe & Joy & Luo") headerLines.append("***") headerLines.append("********************************************************************************") for line in headerLines: outputFile.write(line+'\n') @property def version(self): return self._version @version.setter def version(self, version): self._version = version @property def modelSampleEnergyLoss(self): return self._modelList[KEY_REGION_ENERGY_LOSS_MODEL].getModel() @modelSampleEnergyLoss.setter def modelSampleEnergyLoss(self, modelSampleEnergyLoss): self._modelList[KEY_REGION_ENERGY_LOSS_MODEL].setModel(modelSampleEnergyLoss) @property def modelXrayCharacteristic(self): return self._modelList[KEY_XRAY_CS_CHARACTERISTIC_MODEL].getModel() @modelXrayCharacteristic.setter def modelXrayCharacteristic(self, modelXrayCharacteristic): self._modelList[KEY_XRAY_CS_CHARACTERISTIC_MODEL].setModel(modelXrayCharacteristic) @property def modelXrayBremsstrahlung(self): return self._modelList[KEY_XRAY_CS_BREMSSTRAHLUNG_MODEL].getModel() @modelXrayBremsstrahlung.setter def modelXrayBremsstrahlung(self, modelXrayBremsstrahlung): self._modelList[KEY_XRAY_CS_BREMSSTRAHLUNG_MODEL].setModel(modelXrayBremsstrahlung) @property def modelAtomCrossSection(self): return self._modelList[KEY_ATOM_CROSS_SECTION_MODEL].getModel() @modelAtomCrossSection.setter def modelAtomCrossSection(self, modelAtomCrossSection): self._modelList[KEY_ATOM_CROSS_SECTION_MODEL].setModel(modelAtomCrossSection) @property def modelAtomCollision(self): return self._modelList[KEY_ATOM_COLLISION_MODEL].getModel() @modelAtomCollision.setter def modelAtomCollision(self, modelAtomCollision): self._modelList[KEY_ATOM_COLLISION_MODEL].setModel(modelAtomCollision) @property def modelAtomMac(self): return self._modelList[KEY_MASS_ABSORPTION_COEFFICIENT_MODEL].getModel() @modelAtomMac.setter def modelAtomMac(self, modelAtomMac): self._modelList[KEY_MASS_ABSORPTION_COEFFICIENT_MODEL].setModel(modelAtomMac)