Source code for irradiapy.srim.target.target

"""TThis module contains the `Target` class."""

from dataclasses import dataclass, field

from irradiapy.srim.target.layer import Layer


[docs] @dataclass class Target: """Class for defining the target material in SRIM simulations. Attributes ---------- layers : list The list of layers in the target material. nelements : int The total number of elements in the target material. nlayers : int """ layers: list[Layer] nelements: int = field(init=False) nlayers: int = field(init=False) def __post_init__(self) -> None: """Counts the number of layers and elements in the material after initialization.""" self.nlayers = len(self.layers) self.nelements = sum(len(layer.elements) for layer in self.layers)
[docs] def trimin_description(self) -> str: """Return the target material description in the TRIMIN format.""" string = ( "target material, number of elements, layers\n" f'"material" {self.nelements} {self.nlayers}' ) return string
[docs] def trimin_target_elements(self) -> str: """Return the target elements in the TRIMIN format.""" string = "target element, Z, mass\n" for i, layer in enumerate(self.layers): for j, element in enumerate(layer.elements): string += ( f"Atom {i*len(layer.elements)+j+1} = {element.symbol} " f"= {element.atomic_number} {element.atomic_mass}\n" ) return string
[docs] def trimin_target_layers(self) -> str: """Return the target layers in the TRIMIN format.""" string = ( "layer name, width density elements\nnumb. desc. (ang) (g/cm3) stoich.\n" ) layers_info = [] for i, layer in enumerate(self.layers): prev_stoichs = [0.0] * sum(len(l.elements) for l in self.layers[:i]) next_stoichs = [0.0] * sum(len(l.elements) for l in self.layers[i + 1 :]) layer_info = f'{i} "layer{i}" {layer.width} {layer.density} ' layer_info += " ".join( map(str, prev_stoichs + layer.stoichs + next_stoichs) ) layers_info.append(layer_info) return string + "\n".join(layers_info)
[docs] def trimin_phases(self) -> str: """Return the phases of the layers in the TRIMIN format.""" string = "phases\n" string += " ".join(map(str, (layer.phase for layer in self.layers))) return string
[docs] def trimin_bragg(self) -> str: """Return the Bragg corrections in the TRIMIN format.""" string = "target compound corrections (bragg)\n" string += " ".join(map(str, (layer.bragg for layer in self.layers))) return string
[docs] def trimin_displacement(self) -> str: """Return the displacement energies in the TRIMIN format.""" string = "displacement energies (eV)\n" string += " ".join( map( str, (element.e_d for layer in self.layers for element in layer.elements), ) ) return string
[docs] def trimin_lattice(self) -> str: """Return the lattice binding energies in the TRIMIN format.""" string = "lattice binding energies (eV)\n" string += " ".join( map( str, (element.e_l for layer in self.layers for element in layer.elements), ) ) return string
[docs] def trimin_surface(self) -> str: """Return the surface binding energies in the TRIMIN format.""" string = "surface binding energies (eV)\n" string += " ".join( map( str, (element.e_s for layer in self.layers for element in layer.elements), ) ) return string