[Biopython] Maintaining partition order in concatenated nexus

David Winter djwinter at asu.edu
Tue Jun 9 21:17:33 UTC 2015


Hi Michael,

I think this is a result of  "charpartitions" in the Nexus object being a
dictionary. In python dictionaries are "unordered", so you don't usually
get objects back out in the order they went in.

One possible workaround it to make you own class that inherits everything
else from Nexus but instead uses an ordered  dictionary (from collections),
something like


from collections import OrderedDict
from Bio.Nexus import Nexus

class OrderedNexus(Nexus.Nexus):
    """ Subclass of Bio.Nexus.Nexus used to maintain partition order """

    def __init__(self, **kwargs):
        Nexus.Nexus.__init__(self, **kwargs)
        self.charpartitions = OrderedDict



o = OrderedNexus()
n = Nexus.Nexus()
 o.charpartitions
#OrderedDict()
n.charpartitions
#{}
dir(o) # (all the stuff you expect to see in a Nexus object)

I haven't had a chance to test this on the example, but hope it's some help
to you.

David


On Tue, Jun 9, 2015 at 6:37 AM, Michael Gruenstaeudl <
mi.gruenstaeudl at gmail.com> wrote:

> Hi all,
> like many others, I have been using the excellent example on the Biopython
> wiki to concatenate multiple alignments into one nexus-file using
> Biopython's Nexus.combine() function. However, what if I wish to maintain
> the order of the nexus-partitions specified in 'file_list'. While the tuple
> 'nexi' is still ordered according to 'file_list',
> 'combined.charsets.items()' is not. Moreover, sorting the charsets is not
> possible:
>
> >>> combined.charsets.items()[0]
> ('partition0038_rps4_CDS.nex', [36567, 36568])
>
> >>> combined.charsets.items()[1]
> ('partition0004_trnK_CDS.nex', [36569, 36573])
>
> >>> for i in range(0,len(combined.charsets.items())):
> ...     combined.charsets.items()[i] = sorted_items[i]
> ...
> >>> combined.charsets.items()[0]
> ('partition0038_rps4_CDS.nex', [36567, 36568])
>
> What procedure would you recommend to maintain the input order of
> 'file_list' in the output file 'combined.nex'?
>
> Thank you, Michael
>
> --
> Michael Gruenstaeudl (Grünstäudl), PhD
> E-mail: mi.gruenstaeudl at gmail.com
> Website: http://blogs.fu-berlin.de/gruenstaeudl/
> <http://u.osu.edu/gruenstaeudl/>
>
> _______________________________________________
> Biopython mailing list  -  Biopython at mailman.open-bio.org
> http://mailman.open-bio.org/mailman/listinfo/biopython
>



-- 
David Winter
Postdoctoral Research Associate
Center for Evolutionary Medicine and Informatics
The Biodesign Institute
Arizona State University

ph: +1 480 519 5113
w: www.david-winter.info
lab: http://cartwrig.ht/lab/
blog: sciblogs.co.nz/the-atavism
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.open-bio.org/pipermail/biopython/attachments/20150609/71baf5eb/attachment.html>


More information about the Biopython mailing list