Coverage for python/gsfit/database_readers/freegsnke/setup_rogowski_coils.py: 85%
27 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 13:12 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 13:12 +0000
1import typing
2from typing import TYPE_CHECKING
4import numpy as np
5import numpy.typing as npt
6from freegsnke.equilibrium_update import Equilibrium as FreeGsnkeEquilibrium
7from gsfit_rs import RogowskiCoils
9if TYPE_CHECKING:
10 from . import DatabaseReader
13def setup_rogowski_coils(
14 self: "DatabaseReader",
15 pulseNo: int,
16 settings: dict[str, typing.Any],
17 time: npt.NDArray[np.float64],
18 freegsnke_eqs: list[FreeGsnkeEquilibrium],
19) -> RogowskiCoils:
20 """
21 This method initialises the Rust `RogowskiCoils` class.
23 :param pulseNo: Pulse number, used to read from the database
24 :param settings: Dictionary containing the JSON settings read from the `settings` directory
25 :param time: Measured time vector
26 :param freegsnke_eqs: List of FreeGSNKE equilibrium objects, one for each time-slice
28 **This method is specific to FreeGSNKE.**
30 See `python/gsfit/database_readers/interface.py` for more details on how a new database_reader should be implemented.
31 """
33 # Initialise the RogowskiCoils Rust class
34 rogowski_coils = RogowskiCoils()
36 # No Rogowski coils are included in FreeGSNKE, so let's use the limiter as
37 # the plasma current Rogowski
38 sensor_name = "plasma_current_rogowski"
39 freegsnke_tokamak = freegsnke_eqs[0].tokamak
40 limit_pts_r = np.array(freegsnke_tokamak.limiter.R)
41 limit_pts_z = np.array(freegsnke_tokamak.limiter.Z)
43 # Get the plasma current
44 n_time = len(time)
45 ip = np.full((n_time), np.nan)
46 for i_time in range(0, n_time):
47 ip[i_time] = freegsnke_eqs[i_time].plasmaCurrent()
49 # Get the Rogowski coil data
50 if sensor_name in settings["sensor_weights_rogowski_coils.json"]:
51 fit_settings_comment = settings["sensor_weights_rogowski_coils.json"][sensor_name]["fit_settings"]["comment"]
52 fit_settings_expected_value = settings["sensor_weights_rogowski_coils.json"][sensor_name]["fit_settings"]["expected_value"]
53 fit_settings_include = settings["sensor_weights_rogowski_coils.json"][sensor_name]["fit_settings"]["include"]
54 fit_settings_weight = settings["sensor_weights_rogowski_coils.json"][sensor_name]["fit_settings"]["weight"]
55 else:
56 fit_settings_comment = ""
57 fit_settings_expected_value = np.nan
58 fit_settings_include = False
59 fit_settings_weight = np.nan
61 # Add Rogowski coil to the Rust class
62 rogowski_coils.add_sensor(
63 name=sensor_name,
64 r=limit_pts_r,
65 z=limit_pts_z,
66 fit_settings_comment=fit_settings_comment,
67 fit_settings_expected_value=fit_settings_expected_value,
68 fit_settings_include=fit_settings_include,
69 fit_settings_weight=fit_settings_weight,
70 time=time,
71 measured=ip,
72 gaps_r=np.array([]),
73 gaps_z=np.array([]),
74 gaps_d_r=np.array([]),
75 gaps_d_z=np.array([]),
76 gaps_name=[],
77 )
79 return rogowski_coils