#################################################################### # SCRIPT TO RUN ANALYSIS #################################################################### include("utilities.jl"); default(show=false) # HYPERPARAMS n_runs = 3 patterns = 0:12 labels = ["theta" , "ftheta", "alpha", "beta", "gamma"] freqs = [L"\theta", L"\theta_{fast}", L"\alpha", L"\beta", L"\gamma"] fig_ext = ".png" default(fontfamily="Computer Modern") # CREATE NECESSARY DIRECTORIES create_directories_if_not_exist() # IDENTIFY NEURON POPULATION RANGES populations = Dict( "DG" => [0, 500], "BC" => [500,506], "MC" => [506, 521], "HIPP" => [521, 527] ) for run_ ∈ 1:n_runs for i ∈ 1:length(labels) spikes = load_spike_files(patterns, labels[i]*"-$run_", populations) # CREATE RASTER PLOTS for p ∈ unique(spikes.Pattern) stimin = spikes[(spikes.Population .== "PP") .& (spikes.Pattern .== p), :] plots = [] append!(plots, [raster_plot(stimin; ylab="PP")]) for pop ∈ keys(populations) lb, ub = populations[pop] popspikes = spikes[(spikes.Population .== pop) .& (spikes.Pattern .== p),:] append!(plots, [raster_plot(popspikes; xlab="", ylab=pop)]) end fig = plot(reverse(plots)..., layout=grid(5, 1, heights=[0.15, 0.15, 0.15, 0.4, 0.15]), size=(400, 500), dpi = 300) savefig(fig, "figures/raster-plots/raster-"*string(p)*"-"*labels[i]*"-$run_"*fig_ext) end end end # PATTERN SEPARATION CURVES colors=[:blue, :red, :green, :grey, :black] global psfig = plot([0;1], [0;1], ls=:dash, c=:black, xlabel="Input Correlation "*L"(r_{in})", ylabel="Output Correlation "*L"(r_{out})", dpi=300, size=(350,350), # increase resolution of image label=nothing, legend=:topleft) #psc = Dict("theta"=>[], "alpha"=>[], "gamma"=>[]) psc = Dict("theta"=>[], "ftheta"=>[], "alpha"=>[], "beta"=>[], "gamma"=>[]) for i ∈ 1:length(labels) for run ∈ 1:n_runs spikes = load_spike_files(patterns, labels[i]*"-$run", populations) out = pattern_separation_curve(spikes, 100, 500) x, y = out[:,"Input Correlation"], out[:, "Output Correlation"] # Remove NaNs before fitting idx_ = (.!isnan.(x) .& .!isnan.(y)) x = x[idx_] y = y[idx_] f = fit_power_law(x, y) append!(psc[labels[i]], f(0.6)) if (run == n_runs) psm = round(mean(psc[labels[i]]), digits=2) psse = std(psc[labels[i]])/sqrt(n_runs) pslci = round(psm - 1.96*psse, digits=2) psuci = round(psm + 1.96*psse, digits=2) if n_runs > 1 psc_label = freqs[i]*" (PS="*string(psm)*" ["*string(pslci)*", "*string(psuci)*"])" else psc_label = freqs[i]*" (PS="*string(psm)*")" end else psc_label = nothing end global psfig = scatter!(x, y, c=colors[i], alpha=1/(2*n_runs), label=nothing) global psfig = plot!(0:0.01:1, x -> f(x), c=colors[i], label=psc_label) end end psfig savefig(psfig, "figures/pattern-separation/pattern-separation-curve"*fig_ext) # AREA UNDER PS CURVES #= auc_save = OrderedDict("theta"=>[], "alpha"=>[], "gamma"=>[]) auc_means = OrderedDict("theta"=>[], "alpha"=>[], "gamma"=>[]) auc_ses = OrderedDict("theta"=>[], "alpha"=>[], "gamma"=>[]) =# auc_save = OrderedDict("theta"=>[], "ftheta"=>[], "alpha"=>[], "beta"=>[], "gamma"=>[]) auc_means = OrderedDict("theta"=>[], "ftheta"=>[], "alpha"=>[], "beta"=>[], "gamma"=>[]) auc_ses = OrderedDict("theta"=>[], "ftheta"=>[], "alpha"=>[], "beta"=>[], "gamma"=>[]) for i ∈ 1:length(labels) for run ∈ 1:n_runs spikes = load_spike_files(patterns, labels[i]*"-$run", populations) out = pattern_separation_curve(spikes, 100, 500) x, y = out[:,"Input Correlation"], out[:, "Output Correlation"] # Remove NaNs before fitting idx_ = (.!isnan.(x) .& .!isnan.(y)) x = x[idx_] y = y[idx_] auc = compute_auc(x, y) append!(auc_save[labels[i]], auc) if (run == n_runs) aucm = round(mean(auc_save[labels[i]]), digits=2) append!(auc_means[labels[i]], aucm) aucse = std(auc_save[labels[i]])/sqrt(n_runs) append!(auc_ses[labels[i]], aucse) end end end CSV.write("figures/pattern-separation/auc_means.csv", auc_means) CSV.write("figures/pattern-separation/auc_ses.csv", auc_ses) unpack(a) = eltype(a[1])[el[1] for el in a] auc_fig = plot(freqs, unpack(collect(values(auc_means))), xlabel = "Input Frequency Band", xtickfont=font(12), ylabel = L"AUC_{PS}", c = :black, linewidth = 2, yerror = unpack(collect(values(auc_ses))), dpi=300, size=(350,350), label=nothing, ) savefig(auc_fig, "figures/pattern-separation/auc-curve"*fig_ext) auc_fig_line = plot([3, 8, 12, 20, 35], unpack(collect(values(auc_means))), xlabel = "Input Frequency", ylabel = L"AUC_{PS}", c = :black, linewidth = 2, yerror = unpack(collect(values(auc_ses))), dpi=300, size=(350,350), label=nothing, ) savefig(auc_fig_line, "figures/pattern-separation/auc-curve-line"*fig_ext)