Handle csv import/export with power traces
This commit is contained in:
parent
deefe30beb
commit
fa4e954f73
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
@ -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 {
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user