mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Tools include: FASTQ Groomer convert between various FASTQ quality formats Combine FASTA and QUAL into FASTQ FASTQ joiner on paired end reads FASTQ splitter on joined paired end reads FASTQ to FASTA converter FASTQ Summary Statistics by column Filter FASTQ reads by quality score and length FASTQ Trimmer by column Manipulate FASTQ reads on various attributes Boxplot of quality statistics (Generic, with outliers)
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
#Dan Blankenberg
|
|
import transform
|
|
import string
|
|
from copy import deepcopy
|
|
|
|
class SequencingRead( object ):
|
|
color_space_converter = transform.ColorSpaceConverter()
|
|
valid_sequence_list = string.letters
|
|
def __init__( self ):
|
|
self.identifier = None
|
|
self.sequence = '' #holds raw sequence string: no whitespace
|
|
self.description = None
|
|
self.quality = '' #holds raw quality string: no whitespace, unless this contains decimal scores
|
|
def __len__( self ):
|
|
return len( self.sequence )
|
|
def __str__( self ):
|
|
return "%s\n%s\n%s\n%s\n" % ( self.identifier, self.sequence, self.description, self.quality )
|
|
def append_sequence( self, sequence ):
|
|
self.sequence += sequence.rstrip( '\n\r' )
|
|
def append_quality( self, quality ):
|
|
self.quality += quality.rstrip( '\n\r' )
|
|
def is_DNA( self ):
|
|
return 'u' not in self.sequence.lower()
|
|
def clone( self ):
|
|
return deepcopy( self )
|
|
def reverse( self, clone = True ):
|
|
if clone:
|
|
rval = self.clone()
|
|
else:
|
|
rval = self
|
|
rval.sequence = transform.reverse( self.sequence )
|
|
rval.quality = rval.quality[::-1]
|
|
return rval
|
|
def complement( self, clone = True ):
|
|
if clone:
|
|
rval = self.clone()
|
|
else:
|
|
rval = self
|
|
if rval.is_DNA():
|
|
rval.sequence = transform.DNA_complement( rval.sequence )
|
|
else:
|
|
rval.sequence = transform.RNA_complement( rval.sequence )
|
|
return rval
|
|
def reverse_complement( self, clone = True ):
|
|
#need to reverse first, then complement
|
|
rval = self.reverse( clone = clone )
|
|
return rval.complement( clone = False ) #already working with a clone if requested
|
|
def sequence_as_DNA( self, clone = True ):
|
|
if clone:
|
|
rval = self.clone()
|
|
else:
|
|
rval = self
|
|
rval.sequence = transform.to_DNA( rval.sequence )
|
|
return rval
|
|
def sequence_as_RNA( self, clone = True ):
|
|
if clone:
|
|
rval = self.clone()
|
|
else:
|
|
rval = self
|
|
rval.sequence = transform.to_RNA( rval.sequence )
|
|
return rval
|