watcher_h2.jl 7.68 KB
"""
    2 Higgs
"""

using Plots, ADerrors, BDIO, MTH229, LaTeXStrings, Latexify, Printf

function readparams(fb)
    #move read position to the first record
    BDIO_seek!(fb,0)
    while BDIO_seek!(fb)
        # Simulation parameters
        if BDIO_get_uinfo(fb) == 1
            int_array = similar(Array{Int64, 1}, 3)
            BDIO_read(fb, int_array)
            global nth   = int_array[1]
            global niter = int_array[2]
            global nrks  = int_array[3]
        end
    end
end

function readdata(fb)
    #move read position to the first record
    k_index = 0
    BDIO_seek!(fb,0)
    while BDIO_seek!(fb)
        # k values
        if BDIO_get_uinfo(fb) == 2
            db_array = similar(Array{Float64, 1}, length(k_vals)+8)
            BDIO_read(fb, db_array)
            global k_vals = db_array[begin:end-8]
            global s_parms = db_array[end-8+1:end]
            # BDIO_read(fb, k_vals)
        end
        #observables
        #Plaquette
        if BDIO_get_uinfo(fb) == 3
            k_index += 1
            db_array = similar(Array{Float64, 1}, nth)
            BDIO_read(fb, db_array)
            pl[1:nth,k_index] = db_array
        end
        if BDIO_get_uinfo(fb) == 4
            db_array = similar(Array{Float64, 1}, niter)
            BDIO_read(fb, db_array)
            pl[nth+1:end,k_index] = db_array
        end
        #Rho
        if BDIO_get_uinfo(fb) == 5
            db_array = similar(Array{Float64, 1}, 2*nth)
            BDIO_read(fb, db_array)
            rho[1,1:nth,k_index] = db_array[1:nth]
            rho[2,1:nth,k_index] = db_array[nth+1:end]
        end
        if BDIO_get_uinfo(fb) == 6
            db_array = similar(Array{Float64, 1}, 2*niter)
            BDIO_read(fb, db_array)
            rho[1,nth+1:end,k_index] = db_array[1:niter]
            rho[2,nth+1:end,k_index] = db_array[niter+1:end]
        end
        #Lphi
        if BDIO_get_uinfo(fb) == 8
            db_array = similar(Array{Float64, 1}, 2*nth)
            BDIO_read(fb, db_array)
            Lphi[1,1:nth,k_index] = db_array[1:nth]
            Lphi[2,1:nth,k_index] = db_array[nth+1:end]
        end
        if BDIO_get_uinfo(fb) == 9
            db_array = similar(Array{Float64, 1}, 2*niter)
            BDIO_read(fb, db_array)
            Lphi[1,nth+1:end,k_index] = db_array[1:niter]
            Lphi[2,nth+1:end,k_index] = db_array[niter+1:end]
        end
        #Lalp
        if BDIO_get_uinfo(fb) == 10
            db_array = similar(Array{Float64, 1}, 2*nth)
            BDIO_read(fb, db_array)
            Lalp[1,1:nth,k_index] = 1/4 .* db_array[1:nth]
            Lalp[2,1:nth,k_index] = 1/4 .* db_array[nth+1:end]
        end
        if BDIO_get_uinfo(fb) == 11
            db_array = similar(Array{Float64, 1}, 2*niter)
            BDIO_read(fb, db_array)
            Lalp[1,nth+1:end,k_index] = 1/4 .* db_array[1:niter]
            Lalp[2,nth+1:end,k_index] = 1/4 .* db_array[niter+1:end]
        end
        #dh
        if BDIO_get_uinfo(fb) == 12
            db_array = similar(Array{Float64, 1}, nth)
            BDIO_read(fb, db_array)
            dh[1:nth,k_index] = db_array
        end
        if BDIO_get_uinfo(fb) == 13
            db_array = similar(Array{Float64, 1}, niter)
            BDIO_read(fb, db_array)
            dh[nth+1:end,k_index] = db_array
        end
    end

end

################# READ FILE #################


filename = "scalar1_vark40_beta0.0_eta0.0_niter10000_eps0.01_nsteps60.bdio"
filename = "var_k/scalar2_8x8x8x8_vark30_beta2.25_k20.1_etas0.5_0.5_mu0.2_xis0.1_0.1_0.1_0.1_niter100_eps0.1_nsteps50.bdio"

fb  = BDIO_open(filename, "r")
readparams(fb)

global k_vals = Vector{Float64}(undef, nrks)

hist = false
rnrks = nrks
if hist
    nrks *= 2
end

global pl     = Array{Float64, 2}(undef, niter+nth, nrks)
global rho    = Array{Float64, 3}(undef, 2, niter+nth, nrks)
global Lphi   = Array{Float64, 3}(undef, 2, niter+nth, nrks)
global Lalp   = Array{Float64, 3}(undef, 2, niter+nth, nrks)
global dh     = Array{Float64, 2}(undef, niter+nth, nrks)

readdata(fb)

if hist
    k_vals = vcat(k_vals,reverse(k_vals))
end

################# HISTORIES ################

yl = latexstring("\\Delta H")
yl = latexstring("\\rho^2")
yl = latexstring("L_\\alpha")
yl = latexstring("L_\\phi")
plot(reuse=false)
# for i in [1,5,10]
for i in 1:13
    # obs = rho[1,1:50,i]
    # lab = string("k = ", k_vals[i])
    # p = plot!(obs,legend=:right,label=lab, ylabel=yl,xlabel="config.")
    # display(p)
end
outputname = "reports/figs/free_scalar_8to4_chain_Lphi.png"

################# ANALYSIS #################

global av_pl    = Vector{uwreal}(undef,nrks)
global tau_pl   = Vector{uwreal}(undef,nrks)
global av_rho   = Array{uwreal,2}(undef,2,nrks)
global tau_rho  = Array{uwreal,2}(undef,2,nrks)
global av_Lphi  = Array{uwreal,2}(undef,2,nrks)
global tau_Lphi = Array{uwreal,2}(undef,2,nrks)
global av_Lalp  = Array{uwreal,2}(undef,2,nrks)
global tau_Lalp = Array{uwreal,2}(undef,2,nrks)
global av_expdh = Vector{uwreal}(undef,nrks)
global tau_expdh = Vector{uwreal}(undef,nrks)

# HMC diverged for k>0.13...
wpm = Dict{String,Vector{Float64}}()
#define uncorrelated data
wpm["uncorrelated"] = [1.0, -1.0, -1.0, -1.0]


for i in 1:nrks
    print("\n", i)
    start=1 #thermalization faster than nth
    ID = string("k=",k_vals[i],"niter=",niter,start,nth)
    ID = "uncorrelated"
    plk = uwreal(pl[start:end,i],ID)
    uwerr(plk,wpm)
    av_pl[i] = plk
    tau_pl[i] = ADerrors.taui(plk, ID)
    for n in 1:2
        rhok = uwreal(rho[n,start:end,i],ID)
        uwerr(rhok,wpm)
        tau_rho[n,i] = ADerrors.taui(rhok, ID)
        av_rho[n,i] = rhok
        Lphik = uwreal(Lphi[n,start:end,i],ID)
        uwerr(Lphik,wpm)
        tau_Lphi[n,i] = ADerrors.taui(Lphik, ID)
        av_Lphi[n,i] = Lphik
        Lalpk = uwreal(Lalp[n,start:end,i],ID)
        uwerr(Lalpk,wpm)
        tau_Lalp[n,i] = ADerrors.taui(Lalpk, ID)
        av_Lalp[n,i] = Lalpk
    end
    expdhk = uwreal(exp.(.-dh[start:end,i]),"uncorrelated")
    uwerr(expdhk,wpm)
    tau_expdh[i] = ADerrors.taui(expdhk, "uncorrelated")
    av_expdh[i] = expdhk
end


k2 = s_parms[1]
eta = s_parms[2]
mu = s_parms[4]
xi = s_parms[end]
beta = 2.25
# SCALAR OBSERVABLES
plot(reuse=false)
obs = av_Lalp[:,:]
yl = latexstring("<\\exp{(-\\Delta H)}>")
yl = latexstring("<\\rho^2>")
yl = latexstring("<L_{\\phi}>")
yl = latexstring("<L_{\\alpha}>")
ttl = latexstring("\\beta = $(beta); k_2 = $(k2); \\eta_n = $(eta) ; \\mu = $(mu); \\xi_i = $(xi);")
xl = latexstring("k")
plot(reuse=false)
phindex=1
p=scatter!(k_vals[begin:rnrks],value.(obs[phindex,begin:rnrks]),yerror=err.(obs[phindex,begin:rnrks]),legend=:topleft, ylabel=yl,xlabel=xl,label=latexstring("\\phi_{$(phindex)} - cooling"),title=ttl)
p=scatter!(k_vals[begin:rnrks],value.(obs[phindex+1,begin:rnrks]),yerror=err.(obs[phindex+1,begin:rnrks]),legend=:topleft, ylabel=yl,xlabel=xl,label=latexstring("\\phi_{$(phindex+1)} - cooling"),title=ttl)
# p=scatter!(k_vals[rnrks+1:end],value.(obs[phindex,rnrks+1:end]),yerror=err.(obs[phindex,rnrks+1:end]),legend=:topleft, ylabel=yl,xlabel=xl,label=latexstring("\\phi_$(phindex) - heating"))

display(p)
l=8
# outputname = "reports/figs/h2_phi$(phindex)_$(l)to4_Lalp_slowhist_k2$(k2)_eta$(eta)_mu$(mu)_xi$(xi).png"
outputname = "reports/figs/h2_$(l)to4_Lalp_k2$(k2)_eta$(eta)_mu$(mu)_xi$(xi)_beta$(beta).png"
# savefig(outputname)

# TABLE FREE THEORY
# for i in 1:nrks
#     print("\n\\midrule\n")
#     print(k_vals[i], " & ")
#     @printf("%f +/- %f & %f &", value(av_expdh[i]), err(av_expdh[i]), value(tau_expdh[i]))
#     @printf("%f +/- %f & %f &", value(av_rho[i]), err(av_rho[i]), value(tau_rho[i]))
#     @printf("%f +/- %f & %f &", value(av_Lphi[i]), err(av_Lphi[i]), value(tau_Lphi[i]))
#     @printf("%f +/- %f & %f", value(av_Lalp[i]), err(av_Lalp[i]), value(tau_Lalp[i]))
#     print("\\\\")
# end