Handle csv import/export with power traces

This commit is contained in:
Jan Käberich 2021-07-13 18:40:40 +02:00
parent deefe30beb
commit fa4e954f73
5 changed files with 38 additions and 12 deletions

View File

@ -127,6 +127,31 @@ unsigned int TraceMath::numSamples()
return data.size(); return data.size();
} }
QString TraceMath::dataTypeToString(TraceMath::DataType type)
{
switch(type) {
case DataType::Frequency:
return "Frequency";
case DataType::Power:
return "Power";
case DataType::Time:
return "Time";
default:
return "Invalid";
}
}
TraceMath::DataType TraceMath::dataTypeFromString(QString s)
{
for(unsigned int i=0;i<(int) DataType::Invalid;i++) {
if(s.compare(dataTypeToString((DataType) i), Qt::CaseInsensitive) == 0) {
return (DataType) i;
}
}
// not found
return DataType::Invalid;
}
void TraceMath::removeInput() void TraceMath::removeInput()
{ {
if(input) { if(input) {

View File

@ -94,6 +94,9 @@ public:
Data getInterpolatedSample(double x); Data getInterpolatedSample(double x);
unsigned int numSamples(); unsigned int numSamples();
static QString dataTypeToString(DataType type);
static DataType dataTypeFromString(QString s);
// indicate whether this function produces time or frequency domain data // indicate whether this function produces time or frequency domain data
virtual DataType outputType(DataType inputType) = 0; virtual DataType outputType(DataType inputType) = 0;
virtual QString description() = 0; virtual QString description() = 0;

View File

@ -119,7 +119,7 @@ void Trace::fillFromTouchstone(Touchstone &t, unsigned int parameter)
} }
clear(); clear();
domain = DataType::Frequency; domain = DataType::Frequency;
fileParemeter = parameter; fileParameter = parameter;
filename = t.getFilename(); filename = t.getFilename();
for(unsigned int i=0;i<t.points();i++) { for(unsigned int i=0;i<t.points();i++) {
auto tData = t.point(i); auto tData = t.point(i);
@ -201,7 +201,7 @@ QString Trace::fillFromCSV(CSV &csv, unsigned int parameter)
fill(imag.begin(), imag.end(), 0.0); fill(imag.begin(), imag.end(), 0.0);
} }
clear(); clear();
fileParemeter = parameter; fileParameter = parameter;
filename = csv.getFilename(); filename = csv.getFilename();
auto xColumn = csv.getColumn(0); auto xColumn = csv.getColumn(0);
if(csv.getHeader(0).compare("time", Qt::CaseInsensitive) == 0) { if(csv.getHeader(0).compare("time", Qt::CaseInsensitive) == 0) {
@ -215,7 +215,7 @@ QString Trace::fillFromCSV(CSV &csv, unsigned int parameter)
Data d; Data d;
d.x = xColumn[i]; d.x = xColumn[i];
d.y = complex<double>(real[i], imag[i]); d.y = complex<double>(real[i], imag[i]);
addData(d, DataType::Frequency); addData(d, domain);
} }
reflection = false; reflection = false;
createdFromFile = true; createdFromFile = true;
@ -246,8 +246,6 @@ void Trace::fillFromDatapoints(Trace &S11, Trace &S12, Trace &S21, Trace &S22, c
void Trace::fromLivedata(Trace::LivedataType type, LiveParameter param) void Trace::fromLivedata(Trace::LivedataType type, LiveParameter param)
{ {
// TODO set domain depending on incoming data
domain = DataType::Frequency;
createdFromFile = false; createdFromFile = false;
_liveType = type; _liveType = type;
_liveParam = param; _liveParam = param;
@ -328,7 +326,7 @@ nlohmann::json Trace::toJSON()
} else if(isFromFile()) { } else if(isFromFile()) {
j["type"] = "File"; j["type"] = "File";
j["filename"] = filename.toStdString(); j["filename"] = filename.toStdString();
j["parameter"] = fileParemeter; j["parameter"] = fileParameter;
} }
j["velocityFactor"] = vFactor; j["velocityFactor"] = vFactor;
j["reflection"] = reflection; j["reflection"] = reflection;
@ -366,15 +364,15 @@ void Trace::fromJSON(nlohmann::json j)
paused = j.value("paused", false); paused = j.value("paused", false);
} else if(type == "Touchstone" || type == "File") { } else if(type == "Touchstone" || type == "File") {
auto filename = QString::fromStdString(j.value("filename", "")); auto filename = QString::fromStdString(j.value("filename", ""));
fileParemeter = j.value("parameter", 0); fileParameter = j.value("parameter", 0);
try { try {
if(filename.endsWith(".csv")) { if(filename.endsWith(".csv")) {
auto csv = CSV::fromFile(filename); auto csv = CSV::fromFile(filename);
fillFromCSV(csv, fileParemeter); fillFromCSV(csv, fileParameter);
} else { } else {
// has to be a touchstone file // has to be a touchstone file
Touchstone t = Touchstone::fromFile(filename.toStdString()); Touchstone t = Touchstone::fromFile(filename.toStdString());
fillFromTouchstone(t, fileParemeter); fillFromTouchstone(t, fileParameter);
} }
} catch (const exception &e) { } catch (const exception &e) {
std::string what = e.what(); std::string what = e.what();
@ -932,7 +930,7 @@ QString Trace::getFilename() const
unsigned int Trace::getFileParameter() const unsigned int Trace::getFileParameter() const
{ {
return fileParemeter; return fileParameter;
} }
double Trace::getNoise(double frequency) double Trace::getNoise(double frequency)

View File

@ -174,7 +174,7 @@ private:
bool calibration; bool calibration;
DataType domain; DataType domain;
QString filename; QString filename;
unsigned int fileParemeter; unsigned int fileParameter;
std::set<Marker*> markers; std::set<Marker*> markers;
struct { struct {
union { union {

View File

@ -42,7 +42,7 @@ void TraceCSVExport::on_buttonBox_accepted()
CSV csv; CSV csv;
// create the first column (X data) // create the first column (X data)
vector<double> X; vector<double> X;
QString Xname = traces[0]->outputType() == Trace::DataType::Frequency ? "Frequency" : "Time"; QString Xname = Trace::dataTypeToString(traces[0]->outputType());
auto samples = traces[0]->numSamples(); auto samples = traces[0]->numSamples();
for(unsigned int i=0;i<samples;i++) { for(unsigned int i=0;i<samples;i++) {
X.push_back(traces[0]->sample(i).x); X.push_back(traces[0]->sample(i).x);