32 return std::isalnum(
static_cast<unsigned char>( c ) ) != 0 || c ==
'_';
42 std::string rewriteBraceExpression(
const std::string& aBrace )
47 while( pos < aBrace.size() )
49 const char c = aBrace[pos];
50 const bool prevIsWord = pos > 0 &&
isWordChar( aBrace[pos - 1] );
51 const bool digitStart = std::isdigit(
static_cast<unsigned char>( c ) ) != 0;
52 const bool dotDigitStart = c ==
'.' && pos + 1 < aBrace.size()
53 && std::isdigit(
static_cast<unsigned char>( aBrace[pos + 1] ) ) != 0;
55 if( prevIsWord || ( !digitStart && !dotDigitStart ) )
62 const std::size_t numStart = pos;
64 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
67 if( pos < aBrace.size() && aBrace[pos] ==
'.' )
71 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
75 if( pos < aBrace.size() && ( aBrace[pos] ==
'e' || aBrace[pos] ==
'E' ) )
77 const std::size_t expStart = pos++;
79 if( pos < aBrace.size() && ( aBrace[pos] ==
'+' || aBrace[pos] ==
'-' ) )
82 const std::size_t expDigits = pos;
84 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
89 if( pos == expDigits )
96 if( pos < aBrace.size() && std::strchr(
"afpnumkKMGTPE", aBrace[pos] ) !=
nullptr
97 && ( pos + 1 >= aBrace.size()
98 || !std::isalpha(
static_cast<unsigned char>( aBrace[pos + 1] ) ) ) )
117 std::string formatPwlValues(
const std::string& aInput )
124 return std::isspace(
static_cast<unsigned char>( c ) ) != 0;
127 while( pos < aInput.size() )
129 while( pos < aInput.size() &&
isSpace( aInput[pos] ) )
132 if( pos >= aInput.size() )
135 const std::size_t start = pos;
138 while( pos < aInput.size() && ( braceDepth > 0 || !
isSpace( aInput[pos] ) ) )
140 if( aInput[pos] ==
'{' )
142 else if( aInput[pos] ==
'}' && braceDepth > 0 )
148 std::string token = aInput.substr( start, pos - start );
150 if( token.front() ==
'{' )
151 result.append( rewriteBraceExpression( token ) );
174 case SIM_MODEL::TYPE::V:
175 case SIM_MODEL::TYPE::I:
176 result = fmt::format(
"alter @{}={:g}",
199 bool emptyLine =
true;
211 item.
modelName += fmt::format(
"DC {} ", dc );
214 if(
m_model.GetSpiceInfo().functionName !=
""
215 &&
m_model.GetType() != SIM_MODEL::TYPE::V
216 &&
m_model.GetType() != SIM_MODEL::TYPE::I )
218 std::string args =
"";
222 case SIM_MODEL::TYPE::V_PWL:
223 case SIM_MODEL::TYPE::I_PWL:
224 args = formatPwlValues(
m_model.GetParam( 0 ).value );
227 case SIM_MODEL::TYPE::V_WHITENOISE:
228 case SIM_MODEL::TYPE::I_WHITENOISE:
231 args.append(
"0 0 0 0 0 " );
234 case SIM_MODEL::TYPE::V_PINKNOISE:
235 case SIM_MODEL::TYPE::I_PINKNOISE:
240 args.append(
"0 0 0 " );
243 case SIM_MODEL::TYPE::V_BURSTNOISE:
244 case SIM_MODEL::TYPE::I_BURSTNOISE:
245 args.append(
"0 0 0 0 " );
251 case SIM_MODEL::TYPE::V_RANDUNIFORM:
252 case SIM_MODEL::TYPE::I_RANDUNIFORM:
262 case SIM_MODEL::TYPE::V_RANDGAUSSIAN:
263 case SIM_MODEL::TYPE::I_RANDGAUSSIAN:
271 case SIM_MODEL::TYPE::V_RANDEXP:
272 case SIM_MODEL::TYPE::I_RANDEXP:
280 case SIM_MODEL::TYPE::V_RANDPOISSON:
281 case SIM_MODEL::TYPE::I_RANDPOISSON:
290 for(
int ii = 0; ii <
m_model.GetParamCount(); ++ii )
294 if( ac !=
"" && ( param.
Matches(
"ac" ) || param.
Matches(
"ph" ) ) )
300 args.append( argStr +
" " );
307 if(
m_model.GetType() == SIM_MODEL::TYPE::V_PULSE
308 ||
m_model.GetType() == SIM_MODEL::TYPE::I_PULSE )
316 if( !perSet && !npSet )
317 args.append(
"0 1 " );
324 item.
modelName += fmt::format(
"{}( {}) ",
m_model.GetSpiceInfo().functionName, args );
329 case SIM_MODEL::TYPE::V_VCL:
330 case SIM_MODEL::TYPE::I_VCL:
337 case SIM_MODEL::TYPE::V_CCL:
338 case SIM_MODEL::TYPE::I_CCL:
358 item.
modelName += fmt::format(
"AC {} {} ", ac, ph );
361 std::string portnum =
"";
368 item.
modelName += fmt::format(
"portnum {} ", portnum );
376 item.
modelName += fmt::format(
"z0 {} ", z0 );
389 const std::string& aDefaultValue )
const
393 if (
m_model.FindParam( aParamName ) )
418 for(
int paramIndex = aParamIndex; paramIndex <
GetParamCount(); ++paramIndex )
420 m_params.at( aParamIndex ).value =
"";
425 for(
int paramIndex = 0; paramIndex < aParamIndex; ++paramIndex )
427 if(
GetParam( paramIndex ).value ==
"" )
430 wxString defaultValue =
m_params.at( aParamIndex ).info.defaultValue;
432 if( !defaultValue.ToDouble( &
dummy ) )
433 defaultValue = wxT(
"0" );
435 m_params.at( aParamIndex ).value = defaultValue;
496 case TYPE::V:
return vdc;
497 case TYPE::I:
return idc;
498 case TYPE::V_SIN:
return vsin;
499 case TYPE::I_SIN:
return isin;
500 case TYPE::V_PULSE:
return vpulse;
501 case TYPE::I_PULSE:
return ipulse;
502 case TYPE::V_EXP:
return vexp;
503 case TYPE::I_EXP:
return iexp;
504 case TYPE::V_AM:
return vam;
505 case TYPE::I_AM:
return iam;
506 case TYPE::V_SFFM:
return vsffm;
507 case TYPE::I_SFFM:
return isffm;
508 case TYPE::V_VCL:
return vcvs;
509 case TYPE::V_CCL:
return ccvs;
510 case TYPE::V_PWL:
return vpwl;
511 case TYPE::I_VCL:
return vccs;
512 case TYPE::I_CCL:
return cccs;
513 case TYPE::I_PWL:
return ipwl;
514 case TYPE::V_WHITENOISE:
return vwhitenoise;
515 case TYPE::I_WHITENOISE:
return iwhitenoise;
516 case TYPE::V_PINKNOISE:
return vpinknoise;
517 case TYPE::I_PINKNOISE:
return ipinknoise;
518 case TYPE::V_BURSTNOISE:
return vburstnoise;
519 case TYPE::I_BURSTNOISE:
return iburstnoise;
520 case TYPE::V_RANDUNIFORM:
return vrandomuniform;
521 case TYPE::I_RANDUNIFORM:
return irandomuniform;
522 case TYPE::V_RANDGAUSSIAN:
return vrandomnormal;
523 case TYPE::I_RANDGAUSSIAN:
return irandomnormal;
524 case TYPE::V_RANDEXP:
return vrandomexp;
525 case TYPE::I_RANDEXP:
return irandomexp;
526 case TYPE::V_RANDPOISSON:
return vrandompoisson;
527 case TYPE::I_RANDPOISSON:
return irandompoisson;
529 wxFAIL_MSG(
"Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
530 static std::vector<SIM_MODEL::PARAM::INFO>
empty;
537 const std::string& aUnit )
539 std::vector<PARAM::INFO> paramInfos;
540 PARAM::INFO paramInfo;
542 paramInfo.name =
"dc";
544 paramInfo.unit = aUnit;
545 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
546 paramInfo.defaultValue =
"0";
547 paramInfo.description =
"DC value";
548 paramInfos.push_back( paramInfo );
557 const std::string& aUnit )
559 std::vector<PARAM::INFO> paramInfos;
560 PARAM::INFO paramInfo;
562 paramInfo.name =
"dc";
564 paramInfo.unit = aUnit;
565 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
566 paramInfo.defaultValue =
"";
567 paramInfo.description =
"DC offset";
568 paramInfos.push_back( paramInfo );
570 paramInfo.name =
"ampl";
572 paramInfo.unit = aUnit;
573 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
574 paramInfo.defaultValue =
"";
575 paramInfo.description =
"Amplitude";
576 paramInfos.push_back( paramInfo );
578 paramInfo.name =
"f";
580 paramInfo.unit =
"Hz";
581 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
582 paramInfo.defaultValue =
"1/tstop";
583 paramInfo.description =
"Frequency";
584 paramInfos.push_back( paramInfo );
586 paramInfo.name =
"td";
588 paramInfo.unit =
"s";
589 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
590 paramInfo.defaultValue =
"0";
591 paramInfo.description =
"Delay";
592 paramInfos.push_back( paramInfo );
594 paramInfo.name =
"theta";
596 paramInfo.unit =
"1/s";
597 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
598 paramInfo.defaultValue =
"0";
599 paramInfo.description =
"Damping factor";
600 paramInfos.push_back( paramInfo );
602 paramInfo.name =
"phase";
604 paramInfo.unit =
"°";
605 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
606 paramInfo.defaultValue =
"0";
607 paramInfo.description =
"Phase";
608 paramInfos.push_back( paramInfo );
617 const std::string& aUnit )
619 std::vector<PARAM::INFO> paramInfos;
620 PARAM::INFO paramInfo;
622 paramInfo.name = aPrefix +
"1";
624 paramInfo.unit = aUnit;
625 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
626 paramInfo.defaultValue =
"";
627 paramInfo.description =
"Initial value";
628 paramInfos.push_back( paramInfo );
630 paramInfo.name = aPrefix +
"2";
632 paramInfo.unit = aUnit;
633 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
634 paramInfo.defaultValue =
"";
635 paramInfo.description =
"Pulsed value";
636 paramInfos.push_back( paramInfo );
638 paramInfo.name =
"td";
640 paramInfo.unit =
"s";
641 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
642 paramInfo.defaultValue =
"0";
643 paramInfo.description =
"Delay";
644 paramInfos.push_back( paramInfo );
646 paramInfo.name =
"tr";
648 paramInfo.unit =
"s";
649 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
650 paramInfo.defaultValue =
"tstep";
651 paramInfo.description =
"Rise time";
652 paramInfos.push_back( paramInfo );
654 paramInfo.name =
"tf";
656 paramInfo.unit =
"s";
657 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
658 paramInfo.defaultValue =
"tstep";
659 paramInfo.description =
"Fall time";
660 paramInfos.push_back( paramInfo );
662 paramInfo.name =
"tw";
664 paramInfo.unit =
"s";
665 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
666 paramInfo.defaultValue =
"tstop";
667 paramInfo.description =
"Pulse width";
668 paramInfos.push_back( paramInfo );
670 paramInfo.name =
"per";
672 paramInfo.unit =
"s";
673 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
674 paramInfo.defaultValue =
"tstop";
675 paramInfo.description =
"Period";
676 paramInfos.push_back( paramInfo );
678 paramInfo.name =
"np";
681 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
682 paramInfo.defaultValue =
"";
683 paramInfo.description =
"Number of pulses";
684 paramInfos.push_back( paramInfo );
693 const std::string& aUnit )
695 std::vector<PARAM::INFO> paramInfos;
696 PARAM::INFO paramInfo;
698 paramInfo.name = aPrefix +
"1";
700 paramInfo.unit = aUnit;
701 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
702 paramInfo.defaultValue =
"";
703 paramInfo.description =
"Initial value";
704 paramInfos.push_back( paramInfo );
706 paramInfo.name = aPrefix +
"2";
708 paramInfo.unit = aUnit;
709 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
710 paramInfo.defaultValue =
"";
711 paramInfo.description =
"Pulsed value";
712 paramInfos.push_back( paramInfo );
714 paramInfo.name =
"td1";
716 paramInfo.unit =
"s";
717 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
718 paramInfo.defaultValue =
"0";
719 paramInfo.description =
"Rise delay time";
720 paramInfos.push_back( paramInfo );
722 paramInfo.name =
"tau1";
724 paramInfo.unit =
"s";
725 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
726 paramInfo.defaultValue =
"tstep";
727 paramInfo.description =
"Rise time constant";
728 paramInfos.push_back( paramInfo );
730 paramInfo.name =
"td2";
732 paramInfo.unit =
"s";
733 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
734 paramInfo.defaultValue =
"td1+tstep";
735 paramInfo.description =
"Fall delay time";
736 paramInfos.push_back( paramInfo );
738 paramInfo.name =
"tau2";
740 paramInfo.unit =
"s";
741 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
742 paramInfo.defaultValue =
"tstep";
743 paramInfo.description =
"Fall time constant";
744 paramInfos.push_back( paramInfo );
753 const std::string& aUnit )
755 std::vector<PARAM::INFO> paramInfos;
756 PARAM::INFO paramInfo;
758 paramInfo.name =
"vo";
760 paramInfo.unit = aUnit;
761 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
762 paramInfo.defaultValue =
"";
763 paramInfo.description =
"Overall offset";
764 paramInfos.push_back( paramInfo );
766 paramInfo.name =
"vmo";
768 paramInfo.unit = aUnit;
769 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
770 paramInfo.defaultValue =
"";
771 paramInfo.description =
"Modulation signal offset";
772 paramInfos.push_back( paramInfo );
774 paramInfo.name =
"vma";
776 paramInfo.unit = aUnit;
777 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
778 paramInfo.defaultValue =
"";
779 paramInfo.description =
"Modulation signal amplitude";
780 paramInfos.push_back( paramInfo );
782 paramInfo.name =
"fm";
784 paramInfo.unit =
"Hz";
785 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
786 paramInfo.defaultValue =
"5/tstop";
787 paramInfo.description =
"Modulation signal frequency";
788 paramInfos.push_back( paramInfo );
790 paramInfo.name =
"fc";
792 paramInfo.unit =
"Hz";
793 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
794 paramInfo.defaultValue =
"500/tstop";
795 paramInfo.description =
"Carrier signal frequency";
796 paramInfos.push_back( paramInfo );
798 paramInfo.name =
"td";
800 paramInfo.unit =
"s";
801 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
802 paramInfo.defaultValue =
"0";
803 paramInfo.description =
"Overall delay";
804 paramInfos.push_back( paramInfo );
806 paramInfo.name =
"phasem";
808 paramInfo.unit =
"°";
809 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
810 paramInfo.defaultValue =
"0";
811 paramInfo.description =
"Modulation signal phase";
812 paramInfos.push_back( paramInfo );
814 paramInfo.name =
"phasec";
816 paramInfo.unit =
"°";
817 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
818 paramInfo.defaultValue =
"0";
819 paramInfo.description =
"Carrier signal phase";
820 paramInfos.push_back( paramInfo );
829 const std::string& aUnit )
831 std::vector<PARAM::INFO> paramInfos;
832 PARAM::INFO paramInfo;
834 paramInfo.name =
"vo";
836 paramInfo.unit = aUnit;
837 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
838 paramInfo.defaultValue =
"";
839 paramInfo.description =
"DC offset";
840 paramInfos.push_back( paramInfo );
842 paramInfo.name =
"va";
844 paramInfo.unit = aUnit;
845 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
846 paramInfo.defaultValue =
"";
847 paramInfo.description =
"Amplitude";
848 paramInfos.push_back( paramInfo );
850 paramInfo.name =
"fm";
852 paramInfo.unit =
"Hz";
853 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
854 paramInfo.defaultValue =
"5/tstop";
855 paramInfo.description =
"Modulating frequency";
856 paramInfos.push_back( paramInfo );
858 paramInfo.name =
"mdi";
861 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
862 paramInfo.defaultValue =
"";
863 paramInfo.description =
"Modulation index";
864 paramInfos.push_back( paramInfo );
866 paramInfo.name =
"fc";
868 paramInfo.unit =
"Hz";
869 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
870 paramInfo.defaultValue =
"500/tstop";
871 paramInfo.description =
"Carrier frequency";
872 paramInfos.push_back( paramInfo );
874 paramInfo.name =
"phasem";
876 paramInfo.unit =
"°";
877 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
878 paramInfo.defaultValue =
"0";
879 paramInfo.description =
"Modulating signal phase";
880 paramInfos.push_back( paramInfo );
882 paramInfo.name =
"phasec";
884 paramInfo.unit =
"°";
885 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
886 paramInfo.defaultValue =
"0";
887 paramInfo.description =
"Carrier signal phase";
888 paramInfos.push_back( paramInfo );
898 std::vector<PARAM::INFO> paramInfos;
899 PARAM::INFO paramInfo;
901 paramInfo.name =
"gain";
904 paramInfo.unit = aGainUnit;
905 paramInfo.description =
"Gain";
906 paramInfos.push_back( paramInfo );
908 paramInfo.name =
"control";
912 paramInfo.description =
"Controlling voltage source";
913 paramInfos.push_back( paramInfo );
921 std::vector<PARAM::INFO> paramInfos;
922 PARAM::INFO paramInfo;
924 paramInfo.name =
"gain";
927 paramInfo.unit = aGainUnit;
928 paramInfo.description =
"Gain";
929 paramInfos.push_back( paramInfo );
936 const std::string& aQuantity,
937 const std::string& aUnit )
939 std::vector<PARAM::INFO> paramInfos;
940 PARAM::INFO paramInfo;
942 paramInfo.name =
"pwl";
944 paramInfo.unit =
"s," + aUnit;
945 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
946 paramInfo.defaultValue =
"";
947 paramInfo.description = aUnit ==
"V" ?
"Time-voltage points" :
"Time-current points";
948 paramInfos.push_back( paramInfo );
957 const std::string& aUnit )
959 std::vector<PARAM::INFO> paramInfos;
960 PARAM::INFO paramInfo;
962 paramInfo.name =
"rms";
964 paramInfo.unit = aUnit;
965 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
966 paramInfo.defaultValue =
"0";
967 paramInfo.description =
"White noise RMS amplitude";
968 paramInfos.push_back( paramInfo );
970 paramInfo.name =
"dt";
972 paramInfo.unit =
"s";
973 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
974 paramInfo.defaultValue =
"0";
975 paramInfo.description =
"Time step";
976 paramInfos.push_back( paramInfo );
985 const std::string& aUnit )
987 std::vector<PARAM::INFO> paramInfos;
988 PARAM::INFO paramInfo;
990 paramInfo.name =
"rms";
993 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
994 paramInfo.defaultValue =
"0";
995 paramInfo.description =
"1/f noise RMS amplitude";
996 paramInfos.push_back( paramInfo );
998 paramInfo.name =
"slope";
1000 paramInfo.unit =
"";
1001 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1002 paramInfo.defaultValue =
"1";
1003 paramInfo.description =
"1/f noise exponent";
1004 paramInfos.push_back( paramInfo );
1006 paramInfo.name =
"dt";
1008 paramInfo.unit =
"s";
1009 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1010 paramInfo.defaultValue =
"0";
1011 paramInfo.description =
"Time step";
1012 paramInfos.push_back( paramInfo );
1021 const std::string& aUnit )
1023 std::vector<PARAM::INFO> paramInfos;
1024 PARAM::INFO paramInfo;
1026 paramInfo.name =
"ampl";
1028 paramInfo.unit = aUnit;
1029 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1030 paramInfo.defaultValue =
"0";
1031 paramInfo.description =
"Burst noise amplitude";
1032 paramInfos.push_back( paramInfo );
1034 paramInfo.name =
"tcapt";
1036 paramInfo.unit =
"s";
1037 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1038 paramInfo.defaultValue =
"0";
1039 paramInfo.description =
"Burst noise trap capture time";
1040 paramInfos.push_back( paramInfo );
1042 paramInfo.name =
"temit";
1044 paramInfo.unit =
"s";
1045 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1046 paramInfo.defaultValue =
"0";
1047 paramInfo.description =
"Burst noise trap emission time";
1048 paramInfos.push_back( paramInfo );
1057 const std::string& aUnit )
1059 std::vector<PARAM::INFO> paramInfos;
1060 PARAM::INFO paramInfo;
1062 paramInfo.name =
"ts";
1064 paramInfo.unit =
"s";
1065 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1066 paramInfo.defaultValue =
"";
1067 paramInfo.description =
"Individual voltage duration";
1068 paramInfos.push_back( paramInfo );
1070 paramInfo.name =
"td";
1072 paramInfo.unit =
"s";
1073 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1074 paramInfo.defaultValue =
"0";
1075 paramInfo.description =
"Delay";
1076 paramInfos.push_back( paramInfo );
1078 paramInfo.name =
"range";
1080 paramInfo.unit = aUnit;
1081 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1082 paramInfo.defaultValue =
"1";
1083 paramInfo.description =
"Range";
1084 paramInfos.push_back( paramInfo );
1086 paramInfo.name =
"offset";
1088 paramInfo.unit = aUnit;
1089 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1090 paramInfo.defaultValue =
"0";
1091 paramInfo.description =
"Offset";
1092 paramInfos.push_back( paramInfo );
1101 const std::string& aUnit )
1103 std::vector<PARAM::INFO> paramInfos;
1104 PARAM::INFO paramInfo;
1106 paramInfo.name =
"ts";
1108 paramInfo.unit =
"s";
1109 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1110 paramInfo.defaultValue =
"";
1111 paramInfo.description =
"Individual voltage duration";
1112 paramInfos.push_back( paramInfo );
1114 paramInfo.name =
"td";
1116 paramInfo.unit =
"s";
1117 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1118 paramInfo.defaultValue =
"0";
1119 paramInfo.description =
"Delay";
1120 paramInfos.push_back( paramInfo );
1122 paramInfo.name =
"stddev";
1124 paramInfo.unit = aUnit;
1125 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1126 paramInfo.defaultValue =
"1";
1127 paramInfo.description =
"Standard deviation";
1128 paramInfos.push_back( paramInfo );
1130 paramInfo.name =
"mean";
1132 paramInfo.unit = aUnit;
1133 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1134 paramInfo.defaultValue =
"0";
1135 paramInfo.description =
"Mean";
1136 paramInfos.push_back( paramInfo );
1145 const std::string& aUnit )
1147 std::vector<PARAM::INFO> paramInfos;
1148 PARAM::INFO paramInfo;
1150 paramInfo.name =
"ts";
1152 paramInfo.unit =
"s";
1153 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1154 paramInfo.defaultValue =
"";
1155 paramInfo.description =
"Individual voltage duration";
1156 paramInfos.push_back( paramInfo );
1158 paramInfo.name =
"td";
1160 paramInfo.unit =
"s";
1161 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1162 paramInfo.defaultValue =
"0";
1163 paramInfo.description =
"Delay";
1164 paramInfos.push_back( paramInfo );
1166 paramInfo.name =
"mean";
1168 paramInfo.unit = aUnit;
1169 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1170 paramInfo.defaultValue =
"1";
1171 paramInfo.description =
"Mean";
1172 paramInfos.push_back( paramInfo );
1174 paramInfo.name =
"offset";
1176 paramInfo.unit = aUnit;
1177 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1178 paramInfo.defaultValue =
"0";
1179 paramInfo.description =
"Offset";
1180 paramInfos.push_back( paramInfo );
1189 const std::string& aUnit )
1191 std::vector<PARAM::INFO> paramInfos;
1192 PARAM::INFO paramInfo;
1194 paramInfo.name =
"ts";
1196 paramInfo.unit =
"s";
1197 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1198 paramInfo.defaultValue =
"";
1199 paramInfo.description =
"Individual voltage duration";
1200 paramInfos.push_back( paramInfo );
1202 paramInfo.name =
"td";
1204 paramInfo.unit =
"s";
1205 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1206 paramInfo.defaultValue =
"0";
1207 paramInfo.description =
"Delay";
1208 paramInfos.push_back( paramInfo );
1210 paramInfo.name =
"lambda";
1212 paramInfo.unit = aUnit;
1213 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1214 paramInfo.defaultValue =
"1";
1215 paramInfo.description =
"Lambda";
1216 paramInfos.push_back( paramInfo );
1218 paramInfo.name =
"offset";
1220 paramInfo.unit = aUnit;
1221 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1222 paramInfo.defaultValue =
"0";
1223 paramInfo.description =
"Offset";
1224 paramInfos.push_back( paramInfo );
1233 PARAM::INFO paramInfo;
1235 paramInfo.name =
"ac";
1237 paramInfo.unit = aUnit;
1238 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1239 paramInfo.defaultValue =
"0";
1240 paramInfo.description =
"AC magnitude";
1241 aParamInfos.push_back( paramInfo );
1243 paramInfo.name =
"ph";
1245 paramInfo.unit =
"°";
1246 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1247 paramInfo.defaultValue =
"0";
1248 paramInfo.description =
"AC phase";
1249 aParamInfos.push_back( paramInfo );
1253 const std::string& aUnit )
1255 PARAM::INFO paramInfo;
1257 if( !strcmp( aUnit.c_str(),
"V" ) )
1259 paramInfo.name =
"portnum";
1261 paramInfo.unit =
"";
1262 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1263 paramInfo.defaultValue =
"";
1264 paramInfo.description =
"Port number";
1265 aParamInfos.push_back( paramInfo );
1267 paramInfo.name =
"z0";
1269 paramInfo.unit =
"Ohm";
1270 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1271 paramInfo.defaultValue =
"";
1272 paramInfo.description =
"Internal impedance";
1273 aParamInfos.push_back( paramInfo );
1281 return {
"+",
"-",
"C+",
"C-" };
1283 return {
"+",
"-" };
1290 case SIM_MODEL::TYPE::V:
1291 case SIM_MODEL::TYPE::I:
static void appendAcParamInfos(std::vector< PARAM::INFO > &aParamInfos, const std::string &aUnit)
static std::vector< PARAM::INFO > makeBurstNoiseParamInfos(const std::string &aPrefix, const std::string &aUnit)
std::vector< std::string > GetPinNames() const override
const PARAM * GetTunerParam() const override
static const std::vector< PARAM::INFO > & makeParamInfos(TYPE aType)
static std::vector< PARAM::INFO > makeExpParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeAMParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeRandomNormalParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< SIM_MODEL::PARAM::INFO > makeVcParamInfos(const std::string &aGainUnit)
static void appendSpParamInfos(std::vector< PARAM::INFO > &aParamInfos, const std::string &aUnit)
SIM_MODEL_SOURCE(TYPE aType)
static std::vector< PARAM::INFO > makeRandomExpParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeSFFMParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeRandomUniformParamInfos(const std::string &aPrefix, const std::string &aUnit)
void doSetParamValue(int aParamIndex, const std::string &aValue) override
static std::vector< PARAM::INFO > makeRandomPoissonParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeDcParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makePulseParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makePinkNoiseParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makeSinParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< PARAM::INFO > makePwlParamInfos(const std::string &aPrefix, const std::string &aQuantity, const std::string &aUnit)
static std::vector< PARAM::INFO > makeWhiteNoiseParamInfos(const std::string &aPrefix, const std::string &aUnit)
static std::vector< SIM_MODEL::PARAM::INFO > makeCcParamInfos(const std::string &aGainUnit)
void AddParam(const PARAM::INFO &aInfo)
const SPICE_GENERATOR & SpiceGenerator() const
virtual const PARAM & GetParam(unsigned aParamIndex) const
int GetParamCount() const
DEVICE_T GetDeviceType() const
virtual void doSetParamValue(int aParamIndex, const std::string &aValue)
std::vector< PARAM > m_params
void SetParamValue(int aParamIndex, const std::string &aValue, SIM_VALUE::NOTATION aNotation=SIM_VALUE::NOTATION::SI)
static std::string ToSpice(const std::string &aString)
std::string ModelLine(const SPICE_ITEM &aItem) const override
std::string ItemLine(const SPICE_ITEM &aItem) const override
std::string TunerCommand(const SPICE_ITEM &aItem, double aValue) const override
std::string getParamValueString(const std::string &aParamName, const std::string &aDefaultValue) const
virtual std::string ItemName(const SPICE_ITEM &aItem) const
virtual std::string ItemLine(const SPICE_ITEM &aItem) const
const SIM_MODEL & m_model
static bool empty(const wxTextEntryBase *aCtrl)
static bool isSpace(char cc)
Test for whitespace.
bool isWordChar(const wxUniChar &c)
std::vector< FAB_LAYER_COLOR > dummy
bool Matches(const std::string &aName) const
wxString result
Test unit parsing edge cases and error handling.