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();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
if(input) {
|
||||
|
@ -94,6 +94,9 @@ public:
|
||||
Data getInterpolatedSample(double x);
|
||||
unsigned int numSamples();
|
||||
|
||||
static QString dataTypeToString(DataType type);
|
||||
static DataType dataTypeFromString(QString s);
|
||||
|
||||
// indicate whether this function produces time or frequency domain data
|
||||
virtual DataType outputType(DataType inputType) = 0;
|
||||
virtual QString description() = 0;
|
||||
|
@ -119,7 +119,7 @@ void Trace::fillFromTouchstone(Touchstone &t, unsigned int parameter)
|
||||
}
|
||||
clear();
|
||||
domain = DataType::Frequency;
|
||||
fileParemeter = parameter;
|
||||
fileParameter = parameter;
|
||||
filename = t.getFilename();
|
||||
for(unsigned int i=0;i<t.points();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);
|
||||
}
|
||||
clear();
|
||||
fileParemeter = parameter;
|
||||
fileParameter = parameter;
|
||||
filename = csv.getFilename();
|
||||
auto xColumn = csv.getColumn(0);
|
||||
if(csv.getHeader(0).compare("time", Qt::CaseInsensitive) == 0) {
|
||||
@ -215,7 +215,7 @@ QString Trace::fillFromCSV(CSV &csv, unsigned int parameter)
|
||||
Data d;
|
||||
d.x = xColumn[i];
|
||||
d.y = complex<double>(real[i], imag[i]);
|
||||
addData(d, DataType::Frequency);
|
||||
addData(d, domain);
|
||||
}
|
||||
reflection = false;
|
||||
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)
|
||||
{
|
||||
// TODO set domain depending on incoming data
|
||||
domain = DataType::Frequency;
|
||||
createdFromFile = false;
|
||||
_liveType = type;
|
||||
_liveParam = param;
|
||||
@ -328,7 +326,7 @@ nlohmann::json Trace::toJSON()
|
||||
} else if(isFromFile()) {
|
||||
j["type"] = "File";
|
||||
j["filename"] = filename.toStdString();
|
||||
j["parameter"] = fileParemeter;
|
||||
j["parameter"] = fileParameter;
|
||||
}
|
||||
j["velocityFactor"] = vFactor;
|
||||
j["reflection"] = reflection;
|
||||
@ -366,15 +364,15 @@ void Trace::fromJSON(nlohmann::json j)
|
||||
paused = j.value("paused", false);
|
||||
} else if(type == "Touchstone" || type == "File") {
|
||||
auto filename = QString::fromStdString(j.value("filename", ""));
|
||||
fileParemeter = j.value("parameter", 0);
|
||||
fileParameter = j.value("parameter", 0);
|
||||
try {
|
||||
if(filename.endsWith(".csv")) {
|
||||
auto csv = CSV::fromFile(filename);
|
||||
fillFromCSV(csv, fileParemeter);
|
||||
fillFromCSV(csv, fileParameter);
|
||||
} else {
|
||||
// has to be a touchstone file
|
||||
Touchstone t = Touchstone::fromFile(filename.toStdString());
|
||||
fillFromTouchstone(t, fileParemeter);
|
||||
fillFromTouchstone(t, fileParameter);
|
||||
}
|
||||
} catch (const exception &e) {
|
||||
std::string what = e.what();
|
||||
@ -932,7 +930,7 @@ QString Trace::getFilename() const
|
||||
|
||||
unsigned int Trace::getFileParameter() const
|
||||
{
|
||||
return fileParemeter;
|
||||
return fileParameter;
|
||||
}
|
||||
|
||||
double Trace::getNoise(double frequency)
|
||||
|
@ -174,7 +174,7 @@ private:
|
||||
bool calibration;
|
||||
DataType domain;
|
||||
QString filename;
|
||||
unsigned int fileParemeter;
|
||||
unsigned int fileParameter;
|
||||
std::set<Marker*> markers;
|
||||
struct {
|
||||
union {
|
||||
|
@ -42,7 +42,7 @@ void TraceCSVExport::on_buttonBox_accepted()
|
||||
CSV csv;
|
||||
// create the first column (X data)
|
||||
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();
|
||||
for(unsigned int i=0;i<samples;i++) {
|
||||
X.push_back(traces[0]->sample(i).x);
|
||||
|
Loading…
Reference in New Issue
Block a user