我不知道如何在Python解決這個問題(至少此時)。所以我用Matlab做了。
clear all
clc
A = dlmread('YOUR DATAS'); %Firstly add to path
plot(A(:,1),A(:,2)) %Plotting the graph
hold on
min_peak = input('Just write a value that is higher than minimum peak values: ');
%This value must be between requested peaks and non-requested peaks (you can see this in graph)
[yval, yval_i] = findpeaks(A(:,2),'MinPeakHeight',min_peak); %Finding peaks
scatter(A(yval_i,1), yval); %Showing peaks
Beta = [];
xval = [];
for k = 1:size(yval_i,1) %Finding x values corresponding to y (peak) values
xval1 = A(yval_i(k),1);
xval = [xval xval1];
end
Theta = xval/2;
for i = 1:size(yval,1) %Finding half of max. peak values
yval_i1 = yval_i(i,1);
while (yval(i,1))/2 < A(yval_i1+1,2)
yval_i1 = yval_i1+1;
end
yval_i2 = yval_i(i,1);
while (yval(i,1))/2 < A(yval_i2-1,2)
yval_i2 = yval_i2-1;
end
plot(A(yval_i2,1)*ones(size(A(:,2))), A(:,2));
plot(A(yval_i1,1)*ones(size(A(:,2))), A(:,2));
% hold on
% scatter(A(yval_i1,1),A(yval_i1,2))
% scatter(A(yval_i2,1),A(yval_i2,2))
B = abs(A(yval_i1,1)-A(yval_i2,1));
Beta = [Beta B];
end
Beta
K = 0.94;
Lambda = 1.5406e-10;
To = [];
for j = 1:size(Beta,2)
To1 = (K*Lambda)/(Beta(j)*cos(Theta(j)));
To = [To To1];
end
To = abs(To)
請提供更多信息和正在運行的代碼段。你想適應(高斯?)到你的數據並提取FWHM?你究竟在哪裏卡住? – nostradamus
感謝您的關注。我正在嘗試查找Beta。 [https://en.wikipedia.org/wiki/Full_width_at_half_maximum#/media/File:FWHM.svg]。這是Δ(2θ)。 – esilik
不管怎麼樣?然後,你應該看看'scipy'模塊( - > curvefit)。然後,您可以定義擬合函數並提取FWHM和其他參數。 - 如果您自己嘗試過並遇到問題(如前所述):如果您向我們提供工作代碼片段,我們可以處理正在運行的示例代碼,以解決您的問題。 – nostradamus