FASTQ Opt: Eliminate a few extra calls to is_ascii_encoded.

Kept 135848 of 250000 reads (54.34%).
         117127015 function calls (116877015 primitive calls) in 38.632 seconds

Down from 39.416 seconds on previous changeset. Main Difference

(ncalls|tottime|percall|cumtime|percall|filename:lineno(function))

   385848   11.289    0.000   15.499    0.000 fastq.py:91(get_decimal_quality_scores)
  1271696    0.716    0.000    0.716    0.000 fastq.py:71(is_ascii_encoded)

   250000    0.185    0.000   10.434    0.000 fastq.py:107(get_decimal_quality_scores)
   385848   11.380    0.000   15.368    0.000 fastq.py:109(__get_decimal_quality_scores)
  1135848    0.649    0.000    0.649    0.000 fastq.py:71(is_ascii_encoded)
This commit is contained in:
John Chilton
2013-11-12 22:02:58 -06:00
parent 1151ed748d
commit 51e269cf9b
+8 -5
View File
@@ -105,7 +105,9 @@ class fastqSequencingRead( SequencingRead ):
else:
return 0
def get_decimal_quality_scores( self ):
if self.is_ascii_encoded():
return self.__get_decimal_quality_scores(self.is_ascii_encoded())
def __get_decimal_quality_scores( self, ascii ):
if ascii:
to_quality = self.quality_min - self.ascii_min
return [ ord( val ) + to_quality for val in self.quality ]
else:
@@ -128,15 +130,16 @@ class fastqSequencingRead( SequencingRead ):
else:
new_read.sequence = self.convert_color_to_base_space( self.sequence )
new_read.description = self.description
is_ascii = self.is_ascii_encoded()
if self.score_system != new_read.score_system:
if self.score_system == 'phred':
score_list = self.convert_score_phred_to_solexa( self.get_decimal_quality_scores() )
score_list = self.convert_score_phred_to_solexa( self.__get_decimal_quality_scores(is_ascii) )
else:
score_list = self.convert_score_solexa_to_phred( self.get_decimal_quality_scores() )
score_list = self.convert_score_solexa_to_phred( self.__get_decimal_quality_scores(is_ascii) )
else:
score_list = self.get_decimal_quality_scores()
score_list = self.__get_decimal_quality_scores(is_ascii)
if force_quality_encoding is None:
if self.is_ascii_encoded():
if is_ascii:
new_encoding = 'ascii'
else:
new_encoding = 'decimal'