pdh_demo.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env python3
  2. import matplotlib
  3. import matplotlib.pyplot as plt
  4. from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
  5. from mpl_toolkits.axes_grid1.inset_locator import mark_inset
  6. import numpy as np
  7. from math import cos, pi
  8. matplotlib.rcParams.update({'font.size': 15})
  9. c = 3E8 # m/s
  10. L = 1 # m
  11. # λ = 1E-6 # m
  12. # ω = 2*pi*λ/c # s^-1
  13. # t0 = λ*(3759398496+0.5)
  14. FSR = 2*pi*c/(2*L)
  15. ω = FSR
  16. def T_e(T, δω):
  17. R = 1-T
  18. return T**2 / (1 + R**2 - 2*R*cos(2*L*(ω+δω*FSR)/c))
  19. def R_e(T, δω):
  20. return 1 - T_e(T, δω)
  21. def main():
  22. T = 0.15
  23. δωs = np.linspace(-0.5, 1.5, 5000)
  24. R_es = [R_e(T, δω) for δω in δωs]
  25. ax1 = plt.gca()
  26. ax1.plot(δωs, R_es)
  27. ax1.set_ylabel("$R_e$")
  28. ax1.set_xlabel("$\Delta \omega$ (FSR)")
  29. ax1.set_ylim((0, 1))
  30. ax1.text(1.15, 0.85, "$\mathcal{F}_c=19.3$",
  31. bbox={'facecolor': 'grey', 'alpha': 0.3})
  32. # fmt = '%.0f%%'
  33. # xticks = matplotlib.ticker.FormatStrFormatter(fmt)
  34. # ax1.yaxis.set_major_formatter(xticks)
  35. ax1.yaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(
  36. lambda x, pos: '{:d}%'.format(int(x*100))))
  37. axins = zoomed_inset_axes(ax1, 8, bbox_to_anchor=(0.7, 0.5),
  38. bbox_transform=ax1.transAxes)
  39. axins.plot(δωs, R_es)
  40. axins.set_xlim(-0.03, 0.03)
  41. axins.set_ylim(0, 0.05)
  42. axins.set_yticks([])
  43. axins.set_xticks([])
  44. mark_inset(ax1, axins, loc1=2, loc2=4, fc="none", ec="0.5")
  45. plt.tight_layout()
  46. plt.savefig("pdh_demo.png")
  47. # plt.show()
  48. if __name__ == '__main__':
  49. main()