Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/annotate/afed1fd8920c/allpy/dna.py
Дата изменения: Unknown
Дата индексирования: Thu Feb 28 03:44:14 2013
Кодировка:
allpy: allpy/dna.py annotate

allpy

annotate allpy/dna.py @ 1091:afed1fd8920c

Added backreferences to `Seqeunce`s from `Monomer`s (closes #49) WARNING! Please note that `Sequence` API almost changed entirely! WARNING! This commit immediately obsoletes classmethods `Monomer.from_code*`, `Monomer.from_name` and `Sequence.from_monomers`. Turns out, python can not pickle sets/dicts which have keys, which inderecly reference the set/dict itself: http://bugs.python.org/issue9269 -- which is excatly what we have in abundance after this change. To allow pickling added `__getstate__` to `Monomer` to return all attributes, except `sequence` and `__setstate__` to `Sequence`, which runs through all monomers and returns the `sequence` attribute back to where it belongs. WARNING! This MAY result in unexpected behaviour in some cases. (Which should be rare enough).
author Daniil Alexeyevsky <dendik@kodomo.fbb.msu.ru>
date Sat, 02 Jun 2012 19:33:42 +0400
parents 4a9b4503a027
children c4c772e3ce86
rev   line source
bnagaev@240 1 import base
me@353 2 import data.codes
me@280 3
dendik@382 4 import dna
dendik@382 5
me@328 6 class Monomer(base.Monomer):
me@328 7 """DNA monomers: nucleotides."""
me@328 8 type = 'dna'
dendik@382 9 types = dna
me@280 10 by_code1 = {}
me@280 11 by_code3 = {}
me@280 12 by_name = {}
me@353 13 Monomer._initialize(data.codes.dna)
bnagaev@240 14
bnagaev@240 15 class Sequence(base.Sequence):
dendik@382 16 types = dna
dendik@382 17
dendik@930 18 def reverse_complemented(self):
dendik@930 19 """Return a new sequence, reverse-complement to self.
dendik@930 20
dendik@930 21 Name of the sequence is name of self with apostrophe added.
dendik@930 22 """
dendik@930 23 complement = {'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C'}
dendik@1091 24 result = self.types.Sequence(
dendik@1091 25 name=self.name +"'",
dendik@1091 26 description=self.description,
dendik@1091 27 source=self.source
dendik@930 28 )
dendik@1091 29 for monomer in reversed(self):
dendik@1091 30 result.append_monomer(complement.get(monomer.code1, 'N'))
dendik@1091 31 return result
dendik@930 32
dendik@931 33 class Column(base.Column):
dendik@931 34 types = dna
dendik@931 35
dendik@382 36 class Alignment(base.Alignment):
dendik@382 37 types = dna
bnagaev@240 38
me@341 39 class Block(Alignment, base.Block):
me@341 40 pass
me@341 41
me@280 42 # vim: set ts=4 sts=4 sw=4 et: