@@ -132,6 +132,25 @@ NLOHMANN_JSON_SERIALIZE_ENUM(
132132 {SimulationConfig::ModificationBase::ModificationType::ConfigureAllSections,
133133 " ConfigureAllSections" }})
134134
135+ // { in C++14; one has to declare static constexpr members; this can go away in c++17
136+ #define D (name ) decltype (SimulationConfig::name) constexpr SimulationConfig::name;
137+ D (Output::DEFAULT_outputDir)
138+ D (Conditions::DEFAULT_randomizeGabaRiseTime)
139+ D (Output::DEFAULT_logFile)
140+ D (Run::DEFAULT_stimulusSeed)
141+ D (Conditions::DEFAULT_spikeLocation)
142+ D (Run::DEFAULT_ionchannelSeed)
143+ D (Output::DEFAULT_sortOrder)
144+ D (Run::DEFAULT_IntegrationMethod)
145+ D (Conditions::DEFAULT_vInit)
146+ D (Run::DEFAULT_minisSeed)
147+ D (Output::DEFAULT_spikesFile)
148+ D (Conditions::DEFAULT_celsius)
149+ D (Run::DEFAULT_synapseSeed)
150+ D (Run::DEFAULT_spikeThreshold)
151+ #undef D
152+ // }
153+
135154namespace {
136155// to be replaced by std::filesystem once C++17 is used
137156namespace fs = ghc::filesystem;
@@ -976,15 +995,15 @@ class SimulationConfig::Parser
976995 parseMandatory (*runIt, " tstop" , " run" , result.tstop );
977996 parseMandatory (*runIt, " dt" , " run" , result.dt );
978997 parseMandatory (*runIt, " random_seed" , " run" , result.randomSeed );
979- parseOptional (*runIt, " spike_threshold" , result.spikeThreshold , {- 30 });
998+ parseOptional (*runIt, " spike_threshold" , result.spikeThreshold , {Run::DEFAULT_spikeThreshold });
980999 parseOptional (*runIt,
9811000 " integration_method" ,
9821001 result.integrationMethod ,
983- {Run::IntegrationMethod::euler });
984- parseOptional (*runIt, " stimulus_seed" , result.stimulusSeed , {0 });
985- parseOptional (*runIt, " ionchannel_seed" , result.ionchannelSeed , {0 });
986- parseOptional (*runIt, " minis_seed" , result.minisSeed , {0 });
987- parseOptional (*runIt, " synapse_seed" , result.synapseSeed , {0 });
1002+ {Run::DEFAULT_IntegrationMethod });
1003+ parseOptional (*runIt, " stimulus_seed" , result.stimulusSeed , {Run::DEFAULT_stimulusSeed });
1004+ parseOptional (*runIt, " ionchannel_seed" , result.ionchannelSeed , {Run::DEFAULT_ionchannelSeed });
1005+ parseOptional (*runIt, " minis_seed" , result.minisSeed , {Run::DEFAULT_minisSeed });
1006+ parseOptional (*runIt, " synapse_seed" , result.synapseSeed , {Run::DEFAULT_synapseSeed });
9881007 parseOptional (*runIt, " electrodes_file" , result.electrodesFile , {" " });
9891008
9901009 if (!result.electrodesFile .empty ()) {
@@ -1001,37 +1020,37 @@ class SimulationConfig::Parser
10011020 if (outputIt == _json.end ()) {
10021021 return result;
10031022 }
1004- parseOptional (*outputIt, " output_dir" , result.outputDir , {" output " });
1005- parseOptional (*outputIt, " log_file" , result.logFile , {" " });
1006- parseOptional (*outputIt, " spikes_file" , result.spikesFile , {" out.h5 " });
1023+ parseOptional (*outputIt, " output_dir" , result.outputDir , {Output::DEFAULT_outputDir });
1024+ parseOptional (*outputIt, " log_file" , result.logFile , {Output::DEFAULT_logFile });
1025+ parseOptional (*outputIt, " spikes_file" , result.spikesFile , {Output::DEFAULT_spikesFile });
10071026 parseOptional (*outputIt,
10081027 " spikes_sort_order" ,
10091028 result.sortOrder ,
1010- {Output::SpikesSortOrder::by_time });
1029+ {Output::DEFAULT_sortOrder });
10111030
10121031 result.outputDir = toAbsolute (_basePath, result.outputDir );
10131032
10141033 return result;
10151034 }
10161035
10171036 SimulationConfig::Conditions parseConditions () const {
1018- SimulationConfig::Conditions result{} ;
1037+ SimulationConfig::Conditions result;
10191038
10201039 const auto conditionsIt = _json.find (" conditions" );
10211040 if (conditionsIt == _json.end ()) {
10221041 return result;
10231042 }
1024- parseOptional (*conditionsIt, " celsius" , result.celsius , {34.0 });
1025- parseOptional (*conditionsIt, " v_init" , result.vInit , {- 80 });
1043+ parseOptional (*conditionsIt, " celsius" , result.celsius , {Conditions::DEFAULT_celsius });
1044+ parseOptional (*conditionsIt, " v_init" , result.vInit , {Conditions::DEFAULT_vInit });
10261045 parseOptional (*conditionsIt,
10271046 " spike_location" ,
10281047 result.spikeLocation ,
1029- {Conditions::SpikeLocation::soma });
1048+ {Conditions::DEFAULT_spikeLocation });
10301049 parseOptional (*conditionsIt, " extracellular_calcium" , result.extracellularCalcium );
10311050 parseOptional (*conditionsIt,
10321051 " randomize_gaba_rise_time" ,
10331052 result.randomizeGabaRiseTime ,
1034- {false });
1053+ {Conditions::DEFAULT_randomizeGabaRiseTime });
10351054 parseConditionsMechanisms (*conditionsIt, result.mechanisms );
10361055 parseConditionsModifications (*conditionsIt, result.modifications );
10371056 return result;
@@ -1093,7 +1112,7 @@ class SimulationConfig::Parser
10931112 }
10941113
10951114 SimulationConfig::SimulatorType parseTargetSimulator () const {
1096- SimulationConfig::SimulatorType val;
1115+ SimulationConfig::SimulatorType val = SimulationConfig::SimulatorType::NEURON ;
10971116 parseOptional (_json, " target_simulator" , val, {SimulationConfig::SimulatorType::NEURON});
10981117 return val;
10991118 }
@@ -1135,7 +1154,7 @@ class SimulationConfig::Parser
11351154 const auto & valueIt = it.value ();
11361155 const auto debugStr = fmt::format (" input {}" , it.key ());
11371156
1138- InputBase::Module module ;
1157+ InputBase::Module module = InputBase::Module::invalid ;
11391158 parseMandatory (valueIt, " module" , debugStr, module );
11401159
11411160 const auto input = parseInputModule (valueIt, module , _basePath, debugStr);
0 commit comments