IO.go_to_data_parent('interpolatedboson/a'+stri)
IO.add_to_path()
state = IO.get_state()

Ls = range(2, 11)

params = IO.Params.kw('LKN', L=Ls, K=[0], N=[0])
for p in params:
    run.create_edge_spectrum(state, p, overwrite=False)
    
def entanglement_entropy(es):
    return sum(-v * np.log2(v) for v in es if not np.isclose(v, 0))

entropy = []
for p in params:
    spec = run.load_edge_spectrum(state, p, evecs=False)
    es = [spec_pnt[1] for spec_pnt in spec]
    entropy.append(entanglement_entropy(es))
    
entropy = np.real(entropy)
Ls = np.array(Ls)
extrap_Ls = np.array([0, 1]+list(Ls))

fit_pts, params, R = analysis.curve_fit_main(entropy, analysis.linear, Ls, extrap_Ls)
# flip sign of gamma
params = [params[0], -1*params[1]]

print params
print fit_pts[0], fit_pts[1]

plt.plot(Ls, entropy, 'k.', label='Data')
Пример #2
0
for p in params:
    run.create_edge_spectrum(state, p)
def rotated_state_params(Ls):
    params = data.pdict.kw('LKN', L = Ls, K = range(max(Ls)), N = range(-max(Ls), max(Ls)+1))
    K_lt_L = lambda p: p['K']<p['L']
    N_le_L = lambda p: -p['L'] <= p['N'] <= p['L']
    params.add_constraints([K_lt_L, N_le_L])
    return params

Ls = [1, 2, 3]
L_min = min(Ls)
L_max = max(Ls)

params = rotated_state_params(Ls)
spectrum = data.ParametrizedDataSet(params)
for L in Ls:
    edge_spectrum_list = run.load_edge_spectrum(state, data.OrderedDict(zip(['L', 'K', 'N'], [L, 0, 0])))
    edge_spectrum_dict = spec.collect_spectrum_points(edge_spectrum_list)
    for K, N in edge_spectrum_dict:
        for indx, val in enumerate(edge_spectrum_dict[(K, N)]):
            spectrum.append(data.DataPoint(L=L, K=K, N=N, val=val, band=indx))
pp.shift_and_scale(spectrum, scale=0)
spec_points = spectrum.collect(['K', 'N', 'band'], 'L', 'E')  # ParametrizedDataSet with K, N, band as parameters
spec_points.plot_toolbox = data.SpectraPlotTools()
spec_points.plot_toolbox.markers = ['1', '2', '3', '4']
spec_points.update_plot_args(title='Edge Spectrum', xlabel='K', ylabel='Energy',
                                 xlim=[-0.7, 4.1], ylim=[-0.1, 10])
fig, spec_ax = spec_points.plot_toolbox.spec_plot(spec_points, 'E',
                                                shift_func=lambda L: 0.3*(L-L_max-1)/(L_max - L_min))
axs = []