import gradio as gr
import numpy as np
title="计算X射线在材料中的穿透深度"
description="""
此程序计算的X射线为Cu Ka,波长为1.5406 埃,对应的能量为8.04 keV (查元素质量衰减系数时用) \n
角度的单位为:° \n
密度的单位为:g/cm\u00b3 \n
packing: 表示粉体压实的程度,压的越实值越大,最大为1。块材默认为1 \n
HighScore:可计算大入射角,一般用于XRD计算 \n
临界角全反射模型:可计算小入射角,一般用于GIXRD计算 \n
元素的相对原子质量和质量衰减系数可在页面底部链接查询 \n
"""
article = "
元素质量衰减系数
相对原子质量表
"
def calc_X_ray_penetration(incident_angle,density, packing, calc_equation, chemical_formula):
n=len(chemical_formula['元素'])
t_atom_number=chemical_formula['原子个数']
t_relative_atomic_mass=chemical_formula['相对原子质量']
t_um=chemical_formula['质量衰减系数']
t_a_m=0
for i in range(n):
t_a_m+=float(t_atom_number[i])*float(t_relative_atomic_mass[i])
um=0
for i in range(n):
um+=float(t_um[i])*(float(t_atom_number[i])*float(t_relative_atomic_mass[i])/t_a_m)
u=um*density
if calc_equation=="HighScore":
# # np.sin 需要把计算时需要把°换成弧度
d=0.5*np.log(100)/u*np.sin(incident_angle/180.*np.pi)
d=d*1e4
return f" 材料的质量衰减系数为:{um:.2f} cm\u00b2/g\n 材料的线衰减系数为:{u:.2f} cm\u207B\u00b9\n X射线在材料中的穿透深度为:{d:.4f} um"
# return np.array([d,u])
if calc_equation=="临界角全反射模型":
ac=1.6e-3*np.sqrt(density)*1.5406
a=incident_angle/180*np.pi
if a