5.2. Database access (IO)

This module contains classes for automatic database access and data preprocessing. The fundamental class is called Dsystem and describes geometry and database access for a given diagnostic system. This presents the basic set of functions that can be expanded by sub-classing. A subclass Tokamak that can handle loading and interpolating magnetic data in a format usual for tokamaks is implemented.

The convention for coordinates order is
  • for reconstructions (time, channel, node) or (time, channel, vertical node coordinate, horizontal node coordinate)
  • for matrix cameras (time, vertical pixel coord, horizontal pixel coord, vertical node coordinate, horizontal node coordinate)

Tokamak magnetics are expected to be computed on regular grid. This is typical output of EFIT. Currently they are stored in dicts with keys values, time, z, r.

5.2.1. Diagnostic system

Basic interface with detectors. Handles signals loading and calibrations, cameras geometries…

class tomotok.core.io.Dsystem(shot, geometry_path=”, **kw)

Bases: object

Contains basic information about diagnostic system

Attributes

chnl_index (dict) dict maping channel to detector
geometry_path (pathlib.Path) path to location with saved geometrical data
name (str) name of diagnostic system
n_dets (int) number of cameras with separate calibration files, (to be removed)

Methods

compute_bd_mat(grid, loc=None)

Simple generation of boundary matrix 1 inside rec area, 0 outside

Deprecated since version 1.3.0.

Parameters:

grid : RegularGrid

Returns:

boundary_matrix : numpy.ndarray of bool

matrix with true inside border, false otherwise, with shape (grid.nz, grid.nr)

data_name

Template data file name

download_data(**kwargs)

Downloads data from network/database using source method or database.

Returns:dict
fetch_data(data_path=”, source=None, save=False, force_dl=False)

Loads data from data storage specified by data_path or downloads data from network storage.

Parameters:

data_path : str or Path, optional

default is working directory

source : string, optional

specifies method for data download

save : bool, optional

switches saving to local storage

force_dl : bool, optional

forces download of data

Returns:

dict

get_calb()

Loads preset calibrations for detectors, if not specified returns array of ones with length n_dets.

get_chord_geometry()

Loads chord geometry from geometry_path.

Expected names of detectors are detector_[num]_[x,y].txt. Data for x and y coordinates are in separate files. Each row represents one detector. Number of rows and columns should be same in all files containing coordinates

Returns:

xchords, ychords : numpy.ndarray

arrays with coordinates of chord points with shape (#chords, #points)

get_chord_widening()

Tries to load widening coefficients from file. Returns None if IOError

Returns:

array-like or None

Contains widening coefficients for each channel

get_pinholes()

Loads pinhole coordinates for each chord from pinholes.txt located in geometry folder.

Returns:

ph : numpy.ndarray

matrix containing pinhole x,y coordinates with shape (#chords, 2)

load_border(loc=None)

Load border coordinates from geometry path or from tokamak module. Sets boundary_coord attribute to loaded coords.

Parameters:

loc : str or Path

Returns:

numpy.ndarray

contains (R, z) coordinates of vacuum vessel cross section, shape (#points, 2)

load_boundary_coord()

Load border coordinates from geometry path or from tokamak module. Sets boundary_coord attribute to loaded coords.

Returns:

numpy.ndarray

contains (R, z) coordinates of vacuum vessel cross section points, should have shape (#points, 2)

load_data(loc)

Loads hdf file containing data.

If loc is path to a directory, default data file name from property data_name is assumed.

Parameters:

loc : str or Path

Path to file with signal data. Can be full path or path to folder if default name is used.

Returns:

dict

keys values, chnl, time

load_los(loc=None)

Loads line of sights geometry from hdf file.

Parameters:

loc : str or Path, optional

location of los file, by default geometry path is used

Returns:

dict

with coordinates of los start and end points with shape (2, #chords, 3)

static save_data(loc, data)

Saves downloaded detector data to data_path

Parameters:

loc : str or pathlib.Path

saving path with file name

data : dict

contains signal values, channel numbers and time stamps

5.2.2. Tokamak

Adds methods for handling magnetics data in format typical for tokamak equilibrium.

class tomotok.core.io.Tokamak(shot, **kwargs)

Bases: tomotok.core.io.diag.Dsystem

Handles magnetic field and divertor

Attributes

name (str) Name of tokamak
params (dict) Keyword arguments provided to initialization
divertor_coord (tuple of float) Contains bounds for divertor area. (x1, x2, y1, y2)

Methods

compute_weight_matrix(grid, diw=0.4, smooth_boundary=None, bdr=None)

Computes weight matrix. Supports different weight for pixels located in divertor area or those that are outside vacuum vessel.

Parameters:

grid : RegularGrid

diw : float, optional

Specifies divertor pixels’ weight. Default value for divertor is 0.4 and standard weight of pixel is 1. If standard weight is used, the divertor area will not have any preference.

smooth_boundary : float, optional

Specifies weight for pixels outside of vacuum vessel, that is used for smoothing the boundary. Vacuum vessel coordinates are defined by bdr parameter. Recommended value is 0.1

bdr : tuple of numpy.ndarray

Contains coordinates of vacuum vessel border. Must be provided if smooth_boundary is requested.

Returns:

numpy.ndarray dtype float64

matrix with pixel weights with same shape as grid (#y pixels, #x pixels)

download_mag_field(shot, tvec=None, source=None)

Dowloads magnetic field data from network.

Parameters:

shot : int

tvec : list-like, optional

specifies timeslices to be loaded

source : string, optional

specifies source for loading magnetics data

Returns:

dict

Psi normalized stored in dict with keys (values, time, z, r)

fetch_mag_field(shot, mag_path, grid=None, tvec=None, save=False, force_dl=False)

Loads magnetic field from local storage or database and interpolates it if grid is provided.

Parameters:

shot : int

mag_path : str or Path

grid : RegularGrid, optional

Returned values are interpolated to this grid if provided.

tvec : numpy.ndarray, optional

Time vector of requested magnetic field for download

save : bool, optional

force_dl : bool, optional

forces download from remote database

get_divertor_area(grid, boundary=None)

Returns mask matrix with True for indexes representing pixels inside predefined divertor area. Size and shape is obtained from grid.

Parameters:

grid : RegularGrid

boundary : numpy.ndarray, optional

Boundary matrix with same shape as grid

Returns:

numpy.ndarray

Bool mask matrix for determining divertor pixels with shape ny, nx

get_divertor_chnls(gmat, grid, boundary=None)

Finds channels of geometry matrix that have contributions in divertor area. Uses dot product of geometry and divertor area matrices.

Parameters:

gmat : csr_matrix

grid : RegularGrid

boundary : numpy.ndarray, optional

Boundary matrix with same shape as grid

Returns:

mask : numpy.ndarray of bool

mask array with True on channels interfering with predefined divertor area

static interpolate_mag_field(magfield, grid, tvec=None)

Interpolates given magnetic field to provided grid using rectangular bivariate spline.

If tvec is provided, only one nearest time slice of magnetic field is interpolated for each value in tvec.

Parameters:

magfield : dict

grid : RegularGrid

tvec : int, float, list, tuple, np.ndarray, optional

Returns:

dict

load_mag_field(loc)

Loads magnetic field from hdf file saved at loc

If loc is path to a directory, default data file name from property mag_name is assumed.

Parameters:

loc : str or Path

location of hdf file containing magnetic field

Returns:

dict

Psi normalized stored in dict with keys (values, time, z, R)

static save_mag_field(loc, mag_field)

Saves magnetic field into hdf file.

Expects to have name included to mag_loc if magname is omitted.

Parameters:

loc : str or pathlib.Path

Path to file

mag_field : dict, optional

DataArray with magnetic field