LIST OF DESIRED IMPROVEMENTS OR ADDITIONS TO THE KARMA SOFTWARE PACKAGE

Originally compiled by Steven Gibson
Comments added by Richard Gooch

Priority items are shown in red.
Closed issues (completed tasks/refusals) are shown in green.
Open issues are shown in blue.

INPUT / OUTPUT

FILE LOADING

Some indication of what directory one is in
Done 30-AUG-1999. IRIX has different font sizes, which exposed a bug in the Athena text entry widget. I've worked around this.

List file sizes in file browser along with names
This will require extra calls to stat(2) for every entry. This will incur a small performance loss.

Make selector window *short*, maybe 20 lines tall; very often wind up trying to shrink down to fit lots of stuff on screen, and lose buttons
Done 26-AUG-1999. I've added the "Filewin.numLines" resource to allow you to specify the number of lines.

"Display all" option in case file names do not have expected extensions; if load one of these, either attempt to determine format from file itself, or prompt user
Auto-detection of file type by reading the file contents is messy. I'd rather avoid that. As we discussed, I could send unknown file types to a popup browser which asks what the file type is.

Sort listed DRAO files by name rather than number (plus, numbers aren't being sorted right either: 1, 10, .. 2, 20, ...)
Done 26-AUG-1999.

Browser (and file selection?) scrolling control with arrow keys, page up, page down, etc.
Done 8-MAR-2004. I had to write my own list display widget.

Fast-load with any BLANK value, not just -32768 (or the 4-byte equivalent)
Probably the simplest way to handle this is to write a FITS->FITS converter which cleans up these stupid files; it could even operate in situ. Otherwise a lot of code and interfaces would have to change.

Option to UNload a big file before loading another, instead of having to quit kview & restart
Done 2-AUG-1999

Robustness against bad directories & pointers, stale NFS mounts, etc.
I thought I'd improved things recently?

DO NOT reference file AFTER it has been loaded -- use loaded data only! At present, if file changes on disk, get big problems & user confusion.
This is due to memory-mapping. No way around this if you want the benefits of memory mapping. "Patient: Doctor, it hurts when I do this. Doctor: Well, don't do that then". Turn on the writable toggle to avoid the problem.

Option to break apart planes of a cube into separate 2-D images to be compared directly inside kview, each with its own intensity scaling or whatever (see intensity histograms)
This will have to wait until kview++

Subsetting ("decimation" is a misnomer and should be changed):

Preserve scaled min&max when loading a new file, not raw min&max
Done 15-FEB-2002

IMAGE EXPORT (SCREEN DISPLAY, NOT DATA VALUES)

Draw annotation circle overlays correctly (not as ovals)!
I'll have to look at this. I wasn't aware this was happening. Doesn't overlay_ellipse do this?

Fix EPS export -- currently only PS will print on printer! (missing "showpage" at end of file)
Probably a printer bug. Some printers handle this OK. My understanding of EPS is that "showpage" is not supposed to be there.

Fix bug: crashes when making PS of NaN pixels
Is this still a problem? I went through and fixed a lot of places where NaNs were a problem. A quick check of the PS code shows the updated code. Jo-Anne reported this problem, and it appears to have been fixed.

Make "nicer" output image is actually what is in display window or, failing that -- preview option? (or perhaps draw page boundaries on canvas as annotation?) currently very difficult to get PS output the way I want it (see HISA notes)
Done 22-AUG-1999: space wastage reduced.

Ensure that RESOLUTION of output is same as what is on screen - have problem with huge output generated just because screen shows a big image at low magnification
NO! I deliberately designed the PS output to display at the data resolution, not the screen resolution. I think it's wrong to throw away data just because the screen doesn't have enough pixels.
this is also a problem for PPM output!
Done 18-MAY-2000: I wrote a memory-based display driver, which operates at screen resolution. It also gives you axis labels and annotations in PPM output.
perhaps option to output either what is actually shown, or full-resolution (Jayanne wants the latter; I'd prefer the former)
I agree with her on this one. I think we need to have a good philosophical argument on this one. The good news is that the new memory-based display driver provides some functions that could be used to do this.

PPM export uses linear transfer function and full intensity scale, even when display uses something else should have displayed data tranfer function & stretch in output image, whether PPM or PostScript (Jayanne asks that this be a priority)
This was done in v1.6.29.

Proper, straightforward MPEG generation from kview/xray movies
What's the problem? You can already create a PPM movie. From there just use your favourite MPEG encoder software.

Option to give cursor coordinates in exported profile plots (Jayanne)
Done.

Contour overlays loaded in from the "overlays" menu are not exported to PPM (in kview-rgb)
Done 18-MAY-2000: the memory-based display driver solves this. This was a general problem, not specific to kview-rgb.

DATA EXPORT

Give choice of bits per pixel, with data scaling options where appropriate
I'll look at preserving the data type in memory, rather than converting to float upon writing.


DATA DISPLAY

INTENSITY HISTOGRAMS

Make optional! Allow keyboard inputs for display floor & ceiling
Done 12-SEP-1999. I've added text entry fields to the intensity policy control panel.

maybe have a button to click to calculate histogram at load time; otherwise
This adds state. I hate state.

just scale empty plot to data min & max, and allow mouse selection as before without histogram computation?
Huh? I already have auto-scaling to min&max.

Russ likes automatic 95% scaling; another option is what IRAF DISPLAY does for whatever autoscaling scheme, should make automatic for files below a certain size (specified in ~/.karma/extensions?), else query user on load
Yuk, yuk, yuk.

Allow "zero left" to do what it says even when data minimum > 0
Hm. I worry that this could break something.

Add zoom in / zoom out by factors of 2 at a mouse click
Done 15-NOV-2001.

Show histogram of data *AFTER* transfer function (LINEAR, SQRT, LOG)
I don't want this. It breaks the independence between the dataclip widget and other parts of the infrastructure, which would lead to maintability problems. Besides, why do you want this? Although, maybe there is a clean way of doing this. I'll have to ponder it.
However, I can happily add an independent control to the Dataclip widget which can change the scales for the horizontal and vertical axes.

Add numerical labels to axes!
This requires support for logarithmic axes in the axis labelling code. Not available yet.

Plot in true histogram fashion -- a bar graph, not a line graph!
Done 15-JUN-2000.

Currently, percentage selection depends upon displayability, e.g., if 99% is represented by a single screen pixel width, one cannot select 95% without zooming first; this should be fixed.
The problem is that it requires the histogram to be recomputed when you do this. That can be expensive. The scheme I've used isn't perfect, but at least it's fast.

Also, if displayed part of intensity histogram window is off bottom of screen, it won't adjust image scaling. This dependence on the displayed histogram is undesirable.
This is because the refresh function is aborted if the canvas is hidden. This is awkward to change. If other issues are dealt with, then hopefully this won't matter anymore.

Optional histogram of just the data in the displayed frame rather than the entire cube.
That's hard. It would really require switching the tool to a single-plane mode. It would be like having a different dataset. It would make this quite messy. Perhaps this could be done cleanly in kview++. I'll have to think about this.

ZOOM FUNCTION

Add "undo" feature to zoom menu to return to previous zoom state (keep stack) Make unzoomed "state" reachable with zoom-out commands
This prompts a general comment: keeping state is something to be avoided. It leads to bugs and maintainability problems, and can also tie your hands when later you want to add a new feature. Caution is needed here. I'll reluctantly consider adding an "undo last" feature.

Select full area designated by mouse (within display canvas) rather than just that which falls within display subsection of canvas -- in this way, can adjust zoom area to be a bit bigger than current, if something is just off edge of current
Done 4-DEC-2001: you can use the 'O' key binding to zoom out beyond the full range of the data.

General ability to zoom out to areas LARGER than image e.g., to show large contour map over grayscale map of lesser coverage
I don't like this one either. At least at the moment. But a general solution to a wider problem may apply here, in which case it should be OK to provide something that supports this.

Zoom out 2x option on intensity histogram & profile windows
Done 15-NOV-2001: I supported zoom key bindings instead.

Doesn't work in conjunction with panner!
Done 15-AUG-1999: 'i', 'o' and 'u' zoom keys now work in a panned image.

Magnifier doesn't work with panner either
Really? It works for me. "Use a workstation" (ask me about that one:-).

Some sort of crosshair in the magnifier window to indicate cursor position (maybe with a switch to turn it on or off)
There's already a mechanism to support this: users can extend the magnifier widget. Someone is already doing this. I'll have to drag the solution out of my mail archives. There is also a resource which allows you to turn on a simple crosshair.

Consistent zoom between different-sized images - either permit independent zoom magnification to be set for each, or lock them together to show the same region in terms of WCS coordinates
I've always wanted to preserve the WCS region. I just have to get around to doing it.

Ability to set "absolute magnification" in terms of either image pixels or WCS units
I could provide a popup which has a slider which allows you to change the zoom factor. By using the refresh function, it could even be used to report on the current zoom factor (if something else changes it).

Running display of current zoom factor near other displayed attributes
I'll leave that to the zoom slider.

Magnifier window: display mag relative to main window, not absolute mag
I know this seems funny, but it has some important benefits. And in some ways it actually makes sense.
display same intensity transfer function as main window
Done 15-AUG-1999.
display same aspect ratio as main window
Ah. That could be nasty.
show annotations displayed in same area of main display
This could suck performance.
show contours displayed in same area
This too.

PROFILES IN GENERAL

Allow "histogram" (bar graph) display option in addition to standard line-graph method, which makes it hard to see individual data points
Done 15-JUN-2000.

Generalize orientation of extracted spectrum from the current limitations of being parallel to the three principle axes of the cube (or two of a flat image) to anything between two endpoints marked by the user e.g., keep "X Y Z" choice, but add "arbitrary" option, where the latter lets the user input 2 coordinate triplets.
How do they input these tuples? And what about nasty details about following world-lines for curved co-ordinate systems? What should the behaviour be?

Save WCS abscissa values in output profiles
Done.
have to think carefully about what these would be if not || to axes
Once the locus is known, this is easy. It's deciding on the correct locus (see above) that could be tricky.

Show profiles from more than one data set simultaneously (different colours)
No problem in principle, but it's going to require a redesign of the profile widget.

Option to show LOG or SQRT data in profile window if that way in image
Same issue as intensity histogram window.

Cursor tracking in spectrum window should follow discrete velocity channels rather than interpreting sub-channel coordinates
The profile widget might not be displaying velocity channels. For different data the current behaviour is correct. I don't want to put data-specific hacks into the profile widget.

Fix double-use of middle mouse button for zooming & extraction; the latter currently takes precedence and prevents easy x2 zooming
Yeah, I have to figure out a way for different, independent bits of code to grab exclusive use of a mouse button.

Allow the user to select 0.0 to represent blank values in the ASCII output, since some plotting programmes have trouble with 1e30.

COLOURS

8-bit:
proper prismatic colour table: black - red - blue - white
Can't you just write a colourtable function for this?
some facility for user to make and save their own 8-bit colour table?
Possibilities:
Simple RGB transfer function editor similar to SAOimage
Grandiose ideas about 3-D visualization of colour space and the "path"of a colourtable through that space
Jayanne has thoughts on "7 colour contrasts" (consult with her)
Want to contribute some code? ;-)

24-bit:
magnifier currently doesn't work
Done 26-AUG-1999: fixed.

"paper colours" don't work
Also works for me.

some annotation colours can't be allocated, e.g.,
_kwin_X11_get_colour: error allocating colour: "gray"
colourmap flashing makes it difficult to see how PPM output will look
allow transfer functions to be applied (INDEPENDENTLY) to each image
improve 8-bit display? (currently pretty useless & very time consuming)
colour coding of rendered spectral line cubes by velocity

Annotations: often get error message when trying to draw annotations whose colour is not available in the current set. the only current solution to this is to run kview with the -private_cmap option, which is easy to forget. instead how about automatic selection of the "nearest available" colour as a substitute, with a warning message that this was done? also, some means of informing the user which colours ARE currently available would be very helpful.

2-D DATA DISPLAY

Blink between more than 2 images (SAOimage does up to 4)
Done 11-DEC-2002: new kvis application written which allows loading of an unlimited number of datasets. Original time estimate of "a solid couple of months" was pessimistic: it took one month.

Vector field overlays (require 2 maps: one for each X or Y component, or, alternatively, for magnitude and position angle)
Roughly a month or so of work for an optimised version.

Ruled surface plots
Probably two or more months of work for an optimised version.

Give 3rd coordinate value for overlaid contour movies

Set default contour width to 1.0 (narrower ones look bad in postscript)
Done 6-AUG-1999: I've allowed the user to control the thickness of "thin" lines.

Fix contour maps loadable from Overlays menu - sometimes they go haywire, draw bizarre patterns of radiating lines all over the place; not predictable, but more likely when doing many at once

Ability to display contour maps without underlying grayscale image; for projection, use that specified in image being used for contour

Give data min & max for contour parameter selection window, so user has an idea what "10%" means in data units
Done 14-FEB-2002.

Determine which part of a contour map actually lies within the display (either the canvas or the actual image display area) and only spend time computing that part. This would greatly speed up overlays of massive images.
Absolutely not! Such a change would make panning or unzooming far more expensive, which is unacceptable, as the total cost to the user would dramatically increase.

Alternative transfer functions for contour maps (sqrt, log)
Log (really, exponential) is already there.

Alternative line types for contours (see annotations)

Colour tables for contours - in data with any complexity, it is often very difficult to see which contours trace brighter isophotes; colours would help this problem immensely.

Give name of file in contour overlay window
Done 23-AUG-1999

A side-by-side comparison mode: show both images simultaneously, with locked graphics cursors tracing the same WCS position in each, reading out data values, zooming, etc.
Done 11-DEC-2002. New tool kvis implemented.

3-D DATA DISPLAY

Add intensity scaling control to kslice3d display

Real-time manipulation of rendered cube orientation by "grabbing" a wireframe with the mouse and moving it around (as implemented in PBOB)

Fly-through ability (change of rendering perspective)

Cube comparison:
blink between slices of two (or more) different cubes (this exists in latest modifications, but is a little confusing because there is only one "movie" control)
Done 11-DEC-2002. New tool kvis implemented.

simultaneous slice comparison via side-by-side movies, contour overlays, etc.
Done 11-DEC-2002. New tool kvis implemented.

simultaneous volume comparison via side-by-side rendering or superposed true-colour rendition

Rendered isosurfaces (analog of 2-D contour plots)

Generalize cube slice to any arbitrary orientation rather than XY, YZ, or XZ?

Movies:
Track cursor outside of frame bar bar display region
Label 3-slice axes in kslice_3d & xray

SPECTRUM EXTRACTION

Redraw extraction boxes when movie frame changes; have a "clear" button to delete them en masse when desired

Mark current movie frame in spectrum plot, e.g., by a red vertical line which could be turned on or off
Done 12-FEB-2002.

Generalize extraction region to any irregular polygon constructed by the user

Variable slit width in kpvslice: average over width set by slider widget

Difference Spectra
This opens up all kinds of issues with designing a user interface that can support this and other interactive analysis techniques. I can imagine spending a couple of weeks just thinking about the issues.
- need a facility to allow interactive extraction of a difference spectrum. The user needs to be able to define "ON" and "OFF" regions. When the two regions intersect the intersection area is defined as "ON" (i.e. "OFF" is "OFF" only if it is not "ON"). The difference spectrum is the difference of the average spectrum in the "ON" region minus the average spectrum in the "OFF" region.
- Display both ON and OFF spectra in a profile window (colour coded).
- there should be an option to use the intensity in a specified 2-D image to weight the ON spectrum (i.e. square of the intensity) and to define a threshold level below which pixels in the ON region do not contribute to the average. (This is for continuum absorption spectra. We might want the program to solve the optically-thin radiative transfer equation for a bright background source and plot the gas temperature and column density versus velocity.) 3-D baseline fitting of spectral features in data cubes (perhaps an analysis issue; not so urgent now with HISA software)

Boxed maximum, minimum and RMS profiles
Will require a re-design of the profile widget.

DATA ANALYSIS TOOLS

Intensity-intensity scatterplots (maybe contributed by Charles Kerton)
Done 22-NOV-2001. Feature added to kview.

Image differences, ratios (maybe in PerlDL)
Done 16-MAR-2004. "Make Data" feature added to kvis.

General PerlDL command-line analysis capabilities?
I'm not sure what you mean here. If you're asking for more features in PerlDL, wouldn't it be better to ask the pdl porters? I'm not a perl coder (let alone a pdl coder).


LABELS & COORDINATES

IMAGE LABELING

Remove Equinox label from GLON-VLSR plots!
Done 4-OCT-1999: fixed.

Allow user control of format of coordinate labels decimal vs. sexigesimal for decimal, degrees (or hours) vs. minutes vs. seconds degrees vs. hours (RA only) format/number of significant digits
Mostly a user interface issue. We should talk about how it should look.

User control of coordinate type strings

User control of layout of coord type strings (use or leave out; placement)

User control of spacing of coord labels & grid lines
I'd first like to fix the automatic algorithms. Ideally, I'd like the default to be Just Right. I've already made the algorithm adaptive so that the axis labels don't take up more room than required.

User control of font size of axis labels
Done 5-NOV-2001.

Scale bar w/ similar user controls for format, placement, and use/don't
Done 31-JAN-2002. The colourbar may be enabled/disabled. Format and placement does not seem to be required at this time.

Optional overlay of alternative WCS grid, e.g., RA,DEC on a GLON,GLAT image

Improved axis labels

COORDINATE TRACKING

When recenter image with mouse click, keep cursor in position where clicked (this is currently in place for zooming only)
I don't think that is a good idea. The current scheme allows you to pan across by repeatedly clicking the mouse, which is very convenient.

Same format options as image labeling (linked)

Optional cursor tracking outside of image boundaries

Continuous arrow-key tracking when press one key before releasing another

Optional display of WCS coordinates in addition to those given by the image header; i.e., display RA & DEC for a GLON, GLAT image

S-key statistics:
Give WCS coordinates as well as pixel coordinates
Correct data units need to be given for various moment maps in kpvslice (Jayanne was getting K instead of K * km/s for the zeroth moment)

ANNOTATION OVERLAYS

ON/OFF switch to remove displayed annotations without deleting from memory
Done 11-DEC-2002. Part of data browser interface in new kvis.

New objects:
filled circle/ellipse
regular polygons - open, skeletal, starred, filled (see SuperMongo)
Draw _after_ coordinate labels, to prevent, e.g., tickmarks marring annot.

Improved text labels; user-controlled scale (tied to WCS, screen pixels, or whatever)
Done 10-AUG-1999. You can now specify Hershey fonts, and can specify a font size.

better positioning control (centering, right justification, etc.)
Probably a week of fiddling to get this right (not hard, but tedious).

real underscores instead of arrows!
This relates back to the whole issue of how to draw text. If I stick with Hershey fonts, I need to grab a better font set from somewhere. Blame X for such a poor text model.

Offset positioning -- e.g. draw something 5 pixels away from a WCS pos useful for making things like vectors with arrowheads

Arrow object as vector or line (or both), with head type specified

Object conformation to user-specified coordinate system, e.g., draw crosses with north-south orientation or up-down orientation, whichever the user wants; they are NOT the same draw circles as true circles on the screen or true circles on the sky; these are also not the same

Keep track of loaded annotation files in a list; option to delete one random loaded file's worth of annotations. Note the file-groupings of annotations in memory (thus displayed) can be modified in two ways: by the user deleting one file-group anywhere in the list, or by deleting the last current annotation (in the most recently loaded file-group).
Done 11-DEC-2002. Part of data browser interface in new kvis.

New attributes:
line type (solid, dotted, dashed, or dot-dashed)
line width (as implemented for contour maps, though these currently get "furry"-looking when the width is set high)
line weight (as in supermongo; may not be workable here)

Keep track of which objects are outside of display canvas area and do not waste time trying to draw them
Some objects already have this optimisation. I need to overhaul the overlay display package before doing the rest.

Option not to draw objects outside image area but inside canvas (margins) currently enforced for ellipse primitive: would strongly prefer as switchable option for all objects also a CLEAN edge (only draw portion of object inside image area)
Partly done 8-MAY-2000: new "Crop" button added which allows you to control whether objects outside the image area are drawn. Not all objects can be cropped yet. At a later stage "Crop" will be the same as "CLEAN".

Add annotation coordinate format attribute, so user can specify one of {decimal degrees for all, decimal hours & degrees for RA & DEC, sexagesimal hours & degrees, or sexigesimal degrees for all} (similar options for image axis labeling and cursor tracking)

Implement 4th coordinate type: image pixels (as opposed to screen pixels display area relative coordinates, or world coordinates). This exists on a primitive level as "linear" coordinates, but the name should be changed to something more intuitive for the user; note from late may 98 suggests P = image pixels, S = screen pixels (R = relative & W = world as before).

Hierarchical attribute scoping for included annotation files

Write annotation text file output from annotations generated with editor (requires that the annotation parser support all editor objects)

The reverse case: make all parser-supported annotation objects available via the GUI editor

Make all 2-D image annotations applicable to 3-D rendering in x-ray, perhaps with extensions to specify 3rd axis coordinates

Some "fixed" annotations (relative/pixel coordinates) begin creeping inwards at high zoom factors; ellipses also "blow up" relative to supposedly same-sized rectangles under high-zoom conditions; should be looked at


OTHER

EDITABLE TEXT FIELDS

Standard Athena field editing is terrible -- e.g., RETURN does not submit field contents, but starts a new line instead; these should be fixed somehow (perhaps referring to the already- implemented improved directory entry field)
Yes, I need to take what I did for the directory browser and make it into a widget I can use anywhere. A few days of work to extract it, clean it up and change over all the places where I use text entry widgets. The dumb Athena text entry widgets have annoyed me for a long time.

OS-SPECIFIC PROBLEMS

Fix interference of the karma X resources with Irix desktop properties
I've shown you how to use the ~/.Sgiresources file.

Display of some datasets on linux screen from Irix machine can crash kview (ask Marta for details)

USER-SPECIFIC DEFAULT SETTINGS

(Currently implemented through the ~/.karma/extensions file, though this has problems on irix machines)

Add more for things like:
*AxisLabels.Display: (True|False)
*AxisLabels.GridLines: (True|False)
*AxisLabels.Colours: (Screen|Paper)
*PseudoColour.Table: (Greyscale1|Greyscale2|...)
*PseudoColour.Reverse: (True|False)
*PseudoColour.Invert: (True|False)
*Profile.AxisLabels.Display: (True|False)
*Profile.AxisLabels.GridLines: (True|False)
*Profile.AxisLabels.Colours: (Screen|Paper)
(others?)

ERROR TRAPPING

Trap "Unknown equinox: 0" message when loading images for which equinox is irrelevant (e.g. Galactic coordinates)
That only happens when you load a non-conforming FITS file. It's a warning that the FITS writer is broken.

Trap messages about colours not being available for annotations

Trap "Ximage being destroyed: 1007f440" messages encountered during zoom, etc.

Trap bad data format errors, e.g., if read in a FITS file with a messed up header, don't destroy the xterm interface by screen-dumping everything.


PIE - IN - THE - SKY

Consider integration of features of various "virtual observatory" software and websites ("Data mining"):
Yes, I've talked with others about this. I've been hoping someone will contribute some code I can use.
XEphem
SkyView
ADC Catalogs
SIMBAD / NED
ADS Abstracts

Advanced catalog database -- have catalog IDs of objects be displayed automatically in the coordinate tracking area when the cursor moves over them.