Sparky Requested Features

Last updated April 5, 2004.

We are keeping track of Sparky requests, but we are currently not implementing new features. See the Sparky development status page for details. Please email questions to

Strip Plots

Sparky strip plots are underdeveloped. Sparky development at UC San Francisco focused on the needs of DNA and RNA structures in the mid-1990s when strip plots were mostly used from proteins.

Strip plot y-axis chemical shift display.
Show horz line across all strips in strip plot.
Save strip plots in session file.
Overlays in strip plots.
Overlay strips.
Save strip matching information.
Multiple strip plot windows.
Strip plot add strips in sequence order.
Strip plot slice display.
Strip plot printing.

Reading and Writing Files

Read BMRB chemical shift lists.
Ask for new path when save fails.
Read XEASY peak lists.
Read XEASY peak and chemical shift lists.
Escape | in Sparky file assignment names.
bruk2ucsf NC_proc parameter.
Save dialog state in session file.
Change UCSF spectrum file axis order.

Spectrum Display

1D spectrum display.
Settable crosshair color.
Allow slices to show spectrum diagonal.
User specified contour color ranges.
Contour display optimization.
Change spectrum background color.
Copy contour levels, integration params, ....
Autoscale slices to selected peak.
Slices along one axis.
Separate axis name from nucleus type.
Slices should track crosshair from other view.
Realtime spectrum reprocessing.
Alias when synchronizing Views.
Tile plot for 2D spectrum.
Control crosshair correspondence between spectra.

Making and Displaying Assignments

Chemical shift index plot.
Switch for aliased resonance display.
HNCO assignment guessing.
Peak selection by atom or residue.
Show assignment distance in Chimera.
Assignment guessing for 4D spectra.
Find unassigned resonances from NOESY plus model.
Separate non-NOE feature from
Show in peak table peaks assigned in one spectrum but not other.
Make lines for 2D walk for DNA/RNA.

Picking and Fitting Peaks

Fit chemical shift variations in spectrum sequence.
Put more integration details into manual.
Remember integration box or ellipse.
Add Python routine for integrating peaks.
Restricted peak picking.
Separate peak info panel.


Have Mac Sparky try to start X server.
Chem shift, linewidths, spin graph printing.
Sparky mailing list.
Peak lock from ornament dialog broken.
Depth scrollbar range doesn't update after shifting ppm axes.
Print 1D slices.
AutoAssign interface import from file.
Multicolumn menus.
Eliminate Extension menu.
Pointer mode toolbar with icons.
Default directories for extensions.
Incompatibility with _tkinter thread support.
Homo-dimers and multimers.
Better file selection dialog.

Request Details

Have Mac Sparky try to start X server (Jack Howarth)
Maybe add "open" to Sparky start-up script on Mac.

Read BMRB chemical shift lists (Yongbo Zhang)
Do you have a python script to read in the bmrb star format of chemical shift assignments?

1D spectrum display, labels, shifts (Carl Eric Olsen)
I would suggest that facilities for including 1D spectra be included. In a peak listing it would be convenient to have the shifts from 1D spectra labeled, because those values are the most accurate and thus the best for citing in publications.

Fit chemical shift variations in spectrum sequence (Laurent Volpon)
Calculate Kd from titration experiments by fitting chemical shift perturbations.

Strip plot y-axis chemical shift display (Laurent Volpon)
Want easy way to see ppm value at mouse position along y-axis in strip plot.

Settable crosshair color (Steffen Graether)
Crosshair currently hardcoded to white in This is invisible for spectrum windows with white background.

Show horz line across all strips in strip plot (Laurent Volpon)

Save strip plots in session file (Laurent Volpon) (James Kempf)
Wants to get back the same strip plot display after restarting Sparky.

Put more integration details into manual (Michelle Matejkova)
Can copy details from my email to Michelle.

Chem shift, linewidths, spin graph printing (Karsten Siegmund)
when using sparky (which seems to be great for my needs in many ways), I noticed that the documentation states: > This has the strange behaviour that only the region being displayed on > the screen is put into Postscript, not the whole plot. You need to > adjust the screen window size to be able to get the printed output you > want. This is a limitation of the Tk window system canvas printing > capability. Multi-page output is also not supported. This is not actually true. (It seems that Tk/Sparky limits how big the window-size can be adjusted to the size of the screen as a maximum, so this it is impossible to print all of the canvas if it's too big) True is, that the whole canvas *can* be printed, but by default, only the part visible in the window is printed - if larger portions are to be printed, a height and/or width has to be given. Perhaps you could consider changing the function postscript_cb

def postscript_cb(canvas):

  path = save_file(canvas, 'Save Postscript', 'save_postscript')
  if path:
    canvas.postscript(file = path)
in into
def postscript_cb(canvas):

  path = save_file(canvas, 'Save Postscript', 'save_postscript')
  box = canvas.bbox('all')

  if box:
    (x0, y0, x1, y1) = box
    canvas_height = abs(y1 - y0)
    canvas_width  = abs(x1 - x0)
    canvas_height = 0
    canvas_width  = 0

  if path:
    canvas.postscript(file = path, height = canvas_height)
for the next version of sparky. (I can create a diff if you wish, but the change is quite minor, so a copy&paste is propably just as efficient.)

Allow slices to show spectrum diagonal (Dennis Veselkov)
Want to show diagonal of 2D spectrum in slice panels. Show diagonal in both horz and vertical slices panels.

Make lines for 2D walk for DNA/RNA (Patrick Ladam)
I don't know if I may adress this to you but I just wanted to send a suggestion for a new fonctionality in sparky. I have used gifa for a long time and there is a nice feature in it I can't seem to find in sparky (I very recently use it so maybe I missed it...) This concerns the drawing of sequential nOesy walks on the spectrum itself. I attach a png file so that you can see the output that displays sequential H1'-to-Aromatic nOe , same can be done in Ar-to-H2',H3'...This really is usefull to check out your seq. assignments in different regions for Nucleic Acids. I guess this would be helpfull too for proteins.

Ask for new path when save fails (John Gehman)
John Gehman lost data when Sparky failed to save a "Save" file because it could not open the path. Sparky showed a dialog saying it couldn't save it with an Ok button. But it was not clear how to correct the problem. That can't save dialog should probably allow entry of a new path.

Read XEASY peak lists (Kyoung-Seok)
This would facilitate automatic noesy assignment with CYANA.

Read XEASY peak and chemical shift lists (Vitaliy Ya. Gorbatyuk)
Chemical shifts could be read with no peak assignments for starting an assignment of a related molecule in Sparky.

Overlays in strip plots (Bradley Dickerson)
Want to overlay cbcaconh onto all hncacb strips. If source hncacb spectrum has overlay could just duplicate it. Would need to make C++ changes to provide Python interface to overlays.

Overlay strips (Markus Seifert)
Want to overlay one strip on other strips. The contour overlays would not align ppm scales as the current overlay mechanism does. But I don't have the overlay capability. It seems sensible to make some modification to allow a ppm offset when doing a spectrum overlay. A Python interface to that capability could be provided. Then some user interface to do the desired strip overlays would need to be designed in Python. I don't know how you would specify which strips to overlay onto which other ones and how you would get rid of those overlays when you no longer want them. Maybe you just select one strip and use a strip plot overlay command to overlay it on all other strips. And there would be a command to remove the strip plot overlays. Do you need to be able to slide one strip over the other or can I just align the center vertical lines? Would it be better to use the "backpack" type interface? You could have a command to put the strip in your backpack. Then you could select any view and overlay it onto that view with vertical center lines aligned using another command. I guess both interfaces would be handy. Maybe the overlay should be fixed when the underlying spectrum is scrolled?

Sparky mailing list
Have online archive of And allow others to post answers.

Peak lock from ornament dialog broken (Bradley Dickerson)
Locking an ornament with the check button on the ornament properties dialog (ot) only works if exactly one peak is selected. If multiple peaks are selected it does nothing. The pk accelerator for locking peaks handles multiple peaks.

Remember integration box or ellipse (Gaspard Huber)
I would like to integrate 2D spectra with one of the box or ellipse integration options without any fitting, in SPARKY software. Everything works, except that once I have integrated a peak, I did not find any mean to see the size of the box or ellipse I used. I think this should be useful to a later control of integration limits.

Escape | in Sparky file assignment names (Karsten Seidel)
Karsten describes in a Sparky registration log comment that he was messed up by using | in assignment names to divide ambiguous assignments. Fix this for next release.

Chemical shift index plot (Yongbo Zhang)

Switch for aliased resonance display (Federica Castellani)
Want to be able to turn off display of aliased resonances in resonance panels.

HNCO assignment guessing (Yongbo Zhang)
Has H and N assignments for HNCO from assignment guessing and HSQC assignments. Wants to assign i-1 CO shift automatically if there is one peak on strip.

Depth scrollbar range doesn't update after shifting ppm axes (Kimmo Paakkonen)
Toggling show nucleus types fixes this.

Add Python routine for integrating peaks (Kimmo Paakkonen)
Wants to automate peak integration for HSQC

Peak selection by atom or residue (Vitaliy Ya. Gorbatyuk)
I have been working with XEASY last year and I found it is useful to select peaks by residue, residue number or atom name and so on.; Then I can display a peak ("X") and a label of resonances of desirable residue/residue number/atom name only which does not overload spectrum in a crowded region. As I found Sparky has different options of the selection and can display peaks and labels only for all resonances. I think it would be useful if Sparky has more flexible tool for selection and displaying. In such a way people who got used to some way working with different NMR software will switch easier to Sparky.

Separate peak info panel (Vitaliy Ya. Gorbatyuk)
Have peak info panel that can be used with strip plots and display in its own window.

Save strip matching information (Yongbo Zhang)
Wants to save information about matching strips before it is possible to make assignments. It would be useful to be able to save information on many walked backbone segments that have not yet been assigned. I don't know how this would be presented by a user interface. Maybe the "spin graph" Sparky extension could show connected unassigned resonances and selecting a section of the spin graph picture could display the relevant strips.

User specified color ranges (Alessandro Mascioni)
Want to specify new color ranges for spectrum contours.

Contour display optimization (Andrei Popescu)
Wants contour display of large (300 Mb) 3D spectrum to be faster. Maybe preload spectrum and precompute contours. Contour computation could take many minutes. Might want to save precomputed contours in a file. Display of computed contours could be much faster. Currently takes 1 second for a 512 by 512 plane on 500 Mhz P3 with high levels.

Alias when synchronizing Views (Gwan-Su Yi)
When view axes are synchronized and one view has larger ppm range then the other, use aliasing so I don't try to show an out of bounds region of a spectrum.

Change spectrum background color (Youlin Xia)
Command to change spectrum background color. Wanted for printing strip plots with white background. Have second command to change all views to specified background color.

Show assignment distance in Chimera (Marco Tonelli)
Make the Chimera interface show the distance for selected assignment or constraint lines. The Midas emulator dist command will do this. The command "dist sel" will show the distance between two selected atoms.

Multiple strip plot windows
Permit multiple strip plot windows. Difficulty is strip plot accelerators won't know which window to act on.

Assignment guessing for 4D spectra (Alex Drohat)
For a 4D 13C,13C NOESY want to have i,i,j,j assignment guessing to restrict the protons and attached heavy atoms to be in the same residues.

Control crosshair correspondence between spectra (Alexander Alexandrovich)
Wants w3 axis in N15 noesy (H,H,N <-> w3,w2,w1) to control w2 axis in N15 HSQC (H,N <-> w2,w1). The current behaviour maps w2 in the noesy to w2 in the HSQC. Maybe displaying two w2 HSQC crosshairs to show both possibilities would be a good fix. That would be a mess from one homonuclear spectrum to another. Probably better to allow user specified axis matching.

Print 1D slices (Eric Paulson)
Print 1D slices without showing spectrum.

Tile plot for 2D spectrum (Jasmin Faraone Mennella)
Specify a set of shifts and show tile plot of contoured regions around all intersection points.

Copy contour levels, integration params, ... (Jasmin Faraone Mennella)
Command to copy all types of view settings from a view to one or more other views.

AutoAssign interface import from file (Kimmo Paakkonen)
Add ability for AutoAssign interface to read resonances from a file without running AutoAssign. On Windows I can't run AutoAssign because my code uses os.fork(). I should separate the AutoAssign viewer from the controller. Also I should use spawn() instead of fork() on Windows.

bruk2ucsf NC_proc parameter (Markus Seifert)
NC_proc in proc file indicates scaling of data values. Need to apply this to compare intensities from different spectra.

Strip plot add strips in sequence order (Grant Langdon)
Have a checkbutton that controls whether adding strips for selected peaks puts them at the end or inserts them in sequence order. Probably would want a command to sort the strips in sequence order as well.

Multicolumn menus (Grant Langdon)
The View and Spectrum menus go off the bottom of the screen. Tk 8.4a2 does not offer any automatic handling for long menus. I have seen two solutions to this problem in other programs. One is the more... button at the bottom. The other is a menu with a scrollbar. Both of these are quite complex to implement. They are generally implemented by the graphical user interface toolkit. Sparky uses Tcl/Tk and it has neither of these solutions. Using the Tk multicolumn menu feature is somewhat painful to do efficiently. I looked into adding a maximum height option to Tk menus and submitting it to the Tcl/Tk maintainers. But it is not a very adequate solution since there still can be too many menu entries so they do not fit on the screen.

Eliminate Extension menu (Vladimir Likic)
The Extension menu entries are implemented in Python and the File, View, Peak menu entries are implemented in C++. But the user doesn't care about the implementation. Python extensions would be easier to find under the View and Peak top level menus.

Pointer mode toolbar with icons (Matt Fesinmeyer)
Says he would implement this but currently there is no Python interface to set pointer mode. Probably would also want Python notifier event when mode changed so that toolbar could update when user pressed function key to change pointer mode.

Default directories for extensions (Vladimir Likic)
Would be useful if Read Peak List used ~/Sparky/Lists as default directory. Other extensions also should use sensible default directories.

Autoscale slices to selected peak (Marco Tonelli)
Have mode for autoscaling slices to scale to max height of selected peaks. Useful for seeing small peak integration fit next to a big peak.

Separate axis name from nucleus type (Grant Langdon)
Allow spectrum axis names like CACB, CO, HN and have separate derived nucleus type 1H, 13C, 15N. Change all Sparky features to use the appropriate one.

Slices along one axis (Grant Langdon)
Be able to show slices just along the horizontal or just the vertical axis. Would be useful for strip plots.

Restricted peak picking (Hunter Moseley, Dani Monleon)
Restrict the picking of 4D noesy-hsqc spectra (C13-H-H-C13, C13-H-H-N15, or (N15-H-H-N15) using two 2D HSQC spectra.

Incompatibility with _tkinter thread support
Starting Sparky from Chimera causes a core dump if the being used was compiled with thread support (standard on Windows). Sparky Tk event dispatching is not compatible with _tkinter thread handling. Making it compatible would require replacing Sparky's Tcl_DoOneEvent() calls with a call to the Tkinter dooneevent function. This could be setup with a hook which would directly use Tcl_DoOneEvent() when Sparky is run w/o Python. Also it would require making C++ callbacks to Python in instead invoke a Tkinter registered python function. These steps are necessary to avoid violating _tkinter.c assumptions used in maintaining the Python interpretter and Tcl thread locks. It might be useful for extensions that launch another program (like AutoAssign) to be able to start a second thread that waits for that program to complete. Additional threads would be limitted in what they can do because Sparky is not thread safe so only one thread can use the Sparky interface.

Homo-dimers and multimers
Nick wants basic homo-dimer support. Not clear what this requires. Wants to be able to generate peak lists for Mardigras handling intra- and inter-monomer assignments. Not clear how to record whether an assignment is intra- or inter-monomer or both.

Find unassigned resonances from NOESY plus model
Choose an unassigned atom. Find all nearby assigned atoms and display strips for each to find resonance with which they all have crosspeaks. Strip plot should be generalized to show 2D spectra.

Separate non-NOE feature from
This needs maximum signal/noise parameter. Also should have switch to exclude resonances with no peak assignments (for exchangeable protons in a D2O spectrum). It doesn't require the ppm tolerances. And it is basically different than all the other capabilities that look at alternative assignments for a peak.

Better file selection dialog
Peak list and assignment distance pdb files should use multiple file selection dialog. Other places I use open or save dialog where not appropriate because for 'open' file must exist and for save it must not or confirmation of overwrite is requested. And I can't select a directory in AutoAssign interface. The Tk file selection dialog is junk. I should look for an alternative implemented in Python for Tkinter.

Slices should track crosshair from other view
To compare the same slice in two views you now have to move the pointer back and forth between them. Would be better if slice in other view followed crosshair from other view. Also might be useful for peak info. How about resonance panel highlighting, and scale crosshair position display?

Save dialog state in session file
Need to cache dialog options like in chimera extension so I'm not always retyping the same file paths. Maybe make attached session data and use it extensively. Also I want to be typing the same paths less often. So if no reasonable default pdb path exists but user has specified a save file path use the save file path as a first guess??

Change UCSF spectrum file axis order
Want to be able to create a UCSF spectrum file with different axis order. This option is available in pipe2ucsf, but not bruk2ucsf. Maybe it could be added to the ucsfdata program.

Strip plot slice display
Add toggle button to strip plot that replaces spectrum views with 1-D slices. 1-D slices can be drawn on canvases occupying same spaces as view windows.

Strip plot printing
Reimplement spectrum printing with simple drawing primitives and with flexibility to put multiple spectra on a page.

Realtime spectrum reprocessing
Locally reprocess spectrum and update contour plot in real time to control trade off between resolution and sensitivity. Multiply by an exponential in the time domain with time constant controlled by a slider. Need to fourier transform to time domain, compose, and then fourier transform back. This is equivalent to doing a convolution. Need to define a range so I can do this locally. That will be an input parameter (entry field). Range will determine cutoff of convolution function. I'll need independent time constant control and range control for each axis.

Show in peak table peaks assigned in one spectrum but not other (Bill Bauer)


Need an easy way to align two spectra.
View windows saved when not mapped don't have position remembered correctly

Write extension to produce correct peak lists for mardigras, dyana, amber, ...
Fix vnmr2ucsf problem with long lines.
Mardigras / Corma planning

Duplicate project - duplicates save files?
Display peak height on slices
pipe2ucsf provide error messages on bad input eg spectrometer freq = 0
Interrupt handling for Python.
Interactive font size choice.
Sparky icon?  Mini spectrum view?

Use GC cache to improve speed of cached contour display.
Transpose volume field in peak lists not updated.
Copied ornaments still shown as integrated with zero volume.
Command to align spectra by lining up assigned peaks (Patrick).

Application modal warning or quit dialog gets buried and Sparky appears hung.

Save sparky data as executable python?

Axis map choice as option menu.

Copy and paste from one peak to one peak ignores limits?

Do full cleanup on quit - file pointers and memory.
Eliminate project Unload(), mReset().

Use purify on spin to eliminate memory errors.

Set default color for labels (Shauna).

Add zero line on slices.
Don't display peak fit in slices if all zeros.
Show peak height in slice panels when pointer over peak.

Data being displayed outside z range.
If z is outside spectrum edge plane is displayed.  Should leave blank.

Pointer over peak should recenter reson panels (Patrick)

Status line on views to show when accelerators goofed up (Anwer).

Resonance list dialog (Patrick)
Peak list - show only peaks above diagonal (Alessandro).

Assignment format (eg. %a1-%a2-%a3) set in assignment options, effects
  labels, peak lists.  Peak list file output header needs format to be
  read by Nick's program:
	%a1-%a2-%a3    Frequency    Volume
			w1  w2  w3

User preferences saved in each save file instead of project
  -- most recent load overrides
View buttons

Add file info to open dialog.
Make return key equivalent to clicking OK in dialogs.

Spreadsheet interface instead of ornament dialog.
Comment header files of view window code.
Find better way to produce vertical text.
Draw a data structure schematic.