Decoder avec encoder graphΒΆ

falcon:
  version: 1.0
graph:
   processors:

        # Speed pipeline
        behavior:
            class: BehaviorZMQ
            options:
                address: 127.0.0.1
                linearization mode:
                  dimension: 0

        speed threshold:
            class: SpeedThreshold
            options:
                threshold dev: 10
                smooth time: 2 seconds
                linearized speed: true

        decoding filter:
            class: Event2State
            options:
                target event: "crossed"

        encoding filter:
            class: Event2State
            options:
                target event: "not crossed"

        # Decoding pipeline

        raw:
            class: OpenEphysZMQ
            options:
                port: 3335
                nchannels: 384

        splitter:
            class: Distributor
            options:
                distribution mode: slots
                channelmap file:  //:local/decoding_model/sensormap.yaml

        filter(0-7):
            class: MultiChannelFilter
            options:
               filter:
                    type: biquad
                    gain: 0.175014382674721
                    coefficients:
                    - [1.0, 2.0, 1.0, 1.0, -0.4116456379943422, 0.1208387236075018]
                    - [1.0, -2.0, 1.0, 1.0, -1.888701220483925, 0.8929613419279413]

        spike_detector(0-7):
            class: SpikeFeatures
            options:
                threshold: 50.0
                invert_signal: true
                peak lifetime: 0
                features:
                    - amplitude

        decoding buffer:
          class: Rebuffer
          options:
              buffer size:  0.1 seconds

        likelihoods(0-7):
            class: MultiLikelihoodSource
            options:
                decoding size: 0.1

        decoder:
          class: LikelihoodsMerger

        ## Encoding pipeline
        encoding feature:
            class: SpatialFeatures
            options:
                features:
                    - linearized position

        encoding:
            class: OnlineEncoder
            options:
                model path:  //:local/decoding_model/model_empty
                save model: true
                model training: true
                update model: 10

        saver:
          class: FileSerializer
          options:
            format: full
            encoding: yaml

   connections:
        ## Decoder
        - raw  = splitter

        - splitter.data.(0-47) = filter0.data.(0-47)
        - splitter.data.(48-95) = filter1.data.(0-47)
        - splitter.data.(96-143) = filter2.data.(0-47)
        - splitter.data.(144-191) = filter3.data.(0-47)
        - splitter.data.(192-239) = filter4.data.(0-47)
        - splitter.data.(240-287) = filter5.data.(0-47)
        - splitter.data.(288-335) = filter6.data.(0-47)
        - splitter.data.(336-383) = filter7.data.(0-47)

        - filter(0-7).data.(0-47) = spike_detector(0-7).data.(0-47)
        - spike_detector(0-7).data.(0-47) = likelihoods(0-7).data.(0-47)
        - likelihoods(0-7).loglikelihood.(0-47) = decoder.loglikelihood.(0-383)
        - decoder = saver
        ## Speed threshold

        - behavior.data = speed threshold
        - speed threshold.events = decoding filter
        - speed threshold.events = encoding filter

        - spike_detector(0-7).data.(0-47) = encoding feature.spike features.(0-383)
        - behavior.data = encoding feature.spatial features
        - encoding feature.features.(0-383) =  encoding.data.(0-383)

   states:
    - [decoding filter.enabled, likelihoods(0-7).to decode]
    - [decoding filter.enabled, encoder.to encode]
    - [encoding.likelihoods, likelihoods(0-7).likelihoods]
    - [encoding.decoder, decoder.decoder]