# mEPSC amplitude, KO vs WT: all events pooled (Kolmogorov-Smirnov test, as in cumulative distribution plots), neurons as n
# (median amplitude per neuron, log scale), and mice as n (mean of each mouse's neuron medians). Python 3.13, NumPy, pandas, SciPy.
import numpy as np, pandas as pd
from scipy import stats

d = pd.read_csv("mepsc.csv")                         # one row per event: genotype, mouse, cell, amplitude_pA
ko = d.genotype == "KO"
ks = stats.ks_2samp(d.amplitude_pA[ko], d.amplitude_pA[~ko])
print(f"All events pooled ({ko.sum()} vs {(~ko).sum()} events), Kolmogorov-Smirnov test: D = {ks.statistic:.4f}, p = {ks.pvalue:.2g}")
cell = d.groupby(["genotype", "mouse", "cell"]).amplitude_pA.median().reset_index(); cell["log_med"] = np.log(cell.amplitude_pA)
kc = cell.genotype == "KO"
t1 = stats.ttest_ind(cell.log_med[kc], cell.log_med[~kc], equal_var=False)
print(f"Neurons as n ({kc.sum()} vs {(~kc).sum()} neurons, median amplitude per neuron): KO / WT {np.exp(cell.log_med[kc].mean() - cell.log_med[~kc].mean()):.2f}, p = {t1.pvalue:.2g}")
mouse = cell.groupby(["genotype", "mouse"]).log_med.mean().reset_index(); km = mouse.genotype == "KO"
t2 = stats.ttest_ind(mouse.log_med[km], mouse.log_med[~km], equal_var=False); ci = t2.confidence_interval()
print(f"Mice as n ({km.sum()} vs {(~km).sum()} mice): KO / WT {np.exp(mouse.log_med[km].mean() - mouse.log_med[~km].mean()):.2f} "
      f"(95% CI {np.exp(ci.low):.2f} to {np.exp(ci.high):.2f}), p = {t2.pvalue:.2g}")
print(f"Median amplitude: WT {d.amplitude_pA[~ko].median():.1f} pA, KO {d.amplitude_pA[ko].median():.1f} pA")
