張潤(rùn)生 程敏熙 徐永康
(華南師范大學(xué)物理與電信工程學(xué)院 廣東 廣州 510006)
近年來,由于低硬件成本、按需服務(wù)、動(dòng)態(tài)調(diào)配、安全方便的特點(diǎn),云計(jì)算平臺(tái)成為輔助高校物理實(shí)驗(yàn)教學(xué)的重要資源[1].運(yùn)用云計(jì)算方法來輔助高校近代物理實(shí)驗(yàn)數(shù)據(jù)處理,不僅可以提高數(shù)據(jù)處理的速度和質(zhì)量,還可以發(fā)展學(xué)生現(xiàn)代信息技術(shù)運(yùn)用的能力[2].
本文基于云計(jì)算原理,利用Python及Flask設(shè)計(jì)了一款輔助G-M計(jì)數(shù)器及放射性衰變統(tǒng)計(jì)規(guī)律實(shí)驗(yàn)數(shù)據(jù)處理的程序,實(shí)現(xiàn)了數(shù)據(jù)表格呈現(xiàn)、數(shù)值計(jì)算及繪圖等功能.該程序可使用任意移動(dòng)終端,通過人機(jī)交互輸入實(shí)驗(yàn)數(shù)據(jù),實(shí)時(shí)進(jìn)行數(shù)據(jù)處理并輸出數(shù)據(jù)處理結(jié)果.
Python是一種面向?qū)ο?、支持?dòng)態(tài)語義、內(nèi)置高級(jí)數(shù)據(jù)結(jié)構(gòu)、語法簡(jiǎn)潔優(yōu)美、易于擴(kuò)展的解釋型腳本語言[3],其包含的模塊和擴(kuò)展庫提供了各種問題的解決方法,具有易學(xué)、易讀、易維護(hù)等特點(diǎn)[4].本文的編程語法采用Python語言.
Flask是一種使用Python語言編寫的Web開發(fā)框架,可以在短時(shí)間內(nèi)實(shí)現(xiàn)功能豐富的中小型網(wǎng)站或Web服務(wù),具有靈活、輕便、安全且容易上手等特點(diǎn)[5,6].本文采用Flask-WTF作為表單設(shè)計(jì)的第三方庫,調(diào)用Boken庫實(shí)現(xiàn)數(shù)據(jù)可視化.
G-M計(jì)數(shù)器是蓋革(Geiger,1882-1945)和米勒(Muller,1905-1979)發(fā)明的一種專門探究電離輻射(α粒子、β粒子、γ射線)強(qiáng)度的氣體電離探測(cè)器,具有結(jié)構(gòu)簡(jiǎn)單、易于加工、輸出信號(hào)幅度大、使用方便、成本低等特點(diǎn)[7].如圖1所示,G-M計(jì)數(shù)器由G-M計(jì)數(shù)管、高壓電源及定標(biāo)器組成.
圖1 G-M計(jì)數(shù)器實(shí)驗(yàn)裝置圖
在強(qiáng)度不變的放射源照射下,G-M計(jì)數(shù)管的計(jì)數(shù)率n與計(jì)數(shù)時(shí)間t、計(jì)數(shù)N的關(guān)系為
(1)
計(jì)數(shù)率n隨外加電壓V變化的坪曲線如圖2所示,其中坪長(zhǎng)L為
圖2 G-M計(jì)數(shù)管的坪曲線
L=V2-V1
(2)
坪坡度T為
(3)
原子核放射性衰變過程屬于隨機(jī)事件,而大量的隨機(jī)過程服從統(tǒng)計(jì)分布規(guī)律[7,8].
(4)
圖3 泊松分布與高斯分布曲線
(5)
泊松分布和高斯分布的標(biāo)準(zhǔn)差σ滿足
(6)
輸入實(shí)驗(yàn)條件下顯示的電壓示數(shù)及對(duì)應(yīng)的計(jì)數(shù)值,本程序在線處理繪制出G-M計(jì)數(shù)管的坪曲線,以此計(jì)算G-M計(jì)數(shù)管的坪長(zhǎng)度、坪坡度,確定閾電壓和適宜的工作電壓范圍.
(1)以下是程序算法的部分代碼:
V = [] #輸入電壓數(shù)據(jù)
counts = [] #輸入計(jì)數(shù)值
count_rates = [] #計(jì)算計(jì)數(shù)率并形成列表
for count in counts:
count_rate = count * 3 / 5
count_rates.append(′%.3f′ % count_rate)
z1 = np.polyfit(V ,count_rates ,4) #多項(xiàng)式擬合
p1 = np.poly1d(z1)
yvals = p1(V)
此部分為G-M計(jì)數(shù)管坪特性曲線的繪制提供數(shù)據(jù)支持,本實(shí)例的數(shù)據(jù)處理結(jié)果如表1所示.
表1 測(cè)量G-M計(jì)數(shù)管坪曲線的數(shù)據(jù)
(2)以下是實(shí)現(xiàn)數(shù)據(jù)可視化的部分代碼:
plot1=plt.plot(V,count_rates,′*′,label=′Raw data′)
plot2=plt.plot(V, yvals, ′r′,label=′Curve fitting′)
plt.xlabel(′V/伏′, fontproperties=′SimHei′)
plt.ylabel(′n/min′, fontproperties=′SimHei′)
plt.show()
此部分代碼調(diào)用Bokeh方法,將計(jì)算結(jié)果轉(zhuǎn)化成為圖像,實(shí)現(xiàn)平臺(tái)上數(shù)據(jù)的可視化.由圖4可知,本實(shí)例的閾電壓為320 V,適合工作頻率范圍的電壓為340~540 V,坪長(zhǎng)度約為200 V,坪坡度為
圖4 系統(tǒng)生成的G-M計(jì)數(shù)管坪特性曲線
4.08%/(100 V)
(7)
不需要放射源,選定工作電壓440 V,計(jì)數(shù)時(shí)間1 s,測(cè)量本底計(jì)數(shù),每次計(jì)數(shù)值均小于10,重復(fù)測(cè)量300次以上,輸入實(shí)驗(yàn)測(cè)得的計(jì)數(shù)值及對(duì)應(yīng)次數(shù),本程序在線處理繪制出實(shí)驗(yàn)圖像和理論圖像,實(shí)驗(yàn)結(jié)果基本服從泊松分布.
(1)以下是程序算法的部分代碼:
cnt=[] #計(jì)數(shù)值列表
istNs=[] #對(duì)應(yīng)次數(shù)列表
theoreticalPNs = []
averN=0
N=np.array(listNs).sum() #總測(cè)量次數(shù)
cnts=np.array(cnt)
truePNs = listNs / N #求P(N)的實(shí)際值
for i in range (0,len(cnt)): #求計(jì)數(shù)值的平均值
averN = averN + listNs[i] * cnts[i] / N
for i in cnts: # 求理論概率
theoreticalPN=((averN)**i)*(np.exp(-averN))/np.math.factorial(i)
theoreticalPNs.append(theoreticalPN)
用戶可通過導(dǎo)入Excel表格或手動(dòng)輸入兩種方式錄入數(shù)據(jù),此部分對(duì)輸入的數(shù)據(jù)進(jìn)行在線處理并獲得加權(quán)平均值、標(biāo)準(zhǔn)差、概率實(shí)驗(yàn)值和理論值等數(shù)據(jù).本實(shí)例的數(shù)據(jù)處理結(jié)果如圖5所示,數(shù)據(jù)處理結(jié)果可以通過Excel形式導(dǎo)出保存.
圖5 驗(yàn)證泊松分布實(shí)驗(yàn)的數(shù)據(jù)處理結(jié)果
(2)以下是實(shí)現(xiàn)數(shù)據(jù)可視化的部分代碼:
P=figure(title="實(shí)測(cè)分布圖",x_axis_label=
"N", y_axis_label = "P(N)")
p1=figure(title="理論分布圖",x_axis_label=
"N", y_axis_label = "P(N)")
p2 = figure(title = "對(duì)比圖",x_axis_label=
"N",
y_axis_label = "P(N)")
r = gridplot(children = [[p, p1], [p2]])
show(r)
當(dāng)用戶點(diǎn)擊“繪圖”按鈕后,程序會(huì)呈現(xiàn)該實(shí)驗(yàn)值的實(shí)測(cè)分布圖、理論分布圖以及以上兩幅圖的對(duì)比圖,以便用戶驗(yàn)證實(shí)驗(yàn)結(jié)果是否服從泊松分布.本實(shí)例處理得到圖像如圖6所示.
圖6 實(shí)測(cè)曲線與泊松分布理論曲線的對(duì)比
選擇工作電壓440 V,放置放射源,計(jì)數(shù)時(shí)間1 s,每次計(jì)數(shù)大于20,本實(shí)驗(yàn)每次的計(jì)數(shù)值約300/s,重復(fù)測(cè)量500次以上,輸入實(shí)驗(yàn)條件下測(cè)得的所有計(jì)數(shù)值,本程序在線處理繪制出實(shí)驗(yàn)圖像和理論圖像,實(shí)驗(yàn)結(jié)果基本服從高斯分布.
(1)以下是程序算法的部分代碼:
def large (list,big) : #分組函數(shù)
list1 = list a=[] b=[]
for i in range (0,len(list1)):
if list1[i] >= big :
for j in range (i,len(list1)):
b.append(list1[j])
break
else:
a.append(list[i])
return a,b
def fung(avg,Q=[]): #高斯分布計(jì)算
N=np.array(Q)
tpn=np.exp((-(N-avg)**2)/(2*avg))/
((avg*(2*np.pi))**0.5)
return tpn
如圖7所示,實(shí)驗(yàn)數(shù)據(jù)提交后,程序在網(wǎng)頁上以表格的形式呈現(xiàn)數(shù)據(jù)處理結(jié)果.在本實(shí)例中,avg±W、avg±2W、avg±3W三個(gè)區(qū)間的概率分別為0.6980,0.9451,0.9980,與高斯分布的理論概率68.5%,95.4%,99.7%相近.
圖7 驗(yàn)證高斯分布實(shí)驗(yàn)的數(shù)據(jù)處理結(jié)果
(2)以下是實(shí)現(xiàn)數(shù)據(jù)可視化的部分代碼:
p=figure(title=′頻率分布直方圖′,x_axis_label
=′計(jì)數(shù)率N′, y_axis_label = ′頻率/組距′ )
p1=figure(title="理論正態(tài)分布圖", x_axis_label
="計(jì)數(shù)率N", y_axis_label="P(N)",)
p2 = figure(title="對(duì)比圖", x_axis_label="計(jì)數(shù)率N", y_axis_label="P(N)")
r = gridplot(children=[[p, p1], [p2]])
show(r)
當(dāng)用戶點(diǎn)擊“繪圖”按鈕后,如圖8所示,程序會(huì)生成該實(shí)驗(yàn)的實(shí)驗(yàn)值分布圖、理論分布圖以及對(duì)比圖,直觀顯示實(shí)驗(yàn)結(jié)果是否服從高斯分布.
圖8 實(shí)測(cè)曲線與高斯分布理論曲線的對(duì)比
本文基于云計(jì)算平臺(tái),用Python及Flask設(shè)計(jì)了一個(gè)輔助蓋革-米勒計(jì)數(shù)器及放射性衰變統(tǒng)計(jì)規(guī)律實(shí)驗(yàn)數(shù)據(jù)處理的程序,不同類型終端都可以使用該平臺(tái)輔助實(shí)驗(yàn)教學(xué),極大提高了師生教學(xué)實(shí)踐和學(xué)習(xí)的效率和質(zhì)量,實(shí)現(xiàn)了基于云平臺(tái)的大學(xué)物理實(shí)驗(yàn)教學(xué)資源的功能拓展.