mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-22 06:55:35 -04:00
50 lines
1.6 KiB
Python
Executable file
50 lines
1.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from urllib.parse import urlencode
|
|
from urllib.request import urlopen
|
|
from lxml import html
|
|
|
|
import numpy as np
|
|
import h5py
|
|
from openmc.data import ATOMIC_SYMBOL
|
|
|
|
|
|
base_url = 'https://physics.nist.gov/cgi-bin/Star/e_table-t.pl'
|
|
energies = np.logspace(-3, 3, 200)
|
|
data = {'matno': '', 'Energies': '\n'.join(str(x) for x in energies)}
|
|
columns = {1: 's_collision', 2: 's_radiative'}
|
|
|
|
# ==============================================================================
|
|
# SCRAPE DATA FROM ESTAR SITE AND GENERATE STOPPING POWER HDF5 FILE
|
|
|
|
print('Generating stopping_powers.h5...')
|
|
|
|
with h5py.File('stopping_powers.h5', 'w') as f:
|
|
|
|
# Write energies
|
|
f.create_dataset('energy', data=energies)
|
|
|
|
for Z in range(1, 99):
|
|
print('Processing {} data...'.format(ATOMIC_SYMBOL[Z]))
|
|
|
|
# Update form-encoded data to send in POST request for this element
|
|
data['matno'] = '{:03}'.format(Z)
|
|
payload = urlencode(data).encode("utf-8")
|
|
|
|
# Retrieve data from ESTAR site
|
|
r = urlopen(url=base_url, data=payload).read()
|
|
|
|
# Remove text and reformat data
|
|
r = html.fromstring(r).xpath('//pre//text()')
|
|
values = np.fromstring(' '.join(r[12:-5]), sep=' ').reshape((-1, 5)).T
|
|
|
|
# Create group for this element
|
|
group = f.create_group('{:03}'.format(Z))
|
|
|
|
# Write the mean excitation energy
|
|
attributes = np.fromstring(r[3], sep=' ')
|
|
group.attrs['I'] = attributes[2]
|
|
|
|
# Write collision and radiative stopping powers
|
|
for i in columns:
|
|
group.create_dataset(columns[i], data=values[i])
|