-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FENDL-3.2b Retrofitting #42
base: main
Are you sure you want to change the base?
Changes from 1 commit
dbef6ca
cdd7bcd
f3d010f
6c5ac24
03e3af3
fa4f29e
0190096
413ae46
2eb9ffd
1247db3
1d35b79
de3cbb4
d20eed8
58a4ede
b83be55
e135311
29528dd
0abb51b
582424b
77e9a65
493a35c
a29bd66
69fe5f0
d0f7d3b
4318ae4
b1b63f9
1edd251
fb2d548
4065d00
4250c44
93d469f
98dcc93
2460d72
6fcf5e5
5ec6bbf
f490d38
45df27f
b76634f
121e57a
fb1b796
c8e6cea
4d99f41
e0529dc
cc064b6
14c5730
95815b2
a5997b5
f83a646
98f23c3
498c824
a807f1e
76b9aa1
eebeea3
912530f
c374494
f50b617
4ba725e
6257033
4921dba
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import groupr_tools as grpt | ||
import pandas as pd | ||
|
||
# Call TENDL download function by user CLI input | ||
element = input('Select element: ') | ||
A = input('Select mass number: A = ') | ||
endf_path = grpt.tendl_download(element, A, 'endf') | ||
pendf_path = grpt.tendl_download(element, A, 'pendf') | ||
print(f'ENDF file can be found at ./{endf_path}') | ||
print(f'PENDF file can be found at ./{pendf_path}') | ||
|
||
# Extract necessary MT and MAT data from the ENDF file | ||
matb, MTs = grpt.endf_specs(endf_path) | ||
|
||
# Write out the GROUPR input file | ||
mt_table = pd.read_csv('./mt_table.csv') | ||
card_deck = grpt.groupr_input(matb, MTs, element, A, mt_table) | ||
|
||
# Run NJOY | ||
grpt.run_njoy(endf_path, pendf_path, card_deck, element, A) |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,230 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Import packages | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import ENDFtk | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import os | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import requests | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It probably could. I'll look into switching this over to |
||||||||||||||||||||||||||||||||||||||||||||||||||||
import contextlib | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import subprocess | ||||||||||||||||||||||||||||||||||||||||||||||||||||
import pandas as pd | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# List of elements in the Periodic Table | ||||||||||||||||||||||||||||||||||||||||||||||||||||
elements = [ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a function to download the .tendl file given specific user inputs to for element and mass number | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def tendl_download(element, A, filetype, save_path = None): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Ensure that A is properly formatted | ||||||||||||||||||||||||||||||||||||||||||||||||||||
A = str(A) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if 'm' in A: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
m_index = A.find('m') | ||||||||||||||||||||||||||||||||||||||||||||||||||||
A = A[:m_index].zfill(3) + 'm' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
A = A.zfill(3) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't the
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define general URL format for files in the TENDL database | ||||||||||||||||||||||||||||||||||||||||||||||||||||
tendl_gen_url = 'https://tendl.web.psi.ch/tendl_2017/neutron_file/' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Construct the filetype-specific URl for the data file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if filetype == 'endf' or filetype == 'ENDF': | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Construct the URL of the ENDF file to be downloaded | ||||||||||||||||||||||||||||||||||||||||||||||||||||
download_url = tendl_gen_url + f'{element}/{element}{A}/lib/endf/n-{element}{A}.tendl' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a save path for the ENDF file if there is not one already specified | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if save_path is None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
#save_path = f'tendl_2017_{element}{A}_{filetype}.endf' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
save_path = 'tape20' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
elif filetype == 'pendf' or filetype == 'PENDF': | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Construct the URL of the PENDF file to be downloaded | ||||||||||||||||||||||||||||||||||||||||||||||||||||
download_url = tendl_gen_url + f'{element}/{element}{A}/lib/endf/n-{element}{A}.pendf' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a save path for the PENDF file if there is not one already specified | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if save_path is None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
#save_path = f'tendl_2017_{element}{A}_{filetype}.pendf' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
save_path = 'tape21' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. build some data structures with to help populate a template with fewer conditionals and repeated code
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Check if the file exists | ||||||||||||||||||||||||||||||||||||||||||||||||||||
response = requests.head(download_url) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if response.status_code == 404: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Raise FileNotFoundError if file not found | ||||||||||||||||||||||||||||||||||||||||||||||||||||
raise FileNotFoundError(f'{download_url} not found') | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Download the file using wget | ||||||||||||||||||||||||||||||||||||||||||||||||||||
subprocess.run(['wget', download_url, '-O', save_path]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you use |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
return save_path | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
@contextlib.contextmanager | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def suppress_output(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
"""Suppress all output to stdout and stderr.""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||
with open(os.devnull, 'w') as fnull: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
old_stdout = os.dup(1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
old_stderr = os.dup(2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.dup2(fnull.fileno(), 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.dup2(fnull.fileno(), 2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
yield | ||||||||||||||||||||||||||||||||||||||||||||||||||||
finally: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.dup2(old_stdout, 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.dup2(old_stderr, 2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.close(old_stdout) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
os.close(old_stderr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a function to extract MT and MAT data from an ENDF file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def endf_specs(endf_path): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Read in ENDF tape using ENDFtk | ||||||||||||||||||||||||||||||||||||||||||||||||||||
tape = ENDFtk.tree.Tape.from_file(endf_path) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Determine the material ID | ||||||||||||||||||||||||||||||||||||||||||||||||||||
mat_ids = tape.material_numbers | ||||||||||||||||||||||||||||||||||||||||||||||||||||
matb = mat_ids[0] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set MF for cross sections | ||||||||||||||||||||||||||||||||||||||||||||||||||||
xs_MF = 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Extract out the file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
file = tape.material(matb).file(xs_MF) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Extract the MT numbers that are present in the file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
MTs = [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
for i in range(1000): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Magic number: why 1000? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is based on the list of MT numbers from the ENDF manual (https://www.oecd-nea.org/dbdata/data/manual-endf/endf102_MT.pdf). The range goes up to 999. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So best to define a variable |
||||||||||||||||||||||||||||||||||||||||||||||||||||
with suppress_output(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
file.section(i) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
MTs.append(i) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
except: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
continue | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It looks like you may be able to query the list of sections directly:
I noticed in the EDFtk readme that this may require parsing the file first (🤷♂️):
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
return matb, MTs | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a function to format GROUPR input cards | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def format_card(card_name, card_content, MTs): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
eitan-weinstein marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
card_str = '' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
gen_str = ' ' + ' '.join(map(str, card_content)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if card_name == 'Card 9': | ||||||||||||||||||||||||||||||||||||||||||||||||||||
for line in card_content: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card_str += f' {line}/\n' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
elif card_name == 'Card 4': | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card_str += gen_str + '\n' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card_str += gen_str + '/\n' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return card_str | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a function to create the GROUPR input file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def groupr_input(matb, MTs, element, A, mt_table): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# INPUT PARAMETERS | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
nendf = 20 # unit for endf tape | ||||||||||||||||||||||||||||||||||||||||||||||||||||
npend = 21 # unit for pendf tape | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ngout1 = 0 # unit for input gout tape (default=0) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ngout2 = 31 # unit for output gout tape (default=0) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
card1 = [nendf, npend, ngout1, ngout2] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# matb -- (already defined) -- material to be processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ign = 17 # neutron group structure option | ||||||||||||||||||||||||||||||||||||||||||||||||||||
igg = 0 # gamma group structure option | ||||||||||||||||||||||||||||||||||||||||||||||||||||
iwt = 11 # weight function option | ||||||||||||||||||||||||||||||||||||||||||||||||||||
lord = 0 # Legendgre order | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ntemp = 1 # number of temperatures (default = 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
nsigz = 1 # number of sigma zeroes (default = 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
iprint = 1 # long print option (0/1=minimum/maximum) -- (default=1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ismooth = 1 # swith on/off smoother operation (1/0, default=1=on) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
card2 = [matb, ign, igg, iwt, lord, ntemp, nsigz, iprint] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
and so on... |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Z = str(elements.index(element) + 1).zfill(2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
title = f'"{Z}-{element}-{A} for TENDL 2017"' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card3 = [title] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
temp = 293.16 # temperature in Kelvin | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card4 = [temp] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
sigz = 0 # sigma zero values (including infinity) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card5 = [sigz] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 9 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
mfd = 3 # file to be processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||
mtd = MTs # sections to be processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card9 = [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
for mt in MTs: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
mtname = mt_table[mt_table['MT'] == mt]['Reaction'].values[0] # description of section to be processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card9_line = f'{mfd} {mt} "{mtname}"' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card9.append(card9_line) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Set Card 10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
matd = 0 # next mat number to be processed | ||||||||||||||||||||||||||||||||||||||||||||||||||||
card10 = [matd] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Create a card deck | ||||||||||||||||||||||||||||||||||||||||||||||||||||
deck = [card1, card2, card3, card4, card5, card9, card10] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
deck_names = ['Card 1', 'Card 2', 'Card 3', 'Card 4', 'Card 5', 'Card 9', 'Card 10'] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
deck_df = pd.DataFrame({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. dataframe seems like overkill here, perhaps just a dictionary like the one I've already suggested? |
||||||||||||||||||||||||||||||||||||||||||||||||||||
'Card' : deck_names, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
'Contents' : deck | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# WRITE INPUT FILE FROM CARDS | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Write the input deck to the groupr.inp file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
with open('groupr.inp', 'w') as f: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
f.write('groupr\n') | ||||||||||||||||||||||||||||||||||||||||||||||||||||
for card_name, card_content in zip(deck_names, deck): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
f.write(format_card(card_name, card_content, MTs)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
f.write(' 0/\nstop') | ||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. separation of concerns: make a separate function to write the output from the one that generates the data |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
return deck_df | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Define a function to execute NJOY bash script | ||||||||||||||||||||||||||||||||||||||||||||||||||||
def run_njoy(endf_path, pendf_path, card_deck, element, A): | ||||||||||||||||||||||||||||||||||||||||||||||||||||
# Read the template file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
with open('run_njoy_template.sh', 'r') as f: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
script_content = f.read() | ||||||||||||||||||||||||||||||||||||||||||||||||||||
except: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
with open('./GROUPR/run_njoy_template.sh', 'r') as f: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
script_content = f.read() | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Replace placeholders with actual file paths | ||||||||||||||||||||||||||||||||||||||||||||||||||||
script_content = script_content.replace('<ENDF_PATH>', endf_path) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
script_content = script_content.replace('<PENDF_PATH>', pendf_path) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Write modified script content to run_njoy.sh file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
with open('run_njoy.sh', 'w') as f: | ||||||||||||||||||||||||||||||||||||||||||||||||||||
f.write(script_content) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Make the script executable | ||||||||||||||||||||||||||||||||||||||||||||||||||||
subprocess.run(["chmod", "+x", "run_njoy.sh"]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# Execute the modified script | ||||||||||||||||||||||||||||||||||||||||||||||||||||
njoy_run_message = subprocess.run(["./run_njoy.sh"], capture_output=True, text=True) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
print(njoy_run_message.stdout) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
print(njoy_run_message.stderr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
# If the run is successful, print out the output and make a copy of the file as a .GENDF file | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if njoy_run_message.stderr == '': | ||||||||||||||||||||||||||||||||||||||||||||||||||||
output = subprocess.run(['cat', 'output'], capture_output=True, text = True) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
title = card_deck[card_deck['Card'] == 'Card 3']['Contents'].values[0][0][1:-1] | ||||||||||||||||||||||||||||||||||||||||||||||||||||
title_index = output.stdout.find(title) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
print(output.stdout[:title_index + len(title)]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
gendf_path = f'tendl_2017_{element}{A}.gendf' | ||||||||||||||||||||||||||||||||||||||||||||||||||||
subprocess.run(['cp', 'tape31', gendf_path]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return gendf_path |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Definitely want to replace this with a python script. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#!/bin/bash | ||
|
||
# Check if NJOY is installed and accessible | ||
if ! command -v njoy &> /dev/null | ||
then | ||
echo "NJOY could not be found. Please make sure it is installed and added to your PATH." | ||
exit 1 | ||
fi | ||
|
||
# Define the input files | ||
TAPE20="<ENDF_PATH>" | ||
TAPE21="<PENDF_PATH>" | ||
INPUT="groupr.inp" | ||
OUTPUT="groupr.out" | ||
|
||
# Check if input files exist | ||
if [ ! -f "$TAPE20" ]; then | ||
echo "ENDF file not found!" | ||
exit 1 | ||
fi | ||
|
||
if [ ! -f "$TAPE21" ]; then | ||
echo "PENDF file not found!" | ||
exit 1 | ||
fi | ||
|
||
if [ ! -f "$INPUT" ]; then | ||
echo "Input file not found!" | ||
exit 1 | ||
fi | ||
|
||
# Run NJOY with the input file | ||
echo "Running NJOY..." | ||
njoy < "$INPUT" > "$OUTPUT" | ||
|
||
# Check if NJOY ran successfully | ||
if [ $? -eq 0 ]; then | ||
echo "NJOY ran successfully. Output written to /output." | ||
else | ||
echo "NJOY encountered an error. Check /output for details." | ||
exit 1 | ||
fi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you read this into a dictionary instead of a dataframe?
see: https://docs.python.org/3/library/csv.html#csv.DictReader