<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Neuroinform.</journal-id>
<journal-title>Frontiers in Neuroinformatics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Neuroinform.</abbrev-journal-title>
<issn pub-type="epub">1662-5196</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fninf.2018.00081</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Neuroscience</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Rigorous Neural Network Simulations: A Model Substantiation Methodology for Increasing the Correctness of Simulation Results in the Absence of Experimental Validation Data</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Trensch</surname> <given-names>Guido</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/455237/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Gutzen</surname> <given-names>Robin</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/453511/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Blundell</surname> <given-names>Inga</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/489478/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Denker</surname> <given-names>Michael</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/39100/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Morrison</surname> <given-names>Abigail</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/13504/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Simulation Lab Neuroscience, J&#x000FC;lich Supercomputing Centre, Institute for Advanced Simulation, JARA</institution> <country>J&#x000FC;lich Research Centre, J&#x000FC;lich, Germany</country></aff>
<aff id="aff2"><sup>2</sup><institution>Institute of Neuroscience and Medicine (INM-6) and Institute for Advanced Simulation (IAS-6) and JARA Institute Brain Structure-Function Relationships (INM-10)</institution> <country>J&#x000FC;lich Research Centre, J&#x000FC;lich, Germany</country></aff>
<aff id="aff3"><sup>3</sup><institution>Faculty of Psychology, Institute of Cognitive Neuroscience</institution> <country>Ruhr-University Bochum, Bochum, Germany</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Robert Andrew McDougal, Yale University, United States</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Christoph Metzner, University of Hertfordshire, United Kingdom; Nicolas P. Rougier, Inria Bordeaux - Sud-Ouest Research Centre, France; Pras Pathmanathan, United States Food and Drug Administration, United States; Jason N. MacLean, University of Chicago, United States</p></fn>
<corresp id="c001">&#x0002A;Correspondence: Guido Trensch  <email>g.trensch&#x00040;fz-juelich.de</email></corresp>
</author-notes>
<pub-date pub-type="epub">
<day>26</day>
<month>11</month>
<year>2018</year>
</pub-date>
<pub-date pub-type="collection">
<year>2018</year>
</pub-date>
<volume>12</volume>
<elocation-id>81</elocation-id>
<history>
<date date-type="received">
<day>11</day>
<month>04</month>
<year>2018</year>
</date>
<date date-type="accepted">
<day>22</day>
<month>10</month>
<year>2018</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2018 Trensch, Gutzen, Blundell, Denker and Morrison.</copyright-statement>
<copyright-year>2018</copyright-year>
<copyright-holder>Trensch, Gutzen, Blundell, Denker and Morrison</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract><p>The reproduction and replication of scientific results is an indispensable aspect of good scientific practice, enabling previous studies to be built upon and increasing our level of confidence in them. However, reproducibility and replicability are not sufficient: an incorrect result will be accurately reproduced if the same incorrect methods are used. For the field of simulations of complex neural networks, the causes of incorrect results vary from insufficient model implementations and data analysis methods, deficiencies in workmanship (e.g., simulation planning, setup, and execution) to errors induced by hardware constraints (e.g., limitations in numerical precision). In order to build credibility, methods such as verification and validation have been developed, but they are not yet well-established in the field of neural network modeling and simulation, partly due to ambiguity concerning the terminology. In this manuscript, we propose a terminology for model verification and validation in the field of neural network modeling and simulation. We outline a rigorous workflow derived from model verification and validation methodologies for increasing model credibility when it is not possible to validate against experimental data. We compare a published minimal spiking network model capable of exhibiting the development of polychronous groups, to its reproduction on the SpiNNaker neuromorphic system, where we consider the dynamics of several selected network states. As a result, by following a formalized process, we show that numerical accuracy is critically important, and even small deviations in the dynamics of individual neurons are expressed in the dynamics at network level.</p></abstract>
<kwd-group>
<kwd>reproducibility</kwd>
<kwd>verification and validation</kwd>
<kwd>model validation</kwd>
<kwd>SpiNNaker</kwd>
<kwd>fixed-point numeric</kwd>
<kwd>spiking network models</kwd>
</kwd-group>
<counts>
<fig-count count="11"/>
<table-count count="0"/>
<equation-count count="17"/>
<ref-count count="33"/>
<page-count count="20"/>
<word-count count="13160"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>1. Introduction</title>
<p>Even for domain experts, it is often difficult to judge the correctness of the results derived from a neural network simulation. The factors that determine the correctness of the simulation outcome are manifold and often beyond the control of the modeler. It is therefore of great importance to develop formalized processes and methods, i.e., a systematic approach, to build credibility. This applies not only to the modeling, implementation, and simulation tasks performed in a particular study, but also to their reproduction in a different setting. Although appropriate methods exist, such as verification and validation methodologies, they are not yet well-established in the field of neural network modeling and simulation. One reason may lie in the rapid rate of development of new neuron and synapse models, impeding the development of common verification and validation methods, another is likely to be that the field has yet to absorb knowledge of these methodologies from fields in which they are common practice. This latter point is exacerbated by partly contradicting terminology around these areas.</p>
<p>In this study, we propose a reasonable adaptation of the existing terminology for model verification and validation and apply it to the field of neural network modeling and simulation. We introduce the concept of <italic>model verification and substantiation</italic> and apply it to the issue of reproducibility on a worked example. Specifically, we quantitatively compare a minimal spiking network model capable of exhibiting the development of polychronous groups, as described in Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>), to its reproduction on the SpiNNaker (a contraction of Spiking Neural Network Architecture) neuromorphic system (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>). The Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>) study is highly cited as an account of how spike patterns emerge from network dynamics, and contains a number of non-standard features in its conceptual and implementational choices that make it a particularly illustrative example for the verification process. The choice of a network reproduction implemented on SpiNNaker as a target for comparison is motivated by the fact that SpiNNaker is subject to rather different constraints from typical simulation platforms, in particular the restriction to fixed-point arithmetic, and so demonstrates interestingly different verification problems. With this process we demonstrate the value of software engineering methodologies, such as refactoring, for verification tasks.</p>
<p>Moreover, this study contributes to a question that is intensively debated in the neuromorphic community: how do hardware constraints on numerical precision affect individual neuron dynamics and, thus, the results obtained from a neural network simulation? We compare the neuronal and network dynamics between the original and the SpiNNaker implementation, and our results show that numerical accuracy is critically important; even small deviations in the dynamics of individual neurons are expressed in the dynamics at network level.</p>
<p>This study arose within a collaboration using the same initial study to examine different aspects of rigor and reproducibility in spiking neural network simulations, which we describe briefly here to motivate the scope of the current study. Firstly, a frequent source of errors in a neural network simulation is unsuitable choices of numerics for solving the system of ordinary differential equations underlying the selected neuron model. In section 3.4.2 we focus on the issues of time step and data type; the question of which solver to use is addressed in Blundell et al. (<xref ref-type="bibr" rid="B5">2018b</xref>), who present a stand-alone toolbox to analyze the system of equations and automatically select an appropriate solver for it. Secondly, a key aspect of our study is the reproduction of the network described in Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>) on SpiNNaker, as described in sections 3.1.2 and 3.4.1. The difficulties of creating such a reproduction are comprehensively examined by Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>). Their investigation of the features of source code that support or diminish the reproducibility of a network model is based on reproducing the Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>) study in the NEST simulator (Gewaltig and Diesmann, <xref ref-type="bibr" rid="B11">2007</xref>). In addition to developing a checklist for authors and reviewers of network models, they demonstrate that the reported results are extremely sensitive to implementation details. Finally, in order to determine whether two simulations are producing results of acceptable similarity, we employ a statistical analysis of spiking activity. This is summarized in section 3.2.2; the complete description and derivation of this analysis can be found in our companion paper (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>).</p>
</sec>
<sec id="s2">
<title>2. Terminology</title>
<sec>
<title>2.1. Reproducibility and replicability</title>
<p>Reproducibility and replicability are indispensable aspects of good scientific practice. Unfortunately, the terms are defined in incompatible ways across and even within fields.</p>
<p>In psychology, for example, <italic>reproducibility</italic> may mean completely re-doing an experiment, whereas <italic>replicability</italic> refers to independent studies that yield similar results (Patil et al., <xref ref-type="bibr" rid="B22">2016</xref>). For computational experiments, where the outcome is usually deterministic<xref ref-type="fn" rid="fn0001"><sup>1</sup></xref>, <italic>reproducibility</italic> is understood as obtaining the same results by a different experimental setup conducted by a different team (Association for Computing Machinery, <xref ref-type="bibr" rid="B1">2016</xref>; see also Plesser, <xref ref-type="bibr" rid="B24">2018</xref>). Although attempts were made to help resolve the ambiguity in the terminology by explicitly labeling the terms or by attempting to inventory the terminology across disciplines (Barba, <xref ref-type="bibr" rid="B2">2018</xref>), the problem persists. Plesser (<xref ref-type="bibr" rid="B24">2018</xref>) gives a brief history of this confusion.</p>
<p>In this study, we follow the definitions suggested by the <italic>Association for Computing Machinery</italic> (Association for Computing Machinery, <xref ref-type="bibr" rid="B1">2016</xref>):</p>
<list list-type="simple">
<list-item><p><bold>Replicability</bold> <italic>(Different team, same experimental setup) The measurement can be obtained with stated precision by a different team using the same measurement procedure, the same measuring system, under the same operating conditions, in the same or a different location on multiple trials. For computational experiments, this means that an independent group can obtain the same result using the authors own artifacts</italic>.</p></list-item>
<list-item><p><bold>Reproducibility</bold> <italic>(Different team, different experimental setup) The measurement can be obtained with stated precision by a different team, a different measuring system, in a different location on multiple trials. For computational experiments, this means that an independent group can obtain the same result using artifacts which they develop completely independently</italic>.</p></list-item>
</list>
<p>To be more specific about the terminology of reproducibility, in this study we aim for <italic>results reproducibility</italic> (Goodman et al., <xref ref-type="bibr" rid="B13">2016</xref>; see also Plesser, <xref ref-type="bibr" rid="B24">2018</xref>).</p>
<list list-type="simple">
<list-item><p><bold>Results reproducibility</bold> <italic>Obtaining the same results from the conduct of an independent study whose procedures are as closely matched to the original experiment as possible</italic>.</p></list-item>
</list>
</sec>
<sec>
<title>2.2. Model verification and validation</title>
<p>The critical question for all modeling tasks is whether the model provides a sufficiently accurate representation of the system being studied. Evaluating the results of a modeling effort is a non-trivial exercise which requires a rigorous validation process.</p>
<p>The term <italic>validation</italic>, or more generally <italic>verification and validation</italic> also require a precise definition, as they have different meanings in different contexts. In software engineering, for example, verification and validation is the objective assessment of products and processes throughout the life cycle. Its purpose is to help the development organization build quality into the system (Bourque and Fairley, <xref ref-type="bibr" rid="B6">2014</xref>). With respect to the development of computerized models, verification and validation are processes that accumulate evidence of a model&#x00027;s correctness or accuracy for a specific scenario (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>).</p>
<p>As a cornerstone for establishing credibility of computer simulations, the Society for Computer Simulation (SCS) formulated a standard set of terminology intended to facilitate effective communication between model builders and model users (Schlesinger et al., <xref ref-type="bibr" rid="B27">1979</xref>). This early definition is very general and often does not do justice to a particular modeling domain. Therefore, domain specific adaptations to the terminology can be found, but having fundamentally the same meanings. For the field of neural network modeling and simulation we propose the terminology shown in Figure <xref ref-type="fig" rid="F1">1B</xref>, amended from Thacker et al. (<xref ref-type="bibr" rid="B33">2004</xref>). While Thacker et al. (<xref ref-type="bibr" rid="B33">2004</xref>) uses the terms <italic>reality of interest, conceptual model</italic>, and <italic>computerized model</italic>, we prefer the terms <italic>system of interest, mathematical model</italic>, and <italic>executable model</italic>. The terms are more explicit and better express the underlying intent. In particular, due to the empirical challenges of neurobiology, spiking neural network models are often not based on a specific biological network that could be considered &#x0201C;reality&#x0201D; and from which ground truth behavior can be recorded, in contrast to, for example, the air flow around a wing. The term &#x0201C;system of interest&#x0201D; recognizes that the process of verification and validation can also be applied to systems without concrete physical counterparts.</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p>Interrelationship of the basic elements for modeling and simulation. In order to be able to apply the terminology, introduced by Schlesinger et al. (<xref ref-type="bibr" rid="B27">1979</xref>) for modeling and simulation processes <bold>(A)</bold>, to numerical models for neural network simulations, a less generic terminology is more expedient. We propose the terminology shown in <bold>(B)</bold> which we have adapted slightly from Thacker et al. (<xref ref-type="bibr" rid="B33">2004</xref>). While Thacker et al. (<xref ref-type="bibr" rid="B33">2004</xref>) uses the terms <italic>reality of interest, conceptual model</italic>, and <italic>computerized model</italic>, we prefer the terms <italic>system of interest, mathematical model</italic>, and <italic>executable model</italic> as they better express the underlying intent. The model distinguishes between modeling and simulation activities (black solid arrows), and assessment activities (red dashed arrows).</p></caption>
<graphic xlink:href="fninf-12-00081-g0001.tif"/>
</fig>
<p>The essence of the introduced terminology is the division of the modeling process into three major elements as illustrated in Figures <xref ref-type="fig" rid="F1">1A,B</xref>.</p>
<list list-type="simple">
<list-item><p>Reality or <bold>system of interest</bold> is an &#x0201C;<italic>entity, situation, or system which has been selected for analysis</italic>.&#x0201D; The conceptual or <bold>mathematical model</bold> is defined as a &#x0201C;<italic>verbal description, equations, governing relationships, or natural laws that purport to describe reality or the system of interest&#x0201D;</italic> and can be understood as the precise description of the modeler&#x00027;s intention (Schlesinger et al., <xref ref-type="bibr" rid="B27">1979</xref>). The formulation of the conceptual or mathematical model is derived in a process called <bold>analysis and modeling</bold> and its applicability is motivated in a process termed qualification or <bold>confirmation</bold>. However, the conceptual or mathematical model by itself is not able to simulate the system of interest. By means of applying software engineering and development efforts, it has to be implemented as a computerized or <bold>executable model</bold>.</p></list-item>
</list>
<p>By separating the understanding of a model into a mathematical and an executable model, this terminology also illustrates the difference between verification and validation.</p>
<list list-type="simple">
<list-item><p><bold>Verification</bold> describes the process of ensuring that the mathematical model is appropriately represented by the executable model, and improving this fit.</p></list-item>
</list>
<p>Model verification is the assessment of a model implementation. Neural network models are mathematical models that are written down in source code as numerical algorithms. Therefore, it is useful to define two indispensable assessment activities:</p>
<list list-type="simple">
<list-item><p><bold>Source code verification</bold> tasks confirm that the functionality it implements works as intended.</p></list-item>
<list-item><p><bold>Calculation verification</bold> tasks assess the level of error that arises from various sources of error in numerical simulations as well as to identify and remove them (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>).</p></list-item>
</list>
<p>This process mainly involves the quantification and minimization of errors introduced by the performed calculations. Only when the executable model is verified it can be reasonably validated.</p>
<list list-type="simple">
<list-item><p>The <bold>validation</bold> process evaluates the consistency of the predictive simulation outcome with the system of interest.</p></list-item>
</list>
<p>The validation process aims at the agreement between experimental data that defines the <italic>ground truth</italic> for the system of interest and the simulation outcomes. This evaluation needs to take into consideration the domain of intended application of the mathematical model as well as its expected level of agreement, since any model is an abstraction of the system of interest and only intended to match to a certain degree and for certain prescribed conditions.</p>
</sec>
<sec>
<title>2.3. Model verification and substantiation: model assessment in the absence of experimental data</title>
<p>For neural network simulations, the ground truth of the system of interest can be provided by empirical measurements of activity data, for example single unit and multi-unit activity gathered by means of electrophysiological recordings. However, there are a number of reasons why this data may prove inadequate for validation. Firstly, depending on the specification of the system of interest, such data can be scarce. Secondly, even for comparatively accessible areas and assuming perfect preprocessing (e.g., spike sorting), single cell recordings represent a massive undersampling of the network activity. Thirdly, for a large range of computational neuroscientific models, the phenomenon of interest cannot be measured in a biological preparation: for example, any model relying on the plasticity of synapses within a network.</p>
<p>Consequently, for many neuronal network models, the most that the modeler can do with the available experimental data is to check for consistency, rather than validate in the strong sense. Thus, we are left with an incomplete assessment process. However, circumstantial evidence to increase the credibility of a model can be acquired by comparing models and their implementations against each other with respect to consistency (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>; Martis, <xref ref-type="bibr" rid="B21">2006</xref>). Such a technique can be meaningful in accumulating evidence of a model&#x00027;s plausibility and correctness even if none of the models is a &#x0201C;<italic>validated model&#x0201D;</italic> that may act as a reliable reference.</p>
<p>To avoid ambiguity with the existing model verification and validation terminology, we propose the term &#x0201C;<bold><italic>substantiation</italic></bold>.&#x0201D;</p>
<list list-type="simple">
<list-item><p><bold>Substantiation</bold> describes the process of evaluating and quantifying the level of agreement of two executable models.</p></list-item>
</list>
<p><italic>Model verification and substantiation</italic> are then processes that accumulate <italic>circumstantial evidence</italic> of a model&#x00027;s correctness or accuracy by a quantitative comparison of the simulation outcomes from validated or non-validated model implementations. The interrelationship of the modeling, simulation, and assessment activities are shown in Figure <xref ref-type="fig" rid="F2">2</xref>. To this end, the modeler has to define reasonable acceptance criteria that define the limits within which the process can be executed. In this study, we will demonstrate the usefulness of such an approach.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Model verification and substantiation workflow. The workflow shown can be thought of as the combination of two separate model verification and validation processes (Figure <xref ref-type="fig" rid="F1">1</xref>) without the backward reference to the system of interest, i.e., the validation of the model. In this concept, the consistency of the simulation outcomes of two executable models that share the same system of interest and mathematical model is evaluated, in an assessment activity we term &#x0201C;<italic>substantiation</italic>.&#x0201D; Modeling and simulation activities are indicated by black solid arrows, whereas assessment activities are indicated by red dashed arrows.</p></caption>
<graphic xlink:href="fninf-12-00081-g0002.tif"/>
</fig>
</sec>
<sec>
<title>2.4. Application of terminology to neural network modeling and simulation</title>
<p>Applying the given terminology to the domain of neural network modeling and simulations, we will use the terms as follows. <italic>Replication</italic> means using the author&#x00027;s own model, which may consist of the model source code, scripts for network generation and simulation execution as well as additional software components in a particular version (e.g., if a specific simulation software is used). A replication should aim for bit-identicality. Although computers are deterministic, this is not always feasible, for example, if the seed of the pseudorandom number generator has not been recorded, or the generated trajectory of pseudorandom numbers is dependent on the software version or the underlying hardware. Beyond this, replicable models should have the property of delivering exactly the same result in successive simulations on the same hardware. When using random number generators, this entails setting a seed.</p>
<p>A <italic>reproduction</italic> (or specifically, <italic>results reproduction</italic>) is then the re-implementation of the model in a different framework, e.g., expressing a model as a stand-alone script using neural simulation tools, such as NEURON (Hines and Carnevale, <xref ref-type="bibr" rid="B15">1997</xref>), Brian (Goodman and Brette, <xref ref-type="bibr" rid="B12">2008</xref>), NEST (Gewaltig and Diesmann, <xref ref-type="bibr" rid="B11">2007</xref>), or the SpiNNaker neuromorphic system (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>), and getting statistically the same results.</p>
<p>Applying the terminology defined in this section, one can say: in this study, we replicate a published model and create a reproduction of the model on the SpiNNaker neuromorphic system. In an iterative process of model substantiation, we arrive at the point that both executable models are verified, and in good agreement with one another.</p>
</sec>
</sec>
<sec id="s3">
<title>3. Model verification and substantiation of the Izhikevich polychronization model: the reproduction of selected network states on spinnaker</title>
<sec>
<title>3.1. Definition of the model verification and substantiation methodology entities</title>
<p>For the purposes of demonstrating a rigorous model verification and substantiation methodology, we define as our <italic>system of interest</italic> the mammalian cortex. A mathematical and executable model of this system was proposed by Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>), who demonstrated that this model exhibits the development of polychronous groups. The mathematical model is described in detail in section 3.1.1, the corresponding executable model, referred to in the following as the <italic>C model</italic>, constitutes one target of the verification and substantiation process illustrated in Figure <xref ref-type="fig" rid="F2">2</xref>. For the other target, we reproduce the mathematical model on the SpiNNaker neuromorphic system (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>); the resultant executable model is referred to as the <italic>SpiNNaker model</italic> (see section 3.1.2).</p>
<sec>
<title>3.1.1. Mathematical model</title>
<sec>
<title>3.1.1.1. Network topology</title>
<p>The network connectivity is illustrated in Figure <xref ref-type="fig" rid="F3">3</xref>. A population of 800 excitatory neurons makes random connections to itself and to a population of 200 inhibitory neurons using a fixed out-degree of 100. Excitatory synaptic connections are initially set to a strength of <italic>w</italic><sub><italic>ij</italic></sub> &#x0003D; 6.0 and a conduction delay <italic>D</italic><sub><italic>ij</italic></sub> drawn from a uniform integer distribution such that <italic>D</italic><sub><italic>ij</italic></sub>&#x02208;[1, 2, &#x02026;, 20]ms. The inhibitory population is connected with the same out-degree to the excitatory population only, forming connections with a fixed synaptic strength and delay, <italic>w</italic><sub><italic>ij</italic></sub> &#x0003D; &#x02212;5.0, <italic>D</italic><sub><italic>ij</italic></sub> &#x0003D; 1ms.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Network architecture. The minimal spiking network exhibiting polychronization as decribed in Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>). The input to the network is a constant current of <italic>I</italic><sub>ext</sub> &#x0003D; 20pA into a single neuron, which is randomly selected in each simulation time-step. Please see section 3.1.1 for a detailed description of the mathematical model.</p></caption>
<graphic xlink:href="fninf-12-00081-g0003.tif"/>
</fig>
</sec>
<sec>
<title>3.1.1.2. Component dynamics</title>
<p>Each neuron in the network is described by the simple neuron model presented in Izhikevich (<xref ref-type="bibr" rid="B17">2003</xref>), which can reproduce a variety of experimentally observed firing statistics:</p>
<disp-formula id="E1"><label>(1)</label><mml:math id="M1"><mml:mtable class="eqnarray" columnalign="right center left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo>&#x000B0;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>04</mml:mn><mml:msup><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>&#x0002B;</mml:mo><mml:mn>5</mml:mn><mml:mi>v</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>140</mml:mn><mml:mo>-</mml:mo><mml:mi>u</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mi>I</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E2"><label>(2)</label><mml:math id="M2"><mml:mtable class="eqnarray" columnalign="right center left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mo>&#x000B0;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mi>a</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>b</mml:mi><mml:mi>v</mml:mi><mml:mo>-</mml:mo><mml:mi>u</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E3"><label>(3)</label><mml:math id="M3"><mml:mtext>if&#x000A0;</mml:mtext><mml:mi>v</mml:mi><mml:mo>&#x02265;</mml:mo><mml:mn>30</mml:mn><mml:mtext>&#x02009;m&#x02009;V</mml:mtext><mml:mo>,</mml:mo><mml:mtext>&#x000A0;then&#x000A0;</mml:mtext><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mtable columnalign="left"><mml:mtr columnalign="left"><mml:mtd columnalign="left"><mml:mrow><mml:mi>v</mml:mi><mml:mo>&#x02190;</mml:mo><mml:mi>c</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign="left"><mml:mtd columnalign="left"><mml:mrow><mml:mi>u</mml:mi><mml:mo>&#x02190;</mml:mo><mml:mi>u</mml:mi><mml:mo>+</mml:mo><mml:mi>d</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow><mml:mtext>&#x02009;&#x02009;&#x02009;&#x02009;&#x02009;</mml:mtext><mml:mo>.</mml:mo></mml:math></disp-formula>
<p>Equations (1)&#x02013;(3) describe the time evolution of the membrane voltage <italic>v</italic>(<italic>t</italic>) and the threshold dynamic variable <italic>u</italic>(<italic>t</italic>) of a single neuron. For the polychronization model, excitatory neurons are parameterized to show regular-spiking: (<italic>a</italic>, , <italic>b, c, d</italic>) &#x0003D; (0.02, 0.2, &#x02212;65.0, 8.0), and inhibitory neurons are parameterized to exhibit fast-spiking: (<italic>a, b, c, d</italic>) &#x0003D;  (0.1, 0.2, &#x02212;65.0, 2.0).</p>
<p>The excitatory connections are plastic and evolve according to an additive spike-timing-dependent plasticity (STDP) rule:</p>
<disp-formula id="E4"><label>(4)</label><mml:math id="M4"><mml:mi>w</mml:mi><mml:mo>&#x02190;</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mtable columnalign="left"><mml:mtr columnalign="left"><mml:mtd columnalign="left"><mml:mrow><mml:mi>w</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mo>+</mml:mo></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:mtext>&#x02009;exp</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mo>&#x02212;</mml:mo><mml:mi>&#x00394;</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mo>/</mml:mo><mml:mrow><mml:msub><mml:mi>&#x003C4;</mml:mi><mml:mo>+</mml:mo></mml:msub></mml:mrow></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext>&#x02009;&#x02009;</mml:mtext><mml:mo>:</mml:mo><mml:mi>&#x00394;</mml:mi><mml:mi>t</mml:mi><mml:mo>&#x02265;</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign="left"><mml:mtd columnalign="left"><mml:mrow><mml:mi>w</mml:mi><mml:mo>&#x02212;</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mo>&#x02212;</mml:mo></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:mtext>&#x02009;exp</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mi>&#x00394;</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mo>/</mml:mo><mml:mrow><mml:msub><mml:mi>&#x003C4;</mml:mi><mml:mo>&#x02212;</mml:mo></mml:msub></mml:mrow></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext>&#x02003;</mml:mtext><mml:mo>:</mml:mo><mml:mi>&#x00394;</mml:mi><mml:mi>t</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:math></disp-formula>
<p>where &#x003C4;<sub>&#x0002B;</sub> &#x0003D; &#x003C4;<sub>&#x02212;</sub> &#x0003D; 20 ms, <italic>A</italic><sub>&#x0002B;</sub> &#x0003D; 0.1mV, <italic>A</italic><sub>&#x02212;</sub> &#x0003D; 0.12mV, and &#x00394;<italic>t</italic> is the difference in time between the last post-synaptic and pre-synaptic spikes, i.e., positive on occurrence of a post-synaptic spike and negative on occurrence of a pre-synaptic spike. However, the rule has an unusual variant: synaptic weight changes are buffered for one biological second and then the weight matrix is updated for all plastic synapses simultaneously. Thus, synaptic weights are constant for long periods, causing the network dynamics to break down into epochs.</p>
</sec>
</sec>
<sec>
<title>3.1.2. Executable models</title>
<sec>
<title>3.1.2.1. C model</title>
<p>The original network model and its analysis form a stand-alone application. Several implementations are available for download from the author&#x00027;s website<xref ref-type="fn" rid="fn0002"><sup>2</sup></xref>: a MATLAB implementation (<italic>spnet.m</italic>) and two versions of a C/C&#x0002B;&#x0002B; implementation (<italic>spnet.cpp, poly_spnet.cpp</italic>). They differ slightly in algorithms and functionality and thus do not exhibit bit-identical behavior. All implementations use a grid-based simulation paradigm with a resolution of 1ms. Threshold detection according to Equation (3) is performed only at the grid points. For numerical integration of the ODE system consisting of the Equations (1) and (2) a Forward Euler method is used. From the two available versions of the C/C&#x0002B;&#x0002B; implementation we selected the computationally more precise variant <italic>poly_spnet.cpp</italic> that makes use of double precision data types and also implements the analysis, i.e., algorithms for detecting polychronous groups.</p>
</sec>
<sec>
<title>3.1.2.2. SpiNNaker model</title>
<p>The SpiNNaker neuromorphic system is a massively parallel multi-core computing system designed to provide a real-time simulation platform for large neural networks (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>). The largest available system is a half-million core machine<xref ref-type="fn" rid="fn0003"><sup>3</sup></xref>. The real-time capability is achieved at an simulation resolution of <italic>h</italic> &#x0003D; 1ms using a grid-based simulation paradigm. This is analog to the integration scheme and simulation paradigm used in the original C model implementation. For our study, we use a SpiNN-3 development board that houses 4 SpiNNaker chips, each containing 18 ARM968 processing cores (Temple, <xref ref-type="bibr" rid="B31">2011a</xref>). For simulation control and cross-development, the SpiNN-3 board must be connected to a host system, which then communicates with the board via Ethernet-based UDP packets (Temple, <xref ref-type="bibr" rid="B32">2011b</xref>). The SpiNNaker software stack (Rowley et al., <xref ref-type="bibr" rid="B26">2017b</xref>) supports the implementation of neural network simulations in PyNN<xref ref-type="fn" rid="fn0004"><sup>4</sup></xref>. In addition, it offers several neuron and synapse models as well as a template that enables user to develop custom neuron and synapse models using the event-driven programming model employed by SpiNNaker kernel (Rowley et al., <xref ref-type="bibr" rid="B25">2017a</xref>), available for download from the SpiNNaker repository on GitHub<xref ref-type="fn" rid="fn0005"><sup>5</sup></xref>. The SpiNNaker model used in this study was developed from scratch, making use of this template to produce the various Izhikevich neuron model implementations presented in this manuscript.</p>
</sec>
</sec>
</sec>
<sec>
<title>3.2. Definition of the model substantiation assessment</title>
<p>In the absence of specific biological data to define the ground truth for the system of interest, we are left with the simulation outcomes of the two executable models. Here, we consider the dynamics of five selected network states in the C model. The dynamics is assessed by applying statistical analysis methods to the spike train activity data (see section 3.2.2). For an in-depth treatment of the analysis methods used for comparison, see the companion study (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>). Note that we do not use the emergence of polychronous groups or their statistics to define the ground truth, as this turns out to be rather sensitive to details not only of the mathematical model, but also of the implementational choices used to generate the executable model. For a comprehensive investigation of this aspect, see Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>).</p>
<sec>
<title>3.2.1. Experimental set-up</title>
<p>In order to generate the network activity data for the comparison tasks carried out in the model substantiation process, we perform the following steps, illustrated in Figure <xref ref-type="fig" rid="F4">4</xref>.</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>The experimental set-up for the simulations. <bold>(A)</bold> To create the reference data, the C model is executed (with STDP) and the connectivity matrix <italic>A</italic> and delay matrix <italic>D</italic> are saved. Then five times are selected, for which the weight matrix <italic><bold>W</bold></italic>(<italic>t</italic><sub><italic>i</italic></sub>) is recorded. Along with the input stimulus to the network <italic>I</italic>(<italic>t</italic>), these matrices determine five network states for later comparison. These initial conditions are then set for an implementation of the C model <bold>(B)</bold> and for the SpiNNaker model <bold>(C)</bold>, both without STDP. This results in the network spiking activity recordings <inline-formula><mml:math id="M5"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow></mml:msubsup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M6"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>NM</mml:mtext></mml:mrow></mml:msubsup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> for five simulation runs for the C model and the SpiNNaker model, respectively.</p></caption>
<graphic xlink:href="fninf-12-00081-g0004.tif"/>
</fig>
<p>First, for a given realization (i.e., an implementation and selection of a random seed) for the C model, we execute the model for a duration<xref ref-type="fn" rid="fn0006"><sup>6</sup></xref> of 5 h. During this time we select five times <italic>t</italic><sub><italic>i</italic></sub>, <italic>i</italic> &#x0003D; (1, 2, &#x02026;, 5) (here: after 1, 2, 3, 4, and 5 h), at which we save the weight matrix <italic><bold>W</bold></italic>(<italic>t</italic><sub><italic>i</italic></sub>), containing the current strength of each synapse according to the STDP rule described in section 3.1.1. In addition, we save the connectivity matrix <italic><bold>A</bold></italic>, the delay matrix <italic><bold>D</bold></italic> and the first 60 s&#x00027; worth of the random series of neurons to which an additional stimulus is provided, <italic><bold>I</bold></italic>(<italic>t</italic>). This procedure is illustrated in Figure <xref ref-type="fig" rid="F4">4A</xref>.</p>
<p>In a second step, we switch STDP off in the C model. In five consecutive simulation runs, we initialize the network with <italic><bold>A, D, I</bold></italic>, and the respective <italic><bold>W</bold></italic>(<italic>t</italic><sub><italic>i</italic></sub>), and record the resultant spiking activity <inline-formula><mml:math id="M7"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow></mml:msubsup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> over 60 s, as illustrated in Figure <xref ref-type="fig" rid="F4">4B</xref>. These activity recordings define five dynamic states of the network at different stages of its evolution, constituting the reference data (i.e., fulfilling the role that ground truth data plays in a classical model validation assessment).</p>
<p>Finally, we repeat the second step using the SpiNNaker model (see Figure <xref ref-type="fig" rid="F4">4C</xref>), resulting in corresponding network activity recordings <inline-formula><mml:math id="M8"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>NM</mml:mtext></mml:mrow></mml:msubsup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. To perform the model substantiation assessment, the spiking data <inline-formula><mml:math id="M9"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow></mml:msubsup></mml:math></inline-formula> and <inline-formula><mml:math id="M10"><mml:msubsup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mtext>NM</mml:mtext></mml:mrow></mml:msubsup></mml:math></inline-formula> are analyzed and compared as described in section 3.2.2.</p>
<p>Note that although the parameters and properties of the polychronization model remain untouched, model implementations do change in successive iterations of the verification and substantiation process as described below; consequently, so do the reference data.</p>
</sec>
<sec>
<title>3.2.2. Analysis of network spiking activity</title>
<p>Besides a verification on the level of the dynamics of an individual neuron, we assess the degree of similarity between the different implementations of the Izhikevich polychronization model on the descriptive level of the population dynamics (cf. also, Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>). As issues such as the choice of 32/64-bit architecture, floating-point/fixed-point arithmetic, compiler options influencing the evaluation order of expressions or the choice of pseudorandom numbers and the corresponding seed should not be considered part of the mathematical model, it is legitimate and expected that different implementations will not yield an exact spike-by-spike correspondence (but see Pauli et al., <xref ref-type="bibr" rid="B23">2018</xref> for a counterexample). We therefore resort to testing for equivalence of statistical features extracted from the population dynamics. These tests are conducted in an automated, formal framework that conducts statistical analysis of parallel spike trains using the standardized implementations found in the <italic>Electrophysiology Analysis Toolkit</italic><xref ref-type="fn" rid="fn0007"><sup>7</sup></xref> (Elephant, <ext-link ext-link-type="uri" xlink:href="https://scicrunch.org/resolver/RRID:SCR_003833">RRID:SCR_003833</ext-link>) as its backend. We stress the importance of using a common tool to extract the statistical features for both simulation outcomes in the substantiation procedure in order to prevent distortions in the substantiation outcome due to discrepancies in the implementations of the substantiation procedure itself. In addition, making use of methods provided by such open-source projects greatly contributes to the correctness and replicability of the results.</p>
<p>When choosing the measures by which to compare the network activity, it is essential to assess diverse aspects of the dynamics. Besides widely used standard measures to characterize the statistical features of spike trains or the correlation between pairs of spike trains, this may also include additional measures that reflect more specific features of the network model (e.g., spatio-temporal patterns). Here, we apply tests that compare distributions of three statistical measures extracted from the population dynamics: the average firing rates, the local coefficient of variation as a measure of spike time regularity (Shinomoto et al., <xref ref-type="bibr" rid="B28">2003</xref>), and the pairwise correlation coefficients between all pairs of parallel spike trains (bin width: 2 ms). They can be regarded as forming a hierarchical order and evaluate different aspects of the network dynamics: rates consider the number of observed spikes, whilst ignoring their temporal structure; the local coefficient of variation considers the serial correlations inherent in a spike train, whilst ignoring the relationship between spike trains; the cross correlation considers coordination across neurons.</p>
<p>It should be noted that, as shown later in this study, this conceptual hierarchy does not imply a hierarchy of failure, i.e., a correspondence on the highest level (here: cross correlation) does not automatically imply correspondence of the other measures. Therefore, it is imperative to independently evaluate each statistical property. We evaluate the similarity of the distributions of these measures between simulations using the effect size (Cohen&#x00027;s <italic>d</italic>), i.e., the normalized difference between the means of the distributions (Cohen, <xref ref-type="bibr" rid="B7">1988</xref>). In addition to the substantiation tests selected for the current study, more intricate comparisons can evaluate the correlation structure and dynamical features of the network activity in greater detail, outlined in our companion study (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>).</p>
</sec>
</sec>
<sec>
<title>3.3. Definition of the model verification and substantiation workflow</title>
<p>As stated above, model substantiation evaluates the level of agreement between executable models and their implementations, but is not conclusive whether the model itself is correct, i.e., an appropriate description of an underlying biological reality. It is therefore out of scope of this study to evaluate any neuroscientific aspects of the model described in Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>).</p>
<p>Derived from the concept of model verification and substantiation (Figure <xref ref-type="fig" rid="F2">2</xref>), the workflow in Figure <xref ref-type="fig" rid="F5">5</xref> depicts a condensed illustration of the activities performed in this study. We execute the workflow several times whilst subjecting the C and SpiNNaker model implementations to various implementation and verification activities. The latter can be divided into two categories: source code verification and calculation verification.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Model verification and substantiation workflow as it was conducted. The figure depicts in a condensed form the instantiation of the model verification and substantiation workflow (Figure <xref ref-type="fig" rid="F2">2</xref>) introduced in section 2.3 and carried out in this study.</p></caption>
<graphic xlink:href="fninf-12-00081-g0005.tif"/>
</fig>
<p>The purpose of source code verification is to confirm that the functionality it implements works as intended (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>). Unlike commercially developed production software, scientific source code is used to draw scientific conclusions and, thus, it should act as an available reference (Benureau and Rougier, <xref ref-type="bibr" rid="B3">2017</xref>).</p>
<p>The purpose of calculation verification is to assess the level of error that arise from various sources of error in numerical simulations as well as to identify and remove them. The types of errors that can be identified and removed by calculation verification are, e.g., errors caused by inadequate discretization and insufficient grid refinement as well as errors by finite precision arithmetic. Insufficient grid refinement is typically the largest contributor to error in calculation verification assessment (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>).</p>
</sec>
<sec>
<title>3.4. Application of the method</title>
<p>The model verification and substantiation process we describe in this study required three iteration cycles, named Iteration I, II, and III, until an acceptable agreement was achieved. Figure <xref ref-type="fig" rid="F6">6</xref> shows a complete and detailed breakdown of the activities, which were shown in more general form in Figure <xref ref-type="fig" rid="F5">5</xref>.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Model verification and substantiation iterations and activities conducted. The activities carried out as part of the model verification and substantiation process, which we briefly outlined in Figure <xref ref-type="fig" rid="F5">5</xref>, can be further broken down to a more detailed view. The diagram represents this iterative process in a linear fashion, where three iterations have been conducted. The model substantiation activity performed at the end of each iteration is marked with I, II, and III, which corresponds to the results summary shown in Figure <xref ref-type="fig" rid="F7">7</xref>.</p></caption>
<graphic xlink:href="fninf-12-00081-g0006.tif"/>
</fig>
<p>In the following, we describe for each iteration the verification activities that identified issues with the executable models, and the consequent adaptations to the C and SpiNNaker model implementations. The substantiation activity performed at the end of each iteration is marked in Figure <xref ref-type="fig" rid="F6">6</xref> with I, II, and III, respectively; the results for each one are given in Figure <xref ref-type="fig" rid="F7">7</xref>. A full description of these and further substantiation activities is provided in our companion study (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>).</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p>Model substantiation assessment based on spike data analysis. Histograms (70 bins each) of the three characteristic measures computed from 60 s of network activity after the fifth hour of simulation: Left, firing rates (FR); middle, local coefficients of variation (LV); right, pairwise correlation coefficients (CC). For FR and LV, each neuron enters the histogram, for CC each neuron pair. Results are shown for three iterations (rows) of the substantiation process of the C model (dark colors) and SpiNNaker model (light colors), cf. Figure <xref ref-type="fig" rid="F6">6</xref>. On the far right, the difference between the respective distributions is quantified by the effect size: the graph shows the mean and standard deviation effect size calculated for each of the five network states (after 1, 2, 3, 4, and 5 h of simulation).</p></caption>
<graphic xlink:href="fninf-12-00081-g0007.tif"/>
</fig>
<p>In order to be able to reproduce the findings of this work and our companion study (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>), all source code and simulation data is available online. The model source codes, simulation scripts and the codes used in the verification activities are available on GitHub<xref ref-type="fn" rid="fn0008"><sup>8</sup></xref> (<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5281/zenodo.1435831">doi: 10.5281/zenodo.1435831</ext-link>). The simulation data and scripts used for the quantitative comparisons of statistical measures in the substantiation task can be found on GIN<xref ref-type="fn" rid="fn0009"><sup>9</sup></xref>.</p>
<sec>
<title>3.4.1. Iteration I</title>
<p>In the first iteration, our main focus is source code verification. For the C model, this takes the form of assessing and improving source code quality, whereas for the SpiNNaker model implementation we carry out functional testing.</p>
<sec>
<title>3.4.1.1. C model</title>
<p>The <italic>poly_spnet.cpp</italic> source code hides the algorithms&#x02014;which seem to be derived from MATLAB programming paradigms&#x02014;behind hard-to-read source code. To improve the readability, understand the algorithms, and find potential programming and implementation errors, we subjected the source code to a refactoring<xref ref-type="fn" rid="fn0010"><sup>10</sup></xref> and code inspection task.</p>
<p>We fully reworked the source code by following clean code heuristics (Martin and Coplien, <xref ref-type="bibr" rid="B20">2009</xref>). Code sections concerned with the analysis and not part of the model itself were removed from the source code, kept separately and were only used for functional testing. Whilst going through this iterative refactoring and code inspection process, we made sure that the model remained bit-identical after every iteration, i.e., ensuring replicability (see section 2).</p>
<p>In order to support the experimental setup and make the substantiation activities possible, we added functionality that allows network states to be saved and reloaded. For producing the network activity data for use in substantiation, i.e., the quantitative comparisons of statistical measures, we also switched off STDP (see also section 3.2.1). For convenient functional testing and debugging purposes, the implementation was adapted to allow the polychronization model to be down-scaled to a 20 neuron test network. This size was selected to be small enough for convenient manual debugging, whilst large enough to exhibit spiking behavior and have a non-trivial connectivity matrix.</p>
<p>Performing the refactoring task not only helped understand the C model implementation and algorithms, which is essential, it also laid the foundation for the implementation of the SpiNNaker model.</p>
</sec>
<sec>
<title>3.4.1.2. SpiNNaker model</title>
<p>For the initial iteration of the SpiNNaker model, we used the Explicit Solver Reduction (ESR) implementation of the Izhikevich model provided by the SpiNNaker software stack (Hopkins and Furber, <xref ref-type="bibr" rid="B16">2015</xref>). For network creation, simulation control and execution as well as for functional testing, we developed PyNN scripts that allowed us to conveniently perform the simulation, the verification tasks, and substantiation activities. Additional development work was required to circumvent a few restrictions of the SpiNNaker system and its software stack, namely:</p>
<p><bold><italic>The SpiNNaker framework does not allow external current injection:</italic> </bold>During each 1ms simulation time-step, an external current of <italic>I</italic><sub>ext</sub> &#x0003D; 20pA is injected into a randomly selected neuron. This current injection is emulated by two spike source arrays forming one-to-one connections to the two populations of the polychronization network. Those connections use static synapses, translating an external spike event into an injected current.</p>
<p><bold><italic>The amount of data that needs to be held on the</italic></bold> <bold><italic>SpiNN-3</italic></bold> <bold><italic>board during simulation may</italic></bold> <bold><italic>become too large for 60 s simulation time:</italic> </bold>To limit the amount of data, we divided a single simulation run into 60 cycles. At the end of each cycle, the simulation is halted for data exchange, and then resumed.</p>
<p>We used three approaches to functionally test the PyNN scripts and to verify the implementation of the neuron model:</p>
<p><bold><italic>Manual low level debugging on the SpiNNaker system to verify the correctness of state</italic></bold> <bold><italic>variables, program flow and algorithms:</italic> </bold>The SpiNNaker system offers a low level command line debugging tool called <italic>ybug</italic> and the SpiNNaker kernel also allows log information to be sent to an internal i/o-buffer. The buffer is read at simulation termination and accessible with <italic>ybug</italic>. We used this basic debugging technique to verify the internal states of the neuron model, the correctness of injected current values as well as to verify the correctness of the program flow of the algorithms that we implemented.</p>
<p><bold><italic>Verification of the neuron dynamics using a PyNN test script applying an external</italic></bold> <bold><italic>constant current to individual neurons and recording the state variables:</italic> </bold>We recorded the dynamics of individual neurons resulting from an injected constant current and compared the data with the results obtained from a stand-alone C console application that implements the same algorithms.</p>
<p><bold><italic>Functional testing with a small (20 neuron) version of the polychronization network:</italic> </bold>We used a down-scaled version of the polychronization network (16 excitatory and 4 inhibitory neurons) to verify the functional correctness of the simulation setup. As the connectivity matrix was derived from simulations of the C model, it further served for testing the functionality added to support the activities carried out during the substantiation process, e.g., the export of the connectivity matrix created by simulation runs of the C model and its import into the SpiNNaker simulation.</p>
</sec>
<sec>
<title>3.4.1.3. Substantiation</title>
<p>We simulated the models to generate the data for the quantitative comparisons of the statistical measures, as described in sections 3.2.1 and 3.2.2, respectively. The results are summarized in the top row of Figure <xref ref-type="fig" rid="F7">7</xref>. This reveals a substantial mismatch, most dominantly visible in the distribution of the firing rates (FR) and the pairwise correlation coefficients (CC). This mismatch, as quantified by the effect size, is consistently observed for all five reference network states. Therefore, we conclude that the models do not show an acceptable agreement and the substantiation assessment failed at the end of Iteration I. Although the effect size is a very simple measure which only takes into account the means and standard deviations of the distributions, it provides an intuitive quantification of differences which is unbiased by the sample size. However, since the effect size can not detect discrepancies in the distribution shape, a visual inspection is essential and additional comparison methods, such as hypothesis tests, may be needed. In Figure <xref ref-type="fig" rid="F7">7</xref> we only show the measures computed from 60 s of network activity after the fifth hour. For a visual inspection of the computed measures from the network states after 1, 2, 3, 4, and 5 h of simulation, see Figures <xref ref-type="supplementary-material" rid="SM1">S1</xref>&#x02013;<xref ref-type="supplementary-material" rid="SM1">S5</xref> in the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>.</p>
</sec>
</sec>
<sec>
<title>3.4.2. Iteration II</title>
<p>The substantial discrepancies revealed by the model substantiation assessment performed in Iteration I suggests that there are numerical errors in one or both of the executable models. In the second iteration, we therefore focus on calculation verification. To this end, monitoring functionality was included to record the minimal, maximal, and average values of the model state variables. We find that the largest contributors to error are the choice of solver for the neuronal dynamics, the detection of spikes, and the fixed-point arithmetic on SpiNNaker.</p>
<sec>
<title>3.4.2.1. Numeric integration scheme and precise threshold detection</title>
<p>When working with systems of ordinary differential equations (ODEs), it is important to make sensible decisions regarding the choice of a numeric integration scheme. To achieve accurate approximations of their solutions one must take into account not only the form of the equation but also the magnitude of the variables occurring in them (Dahmen and Reusken, <xref ref-type="bibr" rid="B8">2005</xref>). Depending on these parameters, some ordinary differential equations can become <italic>stiff</italic> , i.e., requiring excessively small time steps for an <italic>explicit</italic> numerical iteration scheme (i.e., one that only uses the values of variables at preceding time-steps) to achieve acceptable accuracy and avoid numeric instabilities. Such equation systems require the use of an <italic>implicit</italic> scheme (i.e., one that finds a solution by solving an equation involving both the current values of variables and their later values). However, this method is computationally more expensive, entailing unnecessarily long run-times when applied to non-stiff systems (Strehmel and Weiner, <xref ref-type="bibr" rid="B30">1995</xref>). The ODEs used to model neuronal behavior are often non-stiff, so that an explicit numerical iteration scheme is sufficient (Lambert, <xref ref-type="bibr" rid="B19">1992</xref>).</p>
<p>The Izhikevich ODE system (Equations 1&#x02013;3) is an example of such a non-stiff model, see Blundell et al. (<xref ref-type="bibr" rid="B5">2018b</xref>). Thus, in principle, the choice of an explicit method, namely the Forward Euler method, albeit in a semi-implicit symplectic variant, which is used in the C model, is correct. Nevertheless, the numerical integration scheme must be applied correctly, i.e., the step size must be chosen according to the desired maximum error. The (relatively large) selected step sizes of <italic>h</italic> &#x0003D; 0.5ms for the integration of the membrane potential (Equation 1), and <italic>h</italic> &#x0003D; 1.0ms for the recovery variable are not only questionable because no motivation is given for why two different step sizes are chosen for the same system of equations, but more importantly because no error estimate is implemented to guarantee that the integration scheme does in fact give a reasonable approximation of the solution of the ODE system. The algorithm of the original C model implementation is shown in Listing 1. Note the symplectic, or semi-implicit Forward Euler scheme, i.e., the update of <italic>u</italic> is based on an already updated value for <italic>v</italic>. In an unorthodox approach, the variable <monospace>v</monospace> is integrated in two 0.5ms steps whilst <monospace>u</monospace> is integrated in one 1ms step.</p>
<fig id="F12" position="float">
<label>Listing 1</label>
<caption><p>C model: algorithm of updating the neuronal dynamics (given as pseudocode) as implemented in the original C model. The algorithm implements a fixed-step size semi-implicit symplectic Forward Euler method.</p></caption>
<graphic xlink:href="fninf-12-00081-g0012.tif"/>
</fig>
<p>The spike onset of a regular-spiking Izhikevich neuron appears as a steep slope at threshold, and, due to the grid-constrained threshold detection in the C model, leads to values of <italic>v</italic>(<italic>t</italic>) which can be two orders of magnitude higher than the threshold value &#x003B8; &#x0003D; 30mV (Equation 3). In the C model, we observed values of <italic>v</italic>(<italic>t</italic>) &#x02264; 1700. Figure <xref ref-type="fig" rid="F8">8</xref> graphically illustrates the error caused by this approximation. The value of <italic>u</italic>(<italic>t</italic>) (Equation 2), which describes the threshold dynamics, evolves continuously, thus, <italic>v</italic><sub>error</sub> will induce an error to the threshold dynamic which propagates over time delaying all subsequent spike events.</p>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p>Above threshold evolution of the state variable <italic>v</italic>(<italic>t</italic>). The approximation in the evolution of <italic>v</italic>(<italic>t</italic>) in the Equation (1) when using the semi-implicit symplectic Forward Euler method with a fixed-step size of <italic>h</italic>/2 &#x0003D; 0.5ms (the red dotted line), where <italic>h</italic> refers to the 1 ms simulation time-step, causes <italic>v</italic>(<italic>t</italic>) values to be well above the threshold and, thus, producing a propagating error over time. This is expressed in delayed spike times. The black solid line shows the evolution of <italic>v</italic>(<italic>t</italic>) around threshold for a regular-spiking type Izhikevich neuron stimulated with a constant current of <italic>I</italic><sub>ext</sub> &#x0003D; 5pA. For integration, the same Forward Euler method was used but with an integration step size of <italic>h</italic>/100 &#x0003D; 0.01ms. The steep slope at threshold requires a precise threshold detection to prevent a numeric overflow.</p></caption>
<graphic xlink:href="fninf-12-00081-g0008.tif"/>
</fig>
<p>Moreover, for efficiency, SpiNNaker uses fixed-point numerics. Numbers are held as 32-bit fixed-point values in a <italic>s</italic>16.15 representation, limited in range. Large values of <italic>v</italic>(<italic>t</italic>) can lead to a fixed-point overflow, as discussed in greater detail below, which may then produce spike artifacts. The likelihood of this is even further increased by the fact that this value appears as a power of two in Equation (1). To demonstrate this, we adapted the algorithm shown in Listing 1 and added an additional integration step (see Listing 2). The neuronal activity, shown in Figure <xref ref-type="fig" rid="F9">9</xref>, exhibits spiking artifacts in the form of bursts of spikes with high spike rates.</p>
<fig id="F9" position="float">
<label>Figure 9</label>
<caption><p>Spike artifacts caused by fixed-point overflow. Large values of <italic>v</italic>(<italic>t</italic>) can cause an overflow of the fixed-point data type, which may result in short spike-trains with higher rates (marked by blue boxes). Simulations on SpiNNaker using fixed-step size symplectic Forward Euler with an integration step size of <italic>h</italic>/3 &#x0003D; 0.333ms and without precise threshold detection. (<italic>h</italic> refers to the simulation time-step of 1ms).</p></caption>
<graphic xlink:href="fninf-12-00081-g0009.tif"/>
</fig>
<fig id="F13" position="float">
<label>Listing 2</label>
<caption><p>SpiNNaker model: an algorithm of updating the neuronal dynamics (given as pseudo code). The algorithm is similar to the implementation shown in Listing 1 but uses three fixed size integration steps. The additional step increases the likelihood that large values of <italic>v</italic>(<italic>t</italic>) are squared. This implementation may cause a numeric overflow.</p></caption>
<graphic xlink:href="fninf-12-00081-g0013.tif"/>
</fig>
<p>The SpiNNaker software stack (Rowley et al., <xref ref-type="bibr" rid="B26">2017b</xref>) provides an Izhikevich neuron model implementation optimized for efficiency for fixed-point processors, such as ARM. The implementation follows a new approach called Explicit Solver Reduction (ESR), described in Hopkins and Furber (<xref ref-type="bibr" rid="B16">2015</xref>): &#x0201C;<italic>for merging an explicit ODE solver and autonomous ODE into one algebraic formula, with benefits for both accuracy and speed.&#x0201D;</italic> The SpiNNaker system is designed for simulations in biological real-time. The real-time capability is achieved at an integration step size of <italic>h</italic> &#x0003D; 1ms which then corresponds to the simulation time-step, i.e., the same integration step size as the C model. At higher resolution, i.e., smaller integration time-steps, the simulation time increases accordingly. The SpiNNaker ESR implementation, at the same integration step size, does not exhibit such artifacts, but fails in in adequately reproducing the network states, as can be seen in the model substantiation assessment for Iteration I (top row of Figure <xref ref-type="fig" rid="F7">7</xref>).</p>
<p>In general, higher accuracy can be obtained by using smaller step sizes. However, for this model, using smaller steps to integrate whilst restricting spike detection and reset to a 1ms grid results in a steep slope in the evolution of the membrane potential above threshold which rapidly reaches values that can not be represented with double precision (compare red dotted curve and black solid curve in Figure <xref ref-type="fig" rid="F8">8</xref>). We therefore propose a solution that combines a simple fixed-step size symplectic Forward Euler ODE solver and an exact off-grid threshold detection, while a spike event is still forced to a grid point. To be more specific, within each 1 ms simulation time-step <italic>h</italic>, the equations evolve in steps of <italic>h</italic>/16. The number of internal integration steps was chosen for two reasons. First, as a power of two, it can be represented in <italic>s</italic>16.15 without numerical error. Second, it represents a good compromise between the increased computational cost of smaller steps, and the increased overshoot in the membrane potential for larger steps. The algorithm is given as pseudo code in Listing 3. Please note the multiplication with 0.0625, avoiding a costly division. Spikes can be detected (and the dynamics reset) after every internal step, however, as with the C model, spikes are emitted on the simulation grid with a resolution of 1ms. Multiple spike events within one simulation time-step are thus potentially possible, but are merged into a single event. However, this seems to be a very rare event. Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>) demonstrated that there was only a very slight change in average firing rate for this network model between a simulation locked to a 1ms grid, as used here, and one carried out at a higher resolution of 0.1ms. We thus consider this effect to be negligible in the following.</p>
<fig id="F14" position="float">
<label>Listing 3</label>
<caption><p>SpiNNaker model: an improved algorithm of updating the neuronal dynamics (given as pseudo code) that uses a fixed-step size symplectic Forward Euler method and precise threshold detection.</p></caption>
<graphic xlink:href="fninf-12-00081-g0014.tif"/>
</fig>
<p>To assess the accuracy of our proposed solver and that of the implementation provided by the SpiNNaker framework, we performed single neuron simulations and compared the resultant membrane potentials to that produced by a Runge-Kutta-Fehlberg(4, 5) (rkf45) solver implementation from the GNU Scientific Library (GSL)<xref ref-type="fn" rid="fn0011"><sup>11</sup></xref>. The explicit Runge-Kutta-Fehlberg(4, 5) method is a good general-purpose integrator, and, compared to a simple Forward Euler, of a higher order. To serve as a reliable reference, the rkf45 algorithm was parametrized to integrate with an absolute error of 10<sup>&#x02212;6</sup>. The results are shown in Figure <xref ref-type="fig" rid="F10">10</xref>. Note that not only do the spike times for both the fixed-step size Euler and the ESR solvers lag behind the rkf45 solver, but due to the accumulation of <italic>v</italic><sub>error</sub>, the lag becomes larger during the course of the simulation, here reaching around 20ms in a simulation of 500ms duration containing five spikes. As the errors occur at spike times, higher spike rates lead to larger deviations. Thus, the course of the membrane potential of the fast-spiking type neuron is less accurate than for the regular-spiking type neuron. This applies also to an increasing injected current <italic>I</italic>, as this also leads to higher spike rates (data not shown). As the firing rate increases, the ESR lags more, such that fewer spikes are generated in the given time window. Our results show that even though the fixed-step size Euler scheme is simpler than ESR, it is a more accurate match to the single neuron dynamics.</p>
<fig id="F10" position="float">
<label>Figure 10</label>
<caption><p>Spike timing: comparison of different ODE solver implementations. Membrane potential <italic>v</italic>(<italic>t</italic>) recorded for a regular-spiking <bold>(A)</bold> and fast-spiking <bold>(B)</bold> Izhikevich neuron, stimulated with a constant current of <italic>I</italic><sub>ext</sub> &#x0003D; 5pA. The dynamics are solved by the original SpiNNaker ESR ODE solver implementation (blue dashed curves); a fixed-step size symplectic Forward Euler approach with precise threshold detection (<italic>h</italic>/16 &#x0003D; 0.0625ms) (green solid curves); and, for comparison, a reference implementation of the GSL rkf45 ODE solver with an absolute integration error of 10<sup>&#x02212;6</sup> (black dotted curves). Both the SpiNNaker ESR and the fixed-step size Forward Euler implementations show considerable lags in the spike timing compared to the rkf45 reference implementation. While for the regular-spiking neuron <bold>(A)</bold> the SpiNNaker implementations have much the same accuracy, the fixed-step size Forward Euler approach with precise spike timing shows a substantial improvement over the ESR implementation for the fast-spiking neuron <bold>(B)</bold>.</p></caption>
<graphic xlink:href="fninf-12-00081-g0010.tif"/>
</fig>
</sec>
<sec>
<title>3.4.2.2. Fixed-point numeric precision</title>
<p>Hardware floating point units are expensive in chip area, and thus lower the power efficiency of the system. Consequently, SpiNNaker stores numbers, i.e., membrane voltages and other neuron parameters, as 32-bit signed fixed-point values (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>). Since the meaning of an <italic>n</italic>-bit binary word depends entirely on its interpretation, we can divide an n-bit word into an integer part <italic>i</italic> and a fractional part <italic>f</italic> by defining a <italic>binary point</italic> position. Calculations are then performed as if the numbers are simple two&#x00027;s complement integers. SpiNNaker uses a so called <italic>s</italic>16.15 representation, that is, a 32-bit signed fixed-point format with <italic>i</italic> &#x0003D; 16, <italic>f</italic> &#x0003D; 15 and a sign bit. The value range is small in comparison to a single or double precision data type. For the <italic>si</italic>.<italic>f</italic> data types the value range is defined by:
<disp-formula id="E5"><label>(5)</label><mml:math id="M11"><mml:mtable class="eqnarray" columnalign="right center left"><mml:mtr><mml:mtd><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msup><mml:mo>&#x02264;</mml:mo><mml:mi>x</mml:mi><mml:mo>&#x02264;</mml:mo><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mi>f</mml:mi></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The SpiNNaker <italic>s</italic>16.15 data type therefore ranges from &#x02212;2<sup>16</sup> &#x0003D; &#x02212;65536 to 2<sup>16</sup>&#x02212;2<sup>&#x02212;15</sup> &#x0003D; 65535.999969482.</p>
<p>This data type does not saturate on SpiNNaker (Hopkins and Furber, <xref ref-type="bibr" rid="B16">2015</xref>). This means that in case of a fixed-point overflow, the value wraps around producing a negative number. In neural network simulations this might be seen as spike artifacts, as demonstrated in Figure <xref ref-type="fig" rid="F9">9</xref>. Another aspect of fixed-point arithmetic and an additional source of numerical inaccuracy is that not every number can be accurately represented. For example: although small, the error in the <italic>s</italic>16.15 representation of the constant value 0.04 in Equation (1) induces a noticeable delay in the spike timing.</p>
<p>To represent a number in <italic>si</italic>.<italic>f</italic>, its value is shifted <italic>f</italic> bits to the left, i.e., multiplied by 2<sup><italic>f</italic></sup>. For the constant value 0.04 in Equation (1) this yields:
<disp-formula id="E6"><mml:math id="M12"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>04</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>15</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>1310</mml:mn><mml:mo>.</mml:mo><mml:mn>7</mml:mn><mml:msub><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mn>16</mml:mn><mml:mo>.</mml:mo><mml:mn>15</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The compiler stores the value as a 32-bit word while truncating the fraction:
<disp-formula id="E7"><mml:math id="M13"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mi>x</mml:mi><mml:mn>0000051</mml:mn><mml:mi>E</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>If the value is converted back, this leads to:
<disp-formula id="E8"><mml:math id="M14"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>131</mml:mn><mml:msub><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mn>16</mml:mn><mml:mo>.</mml:mo><mml:mn>15</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>15</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>03997802</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>This loss in precision is significant. At the level of the dynamics of individual neurons, this difference is expressed in terms of delayed spike times. The following example may illustrate this: for the sake of simplicity we assume a membrane potential of <italic>v</italic>(<italic>t</italic><sub>0</sub>) &#x0003D; &#x02212;75mV while <italic>u</italic>(<italic>t</italic><sub>0</sub>) &#x0003D; 0 and <italic>I</italic>(<italic>t</italic><sub>0</sub>) &#x0003D; 0. The expected value for <italic>v</italic>(<italic>t</italic><sub>1</sub>) in the Equation (1) is:
<disp-formula id="E9"><mml:math id="M15"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>04</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x0002B;</mml:mo><mml:mn>5</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>75</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mn>140</mml:mn><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mn>10</mml:mn><mml:mo>.</mml:mo><mml:mn>0000000</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The same calculation in <italic>s</italic>16.15 leads to:
<disp-formula id="E10"><mml:math id="M16"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>03997802</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x0002B;</mml:mo><mml:mn>5</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>75</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mn>140</mml:mn><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mn>10</mml:mn><mml:mo>.</mml:mo><mml:mn>1236357</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>This slightly more negative value of <italic>v</italic>(<italic>t</italic>) causes the threshold crossing to occur later and affects the dynamics on the network level.</p>
<p>The effect can be mitigated if critical calculations are performed with higher precision numbers, whereby the order of operations also plays a role. If, for example, the constant value 0.04 in Equation (1) is represented in <italic>s</italic>8.23, the numerical error can be reduced.
<disp-formula id="E11"><mml:math id="M17"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>04</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>23</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>335544</mml:mn><mml:mo>.</mml:mo><mml:mn>3</mml:mn><mml:msub><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mn>8</mml:mn><mml:mo>.</mml:mo><mml:mn>23</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>If the value which is truncated by the compiler is converted back, we then get:
<disp-formula id="E12"><mml:math id="M18"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>33554</mml:mn><mml:msub><mml:mrow><mml:mn>4</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mn>8</mml:mn><mml:mo>.</mml:mo><mml:mn>23</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>23</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>039999962</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>If now the same calculation as in the beginning is performed, the result is significantly more precise.
<disp-formula id="E13"><mml:math id="M19"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>039999962</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mn>75</mml:mn><mml:mo>&#x0002B;</mml:mo><mml:mn>5</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>75</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mn>140</mml:mn><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mn>10</mml:mn><mml:mo>.</mml:mo><mml:mn>00021375</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The disadvantage, however, is the limited value range of the <italic>s</italic>8.23 representation which is:
<disp-formula id="E14"><mml:math id="M20"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>8</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mn>256</mml:mn><mml:mtext>&#x02003;to&#x02003;</mml:mtext><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>8</mml:mn></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>23</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>255</mml:mn><mml:mo>.</mml:mo><mml:mn>999999881</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The simple fixed-step size symplectic Forward Euler method together with a precise threshold detection presented above ensures that values stay within limits. Furthermore, we point out that a <italic>s</italic>8.23 data type is not available on SpiNNaker, i.e., it is not supported by the ARM C compiler. To let the value 335544.32<sub>(<italic>s</italic>8.23)</sub> appear as a <italic>s</italic>16.15 constant we can write:
<disp-formula id="E15"><mml:math id="M21"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>335544</mml:mn><mml:mo>.</mml:mo><mml:mn>3</mml:mn><mml:msub><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mn>16</mml:mn><mml:mo>.</mml:mo><mml:mn>15</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>10</mml:mn><mml:mo>.</mml:mo><mml:mn>24</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mn>15</mml:mn></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>In order to return to the original value, a right-shift operation of 8 bits is then required.
<disp-formula id="E16"><mml:math id="M22"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mn>10</mml:mn><mml:mo>.</mml:mo><mml:mn>24</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>8</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>04</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>In this context, the order in which the operations are carried out is also very important. For example, multiplying 10.24 with the power of two of the membrane potential may cause an overflow of the <italic>s</italic>16.15 data type. Combining all this leads to the following sequence of operations for the Equation (1).</p>
<disp-formula id="E17"><label>(6)</label><mml:math id="M23"><mml:mover accent="true"><mml:mi>v</mml:mi><mml:mo>&#x002D9;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>10.24</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mi>v</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x000B7;</mml:mo><mml:mn>0.00390625</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x000B7;</mml:mo><mml:mi>v</mml:mi><mml:mo>+</mml:mo><mml:mn>5</mml:mn><mml:mo>&#x000B7;</mml:mo><mml:mi>v</mml:mi><mml:mo>+</mml:mo><mml:mn>140</mml:mn><mml:mo>&#x02212;</mml:mo><mml:mi>u</mml:mi><mml:mo>+</mml:mo><mml:mi>I</mml:mi></mml:math></disp-formula>
<p>In order to prevent the compiler from optimizing the code and perhaps arranging the operations in an inappropriate order, the critical calculations in the Equation (6) are placed in separate lines. This is shown as pseudo code in Listing 4. Note that suppressing optimization in this way works for the ARM C compiler, but can not be generalized. We verified this through an analysis of the generated assembler source code.</p>
<fig id="F15" position="float">
<label>Listing 4</label>
<caption><p>SpiNNaker model: the same algorithm (given as pseudo code) as shown in Listing 3, but adds fixed-point conversion to the constant 0.04.</p></caption>
<graphic xlink:href="fninf-12-00081-g0015.tif"/>
</fig>
<p>The above also applies to the Izhikevich neuron model parameters <italic>a</italic> and <italic>b</italic> which add an error to <italic>u</italic>(<italic>t</italic>). Further, the example ignored that the state variables <italic>v</italic>(<italic>t</italic>) and <italic>u</italic>(<italic>t</italic>) are themselves fixed-point values that add numerical inaccuracy.</p>
<p>In the course of the implementation of the SpiNNaker Izhikevich neuron model, and the adaptations of the model during the verification and substantiation process, we added fixed-point data type conversion to all constant values involved in critical calculations, that is the constant value 0.04 in the Equation (1) and the neuron model parameters <italic>a</italic> and <italic>b</italic>.</p>
<p>To investigate the consequences of data type conversion for critical parameters on the accuracy of the solution of the dynamics, we simulated regular-spiking and fast-spiking Izhikevich neurons with and without fixed-point data type conversion, and compared the development of the membrane voltages to a Runge-Kutta-Fehlberg(4, 5) (rkf45) solver implementation of the GNU Scientific Library (GSL), thus, using the same verification method as before when choosing the integration scheme. The results are shown in Figure <xref ref-type="fig" rid="F11">11</xref>. For both neuron parameterizations, we achieved a substantial improvement in the spike timing. Compared to results for the regular-spiking neuron, in which the solver employing data type conversion is very close to the rkf45-reference, our implementation still lags behind the rkf45-reference for the fast-spiking neuron. This can be explained by the overshoot in <italic>v</italic>(<italic>t</italic>) at threshold crossing, that, even if it is small, still exists, and propagates over time&#x02014;and the more spikes emitted, the larger the error becomes.</p>
<fig id="F11" position="float">
<label>Figure 11</label>
<caption><p>Spike timing: with and without fixed-point data type conversion. The graphs show the development of the membrane voltages <italic>v</italic>(<italic>t</italic>) with (green solid line) and without (red dashed line) fixed-point data type conversion for a regular-spiking type <bold>(A)</bold> and a fast-spiking type <bold>(B)</bold> Izhikevich neuron, that is stimulated with a constant current of <italic>I</italic><sub><italic>ext</italic></sub> &#x0003D; 5<italic>pA</italic>. For the ODE solver, the fixed-step size symplectic Forward Euler implementation with precise threshold detection was used (<italic>h</italic>/16 &#x0003D; 0.0625ms). This is shown in comparison to a reference implementation of the GSL rkf45 ODE solver with an absolute integration error of 10<sup>&#x02212;6</sup> (black dotted line). For both neuron types, a substantial improvement in the spike timing can be seen.</p></caption>
<graphic xlink:href="fninf-12-00081-g0011.tif"/>
</fig>
</sec>
<sec>
<title>3.4.2.3. Substantiation</title>
<p>As the C model was adapted during Iteration II, we can no longer speak of a <italic>replication</italic>. Therefore, before performing the model substantiation assessment, we needed to check whether the results of the modified model are compatible with the original, i.e., whether or not <italic>result reproducibility</italic> is preserved. We evaluated the development of polychronous groups in the modified C model using the analysis provided in Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>). We found that the number of polychronous groups was reduced by about 34%. Thus the network still shows the behavior reported in the original manuscript (Izhikevich, <xref ref-type="bibr" rid="B18">2006</xref>), albeit in a weakened form. As it was demonstrated in Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>) that the number of groups developed by the C model varies strongly with implementation details, including the solver algorithm of the neuron model, we consider this result to be within our acceptance criteria.</p>
<p>We then performed the model substantiation assessment as described in section 3.2 for the C and SpiNNaker models incorporating the refined neuron model implementations described above. Note that this included re-generating the reference data, due to the changes in the neuron model implementation.</p>
<p>The result of the network activity data analysis and its comparison is shown in the middle row of Figure <xref ref-type="fig" rid="F7">7</xref>. Our new ODE solver, implemented in both models, leads to a good match in the firing rates (FR) and the pairwise correlation coefficients (CC). We note, though, that the distributions are shifted from those expressed by the C implementation in Iteration I. The shift of cross-correlation to lower values may well account for the smaller number of polychronous groups developed. Both the firing rates and the cross correlations also show small effect sizes after this iteration. In case of the CC distributions, the effect size has to be interpreted with care, as it assumes Gaussian-like distributions which is clearly violated by the bimodality of the CC distributions. Nevertheless, in combination with visual inspection and additional comparison measures, its application here provides a useful discrepancy quantification.</p>
<p>A discrepancy can still be seen between the distributions of the coefficients of variation (LV). The distribution for the SpiNNaker model is shifted toward lower values, indicating a higher degree of regularity than that of the C model. This is confirmed by the consistently high effect size obtained for the five reference network states. Therefore, we conclude that there is still a disagreement in the executable models, and that model substantiation assessment has not been achieved at the end of Iteration II.</p>
</sec>
</sec>
<sec>
<title>3.4.3. Iteration III</title>
<p>The slight discrepancy in regularity observed in Iteration II allowed us to identify systematic differences in spike timing between the two models, hinting at an error in the numerical integration of the single neuron dynamics. Indeed, the visual comparison of the dynamics of individual neurons on SpiNNaker with a stand-alone C application that implements an identical fixed-step size symplectic Forward Euler ODE solver, revealed a small discrepancy in the sub-threshold dynamics, leading to a fixed delay in the spike timing. We identified an issue in the precise threshold detection algorithm as to be the cause.</p>
<sec>
<title>3.4.3.1. Substantiation</title>
<p>The result that we achieved after resolving the issue and repeating the SpiNNaker simulations is shown in the bottom row of Figure <xref ref-type="fig" rid="F7">7</xref>. We observe a close match of all three distributions, consistently across the five reference network states. The comparison is not perfect, with the distribution of firing rates showing the largest discrepancy with only a subtle shift toward higher firing rates for the SpiNNaker simulation. The small discrepancies between the two implementations are quantified by the effect size, and demonstrate that we have achieved a considerable reduction of the mismatch as a result of the model verification and substantiation process. All effect sizes are classified in the range of small to medium according to Cohen (<xref ref-type="bibr" rid="B7">1988</xref>). While further iterations of the model implementation in the verification and substantiation process (see section 4 for suggestions) may further improve the effect size scores, for our purposes, we find the remaining mismatch in the range of acceptable agreement. We therefore conclude that the executable models are in close agreement at the end of Iteration III.</p>
</sec>
</sec>
</sec>
</sec>
<sec sec-type="discussion" id="s4">
<title>4. Discussion</title>
<p>In this study, we introduced the concept of model verification and substantiation. In conjunction with the work presented in Gutzen et al. (<xref ref-type="bibr" rid="B14">2018</xref>), we demonstrated the application of a rigorous workflow assessing the level of agreement between the C implementation of the spiking network model proposed by Izhikevich (<xref ref-type="bibr" rid="B18">2006</xref>) and a reproduction of its underlying mathematical model on the SpiNNaker neuromorphic system. The choice of this network was motivated by its unorthodox implementation choices, examined in greater detail in Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>). These issues make it a particularly illustrative example for a reproduction on the SpiNNaker neuromorphic system and to demonstrate various aspects of source code and calculation verification.</p>
<p>After three iterations of the proposed workflow we concluded, on the basis of the substantiation assessment, that the executable models are in acceptable agreement. This conclusion is predicated on the domain of application and the expected level of agreement that we defined for three characteristic measures of the network activity. We emphasize that these definitions are set by the researcher: further iterations would be necessary, if, for example, we set a level of agreement requiring a spike-by-spike reproduction of the network activity data, as applied by Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>).</p>
<p>We speculate that the remaining mismatch in the statistical measures at the end of Iteration III can be explained by the reduced precision in the representation of the synaptic weights on the SpiNNaker system. This source of error is introduced by the conversion of the double precision weight matrix exported from the C model and converted into a fixed-point representation when imported into the simulation on the SpiNNaker system. The absolute values of the synaptic weights after conversion are always smaller than its double origin, thus, negative weights increase, contributing to larger firing rates on SpiNNaker (see Iteration III in Figure <xref ref-type="fig" rid="F7">7</xref>). Another potential source of error, in terms of calculation verification, is related to the grid based simulation paradigm, i.e., the simulation time-step, with which spike events are delivered. Both the original C model implementation and the SpiNNaker system use a simulation time-step of 1ms, which is larger than commonly used in spiking neural network simulations. Since both models are affected, the substantiation assessment can not give us further insight.</p>
<p>Although some of the verification tasks we applied, such as functional testing, are closely tied to model implementation details, the methodology presented in this work is transferable to similar modeling tasks, and could be further automated. The quantitative comparison of the statistical measures carried out in the substantiation was performed using the modular framework NetworkUnit<xref ref-type="fn" rid="fn0012"><sup>12</sup></xref> (NetworkUnit, <ext-link ext-link-type="uri" xlink:href="https://scicrunch.org/resolver/RRID:SCR_016543">RRID:SCR_016543</ext-link>), an open source Python module, presented in the companion study to this work (Gutzen et al., <xref ref-type="bibr" rid="B14">2018</xref>). NetworkUnit facilitates the formalized application of standardized statistical test metrics that enable the quantitative validation of network models on the level of the population dynamics.</p>
<p>The model substantiation methodology we propose has a number of advantages. Firstly, from the point of view of computational neuroscience, simulation results should be independent of the hardware, at least on the level of statistical equivalence. In practice, implementations may be sensitive to issues such as 32/64-bit architecture or compiler versions. Thus, the underlying hardware used to simulate a model should be considered part of the model implementation. Applying our proposed model substantiation methodology allows a researcher an opportunity to discover and correct such weaknesses in the implementation. Secondly, in the case of new types of hardware, such as neuromorphic systems, the methodology used here can help to build confidence and uncover shortcomings. In the particular example investigated here, we were able to demonstrate that the numerical precision is a critical issue for the model&#x00027;s accuracy. Integrating the model dynamics at 1ms resolution using 32-bit fixed-point arithmetic available on SpiNNaker (Furber et al., <xref ref-type="bibr" rid="B10">2013</xref>) does not adequately reproduce the dynamics of the corresponding C model with floating point arithmetic. We propose an alternative integration strategy that does adequately reproduce the dynamics, but the more general point is that this study demonstrates how the use of a rigorous model substantiation methodology can contribute to fundamental open questions in neuromorphic computing, such as the required level of precision in the representation of variables. Finally, in neuroscience, models often function as discovery tools and hypothesis generators in cases where experimental data, against which a model could be validated, does not exist. Performing a substantiation assessment is an option to accumulate circumstantial evidence for a model&#x00027;s plausibility and self-consistency, although it cannot reveal whether a model reflects reality.</p>
<p>Beyond our introduction of the term <italic>substantiation</italic>, we have adopted the ACM (Association for Computing Machinery, <xref ref-type="bibr" rid="B1">2016</xref>) terminology for reproducibility and replicability, as it seems most appropriate for our purposes. Alternative definitions exist, and terminology for research reproducibility is an ongoing theme of a controversial debate. The application of methodologies from model verification and validation (Thacker et al., <xref ref-type="bibr" rid="B33">2004</xref>) to the field of neural network modeling and simulation can be of great value, but we have suggested some adaptations that, in our view, fit the domain better. In particular, the terms <italic>mathematical model</italic> and <italic>executable model</italic>, that we propose instead of using the terms <italic>conceptual model</italic> and <italic>computerized model</italic>, are intended to yield better separation of the entities they describe, so that, for example, implementation details are not falsely understood to belong to the mathematical model. This is important, as the classic &#x0201C;one model&#x02014;one code&#x0201D; relationship does not typically apply to spiking neuron network models. Instead, they are implemented using general purpose neural simulation tools such as NEURON (Hines and Carnevale, <xref ref-type="bibr" rid="B15">1997</xref>), Brian (Goodman and Brette, <xref ref-type="bibr" rid="B12">2008</xref>), or NEST (Gewaltig and Diesmann, <xref ref-type="bibr" rid="B11">2007</xref>), which can run many different models. In addition, model simulation codes may be partially generated by other tools (Blundell et al., <xref ref-type="bibr" rid="B4">2018a</xref>). This scenario abstracts the implementation details away from the modeler, who can focus on analysis and modeling, and has the further advantage that individual components (such as neuron models) can be separately verified, and may subsequently serve as reliable references. We hope that our proposed terminology will help to pave the way to a more formalized approach for model verification and validation in the domain of neural network simulation.</p>
<p>In this study, we applied a number of standard methods from software engineering. This discipline is concerned with the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software (Bourque and Fairley, <xref ref-type="bibr" rid="B6">2014</xref>). Such methods include, for example, the application of clean code heuristics, test driven development, continuous integration and agile development methodologies, with the common goal of building quality into software. The formalized model verification and substantiation workflow that we presented in this work should be seen in this context.</p>
<p>We note that software engineering methods, whilst critical for developing high quality software, are underutilized in computational science in general, and in computational neuroscience in particular. For the network model investigated here, it is important to emphasize that the awareness of software engineering methodology was even less widespread at the time of publication, and so the yardsticks for source code quality applicable by today&#x00027;s standards should be considered in their temporal distance. Credit must in any case be given for the unusual step of publishing the source code, allowing scientific transparency and making studies such as the current one, and that of Pauli et al. (<xref ref-type="bibr" rid="B23">2018</xref>), possible. Following formalized processes, such as the one described here, further aids transparency and comprehensibility, and reduces the risk of incorrect conclusions. Moreover, simulation tools as well as neuromorphic hardware platforms can benefit from formalized and automated verification and validation procedures, such that their reliability can be inherited by user-developed models that are simulated using those tools and frameworks. Most importantly, such standardized procedures are designed not to place an additional burden on researchers, but rather to open up simple avenues for computational neuroscientists to increase the rigor and reproducibility of their models.</p>
<p>In conclusion, we argue that the methods of software engineering, including the model verification and substantiation workflow presented here, as well as verification and validation methodologies in general, need to become a mainstream aspect of computational neuroscience. Simulation and analysis tools, frameworks and collaboration platforms are part of the research infrastructure on which scientists base their work, and thus should meet high software development standards. The consideration of the application of software engineering methodologies to scientific software development should start at the funding level, such that an assessment of the software engineering strategy is part of the evaluation of grant applications. Likewise, journals should become more selective with their acceptance of studies, and reject those for which no demonstration has been made of an attempt to verify the calculations. The use of standard tools goes a significant way to fulfilling this criterion, to the extent that the standard tools themselves are developed with a rigorous testing and verification methodology.</p>
</sec>
<sec id="s5">
<title>Author contributions</title>
<p>GT devised the project, the main conceptual ideas and workflows. GT performed the verification tasks, the implementation of the models and their refinement, and performed the numerical simulations. RG and MD designed the statistical analysis which was then carried out by RG. RG and MD have written the passage on analysis of spiking activity and contributed to the terminology section. IB contributed expertise on numeric integration. AM gave scientific and theoretical guidance. GT, RG, MD, and AM established the terminology. All authors provided critical feedback and helped shape the research, analysis, and manuscript.</p>
<sec>
<title>Conflict of interest statement</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
</sec>
</body>
<back>
<ack>
<p>We are greatful to Dimitri Plotnikov, Sandra Diaz, Alexander Peyser, Jochen Martin Eppler, Sonja Gr&#x000FC;n, Michael von Papen, Pietro Quaglio, Robin Pauli, and Philipp Weidel for the fruitful discussions throughout the project. We would especially like to thank Fahad Kahlid for his comments on an earlier version of the manuscript, and to our colleagues in the Simulation Lab Neuroscience for continuous collaboration.</p>
</ack>
<sec sec-type="supplementary-material" id="s8">
<title>Supplementary material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/fninf.2018.00081/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/fninf.2018.00081/full#supplementary-material</ext-link></p>
<supplementary-material xlink:href="Data_Sheet_1.PDF" id="SM1" mimetype="application/pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="web"><person-group person-group-type="author"><collab>Association for Computing Machinery</collab></person-group> (<year>2016</year>). <source>Artifact Review and Badging</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="https://www.acm.org/publications/policies/artifact-review-badging">https://www.acm.org/publications/policies/artifact-review-badging</ext-link>(Accessed March 14, 2018).</citation></ref>
<ref id="B2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Barba</surname> <given-names>L. A.</given-names></name></person-group> (<year>2018</year>). <article-title>Terminologies for reproducible research</article-title>. <source>arXiv [Preprint]:1802.03311.</source></citation></ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Benureau</surname> <given-names>F. C. Y.</given-names></name> <name><surname>Rougier</surname> <given-names>N. P.</given-names></name></person-group> (<year>2017</year>). <article-title>Re-run, repeat, reproduce, reuse, replicate: transforming code into scientific contributions</article-title>. <source>Front. Neuroinform.</source> 1<volume>1</volume>:<fpage>69</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2017.00069</pub-id></citation></ref>
<ref id="B4">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Blundell</surname> <given-names>I.</given-names></name> <name><surname>Brette</surname> <given-names>R.</given-names></name> <name><surname>Cleland</surname> <given-names>T. A.</given-names></name> <name><surname>Close</surname> <given-names>T. G.</given-names></name> <name><surname>Coca</surname> <given-names>D.</given-names></name> <name><surname>Davison</surname> <given-names>A. P.</given-names></name> <etal/></person-group>. (<year>2018a</year>). <article-title>Code generation in computational neuroscience: a review of tools and techniques</article-title>. <source>Front. Neuroinform</source>. 1<volume>2</volume>:<fpage>68</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2018.00068</pub-id></citation></ref>
<ref id="B5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Blundell</surname> <given-names>I.</given-names></name> <name><surname>Plotnikov</surname> <given-names>D.</given-names></name> <name><surname>Eppler</surname> <given-names>J.</given-names></name> <name><surname>Morrison</surname> <given-names>A.</given-names></name></person-group> (<year>2018b</year>). <article-title>Automatically selecting a suitable integration scheme for systems of differential equations in neuron models</article-title>. <source>Front. Neuroinform</source>. 1<volume>2</volume>:<fpage>50</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2018.00050</pub-id></citation></ref>
<ref id="B6">
<citation citation-type="book"><person-group person-group-type="editor"><name><surname>Bourque</surname> <given-names>P.</given-names></name> <name><surname>Fairley</surname> <given-names>R. E.</given-names></name></person-group> (eds.). (<year>2014</year>). <source>SWEBOK: Guide to the Software Engineering Body of Knowledge</source>. <publisher-loc>Los Alamitos, CA</publisher-loc>: <publisher-name>IEEE Computer Society</publisher-name>.</citation>
</ref>
<ref id="B7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Cohen</surname> <given-names>J.</given-names></name></person-group> (<year>1988</year>). <source>Statistical Power Analysis for the Behavioral Sciences</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>Lawrence Erlbaum Associates</publisher-name>.</citation></ref>
<ref id="B8">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Dahmen</surname> <given-names>W.</given-names></name> <name><surname>Reusken</surname> <given-names>A.</given-names></name></person-group> (<year>2005</year>). <source>Numerik f&#x000FC;r Naturwissenschaftler</source>. <publisher-loc>Berlin; Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>.</citation></ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Davison</surname> <given-names>A.</given-names></name> <name><surname>Br&#x000FC;derle</surname> <given-names>D.</given-names></name> <name><surname>Eppler</surname> <given-names>J.</given-names></name> <name><surname>Kremkow</surname> <given-names>J.</given-names></name> <name><surname>Muller</surname> <given-names>E.</given-names></name> <name><surname>Pecevski</surname> <given-names>D.</given-names></name> <etal/></person-group>. (<year>2009</year>). <article-title>Pynn: a common interface for neuronal network simulators</article-title>. <source>Front. Neuroinform.</source> <volume>2</volume>:<fpage>11</fpage>. <pub-id pub-id-type="doi">10.3389/neuro.11.011.2008</pub-id><pub-id pub-id-type="pmid">19194529</pub-id></citation></ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Furber</surname> <given-names>S. B.</given-names></name> <name><surname>Lester</surname> <given-names>D. R.</given-names></name> <name><surname>Plana</surname> <given-names>L. A.</given-names></name> <name><surname>Garside</surname> <given-names>J. D.</given-names></name> <name><surname>Painkras</surname> <given-names>E.</given-names></name> <name><surname>Temple</surname> <given-names>S.</given-names></name> <etal/></person-group>. (<year>2013</year>). <article-title>Overview of the spinnaker system architecture</article-title>. <source>IEEE Trans. Comput.</source> <volume>62</volume>, <fpage>2454</fpage>&#x02013;<lpage>2467</lpage>. <pub-id pub-id-type="doi">10.1109/TC.2012.142</pub-id></citation></ref>
<ref id="B11">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gewaltig</surname> <given-names>M.-O.</given-names></name> <name><surname>Diesmann</surname> <given-names>M.</given-names></name></person-group> (<year>2007</year>). <article-title>NEST (NEural Simulation Tool)</article-title>. <source>Scholarpedia</source> <volume>2</volume>:<fpage>1430</fpage>. <pub-id pub-id-type="doi">10.4249/scholarpedia.1430</pub-id></citation></ref>
<ref id="B12">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Goodman</surname> <given-names>D.</given-names></name> <name><surname>Brette</surname> <given-names>R.</given-names></name></person-group> (<year>2008</year>). <article-title>Brian: a simulator for spiking neural networks in python</article-title>. <source>Front. Neuroinform.</source> <volume>2</volume>:<fpage>5</fpage>. <pub-id pub-id-type="doi">10.3389/neuro.11.005.2008</pub-id><pub-id pub-id-type="pmid">19115011</pub-id></citation></ref>
<ref id="B13">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Goodman</surname> <given-names>S. N.</given-names></name> <name><surname>Fanelli</surname> <given-names>D.</given-names></name> <name><surname>Ioannidis</surname> <given-names>J. P. A.</given-names></name></person-group> (<year>2016</year>). <article-title>What does research reproducibility mean?</article-title> <source>Sci. Transl. Med.</source> <volume>8</volume>:<fpage>341p</fpage>s12. <pub-id pub-id-type="doi">10.1126/scitranslmed.aaf5027</pub-id><pub-id pub-id-type="pmid">27252173</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gutzen</surname> <given-names>R.</given-names></name> <name><surname>von Papen</surname> <given-names>M.</given-names></name> <name><surname>Trensch</surname> <given-names>G.</given-names></name> <name><surname>Quaglio</surname> <given-names>P.</given-names></name> <name><surname>Gr&#x000FC;n</surname> <given-names>S.</given-names></name> <name><surname>Denker</surname> <given-names>M.</given-names></name></person-group> (<year>2018</year>). <article-title>Reproducible neural network simulations: statistical methods for model validation on the level of network activity data</article-title>. <source>Front. Neuroinform.</source> 1<volume>2</volume>:<fpage>90</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2018.00090</pub-id></citation></ref>
<ref id="B15">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hines</surname> <given-names>M. L.</given-names></name> <name><surname>Carnevale</surname> <given-names>N. T.</given-names></name></person-group> (<year>1997</year>). <article-title>The NEURON simulation environment</article-title>. <source>Neural Comput</source>. <volume>9</volume>, <fpage>1179</fpage>&#x02013;<lpage>1209</lpage>. <pub-id pub-id-type="doi">10.1162/neco.1997.9.6.1179</pub-id><pub-id pub-id-type="pmid">9248061</pub-id></citation></ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hopkins</surname> <given-names>M.</given-names></name> <name><surname>Furber</surname> <given-names>S.</given-names></name></person-group> (<year>2015</year>). <article-title>Accuracy and efficiency in fixed-point neural ode solvers</article-title>. <source>Neural Comput.</source> <volume>27</volume>, <fpage>2148</fpage>&#x02013;<lpage>2182</lpage>. <pub-id pub-id-type="doi">10.1162/NECO</pub-id>_a_00772<pub-id pub-id-type="pmid">26313605</pub-id></citation></ref>
<ref id="B17">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Izhikevich</surname> <given-names>E. M.</given-names></name></person-group> (<year>2003</year>). <article-title>Simple model of spiking neurons</article-title>. <source>IEEE Trans. Neural Netw.</source> <volume>14</volume>, <fpage>1569</fpage>&#x02013;<lpage>1572</lpage>. <pub-id pub-id-type="doi">10.1109/TNN.2003.820440</pub-id><pub-id pub-id-type="pmid">18244602</pub-id></citation></ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Izhikevich</surname> <given-names>E. M.</given-names></name></person-group> (<year>2006</year>). <article-title>Polychronization: computation with spikes</article-title>. <source>Neural Comput.</source> <volume>18</volume>, <fpage>245</fpage>&#x02013;<lpage>282</lpage>. <pub-id pub-id-type="doi">10.1162/089976606775093882</pub-id><pub-id pub-id-type="pmid">16378515</pub-id></citation></ref>
<ref id="B19">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Lambert</surname> <given-names>J. D.</given-names></name></person-group> (<year>1992</year>). <source>Numerical Methods for Ordinary Differential Systems</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>Wiley</publisher-name>.</citation></ref>
<ref id="B20">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Martin</surname> <given-names>R. C.</given-names></name> <name><surname>Coplien</surname> <given-names>J. O.</given-names></name></person-group> (<year>2009</year>). <source>Clean Code: A Handbook of Agile Software Craftsmanship</source>. <publisher-loc>Upper Saddle River, NJ</publisher-loc>: <publisher-name>Prentice Hall</publisher-name>.</citation></ref>
<ref id="B21">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Martis</surname> <given-names>M. S.</given-names></name></person-group> (<year>2006</year>). <article-title>Validation of simulation based models: a theoretical outlook</article-title>. <source>Electron. J. Bus. Res. Methods</source> <volume>4</volume>, <fpage>39</fpage>&#x02013;<lpage>46</lpage>.</citation></ref>
<ref id="B22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Patil</surname> <given-names>P.</given-names></name> <name><surname>Peng</surname> <given-names>R. D.</given-names></name> <name><surname>Leek</surname> <given-names>J.</given-names></name></person-group> (<year>2016</year>). <article-title>A statistical definition for reproducibility and replicability</article-title>. <source>bioRxiv [Preprint]</source>. <pub-id pub-id-type="doi">10.1101/066803</pub-id></citation></ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Pauli</surname> <given-names>R.</given-names></name> <name><surname>Weidel</surname> <given-names>P.</given-names></name> <name><surname>Kunkel</surname> <given-names>S.</given-names></name> <name><surname>Morrison</surname> <given-names>A.</given-names></name></person-group> (<year>2018</year>). <article-title>Reproducing polychronization: a guide to maximizing the reproducibility of spiking network models</article-title>. <source>Front. Neuroinform</source>. 1<volume>2</volume>:<fpage>46</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2018.00046</pub-id></citation></ref>
<ref id="B24">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Plesser</surname> <given-names>H. E.</given-names></name></person-group> (<year>2018</year>). <article-title>Reproducibility vs. replicability: a brief history of a confused terminology</article-title>. <source>Front. Neuroinform</source>. 1<volume>1</volume>:<fpage>76</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2017.00076</pub-id></citation></ref>
<ref id="B25">
<citation citation-type="web"><person-group person-group-type="author"><name><surname>Rowley</surname> <given-names>A. G. D.</given-names></name> <name><surname>Stokes</surname> <given-names>A. B.</given-names></name> <name><surname>Gait</surname> <given-names>A. D.</given-names></name></person-group> (<year>2017a</year>). <source>Spinnaker New Model Template Lab Manual. Manchester</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="https://github.com/SpiNNakerManchester/SpiNNakerManchester.github.io/blob/master/spynnaker/4.0.0/NewNeuronModels-LabManual.pdf">https://github.com/</ext-link> <ext-link ext-link-type="uri" xlink:href="https://github.com/SpiNNakerManchester/SpiNNakerManchester.github.io/blob/master/spynnaker/4.0.0/NewNeuronModels-LabManual.pdf">SpiNNakerManchester/SpiNNakerManchester.github.io/blob/master/spynnak</ext-link> <ext-link ext-link-type="uri" xlink:href="https://github.com/SpiNNakerManchester/SpiNNakerManchester.github.io/blob/master/spynnaker/4.0.0/NewNeuronModels-LabManual.pdf">er/4.0.0/NewNeuronModels-LabManual.pdf</ext-link> (Accessed March 14, 2018).</citation></ref>
<ref id="B26">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rowley</surname> <given-names>A. G. D.</given-names></name> <name><surname>Stokes</surname> <given-names>A. B.</given-names></name> <name><surname>Knight</surname> <given-names>J.</given-names></name> <name><surname>Lester</surname> <given-names>D. R.</given-names></name> <name><surname>Hopkins</surname> <given-names>M.</given-names></name> <name><surname>Davies</surname> <given-names>S.</given-names></name> <etal/></person-group>. (<year>2017b</year>). <source>PyNN on SpiNNaker Software 4.0.0.</source> <pub-id pub-id-type="doi">10.5281/zenodo.1255864</pub-id></citation></ref>
<ref id="B27">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schlesinger</surname> <given-names>S.</given-names></name> <name><surname>Crosbie</surname> <given-names>R. E.</given-names></name> <name><surname>Gagn</surname> <given-names>R. E.</given-names></name> <name><surname>Innes</surname> <given-names>G. S.</given-names></name> <name><surname>Lalwani</surname> <given-names>C.</given-names></name> <name><surname>Loch</surname> <given-names>J.</given-names></name> <etal/></person-group>. (<year>1979</year>). <article-title>Terminology for model credibility</article-title>. <source>Simulation</source> <volume>32</volume>, <fpage>103</fpage>&#x02013;<lpage>104</lpage>.</citation></ref>
<ref id="B28">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shinomoto</surname> <given-names>S.</given-names></name> <name><surname>Shima</surname> <given-names>K.</given-names></name> <name><surname>Tanji</surname> <given-names>J.</given-names></name></person-group> (<year>2003</year>). <article-title>Differences in spiking patterns among cortical neurons</article-title>. <source>Neural Comput.</source> <volume>15</volume>, <fpage>2823</fpage>&#x02013;<lpage>2842</lpage>. <pub-id pub-id-type="doi">10.1162/089976603322518759</pub-id><pub-id pub-id-type="pmid">14629869</pub-id></citation></ref>
<ref id="B29">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Sommerville</surname> <given-names>I.</given-names></name></person-group> (<year>2015</year>). <source>Software Engineering, 10th Edn</source>. <publisher-name>Pearson</publisher-name> Education.</citation></ref>
<ref id="B30">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Strehmel</surname> <given-names>K.</given-names></name> <name><surname>Weiner</surname> <given-names>R.</given-names></name></person-group> (<year>1995</year>). <source>Numerik gew&#x000F6;hnlicher Differentialgleichungen</source>. Wiesbaden: B.G. Teubner.</citation></ref>
<ref id="B31">
<citation citation-type="web"><person-group person-group-type="author"><name><surname>Temple</surname> <given-names>S.</given-names></name></person-group> (<year>2011a</year>). <source>AppNote 1 - SpiNN-3 Development Board</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="http://spinnakermanchester.github.io/docs/spinn-app-1.pdf">http://spinnakermanchester.github.io/docs/spinn-app-1.pdf</ext-link> (Accessed March 14, 2018).</citation></ref>
<ref id="B32">
<citation citation-type="web"><person-group person-group-type="author"><name><surname>Temple</surname> <given-names>S.</given-names></name></person-group> (<year>2011b</year>). <source>AppNote 4 - SpiNNaker Datagram Protocol (SDP) Specification</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="http://spinnakermanchester.github.io/docs/spinn-app-4.pdf">http://spinnakermanchester.github.io/docs/spinn-app-4.pdf</ext-link> (Accessed March 14, 2018).</citation></ref>
<ref id="B33">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Thacker</surname> <given-names>B.</given-names></name> <name><surname>Doebling</surname> <given-names>S.</given-names></name> <name><surname>Hemez</surname> <given-names>F.</given-names></name> <name><surname>Anderson</surname> <given-names>M.</given-names></name> <name><surname>Pepin</surname> <given-names>J.</given-names></name> <name><surname>Rodriguez</surname> <given-names>E.</given-names></name></person-group> (<year>2004</year>). <source>Concepts of Model Verification and Validation.</source> Los Alamos National Laboratory.</citation></ref>
</ref-list>
<fn-group>
<fn id="fn0001"><p><sup>1</sup>In analog neuromorphic systems the outcome is not only determined by the initial conditions. Chip fabrication tolerances and thermal noise add a stochastic component.</p></fn>
<fn id="fn0002"><p><sup>2</sup><ext-link ext-link-type="uri" xlink:href="https://www.izhikevich.org/publications/spnet.htm">https://www.izhikevich.org/publications/spnet.htm</ext-link></p></fn>
<fn id="fn0003"><p><sup>3</sup><ext-link ext-link-type="uri" xlink:href="http://apt.cs.manchester.ac.uk/projects/SpiNNaker/project/Access/">http://apt.cs.manchester.ac.uk/projects/SpiNNaker/project/Access/</ext-link></p></fn>
<fn id="fn0004"><p><sup>4</sup>PyNN is a common interface for neural network simulators (Davison et al., <xref ref-type="bibr" rid="B9">2009</xref>).</p></fn>
<fn id="fn0005"><p><sup>5</sup><ext-link ext-link-type="uri" xlink:href="https://github.com/SpiNNakerManchester/sPyNNaker8NewModelTemplate">https://github.com/SpiNNakerManchester/sPyNNaker8NewModelTemplate</ext-link></p></fn>
<fn id="fn0006"><p><sup>6</sup>This refers to the simulated time and not to the run time of the simulation.</p></fn>
<fn id="fn0007"><p><sup>7</sup><ext-link ext-link-type="uri" xlink:href="http://neuralensemble.org/elephant">http://neuralensemble.org/elephant</ext-link></p></fn>
<fn id="fn0008"><p><sup>8</sup><ext-link ext-link-type="uri" xlink:href="https://github.com/gtrensch/RigorousNeuralNetworkSimulations">https://github.com/gtrensch/RigorousNeuralNetworkSimulations</ext-link></p></fn>
<fn id="fn0009"><p><sup>9</sup><ext-link ext-link-type="uri" xlink:href="https://web.gin.g-node.org/INM-6/network_validation">https://web.gin.g-node.org/INM-6/network_validation</ext-link></p></fn>
<fn id="fn0010"><p><sup>10</sup>Refactoring&#x02014;a software engineering method from the area of software maintenance&#x02014;is source code transformation which reorganizes a program without changing its behavior. It improves the software structure and the readability, and so avoids the structural deterioration that naturally occurs when software is changed Sommerville, <xref ref-type="bibr" rid="B29">2015</xref>.</p></fn>
<fn id="fn0011"><p><sup>11</sup><ext-link ext-link-type="uri" xlink:href="https://www.gnu.org/software/gsl/">https://www.gnu.org/software/gsl/</ext-link></p></fn>
<fn id="fn0012"><p><sup>12</sup><ext-link ext-link-type="uri" xlink:href="https://github.com/INM-6/NetworkUnit">https://github.com/INM-6/NetworkUnit</ext-link></p></fn>
</fn-group>
<fn-group>
<fn fn-type="financial-disclosure"><p><bold>Funding.</bold> This work was supported by the Helmholtz Association through the Helmholtz Portfolio Theme Supercomputing and Modeling for the Human Brain and the Initiative and Networking Fund, also by the European Union&#x00027;s Horizon 2020 Framework Program for Research and Innovation under Grant Agreement No. 720270 (Human Brain Project SGA1) and 785907 (Human Brain Project SGA2).</p></fn>
</fn-group>
</back>
</article>