/// <summary> /// Creates the instance and initialize it from given xml element. /// </summary> /// <param name="settingsElem"> /// Xml data containing settings. /// Content of xml element is not validated against the xml schema. /// </param> public DynamicsSettings(XElement settingsElem) { if (settingsElem != null) { //Parsing //Resting efficacy RestingEfficacy = double.Parse(settingsElem.Attribute("restingEfficacy").Value, CultureInfo.InvariantCulture); //Efficacy depression TauDepression = double.Parse(settingsElem.Attribute("tauDepression").Value, CultureInfo.InvariantCulture); //Efficacy facilitation TauFacilitation = double.Parse(settingsElem.Attribute("tauFacilitation").Value, CultureInfo.InvariantCulture); //Apply short-term plasticity ? ApplyShortTermPlasticity = bool.Parse(settingsElem.Attribute("applyShortTermPlasticity").Value); //Weight XElement weightCfgElem = settingsElem.Descendants("weight").FirstOrDefault(); if (weightCfgElem != null) { WeightCfg = new RandomValueSettings(settingsElem.Descendants("weight").FirstOrDefault()); } else { WeightCfg = new RandomValueSettings(0, 1); } } return; }
//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="stimuliCoeff">Input stimuli coefficient (pA)</param> /// <param name="timeScale">Membrane time scale (ms)</param> /// <param name="resistance">Membrane resistance (Mohm)</param> /// <param name="restV">Membrane rest potential (mV)</param> /// <param name="resetV">Membrane reset potential (mV)</param> /// <param name="rheobaseV">Membrane rheobase threshold (mV)</param> /// <param name="firingThresholdV">Membrane firing threshold (mV)</param> /// <param name="sharpnessDeltaT">Sharpness of membrane potential change (mV)</param> /// <param name="refractoryPeriods">Number of after spike computation cycles while an input stimuli is ignored (ms)</param> /// <param name="solverMethod">ODE numerical solver method</param> /// <param name="solverCompSteps">ODE numerical solver computation steps of the time step</param> public ExpIFSettings(double stimuliCoeff, RandomValueSettings timeScale, RandomValueSettings resistance, RandomValueSettings restV, RandomValueSettings resetV, RandomValueSettings rheobaseV, RandomValueSettings firingThresholdV, RandomValueSettings sharpnessDeltaT, int refractoryPeriods, ODENumSolver.Method solverMethod, int solverCompSteps ) { StimuliCoeff = stimuliCoeff; TimeScale = timeScale.DeepClone(); Resistance = resistance.DeepClone(); RestV = restV.DeepClone(); ResetV = resetV.DeepClone(); RheobaseV = rheobaseV.DeepClone(); FiringThresholdV = firingThresholdV.DeepClone(); SharpnessDeltaT = sharpnessDeltaT.DeepClone(); RefractoryPeriods = refractoryPeriods; SolverMethod = solverMethod; SolverCompSteps = solverCompSteps; return; }
//Constructors /// <summary> /// Creates an uninitialized instance /// </summary> public DynamicsSettings() { RestingEfficacy = 0; TauFacilitation = 0; TauDepression = 0; ApplyShortTermPlasticity = true; WeightCfg = null; return; }
/// <summary> /// The deep copy constructor /// </summary> /// <param name="source">Source instance</param> public StaticSynapseSettings(StaticSynapseSettings source) { WeightCfg = null; if (source.WeightCfg != null) { WeightCfg = source.WeightCfg.DeepClone(); } return; }
//Constructors /// <summary> /// Creates an unitialized instance /// </summary> public PoolsInterconnection() { SourcePoolName = string.Empty; SourceConnectionDensity = 0; TargetPoolName = string.Empty; TargetConnectionDensity = 0; SynapseWeight = null; return; }
/// <summary> /// Returns random double according to specified settings. /// </summary> /// <param name="rand"></param> /// <param name="settings">Encapsulated settings</param> public static double NextDouble(this Random rand, RandomValueSettings settings) { double value; switch (settings.DistrType) { case DistributionType.Uniform: value = rand.NextRangedUniformDouble(settings.Min, settings.Max); break; case DistributionType.Gaussian: if (settings.DistrCfg != null) { RandomValueSettings.GaussianDistrSettings gaussianCfg = settings.DistrCfg as RandomValueSettings.GaussianDistrSettings; value = rand.NextFilterredGaussianDouble(gaussianCfg.Mean, gaussianCfg.StdDev, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Gaussian distribution is missing"); } break; case DistributionType.Exponential: if (settings.DistrCfg != null) { RandomValueSettings.ExponentialDistrSettings exponentialCfg = settings.DistrCfg as RandomValueSettings.ExponentialDistrSettings; value = rand.NextFilterredExponentialDouble(exponentialCfg.Mean, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Exponential distribution is missing"); } break; case DistributionType.Gamma: if (settings.DistrCfg != null) { RandomValueSettings.GammaDistrSettings gammaCfg = settings.DistrCfg as RandomValueSettings.GammaDistrSettings; value = rand.NextFilterredGammaDouble(gammaCfg.Alpha, gammaCfg.Beta, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Gamma distribution is missing"); } break; default: throw new Exception($"Unknown distribution type {settings.DistrType}."); } if (settings.RandomSign) { value *= rand.NextSign(); } return(value); }
/// <summary> /// The deep copy constructor /// </summary> /// <param name="source">Source instance</param> public DynamicsSettings(DynamicsSettings source) { RestingEfficacy = source.RestingEfficacy; TauFacilitation = source.TauFacilitation; TauDepression = source.TauDepression; ApplyShortTermPlasticity = source.ApplyShortTermPlasticity; WeightCfg = null; if (source.WeightCfg != null) { WeightCfg = source.WeightCfg.DeepClone(); } return; }