Source code for simba.Modules.gdf_beam

import re
from munch import Munch
import easygdf
import numpy as np


[docs] class gdf_beam(Munch): def __init__(self, filename) -> None: super().__init__(self) self.screens_touts = easygdf.load_screens_touts(filename) self.sort_screens() self._create_positions_dictionary() self.sort_touts() self._create_times_dictionary() @property def screens(self) -> dict: return self.screens_touts["screens"] @property def touts(self) -> dict: return self.screens_touts["touts"] def _create_positions_dictionary(self) -> None: self._positions = {s["position"]: s for s in self.screens} @property def positions(self) -> dict: return self._positions
[docs] def single_position_data(self) -> None: [setattr(self, k, self.screens_touts[k]) for k in ["x", "y", "z", "GBx", "GBy", "GBz", "m", "q", "nmacro"]]
def _create_times_dictionary(self) -> None: self._times = {s["time"]: s for s in self.touts} @property def times(self) -> dict: return self._times
[docs] def sorted_nicely(self, unsorted_list: list, dict_key: str | None = None) -> list: """Sort the given iterable in the way that humans expect.""" def convert(text): return int(text) if text.isdigit() else text def alphanum_key(key): return [convert(c) for c in re.split("([0-9]+)", str(key[dict_key]))] return sorted(unsorted_list, key=alphanum_key)
[docs] def sort_screens(self, **kwargs) -> None: self.screens_touts["screens"] = self.sorted_nicely( self.screens_touts["screens"], dict_key="position" )
[docs] def sort_touts(self, **kwargs) -> None: self.screens_touts["touts"] = self.sorted_nicely( self.screens_touts["touts"], dict_key="time" )
[docs] def get_position(self, position: float) -> dict | None: if position in self._positions.keys(): return Munch(self._positions[position]) return None
[docs] def get_time(self, time: float) -> dict | None: if time in self._times.keys(): return Munch(self._times[time]) return None