36 return std::isalnum(
static_cast<unsigned char>( c ) ) != 0 || c ==
'_';
46 std::string rewriteBraceExpression(
const std::string& aBrace )
51 while( pos < aBrace.size() )
53 const char c = aBrace[pos];
54 const bool prevIsWord = pos > 0 &&
isWordChar( aBrace[pos - 1] );
55 const bool digitStart = std::isdigit(
static_cast<unsigned char>( c ) ) != 0;
56 const bool dotDigitStart = c ==
'.' && pos + 1 < aBrace.size()
57 && std::isdigit(
static_cast<unsigned char>( aBrace[pos + 1] ) ) != 0;
59 if( prevIsWord || ( !digitStart && !dotDigitStart ) )
66 const std::size_t numStart = pos;
68 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
71 if( pos < aBrace.size() && aBrace[pos] ==
'.' )
75 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
79 if( pos < aBrace.size() && ( aBrace[pos] ==
'e' || aBrace[pos] ==
'E' ) )
81 const std::size_t expStart = pos++;
83 if( pos < aBrace.size() && ( aBrace[pos] ==
'+' || aBrace[pos] ==
'-' ) )
86 const std::size_t expDigits = pos;
88 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
93 if( pos == expDigits )
100 if( pos < aBrace.size() && std::strchr(
"afpnumkKMGTPE", aBrace[pos] ) !=
nullptr
101 && ( pos + 1 >= aBrace.size()
102 || !std::isalpha(
static_cast<unsigned char>( aBrace[pos + 1] ) ) ) )
121 std::string formatPwlValues(
const std::string& aInput )
128 return std::isspace(
static_cast<unsigned char>( c ) ) != 0;
131 while( pos < aInput.size() )
133 while( pos < aInput.size() &&
isSpace( aInput[pos] ) )
136 if( pos >= aInput.size() )
139 const std::size_t start = pos;
142 while( pos < aInput.size() && ( braceDepth > 0 || !
isSpace( aInput[pos] ) ) )
144 if( aInput[pos] ==
'{' )
146 else if( aInput[pos] ==
'}' && braceDepth > 0 )
152 std::string token = aInput.substr( start, pos - start );
154 if( token.front() ==
'{' )
155 result.append( rewriteBraceExpression( token ) );
178 case SIM_MODEL::TYPE::V:
179 case SIM_MODEL::TYPE::I:
180 result = fmt::format(
"alter @{}={:g}",
203 bool emptyLine =
true;
215 item.
modelName += fmt::format(
"DC {} ", dc );
218 if(
m_model.GetSpiceInfo().functionName !=
""
219 &&
m_model.GetType() != SIM_MODEL::TYPE::V
220 &&
m_model.GetType() != SIM_MODEL::TYPE::I )
222 std::string args =
"";
226 case SIM_MODEL::TYPE::V_PWL:
227 case SIM_MODEL::TYPE::I_PWL:
228 args = formatPwlValues(
m_model.GetParam( 0 ).value );
231 case SIM_MODEL::TYPE::V_WHITENOISE:
232 case SIM_MODEL::TYPE::I_WHITENOISE:
235 args.append(
"0 0 0 0 0 " );
238 case SIM_MODEL::TYPE::V_PINKNOISE:
239 case SIM_MODEL::TYPE::I_PINKNOISE:
244 args.append(
"0 0 0 " );
247 case SIM_MODEL::TYPE::V_BURSTNOISE:
248 case SIM_MODEL::TYPE::I_BURSTNOISE:
249 args.append(
"0 0 0 0 " );
255 case SIM_MODEL::TYPE::V_RANDUNIFORM:
256 case SIM_MODEL::TYPE::I_RANDUNIFORM:
266 case SIM_MODEL::TYPE::V_RANDGAUSSIAN:
267 case SIM_MODEL::TYPE::I_RANDGAUSSIAN:
275 case SIM_MODEL::TYPE::V_RANDEXP:
276 case SIM_MODEL::TYPE::I_RANDEXP:
284 case SIM_MODEL::TYPE::V_RANDPOISSON:
285 case SIM_MODEL::TYPE::I_RANDPOISSON:
294 for(
int ii = 0; ii <
m_model.GetParamCount(); ++ii )
298 if( ac !=
"" && ( param.
Matches(
"ac" ) || param.
Matches(
"ph" ) ) )
304 args.append( argStr +
" " );
311 if(
m_model.GetType() == SIM_MODEL::TYPE::V_PULSE
312 ||
m_model.GetType() == SIM_MODEL::TYPE::I_PULSE )
320 if( !perSet && !npSet )
321 args.append(
"0 1 " );
328 item.
modelName += fmt::format(
"{}( {}) ",
m_model.GetSpiceInfo().functionName, args );
333 case SIM_MODEL::TYPE::V_VCL:
334 case SIM_MODEL::TYPE::I_VCL:
341 case SIM_MODEL::TYPE::V_CCL:
342 case SIM_MODEL::TYPE::I_CCL:
362 item.
modelName += fmt::format(
"AC {} {} ", ac, ph );
365 std::string portnum =
"";
372 item.
modelName += fmt::format(
"portnum {} ", portnum );
380 item.
modelName += fmt::format(
"z0 {} ", z0 );
393 const std::string& aDefaultValue )
const
397 if (
m_model.FindParam( aParamName ) )
422 for(
int paramIndex = aParamIndex; paramIndex <
GetParamCount(); ++paramIndex )
424 m_params.at( aParamIndex ).value =
"";
429 for(
int paramIndex = 0; paramIndex < aParamIndex; ++paramIndex )
431 if(
GetParam( paramIndex ).value ==
"" )
434 wxString defaultValue =
m_params.at( aParamIndex ).info.defaultValue;
436 if( !defaultValue.ToDouble( &
dummy ) )
437 defaultValue = wxT(
"0" );
439 m_params.at( aParamIndex ).value = defaultValue;
500 case TYPE::V:
return vdc;
501 case TYPE::I:
return idc;
502 case TYPE::V_SIN:
return vsin;
503 case TYPE::I_SIN:
return isin;
504 case TYPE::V_PULSE:
return vpulse;
505 case TYPE::I_PULSE:
return ipulse;
506 case TYPE::V_EXP:
return vexp;
507 case TYPE::I_EXP:
return iexp;
508 case TYPE::V_AM:
return vam;
509 case TYPE::I_AM:
return iam;
510 case TYPE::V_SFFM:
return vsffm;
511 case TYPE::I_SFFM:
return isffm;
512 case TYPE::V_VCL:
return vcvs;
513 case TYPE::V_CCL:
return ccvs;
514 case TYPE::V_PWL:
return vpwl;
515 case TYPE::I_VCL:
return vccs;
516 case TYPE::I_CCL:
return cccs;
517 case TYPE::I_PWL:
return ipwl;
518 case TYPE::V_WHITENOISE:
return vwhitenoise;
519 case TYPE::I_WHITENOISE:
return iwhitenoise;
520 case TYPE::V_PINKNOISE:
return vpinknoise;
521 case TYPE::I_PINKNOISE:
return ipinknoise;
522 case TYPE::V_BURSTNOISE:
return vburstnoise;
523 case TYPE::I_BURSTNOISE:
return iburstnoise;
524 case TYPE::V_RANDUNIFORM:
return vrandomuniform;
525 case TYPE::I_RANDUNIFORM:
return irandomuniform;
526 case TYPE::V_RANDGAUSSIAN:
return vrandomnormal;
527 case TYPE::I_RANDGAUSSIAN:
return irandomnormal;
528 case TYPE::V_RANDEXP:
return vrandomexp;
529 case TYPE::I_RANDEXP:
return irandomexp;
530 case TYPE::V_RANDPOISSON:
return vrandompoisson;
531 case TYPE::I_RANDPOISSON:
return irandompoisson;
533 wxFAIL_MSG(
"Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
534 static std::vector<SIM_MODEL::PARAM::INFO>
empty;
541 const std::string& aUnit )
543 std::vector<PARAM::INFO> paramInfos;
544 PARAM::INFO paramInfo;
546 paramInfo.name =
"dc";
548 paramInfo.unit = aUnit;
549 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
550 paramInfo.defaultValue =
"0";
551 paramInfo.description =
"DC value";
552 paramInfos.push_back( paramInfo );
561 const std::string& aUnit )
563 std::vector<PARAM::INFO> paramInfos;
564 PARAM::INFO paramInfo;
566 paramInfo.name =
"dc";
568 paramInfo.unit = aUnit;
569 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
570 paramInfo.defaultValue =
"";
571 paramInfo.description =
"DC offset";
572 paramInfos.push_back( paramInfo );
574 paramInfo.name =
"ampl";
576 paramInfo.unit = aUnit;
577 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
578 paramInfo.defaultValue =
"";
579 paramInfo.description =
"Amplitude";
580 paramInfos.push_back( paramInfo );
582 paramInfo.name =
"f";
584 paramInfo.unit =
"Hz";
585 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
586 paramInfo.defaultValue =
"1/tstop";
587 paramInfo.description =
"Frequency";
588 paramInfos.push_back( paramInfo );
590 paramInfo.name =
"td";
592 paramInfo.unit =
"s";
593 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
594 paramInfo.defaultValue =
"0";
595 paramInfo.description =
"Delay";
596 paramInfos.push_back( paramInfo );
598 paramInfo.name =
"theta";
600 paramInfo.unit =
"1/s";
601 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
602 paramInfo.defaultValue =
"0";
603 paramInfo.description =
"Damping factor";
604 paramInfos.push_back( paramInfo );
606 paramInfo.name =
"phase";
608 paramInfo.unit =
"°";
609 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
610 paramInfo.defaultValue =
"0";
611 paramInfo.description =
"Phase";
612 paramInfos.push_back( paramInfo );
621 const std::string& aUnit )
623 std::vector<PARAM::INFO> paramInfos;
624 PARAM::INFO paramInfo;
626 paramInfo.name = aPrefix +
"1";
628 paramInfo.unit = aUnit;
629 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
630 paramInfo.defaultValue =
"";
631 paramInfo.description =
"Initial value";
632 paramInfos.push_back( paramInfo );
634 paramInfo.name = aPrefix +
"2";
636 paramInfo.unit = aUnit;
637 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
638 paramInfo.defaultValue =
"";
639 paramInfo.description =
"Pulsed value";
640 paramInfos.push_back( paramInfo );
642 paramInfo.name =
"td";
644 paramInfo.unit =
"s";
645 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
646 paramInfo.defaultValue =
"0";
647 paramInfo.description =
"Delay";
648 paramInfos.push_back( paramInfo );
650 paramInfo.name =
"tr";
652 paramInfo.unit =
"s";
653 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
654 paramInfo.defaultValue =
"tstep";
655 paramInfo.description =
"Rise time";
656 paramInfos.push_back( paramInfo );
658 paramInfo.name =
"tf";
660 paramInfo.unit =
"s";
661 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
662 paramInfo.defaultValue =
"tstep";
663 paramInfo.description =
"Fall time";
664 paramInfos.push_back( paramInfo );
666 paramInfo.name =
"tw";
668 paramInfo.unit =
"s";
669 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
670 paramInfo.defaultValue =
"tstop";
671 paramInfo.description =
"Pulse width";
672 paramInfos.push_back( paramInfo );
674 paramInfo.name =
"per";
676 paramInfo.unit =
"s";
677 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
678 paramInfo.defaultValue =
"tstop";
679 paramInfo.description =
"Period";
680 paramInfos.push_back( paramInfo );
682 paramInfo.name =
"np";
685 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
686 paramInfo.defaultValue =
"";
687 paramInfo.description =
"Number of pulses";
688 paramInfos.push_back( paramInfo );
697 const std::string& aUnit )
699 std::vector<PARAM::INFO> paramInfos;
700 PARAM::INFO paramInfo;
702 paramInfo.name = aPrefix +
"1";
704 paramInfo.unit = aUnit;
705 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
706 paramInfo.defaultValue =
"";
707 paramInfo.description =
"Initial value";
708 paramInfos.push_back( paramInfo );
710 paramInfo.name = aPrefix +
"2";
712 paramInfo.unit = aUnit;
713 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
714 paramInfo.defaultValue =
"";
715 paramInfo.description =
"Pulsed value";
716 paramInfos.push_back( paramInfo );
718 paramInfo.name =
"td1";
720 paramInfo.unit =
"s";
721 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
722 paramInfo.defaultValue =
"0";
723 paramInfo.description =
"Rise delay time";
724 paramInfos.push_back( paramInfo );
726 paramInfo.name =
"tau1";
728 paramInfo.unit =
"s";
729 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
730 paramInfo.defaultValue =
"tstep";
731 paramInfo.description =
"Rise time constant";
732 paramInfos.push_back( paramInfo );
734 paramInfo.name =
"td2";
736 paramInfo.unit =
"s";
737 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
738 paramInfo.defaultValue =
"td1+tstep";
739 paramInfo.description =
"Fall delay time";
740 paramInfos.push_back( paramInfo );
742 paramInfo.name =
"tau2";
744 paramInfo.unit =
"s";
745 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
746 paramInfo.defaultValue =
"tstep";
747 paramInfo.description =
"Fall time constant";
748 paramInfos.push_back( paramInfo );
757 const std::string& aUnit )
759 std::vector<PARAM::INFO> paramInfos;
760 PARAM::INFO paramInfo;
762 paramInfo.name =
"vo";
764 paramInfo.unit = aUnit;
765 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
766 paramInfo.defaultValue =
"";
767 paramInfo.description =
"Overall offset";
768 paramInfos.push_back( paramInfo );
770 paramInfo.name =
"vmo";
772 paramInfo.unit = aUnit;
773 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
774 paramInfo.defaultValue =
"";
775 paramInfo.description =
"Modulation signal offset";
776 paramInfos.push_back( paramInfo );
778 paramInfo.name =
"vma";
780 paramInfo.unit = aUnit;
781 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
782 paramInfo.defaultValue =
"";
783 paramInfo.description =
"Modulation signal amplitude";
784 paramInfos.push_back( paramInfo );
786 paramInfo.name =
"fm";
788 paramInfo.unit =
"Hz";
789 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
790 paramInfo.defaultValue =
"5/tstop";
791 paramInfo.description =
"Modulation signal frequency";
792 paramInfos.push_back( paramInfo );
794 paramInfo.name =
"fc";
796 paramInfo.unit =
"Hz";
797 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
798 paramInfo.defaultValue =
"500/tstop";
799 paramInfo.description =
"Carrier signal frequency";
800 paramInfos.push_back( paramInfo );
802 paramInfo.name =
"td";
804 paramInfo.unit =
"s";
805 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
806 paramInfo.defaultValue =
"0";
807 paramInfo.description =
"Overall delay";
808 paramInfos.push_back( paramInfo );
810 paramInfo.name =
"phasem";
812 paramInfo.unit =
"°";
813 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
814 paramInfo.defaultValue =
"0";
815 paramInfo.description =
"Modulation signal phase";
816 paramInfos.push_back( paramInfo );
818 paramInfo.name =
"phasec";
820 paramInfo.unit =
"°";
821 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
822 paramInfo.defaultValue =
"0";
823 paramInfo.description =
"Carrier signal phase";
824 paramInfos.push_back( paramInfo );
833 const std::string& aUnit )
835 std::vector<PARAM::INFO> paramInfos;
836 PARAM::INFO paramInfo;
838 paramInfo.name =
"vo";
840 paramInfo.unit = aUnit;
841 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
842 paramInfo.defaultValue =
"";
843 paramInfo.description =
"DC offset";
844 paramInfos.push_back( paramInfo );
846 paramInfo.name =
"va";
848 paramInfo.unit = aUnit;
849 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
850 paramInfo.defaultValue =
"";
851 paramInfo.description =
"Amplitude";
852 paramInfos.push_back( paramInfo );
854 paramInfo.name =
"fm";
856 paramInfo.unit =
"Hz";
857 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
858 paramInfo.defaultValue =
"5/tstop";
859 paramInfo.description =
"Modulating frequency";
860 paramInfos.push_back( paramInfo );
862 paramInfo.name =
"mdi";
865 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
866 paramInfo.defaultValue =
"";
867 paramInfo.description =
"Modulation index";
868 paramInfos.push_back( paramInfo );
870 paramInfo.name =
"fc";
872 paramInfo.unit =
"Hz";
873 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
874 paramInfo.defaultValue =
"500/tstop";
875 paramInfo.description =
"Carrier frequency";
876 paramInfos.push_back( paramInfo );
878 paramInfo.name =
"phasem";
880 paramInfo.unit =
"°";
881 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
882 paramInfo.defaultValue =
"0";
883 paramInfo.description =
"Modulating signal phase";
884 paramInfos.push_back( paramInfo );
886 paramInfo.name =
"phasec";
888 paramInfo.unit =
"°";
889 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
890 paramInfo.defaultValue =
"0";
891 paramInfo.description =
"Carrier signal phase";
892 paramInfos.push_back( paramInfo );
902 std::vector<PARAM::INFO> paramInfos;
903 PARAM::INFO paramInfo;
905 paramInfo.name =
"gain";
908 paramInfo.unit = aGainUnit;
909 paramInfo.description =
"Gain";
910 paramInfos.push_back( paramInfo );
912 paramInfo.name =
"control";
916 paramInfo.description =
"Controlling voltage source";
917 paramInfos.push_back( paramInfo );
925 std::vector<PARAM::INFO> paramInfos;
926 PARAM::INFO paramInfo;
928 paramInfo.name =
"gain";
931 paramInfo.unit = aGainUnit;
932 paramInfo.description =
"Gain";
933 paramInfos.push_back( paramInfo );
940 const std::string& aQuantity,
941 const std::string& aUnit )
943 std::vector<PARAM::INFO> paramInfos;
944 PARAM::INFO paramInfo;
946 paramInfo.name =
"pwl";
948 paramInfo.unit =
"s," + aUnit;
949 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
950 paramInfo.defaultValue =
"";
951 paramInfo.description = aUnit ==
"V" ?
"Time-voltage points" :
"Time-current points";
952 paramInfos.push_back( paramInfo );
961 const std::string& aUnit )
963 std::vector<PARAM::INFO> paramInfos;
964 PARAM::INFO paramInfo;
966 paramInfo.name =
"rms";
968 paramInfo.unit = aUnit;
969 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
970 paramInfo.defaultValue =
"0";
971 paramInfo.description =
"White noise RMS amplitude";
972 paramInfos.push_back( paramInfo );
974 paramInfo.name =
"dt";
976 paramInfo.unit =
"s";
977 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
978 paramInfo.defaultValue =
"0";
979 paramInfo.description =
"Time step";
980 paramInfos.push_back( paramInfo );
989 const std::string& aUnit )
991 std::vector<PARAM::INFO> paramInfos;
992 PARAM::INFO paramInfo;
994 paramInfo.name =
"rms";
997 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
998 paramInfo.defaultValue =
"0";
999 paramInfo.description =
"1/f noise RMS amplitude";
1000 paramInfos.push_back( paramInfo );
1002 paramInfo.name =
"slope";
1004 paramInfo.unit =
"";
1005 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1006 paramInfo.defaultValue =
"1";
1007 paramInfo.description =
"1/f noise exponent";
1008 paramInfos.push_back( paramInfo );
1010 paramInfo.name =
"dt";
1012 paramInfo.unit =
"s";
1013 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1014 paramInfo.defaultValue =
"0";
1015 paramInfo.description =
"Time step";
1016 paramInfos.push_back( paramInfo );
1025 const std::string& aUnit )
1027 std::vector<PARAM::INFO> paramInfos;
1028 PARAM::INFO paramInfo;
1030 paramInfo.name =
"ampl";
1032 paramInfo.unit = aUnit;
1033 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1034 paramInfo.defaultValue =
"0";
1035 paramInfo.description =
"Burst noise amplitude";
1036 paramInfos.push_back( paramInfo );
1038 paramInfo.name =
"tcapt";
1040 paramInfo.unit =
"s";
1041 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1042 paramInfo.defaultValue =
"0";
1043 paramInfo.description =
"Burst noise trap capture time";
1044 paramInfos.push_back( paramInfo );
1046 paramInfo.name =
"temit";
1048 paramInfo.unit =
"s";
1049 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1050 paramInfo.defaultValue =
"0";
1051 paramInfo.description =
"Burst noise trap emission time";
1052 paramInfos.push_back( paramInfo );
1061 const std::string& aUnit )
1063 std::vector<PARAM::INFO> paramInfos;
1064 PARAM::INFO paramInfo;
1066 paramInfo.name =
"ts";
1068 paramInfo.unit =
"s";
1069 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1070 paramInfo.defaultValue =
"";
1071 paramInfo.description =
"Individual voltage duration";
1072 paramInfos.push_back( paramInfo );
1074 paramInfo.name =
"td";
1076 paramInfo.unit =
"s";
1077 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1078 paramInfo.defaultValue =
"0";
1079 paramInfo.description =
"Delay";
1080 paramInfos.push_back( paramInfo );
1082 paramInfo.name =
"range";
1084 paramInfo.unit = aUnit;
1085 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1086 paramInfo.defaultValue =
"1";
1087 paramInfo.description =
"Range";
1088 paramInfos.push_back( paramInfo );
1090 paramInfo.name =
"offset";
1092 paramInfo.unit = aUnit;
1093 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1094 paramInfo.defaultValue =
"0";
1095 paramInfo.description =
"Offset";
1096 paramInfos.push_back( paramInfo );
1105 const std::string& aUnit )
1107 std::vector<PARAM::INFO> paramInfos;
1108 PARAM::INFO paramInfo;
1110 paramInfo.name =
"ts";
1112 paramInfo.unit =
"s";
1113 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1114 paramInfo.defaultValue =
"";
1115 paramInfo.description =
"Individual voltage duration";
1116 paramInfos.push_back( paramInfo );
1118 paramInfo.name =
"td";
1120 paramInfo.unit =
"s";
1121 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1122 paramInfo.defaultValue =
"0";
1123 paramInfo.description =
"Delay";
1124 paramInfos.push_back( paramInfo );
1126 paramInfo.name =
"stddev";
1128 paramInfo.unit = aUnit;
1129 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1130 paramInfo.defaultValue =
"1";
1131 paramInfo.description =
"Standard deviation";
1132 paramInfos.push_back( paramInfo );
1134 paramInfo.name =
"mean";
1136 paramInfo.unit = aUnit;
1137 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1138 paramInfo.defaultValue =
"0";
1139 paramInfo.description =
"Mean";
1140 paramInfos.push_back( paramInfo );
1149 const std::string& aUnit )
1151 std::vector<PARAM::INFO> paramInfos;
1152 PARAM::INFO paramInfo;
1154 paramInfo.name =
"ts";
1156 paramInfo.unit =
"s";
1157 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1158 paramInfo.defaultValue =
"";
1159 paramInfo.description =
"Individual voltage duration";
1160 paramInfos.push_back( paramInfo );
1162 paramInfo.name =
"td";
1164 paramInfo.unit =
"s";
1165 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1166 paramInfo.defaultValue =
"0";
1167 paramInfo.description =
"Delay";
1168 paramInfos.push_back( paramInfo );
1170 paramInfo.name =
"mean";
1172 paramInfo.unit = aUnit;
1173 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1174 paramInfo.defaultValue =
"1";
1175 paramInfo.description =
"Mean";
1176 paramInfos.push_back( paramInfo );
1178 paramInfo.name =
"offset";
1180 paramInfo.unit = aUnit;
1181 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1182 paramInfo.defaultValue =
"0";
1183 paramInfo.description =
"Offset";
1184 paramInfos.push_back( paramInfo );
1193 const std::string& aUnit )
1195 std::vector<PARAM::INFO> paramInfos;
1196 PARAM::INFO paramInfo;
1198 paramInfo.name =
"ts";
1200 paramInfo.unit =
"s";
1201 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1202 paramInfo.defaultValue =
"";
1203 paramInfo.description =
"Individual voltage duration";
1204 paramInfos.push_back( paramInfo );
1206 paramInfo.name =
"td";
1208 paramInfo.unit =
"s";
1209 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1210 paramInfo.defaultValue =
"0";
1211 paramInfo.description =
"Delay";
1212 paramInfos.push_back( paramInfo );
1214 paramInfo.name =
"lambda";
1216 paramInfo.unit = aUnit;
1217 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1218 paramInfo.defaultValue =
"1";
1219 paramInfo.description =
"Lambda";
1220 paramInfos.push_back( paramInfo );
1222 paramInfo.name =
"offset";
1224 paramInfo.unit = aUnit;
1225 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1226 paramInfo.defaultValue =
"0";
1227 paramInfo.description =
"Offset";
1228 paramInfos.push_back( paramInfo );
1237 PARAM::INFO paramInfo;
1239 paramInfo.name =
"ac";
1241 paramInfo.unit = aUnit;
1242 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1243 paramInfo.defaultValue =
"0";
1244 paramInfo.description =
"AC magnitude";
1245 aParamInfos.push_back( paramInfo );
1247 paramInfo.name =
"ph";
1249 paramInfo.unit =
"°";
1250 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1251 paramInfo.defaultValue =
"0";
1252 paramInfo.description =
"AC phase";
1253 aParamInfos.push_back( paramInfo );
1257 const std::string& aUnit )
1259 PARAM::INFO paramInfo;
1261 if( !strcmp( aUnit.c_str(),
"V" ) )
1263 paramInfo.name =
"portnum";
1265 paramInfo.unit =
"";
1266 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1267 paramInfo.defaultValue =
"";
1268 paramInfo.description =
"Port number";
1269 aParamInfos.push_back( paramInfo );
1271 paramInfo.name =
"z0";
1273 paramInfo.unit =
"Ohm";
1274 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1275 paramInfo.defaultValue =
"";
1276 paramInfo.description =
"Internal impedance";
1277 aParamInfos.push_back( paramInfo );
1285 return {
"+",
"-",
"C+",
"C-" };
1287 return {
"+",
"-" };
1294 case SIM_MODEL::TYPE::V:
1295 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.