Files
organism/elements/astrocyte/appunti/tripartite_synapse_full_pseudocode.html
T

281 lines
24 KiB
HTML
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.
<style>
.root { padding: 1rem 0; font-family: var(--font-mono); font-size: 13px; color: var(--color-text-primary); line-height: 1.75; }
.section { margin-bottom: 2rem; }
.section-header { font-size: 11px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-text-tertiary); border-bottom: 1px solid var(--color-border-tertiary); padding-bottom: 4px; margin-bottom: 0.75rem; }
.block { border-left: 2px solid var(--color-border-secondary); padding-left: 1rem; margin-bottom: 1.25rem; }
.kw { color: var(--color-text-info); }
.fn { color: var(--color-text-warning); }
.cm { color: var(--color-text-tertiary); font-style: italic; }
.pre { color: #c084fc; }
.pst { color: var(--color-text-success); }
.ast { color: #f0c070; }
.sig { color: var(--color-text-info); }
.num { color: var(--color-text-danger); }
.i1 { padding-left: 1.5rem; }
.i2 { padding-left: 3rem; }
.i3 { padding-left: 4.5rem; }
.sep { border: none; border-top: 1px solid var(--color-border-tertiary); margin: 2rem 0; }
.legend { display: flex; gap: 1.25rem; flex-wrap: wrap; margin-bottom: 1.25rem; font-size: 11px; padding: 8px 12px; background: var(--color-background-secondary); border-radius: 6px; }
.leg { display: flex; align-items: center; gap: 5px; }
.dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
</style>
<div class="root">
<div class="legend">
<div class="leg"><div class="dot" style="background:var(--color-text-success)"></div><span>postsynapse</span></div>
<div class="leg"><div class="dot" style="background:#c084fc"></div><span>presynapse</span></div>
<div class="leg"><div class="dot" style="background:#f0c070"></div><span>astrocyte</span></div>
<div class="leg"><div class="dot" style="background:var(--color-text-info)"></div><span>signal / neuromodulator</span></div>
</div>
<div class="section">
<div class="section-header">global state variables</div>
<div class="block">
<div><span class="cm">// ── Fast (mss): wave propagation ─────────────────────────────</span></div>
<div><span class="cm">// Presynapse</span></div>
<div><span class="pre">pre_Ca_residual</span> <span class="cm">// leftover Ca²⁺ between spikes — short-term trace</span></div>
<div><span class="pre">vesicle_release_prob</span> <span class="cm">// P(0.11.0) per docking slot</span></div>
<div><span class="pre">RRP_pool</span> <span class="cm">// readily-releasable vesicle pool</span></div>
<div><span class="pre">reserve_pool</span> <span class="cm">// chained vesicles in deep storage</span></div>
<br>
<div><span class="cm">// Postsynapse</span></div>
<div><span class="pst">membrane_potential</span> <span class="cm">// Vm — depolarization state</span></div>
<div><span class="pst">NMDA_Mg_block</span> <span class="cm">// bool — mechanical clamp on/off</span></div>
<div><span class="pst">post_Ca_amplitude</span> <span class="cm">// peak [Ca²⁺] rise in spine</span></div>
<div><span class="pst">post_Ca_rise_speed</span> <span class="cm">// d(Ca)/dt — fast=LTP signal, slow=LTD signal</span></div>
<br>
<div><span class="cm">// Astrocyte</span></div>
<div><span class="ast">glutamate_cleft</span> <span class="cm">// [glu] in synaptic cleft</span></div>
<div><span class="ast">glutamate_spillover</span> <span class="cm">// extrasynaptic [glu] — saturates mGluRs</span></div>
<div><span class="ast">astro_Ca_local</span> <span class="cm">// IP3-triggered local rise near synapse</span></div>
<div><span class="ast">astro_Ca_global</span> <span class="cm">// soma-wide wave — network overload flag</span></div>
<div><span class="ast">D_serine_release</span> <span class="cm">// gliotransmitter — NMDA co-agonist pulse</span></div>
<div><span class="ast">lactate_output</span> <span class="cm">// fuel export rate to pre and post</span></div>
<br>
<div><span class="cm">// ── Intermediate (smin): temporary tuning ────────────────────</span></div>
<div><span class="sig">mGluR2_3_activation</span> <span class="cm">// presynaptic Gi — autoinhibitory brake</span></div>
<div><span class="sig">mGluR5_activation</span> <span class="cm">// astrocytic Gq — IP3→Ca²⁺→D-serine cascade</span></div>
<div><span class="sig">cAMP_level</span> <span class="cm">// set by dopamine/NE via Gs → adenylyl cyclase</span></div>
<div><span class="sig">PKA_activity</span> <span class="cm">// downstream of cAMP</span></div>
<div><span class="sig">GluA1_Ser845_primed</span> <span class="cm">// bool — AMPA insertion threshold lowered by PKA</span></div>
<div><span class="sig">DARPP32_phospho</span> <span class="cm">// bool — PP1 (LTD phosphatase) silenced by PKA</span></div>
<div><span class="sig">CREB_active</span> <span class="cm">// bool — structural gene expression enabled</span></div>
<br>
<div><span class="cm">// ── Slow (hweeks): structural architecture ───────────────────</span></div>
<div><span class="pst">AMPA_count</span> <span class="cm">// surface receptors — postsynaptic sensitivity</span></div>
<div><span class="pst">spine_volume</span> <span class="cm">// physical size of dendritic spine</span></div>
<div><span class="pre">active_zone_size</span> <span class="cm">// docking slot count</span></div>
<div><span class="pre">RRP_pool_capacity</span> <span class="cm">// max readily-releasable pool</span></div>
<div><span class="pre">VGCC_clustering</span> <span class="cm">// Ca²⁺ channels beneath active zone</span></div>
<div><span class="ast">perisynaptic_distance</span> <span class="cm">// how close astrocyte walls are to synapse</span></div>
<div><span class="ast">ECM_integrity</span> <span class="cm">// extracellular matrix density</span></div>
<div><span class="ast">D_serine_tonic_level</span> <span class="cm">// baseline co-agonist supply (sustained)</span></div>
<div><span class="ast">glutamate_clearance_rate</span> <span class="cm">// EAAT transporter density</span></div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">fast time scale — wave propagation (ms → s)</div>
<div class="block">
<div><span class="kw">function</span> <span class="fn">fire_action_potential</span>(input_freq):</div>
<br>
<div class="i1"><span class="cm">// Presynapse: launch wavefront</span></div>
<div class="i1"><span class="pre">pre_Ca_residual</span> += spike_influx(input_freq)</div>
<div class="i1"><span class="pre">pre_Ca_residual</span> *= decay(τ ≈ <span class="num">100ms</span>) <span class="cm">// fades unless spikes keep arriving</span></div>
<div class="i1"><span class="pre">vesicle_release_prob</span> *= facilitation(<span class="pre">pre_Ca_residual</span>)</div>
<div class="i1">released_vesicles = binomial(<span class="pre">RRP_pool</span>, <span class="pre">vesicle_release_prob</span>)</div>
<div class="i1"><span class="ast">glutamate_cleft</span> = released_vesicles × quantal_content</div>
<div class="i1"><span class="pre">RRP_pool</span> -= released_vesicles</div>
<br>
<div class="i1"><span class="cm">// Astrocyte: overflow sensing and co-agonist release</span></div>
<div class="i1"><span class="ast">glutamate_spillover</span> = extrasynaptic_diffusion(<span class="ast">glutamate_cleft</span>)</div>
<div class="i1"><span class="kw">if</span> <span class="ast">glutamate_spillover</span> > spillover_threshold:</div>
<div class="i2"><span class="sig">mGluR5_activation</span> = <span class="kw">True</span> <span class="cm">// Gq arm → IP3 → Ca²⁺ → D-serine</span></div>
<div class="i2"><span class="ast">astro_Ca_local</span> += IP3_cascade(PLC)</div>
<div class="i2"><span class="ast">D_serine_release</span> += proportional_to(<span class="ast">astro_Ca_local</span>)</div>
<div class="i2"><span class="sig">mGluR2_3_activation</span> = <span class="kw">True</span> <span class="cm">// Gi arm → brake presynapse</span></div>
<div class="i2"><span class="sig">cAMP_level</span> -= Gi_inhibition(adenylyl_cyclase)</div>
<div class="i2"><span class="pre">vesicle_release_prob</span> -= VGCC_suppression() <span class="cm">// autoinhibitory brake</span></div>
<br>
<div class="i1"><span class="cm">// Astrocyte: check for network overload</span></div>
<div class="i1"><span class="ast">astro_Ca_global</span> = soma_wave(<span class="ast">astro_Ca_local</span> > OVERLOAD_threshold)</div>
<div class="i1"><span class="kw">if</span> <span class="ast">astro_Ca_global</span>: <span class="fn">trigger</span>(shockwave_lockdown)</div>
<br>
<div class="i1"><span class="cm">// Postsynapse: wavefront strikes resonator</span></div>
<div class="i1">AMPA_current = <span class="ast">glutamate_cleft</span> × <span class="pst">AMPA_count</span></div>
<div class="i1"><span class="pst">membrane_potential</span> += AMPA_current</div>
<br>
<div class="i1"><span class="cm">// NMDA gate: coincidence check</span></div>
<div class="i1"><span class="kw">if</span> <span class="pst">membrane_potential</span> > <span class="num">-40mV</span> <span class="kw">and</span> <span class="ast">D_serine_release</span> > threshold:</div>
<div class="i2"><span class="pst">NMDA_Mg_block</span> = <span class="kw">False</span> <span class="cm">// Mg²⁺ ejected</span></div>
<div class="i2"><span class="pst">post_Ca_amplitude</span> += NMDA_influx(<span class="ast">glutamate_cleft</span>)</div>
<div class="i2"><span class="pst">post_Ca_rise_speed</span> = d(<span class="pst">post_Ca_amplitude</span>) / dt</div>
<br>
<div class="i1"><span class="cm">// Astrocyte: vacuum trailing echoes + fuel pipeline</span></div>
<div class="i1"><span class="ast">glutamate_cleft</span> -= <span class="ast">glutamate_clearance_rate</span> × Δt</div>
<div class="i1"><span class="ast">lactate_output</span> += glycolysis_rate(<span class="ast">glutamate_clearance_rate</span>)</div>
<div class="i1"><span class="pst">membrane_potential</span> restored by NaK_ATPase(<span class="ast">lactate_output</span>)</div>
<div class="i1"><span class="pre">RRP_pool</span> refilled by VATPase(<span class="ast">lactate_output</span>)</div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">intermediate time scale — temporary tuning (s → min)</div>
<div class="block">
<div><span class="kw">function</span> <span class="fn">short_term_plasticity</span>(input_freq, duration):</div>
<br>
<div class="i1"><span class="cm">// Presynapse: facilitate or depress based on Ca²⁺ history</span></div>
<div class="i1"><span class="kw">if</span> input_freq > <span class="num">20Hz</span>:</div>
<div class="i2"><span class="pre">vesicle_release_prob</span> *= <span class="num">1.3</span> <span class="cm">// residual Ca²⁺ primes launchpad</span></div>
<div class="i2"><span class="fn">mobilize</span>(<span class="pre">reserve_pool</span><span class="pre">RRP_pool</span>) <span class="cm">// break storage chains</span></div>
<div class="i1"><span class="kw">elif</span> input_freq < <span class="num">5Hz</span>:</div>
<div class="i2"><span class="pre">vesicle_release_prob</span> *= <span class="num">0.7</span> <span class="cm">// RRP depleted faster than refill</span></div>
<br>
<div class="i1"><span class="cm">// Postsynapse: NMDA gate primed if frequency sustained</span></div>
<div class="i1"><span class="kw">if</span> input_freq >= <span class="num">50Hz</span> <span class="kw">and</span> duration > <span class="num">1s</span>:</div>
<div class="i2"><span class="pst">NMDA_Mg_block</span> = <span class="kw">False</span> <span class="cm">// sustained depolarization</span></div>
<div class="i2"><span class="pst">post_Ca_amplitude</span> accumulates <span class="cm">// early-LTP signal rises</span></div>
<br>
<div class="i1"><span class="cm">// Astrocyte: sustained volume → escalate co-agonist</span></div>
<div class="i1"><span class="kw">if</span> <span class="ast">astro_Ca_local</span> > local_threshold:</div>
<div class="i2"><span class="ast">D_serine_release</span> += gliotransmitter_pulse() <span class="cm">// widens NMDA window</span></div>
<br>
<div class="i1"><span class="cm">// Neuromodulators: set context gate via Gs protein</span></div>
<div class="i1"><span class="kw">if</span> dopamine_level > D1_threshold <span class="kw">or</span> NE_level > β_threshold:</div>
<div class="i2"><span class="sig">cAMP_level</span> += Gs_activation(adenylyl_cyclase)</div>
<div class="i2"><span class="sig">PKA_activity</span> = proportional_to(<span class="sig">cAMP_level</span>)</div>
<div class="i2"><span class="fn">phosphorylate</span>(GluA1, site=Ser845)</div>
<div class="i2"><span class="sig">GluA1_Ser845_primed</span> = <span class="kw">True</span> <span class="cm">// lowers CaMKII threshold</span></div>
<div class="i2"><span class="fn">phosphorylate</span>(DARPP32)</div>
<div class="i2"><span class="sig">DARPP32_phospho</span> = <span class="kw">True</span> <span class="cm">// silences PP1 — blocks LTD</span></div>
<div class="i2"><span class="fn">translocate</span>(PKA → nucleus) → <span class="fn">phosphorylate</span>(CREB)</div>
<div class="i2"><span class="sig">CREB_active</span> = <span class="kw">True</span> <span class="cm">// enables structural gene expression</span></div>
<div class="i1"><span class="cm">// Acetylcholine: lower LTP threshold globally</span></div>
<div class="i1">LTP_threshold *= (<span class="num">1</span> / (<span class="num">1</span> + ACh_level × mAChR_gain))</div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">slow time scale — structural commit (h → weeks)</div>
<div class="block">
<div><span class="kw">function</span> <span class="fn">commit_to_structural_change</span>():</div>
<br>
<div class="i1"><span class="cm">// Hierarchical filter: three conditions must align</span></div>
<div class="i1">event_detected = <span class="pst">post_Ca_amplitude</span> > Ca_HIGH <span class="cm">// layer 1: did something happen?</span></div>
<div class="i1">overflow_sensed = <span class="sig">mGluR5_activation</span> == <span class="kw">True</span> <span class="cm">// layer 2: was it excessive?</span></div>
<div class="i1">context_validated = <span class="sig">DARPP32_phospho</span> <span class="kw">and</span> <span class="sig">GluA1_Ser845_primed</span> <span class="cm">// layer 3: worth saving?</span></div>
<br>
<div class="i1"><span class="cm">// ── Branch 1: LTP — potentiation ──────────────────────────────</span></div>
<div class="i1"><span class="kw">if</span> event_detected <span class="kw">and</span> overflow_sensed <span class="kw">and</span> context_validated:</div>
<br>
<div class="i2"><span class="cm">// Postsynapse: anchor receptors, enlarge spine</span></div>
<div class="i2"><span class="fn">activate</span>(CaMKII)</div>
<div class="i2"><span class="pst">AMPA_count</span> += receptor_insertion(CaMKII, <span class="sig">GluA1_Ser845_primed</span>)</div>
<div class="i2"><span class="pst">spine_volume</span> *= <span class="num">1.5</span></div>
<br>
<div class="i2"><span class="cm">// Presynapse: expand launchpad, increase output reliability</span></div>
<div class="i2"><span class="pre">active_zone_size</span> *= <span class="num">1.4</span> <span class="cm">// more docking slots</span></div>
<div class="i2"><span class="pre">RRP_pool_capacity</span> += pool_expansion(<span class="pre">active_zone_size</span>)</div>
<div class="i2"><span class="pre">VGCC_clustering</span> += cluster_beneath_AZ() <span class="cm">// tighter Ca²⁺ coupling</span></div>
<div class="i2"><span class="pre">vesicle_release_prob</span> += <span class="num">0.1</span> <span class="cm">// driven by VGCC clustering</span></div>
<br>
<div class="i2"><span class="cm">// Astrocyte: seal and insulate the channel</span></div>
<div class="i2"><span class="ast">perisynaptic_distance</span> -= process_retraction() <span class="cm">// walls move IN → tighter wrap</span></div>
<div class="i2"><span class="ast">ECM_integrity</span> += secrete(Glypicans, Thrombospondins)</div>
<div class="i2"><span class="ast">D_serine_tonic_level</span> += upregulate_synthesis() <span class="cm">// sustained NMDA priming</span></div>
<div class="i2"><span class="ast">glutamate_clearance_rate</span> *= <span class="num">0.85</span> <span class="cm">// tighter wrap → slower diffusion away</span></div>
<div class="i2"><span class="kw">return</span> <span class="num">"potentiated"</span></div>
<br>
<div class="i1"><span class="cm">// ── Branch 2: temporary only — Ca²⁺ rose, no save signal ─────</span></div>
<div class="i1"><span class="kw">elif</span> event_detected <span class="kw">and</span> <span class="kw">not</span> context_validated:</div>
<div class="i2"><span class="pst">AMPA_count</span> += transient_insertion() <span class="cm">// early-LTP only — reverses in minutes</span></div>
<div class="i2"><span class="pre">vesicle_release_prob</span> += transient_facilitation()</div>
<div class="i2"><span class="cm">// No astrocyte structural change</span></div>
<div class="i2"><span class="kw">return</span> <span class="num">"temporary facilitation only"</span></div>
<br>
<div class="i1"><span class="cm">// ── Branch 3: LTD — active forgetting ─────────────────────────</span></div>
<div class="i1"><span class="kw">elif</span> event_detected <span class="kw">and</span> <span class="kw">not</span> overflow_sensed <span class="kw">and</span> <span class="kw">not</span> context_validated:</div>
<br>
<div class="i2"><span class="cm">// Postsynapse: internalize receptors, shrink spine</span></div>
<div class="i2"><span class="fn">activate</span>(PP1)</div>
<div class="i2"><span class="pst">AMPA_count</span> -= receptor_internalization(PP1)</div>
<div class="i2"><span class="pst">spine_volume</span> *= <span class="num">0.7</span></div>
<br>
<div class="i2"><span class="cm">// Presynapse: dismantle launchpad</span></div>
<div class="i2"><span class="pre">active_zone_size</span> -= docking_slot_removal()</div>
<div class="i2"><span class="pre">RRP_pool_capacity</span> -= pool_contraction()</div>
<div class="i2"><span class="pre">VGCC_clustering</span> -= scatter_VGCCs() <span class="cm">// decouple Ca²⁺ from AZ</span></div>
<div class="i2"><span class="pre">vesicle_release_prob</span> *= <span class="num">0.6</span></div>
<br>
<div class="i2"><span class="cm">// Astrocyte: dissolve matrix, pull away, cut support</span></div>
<div class="i2"><span class="ast">ECM_integrity</span> -= secrete(MMPs) <span class="cm">// molecular scissors</span></div>
<div class="i2"><span class="ast">D_serine_tonic_level</span> = <span class="num">0</span> <span class="cm">// co-agonist supply cut</span></div>
<div class="i2"><span class="ast">perisynaptic_distance</span> += process_extension() <span class="cm">// walls move OUT → loose wrap</span></div>
<div class="i2"><span class="ast">glutamate_clearance_rate</span> *= <span class="num">1.2</span> <span class="cm">// looser wrap → faster spillover</span></div>
<div class="i2"><span class="kw">return</span> <span class="num">"depressed"</span></div>
<br>
<div class="i1"><span class="cm">// ── Branch 4: baseline ────────────────────────────────────────</span></div>
<div class="i1"><span class="kw">else</span>:</div>
<div class="i2"><span class="cm">// All structural variables unchanged — system holds current state</span></div>
<div class="i2"><span class="kw">return</span> <span class="num">"baseline — no change"</span></div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">special case — shockwave lockdown (&gt;100Hz uncoordinated)</div>
<div class="block">
<div><span class="kw">function</span> <span class="fn">shockwave_lockdown</span>():</div>
<div class="i1"><span class="ast">astro_Ca_global</span> = GLOBAL_WAVE <span class="cm">// soma-level flood</span></div>
<div class="i1"><span class="fn">release</span>(GABA, ATP) <span class="cm">// gel floods postsynapse</span></div>
<div class="i1"><span class="pst">AMPA_count</span> -= mass_internalization()</div>
<div class="i1"><span class="pst">membrane_potential</span> = HYPERPOLARIZED</div>
<div class="i1"><span class="fn">cluster</span>(<span class="pre">VGCC</span> → beneath_active_zone) <span class="cm">// ensures signal survives chaos</span></div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">energy supply chain — metabolic gating (continuous)</div>
<div class="block">
<div><span class="kw">function</span> <span class="fn">metabolic_loop</span>(Δt):</div>
<div class="i1"><span class="cm">// Astrocyte: glucose → lactate pipeline</span></div>
<div class="i1">glucose_uptake = blood_capillary_supply()</div>
<div class="i1"><span class="ast">lactate_output</span> = glycolysis(glucose_uptake, <span class="ast">glutamate_clearance_rate</span>)</div>
<div class="i1"><span class="ast">lactate_output</span> *= load_factor(<span class="ast">glutamate_clearance_rate</span>)</div>
<br>
<div class="i1"><span class="cm">// Pre + post absorb lactate → power their pumps</span></div>
<div class="i1"><span class="pre">RRP_pool</span> refill rate ∝ VATPase(<span class="ast">lactate_output</span>)</div>
<div class="i1"><span class="pst">membrane_potential</span> reset ∝ NaK_ATPase(<span class="ast">lactate_output</span>)</div>
</div>
</div>
<hr class="sep">
<div class="section">
<div class="section-header">key asymmetry — perisynaptic distance is bidirectional</div>
<div class="block">
<div><span class="cm">// LTP: astrocyte moves IN → tighter diffusion barrier</span></div>
<div><span class="cm">// → glutamate_clearance_rate ↓ (signal contained, not diluted)</span></div>
<div><span class="cm">// → D_serine_tonic_level ↑ (NMDA gate chronically primed)</span></div>
<br>
<div><span class="cm">// LTD: astrocyte moves OUT → looser diffusion barrier</span></div>
<div><span class="cm">// → glutamate_clearance_rate ↑ (signal bleeds away faster)</span></div>
<div><span class="cm">// → D_serine_tonic_level = 0 (NMDA gate chronically starved)</span></div>
<br>
<div><span class="cm">// Result: astrocyte amplifies both directions simultaneously</span></div>
<div><span class="cm">// potentiation becomes self-reinforcing; depression becomes self-reinforcing</span></div>
</div>
</div>
</div>