Source code for pymchelper.readers.fluka

import logging

import numpy as np

from pymchelper.detector import MeshAxis
from pymchelper.shieldhit.detector.detector_type import SHDetType
from pymchelper.shieldhit.detector.estimator_type import SHGeoType
from pymchelper.flair.Data import Usrbin, UsrTrack, unpackArray

logger = logging.getLogger(__name__)


[docs]class FlukaBinaryReader: def __init__(self, filename): self.filename = filename
[docs] def read(self, detector, nscale=1): try: usr = Usrbin(self.filename) data = usr.readData(0) fdata = unpackArray(data) except IOError: usr = UsrTrack(self.filename) data = usr.readData(0) fdata = unpackArray(data)[:usr.detector[0].ne] usr.say() # file,title,time,weight,ncase,nbatch for i, _ in enumerate(usr.detector): logger.debug("-" * 20 + (" Detector number %i " % i) + "-" * 20) usr.say(i) # details for each detector # TODO read detector type detector.det = "FLUKA" # TODO read particle type detector.particle = 0 # TODO read geo type detector.geotyp = SHGeoType.unknown # TODO cross-check statistics detector.nstat = usr.ncase # TODO figure out when more detectors are used nx = usr.detector[0].nx ny = usr.detector[0].ny nz = usr.detector[0].nz xmin = usr.detector[0].xlow ymin = usr.detector[0].ylow zmin = usr.detector[0].zlow xmax = usr.detector[0].xhigh ymax = usr.detector[0].yhigh zmax = usr.detector[0].zhigh detector.x = MeshAxis(n=nx, min_val=xmin, max_val=xmax, name="X", unit="", binning=MeshAxis.BinningType.linear) detector.y = MeshAxis(n=ny, min_val=ymin, max_val=ymax, name="Y", unit="", binning=MeshAxis.BinningType.linear) detector.z = MeshAxis(n=nz, min_val=zmin, max_val=zmax, name="Z", unit="", binning=MeshAxis.BinningType.linear) detector.unit, detector.name = "", "" # TODO read detector type detector.dettyp = SHDetType.unknown detector.data_raw = np.array(fdata) if nscale != 1: detector.data *= nscale # 1 gigaelectron volt / gram = 1.60217662 x 10-7 Gy detector.data *= 1.60217662e-7 detector.title = usr.detector[0].name.decode('ascii')