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

1import matplotlib.axes 

2 

3from ..gsfit import Gsfit 

4from .filament_corners import filament_corners 

5 

6 

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). 

14 

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`). 

19 

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 

25 

26 # Fixed vessel grey (matches plot_elmag.py); drawn with no edge so filaments are not larger than reality 

27 facecolor: str = "#979A9A" 

28 

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] 

36 

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 )