25#include <fmt/format.h>
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 ==
'.'
53 && pos + 1 < aBrace.size()
54 && std::isdigit(
static_cast<unsigned char>( aBrace[pos + 1] ) ) != 0;
56 if( prevIsWord || ( !digitStart && !dotDigitStart ) )
63 const std::size_t numStart = pos;
65 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
68 if( pos < aBrace.size() && aBrace[pos] ==
'.' )
72 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
76 if( pos < aBrace.size() && ( aBrace[pos] ==
'e' || aBrace[pos] ==
'E' ) )
78 const std::size_t expStart = pos++;
80 if( pos < aBrace.size() && ( aBrace[pos] ==
'+' || aBrace[pos] ==
'-' ) )
83 const std::size_t expDigits = pos;
85 while( pos < aBrace.size() && std::isdigit(
static_cast<unsigned char>( aBrace[pos] ) ) )
90 if( pos == expDigits )
97 if( pos < aBrace.size()
98 && std::strchr(
"afpnumkKMGTPE", aBrace[pos] ) !=
nullptr
99 && ( pos + 1 >= aBrace.size() || !std::isalpha(
static_cast<unsigned char>( aBrace[pos + 1] ) ) ) )
118 std::string formatPwlValues(
const std::string& aInput )
126 return std::isspace(
static_cast<unsigned char>( c ) ) != 0;
129 while( pos < aInput.size() )
131 while( pos < aInput.size() &&
isSpace( aInput[pos] ) )
134 if( pos >= aInput.size() )
137 const std::size_t start = pos;
140 while( pos < aInput.size() && ( braceDepth > 0 || !
isSpace( aInput[pos] ) ) )
142 if( aInput[pos] ==
'{' )
144 else if( aInput[pos] ==
'}' && braceDepth > 0 )
150 std::string token = aInput.substr( start, pos - start );
152 if( token.front() ==
'{' )
153 result.append( rewriteBraceExpression( token ) );
176 case SIM_MODEL::TYPE::V:
177 case SIM_MODEL::TYPE::I:
178 result = fmt::format(
"alter @{}={:g}",
201 bool emptyLine =
true;
213 item.
modelName += fmt::format(
"DC {} ", dc );
216 if(
m_model.GetSpiceInfo().functionName !=
""
217 &&
m_model.GetType() != SIM_MODEL::TYPE::V
218 &&
m_model.GetType() != SIM_MODEL::TYPE::I )
220 std::string args =
"";
224 case SIM_MODEL::TYPE::V_PWL:
225 case SIM_MODEL::TYPE::I_PWL:
226 args = formatPwlValues(
m_model.GetParam( 0 ).value );
229 case SIM_MODEL::TYPE::V_WHITENOISE:
230 case SIM_MODEL::TYPE::I_WHITENOISE:
233 args.append(
"0 0 0 0 0 " );
236 case SIM_MODEL::TYPE::V_PINKNOISE:
237 case SIM_MODEL::TYPE::I_PINKNOISE:
242 args.append(
"0 0 0 " );
245 case SIM_MODEL::TYPE::V_BURSTNOISE:
246 case SIM_MODEL::TYPE::I_BURSTNOISE:
247 args.append(
"0 0 0 0 " );
253 case SIM_MODEL::TYPE::V_RANDUNIFORM:
254 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 );
330 case SIM_MODEL::TYPE::V_VCL:
331 case SIM_MODEL::TYPE::I_VCL:
336 case SIM_MODEL::TYPE::V_CCL:
337 case SIM_MODEL::TYPE::I_CCL:
357 item.
modelName += fmt::format(
"AC {} {} ", ac, ph );
360 std::string portnum =
"";
367 item.
modelName += fmt::format(
"portnum {} ", portnum );
375 item.
modelName += fmt::format(
"z0 {} ", z0 );
386 const std::string& aDefaultValue )
const
390 if (
m_model.FindParam( aParamName ) )
415 for(
int paramIndex = aParamIndex; paramIndex <
GetParamCount(); ++paramIndex )
416 m_params.at( aParamIndex ).value =
"";
420 for(
int paramIndex = 0; paramIndex < aParamIndex; ++paramIndex )
422 if(
GetParam( paramIndex ).value ==
"" )
425 wxString defaultValue =
m_params.at( aParamIndex ).info.defaultValue;
427 if( !defaultValue.ToDouble( &
dummy ) )
428 defaultValue = wxT(
"0" );
430 m_params.at( aParamIndex ).value = defaultValue;
491 case TYPE::V:
return vdc;
492 case TYPE::I:
return idc;
493 case TYPE::V_SIN:
return vsin;
494 case TYPE::I_SIN:
return isin;
495 case TYPE::V_PULSE:
return vpulse;
496 case TYPE::I_PULSE:
return ipulse;
497 case TYPE::V_EXP:
return vexp;
498 case TYPE::I_EXP:
return iexp;
499 case TYPE::V_AM:
return vam;
500 case TYPE::I_AM:
return iam;
501 case TYPE::V_SFFM:
return vsffm;
502 case TYPE::I_SFFM:
return isffm;
503 case TYPE::V_VCL:
return vcvs;
504 case TYPE::V_CCL:
return ccvs;
505 case TYPE::V_PWL:
return vpwl;
506 case TYPE::I_VCL:
return vccs;
507 case TYPE::I_CCL:
return cccs;
508 case TYPE::I_PWL:
return ipwl;
509 case TYPE::V_WHITENOISE:
return vwhitenoise;
510 case TYPE::I_WHITENOISE:
return iwhitenoise;
511 case TYPE::V_PINKNOISE:
return vpinknoise;
512 case TYPE::I_PINKNOISE:
return ipinknoise;
513 case TYPE::V_BURSTNOISE:
return vburstnoise;
514 case TYPE::I_BURSTNOISE:
return iburstnoise;
515 case TYPE::V_RANDUNIFORM:
return vrandomuniform;
516 case TYPE::I_RANDUNIFORM:
return irandomuniform;
517 case TYPE::V_RANDGAUSSIAN:
return vrandomnormal;
518 case TYPE::I_RANDGAUSSIAN:
return irandomnormal;
519 case TYPE::V_RANDEXP:
return vrandomexp;
520 case TYPE::I_RANDEXP:
return irandomexp;
521 case TYPE::V_RANDPOISSON:
return vrandompoisson;
522 case TYPE::I_RANDPOISSON:
return irandompoisson;
524 wxFAIL_MSG(
"Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
525 static std::vector<SIM_MODEL::PARAM::INFO>
empty;
532 const std::string& aUnit )
534 std::vector<PARAM::INFO> paramInfos;
535 PARAM::INFO paramInfo;
537 paramInfo.name =
"dc";
539 paramInfo.unit = aUnit;
540 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
541 paramInfo.defaultValue =
"0";
542 paramInfo.description =
"DC value";
543 paramInfos.push_back( paramInfo );
552 const std::string& aUnit )
554 std::vector<PARAM::INFO> paramInfos;
555 PARAM::INFO paramInfo;
557 paramInfo.name =
"dc";
559 paramInfo.unit = aUnit;
560 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
561 paramInfo.defaultValue =
"";
562 paramInfo.description =
"DC offset";
563 paramInfos.push_back( paramInfo );
565 paramInfo.name =
"ampl";
567 paramInfo.unit = aUnit;
568 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
569 paramInfo.defaultValue =
"";
570 paramInfo.description =
"Amplitude";
571 paramInfos.push_back( paramInfo );
573 paramInfo.name =
"f";
575 paramInfo.unit =
"Hz";
576 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
577 paramInfo.defaultValue =
"1/tstop";
578 paramInfo.description =
"Frequency";
579 paramInfos.push_back( paramInfo );
581 paramInfo.name =
"td";
583 paramInfo.unit =
"s";
584 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
585 paramInfo.defaultValue =
"0";
586 paramInfo.description =
"Delay";
587 paramInfos.push_back( paramInfo );
589 paramInfo.name =
"theta";
591 paramInfo.unit =
"1/s";
592 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
593 paramInfo.defaultValue =
"0";
594 paramInfo.description =
"Damping factor";
595 paramInfos.push_back( paramInfo );
597 paramInfo.name =
"phase";
599 paramInfo.unit =
"°";
600 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
601 paramInfo.defaultValue =
"0";
602 paramInfo.description =
"Phase";
603 paramInfos.push_back( paramInfo );
612 const std::string& aUnit )
614 std::vector<PARAM::INFO> paramInfos;
615 PARAM::INFO paramInfo;
617 paramInfo.name = aPrefix +
"1";
619 paramInfo.unit = aUnit;
620 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
621 paramInfo.defaultValue =
"";
622 paramInfo.description =
"Initial value";
623 paramInfos.push_back( paramInfo );
625 paramInfo.name = aPrefix +
"2";
627 paramInfo.unit = aUnit;
628 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
629 paramInfo.defaultValue =
"";
630 paramInfo.description =
"Pulsed value";
631 paramInfos.push_back( paramInfo );
633 paramInfo.name =
"td";
635 paramInfo.unit =
"s";
636 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
637 paramInfo.defaultValue =
"0";
638 paramInfo.description =
"Delay";
639 paramInfos.push_back( paramInfo );
641 paramInfo.name =
"tr";
643 paramInfo.unit =
"s";
644 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
645 paramInfo.defaultValue =
"tstep";
646 paramInfo.description =
"Rise time";
647 paramInfos.push_back( paramInfo );
649 paramInfo.name =
"tf";
651 paramInfo.unit =
"s";
652 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
653 paramInfo.defaultValue =
"tstep";
654 paramInfo.description =
"Fall time";
655 paramInfos.push_back( paramInfo );
657 paramInfo.name =
"tw";
659 paramInfo.unit =
"s";
660 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
661 paramInfo.defaultValue =
"tstop";
662 paramInfo.description =
"Pulse width";
663 paramInfos.push_back( paramInfo );
665 paramInfo.name =
"per";
667 paramInfo.unit =
"s";
668 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
669 paramInfo.defaultValue =
"tstop";
670 paramInfo.description =
"Period";
671 paramInfos.push_back( paramInfo );
673 paramInfo.name =
"np";
676 paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
677 paramInfo.defaultValue =
"";
678 paramInfo.description =
"Number of pulses";
679 paramInfos.push_back( paramInfo );
688 const std::string& aUnit )
690 std::vector<PARAM::INFO> paramInfos;
691 PARAM::INFO paramInfo;
693 paramInfo.name = aPrefix +
"1";
695 paramInfo.unit = aUnit;
696 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
697 paramInfo.defaultValue =
"";
698 paramInfo.description =
"Initial value";
699 paramInfos.push_back( paramInfo );
701 paramInfo.name = aPrefix +
"2";
703 paramInfo.unit = aUnit;
704 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
705 paramInfo.defaultValue =
"";
706 paramInfo.description =
"Pulsed value";
707 paramInfos.push_back( paramInfo );
709 paramInfo.name =
"td1";
711 paramInfo.unit =
"s";
712 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
713 paramInfo.defaultValue =
"0";
714 paramInfo.description =
"Rise delay time";
715 paramInfos.push_back( paramInfo );
717 paramInfo.name =
"tau1";
719 paramInfo.unit =
"s";
720 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
721 paramInfo.defaultValue =
"tstep";
722 paramInfo.description =
"Rise time constant";
723 paramInfos.push_back( paramInfo );
725 paramInfo.name =
"td2";
727 paramInfo.unit =
"s";
728 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
729 paramInfo.defaultValue =
"td1+tstep";
730 paramInfo.description =
"Fall delay time";
731 paramInfos.push_back( paramInfo );
733 paramInfo.name =
"tau2";
735 paramInfo.unit =
"s";
736 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
737 paramInfo.defaultValue =
"tstep";
738 paramInfo.description =
"Fall time constant";
739 paramInfos.push_back( paramInfo );
748 const std::string& aUnit )
750 std::vector<PARAM::INFO> paramInfos;
751 PARAM::INFO paramInfo;
753 paramInfo.name =
"vo";
755 paramInfo.unit = aUnit;
756 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
757 paramInfo.defaultValue =
"";
758 paramInfo.description =
"Overall offset";
759 paramInfos.push_back( paramInfo );
761 paramInfo.name =
"vmo";
763 paramInfo.unit = aUnit;
764 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
765 paramInfo.defaultValue =
"";
766 paramInfo.description =
"Modulation signal offset";
767 paramInfos.push_back( paramInfo );
769 paramInfo.name =
"vma";
771 paramInfo.unit = aUnit;
772 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
773 paramInfo.defaultValue =
"";
774 paramInfo.description =
"Modulation signal amplitude";
775 paramInfos.push_back( paramInfo );
777 paramInfo.name =
"fm";
779 paramInfo.unit =
"Hz";
780 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
781 paramInfo.defaultValue =
"5/tstop";
782 paramInfo.description =
"Modulation signal frequency";
783 paramInfos.push_back( paramInfo );
785 paramInfo.name =
"fc";
787 paramInfo.unit =
"Hz";
788 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
789 paramInfo.defaultValue =
"500/tstop";
790 paramInfo.description =
"Carrier signal frequency";
791 paramInfos.push_back( paramInfo );
793 paramInfo.name =
"td";
795 paramInfo.unit =
"s";
796 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
797 paramInfo.defaultValue =
"0";
798 paramInfo.description =
"Overall delay";
799 paramInfos.push_back( paramInfo );
801 paramInfo.name =
"phasem";
803 paramInfo.unit =
"°";
804 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
805 paramInfo.defaultValue =
"0";
806 paramInfo.description =
"Modulation signal phase";
807 paramInfos.push_back( paramInfo );
809 paramInfo.name =
"phasec";
811 paramInfo.unit =
"°";
812 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
813 paramInfo.defaultValue =
"0";
814 paramInfo.description =
"Carrier signal phase";
815 paramInfos.push_back( paramInfo );
824 const std::string& aUnit )
826 std::vector<PARAM::INFO> paramInfos;
827 PARAM::INFO paramInfo;
829 paramInfo.name =
"vo";
831 paramInfo.unit = aUnit;
832 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
833 paramInfo.defaultValue =
"";
834 paramInfo.description =
"DC offset";
835 paramInfos.push_back( paramInfo );
837 paramInfo.name =
"va";
839 paramInfo.unit = aUnit;
840 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
841 paramInfo.defaultValue =
"";
842 paramInfo.description =
"Amplitude";
843 paramInfos.push_back( paramInfo );
845 paramInfo.name =
"fm";
847 paramInfo.unit =
"Hz";
848 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
849 paramInfo.defaultValue =
"5/tstop";
850 paramInfo.description =
"Modulating frequency";
851 paramInfos.push_back( paramInfo );
853 paramInfo.name =
"mdi";
856 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
857 paramInfo.defaultValue =
"";
858 paramInfo.description =
"Modulation index";
859 paramInfos.push_back( paramInfo );
861 paramInfo.name =
"fc";
863 paramInfo.unit =
"Hz";
864 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
865 paramInfo.defaultValue =
"500/tstop";
866 paramInfo.description =
"Carrier frequency";
867 paramInfos.push_back( paramInfo );
869 paramInfo.name =
"phasem";
871 paramInfo.unit =
"°";
872 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
873 paramInfo.defaultValue =
"0";
874 paramInfo.description =
"Modulating signal phase";
875 paramInfos.push_back( paramInfo );
877 paramInfo.name =
"phasec";
879 paramInfo.unit =
"°";
880 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
881 paramInfo.defaultValue =
"0";
882 paramInfo.description =
"Carrier signal phase";
883 paramInfos.push_back( paramInfo );
893 std::vector<PARAM::INFO> paramInfos;
894 PARAM::INFO paramInfo;
896 paramInfo.name =
"gain";
899 paramInfo.unit = aGainUnit;
900 paramInfo.description =
"Gain";
901 paramInfos.push_back( paramInfo );
903 paramInfo.name =
"control";
907 paramInfo.description =
"Controlling voltage source";
908 paramInfos.push_back( paramInfo );
916 std::vector<PARAM::INFO> paramInfos;
917 PARAM::INFO paramInfo;
919 paramInfo.name =
"gain";
922 paramInfo.unit = aGainUnit;
923 paramInfo.description =
"Gain";
924 paramInfos.push_back( paramInfo );
931 const std::string& aQuantity,
932 const std::string& aUnit )
934 std::vector<PARAM::INFO> paramInfos;
935 PARAM::INFO paramInfo;
937 paramInfo.name =
"pwl";
939 paramInfo.unit =
"s," + aUnit;
940 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
941 paramInfo.defaultValue =
"";
942 paramInfo.description = aUnit ==
"V" ?
"Time-voltage points" :
"Time-current points";
943 paramInfos.push_back( paramInfo );
952 const std::string& aUnit )
954 std::vector<PARAM::INFO> paramInfos;
955 PARAM::INFO paramInfo;
957 paramInfo.name =
"rms";
959 paramInfo.unit = aUnit;
960 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
961 paramInfo.defaultValue =
"0";
962 paramInfo.description =
"White noise RMS amplitude";
963 paramInfos.push_back( paramInfo );
965 paramInfo.name =
"dt";
967 paramInfo.unit =
"s";
968 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
969 paramInfo.defaultValue =
"0";
970 paramInfo.description =
"Time step";
971 paramInfos.push_back( paramInfo );
980 const std::string& aUnit )
982 std::vector<PARAM::INFO> paramInfos;
983 PARAM::INFO paramInfo;
985 paramInfo.name =
"rms";
988 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
989 paramInfo.defaultValue =
"0";
990 paramInfo.description =
"1/f noise RMS amplitude";
991 paramInfos.push_back( paramInfo );
993 paramInfo.name =
"slope";
996 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
997 paramInfo.defaultValue =
"1";
998 paramInfo.description =
"1/f noise exponent";
999 paramInfos.push_back( paramInfo );
1001 paramInfo.name =
"dt";
1003 paramInfo.unit =
"s";
1004 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1005 paramInfo.defaultValue =
"0";
1006 paramInfo.description =
"Time step";
1007 paramInfos.push_back( paramInfo );
1016 const std::string& aUnit )
1018 std::vector<PARAM::INFO> paramInfos;
1019 PARAM::INFO paramInfo;
1021 paramInfo.name =
"ampl";
1023 paramInfo.unit = aUnit;
1024 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1025 paramInfo.defaultValue =
"0";
1026 paramInfo.description =
"Burst noise amplitude";
1027 paramInfos.push_back( paramInfo );
1029 paramInfo.name =
"tcapt";
1031 paramInfo.unit =
"s";
1032 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1033 paramInfo.defaultValue =
"0";
1034 paramInfo.description =
"Burst noise trap capture time";
1035 paramInfos.push_back( paramInfo );
1037 paramInfo.name =
"temit";
1039 paramInfo.unit =
"s";
1040 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1041 paramInfo.defaultValue =
"0";
1042 paramInfo.description =
"Burst noise trap emission time";
1043 paramInfos.push_back( paramInfo );
1052 const std::string& aUnit )
1054 std::vector<PARAM::INFO> paramInfos;
1055 PARAM::INFO paramInfo;
1057 paramInfo.name =
"ts";
1059 paramInfo.unit =
"s";
1060 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1061 paramInfo.defaultValue =
"";
1062 paramInfo.description =
"Individual voltage duration";
1063 paramInfos.push_back( paramInfo );
1065 paramInfo.name =
"td";
1067 paramInfo.unit =
"s";
1068 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1069 paramInfo.defaultValue =
"0";
1070 paramInfo.description =
"Delay";
1071 paramInfos.push_back( paramInfo );
1073 paramInfo.name =
"range";
1075 paramInfo.unit = aUnit;
1076 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1077 paramInfo.defaultValue =
"1";
1078 paramInfo.description =
"Range";
1079 paramInfos.push_back( paramInfo );
1081 paramInfo.name =
"offset";
1083 paramInfo.unit = aUnit;
1084 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1085 paramInfo.defaultValue =
"0";
1086 paramInfo.description =
"Offset";
1087 paramInfos.push_back( paramInfo );
1096 const std::string& aUnit )
1098 std::vector<PARAM::INFO> paramInfos;
1099 PARAM::INFO paramInfo;
1101 paramInfo.name =
"ts";
1103 paramInfo.unit =
"s";
1104 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1105 paramInfo.defaultValue =
"";
1106 paramInfo.description =
"Individual voltage duration";
1107 paramInfos.push_back( paramInfo );
1109 paramInfo.name =
"td";
1111 paramInfo.unit =
"s";
1112 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1113 paramInfo.defaultValue =
"0";
1114 paramInfo.description =
"Delay";
1115 paramInfos.push_back( paramInfo );
1117 paramInfo.name =
"stddev";
1119 paramInfo.unit = aUnit;
1120 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1121 paramInfo.defaultValue =
"1";
1122 paramInfo.description =
"Standard deviation";
1123 paramInfos.push_back( paramInfo );
1125 paramInfo.name =
"mean";
1127 paramInfo.unit = aUnit;
1128 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1129 paramInfo.defaultValue =
"0";
1130 paramInfo.description =
"Mean";
1131 paramInfos.push_back( paramInfo );
1140 const std::string& aUnit )
1142 std::vector<PARAM::INFO> paramInfos;
1143 PARAM::INFO paramInfo;
1145 paramInfo.name =
"ts";
1147 paramInfo.unit =
"s";
1148 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1149 paramInfo.defaultValue =
"";
1150 paramInfo.description =
"Individual voltage duration";
1151 paramInfos.push_back( paramInfo );
1153 paramInfo.name =
"td";
1155 paramInfo.unit =
"s";
1156 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1157 paramInfo.defaultValue =
"0";
1158 paramInfo.description =
"Delay";
1159 paramInfos.push_back( paramInfo );
1161 paramInfo.name =
"mean";
1163 paramInfo.unit = aUnit;
1164 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1165 paramInfo.defaultValue =
"1";
1166 paramInfo.description =
"Mean";
1167 paramInfos.push_back( paramInfo );
1169 paramInfo.name =
"offset";
1171 paramInfo.unit = aUnit;
1172 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1173 paramInfo.defaultValue =
"0";
1174 paramInfo.description =
"Offset";
1175 paramInfos.push_back( paramInfo );
1184 const std::string& aUnit )
1186 std::vector<PARAM::INFO> paramInfos;
1187 PARAM::INFO paramInfo;
1189 paramInfo.name =
"ts";
1191 paramInfo.unit =
"s";
1192 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1193 paramInfo.defaultValue =
"";
1194 paramInfo.description =
"Individual voltage duration";
1195 paramInfos.push_back( paramInfo );
1197 paramInfo.name =
"td";
1199 paramInfo.unit =
"s";
1200 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1201 paramInfo.defaultValue =
"0";
1202 paramInfo.description =
"Delay";
1203 paramInfos.push_back( paramInfo );
1205 paramInfo.name =
"lambda";
1207 paramInfo.unit = aUnit;
1208 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1209 paramInfo.defaultValue =
"1";
1210 paramInfo.description =
"Lambda";
1211 paramInfos.push_back( paramInfo );
1213 paramInfo.name =
"offset";
1215 paramInfo.unit = aUnit;
1216 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
1217 paramInfo.defaultValue =
"0";
1218 paramInfo.description =
"Offset";
1219 paramInfos.push_back( paramInfo );
1228 PARAM::INFO paramInfo;
1230 paramInfo.name =
"ac";
1232 paramInfo.unit = aUnit;
1233 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1234 paramInfo.defaultValue =
"0";
1235 paramInfo.description =
"AC magnitude";
1236 aParamInfos.push_back( paramInfo );
1238 paramInfo.name =
"ph";
1240 paramInfo.unit =
"°";
1241 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::AC;
1242 paramInfo.defaultValue =
"0";
1243 paramInfo.description =
"AC phase";
1244 aParamInfos.push_back( paramInfo );
1248 const std::string& aUnit )
1250 PARAM::INFO paramInfo;
1252 if( !strcmp( aUnit.c_str(),
"V" ) )
1254 paramInfo.name =
"portnum";
1256 paramInfo.unit =
"";
1257 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1258 paramInfo.defaultValue =
"";
1259 paramInfo.description =
"Port number";
1260 aParamInfos.push_back( paramInfo );
1262 paramInfo.name =
"z0";
1264 paramInfo.unit =
"Ohm";
1265 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::S_PARAM;
1266 paramInfo.defaultValue =
"";
1267 paramInfo.description =
"Internal impedance";
1268 aParamInfos.push_back( paramInfo );
1276 return {
"+",
"-",
"C+",
"C-" };
1278 return {
"+",
"-" };
1285 case SIM_MODEL::TYPE::V:
1286 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.