[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kst-plot] /: Python bindings for Spectra.
From: Barth Netterfield <netterfield () astro ! utoronto ! ca>
Date: 2014-06-30 19:50:24
Message-ID: E1X1haq-0006nx-Nd () scm ! kde ! org
[Download RAW message or body]
Git commit 54e992c1aa3304738914a6b0021fe49348713e30 by Barth Netterfield.
Committed on 29/06/2014 at 21:32.
Pushed by netterfield into branch 'master'.
Python bindings for Spectra.
M +16 -0 pyKst/demo/testdataobjects.py
M +34 -0 pyKst/html/index.rst
M +189 -1 pyKst/pykst.py
M +4 -4 src/libkstapp/scriptserver.cpp
M +2 -2 src/libkstapp/scriptserver.h
M +136 -14 src/libkstmath/dataobjectscriptinterface.cpp
M +11 -2 src/libkstmath/dataobjectscriptinterface.h
http://commits.kde.org/kst-plot/54e992c1aa3304738914a6b0021fe49348713e30
diff --git a/pyKst/demo/testdataobjects.py b/pyKst/demo/testdataobjects.py
index bf7038e..a086e1a 100755
--- a/pyKst/demo/testdataobjects.py
+++ b/pyKst/demo/testdataobjects.py
@@ -11,3 +11,19 @@ e1.set_x(v4)
v2 = e1.Y()
v3 = e1.X()
print v2.name(), v2.value(3), v3.value(3)
+
+
+c1 = client.new_curve(e1.X(), e1.Y())
+c1.set_color("blue")
+
+p1 = client.new_plot((0.5,0.25), (1,0.5))
+p1.add(c1)
+
+psd1 = client.new_spectrum(e1.X())
+c2 = client.new_curve(psd1.X(), psd1.Y())
+c2.set_color("green")
+
+p2 = client.new_plot((0.5,0.75), (1,0.5))
+p2.add(c2)
+
+print "average?", psd1.interleaved_average()
diff --git a/pyKst/html/index.rst b/pyKst/html/index.rst
index 0f91035..8c03276 100644
--- a/pyKst/html/index.rst
+++ b/pyKst/html/index.rst
@@ -64,6 +64,35 @@ Strings
:members:
:inherited-members:
+Data Objects
+************
+Data Objects are objects which transform primitives into other
+primitives.
+
+Equations
+---------
+.. autoclass:: Equation
+ :members:
+ :inherited-members:
+
+Spectra
+-------
+.. autoclass:: Spectrum
+ :members:
+ :inherited-members:
+
+Linear Fit
+----------
+.. autoclass:: LinearFit
+ :members:
+ :inherited-members:
+
+Polynomial Fit
+--------------
+.. autoclass:: PolynomailFit
+ :members:
+ :inherited-members:
+
Relations
*********
Relations are objects which can be added to a plot.
@@ -74,6 +103,11 @@ Curves
:members:
:inherited-members:
+Images
+------
+.. autoclass:: Image
+ :members:
+ :inherited-members:
Annotations
***********
diff --git a/pyKst/pykst.py b/pyKst/pykst.py
index 8b1bba7..88fcd67 100644
--- a/pyKst/pykst.py
+++ b/pyKst/pykst.py
@@ -267,6 +267,7 @@ class Client:
"""
return Equation(self, x_vector, equation, name)
+
def equation(self, name):
""" Returns an Equation from kst given its name.
@@ -274,6 +275,46 @@ class Client:
"""
return Equation(self, "", "", name, new=False)
+ def new_spectrum(self,
+ vector,
+ sample_rate = 1.0,
+ interleaved_average = False,
+ fft_length = 10,
+ apodize = True,
+ remove_mean = True,
+ vector_units = "",
+ rate_units = "Hz",
+ apodize_function = 0,
+ sigma = 1.0,
+ output_type = 0,
+ interpolate_over_holes = True,
+ name=""):
+ """ Create a new Spectrum in kst.
+
+ See :class:`Spectrum`
+ """
+ return Spectrum(self,
+ vector,
+ sample_rate,
+ interleaved_average,
+ fft_length,
+ apodize,
+ remove_mean,
+ vector_units,
+ rate_units,
+ apodize_function,
+ sigma,
+ output_type,
+ interpolate_over_holes,
+ name)
+
+ def spectrum(self, name):
+ """ Returns a spectrum from kst given its name.
+
+ See :class:`Spectrum`
+ """
+ return Spectrum(self, "", name=name, new=False)
+
def new_linear_fit(self, xVector, yVector, weightvector = 0, name = ""):
""" Create a New Linear Fit in kst.
@@ -1340,7 +1381,7 @@ class Image(Relation):
class Equation(NamedObject) :
""" An equation inside kst.
- :param x_vector: the x vector of the equation
+ :param xvector: the x vector of the equation
:param equation: the equation
Vectors inside kst are refered to as [vectorname] or [scalarname].
@@ -1374,6 +1415,153 @@ class Equation(NamedObject) :
def set_x(self, xvector):
self.client.send_si(self.handle, "setInputVector(X,"+xvector.handle+")")
+# Spectrum ############################################################
+class Spectrum(NamedObject) :
+ """ An spectrum inside kst.
+
+ :param vector: the vector to take the spectrum of
+ :param sample_rate: the sample rate of the vector
+ :param interleaved_average: average spectra of length fft_length
+ :param fft_length: the fft is 2^fft_length long if interleaved_average is true.
+ :param apodize: if true, apodize the vector first
+ :param remove_mean: if true, remove mean first
+ :param vector_unints: units of the input vector - for labels.
+ :param rate_units: the units of the sample rate - for labels.
+ :param apodize_function: index of the apodization function - see apodize_function()
+ :param sigma: only used if gausian apodization is selected.
+ :param output_type: index for the output type - see output_type()
+ :param interpolate_over_holes: interpolate over NaNs, if true.
+
+ """
+ def __init__(self, client,
+ vector,
+ sample_rate = 1.0,
+ interleaved_average = False,
+ fft_length = 10,
+ apodize = True,
+ remove_mean = True,
+ vector_units = "",
+ rate_units = "Hz",
+ apodize_function = 0,
+ sigma = 1.0,
+ output_type = 0,
+ interpolate_over_holes = True,
+ name="", new=True) :
+
+ NamedObject.__init__(self,client)
+
+ if (new == True):
+ self.client.send("newSpectrum()")
+
+ self.client.send("change(" + vector.handle + "," +
+ b2str(sample_rate) + "," +
+ b2str(interleaved_average) + "," +
+ b2str(fft_length) + "," +
+ b2str(apodize) + "," +
+ b2str(remove_mean) + "," +
+ vector_units + "," +
+ rate_units + "," +
+ b2str(apodize_function) + "," +
+ b2str(sigma) + "," +
+ b2str(output_type) + "," +
+ b2str(interpolate_over_holes) + ")")
+
+ self.handle=self.client.send("endEdit()")
+ self.handle.remove(0,self.handle.indexOf("ing ")+4)
+ self.set_name(name)
+ else:
+ self.handle = name
+
+ def Y(self) :
+ """ a vector containing the spectrum """
+ vec = VectorBase(self.client)
+ vec.handle = self.client.send_si(self.handle, "outputVector(S)")
+ return vec
+
+ def X(self) :
+ """ a vector containing the frequency bins """
+ vec = VectorBase(self.client)
+ vec.handle = self.client.send_si(self.handle, "outputVector(F)")
+ return vec
+
+ def set_vector(self, xvector):
+ """ set the input vector """
+ self.client.send_si(self.handle, "setInputVector(I,"+xvector.handle+")")
+
+ def interleaved_average(self):
+ """ average spectra of length fft_length() """
+ retval = self.client.send_si(self.handle, "interleavedAverage()")
+ return retval
+
+ def sample_rate(self):
+ """ the sample rate assumed for the spectra. """
+ retval = self.client.send_si(self.handle, "sampleRate()")
+ return retval
+
+ def fft_length(self):
+ """ ffts are 2^fft_length() long if interleaved_average is set """
+ retval = self.client.send_si(self.handle, "fftLength()")
+ return retval
+
+ def apodize(self):
+ """ apodize before taking spectra, if set """
+ retval = self.client.send_si(self.handle, "apodize()")
+ return retval
+
+ def remove_mean(self):
+ """ remove mean before taking spectra, if set """
+ retval = self.client.send_si(self.handle, "removeMean()")
+ return retval
+
+ def vector_units(self):
+ """ the units of the input vector. For labels """
+ retval = self.client.send_si(self.handle, "vectorUnits()")
+ return retval
+
+ def rate_units(self):
+ """ the units of the sample rate. For labels """
+ retval = self.client.send_si(self.handle, "rateUnits()")
+ return retval
+
+ def apodize_function(self):
+ """ the index of the apodize function.
+
+ The apodize funcition is::
+
+ 0: default 1: Bartlett
+ 2: Window 3: Connes
+ 4: Cosine 5: Gaussian
+ 6: Hamming 7: Hann
+ 8: Welch 9: Uniform
+
+ """
+ retval = self.client.send_si(self.handle, "apodizeFunctionIndex()")
+ return retval
+
+ def gaussian_sigma(self):
+ """ the width, if apodize_funcion_index() is 5 (gaussian). """
+ retval = self.client.send_si(self.handle, "gaussianSigma()")
+ return retval
+
+ def output_type(self):
+ """ the index of the spectrum output type.
+
+ The output type is::
+
+ 0: Amplitude Spectral Density 1: Power Spectral Density = 1,
+ 2: AmplitudeSpectrum 3: Power Spectrum
+
+ """
+
+ retval = self.client.send_si(self.handle, "outputTypeIndex()")
+ return retval
+
+ def interpolate_over_holes(self):
+ """ replace NaNs with an interpolation, if true. """
+ retval = self.client.send_si(self.handle, "interpolateOverHoles()")
+ return retval
+
+
# FIT ###################################################################
class Fit(NamedObject) :
""" This is a class which provides some methods common to all fits """
diff --git a/src/libkstapp/scriptserver.cpp b/src/libkstapp/scriptserver.cpp
index 145e00b..011765b 100644
--- a/src/libkstapp/scriptserver.cpp
+++ b/src/libkstapp/scriptserver.cpp
@@ -124,8 +124,8 @@ ScriptServer::ScriptServer(ObjectStore *obj) : _server(new QLocalServer(this)),
_fnMap.insert("getHistogramList()",&ScriptServer::getHistogramList);
// _fnMap.insert("newHistogram()",&ScriptServer::newHistogram);
- _fnMap.insert("getPSDList()",&ScriptServer::getPSDList);
- _fnMap.insert("newPSD()",&ScriptServer::newPSD);
+ _fnMap.insert("getSpectrumList()",&ScriptServer::getSpectrumList);
+ _fnMap.insert("newSpectrum()",&ScriptServer::newSpectrum);
_fnMap.insert("getPluginList()", &ScriptServer::getPluginList);
_fnMap.insert("newPlugin()",&ScriptServer::newPlugin);
@@ -611,13 +611,13 @@ QByteArray ScriptServer::newHistogram(QByteArray&, QLocalSocket* s,ObjectStore*,
*/
-QByteArray ScriptServer::getPSDList(QByteArray&, QLocalSocket* s,ObjectStore*_store) {
+QByteArray ScriptServer::getSpectrumList(QByteArray&, QLocalSocket* s,ObjectStore*_store) {
return outputObjectList<PSD>(s,_store);
}
-QByteArray ScriptServer::newPSD(QByteArray&, QLocalSocket* s,ObjectStore*) {
+QByteArray ScriptServer::newSpectrum(QByteArray&, QLocalSocket* s,ObjectStore*) {
if(_interface) {
return handleResponse("To access this function, first call endEdit()",s);
diff --git a/src/libkstapp/scriptserver.h b/src/libkstapp/scriptserver.h
index 573ccf3..b94f147 100644
--- a/src/libkstapp/scriptserver.h
+++ b/src/libkstapp/scriptserver.h
@@ -84,8 +84,8 @@ protected:
QByteArray getHistogramList(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
//QByteArray newHistogram(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
- QByteArray getPSDList(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
- QByteArray newPSD(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
+ QByteArray getSpectrumList(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
+ QByteArray newSpectrum(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
QByteArray getPluginList(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
QByteArray newPlugin(QByteArray& command, QLocalSocket* s,ObjectStore*_store);
diff --git a/src/libkstmath/dataobjectscriptinterface.cpp b/src/libkstmath/dataobjectscriptinterface.cpp
index 50c1eea..f511734 100644
--- a/src/libkstmath/dataobjectscriptinterface.cpp
+++ b/src/libkstmath/dataobjectscriptinterface.cpp
@@ -252,6 +252,20 @@ SpectrumSI::SpectrumSI(PSDPtr psd) {
_dataObject = 0;
}
+ _fnMap.insert("change",&SpectrumSI::change);
+ _fnMap.insert("sampleRate",&SpectrumSI::sampleRate);
+
+ _fnMap.insert("interleavedAverage",&SpectrumSI::interleavedAverage);
+ _fnMap.insert("fftLength",&SpectrumSI::fftLength);
+ _fnMap.insert("apodize",&SpectrumSI::apodize);
+ _fnMap.insert("removeMean",&SpectrumSI::removeMean);
+ _fnMap.insert("vectorUnits",&SpectrumSI::vectorUnints);
+ _fnMap.insert("rateUnits",&SpectrumSI::rateUnits);
+ _fnMap.insert("apodizeFunctionIndex",&SpectrumSI::apodizeFunctionIndex);
+ _fnMap.insert("gaussianSigma",&SpectrumSI::gaussianSigma);
+ _fnMap.insert("outputTypeIndex",&SpectrumSI::outputTypeIndex);
+ _fnMap.insert("interpolateOverHoles",&SpectrumSI::interpolateOverHoles);
+
_fnMap.insert("setInputVector",&SpectrumSI::setInputVector);
_fnMap.insert("setInputScalar",&SpectrumSI::setInputScalar);
_fnMap.insert("outputVector",&SpectrumSI::outputVector);
@@ -306,29 +320,137 @@ ScriptInterface* SpectrumSI::newSpectrum(ObjectStore *store) {
QString SpectrumSI::change(QString& command) {
- /*
if (_psd) {
QStringList vars = getArgs(command);
-
+
+ QString vec_name = vars.at(0);
+ VectorPtr vector = kst_cast<Vector>(_dataObject->store()->retrieveObject(vec_name));
+
+
_psd->change(vector,
- sampleRate,
- interleavedAverage,
- FFTLength,
- apodize,
- removeMean,
- vectorUnits,
- rateUnits,
- apodizeFunction,
- sigma,
- output,
- interpolateOverHoles);
+ vars.at(1).toDouble(), // sample_rate
+ (vars.at(2).toLower() == "true"), // interleaved_average,
+ vars.at(3).toInt(), // fft_length,
+ (vars.at(4).toLower() == "true"), // apodize,
+ (vars.at(5).toLower() == "true"), // remove_mean,
+ vars.at(6), // vector unints
+ vars.at(7), // rate units
+ ApodizeFunction(vars.at(8).toInt()), // apodizeFunction,
+ vars.at(9).toDouble(), // sigma,
+ PSDType(vars.at(10).toInt()), // output type
+ (vars.at(11).toLower() == "true") // interpolateOverHoles
+ );
return "done";
} else {
return "Invalid";
}
- */
+}
+
+QString SpectrumSI::sampleRate(QString&) {
+ if (_psd) {
+ return QString::number(_psd->frequency());
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::interleavedAverage(QString &) {
+ if (_psd) {
+ if (_psd->interpolateHoles()) {
+ return "True";
+ } else {
+ return "False";
+ }
+ } else {
+ return "Invalid";
+ }
+}
+
+
+QString SpectrumSI::fftLength(QString &) {
+ if (_psd) {
+ return QString::number(_psd->frequency());
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::apodize(QString &) {
+ if (_psd) {
+ if (_psd->apodize()) {
+ return "True";
+ } else {
+ return "False";
+ }
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::removeMean(QString &) {
+ if (_psd) {
+ if (_psd->removeMean()) {
+ return "True";
+ } else {
+ return "False";
+ }
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::vectorUnints(QString &) {
+ if (_psd) {
+ return _psd->vectorUnits();
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::rateUnits(QString &) {
+ if (_psd) {
+ return _psd->rateUnits();
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::apodizeFunctionIndex(QString &) {
+ if (_psd) {
+ return QString::number(int(_psd->apodizeFxn()));
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::gaussianSigma(QString &) {
+ if (_psd) {
+ return QString::number(_psd->gaussianSigma());
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::outputTypeIndex(QString &) {
+ if (_psd) {
+ return QString::number(int(_psd->output()));
+ } else {
+ return "Invalid";
+ }
+}
+
+QString SpectrumSI::interpolateOverHoles(QString &) {
+ if (_psd) {
+ if (_psd->interpolateHoles()) {
+ return "True";
+ } else {
+ return "False";
+ }
+ } else {
+ return "Invalid";
+ }
}
diff --git a/src/libkstmath/dataobjectscriptinterface.h b/src/libkstmath/dataobjectscriptinterface.h
index b312ea4..c9ae969 100644
--- a/src/libkstmath/dataobjectscriptinterface.h
+++ b/src/libkstmath/dataobjectscriptinterface.h
@@ -121,8 +121,17 @@ public:
QMap<QString,SpectrumInterfaceMemberFn> _fnMap;
QString change(QString &command);
- //QString equation(QString &);
- //QString setEquation(QString &eq);
+ QString sampleRate(QString &);
+ QString interleavedAverage(QString &);
+ QString fftLength(QString &);
+ QString apodize(QString &);
+ QString removeMean(QString &);
+ QString vectorUnints(QString &);
+ QString rateUnits(QString &);
+ QString apodizeFunctionIndex(QString &);
+ QString gaussianSigma(QString &);
+ QString outputTypeIndex(QString &);
+ QString interpolateOverHoles(QString &);
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic