29#include <pegtl/contrib/parse_tree.hpp>
60 bool emptyLine =
true;
72 item.
modelName += fmt::format(
"DC {} ", dc );
79 std::string args =
"";
83 case SIM_MODEL::TYPE::V_PWL:
84 case SIM_MODEL::TYPE::I_PWL:
87 std::unique_ptr<tao::pegtl::parse_tree::node> root;
95 catch(
const tao::pegtl::parse_error& )
102 for(
const auto& node : root->children )
105 SIM_VALUE::NOTATION::SI>>() )
115 case SIM_MODEL::TYPE::V_WHITENOISE:
116 case SIM_MODEL::TYPE::I_WHITENOISE:
119 args.append(
"0 0 0 0 0 " );
122 case SIM_MODEL::TYPE::V_PINKNOISE:
123 case SIM_MODEL::TYPE::I_PINKNOISE:
128 args.append(
"0 0 0 " );
131 case SIM_MODEL::TYPE::V_BURSTNOISE:
132 case SIM_MODEL::TYPE::I_BURSTNOISE:
133 args.append(
"0 0 0 0 " );
139 case SIM_MODEL::TYPE::V_RANDUNIFORM:
140 case SIM_MODEL::TYPE::I_RANDUNIFORM:
150 case SIM_MODEL::TYPE::V_RANDGAUSSIAN:
151 case SIM_MODEL::TYPE::I_RANDGAUSSIAN:
159 case SIM_MODEL::TYPE::V_RANDEXP:
160 case SIM_MODEL::TYPE::I_RANDEXP:
168 case SIM_MODEL::TYPE::V_RANDPOISSON:
169 case SIM_MODEL::TYPE::I_RANDPOISSON:
183 args.append( argStr +
" " );
195 case SIM_MODEL::TYPE::V_VCL:
196 case SIM_MODEL::TYPE::I_VCL:
203 case SIM_MODEL::TYPE::V_CCL:
204 case SIM_MODEL::TYPE::I_CCL:
224 item.
modelName += fmt::format(
"AC {} {} ", ac, ph );
227 std::string portnum =
"";
234 item.
modelName += fmt::format(
"portnum {} ", portnum );
242 item.
modelName += fmt::format(
"z0 {} ", z0 );
255 const std::string& aDefaultValue )
const
257 std::string result =
"";
263 result = aDefaultValue;
284 for(
int paramIndex = aParamIndex; paramIndex <
GetParamCount(); ++paramIndex )
286 m_params.at( aParamIndex ).value =
"";
291 for(
int paramIndex = 0; paramIndex < aParamIndex; ++paramIndex )
296 wxString defaultValue =
m_params.at( aParamIndex ).info.defaultValue;
298 if( !defaultValue.ToDouble( &
dummy ) )
299 defaultValue = wxT(
"0" );
301 m_params.at( aParamIndex ).value = defaultValue;
362 case TYPE::V:
return vdc;
363 case TYPE::I:
return idc;
364 case TYPE::V_SIN:
return vsin;
365 case TYPE::I_SIN:
return isin;
366 case TYPE::V_PULSE:
return vpulse;
367 case TYPE::I_PULSE:
return ipulse;
368 case TYPE::V_EXP:
return vexp;
369 case TYPE::I_EXP:
return iexp;
370 case TYPE::V_AM:
return vam;
371 case TYPE::I_AM:
return iam;
372 case TYPE::V_SFFM:
return vsffm;
373 case TYPE::I_SFFM:
return isffm;
374 case TYPE::V_VCL:
return vcvs;
375 case TYPE::V_CCL:
return ccvs;
376 case TYPE::V_PWL:
return vpwl;
377 case TYPE::I_VCL:
return vccs;
378 case TYPE::I_CCL:
return cccs;
379 case TYPE::I_PWL:
return ipwl;
380 case TYPE::V_WHITENOISE:
return vwhitenoise;
381 case TYPE::I_WHITENOISE:
return iwhitenoise;
382 case TYPE::V_PINKNOISE:
return vpinknoise;
383 case TYPE::I_PINKNOISE:
return ipinknoise;
384 case TYPE::V_BURSTNOISE:
return vburstnoise;
385 case TYPE::I_BURSTNOISE:
return iburstnoise;
386 case TYPE::V_RANDUNIFORM:
return vrandomuniform;
387 case TYPE::I_RANDUNIFORM:
return irandomuniform;
388 case TYPE::V_RANDGAUSSIAN:
return vrandomnormal;
389 case TYPE::I_RANDGAUSSIAN:
return irandomnormal;
390 case TYPE::V_RANDEXP:
return vrandomexp;
391 case TYPE::I_RANDEXP:
return irandomexp;
392 case TYPE::V_RANDPOISSON:
return vrandompoisson;
393 case TYPE::I_RANDPOISSON:
return irandompoisson;
395 wxFAIL_MSG(
"Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
396 static std::vector<SIM_MODEL::PARAM::INFO>
empty;
403 const std::string& aUnit )
405 std::vector<PARAM::INFO> paramInfos;
408 paramInfo.
name =
"dc";
410 paramInfo.
unit = aUnit;
414 paramInfos.push_back( paramInfo );
423 const std::string& aUnit )
425 std::vector<PARAM::INFO> paramInfos;
428 paramInfo.
name =
"dc";
430 paramInfo.
unit = aUnit;
434 paramInfos.push_back( paramInfo );
436 paramInfo.
name =
"ampl";
438 paramInfo.
unit = aUnit;
442 paramInfos.push_back( paramInfo );
444 paramInfo.
name =
"f";
446 paramInfo.
unit =
"Hz";
450 paramInfos.push_back( paramInfo );
452 paramInfo.
name =
"td";
454 paramInfo.
unit =
"s";
458 paramInfos.push_back( paramInfo );
460 paramInfo.
name =
"theta";
462 paramInfo.
unit =
"1/s";
466 paramInfos.push_back( paramInfo );
468 paramInfo.
name =
"phase";
470 paramInfo.
unit =
"°";
474 paramInfos.push_back( paramInfo );
483 const std::string& aUnit )
485 std::vector<PARAM::INFO> paramInfos;
488 paramInfo.
name = aPrefix +
"1";
490 paramInfo.
unit = aUnit;
494 paramInfos.push_back( paramInfo );
496 paramInfo.
name = aPrefix +
"2";
498 paramInfo.
unit = aUnit;
502 paramInfos.push_back( paramInfo );
504 paramInfo.
name =
"td";
506 paramInfo.
unit =
"s";
510 paramInfos.push_back( paramInfo );
512 paramInfo.
name =
"tr";
514 paramInfo.
unit =
"s";
518 paramInfos.push_back( paramInfo );
520 paramInfo.
name =
"tf";
522 paramInfo.
unit =
"s";
526 paramInfos.push_back( paramInfo );
528 paramInfo.
name =
"tw";
530 paramInfo.
unit =
"s";
534 paramInfos.push_back( paramInfo );
536 paramInfo.
name =
"per";
538 paramInfo.
unit =
"s";
542 paramInfos.push_back( paramInfo );
544 paramInfo.
name =
"np";
550 paramInfos.push_back( paramInfo );
559 const std::string& aUnit )
561 std::vector<PARAM::INFO> paramInfos;
564 paramInfo.
name = aPrefix +
"1";
566 paramInfo.
unit = aUnit;
570 paramInfos.push_back( paramInfo );
572 paramInfo.
name = aPrefix +
"2";
574 paramInfo.
unit = aUnit;
578 paramInfos.push_back( paramInfo );
580 paramInfo.
name =
"td1";
582 paramInfo.
unit =
"s";
586 paramInfos.push_back( paramInfo );
588 paramInfo.
name =
"tau1";
590 paramInfo.
unit =
"s";
594 paramInfos.push_back( paramInfo );
596 paramInfo.
name =
"td2";
598 paramInfo.
unit =
"s";
602 paramInfos.push_back( paramInfo );
604 paramInfo.
name =
"tau2";
606 paramInfo.
unit =
"s";
610 paramInfos.push_back( paramInfo );
619 const std::string& aUnit )
621 std::vector<PARAM::INFO> paramInfos;
624 paramInfo.
name =
"vo";
626 paramInfo.
unit = aUnit;
630 paramInfos.push_back( paramInfo );
632 paramInfo.
name =
"vmo";
634 paramInfo.
unit = aUnit;
637 paramInfo.
description =
"Modulation signal offset";
638 paramInfos.push_back( paramInfo );
640 paramInfo.
name =
"vma";
642 paramInfo.
unit = aUnit;
645 paramInfo.
description =
"Modulation signal amplitude";
646 paramInfos.push_back( paramInfo );
648 paramInfo.
name =
"fm";
650 paramInfo.
unit =
"Hz";
653 paramInfo.
description =
"Modulation signal frequency";
654 paramInfos.push_back( paramInfo );
656 paramInfo.
name =
"fc";
658 paramInfo.
unit =
"Hz";
661 paramInfo.
description =
"Carrier signal frequency";
662 paramInfos.push_back( paramInfo );
664 paramInfo.
name =
"td";
666 paramInfo.
unit =
"s";
670 paramInfos.push_back( paramInfo );
672 paramInfo.
name =
"phasem";
674 paramInfo.
unit =
"°";
678 paramInfos.push_back( paramInfo );
680 paramInfo.
name =
"phasec";
682 paramInfo.
unit =
"°";
686 paramInfos.push_back( paramInfo );
695 const std::string& aUnit )
697 std::vector<PARAM::INFO> paramInfos;
700 paramInfo.
name =
"vo";
702 paramInfo.
unit = aUnit;
706 paramInfos.push_back( paramInfo );
708 paramInfo.
name =
"va";
710 paramInfo.
unit = aUnit;
714 paramInfos.push_back( paramInfo );
716 paramInfo.
name =
"fm";
718 paramInfo.
unit =
"Hz";
722 paramInfos.push_back( paramInfo );
724 paramInfo.
name =
"mdi";
730 paramInfos.push_back( paramInfo );
732 paramInfo.
name =
"fc";
734 paramInfo.
unit =
"Hz";
738 paramInfos.push_back( paramInfo );
740 paramInfo.
name =
"phasem";
742 paramInfo.
unit =
"°";
746 paramInfos.push_back( paramInfo );
748 paramInfo.
name =
"phasec";
750 paramInfo.
unit =
"°";
754 paramInfos.push_back( paramInfo );
764 std::vector<PARAM::INFO> paramInfos;
767 paramInfo.
name =
"gain";
770 paramInfo.
unit = aGainUnit;
772 paramInfos.push_back( paramInfo );
774 paramInfo.
name =
"control";
778 paramInfo.
description =
"Controlling voltage source";
779 paramInfos.push_back( paramInfo );
787 std::vector<PARAM::INFO> paramInfos;
790 paramInfo.
name =
"gain";
793 paramInfo.
unit = aGainUnit;
795 paramInfos.push_back( paramInfo );
802 const std::string& aQuantity,
803 const std::string& aUnit )
805 std::vector<PARAM::INFO> paramInfos;
808 paramInfo.
name =
"pwl";
810 paramInfo.
unit =
"s," + aUnit;
813 paramInfo.
description = aUnit ==
"V" ?
"Time-voltage points" :
"Time-current points";
814 paramInfos.push_back( paramInfo );
877 const std::string& aUnit )
879 std::vector<PARAM::INFO> paramInfos;
882 paramInfo.
name =
"rms";
884 paramInfo.
unit = aUnit;
887 paramInfo.
description =
"White noise RMS amplitude";
888 paramInfos.push_back( paramInfo );
890 paramInfo.
name =
"dt";
892 paramInfo.
unit =
"s";
896 paramInfos.push_back( paramInfo );
905 const std::string& aUnit )
907 std::vector<PARAM::INFO> paramInfos;
910 paramInfo.
name =
"rms";
916 paramInfos.push_back( paramInfo );
918 paramInfo.
name =
"slope";
924 paramInfos.push_back( paramInfo );
926 paramInfo.
name =
"dt";
928 paramInfo.
unit =
"s";
932 paramInfos.push_back( paramInfo );
941 const std::string& aUnit )
943 std::vector<PARAM::INFO> paramInfos;
946 paramInfo.
name =
"ampl";
948 paramInfo.
unit = aUnit;
952 paramInfos.push_back( paramInfo );
954 paramInfo.
name =
"tcapt";
956 paramInfo.
unit =
"s";
959 paramInfo.
description =
"Burst noise trap capture time";
960 paramInfos.push_back( paramInfo );
962 paramInfo.
name =
"temit";
964 paramInfo.
unit =
"s";
967 paramInfo.
description =
"Burst noise trap emission time";
968 paramInfos.push_back( paramInfo );
977 const std::string& aUnit )
979 std::vector<PARAM::INFO> paramInfos;
982 paramInfo.
name =
"ts";
984 paramInfo.
unit =
"s";
987 paramInfo.
description =
"Individual voltage duration";
988 paramInfos.push_back( paramInfo );
990 paramInfo.
name =
"td";
992 paramInfo.
unit =
"s";
996 paramInfos.push_back( paramInfo );
998 paramInfo.
name =
"range";
1000 paramInfo.
unit = aUnit;
1004 paramInfos.push_back( paramInfo );
1006 paramInfo.
name =
"offset";
1008 paramInfo.
unit = aUnit;
1012 paramInfos.push_back( paramInfo );
1021 const std::string& aUnit )
1023 std::vector<PARAM::INFO> paramInfos;
1026 paramInfo.
name =
"ts";
1028 paramInfo.
unit =
"s";
1031 paramInfo.
description =
"Individual voltage duration";
1032 paramInfos.push_back( paramInfo );
1034 paramInfo.
name =
"td";
1036 paramInfo.
unit =
"s";
1040 paramInfos.push_back( paramInfo );
1042 paramInfo.
name =
"stddev";
1044 paramInfo.
unit = aUnit;
1048 paramInfos.push_back( paramInfo );
1050 paramInfo.
name =
"mean";
1052 paramInfo.
unit = aUnit;
1056 paramInfos.push_back( paramInfo );
1065 const std::string& aUnit )
1067 std::vector<PARAM::INFO> paramInfos;
1070 paramInfo.
name =
"ts";
1072 paramInfo.
unit =
"s";
1075 paramInfo.
description =
"Individual voltage duration";
1076 paramInfos.push_back( paramInfo );
1078 paramInfo.
name =
"td";
1080 paramInfo.
unit =
"s";
1084 paramInfos.push_back( paramInfo );
1086 paramInfo.
name =
"mean";
1088 paramInfo.
unit = aUnit;
1092 paramInfos.push_back( paramInfo );
1094 paramInfo.
name =
"offset";
1096 paramInfo.
unit = aUnit;
1100 paramInfos.push_back( paramInfo );
1109 const std::string& aUnit )
1111 std::vector<PARAM::INFO> paramInfos;
1114 paramInfo.
name =
"ts";
1116 paramInfo.
unit =
"s";
1119 paramInfo.
description =
"Individual voltage duration";
1120 paramInfos.push_back( paramInfo );
1122 paramInfo.
name =
"td";
1124 paramInfo.
unit =
"s";
1128 paramInfos.push_back( paramInfo );
1130 paramInfo.
name =
"lambda";
1132 paramInfo.
unit = aUnit;
1136 paramInfos.push_back( paramInfo );
1138 paramInfo.
name =
"offset";
1140 paramInfo.
unit = aUnit;
1144 paramInfos.push_back( paramInfo );
1155 paramInfo.
name =
"ac";
1157 paramInfo.
unit = aUnit;
1161 aParamInfos.push_back( paramInfo );
1163 paramInfo.
name =
"ph";
1165 paramInfo.
unit =
"°";
1169 aParamInfos.push_back( paramInfo );
1173 const std::string& aUnit )
1177 if( !strcmp( aUnit.c_str(),
"V" ) )
1179 paramInfo.
name =
"portnum";
1181 paramInfo.
unit =
"";
1185 aParamInfos.push_back( paramInfo );
1187 paramInfo.
name =
"z0";
1189 paramInfo.
unit =
"Ohm";
1193 aParamInfos.push_back( paramInfo );
1201 return {
"+",
"-",
"C+",
"C-" };
1203 return {
"+",
"-" };
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
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)
virtual const PARAM & GetParam(unsigned aParamIndex) const
int GetParamCount() const
DEVICE_T GetDeviceType() const
const PARAM * FindParam(const std::string &aParamName) 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)
SPICE_INFO GetSpiceInfo() const
std::vector< std::reference_wrapper< const PARAM > > GetParams() const
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 getParamValueString(const std::string &aParamName, const std::string &aDefaultValue) const
virtual std::string ItemLine(const SPICE_ITEM &aItem) const
const SIM_MODEL & m_model
static bool empty(const wxTextEntryBase *aCtrl)
std::vector< FAB_LAYER_COLOR > dummy