16 #include <unordered_map>
19 #include <bbp/sonata/edges.h>
20 #include <bbp/sonata/nodes.h>
21 #include <bbp/sonata/optional.hpp>
24 #include "optional.hpp"
25 #include "variant.hpp"
33 struct CommonPopulationProperties {
76 std::string spatialSegmentIndexDir;
109 std::string spatialSynapseIndexDir;
120 class SONATA_API CircuitConfig
123 enum class ConfigStatus {
147 CircuitConfig(
const std::string& contents,
const std::string& basePath);
166 ConfigStatus getCircuitConfigStatus()
const;
171 const std::string& getNodeSetsPath()
const;
176 std::set<std::string> listNodePopulations()
const;
189 std::set<std::string> listEdgePopulations()
const;
222 const std::string& getExpandedJSON()
const;
226 std::string morphologiesDir;
227 std::unordered_map<std::string, std::string> alternateMorphologiesDir;
228 std::string biophysicalNeuronModelsDir;
241 std::string _expandedJSON;
244 ConfigStatus _status = ConfigStatus::complete;
247 std::string _nodeSetsFile;
250 std::unordered_map<std::string, NodePopulationProperties> _nodePopulationProperties;
253 std::unordered_map<std::string, EdgePopulationProperties> _edgePopulationProperties;
259 class SONATA_API SimulationConfig
266 enum class IntegrationMethod { invalid = -1, euler, nicholson, nicholson_ion };
268 static constexpr
double DEFAULT_spikeThreshold = -30.0;
269 static constexpr IntegrationMethod DEFAULT_IntegrationMethod = IntegrationMethod::euler;
270 static constexpr
int DEFAULT_stimulusSeed = 0;
271 static constexpr
int DEFAULT_ionchannelSeed = 0;
272 static constexpr
int DEFAULT_minisSeed = 0;
273 static constexpr
int DEFAULT_synapseSeed = 0;
282 double spikeThreshold = DEFAULT_spikeThreshold;
285 IntegrationMethod integrationMethod = DEFAULT_IntegrationMethod;
288 int stimulusSeed = DEFAULT_stimulusSeed;
290 int ionchannelSeed = DEFAULT_ionchannelSeed;
293 int minisSeed = DEFAULT_minisSeed;
295 int synapseSeed = DEFAULT_synapseSeed;
297 std::string electrodesFile;
303 enum class SpikesSortOrder { invalid = -1, none, by_id, by_time };
305 static constexpr
char DEFAULT_outputDir[] =
"output";
306 static constexpr
char DEFAULT_logFile[] =
"";
307 static constexpr
char DEFAULT_spikesFile[] =
"out.h5";
308 static constexpr SpikesSortOrder DEFAULT_sortOrder = SpikesSortOrder::by_time;
311 std::string outputDir = DEFAULT_outputDir;
313 std::string logFile = DEFAULT_logFile;
315 std::string spikesFile = DEFAULT_spikesFile;
317 SpikesSortOrder sortOrder = DEFAULT_sortOrder;
321 enum class ModificationType { invalid = -1, TTX, ConfigureAllSections };
326 ModificationType type;
335 std::string sectionConfigure;
340 using ModificationMap = std::unordered_map<std::string, Modification>;
346 enum class SpikeLocation { invalid = -1, soma, AIS };
347 static constexpr
double DEFAULT_celsius = 34.0;
348 static constexpr
double DEFAULT_vInit = -80.0;
349 static constexpr SpikeLocation DEFAULT_spikeLocation = SpikeLocation::soma;
350 static constexpr
bool DEFAULT_randomizeGabaRiseTime =
false;
353 double celsius = DEFAULT_celsius;
355 double vInit = DEFAULT_vInit;
357 SpikeLocation spikeLocation = DEFAULT_spikeLocation;
363 bool randomizeGabaRiseTime = DEFAULT_randomizeGabaRiseTime;
367 std::unordered_map<std::string, std::unordered_map<std::string, variantValueType>>
371 ModificationMap modifications;
373 std::set<std::string> listModificationNames()
const;
376 const Modification& getModification(
const std::string& name)
const;
382 enum class Sections { invalid = -1, soma, axon, dend, apic, all };
383 enum class Type { invalid = -1, compartment, lfp, summation, synapse };
384 enum class Scaling { invalid = -1, none, area };
385 enum class Compartments { invalid = -1, center, all };
398 Compartments compartments;
402 std::string variableName;
412 std::string fileName;
417 using ReportMap = std::unordered_map<std::string, Report>;
434 relative_ornstein_uhlenbeck
437 enum class InputType {
440 extracellular_stimulation,
458 struct InputLinear:
public InputBase {
464 bool representsPhysicalElectrode =
false;
469 double percentStart{};
473 bool representsPhysicalElectrode =
false;
486 bool representsPhysicalElectrode =
false;
491 double percentLess{};
493 bool representsPhysicalElectrode =
false;
498 bool representsPhysicalElectrode =
false;
503 std::string spikeFile;
510 double seriesResistance{};
522 bool representsPhysicalElectrode =
false;
544 bool representsPhysicalElectrode =
false;
562 double meanPercent{};
567 bool representsPhysicalElectrode =
false;
588 bool representsPhysicalElectrode =
false;
605 bool representsPhysicalElectrode =
false;
619 double meanPercent{};
624 bool representsPhysicalElectrode =
false;
641 using InputMap = std::unordered_map<std::string, Input>;
678 enum class SimulatorType { invalid = -1, NEURON, CORENEURON };
703 const std::string& getBasePath() const noexcept;
708 const std::
string& getJSON() const noexcept;
713 const std::
string& getNetwork() const noexcept;
718 const
Run& getRun() const noexcept;
723 const
Output& getOutput() const noexcept;
728 const
Conditions& getConditions() const noexcept;
733 std::set<std::
string> listReportNames() const;
741 const
Report& getReport(const std::
string& name) const;
746 std::set<std::
string> listInputNames() const;
753 const
Input& getInput(const std::
string& name) const;
771 const std::
string& getNodeSetsFile() const noexcept;
776 const nonstd::optional<std::
string>& getNodeSet() const noexcept;
781 const std::unordered_map<std::
string,
variantValueType>& getMetaData() const noexcept;
787 const std::unordered_map<std::
string,
variantValueType>& getBetaFeatures() const noexcept;
793 const std::
string& getExpandedJSON() const;
797 std::
string _expandedJSON;
799 std::
string _basePath;
810 std::
string _network;
816 SimulatorType _targetSimulator;
818 std::
string _nodeSetsFile;
820 nonstd::optional<std::
string> _nodeSet{nonstd::nullopt};
822 std::unordered_map<std::string, variantValueType> _metaData;
824 std::unordered_map<std::string, variantValueType> _betaFeatures;