From b7cf37a455732eee7c25abe7e9df6fb73ca83b5e Mon Sep 17 00:00:00 2001 From: ivandi Date: Fri, 16 Feb 2024 19:47:18 -0500 Subject: [PATCH] Always apply custom prefix enclosed by '#' This fixes a regression in #513. If the only simulation is custom and it contains custom prefixed output, the custom prefix is not applied. --- qucs/extsimkernels/abstractspicekernel.cpp | 28 ++++++++++++---------- qucs/extsimkernels/abstractspicekernel.h | 2 +- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/qucs/extsimkernels/abstractspicekernel.cpp b/qucs/extsimkernels/abstractspicekernel.cpp index 278c3a3b4..4c34c1686 100644 --- a/qucs/extsimkernels/abstractspicekernel.cpp +++ b/qucs/extsimkernels/abstractspicekernel.cpp @@ -1175,12 +1175,14 @@ void AbstractSpiceKernel::convertToQucsData(const QString &qucs_dataset) bool hasParSweep = false; bool hasDblParSweep = false; - QString custom_prefix; + QString dataset_prefix; + bool isCustomPrefix = false; if ( ngspice_output_filename.startsWith("spice4qucs.") ) { - custom_prefix = ngspice_output_filename.section('.', 1, 1).toLower(); + dataset_prefix = ngspice_output_filename.section('.', 1, 1).toLower(); } else { - QRegularExpression custom_prefix_rx("(?<=#).*?(?=#)"); - custom_prefix = custom_prefix_rx.match(ngspice_output_filename).captured(0).toLower(); + QRegularExpression dataset_prefix_rx("(?<=#).*?(?=#)"); + dataset_prefix = dataset_prefix_rx.match(ngspice_output_filename).captured(0).toLower(); + isCustomPrefix = !dataset_prefix.isEmpty(); } QRegularExpression four_rx(".*\\.four[0-9]+$"); QString full_outfile = workdir+QDir::separator()+ngspice_output_filename; @@ -1210,7 +1212,7 @@ void AbstractSpiceKernel::convertToQucsData(const QString &qucs_dataset) parseNoiseOutput(full_outfile,sim_points,var_list,hasParSweep); if (hasParSweep) { QString res_file = QDir::toNativeSeparators(workdir + QDir::separator() - + "spice4qucs." + custom_prefix + ".cir.res"); + + "spice4qucs." + dataset_prefix + ".cir.res"); parseResFile(res_file,swp_var,swp_var_val); } } else if (ngspice_output_filename.endsWith(".pz")) { @@ -1218,7 +1220,7 @@ void AbstractSpiceKernel::convertToQucsData(const QString &qucs_dataset) parsePZOutput(full_outfile,sim_points,var_list,hasParSweep); if (hasParSweep) { QString res_file = QDir::toNativeSeparators(workdir + QDir::separator() - + "spice4qucs." + custom_prefix + ".cir.res"); + + "spice4qucs." + dataset_prefix + ".cir.res"); parseResFile(res_file,swp_var,swp_var_val); } } else if (ngspice_output_filename.endsWith(".SENS.prn")) { @@ -1236,12 +1238,12 @@ void AbstractSpiceKernel::convertToQucsData(const QString &qucs_dataset) if (ngspice_output_filename.endsWith("_swp_swp.plot")) { // 2-var parameter sweep hasDblParSweep = true; QString res2_file = QDir::toNativeSeparators(workdir + QDir::separator() - + "spice4qucs." + custom_prefix + ".cir.res1"); + + "spice4qucs." + dataset_prefix + ".cir.res1"); parseResFile(res2_file,swp_var2,swp_var2_val); } QString res_file = QDir::toNativeSeparators(workdir + QDir::separator() - + "spice4qucs." + custom_prefix + ".cir.res"); + + "spice4qucs." + dataset_prefix + ".cir.res"); parseResFile(res_file,swp_var,swp_var_val); parseSTEPOutput(full_outfile,sim_points,var_list,isComplex); @@ -1273,7 +1275,7 @@ void AbstractSpiceKernel::convertToQucsData(const QString &qucs_dataset) } } if (var_list.isEmpty()) continue; // nothing to convert - normalizeVarsNames(var_list, custom_prefix); + normalizeVarsNames(var_list, dataset_prefix, isCustomPrefix); QString indep = var_list.first(); //QList sim_point; @@ -1377,7 +1379,7 @@ void AbstractSpiceKernel::removeAllSimulatorOutputs() * for harmonic balance variable and current probes variables are supported. * \param var_list This list contains variable names that need normalization. */ -void AbstractSpiceKernel::normalizeVarsNames(QStringList &var_list, const QString &custom_prefix) +void AbstractSpiceKernel::normalizeVarsNames(QStringList &var_list, const QString &dataset_prefix, bool isCustom) { QString prefix=""; QString iprefix=""; @@ -1434,11 +1436,11 @@ void AbstractSpiceKernel::normalizeVarsNames(QStringList &var_list, const QStrin } } - if ( needsPrefix ) - if ( !custom_prefix.isEmpty() ) { + if ( needsPrefix || isCustom ) + if ( !dataset_prefix.isEmpty() ) { for ( it = var_list.begin() ; it != var_list.end() ; ++it) if ( !(*it).isEmpty() ) - (*it).prepend(custom_prefix + "."); + (*it).prepend(dataset_prefix + "."); } } diff --git a/qucs/extsimkernels/abstractspicekernel.h b/qucs/extsimkernels/abstractspicekernel.h index 83303d7e7..2741834d3 100644 --- a/qucs/extsimkernels/abstractspicekernel.h +++ b/qucs/extsimkernels/abstractspicekernel.h @@ -48,7 +48,7 @@ class AbstractSpiceKernel : public QObject private: enum outType {xyceSTD, spiceRaw, spiceRawSwp, xyceSTDswp, spicePrn, Unknown}; - void normalizeVarsNames(QStringList &var_list, const QString &custom_prefix); + void normalizeVarsNames(QStringList &var_list, const QString &dataset_prefix, bool isCustom = false); int checkRawOutupt(QString ngspice_file, QStringList &values); void extractBinSamples(QDataStream &dbl, QList< QList > &sim_points, int NumPoints, int NumVars, bool isComplex);