Cython API: in taxonomy, added get_taxon_at_rank() function for Taxonomy

class and rank_idx property for Taxon class
This commit is contained in:
Celine Mercier
2018-03-21 16:38:26 +01:00
parent 4c3478d8f8
commit 123fb9d7ba
2 changed files with 21 additions and 5 deletions

View File

@ -23,6 +23,7 @@ cdef class Taxonomy(OBIWrapper) :
cpdef object get_family(self, int taxid)
cpdef bytes get_scientific_name(self, int taxid)
cpdef bytes get_rank(self, int taxid)
cpdef object get_taxon_at_rank(self, int taxid, object rank)
cdef class Taxon :

View File

@ -159,6 +159,15 @@ cdef class Taxonomy(OBIWrapper) :
return self._ranks[taxon_p.rank]
cpdef object get_taxon_at_rank(self, int taxid, object rank):
if isinstance(rank, str) or isinstance(rank, bytes):
rank = self._ranks.index(tobytes(rank))
try:
return [x.taxid for x in self.parental_tree_iterator(taxid) if x.rank_idx==rank][0]
except IndexError:
return None
def __len__(self):
return self.pointer().taxa.count
@ -272,7 +281,7 @@ cdef class Taxon : # TODO dict subclass?
def __richcmp__(self, Taxon taxon2, int op):
return (self.name == taxon2.name) and \
(self.taxid == taxon2.taxid) and \
(self.rank == taxon2.rank) and \
(self.rank_idx == taxon2.rank_idx) and \
(self.farest == taxon2.farest) and \
(self.parent.taxid == taxon2.parent.taxid) and \
(self.preferred_name == taxon2.preferred_name)
@ -293,6 +302,11 @@ cdef class Taxon : # TODO dict subclass?
def rank(self):
return ((self._tax)._ranks)[(self._pointer).rank]
# rank_idx property getter
@property
def rank_idx(self):
return (self._pointer).rank
# farest property getter
@property
def farest(self):
@ -321,6 +335,7 @@ cdef class Taxon : # TODO dict subclass?
d['taxid'] = self.taxid
d['name'] = self.name
d['rank'] = self.rank
d['rank_idx'] = self.rank_idx
d['preferred name'] = self.preferred_name
d['parent'] = self.parent.taxid
d['farest'] = self.farest