What’s New

Ver 3.0.1 (2019-09-23)

  • Fixed “pip install” problem with v3.0.0

Ver 3.0.0 (2019-09-20)

  • Dropped Python 2 support. Ginga now requires Python 3.5 or later.

  • Fixed an issue with some RGB images being viewed flipped

  • Improved accuracy of Qt-based timers

  • Pick plugin enhanced with option to center on found object; also default shape changed to a box rather than a rectangle

  • Added support for ASDF and GWCS.

  • Fixed drag-and-drop functionality in FBrowser plugin on Windows.

  • Enabled HDU sorting via config file in MultiDim.

  • Fixed a bug where display would get corrupted when adjusting interactive cuts or contrast on rotated image

  • Improved smoothness and updates of Zoom plugin image

  • Improved smoothness and updates when rotating or shifting color map

  • Fixed broken banner

  • Improved pip installation commands for different backends.

  • Fixed a bug where identically named HDUs could not be loaded by MultiDim

  • Fixed a bug where compressed HDUs could not be loaded by MultiDim

  • Plugins with splitter type panels now remember their sizes when closed

  • LineProfile plugin’s default Y-axis label is now “Signal”, to be more scientifically accurate.

  • Simplified plugins Colorbar, Contents, Cursor, Errors, Header, Info, Log, Pan, and Thumbs plugins. Made all of these restartable. Subclasses of these plugins may require refactoring in a couple of cases.

  • Selecting item in FBrowser now populates its text box properly.

  • Support opening all extensions of given extension name from a FITS file (e.g., filename.fits[SCI,*]) from Ginga command line or FBrowser.

  • New Downloads plugin for monitoring/managing URI downloads

  • Supports PySide2 (alternative Qt5 backend)

  • Added statistics line to Histogram plugin

  • Removed support for gtk2, since it is not supported for Python 3

  • new styles added for Point canvas type: circle, square, diamond, hexagon, uptriangle, downtriangle

  • New file opener framework

  • Text objects can be resized and rotated in edit mode on the canvas

  • Added ellipse and box annulus types as Annulus2R canvas object

  • Supports plotting DS9 regions via 2-way conversion between Ginga canvas types and Astropy regions

Ver 2.7.2 (2018-11-05)

  • Fix for linewidth attribute in shapes for AGG backend

  • Fix for ellipse rotation in OpenCv backend

  • Better text rendering for OpenCv backend (loadable fonts)

  • enhancements to the Ruler plugin for reference viewer

  • supports quick loading from astropy NDData (or subclassed) objects

  • Support for scaling fonts on high-dpi displays

  • Fixed a bug where adjusting autocuts parameters in Preferences would crash the Qt backend

  • Fixed a bug that caused windows to disappear when changing workspace to MDI mode under Gtk3 backend

  • Fixed a bug where local plugins were not properly closed when a channel is deleted

  • Fixed a bug in which the ColorMapPlugin canvas was not scaled to the correct size

  • Improvements to synchronous refresh feature to reduce jitter and increase frame rate

  • Fix for navigating certain data cubes with MutltiDim plugin

  • Added new percentage transform and coordinate mapper type (allow placement of objects as a percentage of the window size)

  • Updates to Compass canvas type and Pan plugin

  • Documentation improvements for writing plugins

Ver 2.7.1 (2018-07-09)

  • Fix for image rendering bug which shows last row and column of image being drawn twice

  • Added option to “Compass” draw type to be in pixels (X/Y) or wcs (N/E)

  • Changed Pan plugin to attempt to draw both kinds of compasses

  • Log plugin enhanced to show lines logged before it was opened

  • Info plugin adds convenience controls for “Follow New” and “Raise New”

  • WCSMatch plugin enhanced to offer fine grained control over sync

  • fixed an issue in Debian build that caused long start up times

  • User can dynamically add scrollbars to channel viewers in Preferences

  • Made Gtk backend default to ‘gtk3’ - “-t gtk” now invokes gtk3 instead of gtk2 - choose “-t gtk2” if you want the gtk2 back end

  • Fixed a bug with opening wildcard-type filespec from the command line

  • Fixed an issue in Thumbs plugin with opening FITS tables from the command line

  • Fixes for some keyboard focus (Gtk) and unintentional channel changes (Qt) when viewer is in MDI mode

  • IRAF plugin moved to experimental folder

  • Allow setting of initial channel list, local, global and disabled plugins from general configuration file

  • Fix for a bug when using OpenCv acceleration on dtype(‘>f8’) arrays

  • Fixed a bug where colormap scale markers were sometimes not spaced wide enough

  • Workaround for failed PDF build in RTD documentation

Ver 2.7.0 (2018-02-02)

  • Fix for gtk 4.0 (use “gtk3” backend, it works for 4.0)

  • Fix for broken polygon containment test

  • Addition of configurable zoom handlers for pan gestures

  • Fix for some broken tests under python 2.7

  • Update to mode handling via keyboard shortcuts

    • addition of a new “meta” mode used primarily for mode switching

    • most modes now initiated from meta mode, which frees up keys for other uses

    • see Ginga quick reference for details on how the new bindings work

  • Efficiency update for Thumbs plugin when many thumbs are present

  • Default for the save_layout option is now True, so the reference viewer will write out its layout state on exit and restore it on startup. See documentation in the “customization” section of the manual.

  • Plugins can now be organized by category and these categories are used to construct a hierarchical Operations menu

  • Zoom and Header plugins are now not started by default

  • Fix for “sortable” checkbox behavior on Header plugin

  • Default keyboard mode type is now ‘locked’ (prev ‘oneshot’)

  • Fixes for missing CSS file in installation script

  • Less confusing behavior for workspace and toolbar arrow buttons

Ver 2.6.6 (2017-11-02)

  • Fix for broken sorting in Contents plugin in gtk backends

  • Fix for resize bug in switching in and out of grid view in gtk backends

  • Updated to have efficient support for gtk3

    • please install compatible pycairo from github.com/pygobject/pycairo if you get a “Not implemented yet” exception bubbling up from a method called cairo.ImageSurface.create_for_data()

  • Addition of a “Quick Mode” to the Pick plugin–see documentation

  • More consistent font handing between widgets and Ginga canvases

  • Bug fix for importing some types of matplotlib color maps

  • Add antialiasing for Qt back end

  • Bug fixes and enhancements for Qt gestures - holding shift with pinch now keeps position under cursor

  • New Jupyter notebooks back end based on ipywidgets - requirements: $ pip install ipyevents - see examples/jupyter-notebook/

  • Fixes to various reference viewer plugins

Ver 2.6.5 (2017-07-31)

  • Coordinate transforms refactored for speed and code clarity

  • Some canvas shapes refactored for better code reuse

  • Allow max and min scale limits to be disabled (by None)

  • Fixed a bug that prevented the reference viewer from resizing correctly with Qt back end

  • Refactored WCS wrapper module for code clarity

  • Set minimum astropy version requirement to 1.X

  • Fixed a bug in NAXIS selection GUI (MultiDim plugin)

  • Fixed MDI window resizing with Gtk back ends

  • Fixed an error where zoom 100% button did not correctly zoom to 1:1 scale

  • Several fixes for astropy 2.0 compatibility

  • Fixed a bug in the FBrowser plugin when channel displaying a table and attempting to load a new file

  • Fixed a bug when setting the pan position manually by wcs coordinates

  • Updates for changes in PIL.ImageCms module

  • Fix for window corruption on certain expose events

  • New default bindings for touch pads and differentiation from wheel zoom

Ver 2.6.4 (2017-06-07)

  • Added new ScreenShot plugin to take PNG/JPEG snaps of the viewer window

  • Enhancements to the Pick plugin

    • Added ability to make shapes besides rectangles for enclosing pick area. Masks out unwanted pixels. Choose the shape in the Settings tab.

    • Changed behavior of pick log to only write the log when the user clicks the save button.

    • Changed the name of the save button to “Save as FITS table” to make it clear what is being written.

    • If “Show candidates” is selected in Settings, then ALL of the candidates are saved to the log.

    • Added documentation to the manual

    • Bug fix for error when changing radius

  • Improvements to layout of Operations menu (plugin categories)

  • Colorbar scale now placed below the color wedge and is more legible

  • Bug fixes for LineProfile plugin

  • Slit function for Cuts plugin can be enabled from GUI

  • Bug fixes for Slit function

  • Info plugin can now control new image cut/zoom/center settings

  • Fixed an issue with the MultiDim plugin that could result in a hang with some back ends

  • New canvas type for displaying WCS grid overlay and new WCSAxes plugin that uses it

  • Bug fixes to scrolling via scrollbars and vert/horiz percentages

  • Enhancements to the LineProfile plugin

    • several new shapes besides the standard point

    • plot multiple lines

Ver 2.6.3 (2017-03-30)

  • Fix for issue that stops ginga startup when loading externally distributed plugins that have errors

  • Fix for an issue loading plugins from the command line when they are nested in a package

  • Added bindings for moving +/- pixel delta in X or Y and centering on the pixel

  • Fixes for some key mappings for tk, matplotlib and HTML5 canvas backends

  • Fixes for IRAF plugin under python 3

  • Fix for a bug using remote control (RC) plugin from python2 client to python 3 ginga

  • Documentation updates

Ver 2.6.2 (2017-02-16)

  • Added some colormaps from ds9 that don’t have equivalents in Ginga or matplotlib

  • Fix for recognizing CompImage HDU type when using astropy.io.fits

  • Add new experimental OpenGL back end

  • Fixes for Tk back end on python 3

  • You can now write separately distributed and installable plugins for the reference viewer that Ginga will find and load on startup

  • Added –sep option to load command line files into separate channels

  • New help screen feature available for plugins

  • Lots of updates to documentation

  • Fixed a stability issue with drag and dropping large number of files under Linux

  • Fixes for python3 and several example programs

  • Fix for interactive rotation bug under matplotlib back end

Ver 2.6.1 (2016-12-22)

  • Added a working MDI workspace for gtk2/gtk3.

  • Added scrollbar frames. See examples/qt/example1_qt.py for standalone widget. Can be added to reference viewer by putting ‘scrollbars = “on”’ in your channel_Image.cfg preferences.

  • Reorganized reference viewer files under “rv” folder.

  • Improved Pick plugin: nicer contour plot, pick log uses table widget, pick log saved as a FITS table HDU

  • Pick and Zoom plugins can now use a specific color map, rather than always using the same one as the channel window

  • gtk3 reference viewer can now be resized smaller than the original layout (gtk2 still cannot)

  • added ability to save the reference viewer size, layout and position on screen

  • gtk MDI windows now remember their size and location when toggling workspace types

  • Fixes for problems with pinch and scroll gestures with Qt5 backend

  • Fixed a bug where scale changes between X and Y axes unexpectedly at extreme zoom levels

  • Fixed a bug where cursor could get stuck on a pan cursor

  • Added ability to define a cursor for any mode

  • Added documented virtual methods to ImageView base class

  • Added a workaround for a bug in early versions of Qt5 where excessive mouse motion events accumulate in the event queue

Ver 2.6.0 (2016-11-16)

With release 2.6.0 we are moving to a new versioning scheme that makes use of github tagged releases and a “dev” versioning scheme for updates between releases.

This release includes many bugfixes and improvements, new canvas types (XRange and YRange), a Command plugin, WCSMatch plugin, dynamically configurable workspaces, OpenCv acceleration, an HTML5 backend and much much more.

Ver 2.2.20160505170200

Ginga has merged the astropy-helpers template. This should make it more compatible management-wise with other astropy-affiliated packages.

Ver 2.2.20150203025858

Ginga drawing canvas objects now can specify points and radii in world coordinates degrees and sexigesimal notation.

  • default is still data coordinates

  • can play with this from Drawing plugin in reference viewer

Ver 2.1.20141203011503

Major updates to the drawing features of ginga:

  • new canvas types including ellipses, boxes, triangles, paths, images

  • objects are editable: press ‘b’ to go into edit mode to select and manipulate objects graphically (NOTE: ‘b’ binding is considered experimental for now–editing interface is still evolving)

  • editing: scale, rotate, move; change: fill, alpha transparency, etc.

  • editing features available in all versions of the widget

  • updated Drawing plugin of reference viewer to make use of all this

Ver 2.0.20140905210415

Updates to the core display and bindings classes:

  • improvements to interactive rotation command–now resume rotation from current value and direction is relative to horizontal motion of mouse

  • most keyboard modes are now locking and not oneshot (press to turn on, press again (or hit escape) to turn off

  • additional mouse button functionality in modes (see quick reference)

  • some changes to default keyboard bindings (see quick reference)

  • changes to auto cuts parameters always result in a new autocut being done (instead of having to explicity perform the autocut)–users seem to expect this

  • autocenter preference changed from True/False to on/override/off

Reference viewer only: new global plugin “Toolbar” provides GUI buttons for many operations that previously had only keyboard bindings

Ver 2.0.20140811184717

Codebase has been refactored to work with python3 via the “six” module. Tests can now be run with py.test as well as nosetest.

Ver 2.0.20140626204441

Support has been added for image overlays. It’s now possible to overlay RGB images on top of the canvas. The images scale, transform and rotate wrt the canvas.

Ver 2.0.20140520035237

Auto cut levels algorithms have been updated. “zscale” has been reinforced by using the module from the “numdisplay” package, which does a fair sight closer to IRAF than the previous one Ginga was using. Also, the algorithm “median” (median filtering) makes a comeback. It’s now fast enough to include and produces more usable results.

Ver 2.0.20140417032430

New interactive command to orient the image by WCS to North=Up. The default binding to ‘o’ creates left-handed orientation (‘O’ for right-handed). Added a command to rotate the image in 90 deg increments. Default binding to ‘e’ rotates by 90 deg (‘E’ for -90 deg).

Ver 2.0.20140412025038

Major update for scale (mapping) algorithms

The scale mapping algorithms (for mapping data values during rendering) havebeen completely refactored. They are now separated from the RGBMap class and are pluggable. Furthermore I have redone them modeled after the ds9 algorithms.

There are now eight algorithms available: linear, log, power, sqrt, squared, asinh, sinh, histeq. You can choose the mapping from the Preferences plugin or cycle through them using the binding to the ‘s’ key (Use ‘S’ to reset to linear). There is also a mouse wheel mapping than can be assigned to this function if you customize your bindings. It is not enabled by default.

The Preferences plugin has been updated to make the function a little clearer, since there was some confusion also with the intensity map feature that is also part of the final color mapping process.

Ver 2.0.20140114070809

  • The SAMP plugin has been updated to work with the new astropy.vo.samp module.

  • The Catalogs plugin has been updated to allow the user to define the radius of the conesearch or image search by drawing a circle (as well as the previous option–a rectangle).

Ver 2.0.20131218034517

The user interface mapping just got a bit easier to use. Ginga now provides a way to do most UI remapping just by placing a simple config file in your ~/.ginga directory. An example for ds9 users is in the new “examples” folder.

Many simple examples were moved out of “scripts” and stored under subdirectories (by GUI toolkit) in “examples”.

Ver 2.0.20131201230846

Ginga gets trackpad gestures! The Qt rendering class gets support for pinch and pan gestures:

  • The pinch/rotate gesture works as expected on a Mac trackpad

  • The pan gesture is not a two-finger pan but a “non-standard”, Qt-specific one-finger pan. These are experimental for now, but are enabled by default in this release.

Also in this release there has been a lot of updates to the documentation. The developer and internals sections in particular have a lot of new material.

Ver 2.0.20131030190529

The great renaming

I really dislike it when developers do this, so it pains me to do it now, but I have performed a mass renaming of classes. FitsImage ended up being the View in the MVC way of doing things, yet it shared the same naming style as the model classes AstroImage and PythonImage. This would have been the source of endless confusion to developers down the road. Also, PythonImage needed to get renamed to something more akin to what it actually represents.

So the renaming went like this:

  • FitsImage -> ImageView

  • FitsImage{XYZ} -> ImageView{XYZ}

  • PythonImage -> RGBImage

So we have:

  • M: BaseImage, AstroImage, RGBImage

  • V: ImageView{XYZ}

  • C: Bindings, BindMap

I did this in the brand new 2.0 version so at least devs have a heads up that things will not be backward compatible.

And I apologize in advance for any renaming and support issues this may cause for you. Fire up your editor of choice and do a query/replace of “FitsImage” with “ImageView” and you should be good to go.

Ver 1.5-20131022230350

Ginga gets a Matplotlib backend!

Ginga can now render to any Matplotlib FigureCanvas. The performance using this backend is not as fast as the others, but it is acceptable and opens up huge opportunities for overplotting.

See scripts/example{1,2,3,4,5}_mpl.py

Also merges in bug fixes for recent changes to astropy, and support for other python WCS packages such as kapteyn and astLib.

Ver 1.5-20130923184124

Efficiency improvements

Efforts to improve speed of entire rendering pipeline and widget specific redrawing

  • Decent improvements, Ginga can now render HD video (no sound) at 30 FPS on older hardware (see scripts/example1_video.py). This translates to a slightly speedier feel overall for many operations viewing regular scientific files.

  • Fixed a bug that gave an error message of Callback.py:83 (make_callback) | Error making callback ‘field-info’: ‘Readout’ object has no attribute ‘fitsimage’

  • Version bump

Ver 1.4.20130718005402

New Agg backend

There is now an Agg rendering version of the ImageView object.

  • uses the python “aggdraw” module for drawing; get it here –> https://github.com/ejeschke/aggdraw

  • this will make it easy to support all kinds of surfaces because the graphics drawing code does not have to be replicated for each toolkit

  • see example code in /scripts/example1_agg_gtk.py

  • currently not needed for Gtk, Qt versions of the object

New Tk backend

There is now a Tk rendering version of the ImageView object.

  • see ginga.tkw.ImageViewTk

  • renders on a Tk canvas

  • see example code in /scripts/example{1,2}_tk.py

  • you will need the aggdraw module (see above) to use it

AutoCuts

  • the ginga.AutoCuts module has been refactored into individual classes for each algorithm

  • The Preferences plugin for ginga now exposes all of the parameters

    used for each cut levels algorithm and will save them

Etc

  • additions to the manual (still incomplete, but coming along)

  • lots of docstrings for methods added (sphinx API doc coming)

  • many colors added to the color drawing example programs

  • WhatsNew.txt file added