tsa_saxs/test.jl

122 lines
3.4 KiB
Julia
Raw Normal View History

2024-03-15 13:08:33 +01:00
import GLMakie as M
import Metaheuristics as MH
import DelimitedFiles: readdlm
include("PLUV.jl")
include("Utils.jl")
# filtered_idx = d[:, 2] .> 0.0
# @views q, I, err = d[filtered_idx, 1], d[filtered_idx, 2], d[filtered_idx, 3]
meta, params_init, lower_bounds, upper_bounds, qie_data = Utils.load_config("Data/PAR_POPC-test.toml")
best_5k = begin
f_χ2 = open("POPC-test-5k/Results_collection-X2.dat", "r")
d_χ2 = readdlm(f_χ2)
close(f_χ2)
idx_min_χ2 = argmin(d_χ2)[1]
@show idx_min_χ2
f_params = open("POPC-test-5k/Results_collection.dat", "r")
for i in 1:(idx_min_χ2-1)
readline(f_params)
end
best_params = map(x -> parse(Float64, x), split(readline(f_params), ' '))
@show best_params
PLUV.reduce_to_free_parameters(meta, best_params)
end
mean_5k = begin
f_params = open("POPC-test-5k/Results_collection.dat", "r")
params_pop = readdlm(f_params)
N_trials, _ = size(params_pop)
mean_params = vec(sum(params_pop; dims=1) / N_trials)
PLUV.reduce_to_free_parameters(meta, mean_params)
end
# best_5k = PLUV.reduce_to_free_parameters(meta, [100000.0000000, 7.5004085, 23.5074449, 9.8664991, 0.0000000, 1.0000000, 0.2900000, 0.2203793,
# 0.2990402, 0.4122816, 0.3266636, 0.2276763, 0.2481895, 0.6642123, 0.1203572, 0.2629861, 0.9000000, 0.3050000,
# 0.2945315, 0.2762371, 0.4777401, 0.8100000, 2.0149998, 37.0000000, 0.0299139, 0.0002171])
#
# best_5k = PLUV.reduce_to_free_parameters(meta, [100000.0000000, 7.6975592, 23.4041912, 9.7275630, 0.0000000, 1.0000000, 0.2900000, 0.2219937, 0.3000114,
# 0.4158804, 0.3278631, 0.2296156, 0.2475607, 0.6664143, 0.1191859, 0.2618609, 0.9000000, 0.3050000, 0.2963982, 0.2770345, 0.4762528,
# 0.8100000, 1.9706651, 37.0000000, 0.0299179, 0.0002167])
q, I_data, err = Utils.select_columns(qie_data, meta["q_min"], meta["q_max"], meta["binning"], meta["binning"])
q_all, I_all, err_all = Utils.select_columns(qie_data, meta["q_min"], meta["q_max"], 1, meta["binning"])
I_data_lp = Utils.lowpass_filter(I_data; σ=2)
I_all_lp = Utils.lowpass_filter(I_all; σ=2)
w = Utils.compute_logscale_weights(q)
w_all = Utils.compute_logscale_weights(q_all)
I_init = PLUV.intensity(params_init, q)
intensity_reduced, P_reduced, lb_reduced, ub_reduced = PLUV.reduce_to_free_parameters(meta, params_init, lower_bounds, upper_bounds, q)
bounds = MH.boxconstraints(lb=lb_reduced, ub=ub_reduced)
function obj(P)
I_model = intensity_reduced(P)
return Utils.chi2(I_data, I_model, err)
end
information = MH.Information(f_optimum=0.0)
options = MH.Options(f_calls_limit=1_000_000, f_tol=1e-5);
algorithm = MH.ECA(information=information, options=options)
I_best_5k = intensity_reduced(best_5k)
I_mean_5k = intensity_reduced(mean_5k)
if false
result = MH.optimize(obj, bounds, algorithm)
P_best = MH.minimizer(result)
I_best = intensity_reduced(P_best)
end
if true
fig = M.Figure()
ax = M.Axis(fig[1, 1]; xscale=log10, yscale=log10)
M.lines!(ax, q, I_best, label="MH best (julia)")
M.scatter!(ax, q, I_data, label="data")
M.lines!(ax, q, I_best_5k, label="TSA best (5k)")
M.lines!(ax, q, I_mean_5k, label="TSA mean (5k)")
M.axislegend()
display(fig)
end
if false
fig = M.Figure()
ax = M.Axis(fig[1, 1]; xscale=log10, yscale=log10)
M.scatter!(ax, q, I)
M.lines!(ax, q_all, I_all)
M.lines!(ax, q_all, I_all_lp)
#M.lines!(ax, q, I_init)
display(fig)
end
if false
fig = M.Figure()
ax = M.Axis(fig[1, 1]; xscale=log10)
#M.scatter!(ax, q, w)
M.scatter!(ax, q_all, w_all)
display(fig)
end