A computational model of systems memory consolidation and reconsolidation (Helfer & Shultz 2019)

 Download zip file 
Help downloading and running models
A neural-network framework for modeling systems memory consolidation and reconsolidation.
1 . Helfer P, Shultz TR (2019) A computational model of systems memory consolidation and reconsolidation. Hippocampus [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network; Synapse;
Brain Region(s)/Organism: Hippocampus; Neocortex;
Cell Type(s): Abstract integrate-and-fire neuron;
Gap Junctions:
Receptor(s): AMPA;
Transmitter(s): Glutamate;
Simulation Environment: C or C++ program;
Model Concept(s): Memory; Synaptic Plasticity;
Implementer(s): Helfer, Peter [peter.helfer at mail.mcgill.ca];
Search NeuronDB for information about:  AMPA; Glutamate;

#include <math.h>
#include "NsUnit.hh"
#include "NsGlobals.hh"

class NsTract;

class NsConnection {
    bool forceStaticInit;
    NsConnection(const NsTract *tract, const NsUnit *from, NsUnit *to);
    void stimulate(double learnRate, uint numStimCycles, const char *tag);
    void amparTrafficking(double cpAmparRemovalRate,
                          double ciAmparInsertionRate,
                          double ciAmparRemovalRate);

    static void printStateHdr();
    void depotentiate(const char *tag);
    void togglePsi(bool state) { psiIsOn = state; }
    void reactivate();
    double getStrength() const;
    void printState() const;
    string toStr(uint iLvl = 0, const string &iStr = "   ") const;
    bool isHebbian() const { return fromUnit->isActive && toUnit->isActive; }

    bool isPotentiated;
    const NsUnit *fromUnit;
    NsUnit *toUnit;

    void potentiate(const char *tag);
    bool initializeStatics();

    void setNumCiAmpars(double n)
        TRACE_DEBUG("simTime: {} {}.numCiAmpars {:5.2f} --> {:5.2f}\n",
                    simTime, id, numCiAmpars, n);
        ABORT_IF(n < minNumCiAmpars || isnan(n), "Oops");
        numCiAmpars = n;
    void setNumCpAmpars(double n)
        TRACE_DEBUG("simTime: {} {}.numCpAmpars {:5.2f} --> {:5.2f}\n",
                    simTime, id, numCpAmpars, n);
        ABORT_IF(n < minNumCpAmpars || isnan(n), "Oops");
        numCpAmpars = n;
    void learn(double learnRate, uint numStimCycles, const char *tag);

    const  NsTract *tract;
    const  string  id;
    double         psdSize;
    double         numCiAmpars;
    double         numCpAmpars;
    bool           psiIsOn;
    bool           staticsInitialized;

    static double  minPsdSize;
    static double  maxPsdSize;
    static double  minNumCiAmpars;
    static double  minNumCpAmpars;
    static double  potProbK;    // K value for potentiation probability as
                                // function of numTrainCycles
    static double  potProbHalf; // numTrainCycles value at which probability
                                // of potentiation is 0.5