Source code for mercurial.atlas.reynolds_nde_empirical

"""Reynolds NDE (Case C.5) – direct DPR injection of saw pattern during cardiac arrest."""

import matplotlib.pyplot as plt
import numpy as np

from mercurial.core.jansen_rit import JansenRitColumn, JansenRitParams
from mercurial.core.neural_field import NeuralField2D
from mercurial.simulation.engine import SimulationEngine


[docs] def run_reynolds_nde(): engine = SimulationEngine(dim=20) engine.apply_empirical_parameters() # 1. Jansen‑Rit column for patient's EEG jr_params = JansenRitParams() jr_column = JansenRitColumn(jr_params=jr_params, noise_amp=0.01) eeg_vals = [] # 2. 2D neural field for visual cortex (size 32x32) nx, ny = 32, 32 visual_field = NeuralField2D(nx, ny, dx=0.5, wc_params=engine.wc_params.__dict__) # 3. Saw pattern (to be injected via DPR) X, Y = np.meshgrid(np.linspace(-2, 2, nx), np.linspace(-2, 2, ny)) saw_pattern = np.exp(-((X - 0.5) ** 2 + Y**2) / 0.2) + 0.5 * np.exp( -((X + 0.5) ** 2 + Y**2) / 0.3 ) dt = 0.001 t_span = (0.0, 2.0) steps = int((t_span[1] - t_span[0]) / dt) for step in range(steps): t = step * dt # Simulate cardiac arrest: normal input before 0.5 s, then flat EEG if t < 0.5: jr_column.step(dt, p_ext=100.0) else: jr_column.step(dt, p_ext=0.0) eeg = jr_column.get_EEG() eeg_vals.append(eeg) # DPR: direct injection of saw pattern into visual field during cardiac arrest if t >= 0.5: # Inject the saw pattern as external input (strong coupling) P_ext = 5.0 * saw_pattern else: P_ext = np.zeros((nx, ny)) visual_field.step(dt, P_ext=P_ext) # Correlation between final visual field and saw pattern final_vis = visual_field.E correlation = np.corrcoef(final_vis.flatten(), saw_pattern.flatten())[0, 1] print(f"Correlation between final visual field and saw pattern: {correlation:.3f}") # Plot EEG plt.figure() plt.plot(np.arange(len(eeg_vals)) * dt, eeg_vals) plt.xlabel("Time (s)") plt.ylabel("EEG (mV)") plt.title("Reynolds NDE – Simulated EEG (flat after 0.5s)") plt.grid(True) plt.show() # Plot final visual field plt.figure() plt.imshow(final_vis, cmap="hot") plt.colorbar() plt.title("Final visual cortex activity (should resemble saw)") plt.show() return correlation
if __name__ == "__main__": run_reynolds_nde()