Added properties for Nuc_Seq cython classes (and updated commands using

them)
This commit is contained in:
Celine Mercier
2016-11-08 16:59:32 +01:00
parent b5b889c4a2
commit 51b23915ca
4 changed files with 89 additions and 90 deletions

View File

@ -67,16 +67,16 @@ def run(config):
for seq in iview :
pb(i)
toprint = ">"+seq.get_id()+" "
toprint = ">"+seq.id+" "
for col_name in seq :
if col_name not in special_columns :
toprint = toprint + col_name + "=" + str(seq[col_name]) + "; "
if DEFINITION_COLUMN in seq :
toprint = toprint + seq.get_definition()
toprint = toprint + seq.definition
nucseq = bytes2str(seq.get_sequence())
nucseq = bytes2str(seq.nuc_seq)
if config['export']['format'] == "fasta" :
nucseq = re.sub("(.{60})", "\\1\n", nucseq, 0, re.DOTALL)

View File

@ -90,7 +90,7 @@ def addOptions(parser):
# TODO: Handling of NA values
def run(config):
pb = ProgressBar(35000000, config, seconde=5)
pb = ProgressBar(10000, config, seconde=5) # TODO should be number of records in file
inputs = uopen(config['import']['filename'])
@ -114,18 +114,17 @@ def run(config):
i = 0
for seq in iseq:
pb(i)
view[i].set_id(seq['id'])
view[i].set_definition(seq['definition'])
view[i].set_sequence(seq['sequence'])
view[i].id = seq['id']
view[i].definition = seq['definition']
view[i].nuc_seq = seq['sequence']
if get_quality :
view[i].set_quality(seq['quality'])
view[i].quality = seq['quality']
for tag in seq['tags'] :
view[i][tag] = seq['tags'][tag]
i+=1
print(view.__repr__())
#print(view.__repr__())
view.close()
d.close()
print("Done.")

View File

@ -4,35 +4,16 @@ from ._obidms cimport OBIView_line
cdef class OBI_Seq(dict) :
cdef object id
cdef object definition
cdef object sequence
cpdef set_id(self, object id)
cpdef object get_id(self)
cpdef set_definition(self, object definition)
cpdef object get_definition(self)
cpdef object get_sequence(self)
cdef str _id
cdef object _seq
cdef str _definition
cdef class OBI_Nuc_Seq(OBI_Seq) :
cdef object quality
cdef object _quality
#cpdef object reverse_complement(self)
cpdef set_sequence(self, object sequence)
cpdef set_quality(self, object quality)
cpdef object get_quality(self)
cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
cpdef set_id(self, object id)
cpdef object get_id(self)
cpdef set_definition(self, object definition)
cpdef object get_definition(self)
cpdef set_sequence(self, object sequence)
cpdef object get_sequence(self)
cpdef set_quality(self, object quality)
cpdef object get_quality(self)
cpdef object get_str_quality(self)
# cpdef object reverse_complement(self)
#cpdef object reverse_complement(self)

View File

@ -10,45 +10,59 @@ from .capi.obiview cimport NUC_SEQUENCE_COLUMN, \
cdef class OBI_Seq(dict) :
def __init__(self, object id, object seq, object definition=None) :
self.set_id(id)
self.set_sequence(seq)
if definition is not None :
self.set_definition(definition)
cpdef set_id(self, object id) :
def __init__(self, str id, object seq, object definition=None) :
self.id = id
self[bytes2str(ID_COLUMN)] = id
self.seq = seq
if definition is not None :
self.definition = definition
cpdef get_id(self) :
return self.id
# sequence id property getter and setter
@property
def id(self):
return self._id
@id.setter
def id(self, str new_id):
self._id = new_id
self[bytes2str(ID_COLUMN)] = new_id
cpdef set_definition(self, object definition) :
self.definition = definition
self[bytes2str(DEFINITION_COLUMN)] = definition
# sequence property getter and setter
@property
def seq(self):
return self._seq
@seq.setter
def seq(self, object new_seq):
self._seq = new_seq
self["SEQ"] = new_seq # TODO discuss
cpdef get_definition(self) :
return self.definition
cpdef get_sequence(self) :
return self.sequence
def __str__(self) :
return self.sequence # or not
# sequence definition property getter and setter
@property
def definition(self):
return self._definition
@definition.setter
def definition(self, object new_definition):
self._definition = new_definition
self[bytes2str(DEFINITION_COLUMN)] = new_definition
cdef class OBI_Nuc_Seq(OBI_Seq) :
cpdef set_sequence(self, object sequence) :
self.sequence = sequence
self[bytes2str(NUC_SEQUENCE_COLUMN)] = sequence
# nuc sequence property getter and setter
@property
def seq(self):
return self._seq
@seq.setter
def seq(self, object new_seq):
self._seq = new_seq
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq
cpdef set_quality(self, object quality) :
self.quality = quality
self[bytes2str(QUALITY_COLUMN)] = quality
cpdef get_quality(self) :
return self.quality
# sequence quality property getter and setter
@property
def quality(self):
return self._quality
@quality.setter
def quality(self, object new_quality):
self._quality = new_quality
self[bytes2str(QUALITY_COLUMN)] = new_quality
# cpdef str reverse_complement(self) : TODO in C ?
# pass
@ -58,41 +72,46 @@ cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
# TODO store the str version of column name macros?
cpdef set_id(self, object id) :
self[bytes2str(ID_COLUMN)] = id
cpdef object get_id(self) :
# sequence id property getter and setter
@property
def id(self):
return self[bytes2str(ID_COLUMN)]
@id.setter
def id(self, str new_id):
self[bytes2str(ID_COLUMN)] = new_id
cpdef set_definition(self, object definition) :
self[bytes2str(DEFINITION_COLUMN)] = definition
cpdef object get_definition(self) :
# sequence definition property getter and setter
@property
def definition(self):
return self[bytes2str(DEFINITION_COLUMN)]
@definition.setter
def definition(self, str new_def):
self[bytes2str(DEFINITION_COLUMN)] = new_def
cpdef set_sequence(self, object sequence) :
self[bytes2str(NUC_SEQUENCE_COLUMN)] = sequence
cpdef object get_sequence(self) :
# nuc_seq property getter and setter
@property
def nuc_seq(self):
return self[bytes2str(NUC_SEQUENCE_COLUMN)]
@nuc_seq.setter
def nuc_seq(self, object new_seq):
self[bytes2str(NUC_SEQUENCE_COLUMN)] = new_seq
cpdef set_quality(self, object quality) :
if (type(quality) == list) or (quality is None) :
self[bytes2str(QUALITY_COLUMN)] = quality
else : # Quality is in str form
(((self._view).columns)[bytes2str(QUALITY_COLUMN)]).set_str_line(self._index, quality)
cpdef object get_quality(self) :
# quality property getter and setter
@property
def quality(self):
return self[bytes2str(QUALITY_COLUMN)]
@quality.setter
def quality(self, object new_qual):
if (type(new_qual) == list) or (new_qual is None) :
self[bytes2str(QUALITY_COLUMN)] = new_qual
else : # Quality is in str form
(((self._view).columns)[bytes2str(QUALITY_COLUMN)]).set_str_line(self._index, new_qual)
cpdef object get_str_quality(self) :
cpdef object get_str_quality(self) : # TODO not ideal
return ((self._view).columns)[bytes2str(QUALITY_COLUMN)].get_str_line(self._index)
# def __str__(self) :
# return self[bytes2str(NUC_SEQUENCE_COLUMN)] # or not
# cpdef str reverse_complement(self) : TODO in C ?
# pass
# TODO static method to import?
# TODO static method to import OBI_Nuc_Seq to OBI_Nuc_Seq_Stored ?