---
include_toc: true
---

# winnertakeall.md

## WINNERTAKEALL

Expansions and modulations:
  - is expanded by: organs
  - expands: [NEURON](../../elements/neuron/neuron.md)
  - tunes: [PRESYNAPSE](../../elements/neuron/presynapse.md), [POSTSYNAPSE](../../elements/neuron/postsynapse.md), [ASTROSYNAPSE](../../elements/astrocyte/astrosynapse.md)

Qui comprendiamo i behaviors che associamo al winnertakeall. 
- L'eventuale modulazione di winnertakeall, per ora non la prendo in considerazione. Sarebbe creare nuove relations che servirebbero quando si allungano AXON, o addirittura si creano nuovi neuroni.
- in excitation e inhibition facciamo il binding di PRESYNAPSE, POSTSYNAPSE e ASTROSYNAPSE e implicitamente creaiamo e eliminiamo synapse

```Gen
WINNERTAKEALL

include: 
    ../../elements/neuron.md

  type: comprehension

    // Expansion
    @NEU_005: EXPAND [ comprehension: NEURON ]
    @NEU_006: EXPAND [ comprehension: NEURON ]

    // Intrication
    // Scope
    !NIGHT: INTRICATE [ scope: &ORGANISM.!NIGHT]

    // Container Instantiation
 
    // external

    $OUT-EXCI-001: INSTANTIATE [ container: OUT_EXCITATION, argument: COLLECTION [
      pre: (  @NEU_001.@AXO_001._presynapse, @NEU_002.@AXO_001._presynapse ) ] ]   

    $IN-EXCI-001: INSTANTIATE [ container: IN_EXCITATION, argument: COLLECTION [
      post: ( @NEU_001.@D_BRANCH_002._postsynapse, @NEU_002.@D_BRANCH_002._postsynapse ) 
      astro:  &ASTROCYTE._astrosynapse ] ]

    $IN-INHI-001: INSTANTIATE [ container: IN_INHIBITION, argument: COLLECTION [
      post: ( @NEU_001.@SOMA_001._somasynapse, @NEU_002.@SOMA_001._somasynapse ) 
      astro:  &ASTROCYTE._astrosynapse ] ]

    // internal Area xxx

    void: INSTANTIATE [ container: EXCITATION, argument: COLLECTION [ 
      pre: @NEU_001.@AXON-001._presynapse, 
      post: @NEU_001.@D_BRANCH_001._postsynapse, 
      astro: &ASTROCYTE._astrosynapse ] ]
```

### EXCITATION

```Gen
EXCITATION

  type: container

  activity_scope: !NIGHT

    // snippet: *Fixed
    void: INCLUDE [ contextor: ExcitationPossible, event: act 12x ]

    // snippet: *ActivateAstroPostPre
    void: INCLUDE [ binder: ExcitationBind, event: act 12x, cost: act 3x ]
    void: INCLUDE [ accumulator: ClearTraces, event: act 12x, cost: act 3x ]

    // snippet: *DeActivateAstroPost
    void: INCLUDE [ binder: ExcitationUnbind, event: act 12x, cost: act 3x ]
```

#### *Fixed

##### ExcitationPossible

Qui devo capire queste tracce chi le lascia e se sono esclusive?

```Gen
ExcitationPossible

  in_context: &Fixed

    condition: ???
      out_context: *ActivateAstroPostPre

    condition: BadTraces fullness 
      out_context: *DeActivateAstroPost
```

##### *ActivateAstroPostPre

###### ExcitationBind

Qui attiviamo la Syn collegando Pre e Post. Lo facciamo per tutte le relazioni fino a quando GoodTraces fullness

```Gen
ExcitationBind

  in_context: *ActivateAstroPostPre

    hypothesis: GoodTraces fullness
      bind: ( collection.pre, collection.post, collection.astro )
        trace: #qui possiamo lasciare le tracce di un tentativo di attivare non possibile, che dovrebbe andare all'ASTRO
```

###### ClearTraces

```Gen
ClearTraces

  in_context: *ActivateAstroPostPre

    hypothesis: GoodTraces NOT empty
      action: GoodTraces decrease
        trace: None?
```

##### *DeActivateAstroPostPre

###### ExcitationUnbind

Qui deattiviamo la Syn

```Gen
ExcitationUnbind

  # Devo essere sicuro di eliminare i 3 che sono collegati, non a caso. Qui forse il Bind e' prima della ipotesi, perche' dobbiamo assicurarci ci sia una sinapsi da sciogliere.

  in_context: *DeActivateSynPostPre
  
    hypothesis: BadTraces fullness
      unbind: ( collection.pre, collection.post, collection.astro )
        trace: Qui non dovrebbe arrivare se ci sono tracce di BadTraces, generate da synapsi attive
```
