codexpast-exam-of-the-condensed-matter-physics-major-option-course-of-the-university-of-oxford2019-silicon-valleys-and-resonance.py
past-exam-of-the-condensed-matter-physics-major-option-course-of-the-university-of-oxford/2019-silicon-valleys-and-resonance.py
"""Original schematic; Python 3.14, NumPy, Matplotlib. Sole output: CWD/basename.png."""
from pathlib import Path
from itertools import permutations, product
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams.update({'font.family':'DejaVu Sans','font.size':11})
fig=plt.figure(figsize=(14.4,4.8),dpi=100,facecolor='white')
vertices=np.array(sorted({tuple(s*np.array(p)) for p in permutations([0.,.5,1.]) for s in map(np.array,product([-1,1],repeat=3))}))
def zone(ax):
for i,a in enumerate(vertices):
for b in vertices[i+1:]:
if abs(np.linalg.norm(a-b)-np.sqrt(.5))<1e-8:
ax.plot(*np.array([a,b]).T,color='#97a3ad',lw=.6,alpha=.65)
for j,label in enumerate(['$k_x$','$k_y$','$k_z$']):
end=np.zeros(3);end[j]=1.22
ax.plot(*np.array([np.zeros(3),end]).T,color='#283e50',lw=.9)
ax.text(*end,label,fontsize=10)
point=np.zeros(3);point[j]=1.04
ax.text(*point,'X',fontsize=9)
ax.text(0,0,-.12,r'$\Gamma$',fontsize=11)
ax.set(xlim=(-1.12,1.25),ylim=(-1.12,1.25),zlim=(-1.12,1.25))
ax.set_box_aspect((1,1,1));ax.set_axis_off();ax.view_init(22,35)
def ellipsoid(ax,center,radii,color):
u=np.linspace(0,2*np.pi,30);v=np.linspace(0,np.pi,18)
xx=np.outer(np.cos(u),np.sin(v));yy=np.outer(np.sin(u),np.sin(v));zz=np.outer(np.ones_like(u),np.cos(v))
ax.plot_surface(center[0]+radii[0]*xx,center[1]+radii[1]*yy,center[2]+radii[2]*zz,color=color,alpha=.9,linewidth=0,shade=True)
ax=fig.add_subplot(131,projection='3d');zone(ax)
for j in range(3):
for sign in [-1,1]:
center=np.zeros(3);center[j]=sign*.80
radii=np.full(3,.075);radii[j]=.164
ellipsoid(ax,center,radii,'#267daf')
ax.set_title('Electron-doped Si: six valleys',pad=2)
ax.text2D(.1,.01,r'Schematic pockets; axes in $2\pi/a$',transform=ax.transAxes,fontsize=9)
ax=fig.add_subplot(132,projection='3d');zone(ax)
ellipsoid(ax,np.zeros(3),np.array([.34,.34,.34]),'#cf6c34')
ax.set_title(r'Lower $\mu$: hole surface about $\Gamma$',pad=2)
ax.text2D(.08,.01,'Schematic: resolved valence sheets omitted',transform=ax.transAxes,fontsize=9)
ax=fig.add_subplot(133)
field=np.linspace(0,2.8,900);center=1.40;width=.10
absorption=1/(1+((field-center)/width)**2)
ax.plot(field,absorption,color='#247eac',lw=2)
ax.axvline(center,ls='--',lw=1,color='#6d7980')
ax.text(center+.10,.9,'1.4 T',fontsize=12)
ax.set(xlabel='$|B|$ (T)',ylabel='Normalized absorption',xlim=(0,2.8),ylim=(0,1.1),title=r'$\mathbf{B}\parallel[111]$: one resonance')
ax.text(.05,.95,'Illustrative linewidth',transform=ax.transAxes,va='top',fontsize=10)
ax.spines[['top','right']].set_visible(False)
fig.tight_layout(pad=1.8)
fig.savefig(Path.cwd()/Path(__file__).with_suffix('.png').name,facecolor='white',transparent=False,metadata={'Software':'Matplotlib'})
plt.close(fig)