v0.9.0

API Changes

  • All blox subtypes of AbstractStimulus have been renamed to follow a consistent XStimulus convention: ConstantInputConstantStimulus, PoissonSpikeTrainPoissonSpikeTrainStimulus, PulsesInputPulsesStimulus, VoltageClampSourceVoltageClampStimulus, DBSDBSStimulus, ProtocolDBSProtocolDBSStimulus
  • Blox are now classified as AbstractSimple and AbstractComposite (the definition of composites is unchanged; simples are blox that carry dynamics, and currently include everything that is not a composite).
  • The connection system has been overhauled. Both add_connection! and system_wiring_rule! now dispatch on a connection struct. Connections are now classified as DynamicalConnection between AbstractSimple, or WiringRule. The former have equations and exist at the flattened graph level, while the latter are used to determine the topology of the graph. Users should now create their own structs to define new kinds of wiring rules.
  • An allowed_connections utility has been added to allow one to see what kinds of connections can be made between two blox.
  • Added extract_vars(prob, syms) which builds a nested ComponentVector carrying the current values of the requested parameters from an ODEProblem. The nesting mirrors the -separated namespace hierarchy of Neuroblox blox names, enabling direct property access (e.g. v.blox1.ω) and use as a flat vector.
  • Added apply_vars(prob, v) which takes a (possibly mutated) ComponentVector produced by extract_vars and returns a new ODEProblem with those parameter values applied. Inverse of extract_vars.
  • ProtocolDBS and BurstStimulus constructors no longer accept a start_time; the start time is computed from the other parameters.

v0.8.0

API Changes

  • ModelingToolkit is no longer used by Neuroblox. All interfaces have moved over to GraphDynamics.jl as the backend.
  • A @blox macro has been added for defining blox types compatible with GraphDynamics
  • A @wiring_rule macro has been added for defining what should happen when two blox are connected
  • A @connection macro has been added for defining the action of connection types on subsystems, along with event connections
  • Instead of storing a system and connector object, composite blox (i.e. <:AbstractComposite) now store a graph field which holds a GraphSystem of the internal connections.
  • A @graph! macros have been added for modifying already existing GraphSystems.
  • Agent and ClassificationEnvironment no longer take name and namespace keyword arguments.
  • An @experiment macro has been added to easily modify many parameters of an ODEProblem
  • Blox now support continuous events
  • Blox which used discrete events for spike detection, now set dtmax parameters which limit the maximum timestep a solver is allowed to take.
  • GraphSystems and ODEProblems can now be saved and loaded using save_graph, load_graph, save_problem, and load_problem
  • A MultipointConnection type has been added which allows one to write connection rules between two blox that reference other extra blox.
  • A large library of receptor types has been added to NeurobloxPharma including
    • GABA_B_Synapse
    • NMDA_Synapse
    • MorandiFullNMDAR
    • MorandiNMDAR
    • MsnNMDAR
    • MsnAMPAR
    • MsnD1Receptor
    • MsnD2Receptor
    • HTR5
    • CaTRPM4R
    • Alpha7ERnAChR
    • MuscarinicR
    • Beta2nAChR
  • Sevaral new neuron types have been added for interacting with the receptor library
    • BaxterSensoryNeuron
    • TRNNeuron
    • MuscarinicNeuron
    • VTADANeuron
    • VTAGABANeuron
  • The API pages in our documentation have been restructured and extended with a lot more docstrings. There are now new pages under API for :
  • Neuron, Neural mass and Composite blox definitions
  • Constructing, saving and loading graphs
  • Receptor definitions
  • Reinforcement learning
  • Plotting recipes
  • Utility functions
  • Adding user-defined blox
  • Adding user-defined connections
  • Defining experiments by changing model parameters and initial conditions
  • A tutorial on choosing receptors between neuronal connections was added in the documentation.

v0.7.0

API Changes

  • Neuroblox.jl has been re-organized into a collection of sub-packages which can be used individually. This shouldn't cause any changes for the end user if they simply do using Neuroblox since Neuroblox itself now just re-exports the sub-packages. Currently our public subpackages are:

    • NeurobloxBase.jl fundamental shared infrastructure for making Neuroblox work
    • NeurobloxBasics.jl some common, generic neuroscience primitives
    • NeurobloxDBS.jl infrastructure and models specific to our work on deep brain stimulation
    • NeurobloxPharma.jl infrastructure and models specific to our pharmacological work and the corticostriatal circuit
  • The run_experiment! function now no longer takes a verbose::Bool keyword argument, but instead can take a monitor keyword argument, which is passed to the update_monitor! callback will be run after each experiment trial with information about that trial. We provide ProgressMeterMonitor as a simple replacement for the functionality that the old verbose=true option gave.

  • The naming of many objects from Neuroblox.jl has been updated and made more consistent. Abstract types now all start with Abstract in their type name, and we have removed the suffix Blox from the types that had them e.g. HHNeuronExciBlox was renamed to HHNeuronExci, and NeuralMassBlox was renamed AbstractNeuralMass.

  • A @graph macro has been added to simplify the process of making Neuroblox.jl graphs to pass to system_from_graph.