Show gender of required standard in additional column
This commit is contained in:
parent
ecf994cf4a
commit
45cf2200b8
@ -218,6 +218,9 @@ void Calibration::construct12TermPoints()
|
|||||||
p.re11 = ((S22_through - p.re33)*(1.0 - p.re22 * actual.ThroughS22)-actual.ThroughS22*p.re23e32)
|
p.re11 = ((S22_through - p.re33)*(1.0 - p.re22 * actual.ThroughS22)-actual.ThroughS22*p.re23e32)
|
||||||
/ ((S22_through - p.re33)*(actual.ThroughS11-p.re22*deltaS)-deltaS*p.re23e32);
|
/ ((S22_through - p.re33)*(actual.ThroughS11-p.re22*deltaS)-deltaS*p.re23e32);
|
||||||
p.re23e01 = (S12_through - p.re03)*(1.0 - p.re11*actual.ThroughS11 - p.re22*actual.ThroughS22 + p.re11*p.re22*deltaS) / actual.ThroughS12;
|
p.re23e01 = (S12_through - p.re03)*(1.0 - p.re11*actual.ThroughS11 - p.re22*actual.ThroughS22 + p.re11*p.re22*deltaS) / actual.ThroughS12;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
points.push_back(p);
|
points.push_back(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,6 +240,7 @@ void Calibration::constructPort1SOL()
|
|||||||
// See page 13 of https://www.rfmentor.com/sites/default/files/NA_Error_Models_and_Cal_Methods.pdf
|
// See page 13 of https://www.rfmentor.com/sites/default/files/NA_Error_Models_and_Cal_Methods.pdf
|
||||||
computeSOL(S11_short, S11_open, S11_load, p.fe00, p.fe11, p.fe10e01, actual.Open, actual.Short, actual.Load);
|
computeSOL(S11_short, S11_open, S11_load, p.fe00, p.fe11, p.fe10e01, actual.Open, actual.Short, actual.Load);
|
||||||
// All other calibration coefficients to ideal values
|
// All other calibration coefficients to ideal values
|
||||||
|
p.fex = 0.0;
|
||||||
p.fe30 = 0.0;
|
p.fe30 = 0.0;
|
||||||
p.fe22 = 0.0;
|
p.fe22 = 0.0;
|
||||||
p.fe10e32 = 1.0;
|
p.fe10e32 = 1.0;
|
||||||
@ -244,6 +248,7 @@ void Calibration::constructPort1SOL()
|
|||||||
p.re22 = 0.0;
|
p.re22 = 0.0;
|
||||||
p.re23e32 = 1.0;
|
p.re23e32 = 1.0;
|
||||||
p.re03 = 0.0;
|
p.re03 = 0.0;
|
||||||
|
p.rex = 0.0;
|
||||||
p.re11 = 0.0;
|
p.re11 = 0.0;
|
||||||
p.re23e01 = 1.0;
|
p.re23e01 = 1.0;
|
||||||
points.push_back(p);
|
points.push_back(p);
|
||||||
@ -265,6 +270,7 @@ void Calibration::constructPort2SOL()
|
|||||||
// See page 19 of https://www.rfmentor.com/sites/default/files/NA_Error_Models_and_Cal_Methods.pdf
|
// See page 19 of https://www.rfmentor.com/sites/default/files/NA_Error_Models_and_Cal_Methods.pdf
|
||||||
computeSOL(S22_short, S22_open, S22_load, p.re33, p.re22, p.re23e32, actual.Open, actual.Short, actual.Load);
|
computeSOL(S22_short, S22_open, S22_load, p.re33, p.re22, p.re23e32, actual.Open, actual.Short, actual.Load);
|
||||||
// All other calibration coefficients to ideal values
|
// All other calibration coefficients to ideal values
|
||||||
|
p.fex = 0.0;
|
||||||
p.fe30 = 0.0;
|
p.fe30 = 0.0;
|
||||||
p.fe22 = 0.0;
|
p.fe22 = 0.0;
|
||||||
p.fe10e32 = 1.0;
|
p.fe10e32 = 1.0;
|
||||||
@ -272,6 +278,7 @@ void Calibration::constructPort2SOL()
|
|||||||
p.fe11 = 0.0;
|
p.fe11 = 0.0;
|
||||||
p.fe10e01 = 1.0;
|
p.fe10e01 = 1.0;
|
||||||
p.re03 = 0.0;
|
p.re03 = 0.0;
|
||||||
|
p.rex = 0.0;
|
||||||
p.re11 = 0.0;
|
p.re11 = 0.0;
|
||||||
p.re23e01 = 1.0;
|
p.re23e01 = 1.0;
|
||||||
points.push_back(p);
|
points.push_back(p);
|
||||||
@ -292,11 +299,13 @@ void Calibration::constructTransmissionNormalization()
|
|||||||
p.re23e01 = S12_through / actual.ThroughS12;
|
p.re23e01 = S12_through / actual.ThroughS12;
|
||||||
// All other calibration coefficients to ideal values
|
// All other calibration coefficients to ideal values
|
||||||
p.fe30 = 0.0;
|
p.fe30 = 0.0;
|
||||||
|
p.fex = 0.0;
|
||||||
p.fe22 = 0.0;
|
p.fe22 = 0.0;
|
||||||
p.fe00 = 0.0;
|
p.fe00 = 0.0;
|
||||||
p.fe11 = 0.0;
|
p.fe11 = 0.0;
|
||||||
p.fe10e01 = 1.0;
|
p.fe10e01 = 1.0;
|
||||||
p.re03 = 0.0;
|
p.re03 = 0.0;
|
||||||
|
p.rex = 0.0;
|
||||||
p.re11 = 0.0;
|
p.re11 = 0.0;
|
||||||
p.re33 = 0.0;
|
p.re33 = 0.0;
|
||||||
p.re22 = 0.0;
|
p.re22 = 0.0;
|
||||||
@ -396,6 +405,7 @@ void Calibration::constructTRL()
|
|||||||
p.fe10e32 = S_B.m21;
|
p.fe10e32 = S_B.m21;
|
||||||
// no isolation measurement available
|
// no isolation measurement available
|
||||||
p.fe30 = 0.0;
|
p.fe30 = 0.0;
|
||||||
|
p.fex = 0.0;
|
||||||
|
|
||||||
// Reverse coefficients, normalize for S12 = 1.0
|
// Reverse coefficients, normalize for S12 = 1.0
|
||||||
// => det(T)/T22 = 1.0
|
// => det(T)/T22 = 1.0
|
||||||
@ -416,6 +426,7 @@ void Calibration::constructTRL()
|
|||||||
p.re33 = S_B.m22;
|
p.re33 = S_B.m22;
|
||||||
// no isolation measurement available
|
// no isolation measurement available
|
||||||
p.re03 = 0.0;
|
p.re03 = 0.0;
|
||||||
|
p.rex = 0.0;
|
||||||
|
|
||||||
points.push_back(p);
|
points.push_back(p);
|
||||||
}
|
}
|
||||||
@ -1117,7 +1128,9 @@ Calibration::Point Calibration::getCalibrationPoint(Protocol::Datapoint &d)
|
|||||||
ret.fe11 = low->fe11 * (1 - alpha) + high->fe11 * alpha;
|
ret.fe11 = low->fe11 * (1 - alpha) + high->fe11 * alpha;
|
||||||
ret.fe22 = low->fe22 * (1 - alpha) + high->fe22 * alpha;
|
ret.fe22 = low->fe22 * (1 - alpha) + high->fe22 * alpha;
|
||||||
ret.fe30 = low->fe30 * (1 - alpha) + high->fe30 * alpha;
|
ret.fe30 = low->fe30 * (1 - alpha) + high->fe30 * alpha;
|
||||||
|
ret.fex = low->fex * (1 - alpha) + high->fex * alpha;
|
||||||
ret.re03 = low->re03 * (1 - alpha) + high->re03 * alpha;
|
ret.re03 = low->re03 * (1 - alpha) + high->re03 * alpha;
|
||||||
|
ret.rex = low->rex * (1 - alpha) + high->rex * alpha;
|
||||||
ret.re11 = low->re11 * (1 - alpha) + high->re11 * alpha;
|
ret.re11 = low->re11 * (1 - alpha) + high->re11 * alpha;
|
||||||
ret.re22 = low->re22 * (1 - alpha) + high->re22 * alpha;
|
ret.re22 = low->re22 * (1 - alpha) + high->re22 * alpha;
|
||||||
ret.re33 = low->re33 * (1 - alpha) + high->re33 * alpha;
|
ret.re33 = low->re33 * (1 - alpha) + high->re33 * alpha;
|
||||||
@ -1141,6 +1154,12 @@ void Calibration::computeSOL(std::complex<double> s_m, std::complex<double> o_m,
|
|||||||
tracking = directivity * match - delta;
|
tracking = directivity * match - delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Calibration::computeIsolation(std::complex<double> x0_m, std::complex<double> x1_m, std::complex<double> reverse_match, std::complex<double> reverse_tracking, std::complex<double> reverse_directivity, std::complex<double> x0, std::complex<double> x1, std::complex<double> &internal_isolation, std::complex<double> &external_isolation)
|
||||||
|
{
|
||||||
|
external_isolation = (x1_m - x0_m)*(1.0 - reverse_match * (x1 - x0) + x1*x0*reverse_match*reverse_match) / (reverse_tracking * (x1 - x0));
|
||||||
|
internal_isolation = x0_m - external_isolation*(reverse_directivity + reverse_tracking*x0 / (1.0 - x0*reverse_match));
|
||||||
|
}
|
||||||
|
|
||||||
std::complex<double> Calibration::correctSOL(std::complex<double> measured, std::complex<double> directivity, std::complex<double> match, std::complex<double> tracking)
|
std::complex<double> Calibration::correctSOL(std::complex<double> measured, std::complex<double> directivity, std::complex<double> match, std::complex<double> tracking)
|
||||||
{
|
{
|
||||||
return (measured - directivity) / (measured * match - directivity * match + tracking);
|
return (measured - directivity) / (measured * match - directivity * match + tracking);
|
||||||
|
@ -138,9 +138,9 @@ private:
|
|||||||
public:
|
public:
|
||||||
double frequency;
|
double frequency;
|
||||||
// Forward error terms
|
// Forward error terms
|
||||||
std::complex<double> fe00, fe11, fe10e01, fe10e32, fe22, fe30;
|
std::complex<double> fe00, fe11, fe10e01, fe10e32, fe22, fe30, fex;
|
||||||
// Reverse error terms
|
// Reverse error terms
|
||||||
std::complex<double> re33, re11, re23e32, re23e01, re22, re03;
|
std::complex<double> re33, re11, re23e32, re23e01, re22, re03, rex;
|
||||||
};
|
};
|
||||||
Point getCalibrationPoint(Protocol::Datapoint &d);
|
Point getCalibrationPoint(Protocol::Datapoint &d);
|
||||||
/*
|
/*
|
||||||
@ -158,6 +158,15 @@ private:
|
|||||||
std::complex<double> o_c = std::complex<double>(1.0, 0),
|
std::complex<double> o_c = std::complex<double>(1.0, 0),
|
||||||
std::complex<double> s_c = std::complex<double>(-1.0, 0),
|
std::complex<double> s_c = std::complex<double>(-1.0, 0),
|
||||||
std::complex<double> l_c = std::complex<double>(0, 0));
|
std::complex<double> l_c = std::complex<double>(0, 0));
|
||||||
|
void computeIsolation(std::complex<double> x0_m,
|
||||||
|
std::complex<double> x1_m,
|
||||||
|
std::complex<double> reverse_match,
|
||||||
|
std::complex<double> reverse_tracking,
|
||||||
|
std::complex<double> reverse_directivity,
|
||||||
|
std::complex<double> x0,
|
||||||
|
std::complex<double> x1,
|
||||||
|
std::complex<double> &internal_isolation,
|
||||||
|
std::complex<double> &external_isolation);
|
||||||
std::complex<double> correctSOL(std::complex<double> measured,
|
std::complex<double> correctSOL(std::complex<double> measured,
|
||||||
std::complex<double> directivity,
|
std::complex<double> directivity,
|
||||||
std::complex<double> match,
|
std::complex<double> match,
|
||||||
|
@ -21,9 +21,10 @@ CalibrationTraceDialog::CalibrationTraceDialog(Calibration *cal, double f_min, d
|
|||||||
model = new MeasurementModel(cal, measurements);
|
model = new MeasurementModel(cal, measurements);
|
||||||
ui->tableView->setModel(model);
|
ui->tableView->setModel(model);
|
||||||
ui->tableView->setColumnWidth(0, 100);
|
ui->tableView->setColumnWidth(0, 100);
|
||||||
ui->tableView->setColumnWidth(1, 350);
|
ui->tableView->setColumnWidth(1, 80);
|
||||||
ui->tableView->setColumnWidth(2, 320);
|
ui->tableView->setColumnWidth(2, 350);
|
||||||
ui->tableView->setColumnWidth(3, 160);
|
ui->tableView->setColumnWidth(3, 320);
|
||||||
|
ui->tableView->setColumnWidth(4, 160);
|
||||||
UpdateCalibrationStatus();
|
UpdateCalibrationStatus();
|
||||||
|
|
||||||
auto updateThroughStandardUI = [=](){
|
auto updateThroughStandardUI = [=](){
|
||||||
@ -37,6 +38,7 @@ CalibrationTraceDialog::CalibrationTraceDialog(Calibration *cal, double f_min, d
|
|||||||
ui->throughZero->setEnabled(true);
|
ui->throughZero->setEnabled(true);
|
||||||
ui->throughCalkit->setEnabled(true);
|
ui->throughCalkit->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
model->genderUpdated();
|
||||||
};
|
};
|
||||||
|
|
||||||
connect(ui->port1Group, qOverload<int>(&QButtonGroup::buttonClicked), [=](){
|
connect(ui->port1Group, qOverload<int>(&QButtonGroup::buttonClicked), [=](){
|
||||||
@ -73,6 +75,7 @@ CalibrationTraceDialog::CalibrationTraceDialog(Calibration *cal, double f_min, d
|
|||||||
ui->port1Standards->hide();
|
ui->port1Standards->hide();
|
||||||
ui->port2Standards->hide();
|
ui->port2Standards->hide();
|
||||||
ui->throughStandard->hide();
|
ui->throughStandard->hide();
|
||||||
|
ui->tableView->hideColumn((int) MeasurementModel::ColIndex::Gender);
|
||||||
// default selection is male
|
// default selection is male
|
||||||
ui->port1Male->click();
|
ui->port1Male->click();
|
||||||
ui->port2Male->click();
|
ui->port2Male->click();
|
||||||
|
@ -19,21 +19,46 @@ int MeasurementModel::rowCount(const QModelIndex &) const
|
|||||||
|
|
||||||
int MeasurementModel::columnCount(const QModelIndex &) const
|
int MeasurementModel::columnCount(const QModelIndex &) const
|
||||||
{
|
{
|
||||||
return ColIndexLast;
|
return (int) ColIndex::Last;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant MeasurementModel::data(const QModelIndex &index, int role) const
|
QVariant MeasurementModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
auto info = cal->getMeasurementInfo(measurements[index.row()]);
|
auto info = cal->getMeasurementInfo(measurements[index.row()]);
|
||||||
if(role == Qt::DisplayRole) {
|
if(role == Qt::DisplayRole) {
|
||||||
switch(index.column()) {
|
switch((ColIndex) index.column()) {
|
||||||
case ColIndexName:
|
case ColIndex::Name:
|
||||||
return info.name;
|
return info.name;
|
||||||
break;
|
break;
|
||||||
case ColIndexDescription:
|
case ColIndex::Gender:
|
||||||
|
switch(measurements[index.row()]) {
|
||||||
|
case Calibration::Measurement::Port1Load:
|
||||||
|
case Calibration::Measurement::Port1Open:
|
||||||
|
case Calibration::Measurement::Port1Short:
|
||||||
|
if(cal->getPortStandard(1) == Calibration::PortStandard::Male) {
|
||||||
|
return "Male";
|
||||||
|
} else {
|
||||||
|
return "Female";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Calibration::Measurement::Port2Load:
|
||||||
|
case Calibration::Measurement::Port2Open:
|
||||||
|
case Calibration::Measurement::Port2Short:
|
||||||
|
if(cal->getPortStandard(2) == Calibration::PortStandard::Male) {
|
||||||
|
return "Male";
|
||||||
|
} else {
|
||||||
|
return "Female";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case ColIndex::Description:
|
||||||
return info.prerequisites;
|
return info.prerequisites;
|
||||||
break;
|
break;
|
||||||
case ColIndexData:
|
case ColIndex::Data:
|
||||||
if(info.points > 0) {
|
if(info.points > 0) {
|
||||||
QString data = QString::number(info.points);
|
QString data = QString::number(info.points);
|
||||||
data.append(" points from ");
|
data.append(" points from ");
|
||||||
@ -45,16 +70,17 @@ QVariant MeasurementModel::data(const QModelIndex &index, int role) const
|
|||||||
return "Not available";
|
return "Not available";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ColIndexDate:
|
case ColIndex::Date:
|
||||||
return info.timestamp.toString("dd.MM.yyyy hh:mm:ss");
|
return info.timestamp.toString("dd.MM.yyyy hh:mm:ss");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if(role == Qt::SizeHintRole) {
|
} else if(role == Qt::SizeHintRole) {
|
||||||
switch(index.column()) {
|
switch((ColIndex) index.column()) {
|
||||||
case ColIndexName: return 200; break;
|
case ColIndex::Name: return 200; break;
|
||||||
case ColIndexDescription: return 500; break;
|
case ColIndex::Gender: return 150; break;
|
||||||
case ColIndexData: return 300; break;
|
case ColIndex::Description: return 500; break;
|
||||||
case ColIndexDate: return 300; break;
|
case ColIndex::Data: return 300; break;
|
||||||
|
case ColIndex::Date: return 300; break;
|
||||||
default: return QVariant(); break;
|
default: return QVariant(); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -65,11 +91,12 @@ QVariant MeasurementModel::data(const QModelIndex &index, int role) const
|
|||||||
QVariant MeasurementModel::headerData(int section, Qt::Orientation orientation, int role) const
|
QVariant MeasurementModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
{
|
{
|
||||||
if(orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
if(orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
||||||
switch(section) {
|
switch((ColIndex) section) {
|
||||||
case ColIndexName: return "Type"; break;
|
case ColIndex::Name: return "Type"; break;
|
||||||
case ColIndexDescription: return "Prerequisites"; break;
|
case ColIndex::Gender: return "Gender"; break;
|
||||||
case ColIndexData: return "Statistics"; break;
|
case ColIndex::Description: return "Prerequisites"; break;
|
||||||
case ColIndexDate: return "Timestamp"; break;
|
case ColIndex::Data: return "Statistics"; break;
|
||||||
|
case ColIndex::Date: return "Timestamp"; break;
|
||||||
default: return QVariant(); break;
|
default: return QVariant(); break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -83,6 +110,11 @@ void MeasurementModel::measurementUpdated(Calibration::Measurement m)
|
|||||||
auto it = std::find(measurements.begin(), measurements.end(), m);
|
auto it = std::find(measurements.begin(), measurements.end(), m);
|
||||||
if(it != measurements.end()) {
|
if(it != measurements.end()) {
|
||||||
int row = it - measurements.begin();
|
int row = it - measurements.begin();
|
||||||
emit dataChanged(index(row, 0), index(row, ColIndexLast - 1));
|
emit dataChanged(index(row, 0), index(row, (int) ColIndex::Last - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MeasurementModel::genderUpdated()
|
||||||
|
{
|
||||||
|
emit dataChanged(index(0, (int) ColIndex::Gender), index(rowCount() - 1, (int) ColIndex::Gender));
|
||||||
|
}
|
||||||
|
@ -11,6 +11,15 @@ class MeasurementModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum class ColIndex {
|
||||||
|
Name,
|
||||||
|
Gender,
|
||||||
|
Description,
|
||||||
|
Data,
|
||||||
|
Date,
|
||||||
|
Last
|
||||||
|
};
|
||||||
|
|
||||||
MeasurementModel(Calibration *cal, std::vector<Calibration::Measurement> measurements);
|
MeasurementModel(Calibration *cal, std::vector<Calibration::Measurement> measurements);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
@ -20,15 +29,9 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void measurementUpdated(Calibration::Measurement m);
|
void measurementUpdated(Calibration::Measurement m);
|
||||||
|
void genderUpdated();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum {
|
|
||||||
ColIndexName,
|
|
||||||
ColIndexDescription,
|
|
||||||
ColIndexData,
|
|
||||||
ColIndexDate,
|
|
||||||
ColIndexLast
|
|
||||||
};
|
|
||||||
Calibration *cal;
|
Calibration *cal;
|
||||||
std::vector<Calibration::Measurement> measurements;
|
std::vector<Calibration::Measurement> measurements;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user