[Phylobase-devl] ncl + phylobase

Mark Holder mtholder at gmail.com
Wed Mar 18 23:00:19 CET 2009

	I'm one of the maintainers of NCL.  I apologize that I have not  
chimed in on some of the NCL issues raised on this list.  I wasn't  
registered on this list until a few minutes ago...

	As the previous threads noted there is a pending Google Summer of  
Code project (through NESCent's GSoC application) to add support for  
metadata to NCL. This would entail adding more parsing code (for nexml  
and for NEXUS' Notes block, where Mesquite stuffs some  info) and  
adding an API so that client code could retrieve the data.  Most of  
the client API won't change much, so I don't expect it to have drastic  
effects on phylobase (of course phylobase will have to be changed if  
it wants to query for this data).

	A couple of other things that you might want to look at if you are  
revisiting the NCL/phylobase interaction:

I recently revived a SWIG wrapper around NCL.  So as not to disturb  
most of NCL users, I put that code on a different branch. The svn repo  
the most recent non-SWIG NCL is on:

I realize now that I resorted to some hacks to get the swig interface  
file to play nicely with python, so the generation of a full swig  
interface file is currently a little uglier than it should be.  I've  
only test it on python, but it should not be too much additional work  
to get it to work with R.

I suspect that the phylobase/NCL interaction is tighter than the  
minimal SWIG bindings that are supported on the v2.2 branch, but
you may want to consider adopting the SWIG style if it is easy.  I'm  
afraid that my R is terrible, so I won't be of any help with R- 
specific stuff.

I don't intend to add more features to NCL 2.1.  Hopefully when I'm  
confident that the SWIG stuff does not interfere with a non-swig  
build, then 2.2 will be the main branch of development (for curious  
historical reasons the trunk is pretty dead -- we should just call 2.2  
the trunk, but we don't).

2. hook to get a tree when it is read

I've also recently added the ability to register a callback function  
that gets triggered after NCL reads a tree.

If you return false out of the callback, then NCL throws away the  
tree. This can dramatically reduce memory consumption if you are  
processing a stream of trees (for instance a large collection of trees  
from an MCMC analysis).  Jeet Sukumaran and I are using this feature  
(from the SWIG-enabled python bindings to NCL) in our library,  
dendropy, and it makes a huge difference in performance.

3. non-string trees

NCL does actually construct a simple tree in memory during validation  
of tree strings, it wouldn't be too hard to expose that class.  But it  
is also not very feature rich, so I'm not sure that it would help  

All the best,

Mark Holder

mtholder at ku.edu
mtholder at gmail.com

Department of Ecology and Evolutionary Biology
University of Kansas
6031 Haworth Hall
1200 Sunnyside Avenue
Lawrence, Kansas 66045

lab phone:  785.864.5789

fax (shared): 785.864.5860

More information about the Phylobase-devl mailing list