To Do

From Avogadro - Free cross-platform molecule editor
Jump to: navigation, search

This page gathers ideas for future implementation. Unless indicated, no one is currently working on them.

For more details on the 1.1/1.2 development series, there is a separate To Do for 1.1 list.

Future Development

Most of the following projects are likely to be relatively quick to implement -- unless indicated, no one has finished them or indicated interest in developing the feature. Longer-term projects, suitable for "capstone" projects, Google Summer of Code, etc. might involve multiple projects from below, or something from the "large projects" list below.

General Design

  • Saved selection lists, named selection lists, move between views etc. (done)
  • Tree view of model which is updated with views, i.e. selection etc (done)
  • Detachable views of the molecule to allow simultaneous rendering of two or more views on the same molecule (done)
  • Colour schemes as plugins that can be used by the engines - two types taking doubles or primitives and returning a colour (done)
  • Extra metadata for the model such as internal coordinates
  • Addition of context help to the tools, engines, extensions
  • Option to make selections persistent through all views or move selections between views/save them
  • Addition of primitives such as planes, cubes, springs, centres of mass that can also be saved in file format
  • HUD mode - all necessary controls in the GL view akin to the typical GUIs in FPS games
  • Hooks for sending out jobs to an external job controller and receiving completed jobs to display
  • Basic 2D graphing for things such as energy when doing geometry optimisation
  • Make tools and engines not in the main display available through a menu


  • General OpenGL optimization
    • Minimizing wasted calls
    • Profiling
    • Reducing duplicate vertices
  • Depth cuing using GL fog - easy addition but helps a great deal (done)
  • GLSL shading capabilities when available (done)
  • Stereo views from engines (red/green coloring, crossed-eyes, etc.)
    • This is probably best addressed as a new painter type and/or with GLWidget support
  • Planes (e.g., unit cell planes, cuts through orbitals, charge density, etc.)
  • Dipole Engine (done)
    • This would allow for display of vector data, such as the dipole moment vector in H2O
  • Add a dialog for POV-Ray export to control scene size, basic rendering options etc (done)
  • Support for quantum output files to render MOs etc from basis sets (initial support for Gaussian fchk) (done)
    • When basis sets can be read show previews of all MOs in one view where the desired MO can be easily found visually
  • Coloring
    • Color residues by secondary structure (done)
    • Color residues as backbone vs. sidechain

Combination Tasks

Useful for measurements and annotations)

  • Define a plane (from multiple points) == command + rendering
  • Define a point (e.g., center of multiple points) == command + rendering (as a dummy atom?)
  • Define a line/vector (e.g., best fit for multiple points) == command + rendering
  • Align multiple molecules -- how do different conformations differ?
  • Define cropping of cubes/surfaces


  • Painters should also handle initialisation of the context - i.e. OpenGL initialisation
  • Allow quickdraw to be disabled on small molecules and on powerful systems
    • Use more "aggressive" quickdraw (e.g., lower quality or wireframe rendering) on very large molecules or slow systems
  • Add missing primitives to the POVPainter (done)
  • Move IsoGen to the painter and rename to IsoSurface - more descriptive
    • Add display list support and more intelligent caching to the IsoSurface code
    • Add marching tetrahedron support
  • SVG, PDF, and PS vector export gl2ps (done)
    • May need some debugging
    • We may want to add our own SVG or PDF output which has fewer polygons
  • Animations as GIF, QuickTime, AVI, etc.
  • Use the Open Scene Graph work Mario has done as a painter - fast ambient occlusion?
  • Reuse the wonderful GPL'd rendering code of QuteMol, as a run-time option
    • (uses programmable shaders, which are very slow unless hardware-accelerated).

Mouse Tools

  • New "template" draw tool -- click to create atoms with specific bonding patterns (e.g., tetrahedral, octahedral, etc.)
    • Already possible -- insert a fragment. We'd just want to have a set of CML fragments for each pattern and change the central atom
  • Measure
    • Needs to measure charge
  • Annotation
    • This would allow you to add custom text and arrows to specific 2D and 3D points -- for example an arrow to indicate the void space in a lattice, or where a reaction might occur.
  • Enhance selection support
    • Select everything within a certain radius of a point
    • Select connected elements
    • Add text output of atom indices in selections
    • Paste selections into various code interfaces (GAMESS-US etc)
  • Zeobuilder style constraints based building tool
  • Translation, reflection etc about planes, rotation about arbitrary centers/centroids
  • Lighting tool - move lights around visually, change colour, brightness etc
  • Add more visual feedback to the draw and manipulate tools - bond length, bond angles etc


  • Builders
    • Protein / biomolecule builder commands (done)
    • Crystal unit cell builder (in progress)
      • Need extension to create a "super cell" of multiple real atoms
      • Need to enter in reciprocal coordinates (e.g., from a manuscript)
    • Z-matrix editor -- see CCP1GUI and Molden (started)
  • Hide/Show hydrogen extension (done)
  • Compute plugins
    • GAMESS interface (done)
    • Gaussian interface (done)
    • Q-Chem interface (done)
    • MOPAC interfacev (done)
    • DALTON interface (done)
    • Molpro interface (done)
    • GAMESS-UK interface (done)
    • etc.
    • Add syntax highlighting to the input text format (done for GAMESS)
    • Add 'hide/show' text form button (done)
    • Improve "basic" vs. "advanced" interfaces
  • Web / Searching interfaces
    • Open URL extension (done)
    • Open PDB id extension (done)
    • Open from PubChem search
    • Strigi searches (Linux / KDE)
    • Spotlight searches (Mac OS X)


  • Should allow switching tools, engines, user interface, allowing scriptable render graphics (done)
  • Embedded Python support will be included to allow custom scripts independent of compiled plugins (done)
  • Should allow calling for a rotation, translation, zoom of camera by certain amount, updating molecule, etc.
  • Support for custom shell scripts will be added (e.g., to submit calculations to a cluster or grid)
  • Support for using a custom job manager such as the one used in CCP1GUI
  • Possibly other scripting languages like Ruby (if we can figure out Kross)


  • Import dialog - to handle importing files and setting custom import options (done)
  • Menus for disabled plugins (i.e., to allow you to switch to rarely used tools or engines)
  • Menu item to change your language preference
  • Add a window menu - switch easily between different projects etc (done -- for Mac OS)
  • Bond checker - i.e. no 5-valent carbons. Tool to do basic bond counting either interactively or after drawing.
  • Keyboad use: (started)
    • Use of arrow keys to "nudge" rather than mouse (manipulate tool) (done)
    • Keystrokes to switch elements with draw tool (done)
  • When the user opens a new file a new Avogadro instance is started. This instance should have the same settings as the calling engine and not start with the default values (for example with the engines used per default)
  • DBus-interface
    • This interface could be used to commmunicate with Strigi, Kalzium, MolSketch and other applications
    • This interface could be used to start Avogadro from anywhere with a simple DBus-signal or get feedback from Avogadro/libavogadro when Avo is started from somewhere (like "calculation for X is done and saved in file Y" so that another app can react...
    • Qt 4.2 and later has a very simple-to-use DBus-interface
  • Shared copy/paste
    • Communicate with MolSketch and other Qt applications for chemical data
    • Communicate with ChemDraw and ISISDraw on Mac and Windows using MDL Molfile clipboard support

Code Upkeep

  • Clean up current documentation
  • Ensure all API is documented
  • Run through Krazy periodically to find small bugs/warnings
  • Finish the GLPicker class. It's currently an unused, non-working draft. The files are libavogadro/src/glpicker.*.

Larger Projects

These tasks are imagined as larger projects, suitable for software engineering projects, Google Summer of Code, etc. If you find these ideas interesting, you should contact the development list, and someone can give you more details.

Obviously suggestions or original projects are always welcome!

  • Advanced rendering techniques using OpenGL 2.0 and GLSL. These include:
    • Ambient occlusion
    • Improved lighting model
    • Colored borders for light and dark backgrounds
    • Custom shaders (e.g., [1])
  • Improved rendering performance.
    • The current rendering stack is somewhat naive and likely can use significant optimization
    • Particular problems may be found in the surface and orbital (isosurface) codes
    • What other OpenGL tricks are we missing?
  • Integration with Wiimote and Head-Tracking
    • An initial effort was done previously with Avogadro and would need merging and testing Wiimote-branch
    • Other work is going on at the University of Toronto, including ImmersiveViz (with PyMol) and HTDP for head-tracking over sockets
  • Integration with desktop searching
    • Ideally, Avogadro should be able to search desktop filesystems using Strigi (KDE), Spotlight (Mac), etc.
    • The browser should reveal a list of matches and a "quick preview" for opening or inserting into the current file
  • Integration with web databases
    • A similar approach would be useful for web databases like PubChem
    • The web database feature may need an embedded browser like WebKit to navigate to specific molecular files
  • Interactive tutorials with embedded scripting
    • This will require some sort of custom XML format which allows embedding a Python script
    • The idea is that the script will "assist" users in walking through a tutorial or giving a quiz on a particular lesson
  • Solvent "box" creation
    • Many chemistry simulations require creating a sphere or box of solvent around a molecule (i.e., a protein in water)
    • Each solvent molecule must have random position and orientation -- but the overall density must match the known value
    • No molecules can overlap
    • This should be general for a range of solvents (water, acetonitrile, methanol, ethanol, CO2, ...)
  • Force field simulation in periodic boundary conditions
    • In both biological simulations and materials simulations, periodic boundary conditions are used
    • Long-range forces, such as Coulomb interactions need techniques such as Fast Multipole Method, Ewald Sums, and the Poisson Boltzmann equation.
    • Our current force field code only handles normal molecules, not periodic boundaries
  • Computational Job Manager
    • This may turn into a separate, but related project -- most computational chemistry jobs can run for a long time and involve remote systems
    • A 'job manager' would help interface Avogadro to local computational resources (clusters, grids, etc.)
    • Examples include:
  • Interactive Collaboration
    • A useful feature would be to collaborate with multiple users over the Internet
    • This would require a protocol to send molecular data and visualization results in real-time
    • Addition of text chat would also be very useful
    • A "molecular whiteboard?"
    • Possible implementations: Telepathy (preferred if powerful D-Bus interface is done), QXmpp RPC calls, XML-RPC