Source code for casinotools.file_format.casino3.trajectory_collision

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
.. py:currentmodule:: casinotools.file_format.casino3.trajectory_collision
.. moduleauthor:: Hendrix Demers <hendrix.demers@mail.mcgill.ca>

Structure for the trajectory collision data.
"""

###############################################################################
# Copyright 2020 Hendrix Demers
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################

# Standard library modules.
import struct
import math

# Third party modules.

# Local modules.

# Project modules.
from casinotools.file_format.file_reader_writer_tools import read_double, read_int, read_multiple_values

# Globals and constants variables.
COLLISION_TYPE_ATOM = 0
COLLISION_TYPE_REGION = 1
COLLISION_TYPE_NODE = 2
COLLISION_TYPE_RECALC = 3

COLLISION_TYPE_LABELS = {COLLISION_TYPE_ATOM: "Atom",
                         COLLISION_TYPE_REGION: "Region",
                         COLLISION_TYPE_NODE: "Node",
                         COLLISION_TYPE_RECALC: "Recalc"}


[docs] def get_size_scattering_event(): size = struct.calcsize("5d2i") return size
[docs] class TrajectoryCollision: def __init__(self, items=None): if items is not None: self._position_x = items[0] self._position_y = items[1] self._position_z = items[2] self._energy = items[3] self._segment_length = items[4] self._collision_type = items[5] self._region_id = items[6]
[docs] def read(self, file): self._read_optimized(file)
[docs] def _read_original(self, file): assert getattr(file, 'mode', 'rb') == 'rb' self._position_x = read_double(file) self._position_y = read_double(file) self._position_z = read_double(file) self._energy = read_double(file) self._segment_length = read_double(file) self._collision_type = read_int(file) self._region_id = read_int(file)
[docs] def _read_optimized(self, file): assert getattr(file, 'mode', 'rb') == 'rb' values_format = "5d2i" items = read_multiple_values(file, values_format) self.set_values(items)
[docs] def set_values(self, items): self._position_x = items[0] self._position_y = items[1] self._position_z = items[2] self._energy = items[3] self._segment_length = items[4] self._collision_type = items[5] self._region_id = items[6]
[docs] def get_collision_type(self): return self._collision_type
[docs] def get_collision_type_name(self): return COLLISION_TYPE_LABELS[self._collision_type]
[docs] def get_x_nm(self): return self._position_x
[docs] def get_y_nm(self): return self._position_y
[docs] def get_z_nm(self): return self._position_z
[docs] def get_position_nm(self): position_nm = (self._position_x, self._position_y, self._position_z) return position_nm
[docs] def get_radius_xy_nm(self): return math.sqrt(self._position_x ** 2 + self._position_y ** 2)
[docs] def get_energy_keV(self): return self._energy
[docs] def get_region_id(self): return self._region_id