! pip install matplotlib pandas seaborn intake intake_parquet
Hide code cell output
Requirement already satisfied: matplotlib in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (3.9.0)
Requirement already satisfied: pandas in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (2.2.2)
Requirement already satisfied: seaborn in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (0.13.2)
Requirement already satisfied: intake in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (2.0.5)
Requirement already satisfied: intake_parquet in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (0.3.0)
Requirement already satisfied: contourpy>=1.0.1 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (4.53.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (1.4.5)
Requirement already satisfied: numpy>=1.23 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (1.26.4)
Requirement already satisfied: packaging>=20.0 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (24.1)
Requirement already satisfied: pillow>=8 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (10.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from matplotlib) (2.9.0)
Requirement already satisfied: pytz>=2020.1 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from pandas) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from pandas) (2024.1)
Requirement already satisfied: fsspec>=2023.0.0 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from intake) (2024.6.0)
Requirement already satisfied: pyyaml in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from intake) (6.0.1)
Requirement already satisfied: appdirs in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from intake) (1.4.4)
Requirement already satisfied: fastparquet in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from intake_parquet) (2024.5.0)
Requirement already satisfied: pyarrow in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from intake_parquet) (16.1.0)
Requirement already satisfied: six>=1.5 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
Requirement already satisfied: cramjam>=2.3 in /Users/rt2549/miniconda3/envs/mast-book/lib/python3.11/site-packages (from fastparquet->intake_parquet) (2.8.3)
import pandas as pd
import seaborn as sns
import intake
import matplotlib.pyplot as plt

plt.rcParams["font.family"] = "sans"
plt.rcParams["font.size"] = 8
sns.set_palette('muted')

Tutorial: Exploring Shot Metadata#

This notebook contains a demonstration of plotting several of the summary statistics that accompany the shot metadata.

Firstly, we’re going to load all the shot data into a pandas dataframe:

catalog  = intake.open_catalog(f'https://mastapp.site/intake/catalog.yml')
df = pd.DataFrame(catalog.index.level1.shots().read())
summary = df.loc[df.campaign == 'M9']
summary
url preshot_description postshot_description campaign current_range divertor_config plasma_shape comissioner facility shot_id ... cpf_vol_ipmax cpf_vol_max cpf_vol_truby cpf_wmhd_ipmax cpf_wmhd_max cpf_wmhd_truby cpf_zeff_ipmax cpf_zeff_max cpf_zeff_truby cpf_zmag_efit
7478 s3://mast/level1/shots/28405.zarr \nTry again.\n \nNot triggered.\n M9 None Conventional None None MAST 28405 ... NaN NaN NaN NaN NaN NaN None None None 0.000000
7643 s3://mast/level1/shots/28640.zarr \nRestore standard TF test shot 24529.\n \nShot ok.\n M9 None Conventional Connected Double Null None MAST 28640 ... NaN NaN NaN NaN NaN NaN None None None 0.000000
8634 s3://mast/level1/shots/28649.zarr \nRepeat.\n \n10kA P2 ran full length.\n M9 None Conventional Connected Double Null None MAST 28649 ... NaN NaN NaN NaN NaN NaN None None None 0.000000
12511 s3://mast/level1/shots/28392.zarr \nHL11, 300 ms, 2 V. He plenum 1047.\n \nOk.\n M9 None Conventional Connected Double Null None MAST 28392 ... NaN NaN NaN NaN NaN NaN None None None 0.000000
12520 s3://mast/level1/shots/28393.zarr \nHL11, 300 ms, 3 V. He plenum 1047.\n \nOk.\n M9 None Conventional Connected Double Null None MAST 28393 ... NaN NaN NaN NaN NaN NaN None None None 0.000000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
15548 s3://mast/level1/shots/30467.zarr \nRepeat with new neutron camera position.\ncH... \nTwo times lower DD neutron rate than referen... M9 700 kA Conventional Connected Double Null None MAST 30467 ... 9.029202 9.046394 0.0 49469.122469 52653.445 0.0 None None None 0.013202
15549 s3://mast/level1/shots/30468.zarr \nRepeat with new neutron camera position.\ncH... \nGood beam.\nGood repeat.\n M9 700 kA Conventional Lower Single Null None MAST 30468 ... 9.102411 9.107017 0.0 48516.962675 49382.133 0.0 None None None 0.012445
15550 s3://mast/level1/shots/30469.zarr \nRepeat with increased beam power (74 kV)\ncH... \nGood shot. Modes present.\n M9 700 kA Conventional Connected Double Null None MAST 30469 ... 8.988730 9.047923 0.0 47466.249616 49115.805 0.0 None None None 0.015299
15551 s3://mast/level1/shots/30470.zarr \nRepeat last using hydrogen in outboard and c... \nNo HF gas.\n M9 700 kA Conventional None None MAST 30470 ... 9.687049 10.055509 0.0 17290.432865 22310.516 0.0 None None None 0.015164
15552 s3://mast/level1/shots/30471.zarr \nThe last plasma:\nConvert to i/b Helios 1724... \nGood shot.\n M9 700 kA Conventional Lower Single Null None MAST 30471 ... 8.817559 9.283702 0.0 38063.582380 40906.090 0.0 None None None 0.014340

1675 rows × 282 columns

Summary Statistics About Shots#

Let’s look at a summary of simple counts of different shot metadata.

fig, axes = plt.subplots(2, 2, figsize=(10, 5))
ax1, ax2, ax3, ax4 = axes.flatten()

sns.histplot(summary, y='heating', ax=ax1)
sns.histplot(summary, y='plasma_shape', ax=ax2)
sns.histplot(y=summary.current_range, ax=ax3)
sns.histplot(y=summary.pellets.astype(str), ax=ax4)

for ax in axes.flatten():
    ax.set_xlabel('No. Shots')

plt.tight_layout()
_images/fe7b1f9a2dfa7daefdb1d9de6903eff9350ec316d872d61f1be4fecf3e3cbdfa.png

Plasma Beta (\(\beta\)) v.s Confinement Time (\(\tau_E\))#

This plot can show how the efficiency of energy confinement varies with plasma pressure.

plt.figure()
sns.scatterplot(summary, y='cpf_tautot_max', x='cpf_betmhd_max', hue='heating')
plt.xlim(0, 18)
plt.ylim(0, 1)
# plt.yscale('log')
plt.ylabel('Confinement time $\\tau_E$ (s)')
plt.xlabel('Plasma Beta $\\beta$ (%)')
Text(0.5, 0, 'Plasma Beta $\\beta$ (%)')
_images/4a1124154f01de0ebf27b900bdd8fd5b71ea68ab6f5f2387bf64e1bf36eb59e1.png

Plasma Temperature (\(T_e\)) vs. Plasma Density (\(n_e\))#

This can reveal the relationship between temperature and density, which is critical for achieving the conditions necessary for fusion.

plt.figure()
sns.scatterplot(summary, y='cpf_te0_ipmax', x='cpf_ne0_ipmax', hue='current_range', alpha=0.8)
plt.xlim(0, .8e20)
plt.ylabel('Temperature $T_e$ (eV)')
plt.xlabel('Density $n_e$ ($m^{-3}$)')
Text(0.5, 0, 'Density $n_e$ ($m^{-3}$)')
_images/bf4d73d862a8a8b98459321a70fb55f07795c9f1f94973a2fc4b790281d0e8b1.png

Plasma Current (\(I_p\)) vs. Confinement Time (\(\tau_E\))#

This can indicate how the plasma current affects the confinement time, providing insights into stability and performance.

plt.figure()
sns.scatterplot(summary, y='cpf_ip_av', x='cpf_tautot_max', hue='current_range', alpha=0.8)
plt.xlim(0, 1)
plt.xlabel('Confinement Time $\\tau_E$ (s)')
plt.ylabel('Average Plasma Current  $I_p$ (kA)')
Text(0, 0.5, 'Average Plasma Current  $I_p$ (kA)')
_images/e93fa4b1b823c610cd16b18b5bdb58600842687d8bdc071af2f88a6a0f323683.png