#!/usr/bin/env python from matplotlib import pyplot as plt import numpy as np import argparse import sys # -i → agrs.show → open plot in interactive mode # -s → args.save → save plot # # -n → agrs.note → do the Landau plot with the notes # -b → args.both → do the Landau-Moyal plot def moyal(x, μ, σ): N = (1)/(np.sqrt(2 * np.pi) * σ) return N * np.exp(- 0.5 * ((x - μ)/σ + np.exp( - (x - μ)/σ))) def main(args): # prepare figure if args.show: plt.figure() elif args.save: plt.rcParams['font.size'] = 8 if args.both: plt.figure(figsize=(3, 2)) elif args.note: plt.figure(figsize=(5, 3)) if args.note: # useful coordinates y_min = -0.0086 # y min axes y_max = 0.1895 # y max axes me = -0.22 # mode f_me = 0.1806 # f(mode) h_f_me = f_me/2 # falf f(mode) x_m = -1.5867 # x₋ x_p = 2.4330 # x₊ # draw the lines plt.plot([-10, me], [f_me, f_me], color='gray') plt.plot([me, me], [f_me, y_min], color='gray') plt.plot([-10, x_p], [h_f_me, h_f_me], color='gray') plt.plot([x_m, x_m], [y_min, h_f_me], color='gray') plt.plot([x_p, x_p], [y_min, h_f_me], color='gray') # draw the notes s = 0.012 S = 0.2 plt.annotate('$f(m_e)$', [-10 + S, f_me - s]) plt.annotate('$f(m_e)/2$', [-10 + S, h_f_me - s]) plt.annotate('$x_-$', [x_m + S, y_min + s/2]) plt.annotate('$x_+$', [x_p + S, y_min + s/2]) plt.annotate('$m_e$', [me + S, y_min + s/2]) # prepare plot plt.title('Landau distribution', loc='right') plt.xlim(-10, 10) plt.ylim(y_min, y_max) if args.both: plt.ylim(-0.015, 0.265) # draw Landau plot x, y = np.loadtxt(sys.stdin, unpack=True) plt.plot(x, y, color='#92182b', label='Landau') # do Moyal plot if args.both: μ = -0.22278298 σ = 1.1191486 x = np.arange(-10, 30, 0.01) plt.plot(x, moyal(x, μ, σ), color='gray', label='Moyal') plt.legend() # save figure plt.tight_layout() if args.show: plt.show() elif args.save: if args.note: plt.savefig('notes/images/1-notes.pdf') if args.both: plt.savefig('slides/images/both-pdf.pdf', transparent=True) if __name__ == '__main__': # Parse data parser = argparse.ArgumentParser() parser.add_argument('-i', '--show', action='store_true', default=False, help='show the plots') parser.add_argument('-s', '--save', action='store_true', default=False, help='save the plots') parser.add_argument('-b', '--both', action='store_true', default=False, help='do the both plot') parser.add_argument('-n', '--note', action='store_true', default=False, help='do the note plot') args = parser.parse_args() main(args)