From 51e269cf9bcd795b2ea6fb1980e171de27587a53 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Tue, 12 Nov 2013 22:02:58 -0600 Subject: [PATCH] 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) --- lib/galaxy_utils/sequence/fastq.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/galaxy_utils/sequence/fastq.py b/lib/galaxy_utils/sequence/fastq.py index 13b4145d5e2..c3ff49bcf2b 100644 --- a/lib/galaxy_utils/sequence/fastq.py +++ b/lib/galaxy_utils/sequence/fastq.py @@ -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'