Cutoffs

#!/usr/bin/env python3

import ebbw
import numpy as np
import matplotlib.pyplot as plt

N = 101

Tc = np.empty(N)

variables = [
   ('E', 10, np.linspace(-1, 1, N), r'$E / \mathrm{eV}$'),
   ('W', 2, np.linspace(3, 5, N), r'$\omega_N / \omega_{\mathrm{E}}$'),
]

parameters = dict(T=10.0, l=1.0, u=None, w=0.02, E=None, W=None, rescale=None)

figure = plt.figure()

position = 221

for parameters['u'] in 0.1, 0.0:
   for v in 0, 1:
      vkey, vbase, vx, vlabel = variables[v]
      ckey, cbase, cx, clabel = variables[1 - v]

      vx = vbase ** vx
      cx = cbase ** cx[::N // 2]

      plt.subplot(position)
      position += 1

      for color, parameters[ckey] in zip('rgb' if v else 'cmy', cx):
         print('%s = %g' % (ckey, parameters[ckey]))

         for parameters['rescale'], options in [
               (True, dict(linestyle='-', label='%g' % parameters[ckey])),
               (False, dict(linestyle=':')),
            ]:
            print('rescale = %s' % parameters['rescale'])

            for i, parameters[vkey] in enumerate(vx):
               print('%s = %g' % (vkey, parameters[vkey]))

               Tc[i] = parameters['T'] = ebbw.critical(**parameters)

            plt.plot(vx, Tc, color=color, **options)

            if not parameters['u']:
               break

         plt.title(r'$\mu = %g$' % parameters['u'])

         if not parameters['u']:
            plt.legend()

         plt.autoscale(tight=True)
         plt.xscale('log', base=vbase)

         plt.xlabel(vlabel)
         plt.ylabel(r'$T_{\mathrm{c}} / \mathrm{K}$')

plt.suptitle(
   r'dotted lines w/o rescaling, '
   r'$\lambda = %(l)g$, '
   r'$\omega_{\mathrm{E}} = %(w)g\,\mathrm{eV}$'
   % parameters, y=0)

plt.tight_layout()
figure.savefig('cutoffs.png', bbox_inches='tight')
Output