Un-comment and repair TRRANDOM sources.

Also adds new parameters to AM sources for ngspice-43.

Also fixes a bug in the spice parameter parser (which would
puke on any parameter name starting with one of the flag
parameter strings).

Also fixes a bug where the skipped source parameters would
get set to "0" instead of their default values.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/16393
This commit is contained in:
Jeff Young 2024-01-06 18:00:50 +00:00
parent 1649b7dd56
commit 7c5eaed69e
4 changed files with 221 additions and 167 deletions

View File

@ -196,9 +196,9 @@ SIM_MODEL::INFO SIM_MODEL::TypeInfo( TYPE aType )
case TYPE::V_PINKNOISE: return { DEVICE_T::V, "PINKNOISE", "Pink noise (1/f)" };
case TYPE::V_BURSTNOISE: return { DEVICE_T::V, "BURSTNOISE", "Burst noise" };
case TYPE::V_RANDUNIFORM: return { DEVICE_T::V, "RANDUNIFORM", "Random uniform" };
case TYPE::V_RANDNORMAL: return { DEVICE_T::V, "RANDNORMAL", "Random normal" };
case TYPE::V_RANDGAUSSIAN: return { DEVICE_T::V, "RANDGAUSSIAN", "Random Gaussian" };
case TYPE::V_RANDEXP: return { DEVICE_T::V, "RANDEXP", "Random exponential" };
//case TYPE::V_RANDPOISSON: return { DEVICE_T::V, "RANDPOISSON", "Random Poisson" };
case TYPE::V_RANDPOISSON: return { DEVICE_T::V, "RANDPOISSON", "Random Poisson" };
case TYPE::V_BEHAVIORAL: return { DEVICE_T::V, "=", "Behavioral" };
case TYPE::I: return { DEVICE_T::I, "DC", "DC", };
@ -214,9 +214,9 @@ SIM_MODEL::INFO SIM_MODEL::TypeInfo( TYPE aType )
case TYPE::I_PINKNOISE: return { DEVICE_T::I, "PINKNOISE", "Pink noise (1/f)" };
case TYPE::I_BURSTNOISE: return { DEVICE_T::I, "BURSTNOISE", "Burst noise" };
case TYPE::I_RANDUNIFORM: return { DEVICE_T::I, "RANDUNIFORM", "Random uniform" };
case TYPE::I_RANDNORMAL: return { DEVICE_T::I, "RANDNORMAL", "Random normal" };
case TYPE::I_RANDGAUSSIAN: return { DEVICE_T::I, "RANDGAUSSIAN", "Random Gaussian" };
case TYPE::I_RANDEXP: return { DEVICE_T::I, "RANDEXP", "Random exponential" };
//case TYPE::I_RANDPOISSON: return { DEVICE_T::I, "RANDPOISSON", "Random Poisson" };
case TYPE::I_RANDPOISSON: return { DEVICE_T::I, "RANDPOISSON", "Random Poisson" };
case TYPE::I_BEHAVIORAL: return { DEVICE_T::I, "=", "Behavioral" };
case TYPE::SUBCKT: return { DEVICE_T::SUBCKT, "", "Subcircuit" };
@ -333,9 +333,9 @@ SIM_MODEL::SPICE_INFO SIM_MODEL::SpiceInfo( TYPE aType )
case TYPE::V_PINKNOISE: return { "V", "", "TRNOISE" };
case TYPE::V_BURSTNOISE: return { "V", "", "TRNOISE" };
case TYPE::V_RANDUNIFORM: return { "V", "", "TRRANDOM" };
case TYPE::V_RANDNORMAL: return { "V", "", "TRRANDOM" };
case TYPE::V_RANDGAUSSIAN: return { "V", "", "TRRANDOM" };
case TYPE::V_RANDEXP: return { "V", "", "TRRANDOM" };
//case TYPE::V_RANDPOISSON: return { "V", "", "TRRANDOM" };
case TYPE::V_RANDPOISSON: return { "V", "", "TRRANDOM" };
case TYPE::V_BEHAVIORAL: return { "B" };
case TYPE::I: return { "I", "", "DC" };
@ -351,9 +351,9 @@ SIM_MODEL::SPICE_INFO SIM_MODEL::SpiceInfo( TYPE aType )
case TYPE::I_PINKNOISE: return { "I", "", "TRNOISE" };
case TYPE::I_BURSTNOISE: return { "I", "", "TRNOISE" };
case TYPE::I_RANDUNIFORM: return { "I", "", "TRRANDOM" };
case TYPE::I_RANDNORMAL: return { "I", "", "TRRANDOM" };
case TYPE::I_RANDGAUSSIAN: return { "I", "", "TRRANDOM" };
case TYPE::I_RANDEXP: return { "I", "", "TRRANDOM" };
//case TYPE::I_RANDPOISSON: return { "I", "", "TRRANDOM" };
case TYPE::I_RANDPOISSON: return { "I", "", "TRRANDOM" };
case TYPE::I_BEHAVIORAL: return { "B" };
case TYPE::SUBCKT: return { "X" };
@ -931,12 +931,12 @@ std::unique_ptr<SIM_MODEL> SIM_MODEL::Create( TYPE aType )
case TYPE::I_BURSTNOISE:
case TYPE::V_RANDUNIFORM:
case TYPE::I_RANDUNIFORM:
case TYPE::V_RANDNORMAL:
case TYPE::I_RANDNORMAL:
case TYPE::V_RANDGAUSSIAN:
case TYPE::I_RANDGAUSSIAN:
case TYPE::V_RANDEXP:
case TYPE::I_RANDEXP:
//case TYPE::V_RANDPOISSON:
//case TYPE::I_RANDPOISSON:
case TYPE::V_RANDPOISSON:
case TYPE::I_RANDPOISSON:
return std::make_unique<SIM_MODEL_SOURCE>( aType );
case TYPE::SUBCKT:
@ -1475,27 +1475,64 @@ template bool SIM_MODEL::InferSimModel<LIB_SYMBOL, LIB_FIELD>( LIB_SYMBOL& aSymb
template <typename T_symbol, typename T_field>
void SIM_MODEL::MigrateSimModel( T_symbol& aSymbol, const PROJECT* aProject )
{
if( aSymbol.FindField( SIM_DEVICE_TYPE_FIELD )
|| aSymbol.FindField( SIM_TYPE_FIELD )
|| aSymbol.FindField( SIM_PINS_FIELD )
|| aSymbol.FindField( SIM_PARAMS_FIELD ) )
T_field* existing_deviceTypeField = aSymbol.FindField( SIM_DEVICE_TYPE_FIELD );
T_field* existing_typeField = aSymbol.FindField( SIM_TYPE_FIELD );
T_field* existing_pinsField = aSymbol.FindField( SIM_PINS_FIELD );
T_field* existing_paramsField = aSymbol.FindField( SIM_PARAMS_FIELD );
wxString existing_type;
if( existing_typeField )
existing_type = existing_typeField->GetShownText( false ).Upper();
if( existing_deviceTypeField
|| existing_typeField
|| existing_pinsField
|| existing_paramsField )
{
// Has a V7 model field.
// Has a current (V7+) model field.
// Up until 7.0RC2 we used '+' and '-' for potentiometer pins, which doesn't match
// SPICE. Here we remap them to 'r0' and 'r1'.
if( T_field* deviceType = aSymbol.FindField( SIM_TYPE_FIELD ) )
if( existing_type == wxS( "POT" ) )
{
if( deviceType->GetShownText( false ).Lower() == wxS( "pot" ) )
if( existing_pinsField )
{
if( T_field* pins = aSymbol.FindField( SIM_PINS_FIELD ) )
{
wxString pinMap = pins->GetText();
wxString pinMap = existing_pinsField->GetText();
pinMap.Replace( wxS( "=+" ), wxS( "=r1" ) );
pinMap.Replace( wxS( "=-" ), wxS( "=r0" ) );
pins->SetText( pinMap );
existing_pinsField->SetText( pinMap );
}
}
// Up until 8.0RC1 random voltage/current sources were a bit of a mess.
if( existing_type.StartsWith( wxS( "RAND" ) ) )
{
// Re-fetch value without resolving references. If it's an indirect value then we
// can't migrate it.
existing_type = existing_typeField->GetText().Upper();
if( existing_type.Replace( wxS( "NORMAL" ), wxS( "GAUSSIAN" ) ) )
existing_typeField->SetText( existing_type );
if( existing_paramsField )
{
wxString params = existing_paramsField->GetText().Lower();
size_t count = 0;
// We used to support 'min' and 'max' instead of 'range' and 'offset', but we
// wrote all 4 to the netlist which would cause ngspice to barf, so no one has
// working documents with min and max specified. Just delete them if they're
// uninitialized.
count += params.Replace( wxS( "min=0 " ), wxEmptyString );
count += params.Replace( wxS( "max=0 " ), wxEmptyString );
// We used to use 'dt', but the correct ngspice name is 'ts'.
count += params.Replace( wxS( "dt=" ), wxS( "ts=" ) );
if( count )
existing_paramsField->SetText( params );
}
}
return;

View File

@ -248,9 +248,9 @@ public:
V_PINKNOISE,
V_BURSTNOISE,
V_RANDUNIFORM,
V_RANDNORMAL,
V_RANDGAUSSIAN,
V_RANDEXP,
//V_RANDPOISSON,
V_RANDPOISSON,
V_BEHAVIORAL,
I,
@ -266,9 +266,9 @@ public:
I_PINKNOISE,
I_BURSTNOISE,
I_RANDUNIFORM,
I_RANDNORMAL,
I_RANDGAUSSIAN,
I_RANDEXP,
//I_RANDPOISSON,
I_RANDPOISSON,
I_BEHAVIORAL,
SUBCKT,

View File

@ -66,13 +66,13 @@ namespace SIM_MODEL_SERIALIZER_GRAMMAR
TAO_PEGTL_ISTRING( "thermal" ), // VDMOS
TAO_PEGTL_ISTRING( "xpart" )> {}; // BSIM1
struct fieldParamValuePair : sor<flagParam,
if_must<param,
struct fieldParamValuePair : sor<if_must<param,
opt<sep>,
one<'='>,
opt<sep>,
sor<quotedString,
unquotedString>>> {};
unquotedString>>,
flagParam> {};
struct fieldParamValuePairs : list<fieldParamValuePair, sep> {};
struct fieldParamValuePairsGrammar : must<opt<sep>,
opt<fieldParamValuePairs>,

View File

@ -112,8 +112,6 @@ std::string SPICE_GENERATOR_SOURCE::ItemLine( const SPICE_ITEM& aItem ) const
break;
}
// TODO: dt should be tstep by default.
case SIM_MODEL::TYPE::V_WHITENOISE:
case SIM_MODEL::TYPE::I_WHITENOISE:
args.append( getParamValueString( "rms", "0" ) + " " );
@ -142,56 +140,39 @@ std::string SPICE_GENERATOR_SOURCE::ItemLine( const SPICE_ITEM& aItem ) const
case SIM_MODEL::TYPE::I_RANDUNIFORM:
{
args.append( "1 " );
args.append( getParamValueString( "dt", "0" ) + " " );
args.append( getParamValueString( "ts", "0" ) + " " );
args.append( getParamValueString( "td", "0" ) + " " );
std::string min = getParamValueString( "min", "0" );
std::string max = getParamValueString( "max", "0" );
args.append( min + " " );
args.append( max + " " );
double minVal = std::stod( min );
double maxVal = std::stod( max );
double rangeVal = maxVal - minVal;
double offsetVal = ( maxVal + minVal ) / 2;
std::string range = std::to_string( rangeVal );
std::string offset = std::to_string( offsetVal );
args.append( range + " " );
args.append( offset + " " );
args.append( getParamValueString( "range", "1" ) + " " );
args.append( getParamValueString( "offset", "0" ) + " " );
break;
}
case SIM_MODEL::TYPE::V_RANDNORMAL:
case SIM_MODEL::TYPE::I_RANDNORMAL:
case SIM_MODEL::TYPE::V_RANDGAUSSIAN:
case SIM_MODEL::TYPE::I_RANDGAUSSIAN:
args.append( "2 " );
args.append( getParamValueString( "dt", "0" ) + " " );
args.append( getParamValueString( "ts", "0" ) + " " );
args.append( getParamValueString( "td", "0" ) + " " );
args.append( getParamValueString( "stddev", "0" ) + " " );
args.append( getParamValueString( "stddev", "1" ) + " " );
args.append( getParamValueString( "mean", "0" ) + " " );
break;
case SIM_MODEL::TYPE::V_RANDEXP:
case SIM_MODEL::TYPE::I_RANDEXP:
args.append( "3 " );
args.append( getParamValueString( "dt", "0" ) + " " );
args.append( getParamValueString( "ts", "0" ) + " " );
args.append( getParamValueString( "td", "0" ) + " " );
args.append( getParamValueString( "mean", "0" ) + " " );
args.append( getParamValueString( "mean", "1" ) + " " );
args.append( getParamValueString( "offset", "0" ) + " " );
break;
/*
case SIM_MODEL::TYPE::V_RANDPOISSON:
case SIM_MODEL::TYPE::I_RANDPOISSON:
args.append( "4 " );
args.append( getParamValueString( "dt", "0" ) + " " );
args.append( getParamValueString( "ts", "0" ) + " " );
args.append( getParamValueString( "td", "0" ) + " " );
args.append( getParamValueString( "lambda", "0" ) + " " );
args.append( getParamValueString( "lambda", "1" ) + " " );
args.append( getParamValueString( "offset", "0" ) + " " );
break;
*/
default:
for( const SIM_MODEL::PARAM& param : m_model.GetParams() )
@ -300,9 +281,7 @@ void SIM_MODEL_SOURCE::doSetParamValue( int aParamIndex, const std::string& aVal
// them out automatically. If a value is nulled, delete everything after it.
if( aValue.empty() )
{
for( int paramIndex = static_cast<int>( aParamIndex );
paramIndex < GetParamCount();
++paramIndex )
for( int paramIndex = aParamIndex; paramIndex < GetParamCount(); ++paramIndex )
{
m_params.at( aParamIndex ).value = "";
}
@ -313,8 +292,10 @@ void SIM_MODEL_SOURCE::doSetParamValue( int aParamIndex, const std::string& aVal
{
if( GetParam( paramIndex ).value == "" )
{
m_params.at( aParamIndex ).value = "0";
SIM_MODEL::SetParamValue( paramIndex, "0" );
std::string defaultValue = m_params.at( aParamIndex ).info.defaultValue;
m_params.at( aParamIndex ).value = defaultValue;
SIM_MODEL::SetParamValue( paramIndex, defaultValue );
}
}
}
@ -400,12 +381,12 @@ const std::vector<SIM_MODEL::PARAM::INFO>& SIM_MODEL_SOURCE::makeParamInfos( TYP
case TYPE::I_BURSTNOISE: return iburstnoise;
case TYPE::V_RANDUNIFORM: return vrandomuniform;
case TYPE::I_RANDUNIFORM: return irandomuniform;
case TYPE::V_RANDNORMAL: return vrandomnormal;
case TYPE::I_RANDNORMAL: return irandomnormal;
case TYPE::V_RANDGAUSSIAN: return vrandomnormal;
case TYPE::I_RANDGAUSSIAN: return irandomnormal;
case TYPE::V_RANDEXP: return vrandomexp;
case TYPE::I_RANDEXP: return irandomexp;
//case TYPE::V_RANDPOISSON: return vrandompoisson;
//case TYPE::I_RANDPOISSON: return irandompoisson;
case TYPE::V_RANDPOISSON: return vrandompoisson;
case TYPE::I_RANDPOISSON: return irandompoisson;
default:
wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
static std::vector<SIM_MODEL::PARAM::INFO> empty;
@ -660,14 +641,48 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeAMParamInfos( const st
paramInfo.description = "Modulating frequency";
paramInfos.push_back( paramInfo );
paramInfo.name = "md";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "1.0";
paramInfo.description = "Modulation depth";
paramInfos.push_back( paramInfo );
paramInfo.name = "fc";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "Hz";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "";
paramInfo.defaultValue = "1/tstop";
paramInfo.description = "Carrier frequency";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Delay";
paramInfos.push_back( paramInfo );
paramInfo.name = "phases";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "°";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Modulation signal phase";
paramInfos.push_back( paramInfo );
paramInfo.name = "phasec";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "°";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Carrier signal phase";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
appendSpParamInfos( paramInfos, aUnit );
return paramInfos;
}
@ -734,6 +749,8 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeSFFMParamInfos( const
paramInfo.description = "Signal phase";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
appendSpParamInfos( paramInfos, aUnit );
return paramInfos;
}
@ -957,28 +974,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomUniformParamInfo
std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo;
paramInfo.name = "min";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "-0.5";
paramInfo.description = "Min. value";
paramInfos.push_back( paramInfo );
paramInfo.name = "max";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0.5";
paramInfo.description = "Max. value";
paramInfos.push_back( paramInfo );
paramInfo.name = "dt";
paramInfo.name = "ts";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Time step";
paramInfo.defaultValue = "";
paramInfo.description = "Individual voltage duration";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
@ -989,6 +990,22 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomUniformParamInfo
paramInfo.description = "Delay";
paramInfos.push_back( paramInfo );
paramInfo.name = "range";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "1";
paramInfo.description = "Range";
paramInfos.push_back( paramInfo );
paramInfo.name = "offset";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Offset";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
appendSpParamInfos( paramInfos, aUnit );
return paramInfos;
@ -1001,12 +1018,20 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomNormalParamInfos
std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo;
paramInfo.name = "mean";
paramInfo.name = "ts";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "";
paramInfo.description = "Individual voltage duration";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Mean";
paramInfo.description = "Delay";
paramInfos.push_back( paramInfo );
paramInfo.name = "stddev";
@ -1017,20 +1042,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomNormalParamInfos
paramInfo.description = "Standard deviation";
paramInfos.push_back( paramInfo );
paramInfo.name = "dt";
paramInfo.name = "mean";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Time step";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Delay";
paramInfo.description = "Mean";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
@ -1045,12 +1062,20 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomExpParamInfos( c
std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo;
paramInfo.name = "offset";
paramInfo.name = "ts";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "";
paramInfo.description = "Individual voltage duration";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Offset";
paramInfo.description = "Delay";
paramInfos.push_back( paramInfo );
paramInfo.name = "mean";
@ -1061,20 +1086,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomExpParamInfos( c
paramInfo.description = "Mean";
paramInfos.push_back( paramInfo );
paramInfo.name = "dt";
paramInfo.name = "offset";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Time step";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Delay";
paramInfo.description = "Offset";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
@ -1089,28 +1106,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomPoissonParamInfo
std::vector<PARAM::INFO> paramInfos;
PARAM::INFO paramInfo;
paramInfo.name = "offset";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Offset";
paramInfos.push_back( paramInfo );
paramInfo.name = "lambda";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "1";
paramInfo.description = "Mean";
paramInfos.push_back( paramInfo );
paramInfo.name = "dt";
paramInfo.name = "ts";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = "s";
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Time step";
paramInfo.defaultValue = "";
paramInfo.description = "Individual voltage duration";
paramInfos.push_back( paramInfo );
paramInfo.name = "td";
@ -1121,6 +1122,22 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomPoissonParamInfo
paramInfo.description = "Delay";
paramInfos.push_back( paramInfo );
paramInfo.name = "lambda";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "1";
paramInfo.description = "Lambda";
paramInfos.push_back( paramInfo );
paramInfo.name = "offset";
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
paramInfo.unit = aUnit;
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "0";
paramInfo.description = "Offset";
paramInfos.push_back( paramInfo );
appendAcParamInfos( paramInfos, aUnit );
appendSpParamInfos( paramInfos, aUnit );
return paramInfos;