tsa_saxs/test.jl

121 lines
3.4 KiB
Julia
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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