Warning, /graphics/kst-plot/devel-docs/deprecated/future.txt is written in an unsupported language. File is not indexed.

0001 kst: Long Term Goals
0002 Barth Netterfield Nov. 18, 2004
0003 
0004 1. Overview:
0005         Our  goal should be to develop kst into the premier data viewing, plotting, and light data analysis tool, prioritized in that order.  In particular, we would like to directly compete with (and eventually surpass) sm, pgplot, and xmgrace.  The rational is to have one tool (kst) be used for data display at all stages of an experiment's life, from real time data collection to data analysis, to publication.  As our most important specific case, I would like this to be true for the Planck-HFI.  I believe that we have created a framework in kst which is capable of attaining this goal, if we remain disciplined about both UI design and code structure.  
0006         What follows is an incomplete list of the types of features we would need to add to kst to fully achieve this lofty goal.  While the priority of many of these features may be relatively low, nothing should be done to the kst code base which would impede later upgrades to these features.
0007 
0008 2. New Capabilities
0009 2.1. Data Viewing
0010         Currently, kst is very strong in many aspects of data viewing.  However, there are a couple of important areas where it can be improved.
0011 i ) advanced Image based data representations: 
0012 * Waterfall plots (builtin?)
0013 * focal Plane visual representations (instrument specific plugins)
0014 * simple binned maps (plugin)
0015 ii ) UI enhancements: These require some discussion
0016 * Better auto-labeling 
0017 * add-curve from context menu 
0018 * edit parent data object of curves from context menu 
0019 * QuickStats(tm) label in context menu
0020 * X-axis sensitive Y auto scaling
0021 * X-axis sensitive curve fitting
0022 iii ) Colour co-ordination: psds and histograms should default to the same colour as their curves
0023 iv ) Shift/scale for RVectors: to, eg, allow easy/fast calibration for datasources that don't otherwise support it.
0024 v ) Time Awareness (input)
0025 * Data sources need to have a (configurable) TIME_ field, which is A*<somefield> + B.  <somefield> could be, eg, INDEX.  The configuration should be on a data-source by data-source basis, and should be cached (how to avoid this growing to \infinity?)
0026 * Vector limits everywhere need to be able to accept time rather than INDEX for ranges.
0027 
0028 
0029 2.2. Plotting
0030         The goal here is to make kst suitable for publication quality plots for a sufficiently large fraction of cases, so that a second tool needed.
0031 i ) Asymetric error bars: currently only symetric errors are supported.  We need a mechanism for s+ != s-.
0032 ii ) Floating labels: labels outside of plots
0033 iii ) Alternate axis limits: (eg, wavenumber on bottom, frequency on top)
0034 iv ) shared axis: (eg, Stack several plots vertically so they are touching, all with the same X Axis, only labeled on the bottom plot)
0035 v ) sparse symbols as suggested by nicolas
0036 vi ) Configurable legends:  
0037 * Ability to add text (including latex) 
0038 * change curve name text 
0039 * change listed order
0040 * Floating legends (shared between multiple plots)
0041 vii ) Drawing elements: 
0042 * lines & arrows
0043 * Shapes (boxes, circles)
0044 * fills (eg, shade, hatch, or blank regions of the plot)
0045 * curves
0046 viii ) R to L language support (?)
0047 ix ) Better control over symbols
0048 * sm options (#vertex, star or polygon, filled or open, size)
0049 * png (etc) import
0050 * select indexed from a list (V[0] uses png[0], V[1] uses png[1] etc.
0051 x ) Better latex support in labels
0052 * more math symbols (sqrt, matrix related)
0053 * vertically positioned integral and sum limits
0054 * multi-row equation support, not just 'inline' equations.
0055 xi ) Axis property control: In an 'advanced' dialog...
0056 * line width
0057 * tick lengths
0058 * line colour different from label colour
0059 * t type axis rather than box axis
0060 xii ) Layout mode magnetic borders
0061 xiii ) Alternal base for axis (eg, hex)
0062 xiv ) Other types of plots (eg, Polar)
0063 
0064 2.3. Data Analysis
0065 i ) A spreadsheet mode for looking at and hand editing data vectors
0066 ii ) Improved data export capability: 
0067 * Multi vector
0068 * Subsets defined by X vector
0069 * Subsets defined by current plot ranges
0070 * Output to other formats than ascii
0071 * Interoplation in export
0072 iii ) Scripting environment
0073 * Loops & branches
0074 * subroutines and functions (which can take all data objects)
0075 * Natural format equations (ie, e2 = i*v1 + s1*v2^2)
0076 * String handling
0077 * String lists for creating data object lists
0078 * Data source list, Vector list and scalar list indexing
0079 * Vector element access
0080 * Convenient access to plugins from scripts
0081 * Script command prompt
0082 * Scripts from files
0083 * Access to command line arguments in scripts
0084 * Ability to extend UI from scripts
0085 * Access to timer system from scripts
0086 * Full control over labels, plots, windows
0087 iv ) plugins
0088 * Despike
0089 * Deconvolve
0090 * Gausian fit to negative gaussians
0091 * Differentiation
0092 * Integration
0093 * FIR time domain filtering
0094 * Fit to RC modeled Cosmic Rays
0095 * Fits to arbitrary equations
0096 v ) data processing optionally limited to current view
0097 * Fits
0098 * Stats
0099 vi ) UI for creating functions (and perhaps subroutines) as mentioned in Scripting Environment.  (this has previously been referred to a 'filter sets')
0100 vii ) Math in labels (ie, [S1_BOLO1-rms]*2.0)
0101 viii ) consider allowing non-power of 2 FFTs (use gsl or fftw?)
0102 
0103 2.4. Other features
0104 i ) Access to data sources using KIO: This will work like an indirect file, and will allow reading of archived data only.
0105 ii ) Embed/attach vector data in kst file (option at save time)
0106 iii ) Allow saving and loading of kst files via KIO: Particularly useful w/ embedded data.
0107 iv ) Drag and Drop
0108 * Drop in other apps as png/ps/pdf (think KWord or KMail...)
0109 * Drag between MDI windows
0110 * Drag between kst sessions
0111 v ) 'Database' system for scalars: we need to be able to turn off the MKS constants (rarely needed in the general case) and add other experiment specific scalar lists.
0112 vi ) Make a KstPlotLib to allow kst to be used from C++ programs (reverse scripting....)
0113 vii ) Make .kst files a recognized MIME type: This will be very useful when combined with embedded data.
0114 viii ) Make kst a kpart: to allow embedding in konq (kst as embedded viewer) or kpresenter (allow interactive plots in a presentation)
0115 ix ) Eye Candy: possibly completely useless frills.... except maybe for kpresenter/ppt use or for less serious publications.
0116 * Import background from a PNG/jpeg, etc
0117 * raised/shadowed/embossed lines and labels
0118 * raised/shadowed/embossed bar graph bars, pie charts, etcgraph
0119 * rounded corners on plots
0120 * Raised/shadowed plots
0121 * Use alpha channel to allow semi-transparent plots
0122 * Make all of the above themable
0123 
0124 3. Library and Class changes
0125         In order to do all of these things, it will be important to keep careful control over the code structure of kst.  However, all changes we make to the class structure has to be specifically motivated by a tangable goal.  As I see it, the following items will require some noticeable/significant re-architecturing.  All re-architecturing needs to be done in an incremental way (3 day steps max), rather than via a re-write, to avoid long code development stagnations!
0126 3.1. Data viewing
0127 i ) a Waterfall Plot DataObject class  and UI needs to be created.  It should use the same structure as psds and histograms do.
0128 ii ) Plugins need to export matrixes to allow experiment specific image stuff.
0129 3.2. Plot upgrades: 
0130 i ) Floating labels (outside of plots) require ViewObject label.  Axis and tick labels work better under current model.  We don't want to support 2 rendering engines.  So - the label rendering engine needs to be pulled out of Kst[View]Label and shared by both classes.  Current floating label model needs to be replaced.
0131 ii ) Floating legends require legends to become ViewObjects
0132 iii ) New Legend classs needs to use new lable rendering class to allow equations and R to L without code duplication
0133 iv ) Optionally floating ViewObjects requires the ViewObjects to be attached to a 'parent' or be free (ie, attached to the top level view).
0134 v ) ViewObject classes for lines, etc must be created.
0135 vi ) Refactoring of renderer may be useful to ease addition of extended point properties and axis properties.
0136 3.3. Data Analysis
0137 i ) Class to represent subroutines (generalized filter sets). Should inherit from a 'kstplugin'....
0138 ii ) subvectors: For working on visible part of plots
0139 * Must be efficient (produced by plots during drawing?)
0140 * should appear as a kstvector.
0141 3.4. Other stuff
0142 i ) making KstPlotLib will require changes beyond the scope of human comprehension.
0143 ii ) Making kst a Kpart will be hard also.
0144