diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp index d554f96..fbdf887 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp @@ -7,7 +7,7 @@ ManualCalibrationDialog::ManualCalibrationDialog(const TraceModel &model, Calibr ui(new Ui::ManualCalibrationDialog) { ui->setupUi(this); - auto traceSelector = new SparamTraceSelector(model, cal->getCaltype().usedPorts); + auto traceSelector = new SparamTraceSelector(model, cal->getCaltype().usedPorts, true); ui->verticalLayout->insertWidget(1, traceSelector, 1.0); ui->buttonBox->setEnabled(false); connect(traceSelector, &SparamTraceSelector::selectionValid, ui->buttonBox, &QDialogButtonBox::setEnabled); diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp index 74c4235..8cba09c 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/trace.cpp @@ -318,6 +318,10 @@ void Trace::fillFromDatapoints(std::map traceSet, const std::v { // remove all previous points for(auto m : traceSet) { + if(!m.second) { + // no trace, skip + continue; + } if(!deembedded) { m.second->clear(); } else { @@ -332,6 +336,10 @@ void Trace::fillFromDatapoints(std::map traceSet, const std::v td.y = m.second; QString measurement = m.first; if(traceSet.count(measurement)) { + if(!traceSet[measurement]) { + // no trace, skip + continue; + } if(!deembedded) { traceSet[measurement]->addData(td, DataType::Frequency); } else { @@ -1065,16 +1073,24 @@ std::vector Trace::assembleDatapoints(std::map ret; // Sanity check traces - unsigned int samples = traceSet.begin()->second->size(); - auto impedance = traceSet.begin()->second->getReferenceImpedance(); + unsigned int samples = 0; + auto impedance = 0; vector freqs; for(auto m : traceSet) { const Trace *t = m.second; - if(t->size() != samples) { + if(!t) { + // trace not valid, skip + continue; + } + if(samples == 0) { + samples = t->size(); + } else if(t->size() != samples) { qWarning() << "Selected traces do not have the same size"; return ret; } - if(t->getReferenceImpedance() != impedance) { + if(impedance == 0) { + impedance = t->getReferenceImpedance(); + } else if(t->getReferenceImpedance() != impedance) { qWarning() << "Selected traces do not have the same reference impedance"; return ret; } @@ -1098,13 +1114,22 @@ std::vector Trace::assembleDatapoints(std::mapsample(i).y; + if(t) { + d.measurements[measurement] = t->sample(i).y; + } else { + d.measurements[measurement] = 0.0; + } } d.pointNum = i; d.frequency = freqs[i];