Source code for casinotools.fileformat.casino3.PointSpreadFunctionMatrix

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

PointSpreadFunctionMatrix module.
"""

# Script information for the file.
__author__ = "Hendrix Demers (hendrix.demers@mail.mcgill.ca)"
__version__ = ""
__date__ = ""
__copyright__ = "Copyright (c) 2011 Hendrix Demers"
__license__ = ""

# Standard library modules.
import logging
import os

# Third party modules.

# Local modules.
import casinotools.fileformat.FileReaderWriterTools as FileReaderWriterTools

# Project modules

# Globals and constants variables.


[docs]class PointSpreadFunctionMatrix(FileReaderWriterTools.FileReaderWriterTools): """ Point spread function matrix data from CASINO simulation results file. :note: Need to implement the transformation from x, y, z to index of the _values array. """ def __init__(self, options, point_nm): if options._optionsAdvancedPsfsSettings.getUseScanPointForCenter(): self._centerPoint_nm = point_nm else: self._centerPoint_nm = options._optionsAdvancedPsfsSettings.getPsfCenter_nm() self._nbPtsX = options._optionsAdvancedPsfsSettings.getNumberStepsX() self._nbPtsY = options._optionsAdvancedPsfsSettings.getNumberStepsY() self._nbPtsZ = options._optionsAdvancedPsfsSettings.getNumberStepsZ() self._numberElements = 0 self._values = None self._data = None self._file = None self._startPosition = 0 self._endPosition = 0 self._filePathname = "" self._fileDescriptor = 0
[docs] def read(self, file): assert getattr(file, 'mode', 'rb') == 'rb' self._startPosition = file.tell() self._filePathname = file.name self._fileDescriptor = file.fileno() logging.debug("File position at the start of %s.%s: %i", self.__class__.__name__, "read", self._startPosition) self._numberElements = self._nbPtsX * self._nbPtsY * self._nbPtsZ self._startPosition = file.tell() #self._values = self.readDoubleList(file, self._numberElements) skipOffset = self.getSizeOfDoubleList(self._numberElements) file.seek(skipOffset, os.SEEK_CUR) self._endPosition = file.tell() logging.debug("File position at the end of %s.%s: %i", self.__class__.__name__, "read", self._endPosition)
def _readValues(self): if self._file is None: self._file = open(self._filePathname, 'rb') self._file.seek(self._startPosition) self._values = self.readDoubleList(self._file, self._numberElements)
[docs] def getData(self): if self._data is None: if self._values is None: self._readValues() index = 0 self._data = {} for x in range(self._nbPtsX): for y in range(self._nbPtsY): for z in range(self._nbPtsZ): self._data[(x, y, z)] = self._values[index] index += 1 del self._values self._values = None return self._data
[docs] def getNumberPoints(self): return self._nbPtsX * self._nbPtsY * self._nbPtsZ
[docs] def getNumberPointsX(self): return self._nbPtsX
[docs] def getNumberPointsY(self): return self._nbPtsY
[docs] def getNumberPointsZ(self): return self._nbPtsZ