Files
SiC-2nd-paper/画图/拉曼结果拟合/combined/fitting.ipynb
2025-10-23 14:56:31 +08:00

202 lines
7.4 KiBLFS
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "32b3f29d",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy.optimize import curve_fit\n",
"import matplotlib.pyplot as plt\n",
"import plotly.graph_objects as go\n",
"import matplotlib\n",
"import os\n",
"np.set_printoptions(suppress=True, formatter={'float_kind':lambda x: \"%.3f\" % x})\n",
"\n",
"def lorentzian(x, A, x0, gamma, k, b):\n",
" return A / (1 + ((x - x0) / gamma)**2) + k * x + b\n",
"def double_lorentzian(x, A1, x1, gamma1, A2, x2, gamma2, k, b):\n",
" return lorentzian(x, A1, x1, gamma1, k, b) + lorentzian(x, A2, x2, gamma2, 0, 0)\n",
"def triple_lorentzian(x, A1, x1, gamma1, A2, x2, gamma2, A3, x3, gamma3, k, b):\n",
" return lorentzian(x, A1, x1, gamma1, k, b) + lorentzian(x, A2, x2, gamma2, 0, 0) + lorentzian(x, A3, x3, gamma3, 0, 0)\n",
"%pwd\n",
"polarizations = [ \"zyyz\", \"zyxz\" ]\n",
"x = {p: [[np.loadtxt(f'画图/拉曼结果拟合/combined/{p}/{w}/{s}/x.txt') for s in range(10)] for w in range(6)] for p in polarizations}\n",
"y = {p: [[np.loadtxt(f'画图/拉曼结果拟合/combined/{p}/{w}/{s}/y.txt') for s in range(10)] for w in range(6)] for p in polarizations}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ca44330b",
"metadata": {},
"outputs": [],
"source": [
"def fitting_peek(x, y, x_range, function, guess, bound):\n",
" mask = (x > x_range[0]) & (x < x_range[1])\n",
" x = x[mask]\n",
" y = y[mask]\n",
" popt, pcov = curve_fit(function, x, y, p0=guess, maxfev=100000, bounds=bound)\n",
" return popt\n",
"fitting_init_parameter = [\n",
" [300, 196, 1, 2e3, 204, 0.8, 0, 900],\n",
" [50, 266, 5, 0, 100],\n",
" [1e3, 611, 5, 0, 100],\n",
" [1e4, 776, 1, 1e3, 797, 1, 1, 100],\n",
" [1e4, 776, 1, 1e4, 782, 1, 1e3, 797, 1, 1, 100],\n",
" [1e4, 776, 1, 1, 100],\n",
"]\n",
"fitting_range = [\n",
" [180, 220],\n",
" [250, 280],\n",
" [600, 617],\n",
" [700, 850],\n",
" [700, 850],\n",
" [700, 792]\n",
"]\n",
"fitting_bound = [\n",
" ([0, 192, 0, 0, 200, 0, -np.inf, -np.inf], [np.inf, 198, np.inf, np.inf, 206, np.inf, np.inf, np.inf]),\n",
" ([0, 260, 0, -np.inf, -np.inf], [np.inf, 270, np.inf, np.inf, np.inf]),\n",
" ([0, 605, 0, -np.inf, -np.inf], [np.inf, 617, np.inf, np.inf, np.inf]),\n",
" (-np.inf, np.inf),\n",
" (-np.inf, np.inf),\n",
" (-np.inf, np.inf)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "22b57972",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"zyyz 0 609.746 ± 0.009\n",
"zyyz 1 609.741 ± 0.011\n",
"zyyz 2 609.773 ± 0.018\n",
"zyyz 3 609.782 ± 0.012\n",
"zyyz 4 609.759 ± 0.009\n",
"zyyz 5 609.740 ± 0.011\n",
"zyxz 0 609.606 ± 0.110\n",
"zyxz 1 609.595 ± 0.090\n",
"zyxz 2 609.661 ± 0.068\n",
"zyxz 3 609.641 ± 0.076\n",
"zyxz 4 609.685 ± 0.091\n",
"zyxz 5 609.643 ± 0.083\n"
]
}
],
"source": [
"A11_shift = {p: [[None for _ in range(10)] for _ in range(6)] for p in polarizations}\n",
"for polarization in polarizations:\n",
" for wafer in range(6):\n",
" for site in range(10):\n",
" this_x = np.array(x[polarization][wafer][site])\n",
" this_y = np.array(y[polarization][wafer][site])\n",
" popt = fitting_peek(this_x, this_y, fitting_range[2], lorentzian, fitting_init_parameter[2], fitting_bound[2])\n",
" A11_shift[polarization][wafer][site] = popt[1]\n",
" print(f'{polarization} {wafer} {np.mean(A11_shift[polarization][wafer]):.3f} ± {np.std(A11_shift[polarization][wafer]):.3f}')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "77747107",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"E21 zyyz 0 195.514 ± 0.014\n",
"E21 zyyz 1 195.452 ± 0.024\n",
"E21 zyyz 2 195.529 ± 0.032\n",
"E21 zyyz 3 195.561 ± 0.019\n",
"E21 zyyz 4 195.562 ± 0.016\n",
"E21 zyyz 5 195.518 ± 0.022\n",
"E21 zyxz 0 195.470 ± 0.135\n",
"E21 zyxz 1 195.369 ± 0.101\n",
"E21 zyxz 2 195.529 ± 0.090\n",
"E21 zyxz 3 195.636 ± 0.123\n",
"E21 zyxz 4 195.675 ± 0.119\n",
"E21 zyxz 5 195.574 ± 0.169\n",
"E22 zyyz 0 203.438 ± 0.009\n",
"E22 zyyz 1 203.405 ± 0.017\n",
"E22 zyyz 2 203.513 ± 0.025\n",
"E22 zyyz 3 203.509 ± 0.014\n",
"E22 zyyz 4 203.484 ± 0.013\n",
"E22 zyyz 5 203.469 ± 0.010\n",
"E22 zyxz 0 203.411 ± 0.129\n",
"E22 zyxz 1 203.293 ± 0.103\n",
"E22 zyxz 2 203.495 ± 0.092\n",
"E22 zyxz 3 203.572 ± 0.109\n",
"E22 zyxz 4 203.591 ± 0.108\n",
"E22 zyxz 5 203.499 ± 0.164\n",
"E22-E11 zyyz 0 7.924 ± 0.015\n",
"E22-E11 zyyz 1 7.953 ± 0.018\n",
"E22-E11 zyyz 2 7.984 ± 0.016\n",
"E22-E11 zyyz 3 7.949 ± 0.010\n",
"E22-E11 zyyz 4 7.921 ± 0.010\n",
"E22-E11 zyyz 5 7.951 ± 0.016\n",
"E22-E11 zyxz 0 7.941 ± 0.025\n",
"E22-E11 zyxz 1 7.924 ± 0.014\n",
"E22-E11 zyxz 2 7.966 ± 0.022\n",
"E22-E11 zyxz 3 7.936 ± 0.031\n",
"E22-E11 zyxz 4 7.916 ± 0.024\n",
"E22-E11 zyxz 5 7.925 ± 0.015\n"
]
}
],
"source": [
"E21_shift = {p: [[None for _ in range(10)] for _ in range(6)] for p in polarizations}\n",
"E22_shift = {p: [[None for _ in range(10)] for _ in range(6)] for p in polarizations}\n",
"E22_E11_shift_diff = {p: [[None for _ in range(10)] for _ in range(6)] for p in polarizations}\n",
"for polarization in polarizations:\n",
" for wafer in range(6):\n",
" for site in range(10):\n",
" this_x = np.array(x[polarization][wafer][site])\n",
" this_y = np.array(y[polarization][wafer][site])\n",
" popt = fitting_peek(this_x, this_y, fitting_range[0], double_lorentzian, fitting_init_parameter[0], fitting_bound[0])\n",
" E21_shift[polarization][wafer][site] = popt[1]\n",
" E22_shift[polarization][wafer][site] = popt[4]\n",
" E22_E11_shift_diff[polarization][wafer][site] = popt[4] - popt[1]\n",
"for polarization in polarizations:\n",
" for wafer in range(6):\n",
" print(f'E21 {polarization} {wafer} {np.mean(E21_shift[polarization][wafer]):.3f} ± {np.std(E21_shift[polarization][wafer]):.3f}')\n",
"for polarization in polarizations:\n",
" for wafer in range(6):\n",
" print(f'E22 {polarization} {wafer} {np.mean(E22_shift[polarization][wafer]):.3f} ± {np.std(E22_shift[polarization][wafer]):.3f}')\n",
"for polarization in polarizations:\n",
" for wafer in range(6):\n",
" print(f'E22-E11 {polarization} {wafer} {np.mean(E22_E11_shift_diff[polarization][wafer]):.3f} ± {np.std(E22_E11_shift_diff[polarization][wafer]):.3f}')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}