mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Replacing \"qual\" datatype with 3 new datatypes: qualsolid, qual454 and qualsolexa.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
</datatype>
|
||||
<datatype extension="fastqsolexa" type="galaxy.datatypes.sequence:FastqSolexa" display_in_upload="true">
|
||||
<converter file="fastqsolexa_to_fasta_converter.xml" target_datatype="fasta"/>
|
||||
<converter file="fastqsolexa_to_qual_converter.xml" target_datatype="qual"/>
|
||||
<converter file="fastqsolexa_to_qual_converter.xml" target_datatype="qualsolexa"/>
|
||||
</datatype>
|
||||
<datatype extension="genetrack" type="galaxy.datatypes.tracks:GeneTrack"/>
|
||||
<datatype extension="gff" type="galaxy.datatypes.interval:Gff" display_in_upload="true">
|
||||
@@ -42,7 +42,9 @@
|
||||
</datatype>
|
||||
<datatype extension="pdf" type="galaxy.datatypes.images:Image" mimetype="application/pdf"/>
|
||||
<datatype extension="png" type="galaxy.datatypes.images:Image" mimetype="image/png"/>
|
||||
<datatype extension="qual" type="galaxy.datatypes.qualityscore:QualityScore" display_in_upload="true"/>
|
||||
<datatype extension="qualsolexa" type="galaxy.datatypes.qualityscore:QualityScoreSolexa" display_in_upload="true"/>
|
||||
<datatype extension="qualsolid" type="galaxy.datatypes.qualityscore:QualityScoreSOLiD" display_in_upload="true"/>
|
||||
<datatype extension="qual454" type="galaxy.datatypes.qualityscore:QualityScore454" display_in_upload="true"/>
|
||||
<datatype extension="scf" type="galaxy.datatypes.images:Scf" mimetype="application/octet-stream" display_in_upload="true"/>
|
||||
<datatype extension="taxonomy" type="galaxy.datatypes.tabular:Taxonomy" display_in_upload="true"/>
|
||||
<datatype extension="tabular" type="galaxy.datatypes.tabular:Tabular" display_in_upload="true"/>
|
||||
@@ -186,7 +188,9 @@
|
||||
<sniffer type="galaxy.datatypes.sequence:Maf"/>
|
||||
<sniffer type="galaxy.datatypes.sequence:Lav"/>
|
||||
<sniffer type="galaxy.datatypes.sequence:csFasta"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScore"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScoreSolexa"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScoreSOLiD"/>
|
||||
<sniffer type="galaxy.datatypes.qualityscore:QualityScore454"/>
|
||||
<sniffer type="galaxy.datatypes.sequence:Fasta"/>
|
||||
<sniffer type="galaxy.datatypes.sequence:FastqSolexa"/>
|
||||
<sniffer type="galaxy.datatypes.interval:Wiggle"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<param format="fastqsolexa" name="input1" type="data" label="Choose Fastqsolexa file"/>
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data format="qual" name="output1" />
|
||||
<data format="qualsolexa" name="output1" />
|
||||
</outputs>
|
||||
<help>
|
||||
</help>
|
||||
|
||||
@@ -9,11 +9,11 @@ from galaxy import util
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
class QualityScore ( data.Text ):
|
||||
class QualityScoreSOLiD ( data.Text ):
|
||||
"""
|
||||
until we know more about quality score formats
|
||||
"""
|
||||
file_ext = "qual"
|
||||
file_ext = "qualsolid"
|
||||
|
||||
def set_peek( self, dataset, line_count=None ):
|
||||
if not dataset.dataset.purged:
|
||||
@@ -21,7 +21,7 @@ class QualityScore ( data.Text ):
|
||||
if line_count is None:
|
||||
dataset.blurb = data.nice_size( dataset.get_size() )
|
||||
else:
|
||||
dataset.blurb = "%s lines, Quality score file" % util.commaify( str( line_count ) )
|
||||
dataset.blurb = "%s lines, SOLiD Quality score file" % util.commaify( str( line_count ) )
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
@@ -30,15 +30,80 @@ class QualityScore ( data.Text ):
|
||||
try:
|
||||
return dataset.peek
|
||||
except:
|
||||
return "Quality score file (%s)" % ( data.nice_size( dataset.get_size() ) )
|
||||
return "SOLiD Quality score file (%s)" % ( data.nice_size( dataset.get_size() ) )
|
||||
|
||||
def sniff( self, filename ):
|
||||
"""
|
||||
>>> fname = get_test_fname( 'sequence.fasta' )
|
||||
>>> QualityScore().sniff( fname )
|
||||
>>> QualityScoreSOLiD().sniff( fname )
|
||||
False
|
||||
>>> fname = get_test_fname( 'sequence.qual' )
|
||||
>>> QualityScore().sniff( fname )
|
||||
>>> fname = get_test_fname( 'sequence.qualsolid' )
|
||||
>>> QualityScoreSOLiD().sniff( fname )
|
||||
True
|
||||
"""
|
||||
try:
|
||||
fh = open( filename )
|
||||
readlen = None
|
||||
goodblock = 0
|
||||
while True:
|
||||
line = fh.readline()
|
||||
if not line:
|
||||
if goodblock > 0:
|
||||
return True
|
||||
else:
|
||||
break #EOF
|
||||
line = line.strip()
|
||||
if line and not line.startswith( '#' ): #first non-empty non-comment line
|
||||
if line.startswith( '>' ):
|
||||
line = fh.readline().strip()
|
||||
if line == '' or line.startswith( '>' ):
|
||||
break
|
||||
try:
|
||||
[ int( x ) for x in line.split() ]
|
||||
if not(readlen):
|
||||
readlen = len(line.split())
|
||||
assert len(line.split()) == readlen #SOLiD reads should be of the same length
|
||||
except:
|
||||
break
|
||||
goodblock += 1
|
||||
if goodblock > 10:
|
||||
return True
|
||||
else:
|
||||
break #we found a non-empty line, but it's not a header
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
class QualityScore454 ( data.Text ):
|
||||
"""
|
||||
until we know more about quality score formats
|
||||
"""
|
||||
file_ext = "qual454"
|
||||
|
||||
def set_peek( self, dataset, line_count=None ):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = data.get_file_peek( dataset.file_name )
|
||||
if line_count is None:
|
||||
dataset.blurb = data.nice_size( dataset.get_size() )
|
||||
else:
|
||||
dataset.blurb = "%s lines, 454 Quality score file" % util.commaify( str( line_count ) )
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
def display_peek(self, dataset):
|
||||
try:
|
||||
return dataset.peek
|
||||
except:
|
||||
return "454 Quality score file (%s)" % ( data.nice_size( dataset.get_size() ) )
|
||||
|
||||
def sniff( self, filename ):
|
||||
"""
|
||||
>>> fname = get_test_fname( 'sequence.fasta' )
|
||||
>>> QualityScore454().sniff( fname )
|
||||
False
|
||||
>>> fname = get_test_fname( 'sequence.qual454' )
|
||||
>>> QualityScore454().sniff( fname )
|
||||
True
|
||||
"""
|
||||
try:
|
||||
@@ -63,3 +128,59 @@ class QualityScore ( data.Text ):
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
class QualityScoreSolexa ( data.Text ):
|
||||
"""
|
||||
until we know more about quality score formats
|
||||
"""
|
||||
file_ext = "qualsolexa"
|
||||
|
||||
def set_peek( self, dataset, line_count=None ):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = data.get_file_peek( dataset.file_name )
|
||||
if line_count is None:
|
||||
dataset.blurb = data.nice_size( dataset.get_size() )
|
||||
else:
|
||||
dataset.blurb = "%s lines, Solexa Quality score file" % util.commaify( str( line_count ) )
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disk'
|
||||
|
||||
def display_peek(self, dataset):
|
||||
try:
|
||||
return dataset.peek
|
||||
except:
|
||||
return "Solexa Quality score file (%s)" % ( data.nice_size( dataset.get_size() ) )
|
||||
|
||||
def sniff( self, filename ):
|
||||
"""
|
||||
>>> fname = get_test_fname( 'sequence.fasta' )
|
||||
>>> QualityScoreSolexa().sniff( fname )
|
||||
False
|
||||
>>> fname = get_test_fname( 'sequence.qualsolexa' )
|
||||
>>> QualityScoreSolexa().sniff( fname )
|
||||
True
|
||||
"""
|
||||
try:
|
||||
fh = open( filename )
|
||||
readlen = None
|
||||
while True:
|
||||
line = fh.readline()
|
||||
if not line:
|
||||
break #EOF
|
||||
line = line.strip()
|
||||
if line and not line.startswith( '#' ):
|
||||
if len(line.split('\t')) > 1:
|
||||
break
|
||||
try:
|
||||
[ int( x ) for x in line.split() ]
|
||||
if not(readlen):
|
||||
readlen = len(line.split())
|
||||
assert len(line.split()) == readlen #Solexa reads should be of the same length
|
||||
except:
|
||||
break
|
||||
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
|
||||
@@ -116,7 +116,9 @@ class Registry( object ):
|
||||
'laj' : images.Laj(),
|
||||
'lav' : sequence.Lav(),
|
||||
'maf' : sequence.Maf(),
|
||||
'qual' : qualityscore.QualityScore(),
|
||||
'qualsolid' : qualityscore.QualityScoreSOLiD(),
|
||||
'qualsolexa' : qualityscore.QualityScoreSolexa(),
|
||||
'qual454' : qualityscore.QualityScore454(),
|
||||
'scf' : images.Scf(),
|
||||
'tabular' : tabular.Tabular(),
|
||||
'taxonomy' : tabular.Taxonomy(),
|
||||
@@ -140,7 +142,9 @@ class Registry( object ):
|
||||
'laj' : 'text/plain',
|
||||
'lav' : 'text/plain',
|
||||
'maf' : 'text/plain',
|
||||
'qual' : 'text/plain',
|
||||
'qualsolid' : 'text/plain',
|
||||
'qualsolexa' : 'text/plain',
|
||||
'qual454' : 'text/plain',
|
||||
'scf' : 'application/octet-stream',
|
||||
'tabular' : 'text/plain',
|
||||
'taxonomy' : 'text/plain',
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
from sqlalchemy import *
|
||||
from sqlalchemy.orm import *
|
||||
from migrate import *
|
||||
import sys, logging
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
log.setLevel(logging.DEBUG)
|
||||
handler = logging.StreamHandler( sys.stdout )
|
||||
format = "%(name)s %(levelname)s %(asctime)s %(message)s"
|
||||
formatter = logging.Formatter( format )
|
||||
handler.setFormatter( formatter )
|
||||
log.addHandler( handler )
|
||||
|
||||
metadata = MetaData( migrate_engine )
|
||||
db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, transactional=False ) )
|
||||
HistoryDatasetAssociation_table = Table( "history_dataset_association", metadata, autoload=True )
|
||||
|
||||
def upgrade():
|
||||
# Load existing tables
|
||||
metadata.reflect()
|
||||
# Add 2 indexes to the galaxy_user table
|
||||
i = Index( 'ix_hda_extension', HistoryDatasetAssociation_table.c.extension )
|
||||
try:
|
||||
i.create()
|
||||
except Exception, e:
|
||||
log.debug( "Adding index 'ix_hda_extension' to history_dataset_association table failed: %s" % ( str( e ) ) )
|
||||
|
||||
# Set the default data in the galaxy_user table, but only for null values
|
||||
cmd = "UPDATE history_dataset_association SET extension = 'qual454' WHERE extension = 'qual' and peek like \'>%%\'"
|
||||
try:
|
||||
db_session.execute( cmd )
|
||||
except Exception, e:
|
||||
log.debug( "Resetting extension qual to qual454 in history_dataset_association failed: %s" % ( str( e ) ) )
|
||||
cmd = "UPDATE history_dataset_association SET extension = 'qualsolexa' WHERE extension = 'qual' and peek not like \'>%%\'"
|
||||
try:
|
||||
db_session.execute( cmd )
|
||||
except Exception, e:
|
||||
log.debug( "Resetting extension qual to qualsolexa in history_dataset_association failed: %s" % ( str( e ) ) )
|
||||
# Add 1 index to the history_dataset_association table
|
||||
try:
|
||||
i.drop()
|
||||
except Exception, e:
|
||||
log.debug( "Dropping index 'ix_hda_extension' to history_dataset_association table failed: %s" % ( str( e ) ) )
|
||||
|
||||
|
||||
def downgrade():
|
||||
pass
|
||||
@@ -6,7 +6,7 @@
|
||||
</inputs>
|
||||
<outputs>
|
||||
<data name="output1" format="fasta"/>
|
||||
<data name="output2" format="qual"/>
|
||||
<data name="output2" format="qualsolexa"/>
|
||||
</outputs>
|
||||
<tests>
|
||||
<!-- NOTE: this tool generates 2 output files, but our functional tests currently only handle the last one generated -->
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</options>
|
||||
</param>
|
||||
<param name="input_seq" type="data" format="fasta" label="Sequence file"/>
|
||||
<param name="input_score" type="data" format="qual" label="Quality score file"/>
|
||||
<param name="input_score" type="data" format="qualsolexa" label="Quality score file"/>
|
||||
<param name="high_score" type="float" size="15" value="40" label="Minimum score for high-quality base (-q)"/>
|
||||
<param name="high_len" type="integer" size="15" value="36" label="Minimal high-quality bases (-M)"/>
|
||||
<param name="align_len" type="integer" size="15" value="11" label="Minimal length of a hit (-h)" help="seed"/>
|
||||
@@ -46,7 +46,7 @@
|
||||
<test>
|
||||
<param name="database" value="/depot/data2/galaxy/faseq/test" />
|
||||
<param name="input_seq" value="rmapq_wrapper_test1.fasta" ftype="fasta"/>
|
||||
<param name="input_score" value="rmapq_wrapper_test1.qual" ftype="qual" />
|
||||
<param name="input_score" value="rmapq_wrapper_test1.qual" ftype="qualsolexa" />
|
||||
<param name="high_score" value="40" />
|
||||
<param name="high_len" value="36" />
|
||||
<param name="read_len" value="36" />
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<inputs>
|
||||
<page>
|
||||
<param name="input1" type="data" format="qual,txtseq.zip" label="Quality score file" help="No dataset? Read tip below"/>
|
||||
<param name="input1" type="data" format="qualsolexa,qual454,txtseq.zip" label="Quality score file" help="No dataset? Read tip below"/>
|
||||
<param name="input2" type="integer" size="5" value="20" label="Quality score threshold" />
|
||||
</page>
|
||||
</inputs>
|
||||
@@ -17,12 +17,12 @@
|
||||
</requirements>
|
||||
<tests>
|
||||
<test>
|
||||
<param name="input1" value="solexa.qual" ftype="qual" />
|
||||
<param name="input1" value="solexa.qual" ftype="qualsolexa" />
|
||||
<param name="input2" value="5" />
|
||||
<output name="output1" file="solexa_high_quality_hist.pdf" ftype="pdf"/>
|
||||
</test>
|
||||
<test>
|
||||
<param name="input1" value="454.qual" ftype="qual" />
|
||||
<param name="input1" value="454.qual" ftype="qual454" />
|
||||
<param name="input2" value="5" />
|
||||
<output name="output1" file="454_high_quality_hist.pdf" ftype="pdf"/>
|
||||
</test>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<inputs>
|
||||
<page>
|
||||
<param name="input1" type="data" format="qual, txtseq.zip" label="Quality score file" help="No dataset? Read tip below"/>
|
||||
<param name="input1" type="data" format="qualsolexa, qual454, txtseq.zip" label="Quality score file" help="No dataset? Read tip below"/>
|
||||
</page>
|
||||
</inputs>
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
</requirements>
|
||||
<tests>
|
||||
<test>
|
||||
<param name="input1" value="solexa.qual" ftype="qual" />
|
||||
<param name="input1" value="solexa.qual" ftype="qualsolexa" />
|
||||
<output name="output1" file="solexaScore.png" ftype="png" />
|
||||
</test>
|
||||
<test>
|
||||
<param name="input1" value="454.qual" ftype="qual" />
|
||||
<param name="input1" value="454.qual" ftype="qual454" />
|
||||
<output name="output1" file="454Score.png" ftype="png" />
|
||||
</test>
|
||||
</tests>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<inputs>
|
||||
<page>
|
||||
<param name="input1" type="data" format="fasta,txtseq.zip" label="Reads" />
|
||||
<param name="input2" type="data" format="qual,txtseq.zip" label="Quality scores" />
|
||||
<param name="input2" type="data" format="qualsolexa,qual454,txtseq.zip" label="Quality scores" />
|
||||
<param name="trim" type="integer" size="5" value="20" label="Minimal quality score" help="bases scoring below this value will trigger splitting"/>
|
||||
<param name="length" type="integer" size="5" value="100" label="Minimal length of contiguous segment" help="report all high quality segments above this length. Setting this option to '0' will cause the program to return a single longest run of high quality bases per read" />
|
||||
<conditional name="sequencing_method_choice">
|
||||
@@ -36,7 +36,7 @@
|
||||
<test>
|
||||
<param name="sequencer" value="454" />
|
||||
<param name="input1" value="454.fasta" ftype="fasta" />
|
||||
<param name="input2" value="454.qual" ftype="qual" />
|
||||
<param name="input2" value="454.qual" ftype="qual454" />
|
||||
<param name="input3" value="no" />
|
||||
<param name="trim" value="20" />
|
||||
<param name="length" value="0" />
|
||||
@@ -45,7 +45,7 @@
|
||||
<test>
|
||||
<param name="sequencer" value="Solexa" />
|
||||
<param name="input1" value="solexa.fasta" ftype="fasta" />
|
||||
<param name="input2" value="solexa.qual" ftype="qual" />
|
||||
<param name="input2" value="solexa.qual" ftype="qualsolexa" />
|
||||
<param name="input3" value="0" />
|
||||
<param name="trim" value="20" />
|
||||
<param name="length" value="0" />
|
||||
|
||||
Reference in New Issue
Block a user