Decoder graphΒΆ

falcon:
  version: 1.0
graph:
   processors:

        behavior:
            class: BehaviorZMQ
            options:
                address: 127.0.0.1

        speed threshold:
            class: SpeedThreshold
            options:
                threshold dev: 10
                smooth time: 1 seconds

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

        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

        encoder :
            class: OnlineEncoder
            options:
                model path: //:local/decoding_model/model
                save model: false

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



   connections:
        - behavior.data = speed threshold
        - speed threshold.events = decoding filter

        - 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) = decoding buffer.data.(0-383)
        - decoding buffer.data.(0-383) = 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)

        - spike_detector(0-7).data.(0-47) = encoder.data.(0-383)

        - decoder = saver



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