Difference between revisions of "Ideas"

From PyMOLWiki
Jump to navigation Jump to search
m (add link to PyMOL mailing list wiki page)
 
(102 intermediate revisions by 32 users not shown)
Line 1: Line 1:
=== PyMOL Ideas Page for Google Summer of Code (GSoC 2008) and Beyond ===
+
<blockquote>
 +
----
 +
----
 +
'''DISCLAIMER:''' This page was originally developed for the 2008 Google Summer of Code competition and is kept only for historical reasons. If you want to discuss an idea or feature implementation just send and e-mail to the [[PyMOL_mailing_list]]. If you want to request a new feature or report a bug, please fill a ticket at [http://sourceforge.net/projects/pymol/| sourceforge]
 +
----
 +
----
 +
</blockquote>
  
----
+
=== Ideas for PyMOL Development ===
  
 
== Where to Start ==
 
== Where to Start ==
  
Always start with Python and only delve down into the C code when absolutely necessary.  Although PyMOL is mostly a C-based application, much of the C code is opaque, fragile, and unforgiving. One mistake in C could potentially to destabilize the entire platform, and though refactoring is an important project goal, such work may not be ideal for GSoC-type efforts.
+
Always start with Python and only delve down into the C code when absolutely necessary.  Although PyMOL is mostly a C-based application, much of the that code is opaque, fragile, and unforgiving. Although C code refactoring is an important project goal, such work may not be ideal since once mistake could potentially to destabilize the entire platform.  
  
Fortunately, the Python interpreter and the PyMOL command and selection languages make it possible to extend PyMOL safely and quickly.  Even when code performance is critical, Python can still serve as an interface layer between external C, C++, or Java code and PyMOL's internal C data structures.
+
Fortunately, the Python interpreter and the PyMOL command and selection languages make it possible to extend PyMOL safely and quickly.  Even when performance is critical, Python should be the interface between external C, C++, and Java code and PyMOL's internal C data structures.
  
 
== Choosing a Topic ==
 
== Choosing a Topic ==
  
The best open-source code is usually written by an end-users attempting to meet their own pressing needs.  So if you have already have a specific interest or need which relates to PyMOL, then we strongly encourage you to follow that up first!
+
The best open-source code is usually written by an end-users attempting to meet their own pressing needs.  So if you have already have a specific need which relates to PyMOL, then we strongly encourage you to follow up on that first!
  
If you are looking for ideas or suggestions,  then try to seek out enhancements and/or integrations that will impact the largest potential user base.  For example, imagine what new things might be useful to virtually all medicinal chemists, all structural biologists, all movie-makers, all paper-writers, and so on?
+
If you are looking for ideas,  then try to seek out enhancements and/or integrations that will impact the largest potential user base.  For example, imagine what new things might be useful to virtually all medicinal chemists, all structural biologists, all movie-makers, all paper-writers, and so forth.
  
The ideas presented are organized by category.  At present, integration with other open-source project seems like the area most likely to yield significant benefits, so those ideas are listed first.
+
The ideas below are organized by category.  Right now, integration with other open-source projects seems like the approach most likely to yield significant benefit, so those ideas are first.
  
== Integration Ideas ==
+
== Integration Ideas (Linking Out to Useful Open-Source Tools) ==
  
In most cases, depending on the need, integration can be accomplished through standalone Python scripts, through new PyMOL commands, through simple Wizards, or via Tkinter plugins.
+
In most cases, depending on the need, integration can be accomplished through standalone Python scripts, through new PyMOL commands, through PyMOL Wizards, or via Tkinter plugins.
  
 
* APBS (electrostatics calculations):  Improve the existing plugin. Michael Lerner is currently leading this effort.  See [[APBS]]
 
* APBS (electrostatics calculations):  Improve the existing plugin. Michael Lerner is currently leading this effort.  See [[APBS]]
* RDKit (cheminformatics, depiction, UFF cleanup, etc.):  Lots of potential here, however C++ coding may be necessary.
+
:: yea ([[User:Inchoate|Tree]] [[User:Jedgold|Jedgold]] [[User:Vcpmartin|Vcpmartin]] [[User:Siderator|Siderator]] [[User:Tstout|tstout]]) / nay (0)
* mengine (MMFF small molecule cleanup): work is in progress (Delsci).
+
:: Feel free to mention specific plugin enhancements you'd like! [[User:Mglerner|Michael Lerner]]
* mpeg_encode (MPEG movie production on Linux, etc.):  work is in progress (Delsci).
+
* RDKit (cheminformatics, depiction, UFF cleanup, etc.):  Lots of potential here, however C++ coding may be necessary for more advanced integration tasks. [http://www.rdkit.org RDKit home]
 +
:: yea ([[User:Markvanraaij|Markvanraaij]]) / nay (0)
 
* GIMP (image manipulation):  Streamline & document the process of exporting images from PyMOL into GIMP and preparing them for submission to scientific Journals.
 
* GIMP (image manipulation):  Streamline & document the process of exporting images from PyMOL into GIMP and preparing them for submission to scientific Journals.
* Blender (general-purpose 3D modeling & animation): Streamline & document the process of getting molecular geometry out of PyMOL and into Blender.
+
:: yea (0) / nay (0)
* Jmol (publishing visualizations inside of web pages): Liason between PyMOL & Jmol projects to develop a shared molecular visualization data model compatible with both applications.
+
* Jmol (publishing visualizations inside of web pages): Liason between PyMOL & Jmol projects to develop a shared molecular visualization data model compatible with both applications (meaning, being able to import/export sessions from one to the other).
 +
:: yea ([[User:Tstout|tstout]] [[User:Slaw|slaw]]) / nay ([[User:Cowsandmilk|Cowsandmilk]])
 
* Firefox (plugin): Develop an PyMOL plugin compatible with Firefox.
 
* Firefox (plugin): Develop an PyMOL plugin compatible with Firefox.
 +
:: yea ([[User:Vvostri|Vvostri]] [[User:assaff|assaff]] [[User:Slaw|slaw]]) / nay ([[User:Tstout|tstout]])
 
* MMTK (molecular mechanics -- Python/flexible):  Develop the ability to round-trip molecular systems from PyMOL, into MMTK, and back.
 
* MMTK (molecular mechanics -- Python/flexible):  Develop the ability to round-trip molecular systems from PyMOL, into MMTK, and back.
 +
:: yea (0) / nay (0)
 
* GROMACS (molecular mechanics -- C/fast) - Maybe some ideas can be shared with this guy. [http://www.kde-apps.org/content/show.php/Gromacs+GUI+?content=47665 Gromacs GUI]
 
* GROMACS (molecular mechanics -- C/fast) - Maybe some ideas can be shared with this guy. [http://www.kde-apps.org/content/show.php/Gromacs+GUI+?content=47665 Gromacs GUI]
 +
:: yea ([[User:Jedgold|Jedgold]] [[User:Mglerner|Michael Lerner]]) / nay (0)
 
* OpenOffice (escape Microsoft hegemony): Develop an PyMOL plugin.
 
* OpenOffice (escape Microsoft hegemony): Develop an PyMOL plugin.
 +
:: yea (0) / nay (0)
 +
* IPython integration (interactive shell): a robust alternative to the PyMOL command line?
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]] [[User:assaff|assaff]]) / nay (0)
 +
* R (statistics): PyMOL a 3D viewer environment for visualizating & manipulating large statistical data sets?
 +
:: yea (0) / nay (0)
  
 
Are there other key open-source packages we might specifically target for integration with PyMOL, either through GSoC or beyond?
 
Are there other key open-source packages we might specifically target for integration with PyMOL, either through GSoC or beyond?
Line 37: Line 53:
 
== High-Level Enhancement Ideas (Mostly Python-oriented) ==
 
== High-Level Enhancement Ideas (Mostly Python-oriented) ==
  
 +
* Work on [[#More Ideas (Please add your own!)| MolViz]]
 +
:: yea (0) / nay (0)
 
* Develop new plugins which automate routine tasks.
 
* Develop new plugins which automate routine tasks.
 +
:: yea ([[User:Vvostri|Vvostri]]) / nay (0)
 
* Improve the Python API documentation.
 
* Improve the Python API documentation.
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]] [[User:Slaw|slaw]]) / nay (0)
 
* Flesh out the new "from pymol2 import PyMOL" instance-based PyMOL API.
 
* Flesh out the new "from pymol2 import PyMOL" instance-based PyMOL API.
 +
:: yea (0) / nay (0)
 
* Develop alternate Tkinter "skins" (for custom OEM-like applications).
 
* Develop alternate Tkinter "skins" (for custom OEM-like applications).
 +
:: yea (0) / nay (0)
 
* Develop a Tkinter/TOGL widget which holds a PyMOL viewer instance.
 
* Develop a Tkinter/TOGL widget which holds a PyMOL viewer instance.
 +
:: yea (0) / nay (0)
 
* Develop a PyQt widget which holds a PyMOL viewer instance.
 
* Develop a PyQt widget which holds a PyMOL viewer instance.
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]]) / nay (0)
 
* Create a plugin-manager GUI in the style of Firefox, Rythmbox, Gedit, Eclipse. A GUI where it is easy to turn off/on plugins, configure them and see help-contents for them. Maybe also some way to paste a url to install a new Plugin.
 
* Create a plugin-manager GUI in the style of Firefox, Rythmbox, Gedit, Eclipse. A GUI where it is easy to turn off/on plugins, configure them and see help-contents for them. Maybe also some way to paste a url to install a new Plugin.
 +
:: yea ([[User:Vvostri|Vvostri]], [[User:Tstout|tstout]]) / nay (0)
 
* Add a plugin for a GUI window with the same functionality as the "Control Panel" window in SwissPDB Viewer.
 
* Add a plugin for a GUI window with the same functionality as the "Control Panel" window in SwissPDB Viewer.
 +
:: yea ([[User:Vvostri|Vvostri]]) / nay (0)
 
* Extend and modify the PyMOL command language so as to be compatible with existing RasMol and/or Jmol scripts.
 
* Extend and modify the PyMOL command language so as to be compatible with existing RasMol and/or Jmol scripts.
 +
:: yea ([[User:Tstout|tstout]]) / nay ([[User:Cowsandmilk|Cowsandmilk]] [[User:Slaw|slaw]])
 
* Enhance the Mutagenesis Wizard in order to support Nucleic acids and/or Sugars.
 
* Enhance the Mutagenesis Wizard in order to support Nucleic acids and/or Sugars.
* Streamline the process of creating movies out of Scenes.
+
:: yea ([[User:Lucajovine|Luca Jovine]] [[User:Slaw|slaw]]) / nay (0)
 +
* Better tab completion for commands
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]] [[User:Tstout|tstout]] [[User:Slaw|slaw]]) /nay(0)
  
 
== Low-Level Enhancement Ideas (Mostly C-oriented) ==
 
== Low-Level Enhancement Ideas (Mostly C-oriented) ==
  
* Provide a "split" view with multiple molecules each in their own pane (already partially implemented).
 
* Add a movie slider similar to that found in Maya, Cinema4D, 3DSMax.
 
 
* Enable editing of displayed sequence alignments.
 
* Enable editing of displayed sequence alignments.
 +
:: yea ([[User:Jedgold|Jedgold]], [[User:Aschreyer|Aschreyer]], [[User:Lucajovine|Luca Jovine]], [[User:Slaw|slaw]], [[User:Speleo3|Speleo3]]) / nay (0)
 +
::: Would this then feed back to the structural alignment? [[User:Jedgold|Jedgold]]
 +
::: A search function in the sequence would also be nice. [[User:Siderator|Carsten Schubert]]
 
* Add multi-line textual annotations
 
* Add multi-line textual annotations
 +
:: yea (0) / nay (0)
 
* Support additional annotation object including: arrow, lines, and blobs.
 
* Support additional annotation object including: arrow, lines, and blobs.
 +
:: yea ([[User:Aschreyer|Aschreyer]], [[User:Vvostri|Vvostri]]) / nay (0)
 
* Add display of secondary structure into the sequence viewer.
 
* Add display of secondary structure into the sequence viewer.
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Tstout|tstout]]) / nay (0)
 
* Enable per-object Z clipping (especially in the ray tracer)
 
* Enable per-object Z clipping (especially in the ray tracer)
* Hilite H-bonds, salt bridges, Pi-stacking, Pi-cations, etc.
+
:: yea ([[User:Gregori|Gregori]], [[User:Xevi|Xevi]], [[User:Johnm|Johnm]], [[User:Siderator|Carsten Schubert]], [[User:Tstout|tstout]]) / nay (0)
* Build in a simple forcefield and energy minimizer suitable for use with Mutagenesis.
+
::: I would go a step further with fully customizable selection-based clipping planes (XYZ, color and transparency) ([[User:Gregori|Gregori]])
* Improve the ability to animate objects independently when creating movies.
+
* Highlight H-bonds, salt bridges, Pi-stacking, Pi-cations, etc.
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Siderator|Carsten Schubert]], [[User:Jaredsampson|Jared Sampson]]) / nay (0)
 +
* Build in a simple forcefield and energy minimizer suitable for use with Mutagenesis. [[optimize|optimize]]
 +
:: yea ([[User:Lucajovine|Luca Jovine]]) / nay (0)
 
* Incorporate a suite of standard NMR visualizations (restraint violations, per-residue RMS, etc.)
 
* Incorporate a suite of standard NMR visualizations (restraint violations, per-residue RMS, etc.)
* Enumeration and display of low-energy conformers.
+
:: yea ([[User:Vvostri|Vvostri]], [[User:Vcpmartin|Vcpmartin]], [[User:Rpetrenko|rpetrenko]], [[User:SteffenG|SteffenG]]) / nay (0)
 +
* Enumeration and display of low-energy conformers. see [[optimize|optimize]]
 +
:: yea ([[User:Jedgold|Jedgold]]) / nay (0)
 +
::: This could be done by integrating RDKit, I think. [[User:Aschreyer|Aschreyer]]
 
* Automated structure grafting (poor-man's homology modeling).
 
* Automated structure grafting (poor-man's homology modeling).
 +
:: yea ([[User:Tstout|tstout]]) / nay ([[User:Jedgold|Jedgold]], [[User:Cowsandmilk|Cowsandmilk]]])
 +
::: Perhaps a plugin to Modeller instead? ([[User:Jedgold|Jedgold]], [[User:Lucajovine|Luca Jovine]])
 
* Import of alignment files.
 
* Import of alignment files.
 +
:: yea ([[User:Jedgold|Jedgold]], [[User:Lucajovine|Luca Jovine]]) / nay (0)
 +
* Implement IMD (Interactive Molecular Dynamics) Interface, see http://www.ks.uiuc.edu/Research/vmd/imd/
 +
:: yea ( [[User:Slaw|slaw]]) / nay (0)
 +
* Add buttons for '''Set ChainID''' and '''Renumber Residues From...''' to Edit menu or Actions (wrapper around Alter command)
 +
:: yea ([[User:Sheehanj|Sheehanj]], [[User:Tstout|tstout]]) / nay (0)
  
 
== Difficult C-level Code Refactoring Ideas ==
 
== Difficult C-level Code Refactoring Ideas ==
  
 
* Assemble a test suite which thoroughly exercises the existing code (a prerequisite to major refactoring).
 
* Assemble a test suite which thoroughly exercises the existing code (a prerequisite to major refactoring).
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]],[[User:Karo|Karo]]) / nay (0)
 
* Catch & handle memory-allocation failures gracefully (instead of crashing).
 
* Catch & handle memory-allocation failures gracefully (instead of crashing).
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]]) / nay (0)
 
* Replace PyMOL's memory management & custom containers with a simple runtime object model.
 
* Replace PyMOL's memory management & custom containers with a simple runtime object model.
* Separate the View and the Controllers from the Model so that they can all run asynchronously in different threads.
+
:: yea (0) / nay (0)
 +
* Separate the View and the Controllers from the Model so that they can all run asynchronously (on multiple cores).
 +
:: yea ([[User:Vvostri|Vvostri]]) / nay (0)
 
* Enable generalized undo of changes made to the Model.
 
* Enable generalized undo of changes made to the Model.
 +
:: yea ([[User:Vvostri|Vvostri]]"[[User:Vcpmartin|Vcpmartin]], [[User:Lucajovine|Luca Jovine]]", [[User:Cowsandmilk|Cowsandmilk]]) / nay (0)
 
* Clean up the internal matrix handling code.
 
* Clean up the internal matrix handling code.
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]],[[User:Karo|Karo]]) / nay (0)
  
 
== Ideas Involving Proprietary APIs ==
 
== Ideas Involving Proprietary APIs ==
  
Since these involve closed-source APIs and infrastructure, they aren't suitable for GSoC.  However, they are noted here for the sake of complete coverage.  Such development projects may be available to independent contractors outside of GSoC.
+
Since these involve closed-source APIs and infrastructure, they aren't suitable for open-source development efforts.  However, such requests are noted here for the sake of complete coverage.
  
* Build an ActiveX Control for PowerPoint and/or Internet Explorer (work is in progress - Delsci)
+
* Create a Windows port with "native" look & feel. <- Could this be done in PyQT or PyGTK?. Then it would look "native", but be cross-platform and not proprietary.
* Support direct export of Windows Media files (AVI movies).
+
:: yea (0) / nay ( [[User:Slaw|slaw]])
* Create a Windows port with "native" look & feel.
 
 
* Integrate directly via Mathematica via MathLink.
 
* Integrate directly via Mathematica via MathLink.
 +
:: yea (0) / nay ([[User:Aschreyer|Aschreyer]])
 
* Further enhance JyMOL (Java-JNI/wrapped PyMOL)
 
* Further enhance JyMOL (Java-JNI/wrapped PyMOL)
 +
:: yea ([[User:Inchoate|Tree]], [[User:Cowsandmilk|Cowsandmilk]]  [[User:Slaw|slaw]]) / nay (0)
 +
* Integrate with Matlab.
 +
:: yea (0) / nay ([[User:Aschreyer|Aschreyer]])
 +
* Quicklook Plugin on the Mac
 +
:: yea ([[User:Cowsandmilk|Cowsandmilk]]) / nay (0)
 +
 +
== Ideas for Plugin Developers ==
 +
 +
The range of things that PyMOL plugins can do has grown by leaps and bounds over the last several years. It may be time for some new infrastructure to facilitate plugin development.
  
== More Ideas (Add your own!) ==
+
* Plugins that span multiple files. This means 1. the ability to have them 2. the ability for users to easily install them.
 +
:: yea (1) / nay (0) ([[User:Mglerner|Michael Lerner]])
 +
* Config files that persist between sessions. This would be useful for things like remembering the locations of external programs, etc., without requiring the user to modify their .pymolrc.
 +
:: yea (1) / nay (0) ([[User:Mglerner|Michael Lerner]])
 +
* Restart PyMOL. After installing a plugin, PyMOL needs to be restarted to use the plugin. This is tedious when testing plugins under development.
 +
:: yea (1) /nay (0) ([[User:Hongbo zhu|Hongbo Zhu]])
  
 +
== More Ideas (Please add your own!) ==
 +
* I often need to "replicate" previously PyMOL-made figures using newer coordinates/structures.  It would be a big help (to me), if PyMOL could produce an exported text file from the old PyMOL .pse file of graphical settings that I could then modify and apply as a pymol script to the new structure -- I'm thinking of something like an old-style MOLSCRIPT.INP file...
 +
:: yea ([[User:Tstout|tstout]]) / nay (0)
 +
 +
* [http://molviz.cs.toronto.edu/molviz MolViz] is a project to incorporate head tracking input into [http://pymol.sourceforge.net/ PyMol]. This is accomplished through a [[ImmersiveViz]] script written in Python to control the molecule's position using the existing [http://www.pymolwiki.org/index.php/Category:Commands PyMol API]. Related projects would include:
 +
** Improving the existing [[ImmersiveViz]] PyMol plugin for more precise control of the environment.
 +
** Developing new input drivers for the Wiimote form of control. This would require some bluetooth hacking.
 +
** Implementing some other forms of input for head tracking, such as fisheye head tracking, IR webcam tracking, etc (refer to the end of this [[http://www.youtube.com/watch?v=ncShaY4VSac video]] for a better description).
 +
:: yea (0) / nay (0)
 
* Provide a 2D chemical depiction of the current 3D view.
 
* Provide a 2D chemical depiction of the current 3D view.
 +
:: yea ([[User:Aschreyer|Aschreyer]], [[User:Cowsandmilk|Cowsandmilk]]) / nay ([[User:Tstout|tstout]])
 +
::: RDKit?
 
* Spreadsheet view with additional information (e.g. IC50's).
 
* Spreadsheet view with additional information (e.g. IC50's).
 +
:: yea ([[User:Aschreyer|Aschreyer]]) / nay ([[User:Cowsandmilk|Cowsandmilk]])
 
* Create additional documentation, screen casts, & tutorials.
 
* Create additional documentation, screen casts, & tutorials.
 +
:: yea ([[User:Markvanraaij|Markvanraaij]] [[User:Tstout|tstout]] [[User:Slaw|slaw]]) / nay (0)
 
* Export 3D PDF images.
 
* Export 3D PDF images.
 +
:: yea ([[User:Vvostri|Vvostri]], [[User:Lucajovine|Luca Jovine]], [[User:Tstout|tstout]]  [[User:Slaw|slaw]]) / nay ([[User:Cowsandmilk|Cowsandmilk]])
 +
* Add extra "Single Word Selectors" like "nucleic", "protein", "water", "ions", "backbone" (for nucleic acids or proteins), "mainchain", "sidechain"
 +
:: yea ( [[User:Slaw|slaw]]) / nay (0)
 +
* Add functionality that allows you to select atoms based on their location (i.e. select (x_coordinate < 10) and (z_coordinate > 0))
 +
:: yea (0) / nay (0)
 +
* Implemented: <strike>set pdb_mirror option to use PDB mirrors other than RCSB for fetching structures (PDBe, PDBj); the EBI mirror is much faster from Europe for example.</strike>
 +
:: yea ([[User:Aschreyer|Aschreyer]], [[User:Tstout|tstout]]) / nay (0)
 +
:: There is already a [[Fetch_Host|fetch_host]] setting --[[User:Speleo3|Speleo3]] 17:05, 29 October 2010 (UTC)
 +
* have the ability to link the TK console to the viewer so that users don't have to constantly alt+tab between what they want
 +
:: yea (0) / nay (0)
 +
* have the ability to disable typing in the viewer and automatically type in the TK console (I like being able to cut/paste/home/end)
 +
:: yea ([[User:Lucajovine|Luca Jovine]]) / nay (0)
 +
* I see a lot of "can pymol do this" threads - any ideas of a good UI for a page of "things PyMOL can do?"
 +
:: yea (0) / nay (0)
 +
* make an option where I can turn on a coordinate grid - perhaps an object that is a cuboid grid around any object in the view so I can still alter how it's rendered?
 +
:: yea (0) / nay (0)
 +
* iPhone / Nexus One app(s)
 +
:: yea (0) / nay ( [[User:Slaw|slaw]])
 +
* single-color bonds between nonidentical or any spherical atoms colored specifically
 +
:: yea (0) / nay (0)
 +
* double bonds as two parallel cylinders
 +
:: yea ([[User:Vvostri|Vvostri]]) / nay (0)
 +
* export scenes as [http://www.khronos.org/webgl/ WebGL] / Could make mobile apps, presentation plugins obsolete
 +
:: yea ([[User:Aschreyer|Aschreyer]], [[User:Cowsandmilk|Cowsandmilk]], [[User:Tstout|tstout]]) / nay (0)
 +
* export images in vector format
 +
:: yea ([[User:Vvostri|Vvostri]], [[User:Lucajovine|Luca Jovine]], [[User:Aschreyer|Aschreyer]], [[User:Tstout|tstout]] [[User:Slaw|slaw]] ) / nay (0)
 +
* Keynote plugin
 +
:: yea ([[User:Lucajovine|Luca Jovine]]) / nay (0)
 +
* Electron density contour sliders (plugin: [[isoslider]])
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Tstout|tstout]], [[User:Siderator|Carsten Schubert]]) / nay (0)
 +
::: May be even map the contouring level onto the wheel [[User:Siderator|Carsten Schubert]]
 +
* Implemented: <strike>Internal support for FFT, i.e. reading of map coefficients</strike>
 +
:: yea ([[User:Siderator|Carsten Schubert]], [[User:Tstout|tstout]], [[User:Lucajovine|Luca Jovine]]) / nay (0)
 +
* Implemented: <strike>Automatic electron density map generation from PDB mmcif files or user-supplied MTZ files</strike>
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Aschreyer|Aschreyer]], [[User:Johnm|Johnm]],[[User:Siderator|Carsten Schubert]], [[User:Tstout|tstout]]) / nay (0)
 +
* Display of crystallographic symmetry and NCS axes, with possibility of showing symbols indicating what kind of axes they are
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Tstout|tstout]], [[User:Siderator|Carsten Schubert]]) / nay (0)
 +
::: Support for labeling cell axes and origin, etc... [[User:Siderator|Carsten Schubert]], [[User:Lucajovine|Luca Jovine]]
 +
* Automatic symmetry expansion to show overall crystal packing; automatic generation of scenes showing crystal packing interface details
 +
:: yea ([[User:Lucajovine|Luca Jovine]], [[User:Tstout|tstout]], [[User:Siderator|Carsten Schubert]]) / nay (0)
 +
* Update selections automatically: add a new option to selection action drop-down menu called "update". It will re-evaluate the selection expression and update the content of the selection automatically.
 +
 +
[[Category:Development]]

Latest revision as of 12:55, 8 October 2015



DISCLAIMER: This page was originally developed for the 2008 Google Summer of Code competition and is kept only for historical reasons. If you want to discuss an idea or feature implementation just send and e-mail to the PyMOL_mailing_list. If you want to request a new feature or report a bug, please fill a ticket at sourceforge



Ideas for PyMOL Development

Where to Start

Always start with Python and only delve down into the C code when absolutely necessary. Although PyMOL is mostly a C-based application, much of the that code is opaque, fragile, and unforgiving. Although C code refactoring is an important project goal, such work may not be ideal since once mistake could potentially to destabilize the entire platform.

Fortunately, the Python interpreter and the PyMOL command and selection languages make it possible to extend PyMOL safely and quickly. Even when performance is critical, Python should be the interface between external C, C++, and Java code and PyMOL's internal C data structures.

Choosing a Topic

The best open-source code is usually written by an end-users attempting to meet their own pressing needs. So if you have already have a specific need which relates to PyMOL, then we strongly encourage you to follow up on that first!

If you are looking for ideas, then try to seek out enhancements and/or integrations that will impact the largest potential user base. For example, imagine what new things might be useful to virtually all medicinal chemists, all structural biologists, all movie-makers, all paper-writers, and so forth.

The ideas below are organized by category. Right now, integration with other open-source projects seems like the approach most likely to yield significant benefit, so those ideas are first.

Integration Ideas (Linking Out to Useful Open-Source Tools)

In most cases, depending on the need, integration can be accomplished through standalone Python scripts, through new PyMOL commands, through PyMOL Wizards, or via Tkinter plugins.

  • APBS (electrostatics calculations): Improve the existing plugin. Michael Lerner is currently leading this effort. See APBS
yea (Tree Jedgold Vcpmartin Siderator tstout) / nay (0)
Feel free to mention specific plugin enhancements you'd like! Michael Lerner
  • RDKit (cheminformatics, depiction, UFF cleanup, etc.): Lots of potential here, however C++ coding may be necessary for more advanced integration tasks. RDKit home
yea (Markvanraaij) / nay (0)
  • GIMP (image manipulation): Streamline & document the process of exporting images from PyMOL into GIMP and preparing them for submission to scientific Journals.
yea (0) / nay (0)
  • Jmol (publishing visualizations inside of web pages): Liason between PyMOL & Jmol projects to develop a shared molecular visualization data model compatible with both applications (meaning, being able to import/export sessions from one to the other).
yea (tstout slaw) / nay (Cowsandmilk)
  • Firefox (plugin): Develop an PyMOL plugin compatible with Firefox.
yea (Vvostri assaff slaw) / nay (tstout)
  • MMTK (molecular mechanics -- Python/flexible): Develop the ability to round-trip molecular systems from PyMOL, into MMTK, and back.
yea (0) / nay (0)
  • GROMACS (molecular mechanics -- C/fast) - Maybe some ideas can be shared with this guy. Gromacs GUI
yea (Jedgold Michael Lerner) / nay (0)
  • OpenOffice (escape Microsoft hegemony): Develop an PyMOL plugin.
yea (0) / nay (0)
  • IPython integration (interactive shell): a robust alternative to the PyMOL command line?
yea (Cowsandmilk assaff) / nay (0)
  • R (statistics): PyMOL a 3D viewer environment for visualizating & manipulating large statistical data sets?
yea (0) / nay (0)

Are there other key open-source packages we might specifically target for integration with PyMOL, either through GSoC or beyond?

High-Level Enhancement Ideas (Mostly Python-oriented)

yea (0) / nay (0)
  • Develop new plugins which automate routine tasks.
yea (Vvostri) / nay (0)
  • Improve the Python API documentation.
yea (Cowsandmilk slaw) / nay (0)
  • Flesh out the new "from pymol2 import PyMOL" instance-based PyMOL API.
yea (0) / nay (0)
  • Develop alternate Tkinter "skins" (for custom OEM-like applications).
yea (0) / nay (0)
  • Develop a Tkinter/TOGL widget which holds a PyMOL viewer instance.
yea (0) / nay (0)
  • Develop a PyQt widget which holds a PyMOL viewer instance.
yea (Cowsandmilk) / nay (0)
  • Create a plugin-manager GUI in the style of Firefox, Rythmbox, Gedit, Eclipse. A GUI where it is easy to turn off/on plugins, configure them and see help-contents for them. Maybe also some way to paste a url to install a new Plugin.
yea (Vvostri, tstout) / nay (0)
  • Add a plugin for a GUI window with the same functionality as the "Control Panel" window in SwissPDB Viewer.
yea (Vvostri) / nay (0)
  • Extend and modify the PyMOL command language so as to be compatible with existing RasMol and/or Jmol scripts.
yea (tstout) / nay (Cowsandmilk slaw)
  • Enhance the Mutagenesis Wizard in order to support Nucleic acids and/or Sugars.
yea (Luca Jovine slaw) / nay (0)
  • Better tab completion for commands
yea (Cowsandmilk tstout slaw) /nay(0)

Low-Level Enhancement Ideas (Mostly C-oriented)

  • Enable editing of displayed sequence alignments.
yea (Jedgold, Aschreyer, Luca Jovine, slaw, Speleo3) / nay (0)
Would this then feed back to the structural alignment? Jedgold
A search function in the sequence would also be nice. Carsten Schubert
  • Add multi-line textual annotations
yea (0) / nay (0)
  • Support additional annotation object including: arrow, lines, and blobs.
yea (Aschreyer, Vvostri) / nay (0)
  • Add display of secondary structure into the sequence viewer.
yea (Luca Jovine, tstout) / nay (0)
  • Enable per-object Z clipping (especially in the ray tracer)
yea (Gregori, Xevi, Johnm, Carsten Schubert, tstout) / nay (0)
I would go a step further with fully customizable selection-based clipping planes (XYZ, color and transparency) (Gregori)
  • Highlight H-bonds, salt bridges, Pi-stacking, Pi-cations, etc.
yea (Luca Jovine, Carsten Schubert, Jared Sampson) / nay (0)
  • Build in a simple forcefield and energy minimizer suitable for use with Mutagenesis. optimize
yea (Luca Jovine) / nay (0)
  • Incorporate a suite of standard NMR visualizations (restraint violations, per-residue RMS, etc.)
yea (Vvostri, Vcpmartin, rpetrenko, SteffenG) / nay (0)
  • Enumeration and display of low-energy conformers. see optimize
yea (Jedgold) / nay (0)
This could be done by integrating RDKit, I think. Aschreyer
  • Automated structure grafting (poor-man's homology modeling).
yea (tstout) / nay (Jedgold, Cowsandmilk])
Perhaps a plugin to Modeller instead? (Jedgold, Luca Jovine)
  • Import of alignment files.
yea (Jedgold, Luca Jovine) / nay (0)
yea ( slaw) / nay (0)
  • Add buttons for Set ChainID and Renumber Residues From... to Edit menu or Actions (wrapper around Alter command)
yea (Sheehanj, tstout) / nay (0)

Difficult C-level Code Refactoring Ideas

  • Assemble a test suite which thoroughly exercises the existing code (a prerequisite to major refactoring).
yea (Cowsandmilk,Karo) / nay (0)
  • Catch & handle memory-allocation failures gracefully (instead of crashing).
yea (Cowsandmilk) / nay (0)
  • Replace PyMOL's memory management & custom containers with a simple runtime object model.
yea (0) / nay (0)
  • Separate the View and the Controllers from the Model so that they can all run asynchronously (on multiple cores).
yea (Vvostri) / nay (0)
  • Enable generalized undo of changes made to the Model.
yea (Vvostri"Vcpmartin, Luca Jovine", Cowsandmilk) / nay (0)
  • Clean up the internal matrix handling code.
yea (Cowsandmilk,Karo) / nay (0)

Ideas Involving Proprietary APIs

Since these involve closed-source APIs and infrastructure, they aren't suitable for open-source development efforts. However, such requests are noted here for the sake of complete coverage.

  • Create a Windows port with "native" look & feel. <- Could this be done in PyQT or PyGTK?. Then it would look "native", but be cross-platform and not proprietary.
yea (0) / nay ( slaw)
  • Integrate directly via Mathematica via MathLink.
yea (0) / nay (Aschreyer)
  • Further enhance JyMOL (Java-JNI/wrapped PyMOL)
yea (Tree, Cowsandmilk slaw) / nay (0)
  • Integrate with Matlab.
yea (0) / nay (Aschreyer)
  • Quicklook Plugin on the Mac
yea (Cowsandmilk) / nay (0)

Ideas for Plugin Developers

The range of things that PyMOL plugins can do has grown by leaps and bounds over the last several years. It may be time for some new infrastructure to facilitate plugin development.

  • Plugins that span multiple files. This means 1. the ability to have them 2. the ability for users to easily install them.
yea (1) / nay (0) (Michael Lerner)
  • Config files that persist between sessions. This would be useful for things like remembering the locations of external programs, etc., without requiring the user to modify their .pymolrc.
yea (1) / nay (0) (Michael Lerner)
  • Restart PyMOL. After installing a plugin, PyMOL needs to be restarted to use the plugin. This is tedious when testing plugins under development.
yea (1) /nay (0) (Hongbo Zhu)

More Ideas (Please add your own!)

  • I often need to "replicate" previously PyMOL-made figures using newer coordinates/structures. It would be a big help (to me), if PyMOL could produce an exported text file from the old PyMOL .pse file of graphical settings that I could then modify and apply as a pymol script to the new structure -- I'm thinking of something like an old-style MOLSCRIPT.INP file...
yea (tstout) / nay (0)
  • MolViz is a project to incorporate head tracking input into PyMol. This is accomplished through a ImmersiveViz script written in Python to control the molecule's position using the existing PyMol API. Related projects would include:
    • Improving the existing ImmersiveViz PyMol plugin for more precise control of the environment.
    • Developing new input drivers for the Wiimote form of control. This would require some bluetooth hacking.
    • Implementing some other forms of input for head tracking, such as fisheye head tracking, IR webcam tracking, etc (refer to the end of this [video] for a better description).
yea (0) / nay (0)
  • Provide a 2D chemical depiction of the current 3D view.
yea (Aschreyer, Cowsandmilk) / nay (tstout)
RDKit?
  • Spreadsheet view with additional information (e.g. IC50's).
yea (Aschreyer) / nay (Cowsandmilk)
  • Create additional documentation, screen casts, & tutorials.
yea (Markvanraaij tstout slaw) / nay (0)
  • Export 3D PDF images.
yea (Vvostri, Luca Jovine, tstout slaw) / nay (Cowsandmilk)
  • Add extra "Single Word Selectors" like "nucleic", "protein", "water", "ions", "backbone" (for nucleic acids or proteins), "mainchain", "sidechain"
yea ( slaw) / nay (0)
  • Add functionality that allows you to select atoms based on their location (i.e. select (x_coordinate < 10) and (z_coordinate > 0))
yea (0) / nay (0)
  • Implemented: set pdb_mirror option to use PDB mirrors other than RCSB for fetching structures (PDBe, PDBj); the EBI mirror is much faster from Europe for example.
yea (Aschreyer, tstout) / nay (0)
There is already a fetch_host setting --Speleo3 17:05, 29 October 2010 (UTC)
  • have the ability to link the TK console to the viewer so that users don't have to constantly alt+tab between what they want
yea (0) / nay (0)
  • have the ability to disable typing in the viewer and automatically type in the TK console (I like being able to cut/paste/home/end)
yea (Luca Jovine) / nay (0)
  • I see a lot of "can pymol do this" threads - any ideas of a good UI for a page of "things PyMOL can do?"
yea (0) / nay (0)
  • make an option where I can turn on a coordinate grid - perhaps an object that is a cuboid grid around any object in the view so I can still alter how it's rendered?
yea (0) / nay (0)
  • iPhone / Nexus One app(s)
yea (0) / nay ( slaw)
  • single-color bonds between nonidentical or any spherical atoms colored specifically
yea (0) / nay (0)
  • double bonds as two parallel cylinders
yea (Vvostri) / nay (0)
  • export scenes as WebGL / Could make mobile apps, presentation plugins obsolete
yea (Aschreyer, Cowsandmilk, tstout) / nay (0)
  • export images in vector format
yea (Vvostri, Luca Jovine, Aschreyer, tstout slaw ) / nay (0)
  • Keynote plugin
yea (Luca Jovine) / nay (0)
  • Electron density contour sliders (plugin: isoslider)
yea (Luca Jovine, tstout, Carsten Schubert) / nay (0)
May be even map the contouring level onto the wheel Carsten Schubert
  • Implemented: Internal support for FFT, i.e. reading of map coefficients
yea (Carsten Schubert, tstout, Luca Jovine) / nay (0)
  • Implemented: Automatic electron density map generation from PDB mmcif files or user-supplied MTZ files
yea (Luca Jovine, Aschreyer, Johnm,Carsten Schubert, tstout) / nay (0)
  • Display of crystallographic symmetry and NCS axes, with possibility of showing symbols indicating what kind of axes they are
yea (Luca Jovine, tstout, Carsten Schubert) / nay (0)
Support for labeling cell axes and origin, etc... Carsten Schubert, Luca Jovine
  • Automatic symmetry expansion to show overall crystal packing; automatic generation of scenes showing crystal packing interface details
yea (Luca Jovine, tstout, Carsten Schubert) / nay (0)
  • Update selections automatically: add a new option to selection action drop-down menu called "update". It will re-evaluate the selection expression and update the content of the selection automatically.