Package ca.nengo.model.neuron.impl

Source Code of ca.nengo.model.neuron.impl.GruberNeuronFactory$GruberNeuron

package ca.nengo.model.neuron.impl;

import ca.nengo.math.PDF;
import ca.nengo.model.Node;
import ca.nengo.model.SimulationException;
import ca.nengo.model.StructuralException;
import ca.nengo.model.Units;
import ca.nengo.model.impl.LinearExponentialTermination;
import ca.nengo.model.impl.NodeFactory;
import ca.nengo.model.neuron.SynapticIntegrator;

/**
* Creates GruberNeurons
*/
public class GruberNeuronFactory implements NodeFactory {
  private static final long serialVersionUID = 1L;

  /**
   * Name of distinguished dopamine termination.
   */
  public static final String DOPAMINE = "dopamine";

  private PDF myScalePDF;
  private PDF myBiasPDF;

  /**
   * @param scale PDF to pick neuron scale from
   * @param bias PDF to pick neuron bias from
   */
  public GruberNeuronFactory(PDF scale, PDF bias) {
//    myScalePDF = new IndicatorPDF(2.9f, 3.1f);
//    myBiasPDF = new IndicatorPDF(-2f, 3f);
    myScalePDF = scale;
    myBiasPDF = bias;
  }

  public Node make(String name) throws StructuralException {
    GruberSpikeGenerator generator = new GruberSpikeGenerator();
    LinearSynapticIntegrator integrator = new LinearSynapticIntegrator(.001f, Units.uAcm2);
    LinearExponentialTermination dopamineTermination
      = (LinearExponentialTermination) integrator.addTermination(DOPAMINE, new float[]{1}, .05f, true);

    float scale = myScalePDF.sample()[0];
//    float scale = 3;
    float bias = myBiasPDF.sample()[0];
    return new GruberNeuron(integrator, generator, scale, bias, name, dopamineTermination);
  }

  /**
   * @see ca.nengo.model.impl.NodeFactory#getTypeDescription()
   */
  public String getTypeDescription() {
    return "Adapting LIF Neuron";
  }


  /**
   * Class representing the actual neuron
   */
  public static class GruberNeuron extends ExpandableSpikingNeuron {

    private static final long serialVersionUID = 1L;

    private LinearExponentialTermination myDopamineTermination;
    private GruberSpikeGenerator mySpikeGenerator;

    /**
     * @param integrator synaptic integrator
     * @param generator generator object
     * @param scale Neuron gain
     * @param bias Neuron bias
     * @param name Neuron name
     * @param dopamineTermination Termination through which the dopamine signal is transmitted
     */
    public GruberNeuron(SynapticIntegrator integrator, GruberSpikeGenerator generator, float scale, float bias,
            String name, LinearExponentialTermination dopamineTermination) {
      super(integrator, generator, scale, bias, name);

      myDopamineTermination = dopamineTermination;
      mySpikeGenerator = generator;
    }

    @Override
    public void run(float startTime, float endTime) throws SimulationException {
      float dopamine = myDopamineTermination.getOutput();
      mySpikeGenerator.setDopamine(dopamine);

      super.run(startTime, endTime);
    }
  }


}
TOP

Related Classes of ca.nengo.model.neuron.impl.GruberNeuronFactory$GruberNeuron

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.