Coverage for python/gsfit/plotting/two_d_passives.py: 0%
17 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-14 15:25 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-14 15:25 +0000
1import matplotlib.axes
3from ..gsfit import Gsfit
4from .filament_corners import filament_corners
7def plot(
8 gsfit_controller: Gsfit,
9 ax: matplotlib.axes.Axes,
10 time_desired: float | None = None,
11) -> None:
12 """
13 Plot the passive conducting structures (e.g. the vacuum vessel / IVC).
15 Each passive is discretised into filaments stored in the `passives` Rust data structure
16 under `[<passive_name>, "geometry", "r"/"z"/"d_r"/"d_z"/"angle_1"/"angle_2"]`. The filaments
17 are (possibly sheared) parallelograms; the corner construction and colours follow the ST40
18 physics viewer (`plot_elmag.py`).
20 :param gsfit_controller: the Gsfit controller holding the populated `passives` object
21 :param ax: the matplotlib axes to draw on
22 :param time_desired: unused; kept for API symmetry with the other `two_d_*` plotters
23 """
24 passives = gsfit_controller.passives
26 # Fixed vessel grey (matches plot_elmag.py); drawn with no edge so filaments are not larger than reality
27 facecolor: str = "#979A9A"
29 for passive_name in passives.keys():
30 filaments_r = passives.get_array1([passive_name, "geometry", "r"]) # [metre]
31 filaments_z = passives.get_array1([passive_name, "geometry", "z"]) # [metre]
32 filaments_d_r = passives.get_array1([passive_name, "geometry", "d_r"]) # [metre]
33 filaments_d_z = passives.get_array1([passive_name, "geometry", "d_z"]) # [metre]
34 filaments_angle_1 = passives.get_array1([passive_name, "geometry", "angle_1"]) # [radian]
35 filaments_angle_2 = passives.get_array1([passive_name, "geometry", "angle_2"]) # [radian]
37 n_filaments: int = filaments_r.shape[0]
38 for i_filament in range(n_filaments):
39 corner_r, corner_z = filament_corners(
40 filament_r=filaments_r[i_filament],
41 filament_z=filaments_z[i_filament],
42 filament_d_r=filaments_d_r[i_filament],
43 filament_d_z=filaments_d_z[i_filament],
44 filament_angle_1=filaments_angle_1[i_filament],
45 filament_angle_2=filaments_angle_2[i_filament],
46 )
47 ax.fill(
48 corner_r,
49 corner_z,
50 facecolor=facecolor,
51 edgecolor="none",
52 zorder=1,
53 )