Add python script for rate coefficients conversion
This commit is contained in:
parent
03b0619991
commit
4d89e0e942
1 changed files with 66 additions and 0 deletions
66
scripts_python/rate_coef.py
Normal file
66
scripts_python/rate_coef.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import re
|
||||
import pandas as pd
|
||||
|
||||
file_path = "rate_coef_Sn.dat"
|
||||
|
||||
with open(file_path, "r") as f:
|
||||
content = f.read()
|
||||
|
||||
lines = content.splitlines()
|
||||
|
||||
# Dictionary to store tables with their respective dataframes
|
||||
tables = {}
|
||||
current_table = None
|
||||
headers = []
|
||||
data_rows = []
|
||||
|
||||
# Mapping for the short names to full descriptions
|
||||
full_name_map = {
|
||||
"ci": "electron_impact_direct_ionization",
|
||||
"ea": "electron_impact_excitation_autoionization",
|
||||
"rr": "radiative_recombination",
|
||||
"dr": "dielectronic_recombination",
|
||||
"bb": "bound_bound_radiative_loss_rates",
|
||||
"bf": "recombination_radiative_loss_rates",
|
||||
"csd": "charge_state_distribution"
|
||||
}
|
||||
|
||||
# Regular expression to detect a table header (e.g., "ci temp Sn0+ Sn1+ ...")
|
||||
header_pattern = re.compile(r'^(ci|ea|rr|dr|bb|bf|csd)\s+temp')
|
||||
|
||||
# Iterate through each line in the file
|
||||
for line in lines:
|
||||
if header_pattern.match(line):
|
||||
if current_table and headers and data_rows:
|
||||
headers = ['temp' if h == 'temp' else re.sub(r'\D', '', h) for h in headers]
|
||||
df = pd.DataFrame(data_rows, columns=headers)
|
||||
df.iloc[:, 0] = pd.to_numeric(df.iloc[:, 0], errors='coerce') # Convert temp column to numeric
|
||||
df.set_index(headers[0], inplace=True)
|
||||
tables[current_table] = df
|
||||
|
||||
parts = line.strip().split()
|
||||
current_table = parts[0]
|
||||
headers = parts[1:]
|
||||
data_rows = []
|
||||
elif current_table and line.strip() and not line.strip().startswith("#"):
|
||||
parts = line.strip().split()
|
||||
if len(parts) == len(headers) + 1:
|
||||
data_rows.append(parts)
|
||||
elif len(parts) == len(headers):
|
||||
data_rows.append(parts)
|
||||
|
||||
# Save the last table
|
||||
if current_table and headers and data_rows:
|
||||
df = pd.DataFrame(data_rows, columns=headers)
|
||||
df.iloc[:, 0] = pd.to_numeric(df.iloc[:, 0], errors='coerce')
|
||||
df.set_index(headers[0], inplace=True)
|
||||
tables[current_table] = df
|
||||
|
||||
# Save all tables to CSV files with full descriptive names
|
||||
csv_paths = {}
|
||||
for name, df in tables.items():
|
||||
full_name = full_name_map.get(name, name) # Default to name if no mapping found
|
||||
path = f"{full_name}.csv"
|
||||
df.to_csv(path)
|
||||
csv_paths[name] = path
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue