|
| 1 | +using CairoMakie, PointProcessFilters, ProgressMeter, GaussianRandomFields, RCall, Meshes |
| 2 | +import Meshes: Point, PointSet, Box |
| 3 | +include("src/iso_pgram.jl") |
| 4 | +import .IsoPP: periodogram_iso |
| 5 | + |
| 6 | +## set parameter |
| 7 | +side_length = 100 |
| 8 | +side_padding = 25 |
| 9 | +box_x = [-side_padding, side_length + side_padding] |
| 10 | +box_y = box_x |
| 11 | +nu = 3 / 2 |
| 12 | +lengthscale = 10 |
| 13 | +sigma = sqrt(2) |
| 14 | +lambda_noise = 0.05 |
| 15 | + |
| 16 | +## simualate the random field (R package currently broken so cant use spatstat) |
| 17 | +import Random; |
| 18 | +Random.seed!(1234); |
| 19 | +cov = CovarianceFunction(2, Matern(lengthscale, nu, σ = sigma)) |
| 20 | +grid_sides = range(box_x..., 250), range(box_y..., 250) |
| 21 | +grf = GaussianRandomField(cov, CirculantEmbedding(), grid_sides...) |
| 22 | +intensity = exp.(GaussianRandomFields.sample(grf) .- 4) |
| 23 | +heatmap(intensity) |
| 24 | + |
| 25 | +## |
| 26 | +@rput intensity box_x box_y lambda_noise |
| 27 | +R""" |
| 28 | + library(spatstat) |
| 29 | + set.seed(1234) |
| 30 | + window = owin(box_x, box_y) |
| 31 | + intensity_image = as.im(aperm(intensity), window) |
| 32 | + signal_process = rpoispp(intensity_image, nsim=2) |
| 33 | + noise_process = rpoispp(lambda_noise, win=window, nsim=2) |
| 34 | +""" |
| 35 | +@rget signal_process noise_process |
| 36 | +sim_names = collect(keys(signal_process)) |
| 37 | +signal = Dict([k => PointSet(Point.(signal_process[k][:x], signal_process[k][:y])) |
| 38 | + for k in sim_names]) |
| 39 | +noisy = Dict([k => PointSet([Point.(signal_process[k][:x], signal_process[k][:y]); |
| 40 | + Point.(noise_process[k][:x], noise_process[k][:y])]) |
| 41 | + for k in sim_names]) |
| 42 | + |
| 43 | +## apply filters |
| 44 | +@info "Filtering (may take a few minutes)..." |
| 45 | +area = diff(box_x)[1] * diff(box_y)[1] |
| 46 | +filtered = Dict([k => centeredcirclepass(noisy[k], 0.05).(grid_sides[1], grid_sides[2]') .- |
| 47 | + length(noisy[k]) / area for k in sim_names]) |
| 48 | +@info "filtering completed." |
| 49 | + |
| 50 | +## |
| 51 | +clims = extrema(vcat(values(filtered)...)) |
| 52 | +f = Figure() |
| 53 | +heatmap(f[1, 1], grid_sides..., intensity, colormap = :matter) |
| 54 | +for i in 1:2 |
| 55 | + viz(f[2, i], signal[sim_names[i]], pointsize = 4, color = :black, |
| 56 | + axis = (limits = (0, 100, 0, 100),)) |
| 57 | + viz(f[3, i], noisy[sim_names[i]], pointsize = 4, color = :black, |
| 58 | + axis = (limits = (0, 100, 0, 100),)) |
| 59 | + heatmap(f[4, i], grid_sides..., filtered[sim_names[i]], colormap = :tempo, |
| 60 | + colorrange = clims) |
| 61 | +end |
| 62 | +f |
| 63 | + |
| 64 | +region = Box(Point(box_x[1],box_y[1]), Point(box_x[2],box_y[2])) |
| 65 | +pgram = Dict([s=>periodogram_iso(noisy[s], region, (1:20).*0.01) for s in sim_names]) |
| 66 | +λ = Dict([s=>length(noisy[s]) / area for s in sim_names]) |
| 67 | + |
| 68 | +## |
| 69 | +@info "Making figures..." |
| 70 | +clims = extrema(vcat(values(filtered)...)) |
| 71 | +function make_figure() |
| 72 | + f = Figure(resolution = (100, 100), figure_padding = 1) |
| 73 | + ax = Axis(f[1, 1], limits = (0, 100, 0, 100), aspect = 1) |
| 74 | + hidedecorations!(ax) |
| 75 | + return f, ax |
| 76 | +end |
| 77 | + |
| 78 | +figure, ax = make_figure() |
| 79 | +contourf!(ax, grid_sides..., intensity, colormap = :matter) |
| 80 | +save("fig/fig2/intensity.pdf", figure) |
| 81 | + |
| 82 | +for i in 1:2 |
| 83 | + figure_p, ax_p = make_figure() |
| 84 | + viz!(ax_p, signal[sim_names[i]], pointsize = 2, color = :black) |
| 85 | + save("fig/fig2/cp$i.pdf", figure_p) |
| 86 | + |
| 87 | + figure_p, ax_p = make_figure() |
| 88 | + viz!(ax_p, noisy[sim_names[i]], pointsize = 2, color = :black) |
| 89 | + save("fig/fig2/pts$i.pdf", figure_p) |
| 90 | + |
| 91 | + figure_p, ax_p = make_figure() |
| 92 | + contourf!(ax_p, grid_sides..., filtered[sim_names[i]], colormap = :tempo, |
| 93 | + colorrange = clims) |
| 94 | + save("fig/fig2/filt$i.pdf", figure_p) |
| 95 | + |
| 96 | + figure_p = Figure(resolution = (100,60), fontsize=8, figure_padding=1) |
| 97 | + ax_p = Axis(figure_p[1,1], xticks = [0], yticks=[0], xgridcolor=:black, ygridcolor=:black) |
| 98 | + ylims!(ax_p, (-1,21)) |
| 99 | + band!(ax_p, [0,0.05], fill(-1,2), fill(21,2), color = (:lightgrey,0.5)) |
| 100 | + vlines!(ax_p, [0,0.05], color = :black, linestyle=:dash, linewidth=1/2) |
| 101 | + lines!(ax_p, pgram[sim_names[i]].t, pgram[sim_names[i]].sdf./pgram[sim_names[i]].lambda.-1, color = :black) |
| 102 | + hidedecorations!(ax_p, grid=false) |
| 103 | + hidespines!(ax_p) |
| 104 | + save("fig/fig2/sdf_$i.pdf", figure_p) |
| 105 | +end |
| 106 | +@info "figures finished." |
0 commit comments