f0 = log10(x*( sin((1-a)*b*pi/(2+2*b)) / sin((1-a)*pi/(2+2*b)) )**(1/(1-a))) de = de * y/havriliak_negami(x, f0, de, a, b) return f0, de, a, b def peak(f0, de, a, b): fmax = 10**f0 * ( sin((1-a)*pi/(2+2*b)) / sin((1-a)*b*pi/(2+2*b)) )**(1/(1-a)) emax = havriliak_negami(fmax, f0, de, a, b) return fmax, emax def horiz(x, f0, de, a, b): if (a+x)*b > 1: return None fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a-x, b) def vert(x, f0, de, a, b): if a*(b+x) > 1: return None fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a, b+x) havriliak_negami.move = move havriliak_negami.horiz = horiz havriliak_negami.vert = vert cole_cole = special_case(havriliak_negami, 'Dielectric/Cole-Cole (deriv)', b='1') kwwapprox = special_case(havriliak_negami, 'Dielectric/KWW-approx (deriv)', b='1-.812*a**.387') functions = [havriliak_negami, cole_cole, kwwapprox]
f0 = log10(x*( sin((1-a)*b*pi/(2+2*b)) / sin((1-a)*pi/(2+2*b)) )**(1/(1-a))) de = de * y/havriliak_negami(x, f0, de, a, b, real) return f0, de, a, b, real def peak(f0, de, a, b): fmax = 10**f0 * ( sin((1-a)*pi/(2+2*b)) / sin((1-a)*b*pi/(2+2*b)) )**(1/(1-a)) emax = havriliak_negami(fmax, f0, de, a, b, real) return fmax, emax def horiz(x, f0, de, a, b): if (a+x)*b > 1: return None fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a-x, b, real) def vert(x, f0, de, a, b): if a*(b+x) > 1: return None fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a, b+x, real) havriliak_negami.move = move havriliak_negami.horiz = horiz havriliak_negami.vert = vert cole_cole = special_case(havriliak_negami, 'Dielectric/Cole-Cole (complex)', b='1') kwwapprox = special_case(havriliak_negami, 'Dielectric/KWW-approx (complex)', b='1-.812*a**.387') hnhn2 = special_case(havriliak_negami, 'HnHn2', real='-1') functions = [havriliak_negami, cole_cole, kwwapprox, hnhn2]
if (a + x) * b <= 1: fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a - x, b) def vert(x, f0, de, a, b): if a * (b + x) <= 1: fmax, emax = peak(f0, de, a, b) return move(fmax, emax, f0, de, a, b + x) havriliak_negami.move = move havriliak_negami.horiz = horiz havriliak_negami.vert = vert havriliak_negami.extra = { 'fmax': 'f0 + log10(( sin((1-a)*pi/(2+2*b)) / sin((1-a)*b*pi/(2+2*b)))**(1/(1-a)))' } cole_cole = special_case(havriliak_negami, 'Dielectric/Cole-Cole', b='1') kwwapprox = special_case(havriliak_negami, 'Dielectric/KWW-approx', b='1-.812*a**.387') kwwapprox.extra = { 'fmax': 'f0 + log10(( sin((1-a)*pi/(2+2*(1-.812*a**.387))) / sin((1-a)*(1-.812*a**.387)*pi/(2+2*(1-.812*a**.387))))**(1/(1-a)))', 'bkww': '((1-a)*(1-.812*a**.387))**(1/1.23)' } functions = [havriliak_negami, cole_cole, kwwapprox]