File:X-ray attenuation spectra elements mass.svg

原始檔案 (SVG 檔案,表面大小:576 × 432 像素,檔案大小:62 KB)


摘要

描述
English: X-ray mass attenuation spectra of selected elements for energies up to 250keV, linear abscissa, logarithmic ordinate.
日期
來源 自己的作品
作者 Geek3
SVG開發
InfoField
 
SVG檔案的原始碼通過W3C驗證
 
向量圖形使用Matplotlib創作。
原始碼
InfoField

Matplotlib source code

The plot was generated with Matplotlib
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as itp
from math import *

def interp(x, max_gap=0.05):
    sections = [[x[0]]]
    # divide data into monotonic sections
    for i in range(1, len(x)):
        if x[i-1,0] < x[i,0] and x[i-1,1] >= x[i,1]:
            sections[-1].append(x[i])
        else:
            sections.append([x[i]])
    
    # interpolate within each section
    for si, s in enumerate(sections):
        if len(s) >= 2:
            # use third-order polynomial of logarithmized data
            spline = itp.make_interp_spline([log(d[0]) for d in s],
                [np.log(d[1:]) for d in s], bc_type="natural")
            
            for i in range(len(s) - 1, 0, -1):
                nsub = log(s[i-1][0] / s[i][0]) / log(1 - max_gap)
                if nsub > 1:
                    nsub = int(ceil(nsub))
                    xnew = s[i-1][0] * (s[i][0] / s[i-1][0]) ** (np.arange(1, nsub) / nsub)
                    s = s[:i] + [np.concatenate(([xnew[j]], d)) for j, d in enumerate(np.exp(spline(np.log(xnew))))] + s[i:]
        sections[si] = s
    
    return np.concatenate(sections)

# data from https://physics.nist.gov/PhysRefData/XrayMassCoef/tab3.html
mu_H = interp(np.fromstring("""
1.90000E-4 1.000E+3 1.00000E-3 7.217E+0 1.50000E-3 2.148E+0 2.00000E-3 1.059E+0
3.00000E-3 5.612E-1 4.00000E-3 4.546E-1 5.00000E-3 4.193E-1 6.00000E-3 4.042E-1
8.00000E-3 3.914E-1 1.00000E-2 3.854E-1 1.50000E-2 3.764E-1 2.00000E-2 3.695E-1
3.00000E-2 3.570E-1 4.00000E-2 3.458E-1 5.00000E-2 3.355E-1 6.00000E-2 3.260E-1
8.00000E-2 3.091E-1 1.00000E-1 2.944E-1 1.50000E-1 2.651E-1 2.00000E-1 2.429E-1
3.00000E-1 2.112E-1
""", sep=" ").reshape((-1, 2)))

mu_C = interp(np.fromstring("""
1.00000E-3 2.211E+3 1.50000E-3 7.002E+2 2.00000E-3 3.026E+2 3.00000E-3 9.033E+1
4.00000E-3 3.778E+1 5.00000E-3 1.912E+1 6.00000E-3 1.095E+1 8.00000E-3 4.576E+0
1.00000E-2 2.373E+0 1.50000E-2 8.071E-1 2.00000E-2 4.420E-1 3.00000E-2 2.562E-1
4.00000E-2 2.076E-1 5.00000E-2 1.871E-1 6.00000E-2 1.753E-1 8.00000E-2 1.610E-1
1.00000E-1 1.514E-1 1.50000E-1 1.347E-1 2.00000E-1 1.229E-1 3.00000E-1 1.066E-1
""", sep=" ").reshape((-1, 2)))

mu_N = interp(np.fromstring("""
1.00000E-3 3.311E+3 1.50000E-3 1.083E+3 2.00000E-3 4.769E+2 3.00000E-3 1.456E+2
4.00000E-3 6.166E+1 5.00000E-3 3.144E+1 6.00000E-3 1.809E+1 8.00000E-3 7.562E+0
1.00000E-2 3.879E+0 1.50000E-2 1.236E+0 2.00000E-2 6.178E-1 3.00000E-2 3.066E-1
4.00000E-2 2.288E-1 5.00000E-2 1.980E-1 6.00000E-2 1.817E-1 8.00000E-2 1.639E-1
1.00000E-1 1.529E-1 1.50000E-1 1.353E-1 2.00000E-1 1.233E-1 3.00000E-1 1.068E-1
""", sep=" ").reshape((-1, 2)))

mu_O = interp(np.fromstring("""
1.00000E-3 4.590E+3 1.50000E-3 1.549E+3 2.00000E-3 6.949E+2 3.00000E-3 2.171E+2
4.00000E-3 9.315E+1 5.00000E-3 4.790E+1 6.00000E-3 2.770E+1 8.00000E-3 1.163E+1
1.00000E-2 5.952E+0 1.50000E-2 1.836E+0 2.00000E-2 8.651E-1 3.00000E-2 3.779E-1
4.00000E-2 2.585E-1 5.00000E-2 2.132E-1 6.00000E-2 1.907E-1 8.00000E-2 1.678E-1
1.00000E-1 1.551E-1 1.50000E-1 1.361E-1 2.00000E-1 1.237E-1 3.00000E-1 1.070E-1
""", sep=" ").reshape((-1, 2)))

mu_Na = interp(np.fromstring("""
1.00000E-3 6.542E+2 1.03542E-3 5.960E+2 1.07210E-3 5.429E+2 1.07210E-3 6.435E+3
1.50000E-3 3.194E+3 2.00000E-3 1.521E+3 3.00000E-3 5.070E+2 4.00000E-3 2.261E+2
5.00000E-3 1.194E+2 6.00000E-3 7.030E+1 8.00000E-3 3.018E+1 1.00000E-2 1.557E+1
1.50000E-2 4.694E+0 2.00000E-2 2.057E+0 3.00000E-2 7.197E-1 4.00000E-2 3.969E-1
5.00000E-2 2.804E-1 6.00000E-2 2.268E-1 8.00000E-2 1.796E-1 1.00000E-1 1.585E-1
1.50000E-1 1.335E-1 2.00000E-1 1.199E-1 3.00000E-1 1.029E-1
""", sep=" ").reshape((-1, 2)))

mu_P = interp(np.fromstring("""
1.00000E-3 1.913E+3 1.50000E-3 6.547E+2 2.00000E-3 3.018E+2 2.14550E-3 2.494E+2
2.14550E-3 2.473E+3 3.00000E-3 1.118E+3 4.00000E-3 5.242E+2 5.00000E-3 2.860E+2
6.00000E-3 1.726E+2 8.00000E-3 7.660E+1 1.00000E-2 4.035E+1 1.50000E-2 1.239E+1
2.00000E-2 5.352E+0 3.00000E-2 1.700E+0 4.00000E-2 8.096E-1 5.00000E-2 4.916E-1
6.00000E-2 3.494E-1 8.00000E-2 2.324E-1 1.00000E-1 1.865E-1 1.50000E-1 1.432E-1
2.00000E-1 1.250E-1 3.00000E-1 1.055E-1
""", sep=" ").reshape((-1, 2)))

mu_Ca = interp(np.fromstring("""
1.00000E-3 4.867E+3 1.50000E-3 1.714E+3 2.00000E-3 7.999E+2 3.00000E-3 2.676E+2
4.00000E-3 1.218E+2 4.03810E-3 1.187E+2 4.03810E-3 1.023E+3 5.00000E-3 6.026E+2
6.00000E-3 3.731E+2 8.00000E-3 1.726E+2 1.00000E-2 9.341E+1 1.50000E-2 2.979E+1
2.00000E-2 1.306E+1 3.00000E-2 4.080E+0 4.00000E-2 1.830E+0 5.00000E-2 1.019E+0
6.00000E-2 6.578E-1 8.00000E-2 3.656E-1 1.00000E-1 2.571E-1 1.50000E-1 1.674E-1
2.00000E-1 1.376E-1 3.00000E-1 1.116E-1
""", sep=" ").reshape((-1, 2)))

mu_Fe = interp(np.fromstring("""
1.00000E-3 9.085E+3 1.50000E-3 3.399E+3 2.00000E-3 1.626E+3 3.00000E-3 5.576E+2
4.00000E-3 2.567E+2 5.00000E-3 1.398E+2 6.00000E-3 8.484E+1 7.11200E-3 5.319E+1
7.11200E-3 4.076E+2 8.00000E-3 3.056E+2 1.00000E-2 1.706E+2 1.50000E-2 5.708E+1
2.00000E-2 2.568E+1 3.00000E-2 8.176E+0 4.00000E-2 3.629E+0 5.00000E-2 1.958E+0
6.00000E-2 1.205E+0 8.00000E-2 5.952E-1 1.00000E-1 3.717E-1 1.50000E-1 1.964E-1
2.00000E-1 1.460E-1 3.00000E-1 1.099E-1
""", sep=" ").reshape((-1, 2)))

mu_Sn = interp(np.fromstring("""
1.00000E-3 8.157E+3 1.50000E-3 3.296E+3 2.00000E-3 1.665E+3 3.00000E-3 6.143E+2
3.92880E-3 3.114E+2 3.92880E-3 9.285E+2 4.00000E-3 9.393E+2 4.15610E-3 8.469E+2
4.15610E-3 1.145E+3 4.30764E-3 1.060E+3 4.46470E-3 9.712E+2 4.46470E-3 1.117E+3
5.00000E-3 8.471E+2 6.00000E-3 5.294E+2 8.00000E-3 2.500E+2 1.00000E-2 1.384E+2
1.50000E-2 4.664E+1 2.00000E-2 2.146E+1 2.92001E-2 7.760E+0 2.92001E-2 4.360E+1
3.00000E-2 4.121E+1 4.00000E-2 1.942E+1 5.00000E-2 1.070E+1 6.00000E-2 6.564E+0
8.00000E-2 3.029E+0 1.00000E-1 1.676E+0 1.50000E-1 6.091E-1 2.00000E-1 3.260E-1
3.00000E-1 1.639E-1
""", sep=" ").reshape((-1, 2)))

mu_Pb = interp(np.fromstring("""
1.00000E-3 5.210E+3 1.50000E-3 2.356E+3 2.00000E-3 1.285E+3 2.48400E-3 8.006E+2
2.48400E-3 1.397E+3 2.53429E-3 1.726E+3 2.58560E-3 1.944E+3 2.58560E-3 2.458E+3
3.00000E-3 1.965E+3 3.06640E-3 1.857E+3 3.06640E-3 2.146E+3 3.30130E-3 1.796E+3
3.55420E-3 1.496E+3 3.55420E-3 1.585E+3 3.69948E-3 1.442E+3 3.85070E-3 1.311E+3
3.85070E-3 1.368E+3 4.00000E-3 1.251E+3 5.00000E-3 7.304E+2 6.00000E-3 4.672E+2
8.00000E-3 2.287E+2 1.00000E-2 1.306E+2 1.30352E-2 6.701E+1 1.30352E-2 1.621E+2
1.50000E-2 1.116E+2 1.52000E-2 1.078E+2 1.52000E-2 1.485E+2 1.55269E-2 1.416E+2
1.58608E-2 1.344E+2 1.58608E-2 1.548E+2 2.00000E-2 8.636E+1 3.00000E-2 3.032E+1
4.00000E-2 1.436E+1 5.00000E-2 8.041E+0 6.00000E-2 5.021E+0 8.00000E-2 2.419E+0
8.80045E-2 1.910E+0 8.80045E-2 7.683E+0 1.00000E-1 5.549E+0 1.50000E-1 2.014E+0
2.00000E-1 9.985E-1 3.00000E-1 4.031E-1
""", sep=" ").reshape((-1, 2)))

plt.figure()
plt.plot(mu_Pb[:,0] * 1e3, mu_Pb[:,1], label="$_{82}$Pb", color="#77ac30")
plt.plot(mu_Sn[:,0] * 1e3, mu_Sn[:,1], label="$_{50}$Sn", color="#0088bd")
plt.plot(mu_Fe[:,0] * 1e3, mu_Fe[:,1], label="$_{26}$Fe", color="#d95319")
plt.plot(mu_Ca[:,0] * 1e3, mu_Ca[:,1], label="$_{20}$Ca", color="#edb120")
plt.plot(mu_P[:,0] * 1e3, mu_P[:,1], label="$_{15}$P", color="#7e2f8e")
plt.plot(mu_Na[:,0] * 1e3, mu_Na[:,1], label="$_{11}$Na", color="#555555")
plt.plot(mu_O[:,0] * 1e3, mu_O[:,1], label="$_8$O", color="#cc1122")
plt.plot(mu_N[:,0] * 1e3, mu_N[:,1], label="$_7$N", color="#5577ff")
plt.plot(mu_C[:,0] * 1e3, mu_C[:,1], label="$_6$C", color="#000000")
plt.plot(mu_H[:,0] * 1e3, mu_H[:,1], label="$_1$H", color="#aaaaaa")

plt.gca().set_yscale('log')
plt.xlim(0, 250)
plt.ylim(1e-1, 1e3)
plt.ylabel(r"$\mu/\rho$ [cm${}^2$/g]")
plt.xlabel("E [keV]")
plt.legend(borderaxespad=0.8, framealpha=1)
plt.grid()
plt.tight_layout()
plt.savefig("X-ray_attenuation_spectra_elements_mass.svg")

授權條款

我,本作品的著作權持有者,決定用以下授權條款發佈本作品:
w:zh:共享創意
姓名標示 相同方式分享
您可以自由:
  • 分享 – 複製、發佈和傳播本作品
  • 重新修改 – 創作演繹作品
惟需遵照下列條件:
  • 姓名標示 – 您必須指名出正確的製作者,和提供授權條款的連結,以及表示是否有對內容上做出變更。您可以用任何合理的方式來行動,但不得以任何方式表明授權條款是對您許可或是由您所使用。
  • 相同方式分享 – 如果您利用本素材進行再混合、轉換或創作,您必須基於如同原先的相同或兼容的條款,來分布您的貢獻成品。

說明

添加單行說明來描述出檔案所代表的內容
X-ray mass attenuation spectra of selected elements

在此檔案描寫的項目

描繪內容

創作作者 Chinese (Hong Kong) (已轉換拼寫)

沒有維基數據項目的某些值

作者姓名字串 繁體中文 (已轉換拼寫):​Geek3
維基媒體使用者名稱 繁體中文 (已轉換拼寫):​Geek3

著作權狀態 繁體中文 (已轉換拼寫)

有著作權 繁體中文 (已轉換拼寫)

共享創意署名-相同方式共享4.0國際 Chinese (Hong Kong) (已轉換拼寫)

檔案來源 Chinese (Taiwan) (已轉換拼寫)

上傳者的原創作品 繁體中文 (已轉換拼寫)

多媒體型式 繁體中文 (已轉換拼寫)

image/svg+xml

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸用戶備⁠註
目前2023年8月16日 (三) 12:48於 2023年8月16日 (三) 12:48 版本的縮圖576 × 432(62 KB)Geek3Uploaded own work with UploadWizard

下列頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案:

詮釋資料