[Kst] Scripting plan

Barth Netterfield netterfield at astro.utoronto.ca
Wed Mar 9 17:12:47 CET 2005


Yesterday, George, MAMD, and I met to discuss the scripting language for kst.  
A proposal is in kdeextragear-2/kst/devel-docs/scripting.txt.

All interested parties are encouraged to comment while it is easy to 
change :-)

------------------------------
Javascript Definition:

Overview:
A planck-HFI reqirement is that kst support scripting to allow flexable
generation of complex plots.  We plan to use JavaScript as excellent
facilities for this exist within KDE.

Requirements:
- Complete bindings to all objects
        - everything that can be done in a .kst file can be done with a
          javascript
- DCOP based commandline tool with konsole
        - will provide a 'command line' to kst (like sm or idl)
        - Can be commanded from either an embedded konsole, or an external
          konsole.
- Multiple ways of entering scripts
        - from command line when starting kst
                eg: kst -J "file=\"data.dat\";field=\"N15C2\"" bolo.js
        - From file menue
        - From DCOP/command line tool.
- We will not use automatic bindings.  Instead, we will "ideal" bindings
  and implement them as internal calls to our internal objects
- The update thread doesn't run if the interpreter is running, and blocks the
  interpreter from starting up during an update There will be a force
  update/repaint mechanism to allow updates during script interpretation.
- vectors can be referenced as strings (tagname) everywhere too


Open Questions:
- kjsembed or qsa?


Examples:
A plot with points + error bars, and a line fit.
The X axis vector has to be re-scaled.

var f = File.load("Data.dat");

var Vx = DataVector(f, "1");
string Vn = DataVector(f, "2").tag; // refer to this vector w/ its tagname
var Vp = DataVector(f, "3");
var Vm = DataVector(f, "4");

var Ex = Equation("[" + Vx.tag + "] * 0.0042", Vx);

var C = Curve(Ex.sv, Vn);
C.hasPoint = true;
C.hasLines = false;
C.setYError(Vp, Vm);
C.setPointType(6);.

var lfit = fit("kstfit_linear_unweighted", Ex.sv, Vn); // convenience class

var Cf = Curve(Ex.sv, lfit.Y_Fitted);

var P = Plot();

P.addCurve(C);  // ordering etc.............  P.curves.append() etc?
P.addCurve(Cf);

P.xLabel.text = "x axis";
P.yLabel.text = "y axis";

L = PlotLabel(lfit.parameterstring);
L.setPos(0.2, 0.8);
P.addLabel(L);

Window().addPlot(P);


More information about the Kst mailing list