Source code for lightwin.beam_calculation.cy_envelope_1d.electromagnetic_fields

"""Define Cython specific functions to pre-load electromagnetic fields.

Used to speed up caclulations.

"""

import logging
from collections.abc import Collection
from pathlib import Path

from lightwin.core.elements.field_maps.field_map import FieldMap
from lightwin.util import helper


[docs] def load_electromagnetic_fields_for_cython( field_maps: Collection[FieldMap], loadable: Collection[Path] ) -> None: """Load one electric field per section.""" files = [ field_map.field_map_file_name for field_map in field_maps if field_map.rf_field.is_loaded ] flattened_files = helper.flatten(files) unique_files = helper.remove_duplicates(flattened_files) loadable_files = list( filter(lambda file: file.suffix in loadable, unique_files) ) try: import lightwin.beam_calculation.cy_envelope_1d.transfer_matrices as cy_transfer_matrices # type: ignore except ImportError as e: logging.error( "Could not import the Cython version of transfer matrices." ) raise ImportError(e) cy_transfer_matrices.init_arrays(loadable_files)