OSCR

Hierarchical feature binding in a spiking neural network model of the primate ventral visual pathway.

Code ↔ Paper

18 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 18 matches
  1. [1] § Materials and methods › Preprocessing visual stimuli by Gabor filtering ↔ src/hsnn/core/encoders/gabor.py, lines 13–65 · score 0.81 · spatial bandwidth, aspect ratio, Gabor filters, octaves, kernel, wavelength
  2. [2] § Results › Feature selectivity through network self-organisation › Feature selectivity is resilient to partial visual occlusion. ↔ scripts/analysis/inference_occlusion.py, lines 1–44 · score 0.72 · sliding curtain, L0 Poisson, progressively masked, n4p2, occlusion, width
  3. [3] § Results › Feature selectivity through network self-organisation › Single neuron information analysis demonstrates increased feature selectivity. ↔ notebooks/figures/plot_fig9.ipynb, lines 1–115 · score 0.69 · single neuron information, concave selective neurons, boundary contour elements, N3P2, N4P2, network training
  4. [4] § Results › Emergence of polychronization supports hierarchical feature binding › Reuse of feature and binding neurons preserves selective polychronous patterns. ↔ src/hsnn/pipeline/reuse/ambiguity.py, lines 1–57 · score 0.68 · bound feature, circuit role, anchor layer, binding neuron, locked, mismatched
  5. [5] § Results › Emergence of polychronization supports hierarchical feature binding › Reuse of feature and binding neurons preserves selective polychronous patterns. ↔ src/hsnn/pipeline/reuse/completeness.py, lines 1–60 · score 0.66 · fixed Poisson, bound feature, anchor layer, distinct neuron, reuse, bits
  6. [6] § Results › Feature selectivity through network self-organisation › Resilience of the network to input noise preserves feature selectivity. ↔ notebooks/figures/plot_fig11.ipynb, lines 1–119 · score 0.65 · noise amplitudes, increasing noise, network architecture, convex boundary element, N4P2, trained networks
  7. [7] § Results › Emergence of polychronization supports hierarchical feature binding › Reuse of feature and binding neurons preserves selective polychronous patterns. ↔ notebooks/figures/plot_fig19.ipynb, lines 97–160 · score 0.63 · role reuse factor, distinct neuron, excitatory population, 2–4, S8, anchored
  8. [8] § Results › Emergence of polychronization supports hierarchical feature binding › Reuse of feature and binding neurons preserves selective polychronous patterns. ↔ src/hsnn/pipeline/reuse/ambiguity.py, lines 1–57 · score 0.62 · bound feature, binding neuron, locked, mismatched, uninformative, reusing
  9. [9] § Results › Emergence of polychronization supports hierarchical feature binding › Binding circuits cover the feature repertoire at moderate selectivity. ↔ src/hsnn/pipeline/reuse/completeness.py, lines 1–60 · score 0.61 · binding circuit, distinct neurons, thinning, collapsed, Coverage, labelled
  10. [10] § Results › Feature selectivity through network self-organisation › Single neuron information analysis demonstrates increased feature selectivity. ↔ notebooks/figures/plot_fig11.ipynb, lines 1–119 · score 0.61 · single neuron information, convex selective, N3P2, N4P2, network training, selective neurons
  11. [11] § Results › Emergence of polychronization supports hierarchical feature binding › Identifying PNGs across different network architectures. ↔ notebooks/supplementary/plot_S5.ipynb, lines 1–53 · score 0.58 · eligibility criteria, detection pipeline, detected triplets, S5, surrogate, eligible
  12. [12] § Results › Feature selectivity through network self-organisation › Feature selectivity is resilient to partial visual occlusion. ↔ src/hsnn/core/encoders/gabor.py, lines 122–178 · score 0.56 · sliding curtain, mask width, Gabor, occlusion, filter
  13. [13] § Results › Emergence of polychronization supports hierarchical feature binding › PNG onset timing and precision correlate with feature selectivity. ↔ notebooks/figures/plot_fig20.ipynb, lines 1–48 · score 0.56 · Empirical distribution, convex boundary selectivity, standard deviation, F1 score, dispersion, N3P2
  14. [14] § Results › Emergence of polychronization supports hierarchical feature binding › Identifying PNGs across different network architectures. ↔ notebooks/figures/plot_fig14B.ipynb, lines 1–109 · score 0.54 · standard deviation, F1 scores, neuron HFB circuits, N3P2, N4P2, boundary elements
  15. [15] § Results › Feature selectivity through network self-organisation › Single neuron information analysis demonstrates increased feature selectivity. ↔ notebooks/figures/plot_fig9.ipynb, lines 1–115 · score 0.53 · network architectures, N3P2, N4P2, convex boundary, information conveyed, location
  16. [16] § Materials and methods › Performance measures › Polychronous neuronal group detection. ↔ src/hsnn/analysis/png/detection.py, lines 138–186 · score 0.52 · neuron HFB circuit, synaptic weight, refined, detection, SPADE, connected
  17. [17] § Results › Emergence of polychronization supports hierarchical feature binding › PNG selectivity for convex boundary elements. ↔ scripts/figures/compute_png_metrics.py, lines 1–38 · score 0.52 · F1 score, boundary elements, n3p2, n4p2, classifying, concave
  18. [18] § Results › Emergence of polychronization supports hierarchical feature binding › PNG selectivity for convex boundary elements. ↔ notebooks/figures/plot_fig14B.ipynb, lines 1–109 · score 0.51 · F1 scores, neuron HFB circuits, N3P2, N4P2, S6, network architectures

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 178 lines · 5.8 KB · AGPL-3.0 · 2 matches

  1. import itertools
  2. from typing import List, Sequence
  3. import cv2
  4. import numpy as np
  5. import numpy.typing as npt
  6. from ._base import BaseEncoder
  7. __all__ = ["GaborEncoder", "OccludableGaborEncoder"]
  8. def get_filters(
  9. phase_offsets: Sequence,
  10. orientations: Sequence,
  11. wavelengths: Sequence,
  12. kernel_size: int,
  13. spatial_wavelength: float = 1.0,
  14. aspect_ratio: float = 0.5,
  15. is_normalised: bool = True,
  16. ) -> List[np.ndarray]:
  17. """Gets Gabor filters for image transforms.
  18. Args:
  19. phase_offsets (Sequence): Phase offset of sinusoid in radians (psi).
  20. orientations (Sequence): Filter orientation in radians (theta).
  21. wavelengths (Sequence): Sinusoid wavelengths in px / cycle (lambd).
  22. kernel_size (int): Kernel size (ksize).
  23. spatial_wavelength (float, optional): Spatial bandwidth in octaves (b). Defaults to 1.0.
  24. aspect_ratio (float, optional): Filter aspect ratio (gamma). Defaults to 0.5.
  25. is_normalised (bool, optional): Normalises kernel.
  26. Returns:
  27. List[ndarray]: List of Gabor filters.
  28. """
  29. def create_filter(phase_offset, orientation, wavelength):
  30. sigma = (
  31. wavelength
  32. / np.pi
  33. * np.sqrt(np.log(2) / 2)
  34. * (2**spatial_wavelength + 1)
  35. / (2**spatial_wavelength - 1)
  36. )
  37. filter_kernel = cv2.getGaborKernel(
  38. (kernel_size, kernel_size),
  39. sigma,
  40. orientation,
  41. wavelength,
  42. aspect_ratio,
  43. phase_offset,
  44. ktype=cv2.CV_32F,
  45. )
  46. filter_kernel -= np.mean(filter_kernel) # type: ignore
  47. if is_normalised:
  48. filter_kernel /= 1.0 * np.sqrt(np.sum(filter_kernel**2))
  49. return filter_kernel
  50. filters = [
  51. create_filter(phase_offset, orientation, wavelength)
  52. for phase_offset, orientation, wavelength in itertools.product(
  53. phase_offsets, orientations, wavelengths
  54. )
  55. ]
  56. return filters
  57. class GaborEncoder(BaseEncoder):
  58. """Encoder to transform an input image into a driving stimulus using a set of Gabor filters.
  59. Attributes:
  60. filters (List[np.ndarray]): List of filters to be applied to the image.
  61. scale_factor (float): Scaling factor for activations.
  62. renormalise (bool, optional): Whether to renormalise the filtered images. Defaults to False.
  63. min_value (float, optional): Minimum value for the filtered images. Defaults to 0.
  64. """
  65. def __init__(
  66. self,
  67. phase_offsets: Sequence,
  68. orientations: Sequence,
  69. wavelengths: Sequence,
  70. kernel_size: int,
  71. scale_factor: float,
  72. renormalise: bool = False,
  73. min_value: float = 0,
  74. **filter_kwargs,
  75. ) -> None:
  76. self.filters = get_filters(
  77. phase_offsets, orientations, wavelengths, kernel_size, **filter_kwargs
  78. )
  79. self.scale_factor = scale_factor
  80. self.renormalise = renormalise
  81. self.min_value = min_value
  82. def transform(self, data: np.ndarray) -> npt.NDArray[np.float_]:
  83. filter_outputs = np.zeros([len(self.filters), *data.shape])
  84. stdev = np.std(data)
  85. if stdev > 0:
  86. image_ = data / stdev
  87. for idx, filter in enumerate(self.filters):
  88. filter_output = cv2.filter2D(image_, cv2.CV_64F, filter) # type: ignore[attr-defined]
  89. filter_outputs[idx, ...] = filter_output
  90. filter_outputs[filter_outputs < self.min_value] = 0
  91. if self.renormalise:
  92. filter_outputs = np.array(
  93. [
  94. filter_output / np.linalg.norm(filter_output)
  95. if np.any(filter_output)
  96. else filter_output
  97. for filter_output in filter_outputs
  98. ]
  99. )
  100. stdev = np.std(filter_outputs)
  101. if stdev > 0:
  102. filter_outputs = filter_outputs / np.std(filter_outputs)
  103. return self.scale_factor * filter_outputs.flatten()
  104. class OccludableGaborEncoder(GaborEncoder):
  105. """Extension of GaborEncoder that allows for post-process masking
  106. of the rate map to simulate occlusion.
  107. """
  108. def __init__(
  109. self,
  110. phase_offsets: Sequence,
  111. orientations: Sequence,
  112. wavelengths: Sequence,
  113. kernel_size: int,
  114. scale_factor: float,
  115. renormalise: bool = False,
  116. min_value: float = 0,
  117. mask_width: int = 0,
  118. **filter_kwargs,
  119. ) -> None:
  120. super().__init__(
  121. phase_offsets,
  122. orientations,
  123. wavelengths,
  124. kernel_size,
  125. scale_factor,
  126. renormalise=renormalise,
  127. min_value=min_value,
  128. **filter_kwargs,
  129. )
  130. self._mask_x_end: int = mask_width
  131. def set_occlusion_curtain(self, width_pixels: int) -> None:
  132. """Sets the width of the occlusion curtain starting from x=0."""
  133. self._mask_x_end = width_pixels
  134. def transform(self, data: np.ndarray) -> npt.NDArray[np.float_]:
  135. flat_output = super().transform(data)
  136. if self._mask_x_end <= 0:
  137. return flat_output
  138. # Reshape to restore spatial awareness
  139. # Shape is (N_filters, Height, Width)
  140. n_filters = len(self.filters)
  141. h, w = data.shape
  142. # Safety check to ensure reshape is valid
  143. if flat_output.size != (n_filters * h * w):
  144. raise ValueError(
  145. f"Output size {flat_output.size} does not match expected dims ({n_filters}, {h}, {w})"
  146. )
  147. shaped_output = flat_output.reshape((n_filters, h, w))
  148. # Apply the "Sliding Curtain" Mask
  149. # We zero out everything from x=0 to x=mask_end across all filters/rows
  150. shaped_output[:, :, : self._mask_x_end] = 0.0
  151. return shaped_output.flatten()

gabor.py at commit d8bed23, under AGPL-3.0 · at the source

Overview

Authors: Brian Gardner1, Patrick T. McCarthy2, Joseph Chrol-Cannon3, Dan F. M. Goodman4, Simon R. Schultz5, Giovanni Lo Iacono1,6, Simon M. Stringer7
  1. Department of Comparative Biomedical Sciences, School of Veterinary Medicine, University of Surrey, Guildford, United Kingdom
  2. Centre for Neural Circuits and Behaviour, University of Oxford, Oxford, United Kingdom
  3. Independent Researcher, Guildford, United Kingdom
  4. Department of Electrical and Electronic Engineering, Imperial College London, South Kensington, London, United Kingdom
  5. Department of Bioengineering, Imperial College London, South Kensington, London, United Kingdom
  6. The Surrey Institute for People-Centred AI, University of Surrey, Guildford, United Kingdom
  7. Centre for Theoretical Neuroscience and Artificial Intelligence, Department of Experimental Psychology, University of Oxford, Oxford, United Kingdom
Institutions: University of Surrey (United Kingdom); University of Oxford (United Kingdom); Imperial College London (United Kingdom)
Journal: PLoS computational biology, volume 22, issue 9, article e1014752
Dates: received 14 July 2025; accepted 23 August 2026; published online 16 September 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1371/journal.pcbi.1014752 · PMID 42748186 · PMCID PMC13581216 · OpenAlex W7213415065
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: computational modeling (no new data) (modality), human (organism)
Methods: Single-unit activity, calcium imaging
MeSH: Action Potentials*, Models, Neurological*, Nerve Net*, Visual Pathways*, Animals, Computational Biology, Computer Simulation, Humans, Neurons, Primates, Visual Cortex (* major topic)
Journal subjects: Biology and Life Sciences, Cell Biology, Cellular Types, Animal Cells, Neurons, Neuroscience, Cellular Neuroscience, Computer and Information Sciences, Neural Networks, Cognitive Science, Cognitive Psychology, Perception, Sensory Perception, Vision, Psychology, Social Sciences, Physiology, Electrophysiology, Membrane Potential, Action Potentials, Neurophysiology, Computational Biology, Computational Neuroscience, Single Neuron Function, Afferent Neurons, Neuronal Tuning, Anatomy, Nervous System, Synapses, Medicine and Health Sciences
Topic: Neural dynamics and brain function (Cognitive Neuroscience, Neuroscience), according to OpenAlex
Citations: not cited yet (Europe PMC); 65 references in the paper

Abstract

Feature binding - how the brain encodes which features are part of other features to form representations of the coherent objects we perceive - remains an unsolved problem in neuroscience. Despite progress towards a solution, major theories either lack detailed explanations at the neuronal level or rely on biologically unrealistic simplifications, and none adequately account for the representation of hierarchical information, which is crucial to our perception of the world. To address this, a solution termed binding by polychrony has been proposed to explain how hierarchical feature relationships may be encoded at the neuronal level in a biologically realistic system. This theory relies on a phenomenon known as polychronization, where groups of neurons fire in precisely coordinated, time-locked sequences, leading to the emergence of regularly repeating spatiotemporal patterns that might encode these relationships. In this study, we explore binding by polychrony through simulations of a spiking neural network that closely aligns with the structural organisation of the primate ventral visual pathway, incorporating bottom-up, top-down, and lateral synaptic connections. By exposing the network to collections of related 2D object shapes from ecologically realistic datasets and applying spike-timing-dependent plasticity, the network self-organises such that individual neurons respond selectively to specific shape features. Furthermore, the network exhibits polychronization, giving rise to repeating spatiotemporal patterns, some of which form circuits that encode hierarchical feature relationships. Notably, these circuits are robust, even with the randomised, Poisson-distributed spike timings that represent the visual stimuli in the input layer. These results provide evidence for binding by polychrony as a feasible solution to the feature binding problem, and characterise the mechanism by which it may function. This mechanism can guide experimentalists in identifying such circuits in vivo, and could also be utilised in computer vision systems to capture more information and improve robustness to adversarial inputs.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repository

Its files are read in the Code ↔ Paper reader above, with 18 matches between paragraphs and lines of code.

BCGardner/feature_binding

License: AGPL-3.0
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: d8bed23b7c1f67cc4e333de5c5647173a2b53eb3, 24 June 2026
Languages: Python (161), Jupyter (24)
Size: 1,372 files, 185 scripts
Software Heritage: not archived
Found in: “Data Availability”
Holds: README, license file, environment (environment.yaml, requirements-lock.txt, requirements.txt, setup.py), tests, 24 notebooks
Not found: CITATION.cff, continuous integration, documentation
Tools: NumPy (110 files), pandas (71 files), xarray (44 files), Matplotlib (29 files), Brian 2 (15 files), SciPy (7 files), OpenCV (3 files), Elephant (1 file), Neo (1 file), statsmodels (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
187 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 185 scripts, each with its path and the digest of its content;
  • 18 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Data Availability

The source code and data used to produce the results and analyses presented in this manuscript are available at https://github.com/BCGardner/feature_binding.

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 11 MeSH terms, 1 funder, 56 references.

Cite

This paper

Gardner, B., McCarthy, P. T., Chrol-Cannon, J., Goodman, D. F. M., Schultz, S. R., Lo Iacono, G., & Stringer, S. M. (2026). Hierarchical feature binding in a spiking neural network model of the primate ventral visual pathway. PLoS computational biology, 22(9), e1014752. https://doi.org/10.1371/journal.pcbi.1014752

BibTeX

@article{gardner2026hierarchical,
author = {Gardner, Brian and McCarthy, Patrick T. and Chrol-Cannon, Joseph and Goodman, Dan F. M. and Schultz, Simon R. and Lo Iacono, Giovanni and Stringer, Simon M.},
title = {{Hierarchical feature binding in a spiking neural network model of the primate ventral visual pathway}},
journal = {PLoS computational biology},
year = {2026},
month = sep,
volume = {22},
number = {9},
pages = {e1014752},
publisher = {PLOS},
issn = {1553-734X},
doi = {10.1371/journal.pcbi.1014752},
url = {https://doi.org/10.1371/journal.pcbi.1014752},
pmid = {42748186},
pmcid = {PMC13581216}
}

RIS

TY - JOUR
AU - Gardner, Brian
AU - McCarthy, Patrick T.
AU - Chrol-Cannon, Joseph
AU - Goodman, Dan F. M.
AU - Schultz, Simon R.
AU - Lo Iacono, Giovanni
AU - Stringer, Simon M.
TI - Hierarchical feature binding in a spiking neural network model of the primate ventral visual pathway
T2 - PLoS computational biology
J2 - PLoS Comput Biol
PY - 2026
DA - 2026/09/16
VL - 22
IS - 9
SP - e1014752
SN - 1553-734X
PB - PLOS
DO - 10.1371/journal.pcbi.1014752
UR - https://doi.org/10.1371/journal.pcbi.1014752
LA - en
ER -

CSL-JSON

{
"id": "10.1371/journal.pcbi.1014752",
"type": "article-journal",
"title": "Hierarchical feature binding in a spiking neural network model of the primate ventral visual pathway",
"container-title": "PLoS computational biology",
"author": [
{
"family": "Gardner",
"given": "Brian"
},
{
"family": "McCarthy",
"given": "Patrick T."
},
{
"family": "Chrol-Cannon",
"given": "Joseph"
},
{
"family": "Goodman",
"given": "Dan F. M."
},
{
"family": "Schultz",
"given": "Simon R."
},
{
"family": "Lo Iacono",
"given": "Giovanni"
},
{
"family": "Stringer",
"given": "Simon M."
}
],
"container-title-short": "PLoS Comput Biol",
"volume": "22",
"issue": "9",
"page": "e1014752",
"DOI": "10.1371/journal.pcbi.1014752",
"PMID": "42748186",
"PMCID": "PMC13581216",
"ISSN": "1553-734X",
"publisher": "PLOS",
"URL": "https://doi.org/10.1371/journal.pcbi.1014752",
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
16
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1016/j.isci.2026.115488 [code]
An integrated &lt;i&gt;i&lt;/i&gt; &lt;i&gt;n vitro&lt;/i&gt; platform and biophysical modeling approach for studying synaptic transmission in isolated neuronal pairs.
Journal: iScience
In common: Elephant, Neo, OpenCV, 5 other tools, 3 references
[2] doi:10.1007/s00422-026-01048-2 [code]
A quality measure for repeating multiple-unit spike patterns.
Journal: Biological cybernetics
In common: Elephant, Neo, Matplotlib, 1 other tool, 5 references
[3] doi:10.1371/journal.pcbi.1014730 [code]
A unified model of short- and long-term plasticity: Effects on network connectivity and information capacity.
Journal: PLoS computational biology
In common: Elephant, Neo, pandas, 3 other tools, computational modeling (no new data), 3 references
[4] doi: [code]
Naturalistic behavior and self-generated neural activity predictive of self-correction
Journal: bioRxiv : the preprint server for biology
In common: Elephant, Neo, xarray, 6 other tools
[5] doi:10.1038/s41598-026-53152-9 [code]
Layer-specific feature preference in a trained AlexNet model revealed by stylized image analysis.
Journal: Scientific reports
In common: OpenCV, pandas, Matplotlib, 1 other tool, 4 references
[6] doi:10.1002/hipo.70089 [code]
The Role of Plasticity in Replay: Stability Through Anti-Hebbian Rules.
Journal: Hippocampus
In common: Brian 2, OpenCV, pandas, 3 other tools, 2 references
[7] doi:10.1038/s41467-026-76098-y [code]
A single computational objective can produce specialization of streams in visual cortex.
Journal: Nature communications
In common: xarray, statsmodels, pandas, 3 other tools, 2 references
[8] doi:10.1038/s41467-026-75705-2 [code]
Redundant prefrontal hemispheres adapt storage strategy to working memory demands.
Journal: Nature communications
In common: Brian 2, statsmodels, pandas, 3 other tools, computational modeling (no new data), 1 reference
[9] doi:10.1162/imag.a.1207 [code]
Investigating the temporal dynamics and modeling of mid-level feature representations in humans.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: OpenCV, statsmodels, pandas, 3 other tools, 2 references
[10] doi:10.1371/journal.pcbi.1014283 [code]
Spatial richness of neural magnetic fields.
Journal: PLoS computational biology
In common: Elephant, Neo, SciPy, 2 other tools, computational modeling (no new data)

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.