scotty package#

scotty.beam_me_up(poloidal_launch_angle_Torbeam, toroidal_launch_angle_Torbeam, launch_freq_GHz, mode_flag, launch_beam_width, launch_beam_curvature, launch_position, vacuumLaunch_flag=True, relativistic_flag=False, find_B_method='torbeam', density_fit_parameters=None, temperature_fit_parameters=None, shot=None, equil_time=None, vacuum_propagation_flag=False, Psi_BC_flag=None, poloidal_flux_enter=1.0, poloidal_flux_zero_density=1.0, poloidal_flux_zero_temperature=1.0, delta_R=- 0.0001, delta_Z=0.0001, delta_K_R=0.1, delta_K_zeta=0.1, delta_K_Z=0.1, interp_order=5, len_tau=102, rtol=0.001, atol=1e-06, interp_smoothing=0, ne_data_path=PosixPath('.'), magnetic_data_path=PosixPath('.'), Te_data_path=PosixPath('.'), output_path=PosixPath('.'), input_filename_suffix='', output_filename_suffix='', figure_flag=True, detailed_analysis_flag=True, verbose_output_flag=True, quick_run=False, plasmaLaunch_K=array([0., 0., 0.]), plasmaLaunch_Psi_3D_lab_Cartesian=array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]), density_fit_method=None, temperature_fit_method=None, B_T_axis=None, B_p_a=None, R_axis=None, minor_radius_a=None, auto_delta_sign_Z=1, auto_delta_sign_R=1)#

Run the beam tracer

  1. Initialise density fit parameters. One of:
    • spline with data from file

    • Stefanikova

    • O(3) polynomial

    • tanh

    • quadratic

    See profile_fit for more details

  2. If relativistic_flag enabled, initialise temperature fit parameters. Not yet fully implemented. One of:

    • spline with data from file

    • linear

    See ‘profile_fit’ for more details

  3. Initialise magnetic field method. One of:
    • TORBEAM

    • OMFIT

    • analytical

    • EFIT++

    • UDA

    • curvy slab

    • test/test_notime

    See geometry for more details

  4. Initialise beam launch parameters (vacuum/plasma). See launch for more details.

  5. Propagate single ray with IVP solver to find point where beam leaves plasma. See ray_solver for more details

  6. Propagate beam with IVP solver

  7. Dump raw output

  8. Analysis

Parameters
  • poloidal_launch_angle_Torbeam (float) – Poloidal angle of antenna in TORBEAM convention

  • toroidal_launch_angle_Torbeam (float) – Toroidal angle of antenna in TORBEAM convention

  • launch_freq_GHz (float) – Frequency of the launched beam in GHz

  • mode_flag (int) – Either +/-1, used to determine which mode branch to use

  • launch_beam_width (float) – Width of the beam at launch

  • launch_beam_curvature (float) – Curvatuve of the beam at launch

  • launch_position (FloatArray) – Position of the antenna in cylindrical coordinates

  • vacuumLaunch_flag (bool) – If True, launch beam from vacuum, otherwise beam launch position is inside the plasma already

  • vacuum_propagation_flag (bool) – If True, run solver from the launch position, and don’t use analytical vacuum propagation

  • relativistic_flag (bool) – If True, generates a temperature profile from given data or parameters and applies relativistic corrections to electron mass.

  • Psi_BC_flag (String) – If None, do no special treatment at plasma-vacuum boundary If continuous, apply BCs for continuous ne but discontinuous gradient of ne If discontinuous, apply BCs for discontinuous ne Using True or False is now deprecated

  • poloidal_flux_enter (float) – Normalised poloidal flux label of plasma boundary. If vacuum_propagation_flag, then this is where the solver begins. If Psi_BC_flag, then this is where the plasma-vacuum BCs are applied

  • poloidal_flux_zero_density (float) – At and above this normalised poloidal flux label, Scotty sets the electron density to zero

  • poloidal_flux_zero_temperature (float) – At and above this normalised poloidal flux label, Scotty sets the electron temperature to zero. This effectively negates any relativistic mass corrections.

  • plasmaLaunch_Psi_3D_lab_Cartesian (FloatArray) – \(\Psi\) of beam in lab Cartesian coordinates. Required if vacuumLaunch_flag is False

  • plasmaLaunch_K (FloatArray) – Wavevector of beam at launch. Required if vacuumLaunch_flag is False

  • delta_R (float) – Finite difference spacing to use for R

  • delta_Z (float) – Finite difference spacing to use for Z

  • delta_K_R (float) – Finite difference spacing to use for K_R

  • delta_K_zeta (float) – Finite difference spacing to use for K_zeta

  • delta_K_Z (float) – Finite difference spacing to use for K_Z

  • find_B_method (Union[str, scotty.geometry.MagneticField]) –

    See create_magnetic_geometry for more information.

    Common options:

    • "efitpp" uses magnetic field data from efitpp files directly

    • "torbeam" uses magnetic field data from TORBEAM input files

    • "omfit" is similar to "torbeam" but reads the data from JSON files

    • "UDA_saved" reads EFIT data from numpy’s .npz files

    • "analytical" uses a constant current density circular equilibrium

    Or pass a MagneticField instance directly.

  • density_fit_parameters (Optional[Sequence]) –

    A list of parameters to be passed to the density_fit_method constructor. See the docs for the individual methods for the meaning of their parameters

    Note

    These parameters should not include poloidal_flux_zero_density

  • density_fit_method (Optional[Union[str, Callable[[Union[float, numpy.ndarray[Any, numpy.dtype[numpy.float64]]]], Union[float, numpy.ndarray[Any, numpy.dtype[numpy.float64]]]]]]) –

    Parameterisation of the density profile. Either a callable (see ProfileFit), or one of the following options:

    • "smoothing-spline": 1D smoothing spline (SmoothingSplineFit)

    • "smoothing-spline-file": 1D smoothing spline constructed from file (SmoothingSplineFit.from_dat_file)

    • "stefanikova": combination of modified hyperbolic \(\tan\) and a Gaussian (StefanikovaFit)

    • "poly3" or "polynomial": \(n\)-th order polynomial (PolynomialFit)

    • "tanh": hyperbolic \(\tan\) (TanhFit)

    • "quadratic": constrained quadratic (QuadraticFit)

    If density_fit_method is a string, then the corresponding DensityFit object is constructed using poloidal_flux_zero_density and density_fit_parameters.

    "smoothing-spline-file" looks for a file called ne<input_filename_suffix>.dat in ne_data_path. It also uses interp_order and interp_smoothing instead of density_fit_parameters.

    Deprecated since version 2.4.0: If None (the default) is passed, the method will be guessed from the length of density_fit_parameters. In this case, quadratic and tanh parameters _should_ include poloidal_flux_zero_density as the last value.

  • temperature_fit_method (Optional[Union[str, Callable[[Union[float, numpy.ndarray[Any, numpy.dtype[numpy.float64]]]], Union[float, numpy.ndarray[Any, numpy.dtype[numpy.float64]]]]]]) – Parameterisation of the temperature profile. Leverages the same ProfileFit class used for density. See density_fit_method for details.

  • len_tau (int) – Number of output tau points

  • rtol (float) – Relative tolerance for ODE solver

  • atol (float) – Absolute tolerance for ODE solver

  • quick_run (bool) – If true, then run only the ray tracer and get an analytic estimate of the \(K\) cut-off location

  • auto_delta_sign_Z – A sign variable that takes on +1/-1. Ensures that forward differebce is always in negative poloidal flux gradient direction (into the plasma). Current implementation is flawed because the MagneticField has to be constructed in order to determine the intersection point and corresponding sign. Sign flip is thus subsequently applied throughout the code except for the already constructed field.

  • auto_delta_sign_R – Similar to auto_delta_sign_Z but for the R coordinate

  • temperature_fit_parameters (Optional[Sequence]) –

scotty.get_parameters_for_Scotty(diagnostic, launch_freq_GHz=None, mirror_rotation=None, mirror_tilt=None, find_B_method=None, find_ne_method=None, equil_time=None, shot=None, user=None)#

Return default settings and parameters for the given diagnostic

Parameters
  • diagnostic

    Name of the diagnostic to load parameters for. One of:

    • "DBS_NSTX_MAST"
      • Doppler reflectometry (Neal Crocker, Jon Hillesheim, Tony Peebles)

      • Used on MAST, was on loan from NSTX

    • "DBS_SWIP_MAST-U"
      • Doppler reflectometry (Peng Shi)

    • "DBS_UCLA_MAST-U"

    • "CPS_UCLA_MAST-U"
      • This system can either be used in CPS or DBS mode, but not both simultaneously (not yet, anyway)

      • CPS version not yet implemented

    • "hiK_Strath_MAST-U"
      • High-k scattering diagnostic, Strathclyde (David Speirs, Kevin Ronald)

      • Not yet implemented

    • "DBS_synthetic"
      • Circular flux surfaces

  • launch_freq_GHz (Optional[float]) – Beam launch frequency in GHz

  • mirror_rotation (Optional[float]) – Angle in degrees (FIXME: clarify)

  • mirror_tilt (Optional[float]) – Angle in degrees (FIXME: clarify)

  • find_B_method (Optional[str]) –

    Equilibrium magnetic field method. One of:

    • "torbeam": Loads data from ne.dat and topfile. I guess I should implement loading for inbeam.dat at some point, too

    • "UDA": Loads EFIT data directly from uda (not yet implemented)

    • "EFITpp": Uses MSE constrained EFIT

    • "UDA_saved": Loads EFIT data from file. UDA data must first be saved to said file

  • find_ne_method (Optional[str]) –

    Density profile method. One of:

    • "torbeam"

    • "EFITpp"

    • "UDA_saved"

  • equil_time (Optional[float]) – Time in seconds

  • shot (Optional[int]) – Shot number

  • user (Optional[str]) – User profile settings

Submodules#