galaxy-dev
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
September 2009
- 15 participants
- 140 discussions
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/fa93a7615636
changeset: 2666:fa93a7615636
user: guru
date: Wed Sep 09 11:01:22 2009 -0400
description:
Updated manual builds list with human herpesvirus genome.
1 file(s) affected in this change:
tool-data/shared/ucsc/manual_builds.txt
diffs (8 lines):
diff -r 9bbf66f38265 -r fa93a7615636 tool-data/shared/ucsc/manual_builds.txt
--- a/tool-data/shared/ucsc/manual_builds.txt Wed Sep 09 10:08:29 2009 -0400
+++ b/tool-data/shared/ucsc/manual_builds.txt Wed Sep 09 11:01:22 2009 -0400
@@ -663,3 +663,4 @@
aeroHydr_ATCC7966 Aeromonas hydrophila subsp. hydrophila ATCC 7966 chr=4744448
baciAnth_AMES Bacillus anthracis str. Ames chr=5227293
shewOnei Shewanella oneidensis MR-1 plasmid_pMR-1=161613,chr=4969803
+15217 Human herpesvirus 1 NC_001806=152261
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/5d92863c4860
changeset: 2663:5d92863c4860
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Fri Sep 04 10:49:02 2009 -0400
description:
removing debuging statements from annotation_profiler that were never inteded to go out
1 file(s) affected in this change:
tools/annotation_profiler/annotation_profiler_for_interval.py
diffs (71 lines):
diff -r e929a2d803e4 -r 5d92863c4860 tools/annotation_profiler/annotation_profiler_for_interval.py
--- a/tools/annotation_profiler/annotation_profiler_for_interval.py Fri Sep 04 10:40:16 2009 -0400
+++ b/tools/annotation_profiler/annotation_profiler_for_interval.py Fri Sep 04 10:49:02 2009 -0400
@@ -26,8 +26,7 @@
self.filename = filename
self.length = int( self.file_size / self.fmt_size / 2 )
self._cached_ranges = [ None for i in xrange( self.length ) ]
- def __getitem__( self, i ):
- old_i = i
+ def __getitem__( self, i ):
if self._cached_ranges[i] is not None:
return self._cached_ranges[i]
if i < 0: i = self.length + i
@@ -36,14 +35,8 @@
try:
start = struct.unpack( self.fmt, self.file.read( self.fmt_size ) )[0]
end = struct.unpack( self.fmt, self.file.read( self.fmt_size ) )[0]
- except Exception, e:
- print 'filename', self.filename
- print 'len', len( self )
- print 'fmtsize', self.fmt_size
- print 'index', i
- print 'old i', old_i
- print 'offset', offset
- raise IndexError( str( e ) )
+ except Exception, e:
+ raise IndexError, e
self._cached_ranges[i] = ( start, end )
return start, end
def __len__( self ):
@@ -148,25 +141,21 @@
if chrom not in self.chromosome_coverage:
self.chromosome_coverage[chrom] = bx.bitset.BitSet( chrom_length )
- self.chromosome_coverage[chrom].set_range( region_start, region_length )
- try:
- for table_name, coverage, regions in self.coverage_reader.iter_table_coverage_regions_by_region( chrom, region_start, region_end ):
- if table_name not in self.table_coverage:
- self.table_coverage[table_name] = 0
- self.table_chromosome_size[table_name] = {}
- self.table_regions_overlaped_count[table_name] = 0
- self.interval_table_overlap_count[table_name] = 0
- self.table_chromosome_count[table_name] = {}
- if chrom not in self.table_chromosome_size[table_name]:
- self.table_chromosome_size[table_name][chrom] = self.coverage_reader._coverage[table_name][chrom]._total_coverage
- self.table_chromosome_count[table_name][chrom] = len( self.coverage_reader._coverage[table_name][chrom]._coverage )
- self.table_coverage[table_name] += coverage
- if coverage:
- self.interval_table_overlap_count[table_name] += 1
- self.table_regions_overlaped_count[table_name] += regions
- except Exception, e:
- print "chrom:%s, start:%s, end%s:." % ( chrom, start, end )
- raise e
+ self.chromosome_coverage[chrom].set_range( region_start, region_length )
+ for table_name, coverage, regions in self.coverage_reader.iter_table_coverage_regions_by_region( chrom, region_start, region_end ):
+ if table_name not in self.table_coverage:
+ self.table_coverage[table_name] = 0
+ self.table_chromosome_size[table_name] = {}
+ self.table_regions_overlaped_count[table_name] = 0
+ self.interval_table_overlap_count[table_name] = 0
+ self.table_chromosome_count[table_name] = {}
+ if chrom not in self.table_chromosome_size[table_name]:
+ self.table_chromosome_size[table_name][chrom] = self.coverage_reader._coverage[table_name][chrom]._total_coverage
+ self.table_chromosome_count[table_name][chrom] = len( self.coverage_reader._coverage[table_name][chrom]._coverage )
+ self.table_coverage[table_name] += coverage
+ if coverage:
+ self.interval_table_overlap_count[table_name] += 1
+ self.table_regions_overlaped_count[table_name] += regions
def iter_table_coverage( self ):
def get_nr_coverage():
#returns non-redundant coverage, where user's input intervals have been collapse to resolve overlaps
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/e929a2d803e4
changeset: 2662:e929a2d803e4
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Fri Sep 04 10:40:16 2009 -0400
description:
First pass at allowing MAF tools to deal with multiple occurrences of a species within a block. Tool versions have been incremented as necessary.
These changes should only affect output when an input block has a species appearing more than once, with the exception being the MAF to multiple FASTA blocks converters: the FASTA headers have been revised to included the sequence index for a species in a block as well as the block index.
A new tool "Split MAF Blocks by Species" has been added that will split MAF blocks into the complete combination of multiple blocks when a species appears more than once.
29 file(s) affected in this change:
lib/galaxy/datatypes/converters/maf_to_fasta_converter.py
lib/galaxy/datatypes/converters/maf_to_fasta_converter.xml
lib/galaxy/datatypes/converters/maf_to_interval_converter.py
lib/galaxy/datatypes/converters/maf_to_interval_converter.xml
lib/galaxy/datatypes/sequence.py
lib/galaxy/tools/util/maf_utilities.py
test-data/cf_maf2fasta_new.dat
test-data/maf_split_by_species_collapsed_out.maf
test-data/maf_split_by_species_in.maf
test-data/maf_split_by_species_not_collapsed_out.maf
tool_conf.xml.sample
tools/annotation_profiler/annotation_profiler_for_interval.py
tools/maf/genebed_maf_to_fasta.xml
tools/maf/interval2maf.py
tools/maf/interval2maf.xml
tools/maf/interval2maf_pairwise.xml
tools/maf/interval_maf_to_merged_fasta.py
tools/maf/interval_maf_to_merged_fasta.xml
tools/maf/maf_filter.py
tools/maf/maf_limit_size.py
tools/maf/maf_limit_size.xml
tools/maf/maf_limit_to_species.py
tools/maf/maf_split_by_species.py
tools/maf/maf_split_by_species.xml
tools/maf/maf_stats.py
tools/maf/maf_stats.xml
tools/maf/maf_to_fasta.xml
tools/maf/maf_to_fasta_concat.py
tools/maf/maf_to_fasta_multiple_sets.py
diffs (1927 lines):
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/datatypes/converters/maf_to_fasta_converter.py
--- a/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py Fri Sep 04 10:40:16 2009 -0400
@@ -14,12 +14,15 @@
input_name = sys.argv.pop(1)
out = open( output_name, 'w' )
count = 0
- for count, maf in enumerate( bx.align.maf.Reader( open( input_name, 'r' ) ) ):
- for c in maf.components:
- spec, chrom = bx.align.maf.src_split( c.src )
- if not spec or not chrom:
- spec = chrom = c.src
- out.write( "%s\n" % maf_utilities.get_fasta_header( c, suffix = "%s_%i" % ( spec, count ) ) )
+ for count, block in enumerate( bx.align.maf.Reader( open( input_name, 'r' ) ) ):
+ spec_counts = {}
+ for c in block.components:
+ spec, chrom = maf_utilities.src_split( c.src )
+ if spec not in spec_counts:
+ spec_counts[ spec ] = 0
+ else:
+ spec_counts[ spec ] += 1
+ out.write( "%s\n" % maf_utilities.get_fasta_header( c, { 'block_index' : count, 'species' : spec, 'sequence_index' : spec_counts[ spec ] }, suffix = "%s_%i_%i" % ( spec, count, spec_counts[ spec ] ) ) )
out.write( "%s\n" % c.text )
out.write( "\n" )
out.close()
@@ -27,3 +30,12 @@
if __name__ == "__main__": __main__()
+
+ for component in block.components:
+ spec, chrom = maf_utilities.src_split( component.src )
+ if spec not in spec_counts:
+ spec_counts[ spec ] = 0
+ else:
+ spec_counts[ spec ] += 1
+ file_out.write( "%s\n" % maf_utilities.get_fasta_header( component, { 'block_index' : block_num, 'species' : spec, 'sequence_index' : spec_counts[ spec ] }, suffix = "%s_%i_%i" % ( spec, block_num, spec_counts[ spec ] ) ) )
+ file_out.write( "%s\n" % component.text )
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/datatypes/converters/maf_to_fasta_converter.xml
--- a/lib/galaxy/datatypes/converters/maf_to_fasta_converter.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/datatypes/converters/maf_to_fasta_converter.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="CONVERTER_maf_to_fasta_0" name="Convert MAF to Fasta">
+<tool id="CONVERTER_maf_to_fasta_0" name="Convert MAF to Fasta" version="1.0.1">
<!-- <description>__NOT_USED_CURRENTLY_FOR_CONVERTERS__</description> -->
<command interpreter="python">maf_to_fasta_converter.py $output1 $input1</command>
<inputs>
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/datatypes/converters/maf_to_interval_converter.py
--- a/lib/galaxy/datatypes/converters/maf_to_interval_converter.py Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/datatypes/converters/maf_to_interval_converter.py Fri Sep 04 10:40:16 2009 -0400
@@ -4,7 +4,8 @@
import sys
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
-import bx.align.maf
+import bx.align.maf
+from galaxy.tools.util import maf_utilities
assert sys.version_info[:2] >= ( 2, 4 )
@@ -17,15 +18,15 @@
#write interval header line
out.write( "#chrom\tstart\tend\tstrand\n" )
try:
- for maf in bx.align.maf.Reader( open(input_name, 'r') ):
- c = maf.get_component_by_src_start(species)
- if c is not None:
- out.write( "%s\t%i\t%i\t%s\n" % (bx.align.src_split(c.src)[-1], c.get_forward_strand_start(), c.get_forward_strand_end(), c.strand) )
- count += 1
+ for block in bx.align.maf.Reader( open( input_name, 'r' ) ):
+ for c in maf_utilities.iter_components_by_src_start( block, species ):
+ if c is not None:
+ out.write( "%s\t%i\t%i\t%s\n" % ( bx.align.src_split( c.src )[-1], c.get_forward_strand_start(), c.get_forward_strand_end(), c.strand ) )
+ count += 1
except Exception, e:
print >> sys.stderr, "There was a problem processing your input: %s" % e
out.close()
- print "%i MAF blocks converted to Genomic Intervals for species %s." % (count, species)
+ print "%i MAF blocks converted to Genomic Intervals for species %s." % ( count, species )
if __name__ == "__main__": __main__()
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/datatypes/converters/maf_to_interval_converter.xml
--- a/lib/galaxy/datatypes/converters/maf_to_interval_converter.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/datatypes/converters/maf_to_interval_converter.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="CONVERTER_maf_to_interval_0" name="Convert MAF to Genomic Intervals">
+<tool id="CONVERTER_maf_to_interval_0" name="Convert MAF to Genomic Intervals" version="1.0.1">
<!-- <description>__NOT_USED_CURRENTLY_FOR_CONVERTERS__</description> -->
<command interpreter="python">maf_to_interval_converter.py $output1 $input1 ${input1.metadata.dbkey}</command>
<inputs>
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/datatypes/sequence.py
--- a/lib/galaxy/datatypes/sequence.py Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/datatypes/sequence.py Fri Sep 04 10:40:16 2009 -0400
@@ -22,7 +22,7 @@
pass
class Alignment( Sequence ):
- """Class describing an alignmnet"""
+ """Class describing an alignment"""
"""Add metadata elements"""
MetadataElement( name="species", desc="Species", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None )
@@ -316,6 +316,78 @@
import bx.align.maf
except:
pass
+#trying to import maf_utilities here throws an ImportError due to a circular import between jobs and tools:
+#from galaxy.tools.util.maf_utilities import build_maf_index_species_chromosomes
+#Traceback (most recent call last):
+# File "./scripts/paster.py", line 27, in <module>
+# command.run()
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/script/command.py", line 78, in run
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/script/command.py", line 117, in invoke
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/script/command.py", line 212, in run
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/script/serve.py", line 227, in command
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/script/serve.py", line 250, in loadapp
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 193, in loadapp
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 213, in loadobj
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 237, in loadcontext
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 267, in _loadconfig
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 397, in get_context
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 439, in _context_from_explicit
+# File "build/bdist.solaris-2.11-i86pc/egg/paste/deploy/loadwsgi.py", line 18, in import_string
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/pkg_resources.py", line 1912, in load
+# entry = __import__(self.module_name, globals(),globals(), ['__name__'])
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/web/buildapp.py", line 18, in <module>
+# from galaxy import config, jobs, util, tools
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/jobs/__init__.py", line 3, in <module>
+# from galaxy import util, model
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/model/__init__.py", line 13, in <module>
+# import galaxy.datatypes.registry
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/datatypes/registry.py", line 6, in <module>
+# import data, tabular, interval, images, sequence, qualityscore, genetics, xml, coverage, tracks, chrominfo
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/datatypes/sequence.py", line 344, in <module>
+# from galaxy.tools.util.maf_utilities import build_maf_index_species_chromosomes
+# File "/afs/bx.psu.edu/home/dan/galaxy/central/lib/galaxy/tools/__init__.py", line 15, in <module>
+# from galaxy import util, jobs, model
+#ImportError: cannot import name jobs
+#so we'll copy and paste for now...terribly icky
+#*** ANYCHANGE TO THIS METHOD HERE OR IN maf_utilities MUST BE PROPAGATED ***
+def COPIED_build_maf_index_species_chromosomes( filename, index_species = None ):
+ species = []
+ species_chromosomes = {}
+ indexes = bx.interval_index_file.Indexes()
+ try:
+ maf_reader = bx.align.maf.Reader( open( filename ) )
+ while True:
+ pos = maf_reader.file.tell()
+ block = maf_reader.next()
+ if block is None: break
+ for c in block.components:
+ spec = c.src
+ chrom = None
+ if "." in spec:
+ spec, chrom = spec.split( ".", 1 )
+ if spec not in species:
+ species.append( spec )
+ species_chromosomes[spec] = []
+ if chrom and chrom not in species_chromosomes[spec]:
+ species_chromosomes[spec].append( chrom )
+ if index_species is None or spec in index_species:
+ forward_strand_start = c.forward_strand_start
+ forward_strand_end = c.forward_strand_end
+ try:
+ forward_strand_start = int( forward_strand_start )
+ forward_strand_end = int( forward_strand_end )
+ except ValueError:
+ continue #start and end are not integers, can't add component to index, goto next component
+ #this likely only occurs when parse_e_rows is True?
+ #could a species exist as only e rows? should the
+ if forward_strand_end > forward_strand_start:
+ #require positive length; i.e. certain lines have start = end = 0 and cannot be indexed
+ indexes.add( c.src, forward_strand_start, forward_strand_end, pos, max=c.src_size )
+ except Exception, e:
+ #most likely a bad MAF
+ log.debug( 'Building MAF index on %s failed: %s' % ( filename, e ) )
+ return ( None, [], {} )
+ return ( indexes, species, species_chromosomes )
class Maf( Alignment ):
"""Class describing a Maf alignment"""
@@ -333,38 +405,8 @@
Parses and sets species, chromosomes, index from MAF file.
"""
#these metadata values are not accessable by users, always overwrite
+ indexes, species, species_chromosomes = COPIED_build_maf_index_species_chromosomes( dataset.file_name )
- try:
- maf_reader = bx.align.maf.Reader( open( dataset.file_name ) )
- except:
- return #not a maf file
- species = []
- species_chromosomes = {}
- indexes = bx.interval_index_file.Indexes()
- while True:
- pos = maf_reader.file.tell()
- block = maf_reader.next()
- if block is None: break
- for c in block.components:
- spec = c.src
- chrom = None
- if "." in spec:
- spec, chrom = spec.split( ".", 1 )
- if spec not in species:
- species.append(spec)
- species_chromosomes[spec] = []
- if chrom and chrom not in species_chromosomes[spec]:
- species_chromosomes[spec].append( chrom )
- forward_strand_start = c.forward_strand_start
- forward_strand_end = c.forward_strand_end
- try:
- forward_strand_start = int( forward_strand_start )
- forward_strand_end = int( forward_strand_end )
- except ValueError:
- continue #start and end are not integers, can't add component to index, goto next component
- if forward_strand_end > forward_strand_start:
- #require positive length; i.e. certain lines have start = end = 0 and cannot be indexed
- indexes.add( c.src, forward_strand_start, forward_strand_end, pos, max=c.src_size )
dataset.metadata.species = species
#only overwrite the contents if our newly determined chromosomes don't match stored
chrom_file = dataset.metadata.species_chromosomes
diff -r 99dcba7af5b6 -r e929a2d803e4 lib/galaxy/tools/util/maf_utilities.py
--- a/lib/galaxy/tools/util/maf_utilities.py Fri Sep 04 10:31:23 2009 -0400
+++ b/lib/galaxy/tools/util/maf_utilities.py Fri Sep 04 10:40:16 2009 -0400
@@ -7,10 +7,41 @@
import bx.align.maf
import bx.intervals
import bx.interval_index_file
-import sys, os, string, tempfile
+import sys, os, string, tempfile
+import logging
+from copy import deepcopy
assert sys.version_info[:2] >= ( 2, 4 )
-
+
+log = logging.getLogger(__name__)
+
+
+GAP_CHARS = [ '-' ]
+SRC_SPLIT_CHAR = '.'
+
+def src_split( src ):
+ spec, chrom = bx.align.maf.src_split( src )
+ if None in [ spec, chrom ]:
+ spec = chrom = src
+ return spec, chrom
+
+def src_merge( spec, chrom, contig = None ):
+ if None in [ spec, chrom ]:
+ spec = chrom = spec or chrom
+ return bx.align.maf.src_merge( spec, chrom, contig )
+
+def get_species_in_block( block ):
+ species = []
+ for c in block.components:
+ spec, chrom = src_split( c.src )
+ if spec not in species:
+ species.append( spec )
+ return species
+
+def tool_fail( msg = "Unknown Error" ):
+ print >> sys.stderr, "Fatal Error: %s" % msg
+ sys.exit()
+
#an object corresponding to a reference layered alignment
class RegionAlignment( object ):
@@ -153,69 +184,187 @@
except:
return build_maf_index( maf_file, species = species )
+#*** ANYCHANGE TO THIS METHOD HERE OR IN galaxy.datatypes.sequences MUST BE PROPAGATED ***
+def build_maf_index_species_chromosomes( filename, index_species = None ):
+ species = []
+ species_chromosomes = {}
+ indexes = bx.interval_index_file.Indexes()
+ try:
+ maf_reader = bx.align.maf.Reader( open( filename ) )
+ while True:
+ pos = maf_reader.file.tell()
+ block = maf_reader.next()
+ if block is None: break
+ for c in block.components:
+ spec = c.src
+ chrom = None
+ if "." in spec:
+ spec, chrom = spec.split( ".", 1 )
+ if spec not in species:
+ species.append( spec )
+ species_chromosomes[spec] = []
+ if chrom and chrom not in species_chromosomes[spec]:
+ species_chromosomes[spec].append( chrom )
+ if index_species is None or spec in index_species:
+ forward_strand_start = c.forward_strand_start
+ forward_strand_end = c.forward_strand_end
+ try:
+ forward_strand_start = int( forward_strand_start )
+ forward_strand_end = int( forward_strand_end )
+ except ValueError:
+ continue #start and end are not integers, can't add component to index, goto next component
+ #this likely only occurs when parse_e_rows is True?
+ #could a species exist as only e rows? should the
+ if forward_strand_end > forward_strand_start:
+ #require positive length; i.e. certain lines have start = end = 0 and cannot be indexed
+ indexes.add( c.src, forward_strand_start, forward_strand_end, pos, max=c.src_size )
+ except Exception, e:
+ #most likely a bad MAF
+ log.debug( 'Building MAF index on %s failed: %s' % ( filename, e ) )
+ return ( None, [], {} )
+ return ( indexes, species, species_chromosomes )
#builds and returns ( index, index_filename ) for specified maf_file
def build_maf_index( maf_file, species = None ):
- indexes = bx.interval_index_file.Indexes()
- try:
- maf_reader = bx.align.maf.Reader( open( maf_file ) )
- # Need to be a bit tricky in our iteration here to get the 'tells' right
- while True:
- pos = maf_reader.file.tell()
- block = maf_reader.next()
- if block is None: break
- for c in block.components:
- if species is not None and c.src.split( "." )[0] not in species:
- continue
- indexes.add( c.src, c.forward_strand_start, c.forward_strand_end, pos )
+ indexes, found_species, species_chromosomes = build_maf_index_species_chromosomes( maf_file, species )
+ if indexes is not None:
fd, index_filename = tempfile.mkstemp()
out = os.fdopen( fd, 'w' )
indexes.write( out )
out.close()
- return ( bx.align.maf.Indexed( maf_file, index_filename = index_filename, keep_open = True, parse_e_rows = False ), index_filename )
- except:
- return ( None, None )
-
-def chop_block_by_region( block, src, region, species = None, mincols = 0, force_strand = None ):
- ref = block.get_component_by_src( src )
- #We want our block coordinates to be from positive strand
- if ref.strand == "-":
- block = block.reverse_complement()
- ref = block.get_component_by_src( src )
+ return ( bx.align.maf.Indexed( maf_file, index_filename = index_filename, keep_open = True, parse_e_rows = False ), index_filename )
+ return ( None, None )
+
+def component_overlaps_region( c, region ):
+ if c is None: return False
+ start, end = c.get_forward_strand_start(), c.get_forward_strand_end()
+ if region.start >= end or region.end <= start:
+ return False
+ return True
+
+def chop_block_by_region( block, src, region, species = None, mincols = 0 ):
+ # This chopping method was designed to maintain consistency with how start/end padding gaps have been working in Galaxy thus far:
+ # behavior as seen when forcing blocks to be '+' relative to src sequence (ref) and using block.slice_by_component( ref, slice_start, slice_end )
+ # whether-or-not this is the 'correct' behavior is questionable, but this will at least maintain consistency
+ # comments welcome
+ slice_start = block.text_size #max for the min()
+ slice_end = 0 #min for the max()
+ old_score = block.score #save old score for later use
+ # We no longer assume only one occurance of src per block, so we need to check them all
+ for c in iter_components_by_src( block, src ):
+ if component_overlaps_region( c, region ):
+ if c.text is not None:
+ rev_strand = False
+ if c.strand == "-":
+ #We want our coord_to_col coordinates to be returned from positive stranded component
+ rev_strand = True
+ c = c.reverse_complement()
+ start = max( region.start, c.start )
+ end = min( region.end, c.end )
+ start = c.coord_to_col( start )
+ end = c.coord_to_col( end )
+ if rev_strand:
+ #need to orient slice coordinates to the original block direction
+ slice_len = end - start
+ end = len( c.text ) - start
+ start = end - slice_len
+ slice_start = min( start, slice_start )
+ slice_end = max( end, slice_end )
+
+ if slice_start < slice_end:
+ block = block.slice( slice_start, slice_end )
+ if block.text_size > mincols:
+ # restore old score, may not be accurate, but it is better than 0 for everything?
+ block.score = old_score
+ if species is not None:
+ block = block.limit_to_species( species )
+ block.remove_all_gap_columns()
+ return block
+ return None
- #save old score here for later use
- old_score = block.score
- slice_start = max( region.start, ref.start )
- slice_end = min( region.end, ref.end )
-
- #slice block by reference species at determined limits
- block = block.slice_by_component( ref, slice_start, slice_end )
-
- if block.text_size > mincols:
- if ( force_strand is None and region.strand != ref.strand ) or ( force_strand is not None and force_strand != ref.strand ):
- block = block.reverse_complement()
- # restore old score, may not be accurate, but it is better than 0 for everything
- block.score = old_score
- if species is not None:
- block = block.limit_to_species( species )
- block.remove_all_gap_columns()
- return block
- return None
+def orient_block_by_region( block, src, region, force_strand = None ):
+ #loop through components matching src,
+ #make sure each of these components overlap region
+ #cache strand for each of overlaping regions
+ #if force_strand / region.strand not in strand cache, reverse complement
+ ### we could have 2 sequences with same src, overlapping region, on different strands, this would cause no reverse_complementing
+ strands = [ c.strand for c in iter_components_by_src( block, src ) if component_overlaps_region( c, region ) ]
+ if strands and ( force_strand is None and region.strand not in strands ) or ( force_strand is not None and force_strand not in strands ):
+ block = block.reverse_complement()
+ return block
+
+def get_oriented_chopped_blocks_for_region( index, src, region, species = None, mincols = 0, force_strand = None ):
+ for block, idx, offset in get_oriented_chopped_blocks_with_index_offset_for_region( index, src, region, species, mincols, force_strand ):
+ yield block
+def get_oriented_chopped_blocks_with_index_offset_for_region( index, src, region, species = None, mincols = 0, force_strand = None ):
+ for block, idx, offset in get_chopped_blocks_with_index_offset_for_region( index, src, region, species, mincols ):
+ yield orient_block_by_region( block, src, region, force_strand ), idx, offset
+
+#split a block with multiple occurances of src into one block per src
+def iter_blocks_split_by_src( block, src ):
+ for src_c in iter_components_by_src( block, src ):
+ new_block = bx.align.Alignment( score=block.score, attributes=deepcopy( block.attributes ) )
+ new_block.text_size = block.text_size
+ for c in block.components:
+ if c == src_c or c.src != src:
+ new_block.add_component( deepcopy( c ) ) #components have reference to alignment, dont want to loose reference to original alignment block in original components
+ yield new_block
+
+#split a block into multiple blocks with all combinations of a species appearing only once per block
+def iter_blocks_split_by_species( block, species = None ):
+ def __split_components_by_species( components_by_species, new_block ):
+ if components_by_species:
+ #more species with components to add to this block
+ components_by_species = deepcopy( components_by_species )
+ spec_comps = components_by_species.pop( 0 )
+ for c in spec_comps:
+ newer_block = deepcopy( new_block )
+ newer_block.add_component( deepcopy( c ) )
+ for value in __split_components_by_species( components_by_species, newer_block ):
+ yield value
+ else:
+ #no more components to add, yield this block
+ yield new_block
+
+ #divide components by species
+ spec_dict = {}
+ if not species:
+ species = []
+ for c in block.components:
+ spec, chrom = src_split( c.src )
+ if spec not in spec_dict:
+ spec_dict[ spec ] = []
+ species.append( spec )
+ spec_dict[ spec ].append( c )
+ else:
+ for spec in species:
+ spec_dict[ spec ] = []
+ for c in iter_components_by_src_start( block, spec ):
+ spec_dict[ spec ].append( c )
+
+ empty_block = bx.align.Alignment( score=block.score, attributes=deepcopy( block.attributes ) ) #should we copy attributes?
+ empty_block.text_size = block.text_size
+ #call recursive function to split into each combo of spec/blocks
+ for value in __split_components_by_species( spec_dict.values(), empty_block ):
+ sort_block_components_by_block( value, block ) #restore original component order
+ yield value
+
+
#generator yielding only chopped and valid blocks for a specified region
-def get_chopped_blocks_for_region( index, src, region, species = None, mincols = 0, force_strand = None ):
- for block, idx, offset in get_chopped_blocks_with_index_offset_for_region( index, src, region, species, mincols, force_strand ):
+def get_chopped_blocks_for_region( index, src, region, species = None, mincols = 0 ):
+ for block, idx, offset in get_chopped_blocks_with_index_offset_for_region( index, src, region, species, mincols ):
yield block
-def get_chopped_blocks_with_index_offset_for_region( index, src, region, species = None, mincols = 0, force_strand = None ):
+def get_chopped_blocks_with_index_offset_for_region( index, src, region, species = None, mincols = 0 ):
for block, idx, offset in index.get_as_iterator_with_index_and_offset( src, region.start, region.end ):
- block = chop_block_by_region( block, src, region, species, mincols, force_strand )
+ block = chop_block_by_region( block, src, region, species, mincols )
if block is not None:
yield block, idx, offset
#returns a filled region alignment for specified regions
-def get_region_alignment( index, primary_species, chrom, start, end, strand = '+', species = None, mincols = 0 ):
+def get_region_alignment( index, primary_species, chrom, start, end, strand = '+', species = None, mincols = 0, overwrite_with_gaps = True ):
if species is not None: alignment = RegionAlignment( end - start, species )
else: alignment = RegionAlignment( end - start, primary_species )
- return fill_region_alignment( alignment, index, primary_species, chrom, start, end, strand, species, mincols )
+ return fill_region_alignment( alignment, index, primary_species, chrom, start, end, strand, species, mincols, overwrite_with_gaps )
#reduces a block to only positions exisiting in the src provided
def reduce_block_by_primary_genome( block, species, chromosome, region_start ):
@@ -237,13 +386,11 @@
return ( start_offset, species_texts )
#fills a region alignment
-def fill_region_alignment( alignment, index, primary_species, chrom, start, end, strand = '+', species = None, mincols = 0 ):
+def fill_region_alignment( alignment, index, primary_species, chrom, start, end, strand = '+', species = None, mincols = 0, overwrite_with_gaps = True ):
region = bx.intervals.Interval( start, end )
region.chrom = chrom
region.strand = strand
primary_src = "%s.%s" % ( primary_species, chrom )
-
-
#Order blocks overlaping this position by score, lowest first
blocks = []
@@ -255,28 +402,40 @@
break
else:
blocks.append( ( score, idx, offset ) )
-
+
+ gap_chars_tuple = tuple( GAP_CHARS )
+ gap_chars_str = ''.join( GAP_CHARS )
#Loop through ordered blocks and layer by increasing score
- for block_dict in blocks:
- block = chop_block_by_region( block_dict[1].get_at_offset( block_dict[2] ), primary_src, region, species, mincols, strand )
- if block is None: continue
- start_offset, species_texts = reduce_block_by_primary_genome( block, primary_species, chrom, start )
- for spec, text in species_texts.items():
- try:
- alignment.set_range( start_offset, spec, text )
- except:
- #species/sequence for species does not exist
- pass
-
+ for block_dict in blocks:
for block in iter_blocks_split_by_species( block_dict[1].get_at_offset( block_dict[2] ) ): #need to handle each occurance of sequence in block seperately
+ if component_overlaps_region( block.get_component_by_src( primary_src ), region ):
+ block = chop_block_by_region( block, primary_src, region, species, mincols ) #chop block
+ block = orient_block_by_region( block, primary_src, region ) #orient block
+ start_offset, species_texts = reduce_block_by_primary_genome( block, primary_species, chrom, start )
+ for spec, text in species_texts.items():
+ #we should trim gaps from both sides, since these are not positions in this species genome (sequence)
+ text = text.rstrip( gap_chars_str )
+ gap_offset = 0
+ while text.startswith( gap_chars_tuple ):
+ gap_offset += 1
+ text = text[1:]
+ if not text:
+ break
+ if text:
+ if overwrite_with_gaps:
+ alignment.set_range( start_offset + gap_offset, spec, text )
+ else:
+ for i, char in enumerate( text ):
+ if char not in GAP_CHARS:
+ alignment.set_position( start_offset + gap_offset + i, spec, char )
return alignment
#returns a filled spliced region alignment for specified region with start and end lists
-def get_spliced_region_alignment( index, primary_species, chrom, starts, ends, strand = '+', species = None, mincols = 0 ):
+def get_spliced_region_alignment( index, primary_species, chrom, starts, ends, strand = '+', species = None, mincols = 0, overwrite_with_gaps = True ):
#create spliced alignment object
if species is not None: alignment = SplicedAlignment( starts, ends, species )
else: alignment = SplicedAlignment( starts, ends, [primary_species] )
for exon in alignment.exons:
- fill_region_alignment( exon, index, primary_species, chrom, exon.start, exon.end, strand, species, mincols)
+ fill_region_alignment( exon, index, primary_species, chrom, exon.start, exon.end, strand, species, mincols, overwrite_with_gaps )
return alignment
#loop through string array, only return non-commented lines
@@ -319,29 +478,36 @@
starts.append( start )
ends.append( end )
return ( starts, ends, fields )
-
-def get_species_in_maf( maf_filename ):
- try:
- species={}
-
- file_in = open( maf_filename, 'r' )
- maf_reader = maf.Reader( file_in )
-
- for i, m in enumerate( maf_reader ):
- l = m.components
- for c in l:
- spec, chrom = maf.src_split( c.src )
- if not spec or not chrom:
- spec = chrom = c.src
- species[spec] = spec
-
- file_in.close()
-
- species = species.keys()
- species.sort()
- return species
- except:
- return []
+
+def iter_components_by_src( block, src ):
+ for c in block.components:
+ if c.src == src:
+ yield c
+
+def get_components_by_src( block, src ):
+ return [ value for value in iter_components_by_src( block, src ) ]
+
+def iter_components_by_src_start( block, src ):
+ for c in block.components:
+ if c.src.startswith( src ):
+ yield c
+
+def get_components_by_src_start( block, src ):
+ return [ value for value in iter_components_by_src_start( block, src ) ]
+
+def sort_block_components_by_block( block1, block2 ):
+ #orders the components in block1 by the index of the component in block2
+ #block1 must be a subset of block2
+ #occurs in-place
+ return block1.components.sort( cmp = lambda x, y: block2.components.index( x ) - block2.components.index( y ) )
+
+def get_species_in_maf( maf_filename ):
+ species = []
+ for block in maf.Reader( open( maf_filename ) ):
+ for spec in get_species_in_block( block ):
+ if spec not in species:
+ species.append( spec )
+ return species
def parse_species_option( species ):
if species:
diff -r 99dcba7af5b6 -r e929a2d803e4 test-data/cf_maf2fasta_new.dat
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cf_maf2fasta_new.dat Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,134 @@
+>hg17.chr7(+):127471195-127471526|sequence_index=0|block_index=0|species=hg17|hg17_0_0
+gtttgccatcttttgctgctctagggaatccagcagctgtcaccatgtaaacaagcccaggctagaccaGTTACCCTCATC---ATCTTAGCTGATAGCCAGCCAGCCACCACAGGCAtgagtcaggccatattgctggacccacagaattatgagctaaataaatagtcttgggttaagccactaagttttaggcatagtgtgttatgtaTCTCACAAACATATAAGACTGTGTGTTTGTTGACTGGAGGAAGAGATGCTATAAAGACCACCTTTTAAAACTTCCCAAATACTGCCACTGATGTCCTGATGGAGG-------------------------------------------------------TATGAA---------AACATCCACTAA
+>panTro1.chr6(+):129885076-129885407|sequence_index=0|block_index=0|species=panTro1|panTro1_0_0
+gtttgccatcttttgctgctcttgggaatccagcagctgtcaccatgtaaacaagcccaggctagaccaGTTACCCTCATC---ATCTTAGCTGATAGCCAGCCAGCCACCACAGGCAtgagtcaggccatattgctggacccacagaattatgagctaaataaatagtcttgggttaagccactaagttttaggcatagtgtgttatgtaTCTCACAAACATATAAGACTGTGTGTTTGTTGACTGGAGGAAGAGATGCTATAAAGACCACCTTTTGAAACTTCCCAAATACTGCCACTGATGTCCTGATGGAGG-------------------------------------------------------TATGAA---------AACATCCACTAA
+>rheMac2.chr3(+):165787989-165788319|sequence_index=0|block_index=0|species=rheMac2|rheMac2_0_0
+gcttgccatcttttgatgctcttgggaatccagcagctgtcaccat-taaacaagcccaggctagaccaGTTACCCTCATC---ATCTTAGCTGATAGCCAGCCAGCCACCATAGGCAtgagtcaggccatagtgctggacccacagaattatgagctaaataagtagtgttgggttaagtcactaagttttaggcatagtgtgttatgtagcTCACAAACATATAAGACTGTGTGTTTTTTGACTGGAGGAAGAGATGCCATAAAGACCACCTTTTGAAACTTCTCAAATACTGCCATTGATGTGCTGATGGAGG-------------------------------------------------------TATGAA---------AACATCCACTAA
+>rn3.chr4(+):56178191-56178473|sequence_index=0|block_index=0|species=rn3|rn3_0_0
+CTTCACTCTCATTTGCTGTT----------------CTGTCACTATGGAGACAAACACAGGCTAGCCCAGTTACTATCTTGATCACAGCAGCTGT----CAGCTAGCTGCCACTCACAGGAATAAGGCCATACCATT-GATCCACTGAACCTTGATCTAGGAATTTGGC----------------------TGGGGCCAGTTTGCGGTGTCACTCATGA--CTCTAAGATTGTGTGTTTG----CTCCAGGAAGAGACGGCAAGAGGATTACCTTTAAAAGGTTCGG-AGTCTAGCTGTAGACAGCCCAATGGG---------------------------------------------------------TATAAC---------AATACTCACTAA
+>mm7.chr6(+):28984529-28984886|sequence_index=0|block_index=0|species=mm7|mm7_0_0
+CTCCACTCTCGTTTGCTGTT----------------CTGTCACCATGGAAACAAACG-AGGGTGGTCCAGTTACTATCTTG---ACTGCAGCTGG----CAGTCAGTTGCCACT--CAGGAATAAGGCTATGCCATT-GATCCACTGAACCGTGATCTGGAAACCTGGCTGTTGTTT-------CAAGCCTTGGGGCCAGTTTGCGGTGTTACTCATGA--CTCTAAGATCGTGTGCTTG----CTGCAGGAAGAGACAGCAAGGGGGTTACATTTAAAAAGCCCCC-AGTTTAGCTATAGGCAGGCCAACAGGTGTAAAAATACTCACTAGTAATGGGCTGAACTCATGGAGGTAGCATTAGTGAGACACTGTAACTGTTTTTTTAAAAATCACTAA
+
+>hg17.chr7(+):127471526-127471584|sequence_index=0|block_index=1|species=hg17|hg17_1_0
+AATTTGTGGTTTATTCATTTTTCATTATTTTGTTTAAGGAGGTCTATAGTGGAAGAGG
+>mm7.chr6(+):28984886-28984940|sequence_index=0|block_index=1|species=mm7|mm7_1_0
+----AACGTTTCATTGATTGCTCATCATTTAAAAAAAGAAATTCCTCAGTGGAAGAGG
+>rheMac2.chr3(+):165788319-165788377|sequence_index=0|block_index=1|species=rheMac2|rheMac2_1_0
+AATTTGTGGTTTATTTATTTTTCATTATTTTGTTTAAGGAGGTCTATAGTGGAAGAGG
+>panTro1.chr6(+):129885407-129885465|sequence_index=0|block_index=1|species=panTro1|panTro1_1_0
+AATTTGTGGTTTATTCGTTTTTCATTATTTTGTTTAAGGAGGTCTATAGTGGAAGAGG
+
+>hg17.chr7(+):127471584-127471688|sequence_index=0|block_index=2|species=hg17|hg17_2_0
+GAGATATTT-GGggaaatttt-gtatagactagctt--tcacgatgttagggaattattattgtgtgataatggtcttgcagttac-acagaaattcttcctta-ttttt
+>panTro1.chr6(+):129885465-129885569|sequence_index=0|block_index=2|species=panTro1|panTro1_2_0
+GAGACATTT-GGggaaatttt-gtatagactagctt--tcacgatgttagggagttattattgtgtgataatggtcttgcagttac-acagaaattcttcctta-ttttt
+>rheMac2.chr3(+):165788377-165788482|sequence_index=0|block_index=2|species=rheMac2|rheMac2_2_0
+GAGATATTT-GGggaaatttg-gtatagactagctt--tcatgatgtaagggagttatttttgtgtgataatggccctacagttac-acagaaattcttccttatttttt
+>canFam2.chr14(-):11090703-11090811|sequence_index=0|block_index=2|species=canFam2|canFam2_2_0
+gagatattt-gggggaatttgaatgtagtgttgctcttttgtgatgctaagaaattataattgtctgatgatagtctcgtggttatgggggaaatgcttcctta-ttttt
+>bosTau2.chr4(-):50243931-50244034|sequence_index=0|block_index=2|species=bosTau2|bosTau2_2_0
+-agacattg-ggtaaaattcaaatgcagactagctc----atgatgttaaagaattactcttgtgtggtaatggtcttgtgatagagatagaaatgcttcctta-ttttt
+>rn3.chr4(+):56182200-56182295|sequence_index=0|block_index=2|species=rn3|rn3_2_0
+----TATTTGGGGGAAATATG-ATGTGCA----CTT--CCATGATCTTAAAGAATTGCTACTGTTTGATAGTGATCTTATGGTTAA-ATAAAAAAAAT--CTTA-GTTGT
+>dasNov1.scaffold_256527(+):298-392|sequence_index=0|block_index=2|species=dasNov1|dasNov1_2_0
+GAGACATTT-GGAGAAATTTG-----------Aatt--tcatgatgttaaggaattacttttgtatgatgatggtcttgtggctat-gtagaatttcttccgtg-tttta
+
+>hg17.chr7(+):127471688-127471871|sequence_index=0|block_index=3|species=hg17|hg17_3_0
+tgggaagcaccaaagta-------gggataaaatgtcatgatgtgtgcaatacactttaaaatgtttttgccaaaa----------taattaa-------------------------tgaagc--aaatatg---gaaaataataattattaaatctaggt-----gatgggtatattgtagttcactatagtattgcacacttttctgtatgtttaaatttttcattta--------------------------aaaa-
+>panTro1.chr6(+):129885569-129885752|sequence_index=0|block_index=3|species=panTro1|panTro1_3_0
+tgggaaacaccaaagta-------gggataaaatgtcatgatgtgtgcaatacgctttaaaatatttttgccaaaa----------taattaa-------------------------tgaagc--aaatatg---gaaaataataattattaaatctaggt-----gatgggtatattgtagttcactatagtattgcacacttttctgtatgtttaaaattttcattta--------------------------aaaa-
+>rheMac2.chr3(+):165788482-165788684|sequence_index=0|block_index=3|species=rheMac2|rheMac2_3_0
+tgggaagcacaaaagta-------gggataaaatgtcatgatgtgtacaatatgctttaaaatatttttgccaaaa----------taattaa-------------------------tgaagc--aaatatg---gaaaataataactgttaaatctaggt-----gttgggtatattgcagttcattatgttattgcacacttttctgtgtgtttaaaattttcatttaaaaatatgttttaaaaatg-------aaaa-
+>rn3.chr4(+):56182295-56182489|sequence_index=0|block_index=3|species=rn3|rn3_3_0
+TAGAAAATACTCAAATATTTAGGGGCGTGACAATGTCACAGTGTCTGCAATTTGCTTTAAAGATTTTT-----AAA----------TATTTAAAAAAGTTTTAATAATTTTGAAAAACTGAAGCTACACTATG---GGAAGTGGTAATTGTTACATATGGGT-----AATAAGTAT-----AATTCGTTATATTAT-------TTTTC------TTAGAATTTTTCATTTG--------------------------AAAA-
+>bosTau2.chr4(-):50243792-50243930|sequence_index=0|block_index=3|species=bosTau2|bosTau2_3_0
+agataaacacttaagtattta---aggatgaaacgccctgatgtttgtaatttgctttagaatattttagccaaaa----------gaattaa-------------------------tgatgc--aaatatg--caaaaagagta--cgttaaacctaa-----------------------------------------------------atttgCGATTttcattta--------------------------aaaa-
+>canFam2.chr14(-):11090345-11090505|sequence_index=0|block_index=3|species=canFam2|canFam2_3_0
+agacacaaactgaagtattta---aggatgaaatgtcatgatgtttgcaattggctttaaaatattttagccaaaa-----------agtaaa-------------------------tgaagc--AAATATG--GGAAGACAATAATCATTAAATCTAGGT-----GATGCATAC---------------------------TTTTCCATATGTTTGAAATTTTCATTTA--------------------------AAAA-
+>dasNov1.scaffold_256527(+):393-625|sequence_index=0|block_index=3|species=dasNov1|dasNov1_3_0
+agacgcatgctgaagcatgta---aggataaaatgtcgtggtgtttgtaatttattctaaaacattttagccaaaaacaaataaataaataaa-------------------------tgaagc--aaatatgggggaaatgtttaattgttaaatctagatttaacacggtatataccgtgcttcattatactagtctctacttttccatgtgtttgaaattttCATTAAAATGTTTGTTTGTTGTCTGTTTTAATGAAAT
+
+>hg17.chr7(+):127471871-127471910|sequence_index=0|block_index=4|species=hg17|hg17_4_0
+actttgagctagacaccaggctatgagcta-ggagcatag
+>rheMac2.chr3(+):165788684-165788723|sequence_index=0|block_index=4|species=rheMac2|rheMac2_4_0
+actttgagctagataccaggttatgagcta-ggagcatag
+>panTro1.chr6(+):129885752-129885791|sequence_index=0|block_index=4|species=panTro1|panTro1_4_0
+actttgagctagacaccaggctatgagcta-ggagcatag
+>bosTau2.chr4(-):50243734-50243773|sequence_index=0|block_index=4|species=bosTau2|bosTau2_4_0
+tcttcgtgcaacgcacggggctatcaatgt-gggatacag
+>canFam2.chr14(-):11090081-11090120|sequence_index=0|block_index=4|species=canFam2|canFam2_4_0
+ACATCAtgctagatcctggactatgagctg-ggtatatag
+>dasNov1.scaffold_256527(+):625-665|sequence_index=0|block_index=4|species=dasNov1|dasNov1_4_0
+CCTTTGTGCTAGCCACTGGGATGAAAGCTAGGGAACACAG
+
+>hg17.chr7(+):127471910-127472074|sequence_index=0|block_index=5|species=hg17|hg17_5_0
+caatgaccaa----------------------------------------------------------------------------------------------atagactcctaccaa-ctc-aaagaatgcacattctCTG-GGAAACATGTTTCCATTAGGAAGCCTCGAATGCAATGTGACTGTGGTCTCCAGGACCTG-TGTGATCCTGGCTTTTCCTGTTCCCTCCG---CATCATCACTGCAGGTGTGTTTTCCCAAG
+>panTro1.chr6(+):129885791-129885955|sequence_index=0|block_index=5|species=panTro1|panTro1_5_0
+caatgaccaa----------------------------------------------------------------------------------------------atagactcctaccaa-ctc-aaagaatgcacattctCTG-GGAAACATGTTTCCATTAGGAAGCCTCGAATGCAATGTGACTGTGGTCTCCAGGACATG-TGTGATCCTGGCTTTTCCTGTTCCCTCTG---CATCATCACTGCAGGTGTATTTTCCCAAG
+>rheMac2.chr3(+):165788723-165788885|sequence_index=0|block_index=5|species=rheMac2|rheMac2_5_0
+caatgaccaa----------------------------------------------------------------------------------------------atagacccctaccga-ctc-aaagaatgtacattctTTG-GGAAACATGTTTCCATCAGAAAATCTCAAATGCAATGTGACTGGGGTCTCCAGGACCTG-TGTGAGCCTGGCTTTTCCTGTTCCCTCCA---CATCATCACTGCAGGTGTATTTTCCC--G
+>mm7.chr6(+):28990714-28990875|sequence_index=0|block_index=5|species=mm7|mm7_5_0
+caaaaaccaa------------------------------------------------------------------------------------------------aaaaACCTATAGC-CTC-ACAGGGTGGGTTGTCTTTG-AGGAACATGCATCCGCTAGAAAGTCCCAAGTACACTATGACAGTTG--CCCAGGCCCCGCCTTAAACCTGGTTTTCCTGGTTTCTTTCA---CATCATTACCACGAATATATTTCCTCAAG
+>rn3.chr4(+):56183448-56183705|sequence_index=0|block_index=5|species=rn3|rn3_5_0
+--ATGACCAATATACACTGTTTACATGTATAGCATTGTGAATGGAGACATAAAAAGATAATCTAGCTTTGTGCTAGGTAGGTGCTGAGCTCTTAACAGTGCTGGGCAGAAACCTATAAC-CTC-ACAGGGTGGGTTGTCTTTG-AGGAGCGTGCTAACCCTAGGAAGTCTCAAATACAATGTGATGGTTGCCCCCAGGCACCACCTTGAACCTGGTCTTCCTGGTTTCTTTCA---CACCATTACCACAAATACATTTTCTCAGG
+>bosTau2.chr4(-):50243566-50243734|sequence_index=0|block_index=5|species=bosTau2|bosTau2_5_0
+atgtgaacaa---------------------------------------------------------------------------------------------aacggacccgtgtgggactcggcggagcacacagattttgcgggagCACGTTCCCGTTAGGAAGTCTCTGATGCAATACGACCGGTGCCTTCAGGACCTG-TG--AGGCTGACTTTCCTTA-CCCCTCCACACCATCATCAAGGCAGGTGTGATTTTCCAGG
+>canFam2.chr14(-):11089913-11090081|sequence_index=0|block_index=5|species=canFam2|canFam2_5_0
+cagtgaacaa---------------------------------------------------------------------------------------------aacagagccctgcagt-cttgatggagcacacaacctttg-gggaaCATGTTTCCATAAGAAAGTCTCCAATGTGATCTGA-TGGTGCCGCCAGGACCTA-TGTCAGCCTACCGTTCCATGTCCCCTCCACACCATCATCACTGCAGGTGTGTTTTCCCACA
+>dasNov1.scaffold_256527(+):665-786|sequence_index=0|block_index=5|species=dasNov1|dasNov1_5_0
+CAGTGAGCAA-----------------------------------------------------------------------------------------------CAGCCTGGCTCCGT-CC--GGGGGCCGCTCAGCAGCTC-GGGAGCGTGGAGACG---GGAAGTCTGTCACGCGATGCG-----------CTGGGCCCG------------CTGTTCCCGCCCCCCTCC---CCCC----------------TTTCCCAAG
+
+>hg17.chr7(+):127472074-127472258|sequence_index=0|block_index=6|species=hg17|hg17_6_0
+TTTTAAA------CATTTACCTTCCCAGTGGCCTTGCGTCTAGAGGAATCCCTGTATAGTGGT-ACATGAATATAACACATAACAAA-AATCATCTCTATGGTGTGTGTTGTTCCTGGGGTTCAattcagcaaatttt-ccc-tgggcacccatgtgttcttggcactggaaaagtaccgggactgaaacagtt
+>panTro1.chr6(+):129885955-129886139|sequence_index=0|block_index=6|species=panTro1|panTro1_6_0
+TTTTAAA------CATTTACCTTCCCAGTGGCCTTGCGTCTAGAGGAATCCCTGTATAGTGGT-ACATGAATATAACACATAACAAA-AATCATCTCTATGGTGTGTGTTGTTCCTGGGGTTCAattcagcaaatttt-tcc-tgggcacccatgtgttcttggcactggaaaagtaccgggactgaaacagtt
+>rheMac2.chr3(+):165788885-165789069|sequence_index=0|block_index=6|species=rheMac2|rheMac2_6_0
+TTTTAAA------CATTTACTCTCCCAGTAGCCTTGCATCTCGAGGAATCCCTGTATAGTGGT-ACATGAATATAACACATAACAAA-AATCATCTGTACGGTGTGTGTTGTTCCTGGGGTTCAattcagcaaatttt-tcc-tgggcacccctgtgttcttggcactggaaaagtaccaggacttaaatagta
+>mm7.chr6(+):28990875-28991025|sequence_index=0|block_index=6|species=mm7|mm7_6_0
+TTTAAAGAAAGTACCCCCTCCTTTCCAGT-GCCTCAAATCTAGAAGAATATTCATAGTGAAGT-GC------------------------ACAGCCGGGTGGTGCATGGTA-ATCTGGAAGTCACCTCTGCAAATCTT-TCC----------------TGTTGGTGCTGTGAAGGCACCAGGACTTCAAGAGTA
+>rn3.chr4(+):56183705-56183879|sequence_index=0|block_index=6|species=rn3|rn3_6_0
+TTTAAAAGAAGT-CCCACTCCTTTCCAGT-GCCCTAGATCTAGAAGCACATTCATAATGATGT-ACAC-----TAACCC----------GACAGCTGTGTGGTATATGGTA-TCCCGGAAGTCACCTCAGCAAACCTT-TCCCGGGGAACCTACATGGTGTTGGTGCTGTGAAGGTACCAGGTTGTCAAGGGTA
+>canFam2.chr14(-):11089743-11089913|sequence_index=0|block_index=6|species=canFam2|canFam2_6_0
+TTTTAAA------TATCTGC-TTCCCGGTGGCCTTGAGTCTAGAGGAGTCCCCCCACTATGGTGGCACTAATACTGAAGGTCAGAAATAATCAGTTCTGTGGTGCATGTTGCCCCTGAGGTTCTGTTCGGGAAACTTC-TTC-TGAGCAC----ATGCACCTGGCACTGCAAACGTACCAGGA-----------
+>dasNov1.scaffold_256527(+):786-964|sequence_index=0|block_index=6|species=dasNov1|dasNov1_6_0
+TTTTAAA------AATTTACCTTCCCAGTGGCGGTGAATCCGGAGGAATACGGAAACTGGGGC-GCACTACCATGACACGTGTCAAA-AATCAGTTCCGTGGTCCGTGGAGGGCCTGGGGTTC------GAAAATCTTGTCC-CGAGCACCCCCGTGCGCCTGGCACCGCGACAGTGACAGGACTGAAGCGTG-
+
+>hg17.chr7(+):127472258-127472280|sequence_index=0|block_index=7|species=hg17|hg17_7_0
+gatggccca-atccctgtcctct-
+>panTro1.chr6(+):129886139-129886161|sequence_index=0|block_index=7|species=panTro1|panTro1_7_0
+gatggccca-atccctgtcctct-
+>rheMac2.chr3(+):165789069-165789091|sequence_index=0|block_index=7|species=rheMac2|rheMac2_7_0
+gatggccca-atccctgtcctct-
+>mm7.chr6(+):28991025-28991048|sequence_index=0|block_index=7|species=mm7|mm7_7_0
+AATGGCAGAGGGCTCTGTTCTCT-
+>rn3.chr4(+):56183879-56183902|sequence_index=0|block_index=7|species=rn3|rn3_7_0
+AATGGCAGAGGCCCCTGTTCTCT-
+>canFam2.chr14(-):11089526-11089548|sequence_index=0|block_index=7|species=canFam2|canFam2_7_0
+GGAGACTTG-ATGCCTGCCTTCC-
+>dasNov1.scaffold_256527(+):964-987|sequence_index=0|block_index=7|species=dasNov1|dasNov1_7_0
+GACGGCCAG-ACCTCTGCCCTCGG
+
+>hg17.chr7(+):127472280-127472681|sequence_index=0|block_index=8|species=hg17|hg17_8_0
+taaaacctaagggaggagaTGGAAAG-GGGCACCCAACCCAGACTGAGAGACAGGAATTAGCTGCAAGGGGAACTAGGAAAAGCTTCTTTA---AGGATG--GAGAGGCCCTA-GTGGAATGGGGAGATTCTTCCGGGAGAAGCGATGGATGCACAGTTGGGCATCCCCACAGACGGACTGGAAAGAAAAAAGGCCTGGAGGAATCA------ATGTGC-AATGTATGTGTGTTCCCTGGTTcaagggctgg-gaactttctcta--aagggccaggtagaaaacattttaggctttctaagccaagg---caaaattgaggat-attacatgggtacttatacaacaagaataaacaatt---tacacaa-ttttttgttgacagaattcaaaa---ctttat----agacac---agaaatgcaaatttcctgt
+>panTro1.chr6(+):129886161-129886562|sequence_index=0|block_index=8|species=panTro1|panTro1_8_0
+taaaacctaagggaggagaTGGAAAG-GGGCACCCAACCCAGACTGAGAGACAGGAATTAGCTGCAAGGGGAACTAGGAAAAGCTTCTTTA---AGGATG--GAGAGACCCTA-GTGGAATGGGGAGATTCTTCCGGGAGAAGCGATGGATGCGCAGTTGGGCATCCCCACAGACGGACTGGAAAGAAAAAAGGCCTGGAGGAATCA------ATGTGC-AATGTATGTGTGTTCCCTGGTTcaagggctgg-gaactttctcta--aagggccaggtagaaaacattttaggctttctaagccaagg---caaaattgaggat-attacatgggtacttatacaacaagaataaacaatt---tacacaa-ttttttgttgacagaattcaaaa---ctttat----agacac---agaaatgtaaatttcctgt
+>rheMac2.chr3(+):165789091-165789492|sequence_index=0|block_index=8|species=rheMac2|rheMac2_8_0
+taaaacctaatggaggagatggaATG-GGTCACCCAACCCGGACTGAGAGACAGGAATTAGCTGCAAGGGTAACCAGGACAAGCTTCTCTA---ATGATG--GAGAGACCCTA-GTGGAATGGGGAGATTCTTCTGGGAGAAGCGATGGATTCGTAGTTGGGCATCCCCACAGAGGGACTGGAAAGAAAAAAGACCTGGAGGAACCA------ATGTGC-AATGTATGTGTGTTTCCTGGTTcaagggctggcaaactttctcta--aagggccagatagaaaacattttaggctttgtaagccaagg---caaaatcgaggag-attacatgggtacttatacaacaagaataaacaatt---tccacaa--tttttattcacagaattcaaaa---ctttat----agacac---agaaatgtaaatttcctgt
+>rn3.chr4(+):56183902-56184219|sequence_index=0|block_index=8|species=rn3|rn3_8_0
+------------------------------------GTCCATAGTCAAAG------------------------------AAGCCTCTCAG---ATGGAG--AGCAGGGCCTATGCAAAAGAGGGGGCTTCTGTAGGCAGAAGGGATGGACTAGCCTCCGGACATAGCCATAGAGAGGCTGGCAGGACTGAGACCCAGGAGAAGCCAGCGCAGGTGTGCGGGCGTGTGTATATTTCATAGTTTGCAGGTTGG----------------------------CAAACAATTCCTGCTTTGCAGGCCAAGA---GGAAACTGAAGGTGACCCCGTGAGTGCTTAC---ACAAGAGAAAACAAG-------ACAA-TTTTTGGTTGACCAAATTCAGAA---CTTTATTTGAGGATGC---TAAAGTTTAAATTTCTTTT
+>canFam2.chr14(-):11089143-11089523|sequence_index=0|block_index=8|species=canFam2|canFam2_8_0
+TACAGCCTGTGGGCAGAGGTGGGAAGAGGTCACGCAAGCCAGTTGGAATGAGGGGAGTTGGCTGGAAAGGTGACCAGGACAAGCTACTTCAACCAGGAAG--AAGAGACCCCG-GTG----------------CTTGGAGAAGGCCTGATTGAGCAGTCCTGCATGCCCGCCCAC-GACTGGCAGGAATAAAGACCCAGAAGAGCTA------ACGTGC-AATGTA------TTTTCTAGTTCCAgggttggcaaactttctctct-aagggtgggatgataaacattttaggcttttcagaccaaga---ggcgacatcagag-ggtatgtaggt---------acaagagggaaaagttgcccccggaa-ttttttg--gataaaattcaaaa---ctttacttagggatgc---caaaatgtaaacttcatat
+>dasNov1.scaffold_256527(+):987-1401|sequence_index=0|block_index=8|species=dasNov1|dasNov1_8_0
+CTAAATCTCGCGGAGAAGGTGGAACA-GGTTACCCAAACCCGACCGAG-GAGGCGAGTTG---GAAACGGCGACTGGGACAAGCTCCCTCA---GAGACGGAGAGAGACCCCA-GTGGAAGGGGGGAGAGGCTCTTAGGGAAACGATGGGGGGACCCGCCCGCACCCGCACAGAGGCGCTGGCAGGCACAGCGGCCCCGAGGAGCCC------AGGAGC-AGGGC-TGTGT-TCCCCTGCATcaggggttggcaaactttttctgcaaagggccagatagtaaatattttaggctttgcaaaccaagaagtagaaagggaggcc-attatgtacgtatttatatagcaagagagaacattt---cccacaatttttttattgacagaatttaaaacttctttattgatgaacaccaaagaaacttgaatttcatat
+
+>hg17.chr7(+):127472681-127472715|sequence_index=0|block_index=9|species=hg17|hg17_9_0
+aattttcccat---gagaactattcttcttttgtttt
+>rheMac2.chr3(+):165789492-165789526|sequence_index=0|block_index=9|species=rheMac2|rheMac2_9_0
+aattttcacat---aagaactattcttcttttgtttt
+>panTro1.chr6(+):129886562-129886596|sequence_index=0|block_index=9|species=panTro1|panTro1_9_0
+aattttcccgt---gagaactattcttcttttgtttt
+>canFam2.chr14(-):11089108-11089143|sequence_index=0|block_index=9|species=canFam2|canFam2_9_0
+aatggtcatgt--ccataactattcttcttttatttt
+>dasNov1.scaffold_256527(+):1401-1433|sequence_index=0|block_index=9|species=dasNov1|dasNov1_9_0
+aattttcacatatcacgaagtatttttttttt-----
+
diff -r 99dcba7af5b6 -r e929a2d803e4 test-data/maf_split_by_species_collapsed_out.maf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/maf_split_by_species_collapsed_out.maf Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,61 @@
+##maf version=1
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT-GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC--GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC-GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGCAG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC---AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC---AG
+
diff -r 99dcba7af5b6 -r e929a2d803e4 test-data/maf_split_by_species_in.maf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/maf_split_by_species_in.maf Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,11 @@
+##maf version=1
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
diff -r 99dcba7af5b6 -r e929a2d803e4 test-data/maf_split_by_species_not_collapsed_out.maf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/maf_split_by_species_not_collapsed_out.maf Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,61 @@
+##maf version=1
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+a score=2047408.0
+s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
diff -r 99dcba7af5b6 -r e929a2d803e4 tool_conf.xml.sample
--- a/tool_conf.xml.sample Fri Sep 04 10:31:23 2009 -0400
+++ b/tool_conf.xml.sample Fri Sep 04 10:40:16 2009 -0400
@@ -90,6 +90,7 @@
<section name="Fetch Alignments" id="fetchAlign">
<tool file="maf/interval2maf_pairwise.xml" />
<tool file="maf/interval2maf.xml" />
+ <tool file="maf/maf_split_by_species.xml"/>
<tool file="maf/interval_maf_to_merged_fasta.xml" />
<tool file="maf/genebed_maf_to_fasta.xml"/>
<tool file="maf/maf_stats.xml"/>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/annotation_profiler/annotation_profiler_for_interval.py
--- a/tools/annotation_profiler/annotation_profiler_for_interval.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/annotation_profiler/annotation_profiler_for_interval.py Fri Sep 04 10:40:16 2009 -0400
@@ -22,10 +22,12 @@
fmt_size = struct.calcsize( fmt )
def __init__( self, filename ):
self.file_size = os.stat( filename ).st_size
- self.file = open( filename, 'rb' )
+ self.file = open( filename, 'rb' )
+ self.filename = filename
self.length = int( self.file_size / self.fmt_size / 2 )
self._cached_ranges = [ None for i in xrange( self.length ) ]
def __getitem__( self, i ):
+ old_i = i
if self._cached_ranges[i] is not None:
return self._cached_ranges[i]
if i < 0: i = self.length + i
@@ -35,7 +37,13 @@
start = struct.unpack( self.fmt, self.file.read( self.fmt_size ) )[0]
end = struct.unpack( self.fmt, self.file.read( self.fmt_size ) )[0]
except Exception, e:
- raise IndexError, e
+ print 'filename', self.filename
+ print 'len', len( self )
+ print 'fmtsize', self.fmt_size
+ print 'index', i
+ print 'old i', old_i
+ print 'offset', offset
+ raise IndexError( str( e ) )
self._cached_ranges[i] = ( start, end )
return start, end
def __len__( self ):
@@ -141,20 +149,24 @@
self.chromosome_coverage[chrom] = bx.bitset.BitSet( chrom_length )
self.chromosome_coverage[chrom].set_range( region_start, region_length )
- for table_name, coverage, regions in self.coverage_reader.iter_table_coverage_regions_by_region( chrom, region_start, region_end ):
- if table_name not in self.table_coverage:
- self.table_coverage[table_name] = 0
- self.table_chromosome_size[table_name] = {}
- self.table_regions_overlaped_count[table_name] = 0
- self.interval_table_overlap_count[table_name] = 0
- self.table_chromosome_count[table_name] = {}
- if chrom not in self.table_chromosome_size[table_name]:
- self.table_chromosome_size[table_name][chrom] = self.coverage_reader._coverage[table_name][chrom]._total_coverage
- self.table_chromosome_count[table_name][chrom] = len( self.coverage_reader._coverage[table_name][chrom]._coverage )
- self.table_coverage[table_name] += coverage
- if coverage:
- self.interval_table_overlap_count[table_name] += 1
- self.table_regions_overlaped_count[table_name] += regions
+ try:
+ for table_name, coverage, regions in self.coverage_reader.iter_table_coverage_regions_by_region( chrom, region_start, region_end ):
+ if table_name not in self.table_coverage:
+ self.table_coverage[table_name] = 0
+ self.table_chromosome_size[table_name] = {}
+ self.table_regions_overlaped_count[table_name] = 0
+ self.interval_table_overlap_count[table_name] = 0
+ self.table_chromosome_count[table_name] = {}
+ if chrom not in self.table_chromosome_size[table_name]:
+ self.table_chromosome_size[table_name][chrom] = self.coverage_reader._coverage[table_name][chrom]._total_coverage
+ self.table_chromosome_count[table_name][chrom] = len( self.coverage_reader._coverage[table_name][chrom]._coverage )
+ self.table_coverage[table_name] += coverage
+ if coverage:
+ self.interval_table_overlap_count[table_name] += 1
+ self.table_regions_overlaped_count[table_name] += regions
+ except Exception, e:
+ print "chrom:%s, start:%s, end%s:." % ( chrom, start, end )
+ raise e
def iter_table_coverage( self ):
def get_nr_coverage():
#returns non-redundant coverage, where user's input intervals have been collapse to resolve overlaps
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/genebed_maf_to_fasta.xml
--- a/tools/maf/genebed_maf_to_fasta.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/genebed_maf_to_fasta.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,8 +1,8 @@
-<tool id="GeneBed_Maf_Fasta2" name="Stitch Gene blocks">
+<tool id="GeneBed_Maf_Fasta2" name="Stitch Gene blocks" version="1.0.1">
<description>given a set of coding exon intervals</description>
<command interpreter="python">#if $maf_source_type.maf_source == "user":#interval_maf_to_merged_fasta.py --dbkey=$dbkey --species=$maf_source_type.species --mafSource=$maf_source_type.maf_file --mafIndex=$maf_source_type.maf_file.metadata.maf_index --interval_file=$input1 --output_file=$out_file1 --mafSourceType=$maf_source_type.maf_source --geneBED --mafIndexFileDir=${GALAXY_DATA_INDEX_DIR}
#else:#interval_maf_to_merged_fasta.py --dbkey=$dbkey --species=$maf_source_type.species --mafSource=$maf_source_type.maf_identifier --interval_file=$input1 --output_file=$out_file1 --mafSourceType=$maf_source_type.maf_source --geneBED --mafIndexFileDir=${GALAXY_DATA_INDEX_DIR}
-#end if
+#end if# --overwrite_with_gaps=$overwrite_with_gaps
</command>
<inputs>
<param name="input1" type="data" format="bed" label="Gene BED File">
@@ -29,42 +29,48 @@
<when value="cached">
<param name="maf_identifier" type="select" label="MAF Type" >
<options from_file="maf_index.loc">
- <column name="name" index="0"/>
- <column name="value" index="1"/>
- <column name="dbkey" index="2"/>
- <column name="species" index="3"/>
- <filter type="data_meta" ref="input1" key="dbkey" column="2" multiple="True" separator=","/>
- <validator type="no_options" message="No alignments are available for the build associated with the selected interval file"/>
+ <column name="name" index="0"/>
+ <column name="value" index="1"/>
+ <column name="dbkey" index="2"/>
+ <column name="species" index="3"/>
+ <filter type="data_meta" ref="input1" key="dbkey" column="2" multiple="True" separator=","/>
+ <validator type="no_options" message="No alignments are available for the build associated with the selected interval file"/>
</options>
</param>
<param name="species" type="select" display="checkboxes" multiple="true" label="Choose species" help="Select species to be included in the final alignment">
<options from_file="maf_index.loc">
- <column name="uid" index="1"/>
- <column name="value" index="3"/>
- <column name="name" index="3"/>
- <filter type="param_value" ref="maf_identifier" name="uid" column="1"/>
- <filter type="multiple_splitter" column="3" separator=","/>
+ <column name="uid" index="1"/>
+ <column name="value" index="3"/>
+ <column name="name" index="3"/>
+ <filter type="param_value" ref="maf_identifier" name="uid" column="1"/>
+ <filter type="multiple_splitter" column="3" separator=","/>
</options>
</param>
</when>
</conditional>
- </inputs>
+ <param name="overwrite_with_gaps" type="select" label="Split into Gapless MAF blocks" help="When set to Yes, blocks are divided around gaps appearing in any species. This will prevent gaps occuring in the interior of the sequence for an aligning species from overwriting a nucleotide found for the same position in a lower-scoring block.">
+ <option value="True" selected="true">No</option>
+ <option value="False">Yes</option>
+ </param>
+ </inputs>
<outputs>
<data format="fasta" name="out_file1" />
</outputs>
<tests>
<test>
<param name="input1" value="8.bed"/>
- <param name="maf_source" value="cached"/>
+ <param name="maf_source" value="cached"/>in aligning species
<param name="maf_identifier" value="8_WAY_MULTIZ_hg17"/>
- <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="overwrite_with_gaps" value="True"/>
<output name="out_file1" file="gene_bed_maf_to_fasta_out.fasta" />
</test>
<test>
<param name="input1" value="8.bed"/>
<param name="maf_source" value="user"/>
<param name="maf_file" value="4.maf"/>
- <param name="species" value="hg17,panTro1"/>
+ <param name="species" value="hg17,panTro1"/>
+ <param name="overwrite_with_gaps" value="True"/>
<output name="out_file1" file="gene_bed_maf_to_fasta_user_out.fasta" />
</test>
</tests>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/interval2maf.py
--- a/tools/maf/interval2maf.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/interval2maf.py Fri Sep 04 10:40:16 2009 -0400
@@ -20,6 +20,8 @@
-i, --interval_file=i: Input interval file
-o, --output_file=o: Output MAF file
-p, --species=p: Species to include in output
+ -P, --split_blocks_by_species=P: Split blocks by species
+ -r, --remove_all_gap_columns=r: Remove all Gap columns
-l, --indexLocation=l: Override default maf_index.loc file
-z, --mafIndexFile=z: Directory of local maf index file ( maf_index.loc or maf_pairwise.loc )
"""
@@ -45,25 +47,21 @@
if options.dbkey: dbkey = options.dbkey
else: dbkey = None
if dbkey in [None, "?"]:
- print >>sys.stderr, "You must specify a proper build in order to extract alignments. You can specify your genome build by clicking on the pencil icon associated with your interval file."
- sys.exit()
+ maf_utilities.tool_fail( "You must specify a proper build in order to extract alignments. You can specify your genome build by clicking on the pencil icon associated with your interval file." )
species = maf_utilities.parse_species_option( options.species )
if options.chromCol: chromCol = int( options.chromCol ) - 1
else:
- print >>sys.stderr, "Chromosome column not set, click the pencil icon in the history item to set the metadata attributes."
- sys.exit()
+ maf_utilities.tool_fail( "Chromosome column not set, click the pencil icon in the history item to set the metadata attributes." )
if options.startCol: startCol = int( options.startCol ) - 1
else:
- print >>sys.stderr, "Start column not set, click the pencil icon in the history item to set the metadata attributes."
- sys.exit()
+ maf_utilities.tool_fail( "Start column not set, click the pencil icon in the history item to set the metadata attributes." )
if options.endCol: endCol = int( options.endCol ) - 1
else:
- print >>sys.stderr, "End column not set, click the pencil icon in the history item to set the metadata attributes."
- sys.exit()
+ maf_utilities.tool_fail( "End column not set, click the pencil icon in the history item to set the metadata attributes." )
if options.strandCol: strandCol = int( options.strandCol ) - 1
else:
@@ -71,13 +69,17 @@
if options.interval_file: interval_file = options.interval_file
else:
- print >>sys.stderr, "Input interval file has not been specified."
- sys.exit()
+ maf_utilities.tool_fail( "Input interval file has not been specified." )
if options.output_file: output_file = options.output_file
else:
- print >>sys.stderr, "Output file has not been specified."
- sys.exit()
+ maf_utilities.tool_fail( "Output file has not been specified." )
+
+ split_blocks_by_species = remove_all_gap_columns = False
+ if options.split_blocks_by_species and options.split_blocks_by_species == 'split_blocks_by_species':
+ split_blocks_by_species = True
+ if options.remove_all_gap_columns and options.remove_all_gap_columns == 'remove_all_gap_columns':
+ remove_all_gap_columns = True
#Finish parsing command line
#Open indexed access to MAFs
@@ -87,16 +89,13 @@
else:
index = maf_utilities.maf_index_by_uid( options.mafType, options.mafIndexFile )
if index is None:
- print >> sys.stderr, "The MAF source specified (%s) appears to be invalid." % ( options.mafType )
- sys.exit()
+ maf_utilities.tool_fail( "The MAF source specified (%s) appears to be invalid." % ( options.mafType ) )
elif options.mafFile:
index, index_filename = maf_utilities.open_or_build_maf_index( options.mafFile, options.mafIndex, species = [dbkey] )
if index is None:
- print >> sys.stderr, "Your MAF file appears to be malformed."
- sys.exit()
+ maf_utilities.tool_fail( "Your MAF file appears to be malformed." )
else:
- print >>sys.stderr, "Desired source MAF type has not been specified."
- sys.exit()
+ maf_utilities.tool_fail( "Desired source MAF type has not been specified." )
#Create MAF writter
out = bx.align.maf.Writer( open(output_file, "w") )
@@ -105,10 +104,20 @@
num_blocks = 0
num_regions = None
for num_regions, region in enumerate( bx.intervals.io.NiceReaderWrapper( open( interval_file, 'r' ), chrom_col = chromCol, start_col = startCol, end_col = endCol, strand_col = strandCol, fix_strand = True, return_header = False, return_comments = False ) ):
- src = "%s.%s" % ( dbkey, region.chrom )
- for block in maf_utilities.get_chopped_blocks_for_region( index, src, region, species, mincols ):
- out.write( block )
- num_blocks += 1
+ src = maf_utilities.src_merge( dbkey, region.chrom )
+ for block in index.get_as_iterator( src, region.start, region.end ):
+ if split_blocks_by_species:
+ blocks = [ new_block for new_block in maf_utilities.iter_blocks_split_by_species( block ) if maf_utilities.component_overlaps_region( new_block.get_component_by_src_start( dbkey ), region ) ]
+ else:
+ blocks = [ block ]
+ for block in blocks:
+ block = maf_utilities.chop_block_by_region( block, src, region )
+ if block is not None:
+ block = maf_utilities.orient_block_by_region( block, src, region )
+ if remove_all_gap_columns:
+ block.remove_all_gap_columns()
+ out.write( block )
+ num_blocks += 1
#Close output MAF
out.close()
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/interval2maf.xml
--- a/tools/maf/interval2maf.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/interval2maf.xml Fri Sep 04 10:40:16 2009 -0400
@@ -3,6 +3,9 @@
<command interpreter="python">
#if $maf_source_type.maf_source == "user":#interval2maf.py --dbkey=${input1.dbkey} --chromCol=${input1.metadata.chromCol} --startCol=${input1.metadata.startCol} --endCol=${input1.metadata.endCol} --strandCol=${input1.metadata.strandCol} --mafFile=$maf_source_type.mafFile --mafIndex=$maf_source_type.mafFile.metadata.maf_index --interval_file=$input1 --output_file=$out_file1 --mafIndexFile=${GALAXY_DATA_INDEX_DIR}/maf_index.loc --species=$maf_source_type.species
#else:#interval2maf.py --dbkey=${input1.dbkey} --chromCol=${input1.metadata.chromCol} --startCol=${input1.metadata.startCol} --endCol=${input1.metadata.endCol} --strandCol=${input1.metadata.strandCol} --mafType=$maf_source_type.mafType --interval_file=$input1 --output_file=$out_file1 --mafIndexFile=${GALAXY_DATA_INDEX_DIR}/maf_index.loc --species=$maf_source_type.species
+ #end if
+ --split_blocks_by_species=$split_blocks_by_species_selector.split_blocks_by_species
+ #if $split_blocks_by_species_selector.split_blocks_by_species == "split_blocks_by_species":# --remove_all_gap_columns=$split_blocks_by_species_selector.remove_all_gap_columns
#end if
</command>
<inputs>
@@ -48,7 +51,22 @@
</options>
</param>
</when>
- </conditional>
+ </conditional>
+ <conditional name="split_blocks_by_species_selector">
+ <param name="split_blocks_by_species" type="select" label="Split blocks by species" help="See the Split MAF blocks by Species tool for more information.">
+ <option value="split_blocks_by_species">Split by species</option>
+ <option value="dont_split_blocks_by_species" selected="true">Do not split</option>
+ </param>
+ <when value="dont_split_blocks_by_species">
+ <!-- do nothing here -->
+ </when>
+ <when value="split_blocks_by_species">
+ <param name="remove_all_gap_columns" type="select" label="Collapse empty alignment columns">
+ <option value="remove_all_gap_columns" selected="true">Collapse empty columns</option>
+ <option value="do_not_remove_all_gap_columns">Do not collapse</option>
+ </param>
+ </when>
+ </conditional>
</inputs>
<outputs>
<data format="maf" name="out_file1"/>
@@ -59,6 +77,7 @@
<param name="maf_source" value="cached"/>
<param name="mafType" value="ENCODE_TBA_hg17"/>
<param name="species" value="hg17,panTro1,baboon,marmoset,galago,rn3,mm6,rabbit,cow,canFam1,rfbat,shrew,armadillo,tenrec,monDom1,tetNig1,fr1,rheMac1,galGal2,xenTro1,danRer2,elephant,platypus,hedgehog,colobus_monkey,dusky_titi,owl_monkey,mouse_lemur"/>
+ <param name="split_blocks_by_species" value="dont_split_blocks_by_species"/>
<output name="out_file1" file="fsa_interval2maf.dat" />
</test>
<test>
@@ -66,6 +85,7 @@
<param name="maf_source" value="user"/>
<param name="mafFile" value="fsa_interval2maf.dat"/>
<param name="species" value="hg17,panTro1,baboon,marmoset,galago,rn3,mm6,rabbit,cow,canFam1,rfbat,shrew,armadillo,tenrec,monDom1,tetNig1,fr1,rheMac1,galGal2,xenTro1,danRer2,elephant,platypus,hedgehog,colobus_monkey,dusky_titi,owl_monkey,mouse_lemur"/>
+ <param name="split_blocks_by_species" value="dont_split_blocks_by_species"/>
<output name="out_file1" file="fsa_interval2maf.dat" />
</test>
</tests>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/interval2maf_pairwise.xml
--- a/tools/maf/interval2maf_pairwise.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/interval2maf_pairwise.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="Interval2Maf_pairwise1" name="Extract Pairwise MAF blocks">
+<tool id="Interval2Maf_pairwise1" name="Extract Pairwise MAF blocks" version="1.0.1">
<description>given a set of genomic intervals</description>
<command interpreter="python">interval2maf.py --dbkey=${input1.dbkey} --chromCol=${input1.metadata.chromCol} --startCol=${input1.metadata.startCol} --endCol=${input1.metadata.endCol} --strandCol=${input1.metadata.strandCol} --mafType=$mafType --interval_file=$input1 --output_file=$out_file1 --indexLocation=${GALAXY_DATA_INDEX_DIR}/maf_pairwise.loc</command>
<inputs>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/interval_maf_to_merged_fasta.py
--- a/tools/maf/interval_maf_to_merged_fasta.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/interval_maf_to_merged_fasta.py Fri Sep 04 10:40:16 2009 -0400
@@ -19,6 +19,7 @@
-i, --interval_file=i: Input interval file
-o, --output_file=o: Output MAF file
-p, --species=p: Species to include in output
+ -O, --overwrite_with_gaps=O: Overwrite bases found in a lower-scoring block with gaps interior to the sequence for a species.
-z, --mafIndexFileDir=z: Directory of local maf_index.loc file
usage: %prog dbkey_of_BED comma_separated_list_of_additional_dbkeys_to_extract comma_separated_list_of_indexed_maf_files input_gene_bed_file output_fasta_file cached|user GALAXY_DATA_INDEX_DIR
@@ -93,6 +94,11 @@
strand_col = int( options.strandCol ) - 1
mafIndexFile = "%s/maf_index.loc" % options.mafIndexFileDir
+
+ overwrite_with_gaps = True
+ if options.overwrite_with_gaps and options.overwrite_with_gaps.lower() == 'false':
+ overwrite_with_gaps = False
+
#Finish parsing command line
#get index for mafs based on type
@@ -127,7 +133,7 @@
try:
starts, ends, fields = maf_utilities.get_starts_ends_fields_from_gene_bed( line )
#create spliced alignment object
- alignment = maf_utilities.get_spliced_region_alignment( index, primary_species, fields[0], starts, ends, strand = '+', species = species, mincols = mincols )
+ alignment = maf_utilities.get_spliced_region_alignment( index, primary_species, fields[0], starts, ends, strand = '+', species = species, mincols = mincols, overwrite_with_gaps = overwrite_with_gaps )
primary_name = secondary_name = fields[3]
alignment_strand = fields[5]
except Exception, e:
@@ -136,7 +142,7 @@
else: #Process as standard intervals
try:
#create spliced alignment object
- alignment = maf_utilities.get_region_alignment( index, primary_species, line.chrom, line.start, line.end, strand = '+', species = species, mincols = mincols )
+ alignment = maf_utilities.get_region_alignment( index, primary_species, line.chrom, line.start, line.end, strand = '+', species = species, mincols = mincols, overwrite_with_gaps = overwrite_with_gaps )
primary_name = "%s(%s):%s-%s" % ( line.chrom, line.strand, line.start, line.end )
secondary_name = ""
alignment_strand = line.strand
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/interval_maf_to_merged_fasta.xml
--- a/tools/maf/interval_maf_to_merged_fasta.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/interval_maf_to_merged_fasta.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,8 +1,8 @@
-<tool id="Interval_Maf_Merged_Fasta2" name="Stitch MAF blocks">
+<tool id="Interval_Maf_Merged_Fasta2" name="Stitch MAF blocks" version="1.0.1">
<description>given a set of genomic intervals</description>
<command interpreter="python">#if $maf_source_type.maf_source == "user":#interval_maf_to_merged_fasta.py --dbkey=$dbkey --species=$maf_source_type.species --mafSource=$maf_source_type.maf_file --mafIndex=$maf_source_type.maf_file.metadata.maf_index --interval_file=$input1 --output_file=$out_file1 --chromCol=${input1.metadata.chromCol} --startCol=${input1.metadata.startCol} --endCol=${input1.metadata.endCol} --strandCol=${input1.metadata.strandCol} --mafSourceType=$maf_source_type.maf_source --mafIndexFileDir=${GALAXY_DATA_INDEX_DIR}
#else:#interval_maf_to_merged_fasta.py --dbkey=$dbkey --species=$maf_source_type.species --mafSource=$maf_source_type.maf_identifier --interval_file=$input1 --output_file=$out_file1 --chromCol=${input1.metadata.chromCol} --startCol=${input1.metadata.startCol} --endCol=${input1.metadata.endCol} --strandCol=${input1.metadata.strandCol} --mafSourceType=$maf_source_type.maf_source --mafIndexFileDir=${GALAXY_DATA_INDEX_DIR}
-#end if
+#end if# --overwrite_with_gaps=$overwrite_with_gaps
</command>
<inputs>
<page>
@@ -30,25 +30,29 @@
<when value="cached">
<param name="maf_identifier" type="select" label="MAF Type" >
<options from_file="maf_index.loc">
- <column name="name" index="0"/>
- <column name="value" index="1"/>
- <column name="dbkey" index="2"/>
- <column name="species" index="3"/>
- <filter type="data_meta" ref="input1" key="dbkey" column="2" multiple="True" separator=","/>
- <validator type="no_options" message="No alignments are available for the build associated with the selected interval file"/>
+ <column name="name" index="0"/>
+ <column name="value" index="1"/>
+ <column name="dbkey" index="2"/>
+ <column name="species" index="3"/>
+ <filter type="data_meta" ref="input1" key="dbkey" column="2" multiple="True" separator=","/>
+ <validator type="no_options" message="No alignments are available for the build associated with the selected interval file"/>
</options>
</param>
<param name="species" type="select" display="checkboxes" multiple="true" label="Choose species" help="Select species to be included in the final alignment">
<options from_file="maf_index.loc">
- <column name="uid" index="1"/>
- <column name="value" index="3"/>
- <column name="name" index="3"/>
- <filter type="param_value" ref="maf_identifier" name="uid" column="1"/>
- <filter type="multiple_splitter" column="3" separator=","/>
+ <column name="uid" index="1"/>
+ <column name="value" index="3"/>
+ <column name="name" index="3"/>
+ <filter type="param_value" ref="maf_identifier" name="uid" column="1"/>
+ <filter type="multiple_splitter" column="3" separator=","/>
</options>
</param>
</when>
</conditional>
+ <param name="overwrite_with_gaps" type="select" label="Split into Gapless MAF blocks" help="When set to Yes, blocks are divided around gaps appearing in any species. This will prevent gaps occuring in the interior of the sequence for an aligning species from overwriting a nucleotide found for the same position in a lower-scoring block.">
+ <option value="True" selected="true">No</option>
+ <option value="False">Yes</option>
+ </param>
</page>
</inputs>
<outputs>
@@ -59,21 +63,24 @@
<param name="input1" value="13.bed" dbkey="hg18" ftype="bed"/>
<param name="maf_source" value="cached"/>
<param name="maf_identifier" value="17_WAY_MULTIZ_hg18"/>
- <param name="species" value="hg18,mm8"/>
+ <param name="species" value="hg18,mm8"/>
+ <param name="overwrite_with_gaps" value="True"/>
<output name="out_file1" file="interval_maf_to_merged_fasta_out3.fasta" />
</test>
<test>
<param name="input1" value="1.bed" dbkey="hg17" ftype="bed"/>
<param name="maf_source" value="cached"/>
<param name="maf_identifier" value="8_WAY_MULTIZ_hg17"/>
- <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="overwrite_with_gaps" value="True"/>
<output name="out_file1" file="interval_maf_to_merged_fasta_out.dat" />
</test>
<test>
<param name="input1" value="1.bed" dbkey="hg17" ftype="bed"/>
<param name="maf_source" value="user"/>
<param name="maf_file" value="5.maf"/>
- <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="species" value="canFam1,hg17,mm5,panTro1,rn3"/>
+ <param name="overwrite_with_gaps" value="True"/>
<output name="out_file1" file="interval_maf_to_merged_fasta_user_out.dat" />
</test>
</tests>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_filter.py
--- a/tools/maf/maf_filter.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_filter.py Fri Sep 04 10:40:16 2009 -0400
@@ -46,7 +46,7 @@
i = 0
blocks_kept = 0
for i, maf_block in enumerate( maf_reader ):
- if min_size <= maf_block.components[0].size <= max_size:
+ if min_size <= maf_block.text_size <= max_size:
local = {'maf_block':maf_block, 'ret_val':False}
execfile( script_file, {}, local )
if local['ret_val']:
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_limit_size.py
--- a/tools/maf/maf_limit_size.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_limit_size.py Fri Sep 04 10:40:16 2009 -0400
@@ -28,7 +28,7 @@
blocks_kept = 0
i = 0
for i, m in enumerate( maf_reader ):
- if min_size <= m.components[0].size <= max_size:
+ if min_size <= m.text_size <= max_size:
maf_writer.write( m )
blocks_kept += 1
print 'Kept %s of %s blocks (%.2f%%).' % ( blocks_kept, i + 1, float( blocks_kept ) / float( i + 1 ) * 100.0 )
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_limit_size.xml
--- a/tools/maf/maf_limit_size.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_limit_size.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="maf_limit_size1" name="Filter MAF blocks">
+<tool id="maf_limit_size1" name="Filter MAF blocks" version="1.0.1">
<description>by Size</description>
<command interpreter="python">maf_limit_size.py $input1 $out_file1 $min_size $max_size</command>
<inputs>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_limit_to_species.py
--- a/tools/maf/maf_limit_to_species.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_limit_to_species.py Fri Sep 04 10:40:16 2009 -0400
@@ -11,13 +11,18 @@
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
import bx.align.maf
+from galaxy.tools.util import maf_utilities
import sys
assert sys.version_info[:2] >= ( 2, 4 )
def main():
- species = sys.argv[1].split( ',' )
+ species = maf_utilities.parse_species_option( sys.argv[1] )
+ if species:
+ spec_len = len( species )
+ else:
+ spec_len = 0
try:
maf_reader = bx.align.maf.Reader( open( sys.argv[2],'r' ) )
maf_writer = bx.align.maf.Writer( open( sys.argv[3],'w' ) )
@@ -30,10 +35,11 @@
maf_blocks_kept = 0
for m in maf_reader:
- if species != ['None']:
+ if species:
m = m.limit_to_species( species )
m.remove_all_gap_columns()
- if ( species == ['None'] or allow_partial or len( m.components ) == len( species ) ) and len( m.components ) > min_species_per_block:
+ spec_in_block_len = len( maf_utilities.get_species_in_block( m ) )
+ if ( not species or allow_partial or spec_in_block_len == spec_len ) and spec_in_block_len > min_species_per_block:
maf_writer.write( m )
maf_blocks_kept += 1
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_split_by_species.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/maf/maf_split_by_species.py Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+"""
+Read a maf and split blocks by unique species combinations
+"""
+import sys
+from galaxy import eggs
+import pkg_resources; pkg_resources.require( "bx-python" )
+from bx.align import maf
+from galaxy.tools.util import maf_utilities
+from galaxy.util import string_as_bool
+
+assert sys.version_info[:2] >= ( 2, 4 )
+
+def __main__():
+ try:
+ maf_reader = maf.Reader( open( sys.argv[1] ) )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error opening MAF: %s" % e )
+ try:
+ out = maf.Writer( open( sys.argv[2], "w") )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error opening file for output: %s" % e )
+ try:
+ collapse_columns = string_as_bool( sys.argv[3] )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error determining collapse columns value: %s" % e )
+
+ start_count = 0
+ end_count = 0
+ for start_count, start_block in enumerate( maf_reader ):
+ for block in maf_utilities.iter_blocks_split_by_species( start_block ):
+ if collapse_columns:
+ block.remove_all_gap_columns()
+ out.write( block )
+ end_count += 1
+ out.close()
+
+ if end_count:
+ print "%i alignment blocks created from %i original blocks." % ( end_count, start_count + 1 )
+ else:
+ print "No alignment blocks were created."
+
+if __name__ == "__main__": __main__()
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_split_by_species.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/maf/maf_split_by_species.xml Fri Sep 04 10:40:16 2009 -0400
@@ -0,0 +1,216 @@
+<tool id="MAF_split_blocks_by_species1" name="Split MAF blocks" version="1.0.0">
+ <description>by Species</description>
+ <command interpreter="python">maf_split_by_species.py $input1 $out_file1 $collapse_columns</command>
+ <inputs>
+ <param format="maf" name="input1" type="data" label="MAF file to split"/>
+ <param name="collapse_columns" type="select" label="Collapse empty alignment columns" help="Removes columns that are gaps in all sequences">
+ <option value="True" selected="true">Yes</option>
+ <option value="False">No</option>
+ </param>
+ </inputs>
+ <outputs>
+ <data format="maf" name="out_file1" />
+ </outputs>
+ <tests>
+ <test>
+ <param name="input1" value="maf_split_by_species_in.maf"/>
+ <param name="collapse_columns" value="True"/>
+ <output name="out_file1" file="maf_split_by_species_collapsed_out.maf"/>
+ </test>
+ <test>
+ <param name="input1" value="maf_split_by_species_in.maf"/>
+ <param name="collapse_columns" value="False"/>
+ <output name="out_file1" file="maf_split_by_species_not_collapsed_out.maf"/>
+ </test>
+ </tests>
+ <help>
+
+**What it does**
+
+This tool examines each MAF block for multiple occurrences of a species in a single block. When this occurs, a block is split into multiple blocks where every combination of one sequence per species per block is represented.
+
+The interface for this tool has two inputs:
+
+ * **MAF file to split**. Choose multiple alignments from history to be split by species.
+ * **Collapse empty alignment columns**. Should alignment columns containing only gaps in the new blocks be removed.
+
+-----
+
+**Example 1**: **Collapse empty alignment columns is Yes**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that no columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT-GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC--GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC-GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGCAG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC---AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC---AG
+
+-----
+
+**Example 1**: **Collapse empty alignment columns is Yes**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that some columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+-------
+
+.. class:: infomark
+
+**About formats**
+
+**MAF format** multiple alignment format file. This format stores multiple alignments at the DNA level between entire genomes.
+
+ - The .maf format is line-oriented. Each multiple alignment ends with a blank line.
+ - Each sequence in an alignment is on a single line.
+ - Lines starting with # are considered to be comments.
+ - Each multiple alignment is in a separate paragraph that begins with an "a" line and contains an "s" line for each sequence in the multiple alignment.
+ - Some MAF files may contain two optional line types:
+
+ - An "i" line containing information about what is in the aligned species DNA before and after the immediately preceding "s" line;
+ - An "e" line containing information about the size of the gap between the alignments that span the current block.
+
+ </help>
+</tool>
+
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_stats.py
--- a/tools/maf/maf_stats.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_stats.py Fri Sep 04 10:40:16 2009 -0400
@@ -64,16 +64,19 @@
total_length += region_length
coverage = { dbkey: BitSet( region_length ) }
- for block in maf_utilities.get_chopped_blocks_for_region( index, src, region, force_strand='+' ):
- #make sure all species are known
- for c in block.components:
- spec = c.src.split( '.' )[0]
+
+ for block in index.get_as_iterator( src, region.start, region.end ):
+ for spec in maf_utilities.get_species_in_block( block ):
if spec not in coverage: coverage[spec] = BitSet( region_length )
- start_offset, alignment = maf_utilities.reduce_block_by_primary_genome( block, dbkey, region.chrom, region.start )
- for i in range( len( alignment[dbkey] ) ):
- for spec, text in alignment.items():
- if text[i] != '-':
- coverage[spec].set( start_offset + i )
+ for block in maf_utilities.iter_blocks_split_by_species( block ):
+ if maf_utilities.component_overlaps_region( block.get_component_by_src( src ), region ):
+ #need to chop and orient the block
+ block = maf_utilities.orient_block_by_region( maf_utilities.chop_block_by_region( block, src, region ), src, region, force_strand = '+' )
+ start_offset, alignment = maf_utilities.reduce_block_by_primary_genome( block, dbkey, region.chrom, region.start )
+ for i in range( len( alignment[dbkey] ) ):
+ for spec, text in alignment.items():
+ if text[i] != '-':
+ coverage[spec].set( start_offset + i )
if summary:
#record summary
for key in coverage.keys():
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_stats.xml
--- a/tools/maf/maf_stats.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_stats.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="maf_stats1" name="MAF Coverage Stats">
+<tool id="maf_stats1" name="MAF Coverage Stats" version="1.0.1">
<description>Alignment coverage information</description>
<command interpreter="python">
maf_stats.py
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_to_fasta.xml
--- a/tools/maf/maf_to_fasta.xml Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_to_fasta.xml Fri Sep 04 10:40:16 2009 -0400
@@ -1,4 +1,4 @@
-<tool id="MAF_To_Fasta1" name="Maf to FASTA">
+<tool id="MAF_To_Fasta1" name="MAF to FASTA" version="1.0.1">
<description>Converts a MAF formated file to FASTA format</description>
<command interpreter="python">
#if $fasta_target_type.fasta_type == "multiple":#maf_to_fasta_multiple_sets.py $input1 $out_file1 $fasta_target_type.species $fasta_target_type.complete_blocks
@@ -47,7 +47,7 @@
<param name="species" value="hg17,panTro1,rheMac2,rn3,mm7,canFam2,bosTau2,dasNov1"/>
<param name="complete_blocks" value="partial_allowed"/>
<param name="fasta_type" value="multiple"/>
- <output name="out_file1" file="cf_maf2fasta.dat" ftype="fasta"/>
+ <output name="out_file1" file="cf_maf2fasta_new.dat" ftype="fasta"/>
</test>
</tests>
<help>
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_to_fasta_concat.py
--- a/tools/maf/maf_to_fasta_concat.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_to_fasta_concat.py Fri Sep 04 10:40:16 2009 -0400
@@ -1,7 +1,7 @@
#!/usr/bin/env python
"""
-Read a maf and print the text as a fasta file, concatenating blocks
+Read a maf and output a single block fasta file, concatenating blocks
usage %prog species1,species2 maf_file out_file
"""
@@ -15,28 +15,43 @@
assert sys.version_info[:2] >= ( 2, 4 )
def __main__():
- print "Restricted to species:", sys.argv[1]
+ try:
+ species = maf_utilities.parse_species_option( sys.argv[1] )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error determining species value: %s" % e )
+ try:
+ input_filename = sys.argv[2]
+ except Exception, e:
+ maf_utilities.tool_fail( "Error reading MAF filename: %s" % e )
+ try:
+ file_out = open( sys.argv[3], 'w' )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error opening file for output: %s" % e )
- texts = {}
+ if species:
+ print "Restricted to species: %s" % ', '.join( species )
+ else:
+ print "Not restricted to species."
- input_filename = sys.argv[2]
- output_filename = sys.argv[3]
- species = sys.argv[1].split( ',' )
+ if not species:
+ try:
+ species = maf_utilities.get_species_in_maf( input_filename )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error determining species in input MAF: %s" % e )
- if "None" in species:
- species = maf_utilities.get_species_in_maf( input_filename )
-
- file_out = open( output_filename, 'w' )
for spec in species:
file_out.write( ">" + spec + "\n" )
try:
- for block in maf.Reader( open( input_filename, 'r' ) ):
- component = block.get_component_by_src_start( spec )
- if component: file_out.write( component.text )
- else: file_out.write( "-" * block.text_size )
- except:
- print >>sys.stderr, "Your MAF file appears to be malformed."
- sys.exit()
+ for start_block in maf.Reader( open( input_filename, 'r' ) ):
+ for block in maf_utilities.iter_blocks_split_by_species( start_block ):
+ block.remove_all_gap_columns() #remove extra gaps
+ component = block.get_component_by_src_start( spec ) #blocks only have one occurrence of a particular species, so this is safe
+ if component:
+ file_out.write( component.text )
+ else:
+ file_out.write( "-" * block.text_size )
+ except Exception, e:
+ maf_utilities.tool_fail( "Your MAF file appears to be malformed: %s" % e )
file_out.write( "\n" )
file_out.close()
diff -r 99dcba7af5b6 -r e929a2d803e4 tools/maf/maf_to_fasta_multiple_sets.py
--- a/tools/maf/maf_to_fasta_multiple_sets.py Fri Sep 04 10:31:23 2009 -0400
+++ b/tools/maf/maf_to_fasta_multiple_sets.py Fri Sep 04 10:40:16 2009 -0400
@@ -1,7 +1,7 @@
#!/usr/bin/env python
"""
-Read a maf and print the text as a fasta file.
+Read a maf and output a multiple block fasta file.
"""
#Dan Blankenberg
import sys
@@ -13,35 +13,46 @@
assert sys.version_info[:2] >= ( 2, 4 )
def __main__():
- print "Restricted to species:", sys.argv[3]
+ try:
+ maf_reader = maf.Reader( open( sys.argv[1] ) )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error opening input MAF: %s" % e )
+ try:
+ file_out = open( sys.argv[2], 'w' )
+ except Exception, e:
+ maf_utilities.tool_fail( "Error opening file for output: %s" % e )
+ try:
+ species = maf_utilities.parse_species_option( sys.argv[3] )
+ if species:
+ num_species = len( species )
+ else:
+ num_species = 0
+ except Exception, e:
+ maf_utilities.tool_fail( "Error determining species value: %s" % e )
+ try:
+ partial = sys.argv[4]
+ except Exception, e:
+ maf_utilities.tool_fail( "Error determining keep partial value: %s" % e )
- input_filename = sys.argv[1]
- output_filename = sys.argv[2]
- species = sys.argv[3].split( ',' )
- partial = sys.argv[4]
- num_species = len( species )
+ if species:
+ print "Restricted to species: %s" % ', '.join( species )
+ else:
+ print "Not restricted to species."
- file_in = open( input_filename, 'r' )
- try:
- maf_reader = maf.Reader( file_in )
-
- file_out = open( output_filename, 'w' )
-
- for block_num, block in enumerate( maf_reader ):
- if "None" not in species:
- block = block.limit_to_species( species )
- if len( block.components ) < num_species and partial == "partial_disallowed": continue
- for component in block.components:
- spec, chrom = maf.src_split( component.src )
- if not spec or not chrom:
- spec = chrom = component.src
- file_out.write( "%s\n" % maf_utilities.get_fasta_header( component, suffix = "%s_%i" % ( spec, block_num ) ) )
- file_out.write( "%s\n" % component.text )
- file_out.write( "\n" )
- file_in.close()
- except Exception, e:
- print >>sys.stderr, "Your MAF file appears to be malformed:", e
- sys.exit()
+ for block_num, block in enumerate( maf_reader ):
+ if species:
+ block = block.limit_to_species( species )
+ if len( maf_utilities.get_species_in_block( block ) ) < num_species and partial == "partial_disallowed": continue
+ spec_counts = {}
+ for component in block.components:
+ spec, chrom = maf_utilities.src_split( component.src )
+ if spec not in spec_counts:
+ spec_counts[ spec ] = 0
+ else:
+ spec_counts[ spec ] += 1
+ file_out.write( "%s\n" % maf_utilities.get_fasta_header( component, { 'block_index' : block_num, 'species' : spec, 'sequence_index' : spec_counts[ spec ] }, suffix = "%s_%i_%i" % ( spec, block_num, spec_counts[ spec ] ) ) )
+ file_out.write( "%s\n" % component.text )
+ file_out.write( "\n" )
file_out.close()
if __name__ == "__main__": __main__()
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/ba2412c2a4d9
changeset: 2659:ba2412c2a4d9
user: guru
date: Wed Sep 02 13:36:16 2009 -0400
description:
Added a new option to 'fetch closest features' tool to return the closest feature either upstream or downstream.
3 file(s) affected in this change:
test-data/closest_features_either.interval
tools/new_operations/flanking_features.py
tools/new_operations/flanking_features.xml
diffs (524 lines):
diff -r 0cb12b9d9d4d -r ba2412c2a4d9 test-data/closest_features_either.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_either.interval Wed Sep 02 13:36:16 2009 -0400
@@ -0,0 +1,424 @@
+chr22 30128507 30133507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30136507 30141507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30132507 30137507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30140507 30145507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30136507 30141507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30128507 30133507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30140507 30145507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30132507 30137507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30144507 30149507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30136507 30141507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30148507 30153507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30140507 30145507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30152507 30157507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30144507 30149507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30156507 30161507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30148507 30153507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30160507 30165507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30152507 30157507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30164507 30169507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30156507 30161507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30168507 30173507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30160507 30165507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30172507 30177507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30164507 30169507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30176507 30181507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30168507 30173507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30180507 30185507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30172507 30177507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30184507 30189507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30176507 30181507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30188507 30193507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30180507 30185507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30192507 30197507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30184507 30189507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30196507 30201507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30188507 30193507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30200507 30205507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30192507 30197507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30204507 30209507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30196507 30201507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30208507 30213507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30200507 30205507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30212507 30217507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30204507 30209507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30216507 30221507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30208507 30213507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30220507 30225507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30212507 30217507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30224507 30229507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30216507 30221507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30228507 30233507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30220507 30225507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30232507 30237507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30224507 30229507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30236507 30241507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30228507 30233507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30240507 30245507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30232507 30237507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30244507 30249507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30236507 30241507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30248507 30253507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30240507 30245507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30252507 30257507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30244507 30249507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30256507 30261507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30248507 30253507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30260507 30265507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30252507 30257507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30264507 30269507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30256507 30261507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30268507 30273507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30260507 30265507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30272507 30277507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30264507 30269507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30276507 30281507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30268507 30273507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30280507 30285507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30272507 30277507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30284507 30289507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30276507 30281507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30288507 30293507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30280507 30285507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30292507 30297507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30284507 30289507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30296507 30301507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30288507 30293507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30300507 30305507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30292507 30297507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30304507 30309507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30296507 30301507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30308507 30313507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30300507 30305507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30312507 30317507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30304507 30309507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30316507 30321507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30308507 30313507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30320507 30325507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30312507 30317507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30324507 30329507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30316507 30321507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30328507 30333507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30320507 30325507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30332507 30337507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30324507 30329507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30336507 30341507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30328507 30333507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30340507 30345507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30332507 30337507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30344507 30349507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30336507 30341507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30348507 30353507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30340507 30345507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30352507 30357507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30344507 30349507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30356507 30361507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30348507 30353507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30360507 30365507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30352507 30357507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30364507 30369507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30356507 30361507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30368507 30373507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30360507 30365507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30372507 30377507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30364507 30369507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30376507 30381507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30368507 30373507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30380507 30385507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30372507 30377507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30384507 30389507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30376507 30381507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30388507 30393507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30380507 30385507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30392507 30397507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30384507 30389507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30396507 30401507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30388507 30393507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30400507 30405507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30392507 30397507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30404507 30409507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30396507 30401507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30408507 30413507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30400507 30405507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30412507 30417507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30404507 30409507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30416507 30421507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30408507 30413507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30420507 30425507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30412507 30417507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30424507 30429507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30416507 30421507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30428507 30433507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30420507 30425507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30432507 30437507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30424507 30429507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30436507 30441507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30428507 30433507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30440507 30445507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30432507 30437507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30444507 30449507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30436507 30441507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30448507 30453507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30440507 30445507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30452507 30457507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30444507 30449507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30456507 30461507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30448507 30453507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30460507 30465507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30452507 30457507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30464507 30469507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30456507 30461507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30468507 30473507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30460507 30465507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30472507 30477507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30464507 30469507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30476507 30481507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30468507 30473507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30480507 30485507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30472507 30477507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30484507 30489507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30476507 30481507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30488507 30493507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30480507 30485507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30492507 30497507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30484507 30489507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30496507 30501507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30488507 30493507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30500507 30505507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30492507 30497507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30504507 30509507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30496507 30501507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30508507 30513507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30500507 30505507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30512507 30517507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30504507 30509507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30516507 30521507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30508507 30513507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30520507 30525507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30512507 30517507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30524507 30529507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30516507 30521507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30528507 30533507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30520507 30525507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30532507 30537507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30524507 30529507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30536507 30541507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30528507 30533507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30540507 30545507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30532507 30537507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30544507 30549507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30536507 30541507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30548507 30553507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30540507 30545507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30552507 30557507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30544507 30549507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30556507 30561507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30548507 30553507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30560507 30565507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30552507 30557507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30564507 30569507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30556507 30561507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30568507 30573507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30560507 30565507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30572507 30577507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30564507 30569507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30576507 30581507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30568507 30573507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30580507 30585507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30572507 30577507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30584507 30589507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30576507 30581507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30588507 30593507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30580507 30585507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30592507 30597507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30584507 30589507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30596507 30601507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30588507 30593507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30600507 30605507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30592507 30597507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30604507 30609507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30596507 30601507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30608507 30613507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30600507 30605507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30612507 30617507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30604507 30609507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30616507 30621507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30608507 30613507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30620507 30625507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30612507 30617507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30624507 30629507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30616507 30621507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30628507 30633507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30620507 30625507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30632507 30637507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30624507 30629507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30636507 30641507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30628507 30633507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30640507 30645507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30632507 30637507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30644507 30649507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30636507 30641507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30648507 30653507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30640507 30645507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30652507 30657507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30644507 30649507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30656507 30661507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30648507 30653507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30660507 30665507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30652507 30657507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30664507 30669507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30656507 30661507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30668507 30673507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30660507 30665507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30672507 30677507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30664507 30669507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30676507 30681507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30668507 30673507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30680507 30685507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30672507 30677507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30684507 30689507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30676507 30681507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30688507 30693507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30680507 30685507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30692507 30697507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30684507 30689507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30696507 30701507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30688507 30693507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30700507 30705507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30692507 30697507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30704507 30709507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30696507 30701507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30708507 30713507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30700507 30705507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30712507 30717507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30704507 30709507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30716507 30721507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30708507 30713507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30720507 30725507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30712507 30717507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30724507 30729507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30716507 30721507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30728507 30733507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30720507 30725507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30732507 30737507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30724507 30729507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30736507 30741507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30728507 30733507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30740507 30745507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30732507 30737507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30744507 30749507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30736507 30741507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30748507 30753507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30740507 30745507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30752507 30757507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30744507 30749507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30756507 30761507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30748507 30753507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30760507 30765507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30752507 30757507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30764507 30769507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30756507 30761507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30768507 30773507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30760507 30765507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30772507 30777507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30764507 30769507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30776507 30781507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30768507 30773507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30780507 30785507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30772507 30777507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30784507 30789507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30776507 30781507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30788507 30793507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30780507 30785507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30792507 30797507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30784507 30789507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30796507 30801507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30788507 30793507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30800507 30805507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30792507 30797507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30804507 30809507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30796507 30801507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30808507 30813507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30800507 30805507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30812507 30817507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30804507 30809507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30816507 30821507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30808507 30813507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30820507 30825507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30812507 30817507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30824507 30829507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30816507 30821507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30828507 30833507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30820507 30825507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30832507 30837507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30824507 30829507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30836507 30841507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30828507 30833507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30840507 30845507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30832507 30837507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30844507 30849507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30836507 30841507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30848507 30853507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30840507 30845507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30852507 30857507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30844507 30849507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30856507 30861507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30848507 30853507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30860507 30865507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30852507 30857507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30864507 30869507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30856507 30861507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30868507 30873507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30860507 30865507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30872507 30877507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30864507 30869507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30876507 30881507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30868507 30873507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30880507 30885507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30872507 30877507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30884507 30889507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30876507 30881507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30888507 30893507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30880507 30885507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30892507 30897507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30884507 30889507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30896507 30901507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30888507 30893507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30900507 30905507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30892507 30897507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30904507 30909507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30896507 30901507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30908507 30913507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30900507 30905507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30912507 30917507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30904507 30909507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30916507 30921507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30908507 30913507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30920507 30925507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30912507 30917507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30924507 30929507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30916507 30921507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30928507 30933507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30920507 30925507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30932507 30937507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30924507 30929507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30936507 30941507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30928507 30933507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30940507 30945507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30932507 30937507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30944507 30949507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30936507 30941507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30948507 30953507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30940507 30945507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30952507 30957507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30944507 30949507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30956507 30961507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30948507 30953507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30960507 30965507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30952507 30957507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30964507 30969507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30956507 30961507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30968507 30973507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30960507 30965507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30972507 30977507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30964507 30969507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30976507 30981507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30968507 30973507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30980507 30985507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30972507 30977507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30984507 30989507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30976507 30981507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30988507 30993507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30980507 30985507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30992507 30997507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30984507 30989507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 30996507 31001507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30988507 30993507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31000507 31005507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30992507 30997507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31004507 31009507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 30996507 31001507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31008507 31013507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31000507 31005507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31012507 31017507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31004507 31009507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31016507 31021507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31008507 31013507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31020507 31025507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31012507 31017507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31024507 31029507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31016507 31021507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31028507 31033507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31020507 31025507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31032507 31037507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31024507 31029507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31036507 31041507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31028507 31033507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31040507 31045507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31032507 31037507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31044507 31049507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31036507 31041507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31048507 31053507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31040507 31045507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31052507 31057507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31044507 31049507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31056507 31061507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31048507 31053507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31060507 31065507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31052507 31057507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31064507 31069507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31056507 31061507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31068507 31073507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31060507 31065507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31072507 31077507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31064507 31069507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31076507 31081507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31068507 31073507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31080507 31085507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31072507 31077507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31084507 31089507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31076507 31081507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31088507 31093507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31080507 31085507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31092507 31097507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31084507 31089507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31096507 31101507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31088507 31093507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31100507 31105507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31092507 31097507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31104507 31109507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31096507 31101507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31108507 31113507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31100507 31105507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31112507 31117507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31104507 31109507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31116507 31121507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31108507 31113507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31120507 31125507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31112507 31117507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31124507 31129507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31116507 31121507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31128507 31133507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31120507 31125507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31132507 31137507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31124507 31129507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31136507 31141507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31128507 31133507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31140507 31145507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31132507 31137507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31144507 31149507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31136507 31141507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31148507 31153507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31140507 31145507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31152507 31157507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31144507 31149507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31156507 31161507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31148507 31153507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31160507 31165507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31152507 31157507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31164507 31169507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31156507 31161507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31168507 31173507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31160507 31165507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31172507 31177507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31164507 31169507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31176507 31181507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31168507 31173507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31180507 31185507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31172507 31177507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31184507 31189507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31176507 31181507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31188507 31193507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31180507 31185507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31192507 31197507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31184507 31189507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31196507 31201507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31188507 31193507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31200507 31205507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31192507 31197507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31204507 31209507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31196507 31201507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31208507 31213507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31200507 31205507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31212507 31217507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31204507 31209507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31216507 31221507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31208507 31213507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31220507 31225507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31212507 31217507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31224507 31229507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31216507 31221507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31228507 31233507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31220507 31225507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31232507 31237507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31224507 31229507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31236507 31241507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31228507 31233507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31240507 31245507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31232507 31237507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31244507 31249507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31236507 31241507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31248507 31253507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31240507 31245507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31252507 31257507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31244507 31249507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31256507 31261507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31248507 31253507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31260507 31265507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31252507 31257507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31264507 31269507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31256507 31261507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31268507 31273507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31260507 31265507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31272507 31277507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31264507 31269507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31276507 31281507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31268507 31273507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31280507 31285507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31272507 31277507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31284507 31289507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31276507 31281507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31288507 31293507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31280507 31285507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31292507 31297507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31284507 31289507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31296507 31301507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31288507 31293507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31300507 31305507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31292507 31297507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31304507 31309507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31296507 31301507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31308507 31313507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31300507 31305507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31312507 31317507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31304507 31309507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31316507 31321507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31308507 31313507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31320507 31325507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31312507 31317507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31324507 31329507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31316507 31321507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31328507 31333507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31320507 31325507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31332507 31337507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31324507 31329507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31336507 31341507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31328507 31333507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31340507 31345507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31332507 31337507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31344507 31349507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31336507 31341507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31348507 31353507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31340507 31345507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31352507 31357507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31344507 31349507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31356507 31361507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31348507 31353507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31360507 31365507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31352507 31357507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31364507 31369507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31356507 31361507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31368507 31373507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31360507 31365507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31372507 31377507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31364507 31369507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31376507 31381507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31368507 31373507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31380507 31385507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31372507 31377507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31384507 31389507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31376507 31381507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31388507 31393507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31380507 31385507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31392507 31397507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31384507 31389507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31396507 31401507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31388507 31393507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31400507 31405507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31392507 31397507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31404507 31409507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31396507 31401507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31408507 31413507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31400507 31405507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31412507 31417507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31404507 31409507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31416507 31421507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31408507 31413507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31420507 31425507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31412507 31417507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31424507 31429507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31416507 31421507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31428507 31433507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31420507 31425507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31432507 31437507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31424507 31429507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31436507 31441507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31428507 31433507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31440507 31445507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31432507 31437507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31444507 31449507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31436507 31441507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31448507 31453507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31440507 31445507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31452507 31457507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31444507 31449507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31456507 31461507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31448507 31453507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31460507 31465507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31452507 31457507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31464507 31469507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31456507 31461507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31468507 31473507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31460507 31465507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31472507 31477507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31464507 31469507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31476507 31481507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31468507 31473507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31480507 31485507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31472507 31477507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31484507 31489507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31476507 31481507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31488507 31493507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31480507 31485507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31492507 31497507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31484507 31489507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31496507 31501507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31488507 31493507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31500507 31505507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31492507 31497507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31504507 31509507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31496507 31501507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31508507 31513507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31500507 31505507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31512507 31517507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31504507 31509507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31516507 31521507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31508507 31513507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31520507 31525507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31512507 31517507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31524507 31529507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31516507 31521507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31528507 31533507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31520507 31525507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31532507 31537507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31524507 31529507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31536507 31541507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31528507 31533507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31540507 31545507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31532507 31537507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31544507 31549507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31536507 31541507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31548507 31553507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31540507 31545507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31552507 31557507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31544507 31549507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31556507 31561507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31548507 31553507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31560507 31565507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31552507 31557507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31564507 31569507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31556507 31561507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31568507 31573507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31560507 31565507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31572507 31577507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31564507 31569507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31576507 31581507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31568507 31573507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31580507 31585507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31572507 31577507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31584507 31589507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31576507 31581507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31588507 31593507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31580507 31585507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31592507 31597507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31584507 31589507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31596507 31601507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31588507 31593507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31600507 31605507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31592507 31597507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31604507 31609507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31596507 31601507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31608507 31613507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31600507 31605507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31612507 31617507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31604507 31609507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31616507 31621507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31608507 31613507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31620507 31625507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31612507 31617507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31624507 31629507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31616507 31621507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31628507 31633507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31620507 31625507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31632507 31637507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31624507 31629507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31636507 31641507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31628507 31633507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31640507 31645507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31632507 31637507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31644507 31649507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31636507 31641507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31648507 31653507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31640507 31645507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31652507 31657507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31644507 31649507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31656507 31661507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31648507 31653507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31660507 31665507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31652507 31657507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31664507 31669507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31656507 31661507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31668507 31673507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31660507 31665507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31672507 31677507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31664507 31669507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31676507 31681507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31668507 31673507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31680507 31685507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31672507 31677507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31684507 31689507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31676507 31681507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31688507 31693507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31680507 31685507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31692507 31697507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31684507 31689507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31696507 31701507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31688507 31693507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31700507 31705507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31692507 31697507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31704507 31709507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31696507 31701507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31708507 31713507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31700507 31705507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31712507 31717507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31704507 31709507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31716507 31721507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31708507 31713507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31720507 31725507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31712507 31717507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31724507 31729507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31716507 31721507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31728507 31733507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31720507 31725507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31732507 31737507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31724507 31729507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31736507 31741507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31728507 31733507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31740507 31745507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31732507 31737507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31744507 31749507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31736507 31741507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31748507 31753507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31740507 31745507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31752507 31757507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31744507 31749507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31756507 31761507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31748507 31753507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31760507 31765507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31752507 31757507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31764507 31769507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31756507 31761507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31768507 31773507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31760507 31765507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31772507 31777507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31764507 31769507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31776507 31781507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31768507 31773507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31780507 31785507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31772507 31777507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31784507 31789507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31776507 31781507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31788507 31793507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31780507 31785507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31792507 31797507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31784507 31789507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31796507 31801507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31788507 31793507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31800507 31805507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31792507 31797507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31804507 31809507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31796507 31801507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31808507 31813507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31800507 31805507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31812507 31817507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31804507 31809507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31816507 31821507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31808507 31813507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
+chr22 31820507 31825507 uc003bnx.1_cds_2_0_chr22_29227_f 0 + chr22 31812507 31817507 uc003bnx.1_cds_2_0_chr22_29227_f 0 +
diff -r 0cb12b9d9d4d -r ba2412c2a4d9 tools/new_operations/flanking_features.py
--- a/tools/new_operations/flanking_features.py Tue Sep 01 17:01:44 2009 -0400
+++ b/tools/new_operations/flanking_features.py Wed Sep 02 13:36:16 2009 -0400
@@ -62,12 +62,16 @@
def proximal_region_finder(readers, region, comments=True):
primary = readers[0]
features = readers[1]
+ either = False
if region == 'Upstream':
up, down = True, False
elif region == 'Downstream':
up, down = False, True
else:
up, down = True, True
+ if region == 'Either':
+ either = True
+
# Read features into memory:
rightTree = quicksect.IntervalTree()
for item in features:
@@ -107,14 +111,29 @@
res_ind = ends.index(max(ends)) #fetch the index of the closest interval i.e. the interval with the max end from the results_up list
else:
res_ind = 0
- map(outfields.append, result_up[res_ind].other)
- yield outfields
+ if not(either):
+ map(outfields.append, result_up[res_ind].other)
+ yield outfields
if result_down:
outfields = list(interval)
- map(outfields.append, result_down[-1].other) #The last element of result_down will be the closest element to the given interval
+ if not(either):
+ map(outfields.append, result_down[-1].other) #The last element of result_down will be the closest element to the given interval
+ yield outfields
+
+ if either:
+ if result_up and result_down:
+ if abs(start - int(result_up[res_ind].end)) <= abs(end - int(result_down[-1].start)):
+ map(outfields.append, result_up[res_ind].other)
+ else:
+ map(outfields.append, result_down[-1].other) #The last element of result_down will be the closest element to the given interval
+ elif result_up:
+ map(outfields.append, result_up[res_ind].other)
+ else:
+ map(outfields.append, result_down[-1].other) #The last element of result_down will be the closest element to the given interval
yield outfields
-
+
+
def main():
options, args = doc_optparse.parse( __doc__ )
try:
diff -r 0cb12b9d9d4d -r ba2412c2a4d9 tools/new_operations/flanking_features.xml
--- a/tools/new_operations/flanking_features.xml Tue Sep 01 17:01:44 2009 -0400
+++ b/tools/new_operations/flanking_features.xml Wed Sep 02 13:36:16 2009 -0400
@@ -1,10 +1,11 @@
-<tool id="flanking_features_1" name="Fetch closest feature" version="2.0.0">
+<tool id="flanking_features_1" name="Fetch closest feature" version="3.0.0">
<description> for every interval</description>
<command interpreter="python">flanking_features.py $input1 $input2 $out_file1 $direction -1 ${input1.metadata.chromCol},${input1.metadata.startCol},${input1.metadata.endCol},${input1.metadata.strandCol} -2 ${input2.metadata.chromCol},${input2.metadata.startCol},${input2.metadata.endCol},${input2.metadata.strandCol}</command>
<inputs>
<param format="interval" name="input1" type="data" label="For every interval in"/>
- <param format="interval" name="input2" type="data" label="Fetch features from"/>
- <param name="direction" type="select" label="Location of the flanking features">
+ <param format="interval" name="input2" type="data" label="Fetch closest feature(s) from"/>
+ <param name="direction" type="select" label="Located">
+ <option value="Either">Either Upstream or Downstream</option>
<option value="Both">Both Upstream and Downstream</option>
<option value="Upstream">Upstream</option>
<option value="Downstream">Downstream</option>
@@ -14,13 +15,19 @@
<data format="interval" name="out_file1" />
</outputs>
<tests>
- <test>
- <param name="input1" value="4_windows.bed"/>
+ <test>
+ <param name="input1" value="4_windows.bed"/>
+ <param name="input2" value="4_windows_2.bed"/>
+ <param name="direction" value="Either"/>
+ <output name="out_file1" file="closest_features_either.interval"/>
+ </test>
+ <test>
+ <param name="input1" value="4_windows.bed"/>
<param name="input2" value="4_windows_2.bed"/>
<param name="direction" value="Both"/>
<output name="out_file1" file="closest_features.interval"/>
- </test>
- <test>
+ </test>
+ <test>
<param name="input1" value="4_windows.bed"/>
<param name="input2" value="4_windows_2.bed"/>
<param name="direction" value="Upstream"/>
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/adff03258b45
changeset: 2660:adff03258b45
user: anton(a)nekrut-mbp.bx.psu.edu
date: Fri Sep 04 10:23:37 2009 -0400
description:
Added pileup parser. Pardon the perl = used to its regexes too much
12 file(s) affected in this change:
static/images/pileup_parser_help1.png
static/images/pileup_parser_help2.png
test-data/pileup_parser.10col.20-3-yes-yes.pileup.out
test-data/pileup_parser.10col.pileup
test-data/pileup_parser.6col.20-3-no-no.pileup.out
test-data/pileup_parser.6col.20-3-yes-no.pileup.out
test-data/pileup_parser.6col.20-3-yes-yes.pileup.out
test-data/pileup_parser.6col.40-3-yes-yes.pileup.out
test-data/pileup_parser.6col.pileup
tool_conf.xml.sample
tools/samtools/pileup_parser.pl
tools/samtools/pileup_parser.xml
diffs (truncated from 3114 to 3000 lines):
diff -r ba2412c2a4d9 -r adff03258b45 static/images/pileup_parser_help1.png
Binary file static/images/pileup_parser_help1.png has changed
diff -r ba2412c2a4d9 -r adff03258b45 static/images/pileup_parser_help2.png
Binary file static/images/pileup_parser_help2.png has changed
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.10col.20-3-yes-yes.pileup.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.10col.20-3-yes-yes.pileup.out Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,86 @@
+chrM 13 14 A A 56 0 25 18 .......G.........^:. BIIIIIII+IIIIIIIII 0 0 1 0 17
+chrM 18 19 T T 55 0 25 20 ..................GG IIIIIIIIIIIIIIIIII'A 0 0 1 0 19
+chrM 35 36 A A 103 0 25 30 .$..N...G.....C...............^:. 7:>"EIIIEI5><$C7B?B=IIIIIIIIII 0 0 1 0 28
+chrM 58 59 A A 50 0 24 16 ...............C IB20III:<DIII#II 0 1 0 0 13
+chrM 59 60 C C 50 0 24 16 .$.............A. I?>=IIIIIIIIIIBI 1 0 0 0 16
+chrM 157 158 A G 117 117 19 62 GGGGGGGGGGGGGGGGGGGNNNGGGGGG.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGg^:g II6IIII<4I+IIIIIIII"""IIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII> 0 0 56 0 56
+chrM 170 171 T T 141 0 21 46 .$.$.$.$.$.....................................,,.^:G IIIII=>IIIIIIIIIIIIIIDDII7IGIIIIIHIIIIIIIIIBI8 0 0 1 0 46
+chrM 172 173 A A 130 0 20 42 .$.$...C...............................,,... 914HG841?IA0III:IB@>;@FIIIIIIIEIIBII;IIIII 0 1 0 0 37
+chrM 173 174 A A 122 0 21 40 .$.$..........C......................,,... ?DCI?@I7C5I*I9C9IIIE?C>::I8IIIIIIIIIIIII 0 1 0 0 39
+chrM 187 188 A A 36 0 21 13 G$.$.$....,,.... II5II5,IIIIII 0 0 1 0 12
+chrM 195 196 T T 17 0 19 5 G.... <IIII 0 0 1 0 5
+chrM 284 285 G G 34 0 15 11 ....T....^!.^!. IIIIIIIIIII 0 0 0 1 11
+chrM 285 286 T T 33 0 15 11 ..C..N.A... AI&II"II(II 1 0 0 0 8
+chrM 303 304 G G 41 0 18 13 ...A....,.,., IIIIIIIIIIII* 1 0 0 0 12
+chrM 310 311 T T 41 0 18 13 .$...C...,.,., IIIIIIIIIIII* 0 1 0 0 12
+chrM 347 348 T T 4 0 20 3 ,$.$A IIA 1 0 0 0 3
+chrM 354 355 A C 14 36 25 4 .ccc IIII 0 3 0 0 4
+chrM 355 356 T C 39 39 25 4 Cccc IIII 0 4 0 0 4
+chrM 380 381 C T 77 108 25 28 tttttttTttttgttttttttttt^:t^:t^:t^:t IIIIIIIIIIII&I7CI>BCA296+IA1 0 0 0 24 24
+chrM 383 384 A A 76 0 25 30 ,,,,,,,.,c,,g,,,,,,,g,,,,,,g,. IIIIIIIIIIII$IIIIIII$IIIIF,4II 0 1 0 0 26
+chrM 385 386 A G 88 120 25 32 gggggggGggnggggggggggggggggggGgg III>IIIIII"I&IIIIIIIIIIII?IIDI94 0 0 29 0 29
+chrM 414 415 C T 75 75 25 16 t$t$tttttTttttTTTT IIIIIII>II93IIII 0 0 0 15 15
+chrM 464 465 C C 169 0 25 65 ,.............,,.....A.,......,..............,,,..........,a...,^:A IIIIBI>H1IIIIB$)IIIII$IIIIIIIIII0IIIII6IIIIIIHIIIIIIIIIIIII&IIICI 1 0 0 0 59
+chrM 468 469 T T 207 0 25 66 .$.$.$.........,,.......,......,..............,n,..........,,...,G... III>I44EIIICI@IIEDC$IBIIII(IIIIDIIII@IIIIII1"0IIII%IIIIII1III7IIII 0 0 1 0 57
+chrM 471 472 C C 187 0 25 72 .$.$.....,t.......,....A.,..............,a,..........,a...,A.......,,^:.^:.^:.^:.^:. I@IIIIII&IIIFG6IIIIII$IIIIIIIII$IIFIIII:IIIIIIIIIIII%IIII,IIIIII/I-IIIII 1 0 0 0 65
+chrM 490 491 C C 212 0 23 79 ..n,,....A.....,,...,........t,.....,....,..........,....,.,,...,.....,,..,.,., II"IIIIII&II:IIIIIIII(II@HIII;IIIIIIIIIIIIIIIIII?IIIIIIIIIIFIIIIIIIIIII+IIII3II 0 0 0 1 74
+chrM 506 507 A A 150 0 21 76 .$.$.$.$C$,....,..........c....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,....^:.^:,^:, /I:3&I33.;I,./<G=I?IIIAIIIIIIIDI*IIIIIIIIIIIHDIIIIIIII=DIIIICIIII@IIIIII(I@6 0 1 0 0 65
+chrM 510 511 C C 213 0 21 72 .$.$.$....,....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,...A.,,..,,,,,,,^:, III@/IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGHIIIIIICIIEII6II/562I 1 0 0 0 69
+chrM 526 527 A A 164 0 22 58 ,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,..C,,,,,.,,,,, III3I=III;/II7I24II3I'II9IIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIII 0 1 0 0 52
+chrM 527 528 A A 164 0 22 58 g$,$,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,, IIIF$9IIIIIII0A6(II4I+FI%:II4=IIIII'IIIIIIIIIIIIIIII3IIIII 0 0 1 0 49
+chrM 536 537 A A 138 0 23 49 .c,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,,.,,,,,, 7II+I$0I8III/@IIIIIIIIIIIIIIIIIIIIIIIIIIIIII4I46I 0 1 0 0 43
+chrM 557 558 T T 83 0 23 27 ,$,$,$.,,,,,.,,,,,,.,.,....G.^:. III+IIIIIII>IHDIG4I4IIIIIII 0 0 1 0 24
+chrM 606 607 G G 105 0 24 43 ..............,....T..T..................^:.^!, BI-&*1&6IIIGIIII%;9I.;>IIIIIIIIIIIIIIIIIII3 0 0 0 2 35
+chrM 618 619 T T 117 0 24 48 ,.........C..C..............,...........N..,...^:. I2&-+)(4I+>CI$&I15@IIIIIIIII,IIIIIIIIIII"II5IIII 0 1 0 0 35
+chrM 627 628 G G 108 0 22 57 .$...........A........,..............,................A^!.^!.^:. 5GI<=4;>G=I<%IIIIII.IIII'IIIIIIII$IIIIIIIIIIIIIIIIIIIIIII 1 0 0 0 52
+chrM 659 660 C C 166 0 19 58 .$.$.............,...n,.,,......,......................a,... /CII>9@II277IIII9II"IIIIIIFIIIIIIBIIIIIIIIIIIIIIII$II7IIII 1 0 0 0 54
+chrM 668 669 C C 135 0 19 42 .$,$,$......,.....................Ga,......,^:. IIIIIII@IIFI@IIIIIIIII;IIIIHIII56IIIIIIIAI 1 0 1 0 42
+chrM 713 714 A A 127 0 23 96 ...,..C.....................,......................,............................C...........^:.^:.^:.^:. 67'II>(IIIAFI<IIIII?I$EI>GAGII4III8IIDIIIDIIIFIIIIG$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 0 1 0 0 91
+chrM 719 720 T T 130 0 24 96 .....C...........,...C.....G............,............G....................A...................^:.^:. D?76/$I'@'<,I7;I<I5GI'H+B.3%;=<3II1CGIIB@FII8@II0II4II$IIIII537IIIIIIIIIII#IIIIIIIII=III$IIIIIII 0 0 1 0 78
+chrM 736 737 A A 98 0 24 98 .$.$.$..............................C................T.......................C..................^:.^:.^:.^:.^:. AI709I4I>IDII.7IIC+938AEC5?IDIC5I*IIII7I21?5B1AIII#IIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 0 1 0 0 88
+chrM 747 748 A A 97 0 25 86 .$.$C$.$.$.$.$.$.$.........................................................................^:.^:.^:.^:. ?DIIIII<I8I@>B2IIFB%IIIIIIHIII;4III3IIIEEIIIIIIIIIIIIIIIIIIIIIIIIII$IIIIIIIIIIII@IIIII 0 1 0 0 81
+chrM 749 750 A A 93 0 25 77 .$.$............................C......C......................................^:. I2GII,II%@IAIIIII9IIIIIIIIIDII>I>II=IIIIIIIIIIIIIIIIIIIIIIIII8IIIII.IIIIIIIII 0 2 0 0 73
+chrM 759 760 T T 106 0 25 86 A$.....A..............G........................A........G........................^:.^:.^:.^:.^:.^:. #6<EF9$330.II4*;EII7+$I;II:3IICB4073I6;IEIIII5+II@IIIII:I+IIIIIIIIIIIIIIIIIIIIIIIIIIII 0 0 1 0 70
+chrM 762 763 A A 99 0 25 83 N........................................................................C......... "IC:6,1III=CIIIIB6GIII7G<DI>IIIIII8IIII$IHIII=I&IIIIIIIIIIIIIIIIIIIIIIII39IIIIIIIII 0 1 0 0 77
+chrM 763 764 G G 107 0 25 86 .$.$.$.$.$.$.$.$T$.....NN......................................AN...........................^:.^:.^:. 9I9I@8I4-I7IC&""=&=I+II=>I>IIIIIIIIIIIII@IIII+IIIIIIIII"II%IIIII@IIIIIIIIIIIIIIIIIIIII 1 0 0 0 76
+chrM 764 765 G G 88 0 25 77 .$.$.$.$.$.T..T.T............................................N.................... :,I;&I7D.%I'III<HD7IIIII*CIIIIIIIIII%IIIIIIIIIIIIIIIHIII"IIIIIIIIIIIIIIIIIIII 0 0 0 1 69
+chrM 767 768 T T 102 0 25 71 .$.$................................A.................................... &IBGII@5ICF>0?BII2IIIIII@+II;IEIII7I,III8IIIIIIIIIIIE@IIIIIIII8IIIIIIII 1 0 0 0 66
+chrM 777 778 G G 108 0 25 63 .$.$...T.....C......T...................T.......................^:. AG(II$IIIII&6BIII:'IIIII9IIIII=IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 0 0 0 1 59
+chrM 784 785 A A 99 0 25 63 .$.........................................................C...^:. II/+III%I.4IE:6..;8+I$B@II2IIIIDI@0IIIEGIFIIIIIIIIIIIIIIIICIIII 0 1 0 0 52
+chrM 790 791 G G 155 0 25 60 .......T.............................................,..,.^:T^:, 7III5II$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII%4II/ 0 0 0 1 56
+chrM 794 795 T T 212 0 25 74 .$.$.$.$.$.$...A....................................N.,..,..,.,,,,,,,.,,,^:.^:,^:,^!.^:.^:,^:, II$IIIIII9I9@IIDIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII*IB$I#%#II$2$II:II4I 1 0 0 0 63
+chrM 807 808 C C 226 0 22 132 .$..............NN........N,..,..,.,,,,,,,.,aa.,,..,,a,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..a.,,,,,N..,.,..,.....,...,.....^:,^:,^:,^!.^!.^:,^!.^!.^:, IIIII;AIIIIIII.""I?IIIIII"=IIIII%II$I'I+II$)7I=IGIII%;IIIIIIIIIIAIIII=IIIII+I43IIIIIIII%IIII/IIII5;"IIII1IIIIIIII7III/IIIIID46II4II: 1 0 0 0 111
+chrM 808 809 T T 242 0 22 134 .$.......................N,..,..,.,,,g,,,.,,,.,,..,,,,,,.....,..,,.,.,,n.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,C..,.....,,,..,..,^:,^:,^!. IIIIII:IIIIIII01II8I1'II"EI,III3IIII&I$II(.(IIFIIIIII+IIIIIIIII1,IIIBI"III5I34ICIIIIII/IIII?IICC53IIIHII>I2IIIIII:IIIIIIII91III1II5I4I 0 1 0 0 110
+chrM 809 810 A A 243 0 22 144 .$.$......................,.C,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,C,.,,,.,,,.,,g,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.^:,^:.^:g^:,^:,^:,^!N^!N^:,^:,^:, HIII28IIIGII;III*I,II>IB62$2IIDDIIIIIIII&IIIIIIIIIIIIIII*IIIIIII$IIIII>IIIIIIIIIIIIII#IIIIIIIIIIIIIIIII>IIIIIHEI.IIIIIIIIIIIIIIIIIIII(I#III""GI9 0 0 1 0 129
+chrM 814 815 C C 246 0 22 160 .$.$..............,..,..,.,,,,,,,.,,a.,,..,,,,,,.....,..,,.,.,,t.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,a....,,....,a^:.^:.^:, IIIIIIIIIIIIII:IIIIIII8IHIII$III*6=IIIIIII@I*IIIEI8IIIIIIIIII-IIIII:IIIIIIIII$IIII<IIIIIIIIIII2IIIIIIICIEIIIIIIII/I2IIIIIAIII*I#I2$IIII*III8C5$9$IIII9/IIII<&II8 1 0 0 0 143
+chrM 815 816 A A 255 0 22 169 ..............,.C,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,.NN,,,g,,....,,....,,..,^:,^:,^:.^:,^:,^:.^:.^:,^:,^:,^!. IHEF8II?+GI:I@I7%IIIIAIIII+IIA'II>II@IIIIIII3IIIII/III7IIIII5IIIIIIIIIIIIII+IIIIIIIIIIIIIIIAI6IIIIII;I8IIIIIIIIIIFIIIIIIIIIIIIIIIIIIIII""IIIAIIIIIIIIIIIIIIIIIIIIIIIIIIII 0 0 1 0 160
+chrM 816 817 A A 254 0 22 171 .$.C.......T..Nn..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,n,N,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,.^:.^!. IDIII?9=<0$I2"":I*III1IIIIIIII.I@FII5IIIIIIII322+IIIII3III"I"IIIGIIII2>IIIIIIIIIIIIIIIIIF4IIIIIIIII)-I>IIIIII>IIIIIIIIIIIIIIIIIIIIIII6IIIIII$IIIIIII?IIIIIIIIIIIIIIIIIIIIII 0 1 0 0 151
+chrM 819 820 A A 255 0 22 183 .$.......,..,..,.,,,,,,,.,,,.,,..,,,,,,....C,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,...C.,...t.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.g,..,,,...,g.,..,,,..^!.^:.^:.^:.^:,^:,^:, I3/I+:DII7&I&I*<III$$(II;II@II2IIIIIIIIIII&IIIIE2IHIII)IIIDIIIIDCI>/BIHIIIIIIIIIIII'III6IGIII+7IIII@IIIIIIEIIIDIIFI9IIIIII9II1,+III.I(83IIIII4GIIIIIIIIIIBI,BIIIIIIIII$IIII<5@IIIIIII9I 0 0 0 1 158
+chrM 822 823 T T 252 0 22 192 .$,$..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,c,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,n,,..,,,...,,,g,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,^:.^!.^:,^:,^:,^:,^:,^:,^:, IIIIIII79I0IIIIII$&>IIIEIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEII$IIIIEEIIIIIIII4IIIIIIII'IIIIIIII(;III;IICI@I+II"<CII>=/III6:B#0IIIII0FIIIIDIII5E6I@8IIIIGIII9II=II.$)IIIIII9>0:I59BIIII/E2?BA/ 0 1 0 0 172
+chrM 825 826 A A 255 0 22 198 .$,$.,,,,,,,.,,,.,,..,c,,,,....C,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,C.,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.g..,,,,,,,.,.,.,,,g^!.^:.^:, IIIIIIIIIIIIII=II4II#IIIIIIII'IAIIIFIIIIIIIIIFIIII40IIIIIII/IIIIIIII8IIIII'I@III4II/IIIIIIIIIIIIIIIIIICI#IIIIF%#II)IIIIADIGIIIIIIIIIIIIIIIIIII%AIIIIIIIIIIIII/337II@IIII/I:IFIII#II/BI9I;EIIIEIIII@III 0 0 1 0 178
+chrM 829 830 G G 255 0 22 198 .$,$a$.$.$,$,$,,,,.NNNN,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,C..,...C.,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,^:.^!.^:c^!.^:,^:, <II1IIIIIIIA""""I0III;IIIIIIIII=IIIIC<IIIIIIIIIIIIIIIIII.III3<IIIIIII)IIIIIF%)IIIIIIIIIIIIDIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIHIIIIIIIII9III=IFIIIIIIIIBIIIIIIIIII:IIIIIIIII:III8III9IIIIIII7II#IBI 1 0 0 0 186
+chrM 837 838 G G 255 0 22 169 .$.$.$,$.$,$..,.....,A..,.....,,,..,..,,,.,.,,,,..,,t...,,,,,,....,,....,,..,,,.,,..,,,.C.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,n,,..,....,,,,..a.,,......,..,,,..,,.,.,,,..^!. AIEIII;>IIFI<?I,FIII8I)IIII*1IIIIIIIIIIIIIIIII9IIIIIIIIIGDG;IIIIIIIIIIIIIIIIIIIIII%IIIEIE6IIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIHII"@IIIIIIIIDI%@II#IIIIIIIIIGIIIIIIIIII5IIF:III 0 0 0 1 161
+chrM 841 842 C C 239 0 22 173 .$.$.$.$,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,.T.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....aa,,..,.,,......,..,,,..,,.,.,,,..A...,..,....,,..N.....^:a^:.^!. IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC5CIIIIIIIIIIIIIIIIIIIIIII#II%+II5IIIIIIIIII-IIIIIII<IIIIIEIII4IIIII:IIIIIIIII-II>II$I*IIIIIIIIIIIIIII10$7I<BDII&III>IIIIIII0'II"IIIII&II 1 0 0 0 157
+chrM 856 857 C C 254 0 23 124 ,$..,,,,,,,.,.,.,,,,..,....,,g,..,.,,......,..,,,..,,.,.,,,......,..,....,,........a.......,....,....,..,..,...........,...^:.^:. I06IIIIIIIIICIIIIIIIIIIIIIII#IHIIIIII3IDI9IHI+$IIIII#IIIII>IIIIIIIIIIIII#=IIII8I5IFIIIIIIIIIIIIDIIII/IIDII>IIIIIIIIIII1IIIII 1 0 0 0 115
+chrM 858 859 A A 250 0 23 118 .$,$.$,$.$,$,,g..,....,,,,..,.,,......,..,,,..,,T,.,,,......,..,....,,........,.......,....,....,..g..,...........,.......^:.^:. II9IIIIII@DIC=.EIIIIE@IIIII*CI8-IB8IIIIIII$IHIIIIIIIIIIICIHIIIIIIIIIII@IIIIIHIIIFIIIIIIFI-III*III)IIIIIIIIIIIIIIIIIIII 0 0 1 0 111
+chrM 859 860 A A 255 0 23 115 ,$,$,$..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....c,........,.......,N.N.,....,..,..,..G........,........C^:.^:.^:. IIII2IEA(IIIIIHAIIIIG,=G1,IIIIII:EIIII6IIIIIII@IIIIIIIIIEIC@43:I,I@IIIIIIII"I"IIIIIIAIIIIIII*4IIIIEEIIIIIIIIIII%III 0 1 0 0 102
+chrM 864 865 G G 255 0 23 115 .$.$,$.$,$,$......,..,,,..,,.,.,,,......,..,....,,........,......N,....,...T,..,..,..........A,..............,.........^:.^!, IDIIIII6IIIIIIIIIIIIII9IAIIIIIIIIIIIIIIIII7IIIIIIIIIIIIIIII"IIIIIII,I1IIIIIIII+IEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII3 1 0 0 0 110
+chrM 866 867 A A 224 0 23 105 .$.$,$..,,,..,,T,.,,,......,..,....,,........,......N,....,....c.N,..,.CC........,..............,.........., .'IG4III/III$IFIII3III&;I@CII160II99II.G%GIFI:)ID"IHIIIIF,F*II"II;II$%+B0I/-A.IHIIIIIIIIIIIIIIIIIIIIIIIII 0 1 0 0 82
+chrM 872 873 C C 206 0 23 94 .$...,..,....,,........,.......,N.N.a....,..,..,...........,..............,....N.....,.g....T.. II9EII9IFIIIIIIII/EIBIIII?GIIII"I"III/I-IIIIIIIIBIIIIIIIIIIHIIIIIIIIIIIIIIIIII"IIIII?+$IIII$II 1 0 0 0 85
+chrM 873 874 A A 208 0 23 94 .$.$.$,$.$.$,$....,,......C.,.......,....,....c..,..,...........,.....N........,..........,.g.......^:. II<IA&IIEIIII9DII(I&IIGI63IIIIIIIIII.I/II&IIIIIBII(a)5I3.II)IIIII"IIIFIGIIIIIIIIIIII1II)IIIIIIII 0 1 0 0 81
+chrM 931 932 C C 53 0 23 22 ,,.,,.,,,a,a,,,,,,,,,^:, II*IIII.I7I6III@9<::<I 2 0 0 0 20
+chrM 936 937 C C 98 0 24 31 .,,.,,,,,,,t,a,,,,,,,,.,,,.,,a^:, IIGII/IIHI'#15I4IIGII.IIIII-I$1 1 0 0 0 22
+chrM 950 951 C C 191 0 23 76 ,$,.,,,,,,,,,a,,,,,a,,.,,,.,,,,,,,,,,,,,,,.a..,.,..,........,,,.,,.,,,,,^:.^!.^:,^:a^!. IIIIIIIIIIII:IIIII%II5IIIIIIIIII?0B1I<IIGI)II1IDII*IIIIIIII)&III&I4>%5*II4(I 1 0 0 0 62
+chrM 951 952 A A 223 0 24 81 c.,,,,,,,,,,,,,,,c,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,.^:.^:.^:.^:,^:,^:, IBIIIIIIIIIIIIIIIIIIIIIIIIGIIIIIIIII8IIIIIIIIIIIIIIIIIIIIICIIII4IGIIIIIIIIIIIIII? 0 2 0 0 80
+chrM 952 953 C C 179 0 24 86 ,.,,,,,,,,,,,,,,,,,,.n,,.,,a,,,,,,a,,,,,.,..,.,..,........a,,.,,.,,,,,..,a....,,a^:.^!.^!.^:a^:a IIIIIIIIIIIIIIIIIIIII"IIIII)III6I1)I4II(I7II?I9II(IIIIIIII+1III0I+214%II79IIIIBB0III%I 2 0 0 0 69
+chrM 956 957 T T 237 0 23 110 ,.,,,,,,,,,,,,,,,,,,N,,,N,,,,,,,,,,,,,,,G,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,NN,^:.^:,^:,^:,^:.^:.^:. I/IIIIIIIIIIIIIIIIII"III"III4IIIII)I6GHI63II86III0IIIIIIII8BII6+II56I.II71IIII;/+IIIDDIIIIIIIIII;II,""2I@03III 0 0 1 0 92
+chrM 957 958 C C 251 0 23 117 ,.,,,t,t,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,a....,a,...,,.......,..,..,..,.,,,...^:,^:,^:.^!.^:,^:,^:, I9III(I&IIIIIIIIIIIIIIIIIIIIIIIIII>I3III*III3IIII:IIIIIIII(/IIIBIII(&$IIIIIIII<+%III>@IIIIIIIIIIIII,II,I%(6IIII1II(-/ 1 0 0 0 97
+chrM 966 967 A A 246 0 23 125 ,$c,G,,,.,,,,,,,,,,,,,n,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......g...,,,.,,,,,,,.,.^:, I5I#IIIIIIIIIIIIIIIBI"IIIIII;IIIIIIIIIIII;2IIIIIIIIIIIII@IIIIIIIIIIIIIIIIIII6IIIIIIIIIIIIIIIIIIIIIIIIII/II#IIIIIIIIIIIII>IIII 0 1 0 0 120
+chrM 974 975 C C 255 0 23 125 ,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,n.,,aa,,,N,.,.,,.gg,,,,....^:n^:, IIIIIII4IIIIIIEII/I?IIIIIIII7II<IIIIIIIIIIEIIIIIIIIIIII2IIIIIIIIIIIIIIGIIIIIIIIIIIIIIII%II3IIIII"III%IIII"IIII@.IB*BIDIIIII", 1 0 1 0 113
+chrM 980 981 C C 247 0 23 123 .$.$,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,a,,,,.,.,.,,.gt,,,,....,,,..,.,,,,^:.^:,^:, IIIII6IIIIIIII;IIAIIIIIIIIICI5III&IIIIIII<IIIEIIIIIIIIIIIIII=IIIIIIIIII5I&IIIIIIHIIIII'III9IIIII92I6#9II3IIIIII+II>I&71'I45 0 0 1 0 112
+chrM 981 982 C C 255 0 23 122 ,$.$.$......,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,a.,.,.,,.g,,,,,....a,,..,.,,,a.,,^!, IIFBIEIIIIII?II@IIIIIIIIIIIIIII6II9IIIIIIIIIIIIIIIIIIIIIII5IIIIIIIIIIII&IIIFIIDIIII0$III<IIIII2II%9,?&IIIIII*/II+I59I)I1-) 2 0 0 0 108
+chrM 982 983 C C 252 0 23 122 .$.$.$...,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,a.,.,.,a.,,,,,,....,,,..,.a,,a.,,,^!,^!,^!, :IIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIIIIAIIIIIIIIIBIIII?III2I5IIIIIIIIAI#IIIIIIIIIII&)IIIIIIIIII+II&9F8IIIIIII2II)I')I$I++)I(+ 1 0 0 0 106
+chrM 983 984 A A 250 0 23 119 .$.$.$,$,$,$.$,$,$.$,$,,,,..,,....,,,...,,.......,..,..,..,.,,,...c,..,,,......,...,,,.,,,,,,,C,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,, C:IIII5II3IIIII95II/1.IIII>A5II4IA=)-)I>HIIDIIII-IIIII,III;IIII?:$III6=IIII8IIIIIII)IIIIII4I@IIIIII@=IIIIIIIIIDIIIIIID= 0 1 0 0 106
+chrM 987 988 A A 243 0 23 94 .$.$C$,$,$.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,c,,,,....,,,..,.,,,,.,,,,,,^!, I<%II,C21-@,IIGIIII==I+III%A2II<.IIIC/C$II$6EIIII9IIIIIIIIIIIIII3I6IIIII7@AIIIIIIIIIIIIGIIIIDI 0 1 0 0 80
+chrM 1005 1006 C C 138 0 18 49 .$,$,$,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,a,,,,^!, 6IIIIII00@<III<IIIIIIIIIIIIIIIFI*I8IIIIII?IGII<&2 1 0 0 0 44
+chrM 1025 1026 G G 19 0 8 33 ,$t.,,,,,,,,,,,,,,,,,,,,,,,,,,,.., II.IIIIIIIIIIIIIIIIIIIIIB=@HIIIII 0 0 0 1 32
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.10col.pileup
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.10col.pileup Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,1000 @@
+chrM 1 G G 25 0 25 1 ^:. I
+chrM 2 T T 25 0 25 1 . I
+chrM 3 T T 25 0 25 1 . I
+chrM 4 A A 36 0 25 3 .^:.^:. II+
+chrM 5 A A 36 0 25 3 ... III
+chrM 6 T T 36 0 25 3 ... III
+chrM 7 G G 42 0 25 5 ...^:.^:. IIIII
+chrM 8 T T 45 0 25 6 .....^:. IIIIII
+chrM 9 A A 51 0 25 8 ......^:.^:. IIIIIIII
+chrM 10 G G 54 0 25 9 ........^:. IIIIIIIII
+chrM 11 C C 57 0 25 10 .........^:. IIIIIIIIII
+chrM 12 T T 60 0 25 11 ..........^:. IIIIIIIIIII
+chrM 13 T T 78 0 25 17 ...........^:.^:.^:.^:.^:.^:. IIIIIIIIIIIIIIIII
+chrM 14 A A 56 0 25 18 .......G.........^:. BIIIIIII+IIIIIIIII
+chrM 15 A A 87 0 25 20 ..................^:.^:. DIIIIIII(IIIIIIIIIII
+chrM 16 T T 87 0 25 20 .................... IIIIIIIIIIIIIIIIIIII
+chrM 17 A A 87 0 25 20 .................... 9IIIIIIIIIIIIIIIIIII
+chrM 18 A A 87 0 25 20 .................... @IIIIIIIIIIIIIIIIIII
+chrM 19 T T 55 0 25 20 ..................GG IIIIIIIIIIIIIIIIII'A
+chrM 20 A A 54 0 25 20 ..................C. IIIIIIIIIIIIIII2II#$
+chrM 21 T T 87 0 25 20 .................... IIIIIIIIIIIIIIIIIIII
+chrM 22 A A 87 0 25 20 .................... IIIIIIIIIIIIIIAIIIII
+chrM 23 A A 87 0 25 20 .................... 9IIIIIIIIII0IIIIIIII
+chrM 24 A A 87 0 25 20 ........N........... IIIIIIII"IIIIICIIIII
+chrM 25 G G 57 0 25 21 ...A................^:. A@.$IIIIIIIFIIIIIIIII
+chrM 26 C C 57 0 25 21 .......A............. IIHIDII&IIIIIIIIIIIII
+chrM 27 A A 99 0 25 24 .....................^:.^:.^:. IE8IFIII9IIIIIIIIIIIIIII
+chrM 28 A A 99 0 25 24 ........................ 1FIIIIIIIIIIIIIIIIDEIIII
+chrM 29 G G 55 0 25 24 ..................NN.... ;IIIIII+HII=IIIIII""IIII
+chrM 30 G G 68 0 25 25 ...C....................^:. ;I?&IAI0IIIIIIIIIIIIIIIII
+chrM 31 C C 105 0 25 26 .........................^!. =77&IFI&III>IIIIIIIIIIIIII
+chrM 32 A A 105 0 25 26 .......................... /94$III:=IIH>@<G>ID5IIIIII
+chrM 33 C C 105 0 25 26 .......................... CFE+IIIIII<IIIIIIII?IIIIII
+chrM 34 T T 105 0 25 26 .......................... 9II+IIIIGII6I3IIIIE;IIIIII
+chrM 35 G G 80 0 25 29 ...T......................^:.^:.^:. =G7'III9II4IIII9IIIIIIIIIIIII
+chrM 36 A A 103 0 25 30 .$..N...G.....C...............^:. 7:>"EIIIEI5><$C7B?B=IIIIIIIIII
+chrM 37 A A 82 0 25 30 ..C..........................^:. ?1'=GII?7E&5/0)IIIIIIIIIIIIIII
+chrM 38 A A 94 0 25 30 ..C........................... 63+IIIA>I45IE9I>I:9IIIIIIIIIII
+chrM 39 A A 117 0 25 30 .$.$............................ IFICE%*6I@39I=6IIIIIIIIIIIIIII
+chrM 40 T T 111 0 25 28 ............................ $II292II5?<@2IEBDIIIIIIIIIII
+chrM 41 G G 91 0 25 28 C........................... 3EII.>I:5IB4?IIIIIIIIIIIIIII
+chrM 42 C C 80 0 25 29 T$.$..........................^:. #FF=-<I<IBIFAGAIIIIIIIIIIIIII
+chrM 43 C C 108 0 25 27 .$.......................... I='9C/I@I>1IIIIIIIIIIIIIIII
+chrM 44 T T 105 0 25 26 .$.$........................ 2GCII+>%<BHIEDIIIIIIIIIIII
+chrM 45 A A 102 0 24 25 .$.......................^:. 0<,41'+'H<23IIIIDIIIIIIII
+chrM 46 G G 99 0 24 24 .$....................... C@2FIA9HI>=IIIIIIIIIIIII
+chrM 47 A A 96 0 24 23 .$...................... 1I0I&*B:+1IIIIIIIIIIIII
+chrM 48 T T 93 0 24 22 .$.$.$.$.$.$................ +2&-6@:72III9IIIIIIIII
+chrM 49 G G 78 0 24 17 .$...............^:. A=,IIIIIIIIIIIIII
+chrM 50 A A 75 0 24 16 .$.$.............. >?I8II5IIIIIIIII
+chrM 51 G G 72 0 24 15 ..............^:. IIIIIIIIIIIIIII
+chrM 52 T T 72 0 24 15 ............... =IG(IIIIGEIIIII
+chrM 53 A A 72 0 24 15 ............... I1D;IIIIIIIIIII
+chrM 54 T T 40 0 24 15 .............N. IIIIIIIIIIIII"I
+chrM 55 T T 72 0 24 15 ............... IIIIIIIIIIIIIII
+chrM 56 C C 40 0 24 15 .............A. IIIIIIIIIIIII%I
+chrM 57 T T 75 0 24 16 ...............^:. IIIIIIIIIIIIIIII
+chrM 58 T T 75 0 24 16 ................ IIIIIIIIIIIIIIII
+chrM 59 A A 50 0 24 16 ...............C IB20III:<DIII#II
+chrM 60 C C 50 0 24 16 .$.............A. I?>=IIIIIIIIIIBI
+chrM 61 T T 72 0 24 15 ............... DIIIIIII=IIIIII
+chrM 62 C C 53 0 24 15 .$.$.$..........A. ;IICIIIIIIIII3I
+chrM 63 C C 63 0 24 12 ............ IIIIIIIIIII'
+chrM 64 A A 35 0 24 12 ...........C 5III?1GIII-%
+chrM 65 T T 63 0 24 12 .$........... IIIII>IIIIII
+chrM 66 A A 60 0 24 11 .$.......... IHIC55III?I
+chrM 67 A A 57 0 25 10 .......... 6=0@=IIIII
+chrM 68 A A 57 0 25 10 .......... II:2III2>I
+chrM 69 C C 57 0 25 10 .......... IIIIIII*2I
+chrM 70 A A 33 0 25 10 .$.$.$....G.. II@,III#II
+chrM 71 C C 48 0 25 7 .$...... IIII>06
+chrM 72 A A 45 0 25 6 .$..... IIIIID
+chrM 73 T T 42 0 25 5 ..... II6-I
+chrM 74 A A 42 0 25 5 ..... IIAI&
+chrM 75 G G 42 0 25 5 ..... %IIII
+chrM 76 G G 31 0 25 5 T..C. *II%I
+chrM 77 C C 42 0 25 5 .$.... GIII,
+chrM 78 T T 39 0 25 4 .... I#&3
+chrM 79 T T 39 0 25 4 .... IIF0
+chrM 80 G G 27 0 25 4 .$TT. I%&2
+chrM 81 G G 23 0 25 4 .C.^:. 61$I
+chrM 82 T T 29 0 25 4 ..C. =4'I
+chrM 83 C C 39 0 25 4 .... ,$*I
+chrM 84 C C 28 0 25 4 .$A.. I$7I
+chrM 85 T T 36 0 25 3 ... F+I
+chrM 86 A A 2 0 25 3 .$CN &%"
+chrM 87 G G 33 0 25 2 .. II
+chrM 88 C C 19 0 25 2 .. 1$
+chrM 89 C C 33 0 25 2 .. @I
+chrM 90 T T 28 0 25 2 .. #I
+chrM 91 T G 3 9 25 2 GA )%
+chrM 92 T T 33 0 25 2 .$. CI
+chrM 93 T T 25 0 25 1 . I
+chrM 94 T T 25 0 25 1 . I
+chrM 95 A A 25 0 25 1 . I
+chrM 96 T T 25 0 25 1 . I
+chrM 97 T T 25 0 25 1 . I
+chrM 98 A A 33 0 25 2 .^:. II
+chrM 99 G G 33 0 25 2 .. II
+chrM 100 T T 33 0 25 2 .. II
+chrM 101 T T 33 0 25 2 .. II
+chrM 102 A A 27 0 25 2 .. $9
+chrM 103 T T 36 0 25 3 ..^:. IIC
+chrM 104 T T 36 0 25 3 ... III
+chrM 105 A A 36 0 25 3 ... III
+chrM 106 A A 36 0 25 3 ... III
+chrM 107 T T 36 0 25 3 ... II5
+chrM 108 A A 39 0 25 4 ...^:. IIII
+chrM 109 G G 39 0 25 4 .... II-I
+chrM 110 A A 39 0 25 4 ..N. $I"I
+chrM 111 A A 39 0 25 4 .... =I%I
+chrM 112 T T 39 0 25 4 .... IIII
+chrM 113 T T 39 0 25 4 .... IIII
+chrM 114 A A 39 0 25 4 .... II0I
+chrM 115 C C 28 0 25 4 ...G 3I=$
+chrM 116 A A 39 0 25 4 .$... IIII
+chrM 117 C C 36 0 25 3 ... III
+chrM 118 A A 36 0 25 3 ... I8I
+chrM 119 T T 36 0 25 3 ... III
+chrM 120 G G 36 0 25 3 ... '8I
+chrM 121 C C 36 0 25 3 ... III
+chrM 122 A A 29 0 25 4 ..C^:. <')I
+chrM 123 A A 39 0 25 4 .... :%II
+chrM 124 G G 28 0 25 4 .N.. I"II
+chrM 125 T T 39 0 25 4 .... I1BI
+chrM 126 A A 39 0 25 4 .... I?II
+chrM 127 T T 28 0 25 4 ...N H/I"
+chrM 128 C C 39 0 25 4 .... I=II
+chrM 129 C C 28 0 25 4 .A.. D#II
+chrM 130 G G 60 0 18 11 ....^:.^!.^:.^!.^!.^!.^!. 7(IIIIIIIII
+chrM 131 C C 63 0 19 12 ...........^:. EC*IIIIIIIII
+chrM 132 A A 72 0 17 15 ............^!.^!.^!. 7)IIIIGIIIIIIII
+chrM 133 C C 78 0 17 17 .$..............^:.^!. I;IIIIIIIIIIIIIII
+chrM 134 C C 81 0 16 18 ................^!.^!. IIIIIIIIIIIIIIIIII
+chrM 135 C C 90 0 16 21 ..................^:.^!.^:. 7IIIIIIIIIIIIIIIIIIII
+chrM 136 C C 105 0 18 26 .....................^:.^:.^:.^:.^:. 6IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 137 A A 103 0 18 26 ......................NNN. +IIIIIIIIIIIIIIIIIIIII"""I
+chrM 138 G G 111 0 18 28 .$.........................^:.^!. &FIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 139 T T 114 0 19 29 ...........................^:.^:. DIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 140 G G 110 0 18 33 .............................^!.^:.^!.^!. 3IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 141 A A 108 0 18 33 ................................. ++IIIIIIIIIIIIIIIIIIIIIIIIIIIII#I
+chrM 142 G G 105 0 18 35 .............T...................^:.^:. I/IIHIIIIIIII3IIIIIIIIIIIIIIIIIIIII
+chrM 143 A A 86 0 18 41 .$.................................G^:.^!.^!.^:.^:.^!. IIEA,IIIIIIIIIIIIIIII=IDIIIIIIIIII#IIIIII
+chrM 144 A A 105 0 18 42 ........................................^:.^:. IIIGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 145 T T 86 0 18 42 G......................................... %IIIIIIIIIII4IIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 146 G G 104 0 19 43 ..........................................^:. III:IIIIIIII.II&IIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 147 C C 104 0 19 45 ...........................................^:.^:. IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 148 C C 82 0 19 49 T............................................^!.^:.^!.^!. $IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 149 C C 82 0 19 49 .............................N................... .IIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIIIIIIIIII
+chrM 150 T T 99 0 19 51 .................................................^:.^:. IIIIIIIII=IIIIIII#IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 151 C C 80 0 19 53 ..............................N....................^:.^!. IIIIIIIIIBIIIIIIIIIIIIIIIIIII&"IIIIIIIIIIIIIIIIIIIIII
+chrM 152 T T 97 0 19 54 .....................................................^:. IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 153 A A 78 0 19 57 .............................T........................^!.^:.^:. D9I.=IIIIEIII=IAII9IIIIII@IIA$IIIIIBIIIIIIIIIIIIIIIIIIIII
+chrM 154 A A 91 0 19 58 .......................................................NN^!. I4-'>I@FI85IIIDIIG?IIIIIIIII>IIIIIIIIIIIIIIIIIIIIIIIIII""I
+chrM 155 A A 91 0 19 61 ..........................................................^!.^:.^:. <?;D=IIIICIIII9CBI=I0I)IAFIIIIIIIIIIIIIIIIIIIIIIDIIIIIIIIIIII
+chrM 156 T T 96 0 19 62 .............................................................^:, IGI<IIIII8IIIII3IIIIIIIIIICIIIIIIIIIIII?IIIIIIIIIIIIIIIIIIIII&
+chrM 157 C C 116 0 19 62 .$............................................................, IIIHIIIII>IIIIIIIIIIIIIII+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 158 A G 117 117 19 62 GGGGGGGGGGGGGGGGGGGNNNGGGGGG.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGg^:g II6IIII<4I+IIIIIIII"""IIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII>
+chrM 159 C C 127 0 19 62 ............................................................,, IIIIIIIIIIIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII/F
+chrM 160 G G 136 0 19 63 ............................................................,,^:. II@AIII;7I2IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII9IIIIIII
+chrM 161 T T 135 0 19 63 ............................................................,,. BIB08IIIHEGI5IIIC5I49@I:6>IIICIIIIIIII14CIIII;IIIII@IIIIIIIII>I
+chrM 162 C C 113 0 19 63 ............................................................,,. DIDIIIII(a)IFIIIIIIEIIIIIIGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.-I
+chrM 163 T T 134 0 19 63 ............................................................,,. <D:CIIII>III:IIII=IIIIIAIIII'IIIIIIIIIDIIIIIIIIIIIIIIIIII?III8I
+chrM 164 C C 130 0 19 63 ............................................................,,. IIIEIIIIII@IIIIIFIIIIIIIIIII)IIIII>IIIIIEIIIIIIIIIIIIIIIIIII4FI
+chrM 165 T T 116 0 19 63 .$.$.$.$.$.$.$............NNN......................................,,N IHC7IIII;FIIIIIED2I"""ICD=II:7IIIIIIIIGIIIIIIIIIIIIIIIIIIIIIII"
+chrM 166 A A 122 0 20 56 C$....................................................,,. %41+I=:5I+'=//:9.,:;HI9+II6III4,I4II/5I;IIFI/IIIIIII:III
+chrM 167 C C 122 0 20 55 .$.$.$.................................................,,A HI@IIIII@6IIIIIC@IIIIGIIIICIIIHDIIIIIIII@IIIIIIIIIII;6%
+chrM 168 G G 146 0 20 52 .$.$...............................................,,. 7DIIII=IIIII5IIIII<IIAIAIFIIIIIIIIIIIIII=IIIIIIIDIII
+chrM 169 A A 141 0 20 50 .$.$.............N...............................,,. 5.3%-8(1<6--(6,"%:G7I<6II163I@AI+CI?=IIIIIID9<IIII
+chrM 170 T T 98 0 21 48 .$.$.$.NNN......................................,,A IE?I"""I<;:IIII=IIIBIIID>CHIHI>IIIIIIIIII>IIIII&
+chrM 171 T T 141 0 21 46 .$.$.$.$.$.....................................,,.^:G IIIII=>IIIIIIIIIIIIIIDDII7IGIIIIIHIIIIIIIIIBI8
+chrM 172 A A 150 0 20 42 .....................................,,..^:. 3,.HHI?8I8IIIII<@.BI196@IIII4II&-HIHIIIIII
+chrM 173 A A 130 0 20 42 .$.$...C...............................,,... 914HG841?IA0III:IB@>;@FIIIIIIIEIIBII;IIIII
+chrM 174 A A 122 0 21 40 .$.$..........C......................,,... ?DCI?@I7C5I*I9C9IIIE?C>::I8IIIIIIIIIIIII
+chrM 175 A A 141 0 20 38 .$.$.$.$.......................NN....,,... C0:2IAHIII*;5-HGI3G7I8:I1IF""IHIIIII#I
+chrM 176 G G 82 0 21 34 .....NN......................,,... 3=824""DC5@;IH:%)III1II)&H7@3IIIII
+chrM 177 G G 129 0 21 34 .$.$...........................,,... =823HAD6<:<IH,16I7,I4III8C,I8IIIII
+chrM 178 A A 123 0 21 32 .$.$.$.$.$.$.....................,,... 97EII46:G.;I7I@III6IIC>:I>-IIIII
+chrM 179 G G 105 0 21 26 .$.$...................,,... 9,DI3?I9I+-CCIAIIIIC3IIIII
+chrM 180 C C 65 0 21 24 ...................,,..N III=3>&FHI>IIIIIIIIIIII"
+chrM 181 A A 99 0 21 24 .$..................,,... II?I@I@>>I@IIIIIII/II(II
+chrM 182 G G 55 0 20 24 .$.$..........NN....,,...^!. III64III7III""IIG=II>III
+chrM 183 G G 93 0 20 22 .$.$.$.$............,,.... I;?79<IIIIIII:I-III@II
+chrM 184 T T 81 0 21 18 ............,,.... &+I-I2EC9I72IIIIII
+chrM 185 A A 81 0 21 18 .$.$..........,,..N. II@=IIF0DIDFIIII"I
+chrM 186 T T 66 0 21 16 N$.$........,,..C. "4IIIIIIIIIIII&I
+chrM 187 C C 32 0 21 14 .$.NN....,,.N.N HI""BI=8III"I"
+chrM 188 A A 36 0 21 13 G$.$.$....,,.... II5II5,IIIIII
+chrM 189 A A 33 0 21 10 .$...,,...C :I=BII$II(
+chrM 190 G G 54 0 22 9 .$.$.$,,.... I9+III&II
+chrM 191 C C 45 0 23 6 ,$,.... IIIIII
+chrM 192 A A 42 0 22 5 ,.... IFII%
+chrM 193 C C 45 0 23 6 ,$....^:. I&IIII
+chrM 194 A A 45 0 20 6 .....^!. IIIIII
+chrM 195 C C 45 0 20 6 .$..... IIIIII
+chrM 196 T T 17 0 19 5 G.... <IIII
+chrM 197 A A 42 0 19 5 ..... I<I&I
+chrM 198 G G 42 0 19 5 ..... IIIII
+chrM 199 A A 42 0 19 5 ....N IIII"
+chrM 200 A A 42 0 19 5 N.... "IIII
+chrM 201 A A 42 0 19 5 ..... <?III
+chrM 202 G G 42 0 19 5 ..... 9I&II
+chrM 203 T T 29 0 19 5 ..A.. $6$II
+chrM 204 A A 42 0 19 5 ..... II+II
+chrM 205 G G 42 0 19 5 ..... IIIII
+chrM 206 C C 42 0 19 5 .$.... +GIII
+chrM 207 T T 39 0 18 4 .$... IIII
+chrM 208 C C 31 0 14 3 ... III
+chrM 209 A A 10 0 14 3 .N. I"I
+chrM 210 T T 31 0 14 3 ... III
+chrM 211 A A 20 0 14 3 C.. 'II
+chrM 212 A A 11 0 14 3 ... I&I
+chrM 213 C C 20 0 14 3 ..A II$
+chrM 214 A A 31 0 14 3 ... II%
+chrM 215 C C 31 0 14 3 ... DII
+chrM 216 C C 31 0 14 3 ... ;II
+chrM 217 T T 31 0 14 3 .$.. II$
+chrM 218 T T 28 0 18 2 .. II
+chrM 219 G G 28 0 18 2 .. I;
+chrM 220 C C 19 0 18 2 .A I%
+chrM 221 T T 28 0 18 2 .. I'
+chrM 222 C A 0 0 18 2 N. "A
+chrM 223 A A 22 0 18 2 .. 4I
+chrM 224 G G 28 0 18 2 .. II
+chrM 225 C C 17 0 18 2 .. /I
+chrM 226 C C 28 0 18 2 .. II
+chrM 227 A A 10 0 18 2 .C 1:
+chrM 228 C C 28 0 18 2 .$. II
+chrM 229 A A 4 0 0 1 .$ I
+chrM 264 T T 25 0 25 1 ^:. I
+chrM 265 A A 4 0 25 1 N "
+chrM 266 T T 31 0 14 3 .^!.^!. III
+chrM 267 G G 39 0 18 4 ...^:. IIII
+chrM 268 A A 39 0 18 4 .N.. I"II
+chrM 269 A A 33 0 18 4 N... "III
+chrM 270 C C 39 0 18 4 .... IIII
+chrM 271 G G 17 0 18 4 NN.. ""II
+chrM 272 A A 39 0 18 4 .... IIII
+chrM 273 A A 33 0 18 4 ...N I+I"
+chrM 274 A A 39 0 18 4 .... IIII
+chrM 275 G G 39 0 18 4 .... IIII
+chrM 276 T T 21 0 16 5 ...N^!. III"I
+chrM 277 T T 42 0 16 5 ..... IIIII
+chrM 278 C C 42 0 16 5 ..... 1IIII
+chrM 279 G G 48 0 13 7 .....^!.^!. @IIIIII
+chrM 280 A A 51 0 15 8 .......^:. HII;IIII
+chrM 281 C C 54 0 17 9 ........^:. II'IIIIII
+chrM 282 T T 32 0 17 9 .C....... I&I2?IIII
+chrM 283 A A 54 0 17 9 ......... IIIAIIIII
+chrM 284 A A 54 0 17 9 .....N... IIIII"III
+chrM 285 G G 34 0 15 11 ....T....^!.^!. IIIIIIIIIII
+chrM 286 T T 33 0 15 11 ..C..N.A... AI&II"II(II
+chrM 287 C C 60 0 15 11 ........... IIG;IIIIIII
+chrM 288 A A 52 0 15 11 ..NTC...... II"$1IIIIII
+chrM 289 T T 34 0 15 11 ........N.. IIIII'II"II
+chrM 290 A A 60 0 15 11 ........... H:IIIIIIIII
+chrM 291 T T 34 0 15 11 ..N........ II"IIIIIIII
+chrM 292 T T 60 0 15 11 ........... IIIIIIIIIII
+chrM 293 A A 66 0 17 13 ...........^:.^:, I>IIIIIIIIIII
+chrM 294 A A 66 0 17 13 ......N.NN.., I8%III"I""III
+chrM 295 A A 59 0 18 14 ....C...G...,^:. BIII%III$IIIII
+chrM 296 T T 69 0 18 14 ............,. 6II%IIII9%IIII
+chrM 297 A A 69 0 18 14 ............,. H/IF'IIIIIIIII
+chrM 298 A A 38 0 18 14 .........T..,. 0-IIIIIII3IIII
+chrM 299 G G 72 0 18 15 .$...........,.^:, I%<IIIIIIIIIIII
+chrM 300 G G 35 0 18 14 ....N....N.,., &IG2"IIII"II=I
+chrM 301 G G 42 0 18 15 T$.$T..NC...N,.,^:. %E%II",III"IIEI
+chrM 302 T T 69 0 19 14 .$........,.,.^!, $/IIIIIIIII3IB
+chrM 303 T T 53 0 18 13 ..N..C..,N,., II"II#III"<I7
+chrM 304 G G 41 0 18 13 ...A....,.,., IIIIIIIIIIII*
+chrM 305 G G 66 0 18 13 ........,.,., DII8IIIIIIIII
+chrM 306 T T 36 0 18 13 .......N,.,., .I#:IIB"IIBI6
+chrM 307 A A 41 0 18 13 ......NT,.,., II4III"&IIII/
+chrM 308 A A 66 0 18 13 ........,N,., I+III$I>I"III
+chrM 309 A A 41 0 18 13 ......N.,C,., II6II+"II&III
+chrM 310 T T 66 0 18 13 ........,.,., IIIIIIIIIIII=
+chrM 311 T T 41 0 18 13 .$...C...,.,., IIIIIIIIIIII*
+chrM 312 T T 63 0 19 12 .......,.,., IIIII+III?I9
+chrM 313 C C 69 0 19 14 .......,.,.,^!,^:. I-I4I?IIIII.AI
+chrM 314 G G 38 0 19 14 .$.$..N..,.,.,,. I1I2"CIIIIIIII
+chrM 315 T T 63 0 20 12 .$....,.,.,,. III9IIIIIIII
+chrM 316 G G 60 0 20 11 .$...,.,.,,. DI=IIIIIIHI
+chrM 317 C C 57 0 19 10 ...,.,.,,. IIIIIIIFII
+chrM 318 C C 31 0 19 10 A..,.,.,,N %?IIIII.I"
+chrM 319 A A 57 0 19 10 ...,.,.,,. '<IIIIIIII
+chrM 320 G G 57 0 19 10 .$.$.,.,.,,. I.DIII?II#
+chrM 321 C C 51 0 22 8 .,.,.,,. IIIII5II
+chrM 322 C C 32 0 22 9 .,.,.a,.^:. IIIII%III
+chrM 323 A A 40 0 22 9 .,.,.,,C. 6I=I4)F)I
+chrM 324 C C 54 0 22 9 .,.,.,,.. IIIII%III
+chrM 325 C C 54 0 22 9 .,.,.,,.. IIIIIIIII
+chrM 326 G G 54 0 22 9 .,.,.,,.. FIII>BIII
+chrM 327 C C 32 0 22 9 .,.,.,,.N IIII79II"
+chrM 328 G G 54 0 22 9 .$,$.,.,,.. IIIIIIIII
+chrM 329 G G 48 0 21 7 .,.,,.. IIBIIII
+chrM 330 T T 48 0 21 7 .$,.,,.. HI9-III
+chrM 331 C C 45 0 20 6 ,.,,.. I9IIII
+chrM 332 A A 45 0 20 6 ,.,,.. I-IIII
+chrM 333 T T 45 0 20 6 ,.,,.. I@IIHI
+chrM 334 A A 30 0 20 6 ,$.,,C. I7II$I
+chrM 335 C C 42 0 19 5 .,,.. 5II)I
+chrM 336 G G 42 0 19 5 .$,,.. :II(I
+chrM 337 A A 39 0 18 4 ,$,.. IIII
+chrM 338 T T 36 0 20 3 ,.. III
+chrM 339 T T 36 0 20 3 ,.. III
+chrM 340 A A 36 0 20 3 ,.. IIA
+chrM 341 A A 32 0 20 3 ,.. II%
+chrM 342 C C 33 0 20 3 ,.. I&:
+chrM 343 C C 36 0 20 3 ,.. I<I
+chrM 344 C C 36 0 20 3 ,.. III
+chrM 345 A A 32 0 20 3 ,.. II%
+chrM 346 A A 36 0 20 3 ,.. IB6
+chrM 347 A A 32 0 20 3 ,.. II$
+chrM 348 T T 4 0 20 3 ,$.$A IIA
+chrM 349 T T 9 0 25 1 . *
+chrM 350 A A 20 0 25 1 . 5
+chrM 351 A A 25 0 25 1 . I
+chrM 352 T T 25 0 25 1 . I
+chrM 353 A A 33 0 25 2 .^:, II
+chrM 354 A A 39 0 25 4 .,^:,^:, IFII
+chrM 355 A C 14 36 25 4 .ccc IIII
+chrM 356 T C 39 39 25 4 Cccc IIII
+chrM 357 C C 39 0 25 4 .$,,, IDII
+chrM 358 T T 36 0 25 3 ,,, 7:+
+chrM 359 C C 36 0 25 3 ,,, III
+chrM 360 C C 39 0 25 4 ,,,^:, >II5
+chrM 361 G G 31 0 25 7 ,,,,^:,^:t^:, III=I$;
+chrM 362 G G 35 0 25 7 ,,,,,t, IIIAI'/
+chrM 363 C C 48 0 25 7 ,,,,,,, IIIII%)
+chrM 364 G G 57 0 25 10 ,,,,,,,^:.^:,^:, III5II>II9
+chrM 365 T T 57 0 25 10 ,,,,,,,.,, IIII>A9IEI
+chrM 366 A A 57 0 25 10 ,,,,,,,.,, IIIIIIIIID
+chrM 367 A A 60 0 25 11 ,,,,,,,.,,^:, IIIIIIIII<I
+chrM 368 A A 63 0 25 12 ,,,,,,,.,,,^:, IIIIIIIIIIII
+chrM 369 G G 63 0 25 12 ,,,,,,,.,,,, IIIIIIIII?ID
+chrM 370 C C 35 0 25 12 ,,,,,,a.,,,, IIIII=%IIIII
+chrM 371 G G 66 0 25 13 ,,,,,,,.,,,,^:, IIIDIIIII'IGF
+chrM 372 T T 66 0 25 13 ,,,,,,,.,,,,, BIIIIII%III@C
+chrM 373 G G 38 0 25 14 ,,,,,,,.,,n,,^:, IIIIIIIII."CII
+chrM 374 T T 75 0 25 16 ,,,,,,,.,,,,,,^:,^:, IIIIIIIIIIIA8GIE
+chrM 375 C C 51 0 25 19 ,,,,,a,.,,,,,,,,^:,^:,^:, III1I%4II2I/4II01*&
+chrM 376 A A 90 0 25 21 ,,,,,,,.,,,,,,,,,,,^:,^:, IIIIIIIIIIIIIIIIIDIII
+chrM 377 A A 93 0 25 22 ,,,,,,,.,,,,,,,,,,,,,^:, IIIIIIIIIIIIBIIIIIIIII
+chrM 378 A A 93 0 25 22 ,,,,,,,.,,,,,,,,,,,,,, IIIIIIICIIIIIIIIIFIIII
+chrM 379 G G 93 0 25 22 ,,,,,,,.,,,,,,,,,,,,,, IIIIII?IIIIEIIIIIIIIGI
+chrM 380 A A 99 0 25 24 ,,,,,,,.,,,,,,,,,,,,,,^:,^:, IIIIIIIIIDII;IIIIIIIIIII
+chrM 381 C T 77 108 25 28 tttttttTttttgttttttttttt^:t^:t^:t^:t IIIIIIIIIIII&I7CI>BCA296+IA1
+chrM 382 T T 117 0 25 30 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,^:,^:. IIIIIIIIIIII,IIII>II5GI>;H=BCI
+chrM 383 A A 82 0 25 30 ,,,,,,,.,,g,,,,,,,,,,,,,,,,,,. IIIIIIIIII%%4IIIIIII#IIIIIIIII
+chrM 384 A A 76 0 25 30 ,,,,,,,.,c,,g,,,,,,,g,,,,,,g,. IIIIIIIIIIII$IIIIIII$IIIIF,4II
+chrM 385 T T 123 0 25 32 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,,.^:,^:, IIIIIII$IIII<III$(-I0FIIIIII>I00
+chrM 386 A G 88 120 25 32 gggggggGggnggggggggggggggggggGgg III>IIIIII"I&IIIIIIIIIIII?IIDI94
+chrM 387 C C 69 0 25 32 ,,,,,,,.,,,,,,,,,,,,,,a,,,nn,.,, IIIIIIIIIII?&III7-IIII+BII""II3.
+chrM 388 C C 123 0 25 32 ,$,,,,,,.,,,,,,,,,,,,,,,,,,,,,.,, IIIDIIIIIII@)IIIIIIIII+)I/II0I<=
+chrM 389 A A 85 0 25 31 ,$,$,,,,.,,,,,,,,,,,t,,,,,,,,,.,, IIIIIIIIIIIBIIIIII&>IIIIHIIIIII
+chrM 390 A A 114 0 25 29 ,,,,.,,,,,,,,,,,,,,,,,,,,,.,, IIIIIIIII$IIIIIIIIIIIIIIIIIII
+chrM 391 A A 74 0 25 29 ,,,,.,,,,,,,,,gg,,,,,,,,,,.,, IIIIIIIII9III$+$IIIIIIIIIIIII
+chrM 392 A A 114 0 25 29 ,,,,.,,,,,,,,,,,,,,,,,,,,,.,, IIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 393 T T 114 0 25 29 ,,,,.,,,,,,,,,,,,,,,,,,,,,.,, IIIIIIIIIII@GII%IIIIFCII>/III
+chrM 394 A A 117 0 25 30 ,,,,.,,,,,,,,,,,,,,,,,,,,,.,,^:, IIIIIIIII;IIIIIIIIIIIIIIII>III
+chrM 395 A A 117 0 25 30 ,$,,,.,,,,,,,,,,,,,,,,,,,,,.,,, IIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 396 A A 114 0 25 29 ,$,$,$.,,,,,,,,,,,,,,,,,,,,,.,,, IIIIIIII*IIIIIIIIIIIIIIIIIIII
+chrM 397 G G 71 0 25 26 .,,,,,,,,,,,,,,,,,,c,,.,,, IIIIIIIIIIIIIIIIIII#*IIII,
+chrM 398 T T 84 0 25 26 .,,,,,,,,,,,,,,,g,,,,,.,,, III/I1IIIIIIII;I+III)IHII4
+chrM 399 T T 105 0 25 26 .$,$,$,,,,,,,,,,,,,,,,,,,.,,, IIIIIIIIIIIIIIIIII3IIIIII'
+chrM 400 A A 96 0 25 23 ,,,,,,nnn,,,,,,,nn,.,,, II7III"""IIIIIII""I>III
+chrM 401 A A 63 0 25 23 ,,,,,,g,,,,,,,,,,,,.,,, IIIIII&%#IIIIIIIIIIIIII
+chrM 402 A A 96 0 25 23 ,$,,,,,,,,,,,,,,,,,,.,,, IIIIIIIIIIIIIFIIIII8III
+chrM 403 A A 96 0 25 23 ,$,,,,,,,,,,,,,,,,,.,,,^:, I,IBIIIIIII45C;IIIIII1G
+chrM 404 C C 60 0 25 22 ,,,,,,,,,,,,,,,,,.,,t, IIIIIIIIIIIIIIIIIIII$=
+chrM 405 C C 93 0 25 22 ,,,,,,,,,,,,,,,,,.,,,, IIIIIII4IIIIIIIIIIII:8
+chrM 406 C C 63 0 25 23 ,$,,,,,,,,,,,,,,,,.,,a,^:. AIIIIIIIII4IIIIIIIII&8I
+chrM 407 A A 93 0 25 22 ,,,,,,,,,,,,,,,,.,,,,. IIIIIIIIIIIIIIII@IIIII
+chrM 408 G G 93 0 25 22 ,$,,,,,,,,,,,,,,,.,,,,. IIIIIIIIIIIIIIIIDII5:I
+chrM 409 T T 90 0 25 21 ,$,$,,,,,,,,,,,,,.,,,,. IIIIIIIII+IIIII)II<=I
+chrM 410 T T 84 0 25 19 ,$,$,$,,,,,,,,,,.,,,,. IIIIIIIIIIIIIIII&6I
+chrM 411 A A 81 0 25 18 ,$,$,,,,,,,,.,,,,.^:.^:. IIIIIIIIIIFIII;III
+chrM 412 A A 75 0 25 16 ,$,,,,,,,.,,,,... IIIII//I:II?DIII
+chrM 413 G G 72 0 25 15 ,,,,,,,.,,,,... IIIIIII?III4III
+chrM 414 C C 75 0 25 16 ,,,,,,,.,,,,...^:. IIIIIIIFII?&IIII
+chrM 415 C T 75 75 25 16 t$t$tttttTttttTTTT IIIIIII>II93IIII
+chrM 416 G G 72 0 24 15 ,$,$,$,$,.,,,,....^!, IIIII9II-4IIII@
+chrM 417 T T 60 0 24 11 ,$.$,,,,...., I/II8CIIIID
+chrM 418 A A 54 0 24 9 ,,,,...., IIII/IIII
+chrM 419 A A 54 0 24 9 ,,,,...., IIII/IIII
+chrM 420 A A 54 0 24 9 ,$,$,,...., IIII2IIII
+chrM 421 A A 48 0 23 7 ,,...., I4FIIII
+chrM 422 A A 48 0 23 7 ,,...., II2IIII
+chrM 423 G G 57 0 24 10 ,,....,^:.^:.^:. 1IIIIIIIII
+chrM 424 C C 34 0 23 11 ,,....,...^!a IIIIII8III%
+chrM 425 T T 66 0 23 13 ,,....,...,^:.^:. II$IIIIIII2II
+chrM 426 A A 66 0 23 13 ,,....,...,.. II/IIIIIII=II
+chrM 427 C C 49 0 23 15 ,,....,..T,..^:.^:. IIIIIIIII''IIII
+chrM 428 A A 46 0 23 17 ,,G...,...,....^:.^:. II"IIIIII%IIIIIII
+chrM 429 A A 81 0 24 18 ,$,....,...,......^:. IICI.IIIII7IIIIIII
+chrM 430 C C 78 0 23 17 ,....,...,....... IIIIIIIII0IIIIIII
+chrM 431 C C 49 0 23 18 t....,...,.......^!, $IIIIIIII1IIIIIII)
+chrM 432 A A 84 0 23 19 ,....,...,.......,^:. IFII0IIIIIIIIIIIIII
+chrM 433 A A 56 0 23 19 ,C...,...,.......,. I'IIIIIIIIIIIIIIIII
+chrM 434 A A 60 0 23 22 ,....,...,.....T.,.^:.^:.^:. IC4=DIIIIIIIIII&IIIIII
+chrM 435 G G 96 0 23 23 ,....,...,.......,....^:. IIGCIIIIIIIIIIIIIIIIIII
+chrM 436 T T 65 0 23 24 ,A...,...,.......,.....^:. I$5@7II;IGII$IIII1IIIIII
+chrM 437 A A 105 0 24 26 ,....,..N,.......,......^:.^:. I#.&IIIH"IIIIII@IIIIIIIIII
+chrM 438 A A 69 0 24 29 ,$CCC.,...,.......,........^:.^:.^:. I#)*IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 439 A A 88 0 24 30 TGG.,...,.......,...........^:.^:. '%$IIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 440 A A 120 0 24 31 ....,...,.......,.............^:, $8-?IIEIIIIIII<IIIIIIIIIIIIIIII
+chrM 441 T T 85 0 24 31 A$...,...,.......,............., $IBIIIIIIIIIIIII/IIIIIIIIIIIIID
+chrM 442 A A 126 0 24 33 ...,...,.......,.............,^:,^:.^:. II1IIBIIIIIIIIIIII/IIIIIIIIIII2II
+chrM 443 G G 91 0 24 33 ...,...,.......,.............,n.. IIIIIII@IIIII9IIIIIIIIIIIIIIII"II
+chrM 444 A A 126 0 24 33 ...,...,.......,.............,,.. I@1IIIIAIIIIIIIIIIIIIIIIIIIIII+II
+chrM 445 C C 100 0 24 36 ...,...,.......,.............,a..^:.^:.^:. IH>IIIIIIIIIIIIIIIIIIIIIIIIIIG#IIIII
+chrM 446 T T 103 0 24 37 .$.$.,...,.......,.............,g.....^:. IIHIIII.II7IIIIIIIIIIIIIIIIII(&IIIIII
+chrM 447 A A 141 0 24 38 .,...,.......,.............,,......^:.^:,^:. 2II/II>I5IIIIIIIIIIIIIIIIIII(IIIIIII%I
+chrM 448 C C 144 0 24 39 .,...,.......,.............,,.......,.^:. 8IIIIIBIAIIIIIIIIIIIIIIIIIII%IIIIIII'II
+chrM 449 G G 126 0 24 45 .$,...,.......,..T..........,,.......,..^:.^:.^:.^:.^:,^:. 1IIIIIIIIIIIIIII)IIIIIIIIIII2II>IIII,IIIIII:I
+chrM 450 A A 162 0 24 45 ,...,.......,.............,,.......,......,.^:. II7II3:I7I8IIIIIIIHIIIIIIII=II*IIIIIIIIIIIIII
+chrM 451 A A 168 0 24 47 ,$...,.......,.............,,.......,......,..^:.^:. I>EII?I1IH3IIII$DIIIIIIIIII+IIIIIII1IIIIIIIIIII
+chrM 452 A A 175 0 24 49 ...,.......,......N......,,.......,......,....^:.^:.^:. IE@I8I8IIIIIIIIIII"IIIIIII5IIIII5/IIIIIIIIIIIIIII
+chrM 453 G G 178 0 25 53 ...,.......,.............,,.......,......,.......^:.^:.^:.^:. I>IIIIIII*IIIIII9IIIIIIII:8IIIII@I&IIIIIIIIIIIIII-III
+chrM 454 T T 134 0 25 54 ...,.......,.............g,.......,......,...........^:. ,**I0I./I'(I2IIC1IE/>IFII'%II6D<$I3IIIIIIFIAIIIII(IIII
+chrM 455 G G 168 0 25 54 ...,.......,.............,,.......,......,............ IEIIHIIII>IIIIII4IIIIIIIII+IIIIIII$IIII.IIIIIIIIIIIIII
+chrM 456 A A 173 0 25 54 ...,.......,.............,,.......,......,............ :1+IDB<II@IIIIICIIIGIIIIII+IIIIIII/IIII$>IIIIIIIIIIIII
+chrM 457 C C 154 0 25 56 ...,.......,.............,g.......,......,............^:.^:. I63I<IAGI8IIIII=IIIIIIIIII$IIIIIII3IIIH$IIIIIIIIIIIIIIII
+chrM 458 T T 205 0 25 59 .$.$.$,.......,.............,,.......,......,..............^:,^:,^:, IAII@IIIIIIIIIIIBIIIIIIIII,IIIIIII:IIIIIIIIIIIIIIIIIIIIIB*H
+chrM 459 T T 160 0 25 56 ,$.......,......N......,,..N....,......,..............,g, IAI4II-%IIIIIII"IIIIIII2II"IIII4IIIIIIIIIIIIIIIIIIIII3$I
+chrM 460 T T 205 0 25 59 .$.$.....,.............,,.......,......,..............,,,^:.^:.^:.^:. IIIBIBIIIIIIIIIIIIIIII.IIIIIIICIIIIIIIIIIIIIIIIII+III8?IIII
+chrM 461 A A 202 0 25 62 .....,......N......,,.......,......,..............,,,....^:.^:.^:.^:.^:. I:I58IIIIGID"III.III&IIDIIDIIIIIIIIIIIIIIIIIIIIIIII)IIIIIIIIII
+chrM 462 A A 182 0 25 64 .$.$...,.............,,.......,......,..............,c,.........^:.^:, B<I,GIIIIFIC=IIIII?I-IIB@?IIIIIIIIIIIIIIIIIIIIIIIII%IIIIIIIIIIII
+chrM 463 T T 164 0 25 63 .$.$.,.............,,.......g......,..............,g,..........,^:, I+:IIIIIII;?IIIIII8IIIIIII)IIIIIIIIIIIIIIIIIIIII;%9IIIIIIIIIII6
+chrM 464 A A 218 0 25 65 .$,.............,,.......,......,..............,,,..........,,^:.^:.^:.^:, >IIIIBII,IIIIIII%IIIIIII&IIIIIIIIIIIIIIIIIIIII.I1IIIIIIIIIIIIIIII
+chrM 465 C C 169 0 25 65 ,.............,,.....A.,......,..............,,,..........,a...,^:A IIIIBI>H1IIIIB$)IIIII$IIIIIIIIII0IIIII6IIIIIIHIIIIIIIIIIIII&IIICI
+chrM 466 C C 175 0 25 67 ,$....A........,,......N,......,..............,,,..........,,...,.^:.^:. IIIF@%BIIIIIIFI+IIIII'"@IIIIIIII$IIIIIII@IIIII;IIIIIIIIIIII0IIIIIII
+chrM 467 T T 194 0 25 67 .$............,,.......,......,..............c,,..........,,...,...^:. IAIBIIBHIIII7I3IIA=H$IIIIIIII6IIIIIIIIIIIIII,I,IIII&IIIII5'III9IIII
+chrM 468 C C 205 0 25 66 ............g,.......,......,..............,,,..........,,...,.N.. II>IIIIIIIIA&'IIIHIIIIIII&&'IIIIIIIIIIIIIIIIIIIIII&IIIII?(IIIII"II
+chrM 469 T T 207 0 25 66 .$.$.$.........,,.......,......,..............,n,..........,,...,G... III>I44EIIICI@IIEDC$IBIIII(IIIIDIIII@IIIIII1"0IIII%IIIIII1III7IIII
+chrM 470 G G 198 0 25 65 .$........n,.T.....,......,..............,,,..........,,...,....^:.^:. /+.2IIIIH"II4HFI7IIIIII(III?II<II@II=IIIIIIII$IIIIIIIIIIII1IIIIII
+chrM 471 A A 194 0 25 68 N$.......,,.......,...C..,.......C......,,,..........,,...,.N....^!.^:.^:t^:, "I95IDC0IIB?00/#6I:II%0(III-IIII#IIDIII:FIIIIIIIIIIIIIIIIII"IIIIII$?
+chrM 472 C C 187 0 25 72 .$.$.....,t.......,....A.,..............,a,..........,a...,A.......,,^:.^:.^:.^:.^:. I@IIIIII&IIIFG6IIIIII$IIIIIIIII$IIFIIII:IIIIIIIIIIII%IIII,IIIIII/I-IIIII
+chrM 473 T T 237 0 25 74 .$.$.$..,,.......,......,..............,,,..........,,...,........,,.....^:,^:.^:.^:. IIII?I&IIF:9&$;@IIIIIII)IIIIIIIIIIII?IEIIIIIIIIIIIIIIIIIIIIIIII57IIIII+III
+chrM 474 A A 208 0 25 73 .$.$,,.......,....C.,..............,,,..........,,...,........,,.....,...^:.^!, @9II@;G79*0IIDII&IIII6IIII3IIIIII?IIIDIIIIIIIIIIIIIIIIIIIIII+IIIIIIIIIIII
+chrM 475 C C 238 0 25 74 ,$,.......,......,..............,,,..........,,...,........,,.....,....,^:.^:.^:. III<@IIFIIIIII9III+IIIII)IIIIIII&IIIIIIIIIIII/IIIIIIIIIIII87IIIII7IIII:III
+chrM 476 A A 225 0 25 76 c.......,....T.,..............,,,..........,,...,........,,.....,....,...^:.^:.^:. 2ID???#>I8II$#'III9II=?(AB2III@III3IIIIIGIIIIIII?IEIIIIIH8IIIIIIIIIII=IIIIII
+chrM 477 C C 240 0 25 77 ,$.$.$.....,......,..............,,,..........,,...,........,,.....,....,......^:. IIIIAC6DIIIII%IIIIIIIII&IIIIII6IIIIIIIIII)IIIIIIIIIIIIIIIIIIIIIIFIIII9IIIIIII
+chrM 478 G G 204 0 25 77 .....,....T.,.......T......,,,..........,,...,........,,.....,....,.......^:.^:.^:. IED*>IHIID$/IC&C,III$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.GIIIIIIIIII1IIIIIIIIII
+chrM 479 A A 234 0 25 79 .....,......,..............,,,..........,,...,........,,.....,....,..........^!,^:. 4<<#>IIBI$()II?1I@<6?763IG2IIIIIIIGI:I/IIIIIIIIIIAIIIIHIIIIIIIIIIIIIIIIIIIIIIII
+chrM 480 T T 202 0 25 81 .$.$.$..,...A..,..............,,,NN........,,...,........,,.....,....,..........,.^:.^:. ;22&7I?>I$**IID1IIII4II9:%IIII""II$III<IIIIIIII@ICIIII8BIIIIIIIIII:IIIIIIIIII1III
+chrM 481 A A 232 0 24 81 .$.,......,..............,,,NN........,,...,........,,.....,....,..........,...^:.^!,^:. #;I3>I$%#III4I5F@E67+?;EIII""5I&III2IIICICIICI9IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 482 G G 219 0 24 83 .$,$.$...C.,..............,,,..........,,...,.......N,,.....,....,..........,.C.N,.^!,^!,^:. +I3;I'$#I,&(I/.F+11+I;IIIIIIFI$IIH14IICICI'5IFIII"HIIIIIIIIIII7IIIIIIIIII?I%I"II:CI
+chrM 483 C C 230 0 24 83 .$....,..............,,,..........,,...,........,,.....,....,..........,....,.,,.^:.^:.^!, II&&$II+/I1I5III6IIIIIIIIII2II<IIIIIIII?IIIIIII@IIIIIIIIIIIFIIIIIIIIIIIIIIIIIC;IIII
+chrM 484 T T 216 0 24 83 .$C$C$.$,$.$.............,,,....A.....,,...,.C......,,.....,....,..........,....,.,,...,^:. I##$II91IIIIIII-4IIIIIIEII#<BI7IIIIIII+%I=:IIIAIII?IIIII>I@IIIIIIIIII:IIII<I;,IIIII
+chrM 485 A A 223 0 24 83 .$............,,,..........,,...,........,,.....,....,..........,....,.,,...,.^:.^:.^:.^:.^!,^!, 9-.1'42//40?5IIIIII?CII7?III@=@II&IEI<II9III>IIIIIIIIIIIIIDIIIIIIIIIII<IIIIIIIIIIII
+chrM 486 A A 210 0 23 85 .$.$..........,,,....C.....,,...,........,,.....,....,..........,....,.,,...,.....,,^:.^:.^!, 0IB20I989I3IIIIID9?+II/?III7;7II?IIIICIIIIIBIIIDIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 487 G G 206 0 23 84 .$.$.$T......,,,..........,,...,........,,.....,....,..........,....,.,,...,.....,,..,^:. 05<%--/72IIII=+20+IG5,FIIHIGIIIII5IIIIIG9IIIIHIIIIIIIIIIIIIIIIIIIIII%IIIIIIIII?IIIII
+chrM 488 A A 198 0 23 81 .$.$.$.$...n,,....C.....,,...,........,,.....,....,..........,....,.,,...,.....,,..,. 0/-.:DA"II%$II&I;7IDIIB9BII1IBII;I.III9IIIEC:IIIIIIIIIDII5III?IID1IIIDIIIII5III?I
+chrM 489 C C 207 0 23 78 .$..,,,NN........,,...,......G.,,.....,....,..........,....,.,,...,.....,,..,.^!, :IIIII""II);81FIII?I?I4IIAII-I&III7IAII3DIIIGIIIIIIIIIIIIIIIIIIIIIIIIIII/IIII3
+chrM 490 C C 209 0 23 79 ..,,,NN........,,...,........,,.....,....,..........,....,.,,...,.....,,..,.,^:.^!, IIIII""II:III<IIIIIIIIIIIHIIIEIIIIIIIIHIIIIIIIIIIIII8IIIIIICIIIIIIIIIII'IIIIBII
+chrM 491 C C 212 0 23 79 ..n,,....A.....,,...,........t,.....,....,..........,....,.,,...,.....,,..,.,., II"IIIIII&II:IIIIIIII(II@HIII;IIIIIIIIIIIIIIIIII?IIIIIIIIIIFIIIIIIIIIII+IIII3II
+chrM 492 A A 203 0 23 79 .$.$,t,....C.....,,...,........,,.....,....,..........,....,.,,..N,.....,,..,.,., I9I%IAIG3%@B'+III2?1I43IH1?IIIIII0IBI017IIIIIIIII>IIIIIII%IGCII"IIIIIIIIIIIIIII
+chrM 493 A A 224 0 23 79 ,$,$,$..........,,...,........,,.....,....,..........,....,.,,...,.....,,..,.,.,^!,^!, IIII<II)DD9,@II:79II<IA8A?IIIFI<III3>?III@III4I@IIIIIIIIIIIIIIIIIIIIIIII.IGIIII
+chrM 494 A A 188 0 23 76 ..........,,...,........,,.....,....,..........,....,.,,..C,.....,,..,.,.,,, II75)II;9III448ID6IA/I%III0I;IIIEI4II5IIIIIIFIIIIIIIIIIIII)IIIIIIIIIIII>II/A
+chrM 495 C C 187 0 22 77 .$.$.$N$......,,...,........,,.....,....,..........,....,.,,...,.....,,..,.,.,,,^!, II?"-EG24IIIIII=III3AI9III+I4III<,5=IIEIIIIIIIIIIIIIIIIIIIIIIIIIII/IIII?II;I6
+chrM 496 T T 180 0 22 75 C$.$.$.$.$.,,...,......A.,,.....,....,..........,....,.,,...,.....,,..n.,.,,,,^:.^:. %@G-(III1+0I-&I,)4%I,IGI'<FI,+(II2I3IHIBDII4IIIIII+AII9IIIIII+III"I+I>@4CII
+chrM 497 G G 206 0 22 72 .$,$,...,........,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,..^:.^!, III?I?IADIACE$III<IIIII88?IIIIIIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIHII0IEIIIE
+chrM 498 G G 176 0 22 72 ,$...,......C.,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,...,^!,^!, IIHII%GIIIH%I3IIIIIIIII=FIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIII+I@II/I:III3IE
+chrM 499 G G 170 0 22 71 .$.$.$,$......T.,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,...,,, IIII6>IBCI)IIIIIIIII>IFIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIII'I6IIIIIIIII<I
+chrM 500 A A 156 0 21 72 .$...C.N.,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,.T.,,,^:.^:.^!,^!,^:. 85I+$5"III4I.@3I2>+EI-54I<II;IIII=@IIIIIIIIIIIIIIIIII9IIIIIIII#IIIIIIIII
+chrM 501 T T 154 0 21 73 .$.$...C.,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,...,,,..,,.^:.^:. 6II/@/IIIII5III@A2IIEI9IIIIIIIIIIIIII>III$IIIIIIIIII(IIIIIABIII<<I32I?III
+chrM 502 T T 155 0 21 71 .$..C.,,.....,....,..........,....,.,,...,.....,,..,.,.,,,,...,,,..,,... C*3$III&I9IIII@GIIIIGIIIIIIIIIIIIIIIIIIAIIIIIIHIIIHI4III?IIIII7IIII:III
+chrM 503 A A 168 0 21 73 ....,,.....,....,..........,...N,.,,...,.....,,..,.,.,,,,...,,,..,,...^:.^!,^!, *15III%*>G>I+4.<IA<DI8II7IIIHI?"IIIIIIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIII
+chrM 504 G G 161 0 21 75 ..T.,,....C,....,..........,....,.,,...,N....,,..,.,.,,,,...,,,..,,....,,^:.^!, +A'III+I;I$I@H6HIHIIIIBI7IIIIIIIIIIIIIII"IIIIIIIIIIGIIII4IIIIAIIII>IIII<;I7
+chrM 505 A A 151 0 21 77 .$.$T.,,.N...,....,..........,....,.,,...,N....,,.N,.,.,,,,...,,,..,,....,,.,^:.^:. +I$III4"/I7IA<1GI23IIIII>IIIIIIIIGIIIIII"IIIIIII"IIIIIIIIIIIIIIIIIIIII4IIIIII
+chrM 506 T T 157 0 21 77 .$.$,$,$A....,....,..........,....,.,,...,.....,,..g.,.,,,,...,,,..,,....,,.,..^:.^:. #III&I5CII6*0II:I-IIIIIIIIIIIIIHIIII$IIIIIIIIII&IIIIIIIIIIF=IIII;IIII5II=IIII
+chrM 507 A A 150 0 21 76 .$.$.$.$C$,....,..........c....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,....^:.^:,^:, /I:3&I33.;I,./<G=I?IIIAIIIIIIIDI*IIIIIIIIIIIHDIIIIIIII=DIIIICIIII@IIIIII(I@6
+chrM 508 C C 170 0 21 72 ,$.$.$.$.,..........,....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,.....,,^:. II28III;<III0/EIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII4IDIIIIIIDGII
+chrM 509 C C 203 0 21 74 .$,$..........,....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,.....,,.^!.^:,^:,^:,^:,^:, II?3IIIII7DIIIIIIIIII+IIIIIII;IDIIIIIIIIIIIIIIIIIIIIIIIIIIIEIIIIII3II5II>?
+chrM 510 C C 197 0 21 74 .$.$.$.......,...N,.,,...,.....,,..,.,.,,,,...,,,..,,....g,.,.....,,..,,g,,^:,^:, IIIDIFI6IIIIII"IIIIIIIIIIIIII4IIIIIIIIIIIIIIIIIIIHII+E,IIAIIIIIIAII;I$18;6
+chrM 511 C C 213 0 21 72 .$.$.$....,....,.,,...,.....,,..,.,.,,,,...,,,..,,....,,.,...A.,,..,,,,,,,^:, III@/IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGHIIIIIICIIEII6II/562I
+chrM 512 A A 192 0 21 69 .$...,....,.,,..N,.....,,.C,.,.,,,,.N.,,,..,,....,,.,.....,,N.,,,,,,,, (+DII4HCIIIII*F"I*=5;2IIC$I=IIIIII0"IIIIIII?IIIF$II6III&I>I"I<I-&A/II
+chrM 513 C C 178 0 21 68 .$.$.$,....,.,,...,N....,,..,.,.,,,,...,,,..,,....,,.,.....,,N.,,,,,,,, 0IIIIIIIIIIIIIII"IDI@III5IIIIIIIIIIIIIIIIIIIII:IIIIIIIIII<"IIII;@B2I
+chrM 514 T T 186 0 20 66 ,$.$...,.,,...,N....,,..,.,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,^:, I9I1II=IIIIII"CBAIIIIIIIIIIIIIIIIDDI,&I<DIII79I9IIIII&-II.FI2/+II3
+chrM 515 A A 182 0 20 64 .$.$N,.,,...,.....,,..,.,.,,,,.G.,,,..,,....,,.,.....,,.N,,,,,,,,, /*"I7IIIF1I@875III9II-IIIIII>#IIIIIIIIIIE+II%IIII5IIII"III1IIIII
+chrM 516 T T 214 0 20 62 .$,$.$,,...,.....,,..,.,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,, II;IIII$IIIHIEIIIIIIIIIIIII?IIIIIII<GIFB4I5:IIIII>7IIBI7=?'6I3
+chrM 517 G G 157 0 20 61 ,$,$.$..,.....,,..,.,.,,,,...,,,..,,....,,.,.....,,.N,,,,,,n,,^:.^:. IIII,I,F>DHIII6I8IIIIIIIIIIDIIIIIEIIIDIAIIIIIIFII"II$/9>"@;II
+chrM 518 C C 214 0 21 62 .$.$,$.....,,..,.,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..^:,^:,^:,^:. IIIIIHIIIIHGIIIIIIIIIIIIIIIIIIIIII.IIIIIIII3>I*II6>:&6I<II3>.I
+chrM 519 T T 205 0 21 59 .$....,,..,.,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,. I0I<IIIIIIFIIIIIIIIIIEIIIIHFII&II@IIIIIII;II<II%/(II2II/.=I
+chrM 520 T T 173 0 21 59 .$.$.$.$,$,$..,.,.,,,,...,,,..,,....,,.,.....,,.N,,,,,g,,,..,,,.^:. 3;0:IIIIIFIIIIIIIIIIIIIIIIIIB;IIBGIII6I3BI"2II:;.IIIII=3:II
+chrM 521 A A 193 0 21 55 .$.$,$.,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,..^!.^:, I9I9I<IIIIIIIIIII<II0I00II2IIFIICIIIIII6?I&IIII%IFIIIII
+chrM 522 G G 149 0 21 53 .$,.,,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,.N.,^:, BIIIIIIIIIIIIIIII8I+,EI/IDII@IIIIIIII5@III<I&@(AI"I93
+chrM 523 C C 128 0 21 55 ,.,,,,...,,,..,,....,,.,A...N,,..,,,,,,,,,..,,,...a,^:,^:,^:, IIIIIIIIIIIIIIIIIII?8III$II/"IIIIHII95#=IIII=3*III%:@.<
+chrM 524 C C 127 0 21 59 ,$.,,,,...,,,..,,....,,.,.....,,N.,,,,,a,,,..,a,...,,,,,^!.^:,^:,^:a IIIIIIIIIIIIIIIIIII1II4IIII&IBH"IIII.0$2IIII6%>III7II2@I5(%
+chrM 525 C C 149 0 22 58 .$,$,,,.N.,,,..,,....,,.,.....,,..,,,,,,,,,..,,,.N.,,,,,.,,, EIIIII"IIIIIIIIIIII*I,AIIIIIIIIIEII003DIIII//8I"I%,6)(I=&&
+chrM 526 T T 164 0 22 58 ,,,...,,,..,,...G,,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,^:,^:, IIIIIIIIIIIII6I9)1I-IIEI2IIDIIIII+5IIIIII>6<IIIAII06IB-+27
+chrM 527 A A 164 0 22 58 ,,,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,..C,,,,,.,,,,, III3I=III;/II7I24II3I'II9IIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 528 A A 164 0 22 58 g$,$,...,,,..,,....,,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,, IIIF$9IIIIIII0A6(II4I+FI%:II4=IIIII'IIIIIIIIIIIIIIII3IIIII
+chrM 529 A A 199 0 22 57 ,...,,,..,,....,,.,N....,,..,,,,,,,,,..,,,...,,,,,.,,,,,^!. IIICIIII,II?>0III&I"IIIIII5III)9AIIIIIIIIIIIIIIIIAIIIIIII
+chrM 530 C C 161 0 22 57 ,$...,,,..,,....,,.,.....,,..,,n,,,,,,..,,,...,,,,,.,,,,,. I0IIIIIIIIIIII9II3IIIIIIIIIIII"III<IIII=9FIIIBIB0/FI))%)I
+chrM 531 T T 196 0 22 56 .$.$.,,,..,,....,,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,,. IIIIIIIIII@I$FII/IDIIII6GIIBII6IDI>III=:AIIII>:,-?<))G&I
+chrM 532 A A 155 0 22 55 .$,$,,..,,....,,.,...C.,,..,,,,,,,,,..,,,...,,,,,.,,,,,.^:, IIII2+II0BIAII2II?I%4II.IIIIIIII$IIIIIIIIIIIIIIIIIIIIII
+chrM 533 A A 187 0 22 53 ,$,$..,,....,,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,,., II3.II-I<,II&II>I(?II0IIIIIIIIIIIIIIIIIIIIIII8IIIIIII
+chrM 534 A A 143 0 23 51 ..,,....,,.,.....,,..,,,,,,,,,..,,,...,,,,,C,,,,,., 01III:13II7II;I&DII;+IIIIIIIIIIIIIIIIIIIIII'IIIII5I
+chrM 535 A A 155 0 23 55 .$.$,$,$.$...,,.,C....,,..,,,,,,,,n..,,,...,,,,,.,,,,,.,^:,^:,^:,^:, .)III@0-II&I#3I3:II1IIIIIIIII"IIIIIIIIIIIIIIIIIIIIIFIII
+chrM 536 T T 129 0 23 51 .$.$.,,.,A....,,..,,,,,,,,,..,,,...,,,,,.,,,,,.,,a,,^:, I%.II0I'@I:HIII4III<I-IIIIID4II+IIII55IB),>'I/*#&+7
+chrM 537 A A 138 0 23 49 .c,.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,,.,,,,,, 7II+I$0I8III/@IIIIIIIIIIIIIIIIIIIIIIIIIIIIII4I46I
+chrM 538 G G 175 0 23 49 .$,$,$.,.....,,..,,,,,,,,,..,,,...,,,,,.,,,,,.,,,,,, ,II/I9>&-CIIIIIIIIIIIIIIIIII2I<IIIIIAI67I9ID-8)*0
+chrM 539 C C 115 0 24 46 .$,$T....,,N.,,t,,,,n,..,,,..T,,,,,.,,,,,.,,,,,, *I&II$,II"III$II$I"IIIIIIII%IIIIIII89IIII2I3(I
+chrM 540 T T 134 0 24 45 .$.$...,,..,,c,,,,,,..,,,...,,,,,.,,,,,.,,,,g,^!. *III@AI5III/II$IIIIIIIIIIIIIIIIIIICIII;))0$6I
+chrM 541 T T 120 0 24 43 .$.$.,,..,,,,,,,n,..,,,...,,,,,.,,,,,.,,,,,,. I%IIIB(IIIIIII"IIIIIIIIIIIIIIIII4IIIEEI=III
+chrM 542 A A 150 0 23 41 .$,$,$..,,,,,,,,,..,,,...,,,,,.,,,,,.,,,,,,. <II=,IIIIIIIIIIIIIIIIIIIIIIIIIIIIII@I@FII
+chrM 543 C C 141 0 23 38 .$.,,,,,,,,,..,,,...,,,,,.,,,,,.,,,,,,. IIIIIIIIIIIIIIIIII/IIIIIIIIIIII3I7IEII
+chrM 544 C C 119 0 23 37 .$,$,$,$,$,$,,,g..,,,...,,,,,.,,,,,.,,,,a,. IIIIIIIII%IIIIIII9IIIIIIIIIIIIIHB?$II
+chrM 545 A A 88 0 23 32 ,$,$nt..,,,..N,,,,,.,,,,,.,,,,,,.^!, II"$IIIIIII"IIIIIIIIIIIIIH8F3III
+chrM 546 C C 86 0 23 31 ,$,..,,,...,,,,,.,,,,a.,,,,,,.a^:. IIIIIIIIIIIIIIIIIIII.IIIII>II+I
+chrM 547 A A 117 0 23 30 ,..,,,...,,,,,.,,,,,.,,,,,,.,. III+I-IIIIIIIIIIIIIIIIIIIIIIII
+chrM 548 A A 117 0 23 30 ,..,,,...,,,,,.,,,,,N,,,,,,.,. IIIIIIIIIIIIII0IIIII"I?I<IIIII
+chrM 549 C C 117 0 23 30 ,$..,,,...,,,,,.,,,,,.,,,,,,.,. IIIIIIIIIIIIIIAIIIIGIIIII1II=I
+chrM 550 A A 114 0 23 29 ..,,,...,,,,,.,,,,,.,,,,,,.,. IIIIIIFIIIIII9IIIIIIIIII4IIII
+chrM 551 A A 82 0 22 30 ..,,,..G,,,,,.,,,,,.,,,,,,.,.^!, BIIIII="IIIII9IIIIIIIIIIGIIIII
+chrM 552 A A 82 0 22 30 .$.$,,,..C,,,,,.,,,,,.,,,,,,.,., CIIII;D+IIIII<IIIIIIIIIIIIGII=
+chrM 553 G G 77 0 22 28 ,$,$,$.$.A,,,,,.,,,,,.,,,,,,.,., III&I#IIIII)IIIIIIIIIIIII;I<
+chrM 554 C C 99 0 22 24 ..,,,,,.,,,,,.,,,,,,.,., I$IIIII9IIIIIIIIII=IIBII
+chrM 555 T T 85 0 22 25 .$G,,,,,.,,,,,C,,,,,,.,.,^:. B#IIIII0IIIII&III@IIIII1I
+chrM 556 A A 74 0 22 27 T$,$,,,,.,,,,,.,,,,,,.,.,.^:.^:.^:. "IIIIIIIIIIICIIIIIIIIIIIIII
+chrM 557 T T 108 0 23 27 ,$,,,.,,,,,.,,,,,,.,.,....^:.^:. IIIIDIIII,.III@IIIII1IIIIII
+chrM 558 T T 83 0 23 27 ,$,$,$.,,,,,.,,,,,,.,.,....G.^:. III+IIIIIII>IHDIG4I4IIIIIII
+chrM 559 C C 71 0 22 26 N$,$,$,$,,.,,,,,,.,.,.......^:.^:. "IIIIIIIIIIIIIIIDIIIIIIIII
+chrM 560 G G 93 0 23 22 ,,.,,,,,,.,.,......... IIIIIIIIIIIIIIIIIIIIII
+chrM 561 C C 96 0 23 23 ,$,$.,,,,,,.,.,.........^:. IIIIIIIIII8IIIIIIIIIIII
+chrM 562 C C 93 0 23 22 .,,,,,,.,.,..........^:. IIIIIIIIIIIIIIIIIIIIII
+chrM 563 A A 93 0 23 22 .,,,,,,.,.,........... *IIIIIIIIIIIII=IIIIIII
+chrM 564 G G 93 0 23 22 .$,,,,,,.,.,........... IIIIIII9IIIIIIIIIIIIII
+chrM 565 A A 90 0 23 21 ,,,,,,.,.,........... IIIIII4IIIIIIIIIIIIII
+chrM 566 G G 60 0 23 22 ,,,,,,C,.,...........^:. IIIIII#IIIIIIIIIIIIIII
+chrM 567 T T 60 0 23 22 ,$,,,,,A,.,............ IIIIII+IIIIIIIIIIIIIII
+chrM 568 A A 57 0 23 21 ,,,,,T,.,............ IIIII$IIIIIIIIIIIIIII
+chrM 569 C C 96 0 23 23 ,,,,,.,.,............^:.^:. IIIIIEIIIIIIIIIIIIIIIII
+chrM 570 T T 68 0 23 23 ,$,$,$,$,.,.,........C..... IIIII=IIIIIIIIIII(IIIII
+chrM 571 A A 84 0 23 19 ,$.,.,.............. IIIIIIIIIIIIIIIIIII
+chrM 572 C C 81 0 23 18 .,.,.............. ;IIIIIIIIIIIIIIIII
+chrM 573 T T 84 0 23 19 .,.,..............^:. C?IIIIII2IIIIIIIIII
+chrM 574 A A 87 0 23 20 .,.,...............^:. 7IIIIIDEIII=IIIIIIII
+chrM 575 G G 87 0 23 20 .$,.,................ 0I7IEIIIIIIIIIIIIIII
+chrM 576 C C 84 0 24 19 ,.,................ AII>III5IIIIIIIIIII
+chrM 577 A A 93 0 24 22 ,.,....N...........^:.^:.^:. III.III"IIIIIIIIIIIIII
+chrM 578 A A 99 0 24 24 ,.,....N..............^:.^:. I:III??"III&IIIIIIIIIIII
+chrM 579 C C 102 0 24 25 ,.,.....................^:. III=I??IIIIIIBIIIIIIIIIII
+chrM 580 A A 105 0 24 26 ,$.,...................NN.^:. III>IEHII;8I@7IIIIIIII""II
+chrM 581 G G 105 0 25 26 .$,.......................^:. 0I>I?3FIIIIIIIIIIIII<IIIII
+chrM 582 C C 111 0 25 28 ,........................^:.^:.^:. IBI@@IIIEIIIIIIIIIIIIIIIIIII
+chrM 583 C C 68 0 25 29 ,...................NN......^:. IIIBBIIIIIIIIIIIIIII""IIIIIII
+chrM 584 T T 114 0 25 29 ,............................ IIIII3IIIIIIIIAIIIIIIIIIIIIII
+chrM 585 A A 114 0 25 29 ,............................ IIC5<,DF7I=IIIIIIIIIIIIIIIIII
+chrM 586 A A 114 0 25 29 ,$....N....................... II:81"HCHIB=IIIIIIIIIIIIIIIII
+chrM 587 A A 114 0 25 29 ....N.....................N.^!, 7G;<"7DBI;:GIIIIIIIIII6III"IA
+chrM 588 A A 80 0 25 29 ......................C....., 6I//III2IH@FIIIIIIIIII%IICII0
+chrM 589 C C 117 0 25 30 ............................,^:. CI66II6IIIFIIIIIIIIIIIIIII&I6I
+chrM 590 T T 117 0 25 30 .$...........................,. 8I98II23IHIBIDIIII<IIIAIIIII&I
+chrM 591 C C 120 0 25 31 .$.$.$........................,.^:.^:. IIIII>BII?IIFIIIIGI/IIIIII$IIII
+chrM 592 A A 85 0 25 31 .$.$....................C.,...^:.^:.^:. II37IA0IIF@IIIIIII6III#I<IIIIII
+chrM 593 A A 117 0 25 30 .$.....................,......^:. @I3E4II=6IIICIAIIIIIIIIIIIIIII
+chrM 594 A A 82 0 25 30 .$N$...........C.......,.......^:. ,"<<FIACIII?,(I=IIII'IIIIIIIII
+chrM 595 G G 114 0 25 29 ...................,........^:. AII67IIIIICBIIIIIIIIIIIIIIIII
+chrM 596 G G 87 0 25 30 .$..T..............Nt.........^:. @7I%5III7IIIIIIIII")IIIIIIIIII
+chrM 597 A A 120 0 25 31 .$.................,..........^:.^:. :>4E<IIIG<5I=IIIII&IIIIIIIIIIII
+chrM 598 C C 123 0 25 32 .................,............^:.^:. IIIIIIIIIIIIIIIII.IIIIIIIIIIIIII
+chrM 599 T T 129 0 25 34 .................,..............^:.^:. ;46CIICIC;IIIIIII>IIIIIIIIIIIIIIII
+chrM 600 T T 130 0 25 35 .................,................^:. ?18III>9>9IIIIIII&IIIIIIIIIIIIIIIII
+chrM 601 G G 103 0 25 37 .$................,...............C.^:.^:. I3GIIC8.EHIIIIIII&IIIIIIIIIIIIIII&III
+chrM 602 G G 126 0 25 38 ................,...................^:.^:. *?III?;=<I>III,49I(IIGBIIIIIIIIIIIIIII
+chrM 603 C C 106 0 25 40 ..............A.,.....................^:.^:. I;IIII6III?III$IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 604 G G 112 0 25 41 T$.$...........N..,.......................^:. -IGII59I7I=II"(I$I8IIIIIIIIIIIIIIIIIIIIII
+chrM 605 G G 106 0 25 40 .............N,........................^:. IIIIFIIIIIIII"II&IIIIIIIIIIIIIIIIIIIIIII
+chrM 606 T T 97 0 25 41 .G............,............G............^:. ($50#(+4/D-++#<0II.*9II4III&I1IIIIIIIIIII
+chrM 607 G G 105 0 24 43 ..............,....T..T..................^:.^!, BI-&*1&6IIIGIIII%;9I.;>IIIIIIIIIIIIIIIIIII3
+chrM 608 C C 118 0 24 45 .$.............,...........................,^:.^:. $;#&10..-+8IG9I6E&7"DHI=IIIIIIIIII3IIIIIII6II
+chrM 609 T T 103 0 24 48 .$...........N,...........................,..^:.^:.^:N^:. D<7;<7HI93<I"IIIA8II@IIIIIIIIIIIIIIIIIIIICIIII"I
+chrM 610 T T 120 0 24 49 ............,...........................,......^:.^:. I>.IIIIIIIIIII&IIIIIIIIIIIIIIIIIIIIIIIII;IIIIIIII
+chrM 611 T T 120 0 24 50 ............,...........................,........^:. ID=IIIIIII#IIIIIIIIIIIIIIIIIIIIIIIIIIIII=IIIIIIIII
+chrM 612 A A 99 0 25 51 .$.$.$...T.....,...........................,.........^:. 6+&-.6%,I;7DI5I$FCI9I8III:EI-IIIIIIIIIIIIIIIIIIIIII
+chrM 613 C C 101 0 24 49 .$.$.......,..T....N...................,..........^:. *+4))48$@(6%%+)0-"%BII4IFBIIEIIIIIIIIIIIIIIIIIIII
+chrM 614 A A 112 0 24 50 .$......,...........................,...........^:.^:.^:. &*0+-I0I(00)0+*I.,1I(II=I.*III&IIIIIIIIIIIIIIIIIII
+chrM 615 T T 99 0 24 49 .$....A,.........A.................,...........N.. )B8IG%I,E2,/;;I.#II9?I;II=IIIIIIII2IIIIIIIIIII"II
+chrM 616 C C 104 0 24 49 .$....,...........N...............,..............^!, B23.E%84%1-C55E@I"10ICIIEIIIIIIIIIIIIIIIIIIIIIIII
+chrM 617 C C 104 0 24 48 .$.$.$.a...........................,.............., IIBI$3IB<%IIII<IIGIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 618 C C 106 0 24 48 N$,...........................,..............,^:.^:.^:. "I@&-7*HIIIIIIIIIIIIIIIIIIIII@IIIIIIIIIIIIIIBIII
+chrM 619 T T 117 0 24 48 ,.........C..C..............,...........N..,...^:. I2&-+)(4I+>CI$&I15@IIIIIIIII,IIIIIIIIIII"II5IIII
+chrM 620 C C 106 0 24 48 ,...........................,..A...........,.... I>I$F428I0@II;IDDIIIIIIIIIIIGII&IIIIIIIIIIIIIIII
+chrM 621 T T 102 0 24 50 ,...........................,...........N..,....^:.^:. I7$D)/&2C/0<I)I*+@7IIIIIIIII/IIIIIHIIIII"II-IIIIII
+chrM 622 A A 102 0 24 52 ,$.CT.........TC.............,..............,......^!.^!. I(#$%$'$&.I8+%$/2+>:=;=<IIIHIDI0IIIII5IIIIIIIIIIIIII
+chrM 623 G G 90 0 23 55 ..T.T.............T........,..............,........^!.^:.^!.^!. '(%,%*$2.(=&%%69??%IIIIIIAIDII%I<FII8IIIIIIIIIIIIIIIIII
+chrM 624 A A 91 0 23 56 .$..........................,.....C........,............^:. )%#2-:-9$+D/)16.0I&DDB=III7A4IIII#<I?IIIIIIIDIIIIIIIIIII
+chrM 625 G G 93 0 23 57 ...T......................,..............,.............^!.^:. +$3&86I,4@I7%=@II+III7IIIIIIIII+IIIBIIIIIII%IIIIIIIIIIIII
+chrM 626 G G 103 0 23 58 .$.$..........T.............,..T...........,...............^!. '0%)A.9II>=82>IIH%IDIIIIGIIII$IIIIIIII4IIIIIIIIIIIIIIIIIII
+chrM 627 A A 91 0 23 57 .$.$.$............C........,..............,................^:. $*+30&+,.(;4)+0+@IGH1II=I6I:GI5@I5IIIHIII2IIIIIIIIIIIIIII
+chrM 628 G G 108 0 22 57 .$...........A........,..............,................A^!.^!.^:. 5GI<=4;>G=I<%IIIIII.IIII'IIIIIIII$IIIIIIIIIIIIIIIIIIIIIII
+chrM 629 C C 89 0 22 61 .$.....T....T........,..............,....................^!.^!.^:.^:.^:. 13;AI&$</?4+IIGEIIIIIIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 630 C C 100 0 22 60 .$..................,..............,.........A............... E7II)&BCII:IIIIIIIIIIIIII+IIIIIIII$IIIIIIIII-IIIIIIIIIIIIIII
+chrM 631 T T 90 0 22 63 .$.................,.....C........,.........................^:.^:.^!.^!, ,G:(1&&I*1IDAAIIIIIIIIII%IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 632 G G 112 0 22 66 .$.$......T........,..............,............................,^:.^:.^:.^:, ,A')+66>%III?IIIIIII*II1IIIIIAIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 633 T T 133 0 22 65 .$C$.............,..............,............................,...,^:, 2$->G2I4G<>HIIII@IIIIII:>IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 634 T T 164 0 22 66 .$.$...........,.....N........,............................,...,,^:.^:,^:, 3BIEIIIIIIIIIIIIIII"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICIIIIIII<
+chrM 635 C C 174 0 22 65 .$..........,..............,............................,...,,.,,^!. 43-HIA==IIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII2I
+chrM 636 C C 157 0 22 67 .$.$........,..............,............................,...,,.,,.^!.^:.^:. G?IGIIEIIIIIIIII2IIII<IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+II9*IIII
+chrM 637 A A 187 0 21 68 .$.$......,..............,............................,...,,.,,....^:.^!.^:, 3F./:II1I>;IC=%G<<>II=III.I?IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:IIIIIII
+chrM 638 T T 186 0 21 67 .$.$....,..............,............................,...,,.,,......,^!. IFIIIIIIFIII/IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII5IIIIIIII
+chrM 639 A A 187 0 21 70 .$...,..............,............................,...,,.,,......,.^!.^:.^!.^:.^:. I8III>I40III66=IIIIIIIHBIIIIIIIIIIIIIIIIIIII?IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 640 A A 185 0 21 70 .$..,..............,............................,...,,.,,......,......^!. >III9<.BI0;;.?IIIIII&I=DIIIIIIIIIIIIBIEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 641 T T 184 0 21 69 .$.,..............,............................,...,,.,,......,....... III<IIII4GIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII6IIIIIIIIIII;5IIIIII?IIIIIII
+chrM 642 C C 185 0 20 71 .$,$..............,............................,...,,.,,......,.......^!.^!.^!. IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;IIIIIIIIIIIIIIIII
+chrM 643 G G 161 0 20 71 .$.$............,.T..........................,...,,.,,......,..........^!.^:. :6%@I7IIII/III,I'I6IIIIIII1IIIIII0IIII7>IIIIII=IIII0IIIIIIIIIIIIIIIIIII
+chrM 644 A A 151 0 20 71 .$.$.$.$........,............................,...,,.,,......g............^!.^:. 9/G$2I&878=III&I:II88IIIIBIIII=IIIIII;IIIIIIIIIII>IIIIII$IIIIIIIIIIIIII
+chrM 645 T T 155 0 20 69 .$.$......,............................,...,,.,,......,.............A^:.^:. II5IIIIIIIAI8IIIIIIIIIIIIIGIIIIIIIIIIIIIIIII%DIIIIIIIII%IIIIIIIIII$II
+chrM 646 A A 162 0 19 72 .$.....,............................,...,,.,,.....T,................^:.^!.^!.^!.^!. 96III3II+IAIIIGIIIIIIIIHIAIIFGEFIIIIIIIIIIIAIIIII#IIIII'+IIIIIIII>IIIIII
+chrM 647 A A 166 0 19 71 .$....,............................,...,,.,,.....Nn.........N........... <IIAIII%I.IIHIIIIIAIIIIIIIIIFI5%(IIIIIIIIIIIIIII""IIIIIIIII"IIIIIIIIIII
+chrM 648 A A 163 0 19 70 .$...,.......................C....,...,,.,,......,.T.C................. I4?6II.B.II@@IIII5IIIH7GDIIB.C84IIII'III8?IIIIIIII%I&I8IIIIIIIIIIIIIII
+chrM 649 C C 164 0 19 69 .$.$.$,............................,...,,.,,......,.N.N.....N........... IIIII#IIIIIIIIIIIIIIIH@IIIIIIIIIIIIIIIIIIIIIIIIII"I"IIIII"IIIIIIIIIII
+chrM 650 C C 162 0 18 66 ,............................,...,,.,,......g..................... II/I:IIIIIIIIIIIIIIIIIII&IIIIIIIIIIIIIIIIIII.IIIIIIIIIIIIIIIIIIIII
+chrM 651 C C 164 0 18 68 ,$...........A................,...,,.,,......,.....................^!.^:, II/I9IIIIIII%FIIIIIIIIIFI@IIIIIII;III?IIIIIIIIIIIIIIIIIIIII9IIIIIII%
+chrM 652 C C 179 0 19 67 ............................,...,,.,,......,......................, IIIBIIIII2IIIIIIIIIIIHA4E&'IIIII8II:FIIIIII*IIIIIIIII)IIIIIIIIIIIII
+chrM 653 G G 156 0 19 67 .$.$.$......................NN.,...,,.,,......,......................, IDH9IIIIIII0FIIIII7III>E=""IIIII+II*III@IIIIIIII.@IIIIIIIIIIIIIIIII
+chrM 654 A A 171 0 18 65 .$...................C....,...,,.,,......,......................,^:, 38I5:II@I.II=I50I64<&+3&>I5III&IHIGIIFIIIEIIIIIIIBIIIIIIIIII5AIII
+chrM 655 T T 167 0 18 64 ........................,...,,.,g......,......................,, IIHBIIII478III5IIH6&8&%4IIII9IA5&IIIII8IIIIIIIIIIIIIIIIIIIIIIIIC
+chrM 656 A A 172 0 18 65 .$.$...................C..,...,,.,n......,......................,,^:. IIIIIIII:IIII5=IIB=;,&$1IIIIIIII"6IBII%IIIIIIIIIIIIIIIIIIII;IIIII
+chrM 657 A A 171 0 18 64 .$.$....................,...,,.,,......g......................,,.^:. E5IICI.>I?IIH/I:104IGIIFIIIIHII7III:+&IEIEIIIIIIIIIIIIIII=FIIIII
+chrM 658 A A 137 0 19 62 .$.$.$.$.............CC.,...,,.,,......,.C.C..................,,.. 83<I1>8<0;1II+200%%)I/CIIII&F3<II?III$B&IIIIFIIIIIIGIII=GIIIII
+chrM 659 C C 197 0 19 59 .$...............,...,,.,,......,......................,,..^:. IIIII*>IID>+=IIIIIIIIII+ICIIIIII<IIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 660 C C 166 0 19 58 .$.$.............,...n,.,,......,......................a,... /CII>9@II277IIII9II"IIIIIIFIIIIIIBIIIIIIIIIIIIIIII$II7IIII
+chrM 661 C C 126 0 19 57 .$.........NN.t...,n.,n......,......................,,...^:A II=4IIII;I""I%@III"II"II@IIIIFIIIIIIIIIIIIIIIIII7IIIII%I#
+chrM 662 C C 161 0 19 57 .$...........,...n,.,,......,.....T................,,.A..^:. I9AIIIFHFIII2III"IIIIDIHII#III1I3$IIIIIIIIIIIIIIIIIII&I#I
+chrM 663 A A 161 0 19 57 .$.$.$...C....,...,n.,,......,.........N............,,.....^:. 1+3>+$$%**/I-CII":I+&75I1@III51III89"I.FIE?EC5/,IIIIIIIII
+chrM 664 C C 170 0 20 54 .$.$.$.$.$...,...,,.,,......,..T...................a,...... IIIICIIII>IIIIII<FIII?II@)##IIIIIIIIIIIII6I8II(IIII<II
+chrM 665 C C 175 0 20 49 ...,...,,.,,......,......................,,...... )-CIIIIIIIII8F>IIIIEI9IIIIIIIIIIIIIIIIDIIIIIIIIII
+chrM 666 A A 175 0 20 49 .$.$.$,$...n,.,,......,......................,,...... ,-.I+II"IFII9/.?,II0I6IBIG5=6=>4IIHG;5.-IIIIII6II
+chrM 667 T T 112 0 20 45 .$.$N$,$n.,,......,......................,,...... II"I"&2I9@0I/1I0IIGI/I>A+<(D<I)/F6&0IIIIIIIII
+chrM 668 C C 153 0 19 42 ,$.,,......,......................,,......^!, IIIIHBGI@IIHIIIIIIIIIII=IIIIII$IIIIIIIIIII
+chrM 669 C C 135 0 19 42 .$,$,$......,.....................Ga,......,^:. IIIIIII@IIFI@IIIIIIIII;IIIIHIII56IIIIIIIAI
+chrM 670 C C 144 0 18 39 .$.....,......................,,......,. II:IHIIIIC6IIIEIIIIIII<IIIAIIIIIIIIIIII
+chrM 671 T T 108 0 19 39 .$.$.$..,.........A............,,......,.^:. <<I55II/D0).516$HIHII2?$2+,IIIIIIIIIIII
+chrM 672 T T 100 0 19 36 .$.$,$......................,,......g.. C,I8+<-II<553?DI6I/-A3(/IIIDIIIII$II
+chrM 673 G G 94 0 18 34 .$....................T,,......,..^!, )IIIIII9AIIG?II.<I511+IIIII+IIDII+
+chrM 674 C C 126 0 18 33 .$.$.$.$.$................,,......,.., IAIIIIIIIII=>II%IG$EIIIIIIIIIIIII
+chrM 675 T T 80 0 19 29 .$..............N,,......,..,^:. (AFIII2II,3I2)2"I$IIIIII*IIFI
+chrM 676 A A 117 0 19 30 ...............,,......,..,.^:.^:. 7+>0?71I0,.+*%IIIEHI)?2IIIIIII
+chrM 677 A A 98 0 19 30 .$.$.$............,,...T..,..,... ;0/07*.I22')(+IIIIII.IICIIHIII
+chrM 678 T T 108 0 20 27 .$.$..........,,......,..,... I7A@I/&+<7;IIIIIIIII&IIIIII
+chrM 679 T T 68 0 21 25 .$.$.....C..,,......,..,... ;:I*'-7$5I<IEII&II%II3III
+chrM 680 C C 105 0 21 26 .$.$......,,......,..,...^:.^:.^:. I<7IE7CIIIIIIFIIIIIIIIIIII
+chrM 681 A A 105 0 21 26 .$.$.$.$.$.,,......,..,......^!,^:. /&.'*#IIAII0IIIIIIIIIIIIII
+chrM 682 G G 51 0 23 23 A,n......,..,......,.^:.^:. %0"IIIIIIIEIIIIIII>CIII
+chrM 683 C C 63 0 23 23 .,,...N..,..,......,... $IIIII"IIIIIIIIIIII6III
+chrM 684 C C 74 0 23 27 .,n......,..,......,...^:.^:.^:.^:. <I"III%IIIIIIIIIIIIIIIIIIII
+chrM 685 T T 108 0 23 27 .,,......,..,......,....... $II?II)I:IIIEI??II$=IIIIII6
+chrM 686 A A 71 0 23 30 C$,$,......,..,.....C,.......^!.^:.^:. /II49I)9I)IIIIIIII#IIIIIIIIIII
+chrM 687 T T 114 0 23 29 ,......,..,......,..........^!. IAIIIII3IIIIIIIII&IIIIIIIIIII
+chrM 688 A A 114 0 23 29 n......,..,......,........... "4II=21II>IIIIIIIIIIIIIIIIIII
+chrM 689 T T 129 0 22 34 ,$......,..,......,...........^!.^:.^!.^:.^!. IIIIIIIIII:I65II1IIIIIIIIIIIIIIIII
+chrM 690 A A 106 0 22 36 ......,..,......,......T....N....^:.^:.^:. @IIIIIIB9CIIHIII2IIIIII*II&I"IIIIIII
+chrM 691 C C 103 0 22 37 .$.....,..,......,.........A.........^:. IIIIIIIIIIIIIIIIIIIII,IIII(IIIIIIIIII
+chrM 692 C C 147 0 23 43 .$....,..,......,....................^:.^:.^:.^:.^:,^:.^:. II?IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 693 G G 140 0 22 42 ....,..,......,........................,.. I/87I/IIIIIII5IIIIIIIIIIIIIIIIIIIIIIIII3II
+chrM 694 C C 128 0 23 44 .$...,..,......,........................,..^:.^:. IIIIIIIIIIIII8IIIIIIIIIIIIIIIIIII<IIIII'IIII
+chrM 695 C C 128 0 23 48 ...,..,......,........................,....^:.^:.^!.^:.^:. 7IIIIIIIIIIIIIIIII>IIIIIIIIIIIIIIIIIII*IIIIIIIII
+chrM 696 A A 141 0 23 50 .$..,..,......,........................,.........^:.^:. *9II06II89IIIIIIIIIIIIIIICI&I&IIIIIIIIBIIIIIIIIIII
+chrM 697 T T 105 0 22 50 .$.,..,.....C,........................n...........^!. @6IFFIIF<7I'CII6IIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIII
+chrM 698 C C 101 0 22 50 .$,..,......,........................n............^:. IIIIIIIIII(IIIII9IIIIIIIIIIIIIIIIIII"IIIIIIIIIIIII
+chrM 699 T T 140 0 22 52 ,..,......,........................,.............^:.^:.^:. IIIIIIIEIG=IIIIIIIIIIIIIIIIIIIIIIIIAIIIIIIIIIIIIIIII
+chrM 700 T T 121 0 23 55 ,..,......,.........N..............,................^:.^:.^:. IIIII@4FIIIIIIIIIIII"IIIIIIIIIIIIII?$IIIIIIIIIIIIIIIIII
+chrM 701 C C 146 0 23 59 ,..,......,........................,...................^:.^:.^:.^:, IGIIII>II$IIIII)IIIIIIIIIIIIIIIIIII0IIIIIIIIIIIIIIIIIIIIIII
+chrM 702 A A 136 0 23 62 ,..,......,........................,.......C..............,^:.^:.^:. I00I4954I#I6I1I+IIIIIIIIIIIII=IIIII?IIIIIII%IIIIIIIIIIIIIIIIII
+chrM 703 G G 137 0 23 64 ,$T.,......,........................,......................,...^:.^:. I%7"III=I/IIIDIIIIIIIIII8I*IIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIII
+chrM 704 C C 115 0 23 68 .$.,......,........................a......................,.....^:.^:.^:.^:.^:. H>)IIIGI#IIIIIIIIIIIIIIIIIIIIIIIII1IIIIIIIIIIIIIIIIIIIIII*IIIIIIIIII
+chrM 705 A A 135 0 23 68 .,......,..C.....................,......................,..........^:. :I@9:4I&I9I&IIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 706 A A 117 0 23 71 .$,.....C,........................n......................,...........^:.^:.^:. IIIIF,:)IA9IIAIIIIIIIIII<H7IIIIII"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 707 A A 115 0 24 78 ,......,........................nC.....................,..............^:.^:.^:.^:.^:.^:.^:.^:. II15DI.I4IHIIII@I<II=IIIIIIIIIII"&IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 708 C C 141 0 24 79 ,$......,........................,......................,......................^:. II;?IIIIIIII$IIIIAIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIII'II2IIIIIIIII$IIIIIIIIIIIII
+chrM 709 C C 120 0 24 79 ......,............N...........,......................,.........T.............^!. IIIIIDIII*@6IIIIIII"IIIIIIIIIIII*II?IIIII$IIIIIIIIIIII+IIIIIIIII#IIIIIIIIIIIIII
+chrM 710 C C 112 0 24 81 .$.....,............N...........,......................t........................^:.^:. I,48I>IIIII1IIIIIII"IIIIIIIIIIIIIIIIII-IIIIIIIIIIIIIII$IIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 711 T T 106 0 24 84 .$.$...,...........N............,......................,..........................^:.^:.^:.^:. >*+F8IBI/IIIIIIAI"+IIIIIIIIIII5I3IIIIIIIIIIIIIICIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 712 A A 116 0 24 83 ...,....CC..................,......................,..............................^:. 4I+I:I&I$.IEI:I,I&I)>GI8IC,DIIIIII8IIA<II4IIIIIIIII+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 713 A A 141 0 23 92 ...,........................,......................,...............................^:.^!.^:.^!.^:.^!.^:.^:.^:. .F3I0FIIICIBI-EDII3I=71III>IIIFCII7IGHIIIIIIIIIIIII8IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHII
+chrM 714 A A 127 0 23 96 ...,..C.....................,......................,............................C...........^:.^:.^:.^:. 67'II>(IIIAFI<IIIII?I$EI>GAGII4III8IIDIIIDIIIFIIIIG$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 715 C C 113 0 23 98 .$.$.$,....A...................,......................g............................................^:.^:. 7I=IIIDI)IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@IIIIIIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 716 A A 128 0 23 97 ,$.$.C.....................,......................,..............................................^:.^:. IHI-I'?6:II=IIIIIB:IE?B3FIIIIII:AIA+I=IIDI0IIII&IIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 717 A A 124 0 24 98 .$.$.........C...........,......................,................................................^:.^:.^:. III51I@II?I+I250A2EIIIIIII9II95I5>IIII3IIIIIIIIIIIIIIFIIIIIIIIIIIIIAIIIIIIIIIIIIII%I$IIIIIIIIIIIII
+chrM 718 G G 127 0 24 98 ........NN..T........,......................,.........N.........................................^:.^:. III9III7""II&IIIIIHIGIIIIIIIIIIIII7IIIIIIIII9IIIIIIIII"IIIIIIIIIIIIIIIIIIIIIIIII.I&IIIIIIIIIIIIIII
+chrM 719 G G 117 0 24 98 .$.$.$.$.....N...........,......................,..................................................... ='=IIII=I":40=II&ID+CIIIIIIBIIIIIIIIIIIIIIII1IIIIII7IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 720 T T 130 0 24 96 .....C...........,...C.....G............,............G....................A...................^:.^:. D?76/$I'@'<,I7;I<I5GI'H+B.3%;=<3II1CGIIB@FII8@II0II4II$IIIII537IIIIIIIIIII#IIIIIIIII=III$IIIIIII
+chrM 721 A A 124 0 24 97 .$.$.$............T.,......................,.......................................................^:. II?>II'>&E?BAI<%<III?IIIIG42IIIIIIEIIIIIIIIIBIII+IIIIIIIIIIIAI/IIIIIIIIIIIIIIIIIIIIIIIII$IIIIIIII
+chrM 722 C C 126 0 24 94 .$.............,......................,.....................................................T.. III(I%FIFIIIIIIIIIII:IIIFI9IEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIII+II
+chrM 723 C C 128 0 24 97 N............,......................,........................................................^:.^:.^:.^:. "IIIICI=III8GIIIIIIIIIHIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 724 G G 129 0 24 99 .$C$.$.$.$........,......................,.................................................C......N...^:.^:. I#@E6IIIIII=II-IIIII@HI*IIIIBIIIIDIIIIIIIIIHIIIIIIIIIIIIIIIIIIIII1IIIIIIIIIIIIIIIIIIII$IIIIII"IIIII
+chrM 725 A A 139 0 24 95 .$.$.$.....,......................,..............................................................^:. *7AII.(.I+2F4<1=5/*IDI,;I4;D7GIIIII5II?9IIIIGIIIIII::6II1BIIIIIII+IIIIIII0IIICIIII3I%IIIIIIIAII
+chrM 726 A A 126 0 24 92 C$....,......................,....................................C.......................... $=I<II7I3B61-2)I=1H4-I9IIICCI@AI:II9ICIIIIIHIIIF995II<IIIIIIIIIII(IIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 727 G G 122 0 24 94 .$.$.$.$,$.$.$....................,.........................................N.....................^:.^:.^:. ;2/2IIIIIIII:III8IFIIIIIII?3IIIIIIIIIIII-IIIIIIIIIIIIIIIIIIII<IIIIIII"IIIIIIIIIIIIIIIIIIIIIIII
+chrM 728 T T 122 0 24 87 ....................,.................................................................. F1F@@<4-I23>I8+@AII8I@'93HI4IDG<IIIIIIIG98>FI@@II=IIIIIIIIIIBIIIII<:IIIIIIIIIIIIIIIIIII
+chrM 729 A A 123 0 24 96 .$.$..................,..................................................................^:.^:.^:.^:.^:.^:.^:.^:.^:. IID5239HI@4I*I6IIIIII:II;III7IIIIIIIIII0494III=IIIIBIIIIIII@I3IIIII;IIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 730 A A 100 0 24 99 .$.$.$.$.$.............,.................................C.............N..................N........^:.^:.^:.^:.^:. C)49,II6I4<II44;@I%III/B089:<II1=IIII@56/III<IIII>II3II'IEIIIIII?H"II@IIIII/IIIIIIIII"IIIIIIIIIIIII
+chrM 731 G G 81 0 24 94 .$.$...........c................................................................................ &I<2III8II+IA#FIICII2IIHII*I>I2I?ECHIIIGII&IIII79IDIIIIIIIIIIII*IIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 732 C C 109 0 24 95 .$..........,................................N.N.N...........................................^:.^:.^:. .IIID7II>IIIIII?IIDIAIAIIIIIIIIBDBIIIIIIHIII"I"I"IIIIIIIIIIIII$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 733 A A 108 0 24 96 .$.........,....................................C..............................................^:.^:. 9/:II665III=HI:II=I;IFII7III>35;EIIIFFI6IIIIIII%IIIE&IAIIGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,IIIII
+chrM 734 C C 113 0 24 95 .$.$.$......,..................................................................................... GIIIII%II.IDI<IIIIIIFIIIIIIIIAF>III?IIIIIIIIIIIICIIIIIIIHIIIBII&IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 735 A A 123 0 24 95 .$.$.$...,.....................................................................................^:.^:.^:. IHH6I4IIII4II7&II2IIIIIII9/4,9IIIIIAICIII:IIIIB>HIBII=III'IIIIGIIIIIIIIIIIIII8IIIIIIIIIIIIIIIII
+chrM 736 A A 106 0 24 97 .$.$.$,$.........................................N........................C.....................^:.^:.^:.^:.^:. 19%I/II<GICI501I<6>IIII3-3=II9@=@IC>I5GIII>EA"III?DIIIIIIIGIIIIIIIIIII$IIIIIIIIIIII.IIIIIIIIIIIII
+chrM 737 A A 98 0 24 98 .$.$.$..............................C................T.......................C..................^:.^:.^:.^:.^:. AI709I4I>IDII.7IIC+938AEC5?IDIC5I*IIII7I21?5B1AIII#IIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 738 T T 87 0 24 99 .$.$................................................C...............................N............^:.^:.^:.^:. 0IDI.II3IIAIIIII978=II?II0IDIIIIIIII:IIIII;CIII.II%IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIIIIIII
+chrM 739 A A 98 0 24 97 .$.$.$.$.$............................................................................................ I9ID;HIIICIIEI0002II6BG<I8II+IIII7B:1IICI=III$IIICIIIIII$IIIIIIIIIIIIIIIII&IIIIIIIIIIIIIIIIIIIIII
+chrM 740 T T 87 0 24 93 .$..............................N.......C...C................................................^:. 4I7IIIIII2.3I+I8I=-IIIIIAI<III8"III69II%5II'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 741 C C 101 0 24 92 .$.$.$......................................................................................... IIIIIIIIIIIIII=II,IIIIIIIIIIIIIIIIIIIIIAI;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 742 C C 85 0 24 92 .$.$.$.$.$.$.$.$............................N.....................A..............................^:.^:.^:. IIII+87AIIIAIIGIHIIIIIIIIII?IIIIIIII"IIIIIIIIIIIIIIIIIIIII(I<IIIIII9IIIIIIIIIIIIIIIIIIIIIIII
+chrM 743 A A 88 0 24 86 .$..............C........................T...................................N.......^:.^:. =IC7<C@I4III7IH,IE>IA-:+6IIIIIII=IIIIII=%IIIIIIAIIIIIIIII%IIIIIIIIIIIIIIIIII"IIIIIIIII
+chrM 744 A A 101 0 24 85 .$.................................................................................... IIIICIIIIIIIIIII?HIIIII=III(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 745 C C 84 0 25 86 .$.$..............................N.........................................N.........^:A^:. B5IE/I<IIIIICIGIA>ICII8C8I9IIIII"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIII0I
+chrM 746 A A 83 0 25 86 .$.$.$.$................................C...............................................^:.^:. 3+:FA>4A?I=I5I1(AI524I:<IEIDI0IIIII=$IIIIIIIIIII9AIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 747 T T 83 0 25 83 .$..................................................C..............................^:. 3IF('I:4-?+IH1I2-@G7IIII3IIIIIIGAIIIIIIIIIIIIIIIIII%IAIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 748 A A 97 0 25 86 .$.$C$.$.$.$.$.$.$.........................................................................^:.^:.^:.^:. ?DIIIII<I8I@>B2IIFB%IIIIIIHIII;4III3IIIEEIIIIIIIIIIIIIIIIIIIIIIIIII$IIIIIIIIIIII@IIIII
+chrM 749 A A 85 0 25 80 .$N$.$.$......C...........N...................................................N..^:.^:.^:. 6"IIA0DI4)'III?>IBIIE<"IIIIIIIII3IIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII>II"IIIII
+chrM 750 A A 93 0 25 77 .$.$............................C......C......................................^:. I2GII,II%@IAIIIII9IIIIIIIIIDII>I>II=IIIIIIIIIIIIIIIIIIIIIIIII8IIIII.IIIIIIIII
+chrM 751 A A 87 0 25 78 .$.$..................N...G..................................................^:.^:.^:. IIII5:HII>IIIII<IGII"III&IIIIIIIIIII>IIIIIIIIIIII/GII9EIIIIIIIIIIIIIIIIIIIIIII
+chrM 752 A A 101 0 25 77 .$.$.$.....N...................................................................^:. 1+5=>I1D"II3I6IIIIIIAII;II0IIIIIII6@IIIIIIIIIII+IIIIIIIIIIIIIIII5IIIIIIIIIIII
+chrM 753 C C 87 0 25 76 .$.$.............................................................N..........^:.^:. II>9II9IHHEIIBIIIGEII&I+=IIIIIIIIIIIIIIIIIIIIIIIIIIIII8IIIIIIII"IIIIIIIIIIII
+chrM 754 G G 102 0 25 82 ..........................................................................^:.^:.^:.^:.^:.^:.^:.^:. I95IIIIII>IIIIIIIII?IIIIIIBIII.7IIIIIIIIIIIIII$IIIIIIIIII3@IIIIIIIIIIIIIIIIIIIIIII
+chrM 755 T T 92 0 25 84 A$.$.......G....................C.....................G........N..C.................^:.^:. %:32+II8+#86I6)&I@44II6IIIIIIB)IIIII='HII59IIII>IIII%IIIIIIII"II.IIIIIIIIIIIII%IIIII
+chrM 756 T T 86 0 25 82 .$.........................C....................................................... 4IAII+C%IFII67IIFIIII<IIII(>5IIIIIFIIIIIIIIIIIIIII&IIIIIIIIIIIIIIIII7IIIIIIIIIIIII
+chrM 757 A A 85 0 25 84 N.....C....................................N.......C.............................^:.^:.^:. "3III.%?<IIII5I>IIBHAII-II5:I1IIEIIIIIIIIII"IIIIIII(III0IIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 758 G G 84 0 25 84 .$.$.$.$......N......................................................................... IIIIIG0DIH"IIID29I1IIII0IIG/*I.IIIIFIIIIIII0IIIIIIIIIII4IIIIIIIIIIIII:IIIIDIIIIIII3&
+chrM 759 G G 92 0 25 82 .$.$N...........T.......................N.........................................^:.^:. 4B"IFIIIIIIE6G'I7IIIIII09IHIII4IIIIIII"DIIIIIIII>II;IIIIIIIII/IIIIIIIIIIIIIIIIIIII
+chrM 760 T T 106 0 25 86 A$.....A..............G........................A........G........................^:.^:.^:.^:.^:.^:. #6<EF9$330.II4*;EII7+$I;II:3IICB4073I6;IEIIII5+II@IIIII:I+IIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 761 C C 85 0 25 85 .........A.......NN.................................................................. FIIII=II4+II;8IIA""3@FIIIIIIIIIIEIIIIIIIIIII?III.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII&III
+chrM 762 A A 100 0 25 86 .$.$.$..................................................................................^:. IHIIH*7:H,IH50AIIII*1EBII@/@:IFI@IIII=IFIIIHBIII6II'CI5I9I-A/IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 763 A A 99 0 25 83 N........................................................................C......... "IC:6,1III=CIIIIB6GIII7G<DI>IIIIII8IIII$IHIII=I&IIIIIIIIIIIIIIIIIIIIIIII39IIIIIIIII
+chrM 764 G G 107 0 25 86 .$.$.$.$.$.$.$.$T$.....NN......................................AN...........................^:.^:.^:. 9I9I@8I4-I7IC&""=&=I+II=>I>IIIIIIIIIIIII@IIII+IIIIIIIII"II%IIIII@IIIIIIIIIIIIIIIIIIIII
+chrM 765 G G 88 0 25 77 .$.$.$.$.$.T..T.T............................................N.................... :,I;&I7D.%I'III<HD7IIIII*CIIIIIIIIII%IIIIIIIIIIIIIIIHIII"IIIIIIIIIIIIIIIIIIII
+chrM 766 T T 88 0 25 72 ................................N..........C............................ I%.&IIII93+;8;/&<@II(IIII2E3I@I3"9ICIII(II:/7I9IIIIIIAI;EIIIIIIIIIIIIIII
+chrM 767 G G 86 0 25 74 .$.$.$...T.....................................T...........................^:.^:. II>+3A%IAEC7:FI@II/IIIIIIIIIII%.IIIIIIIFIIII)IIIIIIIIIIIGIIIIIIIIIIIIIIIII
+chrM 768 T T 102 0 25 71 .$.$................................A.................................... &IBGII@5ICF>0?BII2IIIIII@+II;IEIII7I,III8IIIIIIIIIIIE@IIIIIIII8IIIIIIII
+chrM 769 A A 104 0 25 73 .....................................................................^:.^:.^:.^:. IGI;DIHIBII<EII7IIII%<BIII-IIIEIIIIIII:IIIIGIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 770 G G 87 0 25 75 .$.$.$...................................................T..................^:.^:. I9I:5CIC9IIIIII:IIAI0I<;II-IIIIIII?IB2-III?IIIIIIIIIII)IIIIIIIIIIIIIIIIIIII
+chrM 771 C C 102 0 25 75 .$.$.$.$.$...................................................................^:.^:.^:. IIIII@;2FDCIIIIIII>40II&IIIII*IDII3,?IIIIIEIIIIIFIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 772 C C 88 0 25 71 .$.$.$.$.$...........................N.....................................^:. IA<I;II<IIII>II4II&IIIIIIIEIIA)I"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 773 C C 91 0 25 67 .$.$.$.$..........A........N.................T........................^:. I?IEIII$IC:II#%IIII>III"II.IIIIIIIIIIH=II$IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 774 A A 103 0 25 64 ...............................................................^:. :II%H6/3I2%II8C8>5=&?8,II5IH:IIIICDII1II=HI4IIIIIII5IIIIIIIIIIII
+chrM 775 T T 106 0 25 66 .$...............................................................^:.^:. III:C=III/=FIC2II<IIB<III2IIIIIII?=II6IIIIIIIIIIIIIEIIIIIIIIIIIIII
+chrM 776 G G 106 0 25 65 ................................................................. III97HII+IIIIIIIDIII0?II@IIIIIIIEBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 777 G G 94 0 25 65 .$.$.$...............N..T........................................... HI<I=II@,IIIIII9=I"II,IIFIIHIIFII8IIII1IIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 778 G G 108 0 25 63 .$.$...T.....C......T...................T.......................^:. AG(II$IIIII&6BIII:'IIIII9IIIII=IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 779 A A 99 0 25 66 .................C...........................................^:.^:.^:.^:.^:. +II&/*B,8,33I1.&80GII-6III214?9IID=III?IIII(I?IIIIIIIIIIIIIIIIIIII
+chrM 780 T T 105 0 25 68 .$.$................................................................^:.^:. II93IHIII%I;HI?1>@?AIGIIIII6I=IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 781 G G 89 0 25 66 .$.$.N.........................................................A.... I+G"IIII(a)IIIII.IIIIIBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII%IIII
+chrM 782 G G 100 0 25 65 .$........T..T................C..................................^:. IIIIII<II-II0II3II4IIIIIAIIII%II3IIIIIIIIIIIIIIIIIIIIIIIIIBIIIIII
+chrM 783 A A 92 0 25 68 .$.$.$.$....T.....C.....T......................C....................^:.^:.^:.^:. @9.8&7.=#.+I32$I).II&1*6.75;97III0III@CE:II&;III@IIIIIIIIIIIIIIIIIII
+chrM 784 G G 88 0 25 65 .$.$.$........................N....................................^:. I=IIII3+II?II%IIIIF7IIII&II"IIIIII$CIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 785 A A 99 0 25 63 .$.........................................................C...^:. II/+III%I.4IE:6..;8+I$B@II2IIIIDI@0IIIEGIFIIIIIIIIIIIIIIIICIIII
+chrM 786 G G 92 0 25 65 N$.$.$...........................C...............................^:.^:.^:. ";4%IIIII=II?IA2II+I'IIIIIIIII$IIIIICIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 787 A A 88 0 25 65 .$............G................................................^:.^:.^:. :E?48/DII/11.$IID/5III1IIII6BIIIGI7GIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 788 A A 128 0 25 66 .$.$..............N...............................................^:.^:, IC3=-*IHI(a)=7.I+I";III?IIIIIIAII@;III<IIIIIIIIIIIIIIIIIIIIIIIIIIII=
+chrM 789 A A 112 0 25 67 .$.$.$.$.$.$.$.$......C.........N......................................c^:.^:.^:, ?;16II=C3/0?EI&=8II8GIII"I?=IECIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$III
+chrM 790 T T 120 0 25 60 .$.$....C..C.............................................g..,^:. 127III&II%IBIIIIIIDIII@I?IIIIIIIIIIIIIIIIIIIIIIIIIIIIII&IIAI
+chrM 791 G G 155 0 25 60 .......T.............................................,..,.^:T^:, 7III5II$IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII%4II/
+chrM 792 G G 168 0 25 64 .$.$.$.C..C.............................................,..,..,^:.^:,^:,^:, EIII&IC'IAIIII4IG?IIIIIIIIIIIIIII8IIIIIIIIIIIIII6IIIIIIIIII-I8II
+chrM 793 G G 195 0 25 64 .C................................................,..,..,.,,,^:a^:,^:t I%IIGIIIIIIIIIIII9IIIIIIIIIIIIIIIIIIDIIIIIIIIIIIIIIIIIII7I0II#I%
+chrM 794 C C 179 0 25 69 .$G$..A.............................................,..,..,.,,,,,g^:,^!.^:a^:,^:a I$:I3I4IIIIIIHIIIBIIIIII6IIII*IIIIIIIIIIIIIIIIIIII(II?II/IEII%I$II$$$
+chrM 795 T T 212 0 25 74 .$.$.$.$.$.$...A....................................N.,..,..,.,,,,,,,.,,,^:.^:,^:,^!.^:.^:,^:, II$IIIIII9I9@IIDIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII*IB$I#%#II$2$II:II4I
+chrM 796 A A 187 0 25 71 ..........................................,..,..,.,,,g,g,.,,,.,,..,,^:,^:,^:, IIIA637IIIAII@IIIIIIIIIII3IIIIIIIIIIIIIIIIIIIIII6IIII%I%II%I8IIIIIIGI+*
+chrM 797 C C 227 0 24 86 .$.........................................,..,..,.,,,,,,,.,,a.,,..,,,,,^:,^!.^!.^!.^!.^!.^:,^!.^!.^:,^:,^:.^:,^:.^:, III/-:CIIICIIGIIIIIIIIIII%IIIIIIIIIIIIIIII5IIIII/IIII/6-II%%$I/III.I%I11IIIIIIIIA.IIII
+chrM 798 A A 241 0 24 94 .......C.................................,..,..,.,n,,,,,.,,,.,,..,,,,,,.....,.N,,.,.,^:,^:g^!.^:,^:,^:,^:.^:,^:, IA;57*9&BIGIIIIICIIII/@I;IIII<%%IIIIIIIIIIIIIIIIII"I$I#II%>?IIIIIIIII(IIIIIIII"IIIIIII*IIIIIIG
+chrM 799 T T 238 0 23 101 .$.$.$......................................,..,..,.,,,,,,,.g,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,^:,^:,^!.^!.^!.^!.^:, IIII0III<IIICIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII2I?I?III;I$7'II6IIIIBI'IIIIII>IIE:IIIII$II<FI;=IIIIIIG
+chrM 800 T T 241 0 23 102 ....................................N.,..,..,.,,,,,g,.g,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,n,....,^!.^:,^:,^:, I27IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII4IAII%I(II$.,IFIIIII3>+IIIIII?III,IIIII$IIIDI;:"IIIIIGI0II
+chrM 801 T T 240 0 23 105 ....................................C.a..,..,.,,,cn,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,^!.^:.^:, IBIIGIIIIIIIIIIIIIIIIIIIIIIIII7IIIII'I#II$II4IIID$"(II&1&IIIIIII>I$IIIIIIIIIIIIIII3&II@IIIDIIIIIIII$DIII;
+chrM 802 T T 237 0 23 111 .$.$....................................,..,..,.,,,,,,,.,,,.,,..,,,,,,.....,.N,,.,.,,,.,,,.,,,,....,.,,,..,^!.^:,^:,^:,^:,^:, I@IIIIIIIIIIIIIIIIIIIIIIII6IIIIIIIIIII'IIIII3I<IBIIIII*4-IIIIIII@IIIIIIII:I"IDIII<3&IIIAIC<I:IIIIII%E0II4IHDEG@
+chrM 803 C C 235 0 23 115 ....................................,..,..,.a,,,,,,.g,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..a.,,,,,^:.^:.^:.^:,^!.^:, GDE;I@IIIH@IIIIIBIIIIIIII)*IFIII.IIIBIIIII$I&I$+7*II#(.I/ICI0I+II0IIII=IIII?IIII5#III4I,IIIIIIICI$5III,IBIIAIIIIII1
+chrM 804 T T 238 0 23 118 .$.$.$.$................................,..,..,.,,,,,,,.,,,.,,..,,,,,,.....,.N,,.,.,n,.,,,.,,,,....,.,,,..,.,,,,,...,.,^:.^:.^:, III@I2IGI=IIIIIIEIIIIIIII:5IIIIIIIIIIIIIII6<I?IEHFII'45IIIIIII=10CIIIIIII"IDIIIG"HIIIAI:BIIIIIIAI-2III7IIC?6CIIIIII/II
+chrM 805 A A 237 0 23 121 .$.$..............................,..,..,.,,,c,c,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,n,....,.t,,..,.,,,,,N..,.,..,^:.^!.^:.^!.^!.^:,^:. 1IIEII3>I*II3EB,IIIII2%IIIIIIIIIIIIIII=I/3B%$$II&I<III?IIII5I>IIIIIIIIHFDIIIIIIIIIIIA"IIIIIII$<DIIDIFI@B;"IIIII$IEIIIIIII
+chrM 806 C C 235 0 23 123 .$.$.$...........................,..,..a.,,,,,,,.a,a.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,T.a.,,,,,...,.,..,.....,.^!.^!.^:,^:. III?;HIIII)II4IIIIIDFIIIII'IIIIIIIII%IIIII%III#%+I;III6I%I2IIIIIIIII?@GIIIIIIII)I2IIIIIIIII&II$I0IIIIBCIIIII(IIIIIIII3%II%I
+chrM 807 C C 248 0 22 124 .$..........................,..,..a.,,,,n,,.g,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,A.a.,,,,,...,.,T.,.....,...,.^!.^:.^:.^:. IAEIIIIIIIIIIIIIIIDIIIHIIII,IDIII)IIII$"(II$)%I?III2I+CIIIIIIIIIIIIIIIIIIIII0I1IIIIIIIII&;I(I(III52%IIIII(4I0IIIII+III4IIIII
+chrM 808 C C 226 0 22 132 .$..............NN........N,..,..,.,,,,,,,.,aa.,,..,,a,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..a.,,,,,N..,.,..,.....,...,.....^:,^:,^:,^!.^!.^:,^!.^!.^:, IIIII;AIIIIIII.""I?IIIIII"=IIIII%II$I'I+II$)7I=IGIII%;IIIIIIIIIIAIIII=IIIII+I43IIIIIIII%IIII/IIII5;"IIII1IIIIIIII7III/IIIIID46II4II:
+chrM 809 T T 242 0 22 134 .$.......................N,..,..,.,,,g,,,.,,,.,,..,,,,,,.....,..,,.,.,,n.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,C..,.....,,,..,..,^:,^:,^!. IIIIII:IIIIIII01II8I1'II"EI,III3IIII&I$II(.(IIFIIIIII+IIIIIIIII1,IIIBI"III5I34ICIIIIII/IIII?IICC53IIIHII>I2IIIIII:IIIIIIII91III1II5I4I
+chrM 810 A A 243 0 22 144 .$.$......................,.C,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,C,.,,,.,,,.,,g,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.^:,^:.^:g^:,^:,^:,^!N^!N^:,^:,^:, HIII28IIIGII;III*I,II>IB62$2IIDDIIIIIIII&IIIIIIIIIIIIIII*IIIIIII$IIIII>IIIIIIIIIIIIII#IIIIIIIIIIIIIIIII>IIIIIHEI.IIIIIIIIIIIIIIIIIIII(I#III""GI9
+chrM 811 A A 236 0 22 145 ...........CC.........,..,..,.,n,,n,,.,,,.,,..,,,,,,.....,..,,.,.,,,C,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,^!.^:.^:. >I<0I:IIII@&&2I<I9III>IA3IIIB5I"II"III,IGIII8IIIIIIIFIFIIII+II:IIII9-IIIIII3I9:IIIIIIIIIIIIIIIII,+IIIIIIIIIIFIIIIIIIIIIIIIIIIIIII>I+I3IIIIIII*III
+chrM 812 G G 233 0 22 149 .............N........,..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,n,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,.N,,,.,.,,,,NN,,,.NN^:,^:,^:,^:t II1:I+II0IIII"1>I/IIIIIIIIIIIIIIIIIIII+:)III7IIIII)IIB(:=II:IIIIIDIA<IIIIII"IIIIIII(IIIIIIIIIIIIIIIII0+IIIIIII7II%IIIII=IEIIII"6III#I+7E-"">@%I""C9;$
+chrM 813 A A 237 0 22 157 .$.....................,CC,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,...C.,...,.....,,,..,..,,,.,.,,,,..,,,...,,,c^:,^:,^!.^!.^!.^!.^:,^:, I6-5E*IIII:A@I+C5A=II<I&*IIIIFIIIIIIII(IIIII)IIIIIIIIIIIIIIIIIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII4IICIIIIIIIIIIAIIIII?III&I$IIIIIII%III2IF$IIIIIIII
+chrM 814 A A 246 0 22 162 .$.$.$.$.$................n..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,g,C,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,...C.,,,..,..,,,.,.,,,,NN,,,...,,,g,,....,,^!.^!.^:.^:.^:,^:, IH;AIIIII=II8IIII+III">*IIIAIDIII#III+IIIIIDIIIIIIIIIIIIIIIHHHIII$I0IIIIIIIII=IIII#IIIIIIIIIIIIIIIIII?IIIIIIIIIIIIII%I;CIIIDIIII@I(I7III""38FIIIIF1+IIIIIIIIIIIIII
+chrM 815 C C 246 0 22 160 .$.$..............,..,..,.,,,,,,,.,,a.,,..,,,,,,.....,..,,.,.,,t.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,a....,,....,a^:.^:.^:, IIIIIIIIIIIIII:IIIIIII8IHIII$III*6=IIIIIII@I*IIIEI8IIIIIIIIII-IIIII:IIIIIIIII$IIII<IIIIIIIIIII2IIIIIIICIEIIIIIIII/I2IIIIIAIII*I#I2$IIII*III8C5$9$IIII9/IIII<&II8
+chrM 816 A A 255 0 22 169 ..............,.C,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,.NN,,,g,,....,,....,,..,^:,^:,^:.^:,^:,^:.^:.^:,^:,^:,^!. IHEF8II?+GI:I@I7%IIIIAIIII+IIA'II>II@IIIIIII3IIIII/III7IIIII5IIIIIIIIIIIIII+IIIIIIIIIIIIIIIAI6IIIIII;I8IIIIIIIIIIFIIIIIIIIIIIIIIIIIIIII""IIIAIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 817 A A 254 0 22 171 .$.C.......T..Nn..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,n,N,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,.^:.^!. IDIII?9=<0$I2"":I*III1IIIIIIII.I@FII5IIIIIIII322+IIIII3III"I"IIIGIIII2>IIIIIIIIIIIIIIIIIF4IIIIIIIII)-I>IIIIII>IIIIIIIIIIIIIIIIIIIIIII6IIIIII$IIIIIII?IIIIIIIIIIIIIIIIIIIIII
+chrM 818 G G 239 0 22 174 .$.$.$.$........N,..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,.NN,,,n,,....,,....,,..,,,.,,..,,,...^:,^:,^:.^:, IIIII<I>?*I4"II&II4IIIIII8III3I3IIIIIIIIIIIIII=5IIIIIIIIIII<IIIIIIIII<IIIIIIICIIIIIIIIIIIIII?IIIIIIII%IIIIIIIIIIFIIIII9III&IIII3II:=II""ID;"IIIIIII5IIIIIIIIII:II7IIIIIIII-III
+chrM 819 A A 244 0 22 177 .$........,.C,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,^:.^:.^:,^:,^:,^:.^:. I.;4I%765I5$IIII+IIIIIIIAIII7II3IIIIIIIFIII%IIIII1IIIII:III9IIII1,I7IIIIIIIIIIIIII(I9IAI)III>II+III8IIIIIIDIIIIIIIIIIIIIIIIIIIIIIIIIIII'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7IIIIIIIII
+chrM 820 A A 255 0 22 183 .$.......,..,..,.,,,,,,,.,,,.,,..,,,,,,....C,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,...C.,...t.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.g,..,,,...,g.,..,,,..^!.^:.^:.^:.^:,^:,^:, I3/I+:DII7&I&I*<III$$(II;II@II2IIIIIIIIIII&IIIIE2IHIII)IIIDIIIIDCI>/BIHIIIIIIIIIIII'III6IGIII+7IIII@IIIIIIEIIIDIIFI9IIIIII9II1,+III.I(83IIIII4GIIIIIIIIIIBI,BIIIIIIIII$IIII<5@IIIIIII9I
+chrM 821 C C 246 0 22 188 .$.$.$....,..,..,.,,,,,,,.,,,.,,..,,,,a,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.n,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,^:,^!.^:,^:,^:,^:. ?I,0IIIIIIIIIC1III&I.II%IIIIIIIIIII'IIIII3IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICIIIIIIIIAIII/IIIIIIII3I,IIIIIIII?IIIIIIIIIII"IIIIIII<IIIIIF$IIIIIIIIIIIII&IIIIIIIIIIIIIIIIIIIIIII-7IIIIIIH/I&IIIII
+chrM 822 T T 242 0 22 186 .$.$.$.,..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,N,,..,,,...,,.,..,,,......,,,,.,,,.^:, &IIIII%IIII3III%I$II)/IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDIIIIIIIIIIII4I'IIIIIII0IIIGEI-IIIII:II,IIIIIIIIIIIIIIII3I@IIIIIFIIIII&IIIC1I*0IIIII03IIIIIIII=8>"D3III;IIIIEIIAII-2+IIIIII0@20I369II
+chrM 823 T T 252 0 22 192 .$,$..,..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,c,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,n,,..,,,...,,,g,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,^:.^!.^:,^:,^:,^:,^:,^:,^:, IIIIIII79I0IIIIII$&>IIIEIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEII$IIIIEEIIIIIIII4IIIIIIII'IIIIIIII(;III;IICI@I+II"<CII>=/III6:B#0IIIII0FIIIIDIII5E6I@8IIIIGIII9II=II.$)IIIIII9>0:I59BIIII/E2?BA/
+chrM 824 T T 244 0 22 196 .$.$,$..,.,,,,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,N,,..,,,...,n.,..,,,......,,,,.,,,.n..,,,,,,,^:.^:,^:.^:,^!.^:, IIIIII=IIIIIIII,4IIIIIIIIIIIIIIII<IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEIII9?0&IIIIIIIII>CIIII3II/IIICIIICII:I+III;I6DII27FIIII;:%1IIIII11IIII>III75:"I;IIII>III;"IBII232IIIIII+;56I5/<I"II(76?@B-I@I-I>
+chrM 825 A A 252 0 22 196 .$.,.,,,,,,,.,,,.,,..,g,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,^:,^:n^:, IIIIIIIIIIIIIII:II0II&IIII@C4I7I:IIIIIIIII<III8IIII3,I8IIIII=IIIIIIIIIIIIII6IIIHII)I4IIIIB>I9IIIIIIIIIIIIIIIIIIIIIIII**IIIIIIIII0IIIIIIIIIIIII*IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIIII9IIIIIIIIIIIII"I
+chrM 826 A A 255 0 22 198 .$,$.,,,,,,,.,,,.,,..,c,,,,....C,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,C.,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.g..,,,,,,,.,.,.,,,g^!.^:.^:, IIIIIIIIIIIIII=II4II#IIIIIIII'IAIIIFIIIIIIIIIFIIII40IIIIIII/IIIIIIII8IIIII'I@III4II/IIIIIIIIIIIIIIIIIICI#IIIIF%#II)IIIIADIGIIIIIIIIIIIIIIIIIII%AIIIIIIIIIIIII/337II@IIII/I:IFIII#II/BI9I;EIIIEIIII@III
+chrM 827 C C 253 0 22 200 .$,$,$,$,,,,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,N.,.,,,,,...,.,T.,.....,A..,.....,,,..,..,,,.,.a,,,..,,,...,,,,,,....,,....,,..,,,N,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,^:.^:.^:.^!. IIIIIIIIIIIIIII8IIIIIIIIIII*IIIIIIIIIIIIIIIIIIFIIIIIII+II"IIIIIIIIIIIIII%IIIII<II$IIIIIIIIIIIIIIIIIIIIII)IIIIIIIIIIIGIIIIIIIIIIIIIIII&IIIII"IIIIIIIIIIII"IIII=DII+IIII8IIIIIIIIII;8I0II?IIIIIICIIIIIIIII
+chrM 828 C C 255 0 22 199 ,$,$,$,.,,,.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,g...,,,,,,....,,....,,..,,,.,,..,,,...,,N,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....^:,^:,^:, IIIIIIIIIII8IIIIIII7IIIIIIIIIIIIIIIEIIIFIIIIIIIIII$IIIIIIIIIIIEIIIII&IIIII;@I-IIIII<IIIIIIIIIIIIIIIIIIIIIIII'IIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB"IIIIIIII*IIIH9IIICIIIIIIF/I8I<@IIIIIII>IIIIIIII(%I
+chrM 829 C C 249 0 22 197 ,$.$,$,$,$.,,..,,,,,,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,t,,....,,....,,..,,,.,,..,,,...,t.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,^:, IIIIIIIIIIIIIIIIID6.;IIIIIIIII(IIIIIIIIIIEIIIII&IIIIIIIIIIIIIIIEI&IIIIIE-I9II8IIIIIIIIIIII=IIII?IIIIIIIIIIIIIIII#IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII%IIIIIH+IIIIII#2I9III@IIIIIAI0ICIIIIFIII=<IIIIIIIA*I:
+chrM 830 G G 255 0 22 198 .$,$a$.$.$,$,$,,,,.NNNN,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,C..,...C.,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,^:.^!.^:c^!.^:,^:, <II1IIIIIIIA""""I0III;IIIIIIIII=IIIIC<IIIIIIIIIIIIIIIIII.III3<IIIIIII)IIIIIF%)IIIIIIIIIIIIDIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIHIIIIIIIII9III=IFIIIIIIIIBIIIIIIIIII:IIIIIIIII:III8III9IIIIIII7II#IBI
+chrM 831 G G 255 0 22 195 ,$,$,$,.....,..,,.,.,,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,..C,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,T,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,^:.^:.^:.^:. IIIIE?B,,IIIII3IFIIIIIII;IIII>7@>IIIIIIIIIIIIIIIIIIBII@IIII$2I1I/IIII:IIIIIIIIIIIIIIIIIIIIIII5IIIIIIIIIIIIIIIIICIIIIIIIEIIIIIIIIIIIIIIII9IIIIIIIIII%II/<IIIIIIIIIIIIEIII<IIIDIIIIIIIIII@4II&IBIIIII
+chrM 832 A A 248 0 22 195 ,$N$.$.$.$.$,$.$.$,$,$.$,$.$,$,,.,,,.,,,,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,t...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,....^:.^:.^:, I"I,G>I(III+I0IIIHIII2IIII49+*I8IIII9I>IIIIIH;(I>I4HI5>GHII&IIIIA?IIIIIIIIIHIIIAIIIIIIIIII'II>IIIIII?I<EIIDE5III5IIIIIIIIIIII9IIIIIIIID;BHI3IIEI'IIIDI:IIII4I8I;IEIIIIII1-BII@IIIDIII;II$IIIIIIIII:
+chrM 833 C C 247 0 22 185 ,$,$.$,$,$,$.$,$,$n,....,.,,,..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,g,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,^!.^!.^:n^:n^:, IIIIIIHII"II?IIIIIIIIIIIIIIIIIIIIII=I'III0HI-IDIIIIIIIIIIIIIIIIII0IIIIIIIIIEIIIIIIIIIIIIIICIIIIIIIIIIIIIIIIIIII&IIIIII(II>IIIIIII$IIIIIIIIII<II7IIAIIIIII-I?IIIIIII(.;+II)I2IIIIIII1II""6
+chrM 834 G G 247 0 22 181 ,$,$.$.$.$.$,$.,,,..,.,,,,,...,.,..,.....,C..,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,^!.^:.^:,^:,^:. II5,IEI8IIIIIIIIIIIII8FIII+IIIFI99I$I'III@>:IIIIII@IIIIIIIIIIIIIII6IIIIIIIIIHIH:IIIIBIIIIIIIIIIIIIIIIIIIIIHI=-IIIIIIIIII/IIIIIIIIIIIIIIIIIIIIAIII7=II?IIIIIII?II%I1IIIIIIIIIIIIIIIIII
+chrM 835 A A 247 0 22 178 .$,$,$,$..,.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,g.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.^:,^:.^:,^:, IIIIIII9IIIIIIF+I2IE4I<7I.'I%>III>4I5IIIIIIIIIIIIIIIIIIIIII@IIIIIIIII@)@IIII>IIIII<IIIIIIFIIIII4II#II7+IIIDI<IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$IIIIIIIIIIIIIIIIIIIICIII
+chrM 836 A A 255 0 22 176 .$.$,$.,,,,,...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......n,,,.,,,.,..,,,,,,,.,.,.,n,,..,....,,,,..,.,,......,..,,,..,,.,.,,^:,^:. IHIDIIIII(a)G4III96II1I*.I)I*I8-IEIIIIIIIA;IIIAIIIIIIIIIIIIIIIIIIII2I2&II>A2IIIIIIIIC=IIIIIIHIIIIEIHIIII<=FIII"IIIIIIIIIII9IIIIIIIIIIII"IIIFIII'IIIIIIIIIIIIIIIIIIIIII;IIIIIIIIIII
+chrM 837 A A 253 0 22 174 .$,$,$,$,$,$...,.,..,.....,...,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,T,.C,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,.^!. IIIIII5EIIFIIEII2I/EI1CIIIII9IIIIIIIIIIII9IIIIIIIIII9IIIIIIIIIAIADIIIF?IIIIEIIIIIIIIIIIIIIII#I=&IIIIIBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII<IIIIIIIIIIII/IIIIIIIIIIIII=IIIII@IIIDII
+chrM 838 G G 255 0 22 169 .$.$.$,$.$,$..,.....,A..,.....,,,..,..,,,.,.,,,,..,,t...,,,,,,....,,....,,..,,,.,,..,,,.C.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,n,,..,....,,,,..a.,,......,..,,,..,,.,.,,,..^!. AIEIII;>IIFI<?I,FIII8I)IIII*1IIIIIIIIIIIIIIIII9IIIIIIIIIGDG;IIIIIIIIIIIIIIIIIIIIII%IIIEIE6IIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIHII"@IIIIIIIIDI%@II#IIIIIIIIIGIIIIIIIIII5IIF:III
+chrM 839 T T 247 0 22 170 .$N$,$.....,A..,.....,,,..,.N,,,.,.,,,,..,,,...,,,,,,....,,...C,,..,,,.,,..,,,.N.,,A,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,...^!.^!.^!.^:,^:.^:.^:, 2"IA4I&)I%BII43,46IIIIIID"IIIHIII:IIIIIIIIII+IIIII2-20II=<&,IIIIIIIIIIAIIIIA"III3I2.DAC9I$IIIIIIII?:IIII<:IB=IDIIEI<I>IA?I44IDI<2IC5II-II7IIIIII:IIII9II**I3IB;4IIIIII1IIG
+chrM 840 C C 243 0 22 173 .$.$.$.$.$,$.$..,.....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.a,......,..,,,..,,.,.,,,......,..,^:.^!.^:.^:.^:,^:, III->I+IIIIGI-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII?IIIIGIIIIIIIIIIIIIIIIIIEAII)/IG78I%@I.IIIIIIIIIIIIIII@IIIIIIHIIIIIIIIIIIIIIIIII8II&$%IIIIIII@III&IIICC&CIIIAIIIIII:IIIIIII64
+chrM 841 T T 255 0 22 174 .$.$,$.$....,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,^:.^:.^:.^!.^:.^:.^:.^:. BIIII,IIIIIIII8IIIIIIIIIIIIIIIIIIIIIIIII8?9EIIIIIIIIIIIIIIIIIIIIII-IIIIIIIII;FI$IIIIIIIIIIIIIIG3AFIII0III:I6IIIII3IIIIIII5II9I;0IIIIII@III&5II>>%5I>I-IIIIIIIIIIIIII1*IIIIIIII
+chrM 842 C C 239 0 22 173 .$.$.$.$,,,..,..,,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,.T.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....aa,,..,.,,......,..,,,..,,.,.,,,..A...,..,....,,..N.....^:a^:.^!. IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC5CIIIIIIIIIIIIIIIIIIIIIII#II%+II5IIIIIIIIII-IIIIIII<IIIIIEIII4IIIII:IIIIIIIII-II>II$I*IIIIIIIIIIIIIII10$7I<BDII&III>IIIIIII0'II"IIIII&II
+chrM 843 C C 246 0 22 175 ,$,$,$.$.$,$.$.$,$,,.,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,N,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,..A...,..,....,,........,..^:.^:.^:.^!.^:.^:, IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEICBIIIIIIIIIIIII+IIIIIIII;III+II:IIIGI*IIIIEIIIIIIIIIIIIIIIII"IIIII=IIIIII>IIIII0II&IIII+IIII@IIIIIIIIII3II>5II$IIIBIIIIIII.<IIIIIIII#IIIIIII:
+chrM 844 A A 255 0 23 169 ,$,$.$,.,,,,..,,,...,,,,,,....,,....,,..,,,.,,..,,,...,n.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,.......,^:.^:.^:. II8IIIIII47IIIFIIIIIIII17,.II9B.9III4IIIEII2AIII/+II"%I8GIII(69?=<IIII;IIIIII;IIIIIIIIIIIIIIIIIIIIIIIIIIIIII@III2IIIBIIIIIIFIIII?IIIHIIIIIIIIIIIIII91IIIIIIII4IIIIIII9III
+chrM 845 T T 246 0 23 166 ,$.$,$,$,$,$.$.$,$,$,$...,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,n,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,.......,... IIIIIIIIIIIIIIIIIIII745BIICAEIIIEIIIIIIIIIIII@CIIIIID2H?HIH+IIIIIIIIIIIII9I@9IIIIFIIIIII"IIIIIIIIII4IIII(IIIIIIIIIEIIII-IIIII4IF6/IIIIII<IIIIIII+:IIIIIIII%IIIIIII-III
+chrM 846 G G 255 0 22 157 .$.$.$,,,,,,....,,....,,..,,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,.......,...^!.^:, IIIIIIIII:?04IIHI;IIIIIIIII&IHIIIIC&IIIIII5IIIG>@EIFIIIIIIIIIIIIIIIIIIIDIIIIIIII@IIIIIIIIIIII%EIIIIIIIIIIIIIIIIIIIIIII?IIIIIIIIIIIIII@IIIIIIIII&IIIIIII=IIII0
+chrM 847 A A 243 0 23 159 ,$,$,$,$,,....,,....,,..,,,.,,..,,,.N.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......n..,....,,....N.N.,.......,....,^:.^:.^:.^:.^:c IIIIII/+,.II4,3III9EIII=II6DIII+"III@I=$IIIA6)IIIIIIIIIIIIIDIIIIIIIIIIIIIIIIIIIII6-1IIIIIIIIIII4I9IIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIIII"I"I+IIIIIII@IIIIIIIII,
+chrM 848 A A 245 0 23 158 ,$,$.$.$.$.$,$,$....,,..,,,T,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,.......,....,....,^:.^:.^:, II0341II4-E5II=IIII#II1IIIIB&BII-IIIIII1B,II1IIII5IIIII>IIIIIIIIIIIIIIIIIIIIIIIBIIIIIII4IIIHI6IIIIIIIIIIIFIIIIIIIIIIIFIIIIIIII6IIICIIIII9IIIIIIIF8I.IIIIII=III
+chrM 849 A A 244 0 23 150 .$.$.$.$,$,$..,,,.,,..,,,.C.,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,..C.,,,,..,.,,......,..,g,..,,.,.,,,......,..,....,,........,.......,....,....,.., .?><IIH3III1II48III4$IIIBI=IIII92*II;IIIIIGIIIIIEIIIIIIIIIIIIIIIIIII<@(:IIIIHI?IIII+IIIIIIB&&EII<>I8II+>IIIIIIIIIIIIII$<IIIIII,I/IIIIIII2IIII0IIII'IIH
+chrM 850 C C 245 0 23 146 .$.$,$,,.,,..,,,...,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....g,....N.N.,.......,....,....,..,^!.^:. <;IIIIIIIBIII3I;IIII;8III,B%I8/IIIIIIIIIIIIIIIIIIIIIIIIIIIIICIIG5=IIIIII5I+II0IBIIIIIIIIIIIIIIIIIIBIIIIIIIIIIIII$IIIII"I"IIIII(&IIIIIII7IIII2IIIII
+chrM 851 T T 238 0 23 145 ,$,$.$,$,$.$.$,$,$,$.$..,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,g,..,,.,.,,,......,..,....,,........,.......,....g....,..,..^:,^:. IIIIIBEIII:3III2I<(I$I9@2IIIAIIIIIIIIII9+IIIIIIIIIIIIIEII7/IIIII%IIII+7III>IIIICIII,;IIIII+IC(,IIIIII7IIIIIII(:IIIIIIGIBIIIIIII+IIII.IIII'II+II+I
+chrM 852 G G 240 0 23 135 .$.$,,.,..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,a,..,,.,.,,,......,..,....,,........,.......,....,....,..,..,.^:. IDII>I>$III:3%DIII4II.IIIIII9IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG&%IIIIIIIIIII=IIIIIIIIIIIII#BIIIIIIIIIIIIIIIIIIIIIII&I5IIIIIIIII
+chrM 853 G G 254 0 23 140 ,$,$.$,$..,,,......,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........c.......,....,....,..,..,..^:.^:.^:.^:.^:.^:.^:. II<IC=III78(CIIIIIIIIIIBII?IIIIIIIIIIIIIIIIIIIIHI6IIIIIIIEIIIIIIIIIIIIIIIIII$IIIIIIIIIII3IFIIIIII@IIII:I+I1IIIIIIIAIIIIII+I3IIIIII1IIIIIIIII
+chrM 854 A A 254 0 23 137 .$.$,$,$,$.$.$....,,,,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,n..,,.,.,,,......,..,....,,........,.......,....,....,..,..,.........^:. :%III;1&6*+IIII8IIIII4BIIIIIIIII7IIIIIIEFIBI+>IIIIH6I<III2EI67IIDII"IIII%IIIIIIIIIIDIIIIII@EIIIIII*I%IIIIIIIII;IIIIIIIIG+IIIII0IIIIIIIIII
+chrM 855 G G 246 0 23 133 .$.$.$.$,$,$,$,.,,,.,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,C,.,,,......,..,....,,........,.......,....,.T.T,..n..,..........^:.^!,^:. +II8IIIIIIIIII=IIIIIIIIIIIIIIIIIDIIIIIIIIIIIIIIIII<=AIDIIIIIIIIII#IIIIIIIIIIIIIIIIIII%I+II8IIAIIIIIIIIIIIIIIII%I1III"IIIIIIIIIIIIIIEI
+chrM 856 A A 239 0 23 128 ,$N$,$,$,$.$,..,,,,,,,.,.,.,,,,..,....,,,,..,.,,......,..,,,..g,.,.,,,......,..,....,,........,.......,....,....,..,..,...........,.^:.^:. I"III;I;IIIIIIIIIIAIIIIIIIIID(a)3+IIII??I;III.4&I;IIIIIIII->DI:IIIIIII5GIIEII?GI-IIIII*I3I3II2III?EIIIIIIIII+IIIIIIIIIIIIIIIII3III
+chrM 857 C C 254 0 23 124 ,$..,,,,,,,.,.,.,,,,..,....,,g,..,.,,......,..,,,..,,.,.,,,......,..,....,,........a.......,....,....,..,..,...........,...^:.^:. I06IIIIIIIIICIIIIIIIIIIIIIII#IHIIIIII3IDI9IHI+$IIIII#IIIII>IIIIIIIIIIIII#=IIII8I5IFIIIIIIIIIIIIDIIII/IIDII>IIIIIIIIIII1IIIII
+chrM 858 T T 240 0 23 125 .$.$,$,$,$,$,$,$,$.,.,.,,,,..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,......N,....,....,..,..,...........,.....^:.^:. .:IIIIIIIIIIIIIIIII7IIII4IIIIII9.III5IIIIIIIIIIIIIIIIIIIFIIIIIIIIIIIIII<2DIIIIIII4IIIIII"=IIIIIIIIIIII;II4IIIIIIIIIII-IIIIIII
+chrM 859 A A 250 0 23 118 .$,$.$,$.$,$,,g..,....,,,,..,.,,......,..,,,..,,T,.,,,......,..,....,,........,.......,....,....,..g..,...........,.......^:.^:. II9IIIIII@DIC=.EIIIIE@IIIII*CI8-IB8IIIIIII$IHIIIIIIIIIIICIHIIIIIIIIIII@IIIIIHIIIFIIIIIIFI-III*III)IIIIIIIIIIIIIIIIIIII
+chrM 860 A A 255 0 23 115 ,$,$,$..,....,,,,..,.,,......,..,,,..,,.,.,,,......,..,....c,........,.......,N.N.,....,..,..,..G........,........C^:.^:.^:. IIII2IEA(IIIIIHAIIIIG,=G1,IIIIII:EIIII6IIIIIII@IIIIIIIIIEIC@43:I,I@IIIIIIII"I"IIIIIIAIIIIIII*4IIIIEEIIIIIIIIIII%III
+chrM 861 A A 235 0 23 115 .$.$,$....,,,,..,.,,......,..,,,..,,C,.,,,......,..,....,,........,.......,....,....,..,..,...........,............^:.^:.^!, E4IB+I(IIII85IIIII&5&43IIIIII@III(I+IIIGIIIIHIA:IIIIIIIFIII$I+3IIIIIIIIFIIIIII@I6IIIIIIII8IIIIIIIIIIIIIIIIIIIIIIIII
+chrM 862 G G 235 0 23 115 .$.$.$.$,,,,..,.,,......,..,,,..,,.,.,,,......,..,....,,........,.......,....,.T..,..,..,...........,..............,^:.^:.^:. IIIHIIIIIIIIIII1III>IIIIIIIIII&IIIII-IIIIIIIIIIIII+I7III+I1I&IIIIIIIIIIIIII-I+IIIIIIIIIIIIIIIIIIIIIIII?IIIIIIIIIIII
+chrM 863 G G 243 0 23 115 ,$,$,$,..,.,,......,..,,n..,,.,.,,,......,..,....,,..N.N.C.,.......,..C.,....,..,..,...........,..............,...^:.^:.^:.^:. IIII?IIIIII%III<IIIII"IIII:I=III5IIIIIIIIIIIIIIIFI"I"I.IIIIIIIIII#I%III&I'IIIIII.IIIIIIIIIIIIIIII4IIIIIIIIIIIIIIIII
+chrM 864 A A 230 0 23 114 ,$..,.,,......,..,,c..,,.,.,,,......,..,....,,........,.......,....,....,..,..,...........,.........N....,.......^:.^:. I53I;III#<'*.II0II#7)II%IIIII0III;II9II64IIII0I)I:EIE&III0IIII3I7III:I:IIIII7IIIIIIIB;IIIIIIIIIIIII"IIIIIIIIIIIIII
+chrM 865 G G 255 0 23 115 .$.$,$.$,$,$......,..,,,..,,.,.,,,......,..,....,,........,......N,....,...T,..,..,..........A,..............,.........^:.^!, IDIIIII6IIIIIIIIIIIIII9IAIIIIIIIIIIIIIIIII7IIIIIIIIIIIIIIII"IIIIIII,I1IIIIIIII+IEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII3
+chrM 866 G G 230 0 23 109 .$.$.$.$..,..,,,..,,.,.,,,......,..,....,,........t.......,....,....,..,..,...........,..............,.........., G:IIB?IIIIIIIIII%IIIII,IIIIHIIIIIIII/IIIII0I(I&IIII.IIIIIIIII'I,IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)IIIIIIIIII3
+chrM 867 A A 224 0 23 105 .$.$,$..,,,..,,T,.,,,......,..,....,,........,......N,....,....c.N,..,.CC........,..............,.........., .'IG4III/III$IFIII3III&;I@CII160II99II.G%GIFI:)ID"IHIIIIF,F*II"II;II$%+B0I/-A.IHIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 868 T T 248 0 23 102 .$.$,$,$,$..,,.,.,,,......,..,....,,........,.......,....,....,..,..,...........,..............,.........., IIIIIIIII#IIIIIIIIIIIIIIIIFIIIIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII(@IIIIIIIIIIIIIIIIIIIIIIIII=
+chrM 869 T T 225 0 23 101 .$.$,$,$.$,.,,,......,..,....,,........,.......,....,....,..,..,...........,..............,..........,^:N^!,^:.^:. IIII%I=IIIIIIIIIIIIIIIIIHIIIIIIIII%III>IIIIIIIIII>I1IIIIIIII:IIIIIIIII?IIIIIIIIIIIIIIDIIIIIIIIII3"$II
+chrM 870 T T 228 0 23 99 ,$.$,$,$,......,..,....,,..N.....,.......,....,....,..,..,...........,..............,..........,.,.C^:.^:.^:A I*IIIIIIIIIIIIIIIIIII2I"I%I%IIII@AII$IIIIIII0I+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,I(I+II$
+chrM 871 A A 208 0 23 97 ,$.$.....n.C,....,,........,.......,....,....,..,..,...........,..............,..........,N,.....^:.^:. I;III1I"F%I8II<II5FI6.I8IIIIGIII7IIIIIII+G+IIIIIIII7IIIIIG<IIIIIIIIIIIIIIIIIIIIIIIIIIIII"(IIII&II
+chrM 872 G G 211 0 23 95 .$....,..,....,,........,.......,....,.T..,..,..,C..........,..............,..........,.t....... III65II-IGIIIIIAIIBCI*IIIIIIIIIIIIIIII$I&IIIIIID#IICI*IIIIIIIIIIIIIIIIIIIIIIIII&IIIIIII$IIIIIII
+chrM 873 C C 206 0 23 94 .$...,..,....,,........,.......,N.N.a....,..,..,...........,..............,....N.....,.g....T.. II9EII9IFIIIIIIII/EIBIIII?GIIII"I"III/I-IIIIIIIIBIIIIIIIIIIHIIIIIIIIIIIIIIIIII"IIIII?+$IIII$II
+chrM 874 A A 208 0 23 94 .$.$.$,$.$.$,$....,,......C.,.......,....,....c..,..,...........,.....N........,..........,.g.......^:. II<IA&IIEIIII9DII(I&IIGI63IIIIIIIIII.I/II&IIIIIBII(a)5I3.II)IIIII"IIIFIGIIIIIIIIIIII1II)IIIIIIII
+chrM 875 G G 210 0 24 87 .$.$.$.$,$,$..N...C.,.......,....,.T.T,..,..,...........,.........N....,..........c.,........ BIIIII:I"I$I%IIIIIIIIIIIIIIII'I$IIIIIIII%I;IIIIIIIIIIIIIIIII"IIIIIIIIIIIIIII$I+IIIIIIII
+chrM 876 T T 191 0 24 81 .$.$.$A$.$.$.$.$,.......,C...,....,..,..,..........C,.........N....,..........,.,........ $II$(I.=IIC3-2IFI#I$II>IBIIIIIIIII.$IIII2=I+IIIIIIIIII"IIIIIIIIIIIIII>'IEIIII-III
+chrM 877 A A 203 0 24 73 ,$.$.$.....,....,....,..,..,...........,..............,..........,.,........ IIII*:IIII=IIII1I%IIIIIIIIIIIIIII8IIIBIIII'IIIIIIIIIIIII$HIIIIIIIIIIIIIII
+chrM 878 A A 195 0 24 70 .$.$.$.$.$,$....,....,..,..,...........,..............,..........n.,........ I>IIII?IHIIA,A+II>IIIII=IIEIG(0ICIC?IGIIIIIIIIFIIIIIIIIIII6"IIIIIIHIII
+chrM 879 A A 155 0 24 64 .$.$.$.,....,..,..g...........,..........NN..,..........,.,........ IIIDI3<3BIIII@I#II:IC4@;13IIIIII9IIIII""BIIIIIIII4II6IIIIIIIIIII
+chrM 880 T T 172 0 24 61 .,....,..,..,...........,..............,..........,.n........ IIIIIIIIIIIIIIII2IIIFEIIIIIIIIIIIIIIIIIIIIIIIIIIII<I"IIIIIIII
+chrM 881 T T 188 0 24 61 .$,$....,..,..,...........,..............,..........,.,........ II9:=+IIIIIIIII;IIIIIII,IIIIIIIIIIIIIIIIIIIIIIIIII-I+IIIIIIII
+chrM 882 A A 155 0 24 59 .$.$.$.$,$..,..,...........,..............,.....N....,.t.......N C(B(IIDIIIII5II26-A@/III>I?I=8I9II0F=IIIII$"5III%I$IIIICII"
+chrM 883 A A 161 0 24 54 .$.$,$..,...........,..............,...N......,.,........ IIIIII5I8GH%AIIIIII<IIII=BFIII=IIIII"-I3IIIII#GIIIIIII
+chrM 884 G G 136 0 24 51 ..,T..........,..............,...N......,.,........ 8II//IHI?IIII;IIIIIIIIIIIIIIIIIII"IIAIII'IIIIIIIIII
+chrM 885 A A 127 0 24 52 .$.$,...........,..............,..........,G,........^:. IIII@2:?IBIIIIII9IIIDIIBIIIHIIII>II45II>I$I7III&IIII
+chrM 886 A A 145 0 24 50 ,$.$..........,..............,..........,.,......... II8;IB&A<81*II3IIIIII@IIIIIIEIIII66IIII:'@III/IIII
+chrM 887 T T 107 0 24 48 .$.........,.....N........,..........,.,.......N. IIII@I76IIIIIIII"IIIIIIG0IIIIIIIIIIIIIIIIIIIII"I
+chrM 888 A A 126 0 24 48 .$.$.$.$.$.$.$..,..............,..........,.,.........^!, IIC;EIID&IAAICIIIIIIIIIIIIG;I*I/IIA7II<III:II$II
+chrM 889 G G 133 0 23 41 .$.,..............,..........,.,........., I=II9IEIIIHBIIIIII@IBIIII5ICIIIICI-=IIIII
+chrM 890 A A 132 0 23 40 .$n$.$.............,..........,.,........., 6"I?IDI(GA6I=IFIIIIIIIIFII/III=III%IIFII
+chrM 891 G G 119 0 24 38 .$.$......N....,..........,.,...T.....,^:. AIGIIIII"IIIII?I3IIIHCI9IIIDII&>IIIIII
+chrM 892 A A 134 0 24 36 .$.$.........,...N......,.,.........,. 9F<GI2IIIIHI;I="II8II6G@I5III*IIIIII
+chrM 893 G G 94 0 23 34 .$.$.......,...N......,.,.........,. IIIIIII@II7IB"IIG-<IIII<IIF05IIIII
+chrM 894 C C 123 0 23 32 .$.$.....,..........,.,.........,. >8III=DI?I;IIIG/I,%;49HII%IIIIII
+chrM 895 T T 82 0 23 30 .$.$.$..,..........,.,....A....,. IIIB+IIIIIIICII3II2AIII$IIII<I
+chrM 896 T T 108 0 23 27 .$.$,$..........,.,.........,. CIIIIII+IGIIIIIIIIIIIIIII.I
+chrM 897 A A 82 0 23 24 .$.$.$.......,.g.........t. IIIIII/6I(+I$4>IIIIIBI$I
+chrM 898 A A 96 0 22 23 .$.$.$.$...,.,.........,.^!,^!n (III2I1IAI56III:IA@III"
+chrM 899 T T 68 0 21 19 .$.$.c.,........G,.,, IID&IIIIIIDIII%II/-
+chrM 900 T T 78 0 21 17 .$,$.,.........,.,, >(IIIIII?IIII6I71
+chrM 901 G G 72 0 21 15 .,.........,.,, DI91I%?IIIIIIC<
+chrM 902 A A 55 0 21 15 .,........T,.,, II6CII9GI<*III?
+chrM 903 A A 72 0 21 15 .,.........,.,, ?I77III>ICIIII7
+chrM 904 T T 72 0 21 15 .$,$.$.$.......,.,, DI;3IIIAII=/II9
+chrM 905 C C 60 0 21 11 .$.$.$....,.,, =I0IB;IIIII
+chrM 906 A A 51 0 20 8 .$.$..,.,, :IIIIIII
+chrM 907 G G 45 0 18 6 ..,.,, D3IIII
+chrM 908 G G 45 0 18 6 ..,.,, IIIIII
+chrM 909 C C 45 0 18 6 .$.,.,, I/III=
+chrM 910 C C 45 0 18 6 .,.,,^:. 3IIIII
+chrM 911 A A 45 0 18 6 .,.,,. IIIIII
+chrM 912 T T 45 0 18 6 .,.,,. /IIIIC
+chrM 913 G G 45 0 18 6 .,.,,. 1IIIII
+chrM 914 A A 45 0 18 6 .,.,,. 1IIIII
+chrM 915 A A 30 0 18 6 .,.,,G ?IIII$
+chrM 916 G G 35 0 16 7 .,.,,T^!, IIIII(0
+chrM 917 C C 48 0 16 7 .,.,,., ,/IIIII
+chrM 918 G G 31 0 16 7 .n.,,., @"IIII>
+chrM 919 C C 48 0 16 7 .,.,,., 8IIII4I
+chrM 920 G G 48 0 16 7 .$,.,,., >IBIIA3
+chrM 921 C C 45 0 14 6 ,.,,., IIIIII
+chrM 922 A A 45 0 14 6 ,.,,., IIIIIE
+chrM 923 C C 45 0 14 6 ,$.,,., IIIIII
+chrM 924 A A 42 0 16 5 .,,., IIIA=
+chrM 925 C C 42 0 16 5 .,,., IIIII
+chrM 926 A A 29 0 16 5 .$,,.g II:I%
+chrM 927 C C 34 0 12 4 ,,., IIII
+chrM 928 C C 42 0 16 5 ,,.,^:, II6I>
+chrM 929 G G 54 0 20 9 ,,.,,^:.^:,^:,^:, I9II<IC0I
+chrM 930 C C 72 0 22 15 ,,.,,.,,,^:,^:,^:,^:,^:,^:, II0I0I=-IIIIIII
+chrM 931 C C 90 0 23 21 ,,.,,.,,,,,,,,,^:,^:,^:,^:,^:,^:, II)I=IB4HIII%IHII4I?=
+chrM 932 C C 53 0 23 22 ,,.,,.,,,a,a,,,,,,,,,^:, II*IIII.I7I6III@9<::<I
+chrM 933 G G 102 0 23 25 ,$,$.,,.,,,,,,,,,,,,,,,,^:,^:,^!. IIII:II8;III2ICI:,II6C65I
+chrM 934 T T 65 0 24 24 .,,.,,,,,,,,,,,,,,,,,,A^:, $I0IFC7IIIB;;I77EI4I2D$>
+chrM 935 C C 74 0 24 26 .,,.,,,,,,,,,a,,,,,,,,.,^:,^:, +I<II0DIII9II(D.IE8I7+II98
+chrM 936 A A 117 0 24 30 .,,.,,,,,,,,,,,,,,,,,,.,,,^!.^:,^:,^:, %I,IIIFIDIDBI,AIII@IBIIIIIIIII
+chrM 937 C C 98 0 24 31 .,,.,,,,,,,t,a,,,,,,,,.,,,.,,a^:, IIGII/IIHI'#15I4IIGII.IIIII-I$1
+chrM 938 C C 88 0 24 32 .,,.,a,,,,,t,,,,,,,,,,.nt,.,,,,^:, .I;I0&I>I)I%IEI?I/4II,I"%II?C&II
+chrM 939 C C 97 0 24 35 .,,.,,,,,,,,,a,,,,,,,,.,,,.,,,,,^:,^:,^:, 9IIII&III,I+I%;III=II'IIIIIHI+HII7*
+chrM 940 T T 132 0 24 35 .,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,, >IFIID5GIE5I3I34>=7II@I4IAIG>B<I4+/
+chrM 941 C C 89 0 24 37 .,,.,,,,,,,,,,,,,,,,,a.,,,.,,a,,,,,^:a^:a II*II)I3I)CII=86I0:II%I.IIII73,I93'%*
+chrM 942 C C 103 0 24 40 .,,.,,,,,,,,,,,,,,,,,,.,,,.,,aa,,,,,,^:,^:,^:, FIII((I.I,HAI$>9IIC3I$IIIIIII))II-%;&I4&
+chrM 943 T T 153 0 24 42 .,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,^:,^:, @IIIII4IIIIIIIHIII<IIII5IIIEII3II77<&1/IF6
+chrM 944 T T 117 0 24 42 .,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,g,,,,,,,, IIIIIIIIIIII;I;IIICIIIIIIIIIII:IA$FI4E@EDI
+chrM 945 A A 175 0 24 49 .$,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,^!.^:,^:.^:.^:,^:.^:, .II@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 946 A A 140 0 24 50 ,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,C,^:.^:. II@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII<I*III
+chrM 947 A A 187 0 24 53 ,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..^:,^!.^:. II5IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 948 T T 158 0 24 56 ,,.,,,,,,,,,,,,,,,n,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,..^!.^:.^:. I?IIIHIIIII@ICIIIE"III?IIIIII0II.CI7?.I?I&@II5IAII5IIIII
+chrM 949 A A 229 0 24 67 ,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,.....^:.^:.^:.^:,^:,^:,^:.^:,^:,^!.^:, II<IIIIIIIIIIIIIIIIIIIIII=IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 950 T T 241 0 24 71 ,,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,^:,^:,^:,^:, I5IIIIIIIIIIIIIIICIIIIIIIIDII.II/?I4G6III0A6I8I8II<IIIIIIII9(:IIHI560?,
+chrM 951 C C 191 0 23 76 ,$,.,,,,,,,,,a,,,,,a,,.,,,.,,,,,,,,,,,,,,,.a..,.,..,........,,,.,,.,,,,,^:.^!.^:,^:a^!. IIIIIIIIIIII:IIIII%II5IIIIIIIIII?0B1I<IIGI)II1IDII*IIIIIIII)&III&I4>%5*II4(I
+chrM 952 A A 223 0 24 81 c.,,,,,,,,,,,,,,,c,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,.^:.^:.^:.^:,^:,^:, IBIIIIIIIIIIIIIIIIIIIIIIIIGIIIIIIIII8IIIIIIIIIIIIIIIIIIIIICIIII4IGIIIIIIIIIIIIII?
+chrM 953 C C 179 0 24 86 ,.,,,,,,,,,,,,,,,,,,.n,,.,,a,,,,,,a,,,,,.,..,.,..,........a,,.,,.,,,,,..,a....,,a^:.^!.^!.^:a^:a IIIIIIIIIIIIIIIIIIIII"IIIII)III6I1)I4II(I7II?I9II(IIIIIIII+1III0I+214%II79IIIIBB0III%I
+chrM 954 A A 249 0 23 90 ,.,,,,,,,,,,,,,,,,,,.n,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,^!.^!.^!.^!. IIIIIIIIIIIIIIIIIIII7"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 955 A A 251 0 23 97 ,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,....^:.^:.^:.^:,^!.^!.^:, I=IIIIIIIIIIIIIIIIII'IIIIIIIIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII/IIIIIIIIII
+chrM 956 A A 253 0 23 103 ,.,,,,,,,,,,,,,,,,,,.,,,N,,,,,,,,,,,,,,,.,.N,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,^:.^:.^:,^:.^:.^:, IIIIIIIIIIIIIIIIIIIIIIII"IIIIIIIIIIIIIIIIII"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 957 T T 237 0 23 110 ,.,,,,,,,,,,,,,,,,,,N,,,N,,,,,,,,,,,,,,,G,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,NN,^:.^:,^:,^:,^:.^:.^:. I/IIIIIIIIIIIIIIIIII"III"III4IIIII)I6GHI63II86III0IIIIIIII8BII6+II56I.II71IIII;/+IIIDDIIIIIIIIII;II,""2I@03III
+chrM 958 C C 251 0 23 117 ,.,,,t,t,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,a....,a,...,,.......,..,..,..,.,,,...^:,^:,^:.^!.^:,^:,^:, I9III(I&IIIIIIIIIIIIIIIIIIIIIIIIII>I3III*III3IIII:IIIIIIII(/IIIBIII(&$IIIIIIII<+%III>@IIIIIIIIIIIII,II,I%(6IIII1II(-/
+chrM 959 A A 255 0 23 121 ,.,,,,,,,,,,,,,,,,,,.,n,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,^:.^:.^:.^:. I9IIIIIIIIIIIIIIIIIIII"IEIIIIIIIIIIIIIIIIIIII1IIHIIIIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+chrM 960 T T 255 0 23 125 ,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,....^:.^:.^:,^!. I>IIIIIIIIIIIIIIIIIIIIII.IIIIII7)I2IBIIIIIII=IIII?IIIIIIII?;III2ID@FIIIIE$IIII53@IICIIIIIIIII-II@II2II<IIIBIIIIHII6H9IIIIII$I
+chrM 961 A A 255 0 23 129 ,.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,.^:.^:.^:,^:, I>IIIIIIIIIIIIIIIIIIII#IIIIIIIIIIIIIIIIIAIIII?IIFIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$IIIII
+chrM 962 A A 255 0 23 133 ,.,,,,,,,,,,,,,,,,,,.,n,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,^:,^:.^:,^:, IBIIIIIIIIIIIIIIIIIIII"IIIII,IIIIIII?IIIIIBII@IIIIIIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:IIIIIIII$IIIIIIIII
+chrM 963 C C 239 0 23 135 ,$.,,,,,,,,,,,,,,,,,,.,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,a....,,a...,,.......,..,..,..,.,,,...,,..,,,......,...,,n.,a^!a^:, IIIIIIIIIIIIIIIIIIII2I0IIIIIIIIIII,IIIIIIIIIIIIIIAIIIIIIIII5III;III.IIIII*IIIIII'IIIIIIIIIIII&IIGII9II2I=93IIII5II8I(IIIIII,III+'"I%&1$
+chrM 964 A A 244 0 23 135 .$,$,$,$,,,,,,,,,,,,,,,G,n,.,,,,,,,,,,,,,,,.,N.,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,^:, EIIIIIIIIIIIIIIIIII*I"IIIIIIIIIIIIIIIIIII"IIHIIIIIIFIFIIIIIIGIIEIIIIIIIIIGIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIII6IIII(IIIIIII:II<IIIIII>IIBII
+chrM 965 T T 248 0 23 135 ,$,$,$,$,$,$,,,,,,,,,C,,,N,,,,,,,,,,,,,,,G,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,^:,^:,^!.^:, IIIIIIIIIIIIIII'EII"IIIIIIIIIIIIIII2IIII+III8IIIIIIIII>IIC-IIBIIIII7IIIIID1.II:IIIIIIIIIIIIIII6IIDI@IIEIII0II.I5III$II&III;4II,4H<-*0II
+chrM 966 A A 255 0 23 130 ,$,$,$,$,$,$,,,.,,,N,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,^:. IIIIIIIII=III"IIIIIIIIIIIIIII>IIII6IBBIFI7III@IIIIIIIIIIIIIIIIIIIIIIIIII9IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;IIIIIIIIIIIIIIIIIIII
+chrM 967 A A 246 0 23 125 ,$c,G,,,.,,,,,,,,,,,,,n,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......g...,,,.,,,,,,,.,.^:, I5I#IIIIIIIIIIIIIIIBI"IIIIII;IIIIIIIIIIII;2IIIIIIIIIIIII@IIIIIIIIIIIIIIIIIII6IIIIIIIIIIIIIIIIIIIIIIIIII/II#IIIIIIIIIIIII>IIII
+chrM 968 C C 240 0 23 124 ,$,$.$,,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,n.,,a,,,,.,., II"BIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGIIIIIIIIIIIIII=IIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIEIBIIIII-II,IIII;"I8$$IIA&IIII
+chrM 969 A A 255 0 23 124 ,$,,.,,,,,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,^:.^:,^:, III7IIIIIIIIIIIIIIIIIIIIIIIEIIIGIIII>IIIIII<IIIIIIIIIIIIIIIIIIIIIII&IGIFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII2III/IIII<IIIIIIII1
+chrM 970 T T 243 0 23 123 ,$,$.,,,,,,,,,,,,,,,.,..,.,..,........,a,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,C,,,,,,,.,.,.,g II6IIIIIIAIIIIAIII6IIII(I2E.IIIIIIIII&I?IIIHCIIIIIIG3III=-;II)IIIIIIFIBIIIIII:II=IIIBIIII4IIII-IIIIII%III%II$,I'5@./IBI.I0$
+chrM 971 A A 244 0 23 124 .$,$,$,$,,,,,,,,,,,,G,..,.,..,........,n,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,^:.^:,^:t =IIIIIIIIIIIIIII'I&II:IIIIAI4IIIAII"ICIIIIIIIIIIIIIIIIIIIIIGIIIII<IIIIIIII&IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII0II-
+chrM 972 A A 255 0 23 126 ,$,,,,,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,^:,^:,^:,^:,^:.^:. IIIIIIIIIIIIAI0II=I2=III8IEIIIIIIEIICIIIIIIIII0I@IIIIIIIIIIIIIIIIIIIIIIIIII>IIIIIIIIIIIIIIII$II*IIIIIIEII8IIIIIIIIIIIII'IIIIII
+chrM 973 A A 249 0 23 127 ,$,,,,,,,,,,.,..,.,..,G.......,,,.,,.,,,,,..,,....,,,..C,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,t,,,,..^:.^:. IIIIIIIIIIIIIIIIDI6;I)F8IIIIIIII5II;IIIIIIIIIII:IIIIII&IIIIIIIIIIIIIIIII+I>IIIIIIIIIIIIIIII%IIIIIIIIIIII/IIIIIIIIIIII&&IIIIIIII
+chrM 974 A A 241 0 23 126 ,$,$,$,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,..C....,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,.... IIIIIIIIII,=3IIHIIII%I8IIIIIIIIIII<IIIIIIIIIIIIIIIIIIIIIII$IIIIIIIIIIIIIIIIIBIIIFIIIIIGIII(II$IIIII/III+I)9I&IIIII+IIIIIIIIIII
+chrM 975 C C 255 0 23 125 ,,,,,,,.,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,n.,,aa,,,N,.,.,,.gg,,,,....^:n^:, IIIIIII4IIIIIIEII/I?IIIIIIII7II<IIIIIIIIIIEIIIIIIIIIIII2IIIIIIIIIIIIIIGIIIIIIIIIIIIIIII%II3IIIII"III%IIII"IIII@.IB*BIDIIIII",
+chrM 976 C C 239 0 23 126 ,$,$,,,,,.,..,.,..,........,n,.,,.,,,,,..,a....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,^:, IIIIIII;I@II+IECIIICIIIIII"IFIIIIIIIIIII)FIIIIIIIIIIIII%IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,II'II'III3I-.III7IIIIICIII$0II%IIIIIII
+chrM 977 G G 249 0 23 125 ,$,$,$,,C,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,...C..,.T.n,,.,,t,,,,.,.,.,,.,n,,,,....,,,^:. III.I.I=II:I0DI4I?I6IDIIIIIIIDIIIIIIII1IGIIIIIII<IIII%IIIIIIIIIIIIIIIIII>I1IIIEIIII6I#IIII2I"IIIII$IIIIIIIIIGIII"IIIIIIII:H8I
+chrM 978 T T 235 0 23 123 ,$,$A,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,NN,.,,,...,,..,,,......,..A,,,.,,,,,,,.,.,.,,.,,,,,,....,,,.^:. II'I3II,I2.I,80I:=*<III,II2IIIII?-II-14=ICII?$II0II&-I1IIIII6I""I9IIIII?I2I<:I<>IG&IID7;%IAE?IIIII2+IHIIII&II+?F5@IIIII>.II
+chrM 979 G G 243 0 23 125 T,..,.,..,........,,,.,,.,,,,,..,,....,,,...,,..N....,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..^:,^:.^:,^:, &IHII;IE5ICI<I6IIII#I<II?IIIIIIIIIII@IIIIII<IIII"IIIIIIIIIII1&IIIIIII+II0IIIIIII$IIII&IIII7II(IIIIIIIIII=II%IIIIIIIIII:IIAI?;
+chrM 980 A A 244 0 23 127 C$,$.$.$,$C$,$..,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,g,,,,....,,,..,.,,^:,^:, (IIII$I<8III1I7D=DICI0II7IIIII3II4II9IIIIII5IIIIIA>I=IIIIIIIIII0III-I0IIIGIIII@I$III4EIIIIGII%III>IIIIII.EI%IIIIIIIIII5IIIII8+I
+chrM 981 C C 247 0 23 123 .$.$,........,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,a,,,,.,.,.,,.gt,,,,....,,,..,.,,,,^:.^:,^:, IIIII6IIIIIIII;IIAIIIIIIIIICI5III&IIIIIII<IIIEIIIIIIIIIIIIII=IIIIIIIIII5I&IIIIIIHIIIII'III9IIIII92I6#9II3IIIIII+II>I&71'I45
+chrM 982 C C 255 0 23 122 ,$.$.$......,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,a.,.,.,,.g,,,,,....a,,..,.,,,a.,,^!, IIFBIEIIIIII?II@IIIIIIIIIIIIIII6II9IIIIIIIIIIIIIIIIIIIIIII5IIIIIIIIIIII&IIIFIIDIIII0$III<IIIII2II%9,?&IIIIII*/II+I59I)I1-)
+chrM 983 C C 252 0 23 122 .$.$.$...,,,.,,.,,,,,..,,....,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,a.,.,.,a.,,,,,,....,,,..,.a,,a.,,,^!,^!,^!, :IIIIIIIICIIIIIIIIIIIIIIIIIIIIIIIIIIAIIIIIIIIIBIIII?III2I5IIIIIIIIAI#IIIIIIIIIII&)IIIIIIIIII+II&9F8IIIIIII2II)I')I$I++)I(+
+chrM 984 A A 250 0 23 119 .$.$.$,$,$,$.$,$,$.$,$,,,,..,,....,,,...,,.......,..,..,..,.,,,...c,..,,,......,...,,,.,,,,,,,C,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,, C:IIII5II3IIIII95II/1.IIII>A5II4IA=)-)I>HIIDIIII-IIIII,III;IIII?:$III6=IIII8IIIIIII)IIIIII4I@IIIIII@=IIIIIIIIIDIIIIIID=
+chrM 985 A A 233 0 23 108 ,$,$,$,$..,,....,,,...,,.......,..,.C,NN,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,, IIII26II92*0IIII63II7I>-:40IFIII(I""I-IIIII)IIG3III>9-$III?48IIIEIIIIIIIAIIIIIIIIIIIIII@EHIIIIIIIIIIIIIIIIII
+chrM 986 A A 236 0 23 104 .$.$,$,$.$...,,,...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.g,,,,,....,,,..,.,,,,.,,,,,, I.II1A1IIIII=@II+A<4;B=I@<IIIIIII0III??.IID6III558#IIIA9IIII.IA(III&IIIIIIIB&IIIIIIIIEIIIII?III=IIIIII@6
+chrM 987 C C 253 0 23 99 .$.$.$,$,$,$...,,.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,, :CIIIIIIIIIEIDFIIIIIIIIIIIIIIIIIII5IIDHIIIIEI%II7DIIIIIII.$IIIIIIIIIIII$IIII=IIIIIIIIIFI5>I7%9<:2/(
+chrM 988 A A 243 0 23 94 .$.$C$,$,$.......,..,..,..,.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,c,,,,....,,,..,.,,,,.,,,,,,^!, I<%II,C21-@,IIGIIII==I+III%A2II<.IIIC/C$II$6EIIII9IIIIIIIIIIIIII3I6IIIII7@AIIIIIIIIIIIIGIIIIDI
+chrM 989 T T 236 0 23 89 .$.$.$.$...,..,..,..,.,,,...,,..,,,......,...,,,.,c,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,, (II4@I=IIGIIIIIII:III;I$III7IIII<I#II.1IIIIIIB&IIII;IIIIII&DII9I&EI=IIII<II;I;5GIIII3I+,2
+chrM 990 A A 233 0 23 89 .$.$.$,$.$.$,$..,NN,.,,,...,,..,,,...C..,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,^!,^!,^!,^!, 'I+IIIIIGI""IFIII'I.II@0IIII;>$III57III9IIIIIIIICIIIIII//IIIIIIIIIIIIHIIIIIEII<FIIFIIII=I
+chrM 991 T T 251 0 23 83 .$.$,$.$.$,$.,,,...,,..,,,......,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,^!, IGIIII:IIIII1III3IIII8I(III=II1IIIIIIIIIIIICIII/IIICIIII=II*6.II-I@+2II52.I0(40/),2
+chrM 992 G G 207 0 22 78 .$,$,$,$.$.$.$,,T.,,,...T..,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,^!, BIIIC=&II)5IIII<I$IIII%IIIIIII-IIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIII<IIIIAI4IA6
+chrM 993 A A 211 0 22 74 ,$,$.$.$,$,$,$...T..,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,^:.^!,^!, II?7III1&1$III;+IIIIIIIIIIII@ICIIII:IIIIII,';2III2IIIIIIIIIIIIIIIII2IIIIII
+chrM 994 A A 229 0 22 67 .$.$.$.$..,...,,,.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,, I?I$III2/IIIIIIIIIIIIIIIIIII5IIIIIIIICIIII<IIIIIIIIIIIIIII@IDI>IIII
+chrM 995 A A 223 0 21 65 .$.$,$.$..,,,.,,,,,,,.,.,.,n.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,^!,^!, IIID7IIII@IIIIIII?IIIII"0+IIIIIB+AHIIIIIIIIIIIIIIIII9G8I,I8DIIICD
+chrM 996 G G 189 0 21 61 T$.$,$,$n.,,,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,, %III"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII9IG1IIH@A
+chrM 997 G G 199 0 21 57 ,$.$,$,$,,,,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,, I4IIIIIIIIIIIIII<IIIIIIIEIIIIIIIIIIIIIIIIIIIIICI<II5II>9:
+chrM 998 A A 187 0 21 53 ,$,$,,,.,.,.,n.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,, IIIII/IIIII"?IIIIII+<>?IIIICIIIIAIIIIIIIIIIIIIE7IIIII
+chrM 999 G G 149 0 20 53 ,$,,.,.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,^!n^!, IIIIIIIIIIIIIIIIII?II4IIIIIIIIIIIIIIIIIIIIIIE@IIC::"I
+chrM 1000 A A 184 0 20 52 ,$,$.$,$.,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,, II9IIIIII/IIIIII;+<FIII46IIIIIIIIIIIIIIIIGIEAIII67FI
+chrM 1001 C C 171 0 20 48 .$,.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,, IIIIIFIIIIII>7IEIIIAIIIIIIIIIIGIIIIII2IE:I.;222&
+chrM 1002 A A 171 0 20 48 ,$.,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,^!, IIII6IIIIII<+=6III?IIIIIII8IIIIIIIIIIIICIIIIIIII
+chrM 1003 A A 175 0 19 49 .,,.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,^!,^!, III/IIIIIIF:5&III>IIIIIIIBIIIIIIIII6IIIIIIECIIIII
+chrM 1004 G G 138 0 19 49 .$,$,$.,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,n, IIIIIIIIIIIGI?IIIIIIIIIIIIIIIIIIIIIIIIAII8IIII4"I
+chrM 1005 T T 171 0 18 48 .,,,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,^!,^!, -IIIIII-'54III'III<III>IIGI@I2II3I>88I,;;IC0):+&
+chrM 1006 C C 138 0 18 49 .$,$,$,,,,....,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,a,,,,^!, 6IIIIII00@<III<IIIIIIIIIIIIIIIFI*I8IIIIII?IGII<&2
+chrM 1007 G G 165 0 18 46 ,$,$,$,$.$.$..,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,,,, IIIII=G>IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFIIF;<
+chrM 1008 T T 147 0 16 40 .$.$,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,,,, ,,III1EIIIIII7IIIIIIIIIIIG=<IICBIA1II<49
+chrM 1009 A A 144 0 16 39 ,,,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,n,,,,^!, IIIIIIIIIII=IIIIIIIIIII:I7IIIIIII"IIIII
+chrM 1010 A A 150 0 15 41 ,$,$,..,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,,,,,^!,^!, III)7IIIIII6IIIIIIIIIFI8I>IIFHI#IIIC>I9II
+chrM 1011 C C 144 0 14 39 ,$..,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,,,,,,, I=;IIIIIIFIIIIIIIIIIIIIIBIIIII%IIII7B<I
+chrM 1012 A A 141 0 14 38 .$.,.,,,,.,,,,,,,,,,,,,.,,,,,,,,,,,,,,, I:IIIIII3IIIIIIIIIIIIIIIIIIIIIGIIII6IB
+chrM 1013 A A 103 0 14 37 .$,.,,,,.,,,,,,,,,,,,,C,,,,,,,,,,,,,,, FIIIIII:IIIIIIIIIIIII%7IIIIIIIIIIIIII
+chrM 1014 G G 124 0 13 38 ,$.$,$,$,,.,,,,,,,,,,,,,.,,,,,,,,,,,,,,,^!,^!, IIIIII7IIIIIIIIIIIIIGIIIIIIIIIIIII>I;=
+chrM 1015 G G 86 0 11 34 ,$,$.,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,, IIHIIIIIIIIIIIIIEIIIIIIIIIIIB1IIDG
+chrM 1016 T T 19 0 9 32 .$,$,$,,,,,,,,,,,.,,,,,,,n,,,,,,,,, -IIIIIIIIIIIII%IICC;II"I?8I7-FBI
+chrM 1017 A A 11 0 4 33 ,$,,,,,,,,,,.,,,,,,,,,,,,,,,,,^!,^!,^!,^!, IIIIIIIIIII6IIIIIIIIIIII6IIIII>6=
+chrM 1018 A A 6 0 4 32 ,$,$,$,,,,,,,.,,,,,,,,,,,,,,,,,,,,, IIIIIIIIII+IIIIIIIIIIII#IIIII<69
+chrM 1019 G G 10 0 5 29 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,, IIIIIII-IIIIIIIIIIIIIIIHIIIGB
+chrM 1020 T T 4 0 4 34 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,,^!,^!,^!,^!,^!, IIIIIII+3IIIIIIIII:II8IICI-1.//.&1
+chrM 1021 A A 9 0 4 34 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,, IIIIIII5IIIIIIIIIIIIIIIIII;;9ICIHI
+chrM 1022 T T 13 0 4 34 ,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,, IIIIIII9IIIIIIIIIIIIII8?IG*--32.+3
+chrM 1023 A A 1 0 4 35 ,$,,,,c,.,,,,,,,,,,,,,,,,,,,,,,,,,,^!, IIIII*I:IIIIIIIIIG@FI(I@6I3/-G/6;I?
+chrM 1024 C C 5 0 6 35 ,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,a,^:. IIIIII0IIII*IIIIIIIIIII3@>199EIB)II
+chrM 1025 C C 13 0 7 37 ,$,$,$,$,,.,,,,,,,,,,,,n,,,,,,,,,,,,,,.^:.^!, IIIIII(IIIIAIIIIIII"III0I;?BGH6<%IIII
+chrM 1026 G G 19 0 8 33 ,$t.,,,,,,,,,,,,,,,,,,,,,,,,,,,.., II.IIIIIIIIIIIIIIIIIIIIIB=@HIIIII
+chrM 1027 G G 76 0 10 34 ,$.,,,,,,,,,,,,,,,,,,,,,,,,,,,..,^:,^:, I7IIIIIIIIIIIIIIIIIII<@FI?@IIIIIII
+chrM 1028 A A 115 0 12 37 .$,$,$,,,,,,,,,,,,,,,,,,,,,,,,,..,,,^:.^:,^:,^:, 3IIIIIIIIIIIIIIIIII;@AIFB9IIII<I-IIII
+chrM 1029 A A 113 0 13 35 ,,,,,,,,,,,,,,,,,,,,,,,,,..,,,.,,,^:, IIIIIIIIIIIIIIIIBAAIEI9IIIIII/III0<
+chrM 1030 G G 139 0 14 39 ,$,$,,,,,,,,,,,,,,,,,,,,,,,..,,,.,,,,^:,^:,^:,^:, IIIIIIIIIIIIIIIIIIIIID=IIIIII<III8F6G:3
+chrM 1031 G G 149 0 16 42 ,,,,,,,,,,,,,,,,,,,,,,,..,,,.,,,,,,,,^:,^:,^:,^:,^:, IIIIIIIIIIIIIIIIII?<IIIIIIIFII>,;)F7.IIIIG
+chrM 1032 T T 120 0 17 43 ,,,,,,,,,,,,,,,,,,,,,,,..,,,.,,g,,,,,,,,,,^:, IIIIIIIIIIIIII632B>$@IIIIII+II6$3%>3*I9IAB$
+chrM 1033 G G 150 0 17 44 ,,,,,,,,,,,,,,,,,,,,,,,..,,,.,,,,,,,,,,,,,,^:, IIIIIIIIIIIIIIIIIIIIIIIIIII=II670*I22HCCII1;
+chrM 1034 T T 154 0 17 47 ,$,$,,,,,,,,,,,,,,,,,,,,,..,,,.,,,,,,,,,,,,,,,^:,^:,^:, IIIIIIIIIIIIII@H=I7>5IIIIII0I6=:4+I10IC;H<FHI=I
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.6col.20-3-no-no.pileup.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.6col.20-3-no-no.pileup.out Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,588 @@
+chrM 45 A 3 ..^:. III 0 0 0 0 3
+chrM 46 G 4 ...^:. IIII 0 0 0 0 4
+chrM 47 A 5 ....^:, IIIII 0 0 0 0 5
+chrM 48 T 5 ...., IIIII 0 0 0 0 5
+chrM 49 G 5 ...., IIIII 0 0 0 0 5
+chrM 50 A 5 ...., IIIII 0 0 0 0 5
+chrM 51 G 5 ...., IIIII 0 0 0 0 5
+chrM 52 T 5 ...., IIIII 0 0 0 0 5
+chrM 53 A 5 ...., IIIII 0 0 0 0 5
+chrM 54 T 5 ...., IIIII 0 0 0 0 5
+chrM 55 T 5 ...., IIIII 0 0 0 0 5
+chrM 56 C 5 ...., IIIII 0 0 0 0 5
+chrM 57 T 5 ...., IIIII 0 0 0 0 5
+chrM 58 T 5 ...., IIIII 0 0 0 0 5
+chrM 59 A 5 ...., IIIII 0 0 0 0 5
+chrM 60 C 5 ...., IIIII 0 0 0 0 5
+chrM 61 T 5 ...., IIIII 0 0 0 0 5
+chrM 62 C 5 ...., IIIII 0 0 0 0 5
+chrM 63 C 5 ...., IIIII 0 0 0 0 5
+chrM 64 A 5 ...., IIIII 0 0 0 0 5
+chrM 65 T 5 ...., IIIII 0 0 0 0 5
+chrM 66 A 5 ...., IIIII 0 0 0 0 5
+chrM 67 A 5 ...., IIIII 0 0 0 0 5
+chrM 68 A 5 ...., IIICI 0 0 0 0 5
+chrM 69 C 5 ...., IIIII 0 0 0 0 5
+chrM 70 A 5 ...., IIIII 0 0 0 0 5
+chrM 71 C 5 ...., IIIII 0 0 0 0 5
+chrM 72 A 5 ...., IAIII 0 0 0 0 5
+chrM 73 T 5 ...., IIIII 0 0 0 0 5
+chrM 74 A 5 ...., IIIII 0 0 0 0 5
+chrM 75 G 5 ...., %IIII 0 0 0 0 4
+chrM 76 G 5 T..., *IIII 0 0 0 0 4
+chrM 77 C 5 .$..., GIIII 0 0 0 0 5
+chrM 78 T 4 .$.., IIII 0 0 0 0 4
+chrM 79 T 3 .., III 0 0 0 0 3
+chrM 80 G 3 .$., I1I 0 0 0 0 2
+chrM 181 A 3 ,,^:, III 0 0 0 0 3
+chrM 182 G 3 ,,, III 0 0 0 0 3
+chrM 183 G 3 ,,, III 0 0 0 0 3
+chrM 184 T 3 ,,, III 0 0 0 0 3
+chrM 185 A 3 ,,, III 0 0 0 0 3
+chrM 186 T 3 ,,, III 0 0 0 0 3
+chrM 187 C 3 ,,, III 0 0 0 0 3
+chrM 188 A 3 ,,, III 0 0 0 0 3
+chrM 189 A 3 ,,, III 0 0 0 0 3
+chrM 190 G 3 ,,, III 0 0 0 0 3
+chrM 191 C 3 ,$,, III 0 0 0 0 3
+chrM 229 A 3 .^:,^:, %II 0 0 0 0 2
+chrM 230 C 3 .,, 8II 0 0 0 0 3
+chrM 231 C 3 .,, 9II 0 0 0 0 3
+chrM 232 C 3 .,, III 0 0 0 0 3
+chrM 233 C 3 .,, AI' 0 0 0 0 2
+chrM 234 C 3 .,, DI+ 0 0 0 0 2
+chrM 235 A 3 .,, &I@ 0 0 0 0 2
+chrM 236 C 3 .$,a +I$ 0 0 0 0 1
+chrM 244 A 3 ,,^:, II; 0 0 0 0 3
+chrM 245 G 3 ,,, II* 0 0 0 0 2
+chrM 246 C 3 ,,n II" 0 0 0 0 2
+chrM 247 A 3 ,,, III 0 0 0 0 3
+chrM 248 G 4 ,,,^:. IIII 0 0 0 0 4
+chrM 249 T 4 ,,,. II)I 0 0 0 0 3
+chrM 250 G 4 ,,,. II2I 0 0 0 0 3
+chrM 251 A 4 ,,,. II(I 0 0 0 0 3
+chrM 252 T 4 ,,,. II*I 0 0 0 0 3
+chrM 253 A 4 ,,,. II7I 0 0 0 0 4
+chrM 254 A 4 ,,,. II1I 0 0 0 0 3
+chrM 255 A 4 ,,,. II?I 0 0 0 0 4
+chrM 256 A 4 ,,,. II9I 0 0 0 0 4
+chrM 257 A 4 ,,,. II?I 0 0 0 0 4
+chrM 258 T 4 ,,,. II$I 0 0 0 0 3
+chrM 259 T 5 ,,,.^:. II&II 0 0 0 0 4
+chrM 260 A 5 ,,,.. II,II 0 0 0 0 4
+chrM 261 A 5 ,,,.. II/II 0 0 0 0 4
+chrM 262 G 5 ,,,.. II5II 0 0 0 0 5
+chrM 263 C 5 ,,a.. II%II 0 0 0 0 4
+chrM 264 T 5 ,$,$,.. II%II 0 0 0 0 4
+chrM 265 A 3 ,.. )II 0 0 0 0 2
+chrM 266 T 3 ,.. +II 0 0 0 0 2
+chrM 267 G 4 ,..^:. *III 0 0 0 0 3
+chrM 268 A 4 ,... EIII 0 0 0 0 4
+chrM 269 A 4 ,... =III 0 0 0 0 4
+chrM 270 C 4 a... ;III 1 0 0 0 4
+chrM 271 G 4 ,... ;III 0 0 0 0 4
+chrM 272 A 4 ,... 8@II 0 0 0 0 4
+chrM 273 A 4 ,... 1III 0 0 0 0 3
+chrM 274 A 4 ,... ICII 0 0 0 0 4
+chrM 275 G 4 ,... IIII 0 0 0 0 4
+chrM 276 T 4 ,... IIII 0 0 0 0 4
+chrM 277 T 4 ,... IIII 0 0 0 0 4
+chrM 278 C 4 ,... IIII 0 0 0 0 4
+chrM 279 G 4 ,$... IIII 0 0 0 0 4
+chrM 280 A 3 ... III 0 0 0 0 3
+chrM 281 C 3 ... GII 0 0 0 0 3
+chrM 282 T 3 ... III 0 0 0 0 3
+chrM 283 A 3 .$.. IFI 0 0 0 0 3
+chrM 284 A 3 ..^:, IAI 0 0 0 0 3
+chrM 285 G 3 .., ;II 0 0 0 0 3
+chrM 286 T 4 ..,^:. IIII 0 0 0 0 4
+chrM 287 C 4 ..,. II4I 0 0 0 0 3
+chrM 288 A 4 ..,. @III 0 0 0 0 4
+chrM 289 T 4 ..,. IIII 0 0 0 0 4
+chrM 290 A 4 ..,. @:II 0 0 0 0 4
+chrM 291 T 4 ..,. IIAI 0 0 0 0 4
+chrM 292 T 4 ..,. IIII 0 0 0 0 4
+chrM 293 A 4 ..,. 8;II 0 0 0 0 4
+chrM 294 A 4 .$.,. I<II 0 0 0 0 4
+chrM 295 A 3 .,. 4II 0 0 0 0 2
+chrM 296 T 3 .,. III 0 0 0 0 3
+chrM 297 A 3 .,. BII 0 0 0 0 3
+chrM 298 A 3 .,. CII 0 0 0 0 3
+chrM 299 G 3 .,. III 0 0 0 0 3
+chrM 300 G 3 .,. ;II 0 0 0 0 3
+chrM 301 G 3 .,. III 0 0 0 0 3
+chrM 302 T 3 .$,. III 0 0 0 0 3
+chrM 312 T 3 ,.^:. III 0 0 0 0 3
+chrM 313 C 3 ,.. III 0 0 0 0 3
+chrM 314 G 3 ,.. III 0 0 0 0 3
+chrM 315 T 3 ,.. III 0 0 0 0 3
+chrM 316 G 3 ,.. III 0 0 0 0 3
+chrM 317 C 3 ,.. III 0 0 0 0 3
+chrM 318 C 3 ,.. III 0 0 0 0 3
+chrM 319 A 3 ,$.. III 0 0 0 0 3
+chrM 390 A 3 ..^:. III 0 0 0 0 3
+chrM 391 A 3 ... >II 0 0 0 0 3
+chrM 392 A 3 ... III 0 0 0 0 3
+chrM 393 T 3 ... III 0 0 0 0 3
+chrM 394 A 3 ... III 0 0 0 0 3
+chrM 395 A 3 .$.. III 0 0 0 0 3
+chrM 400 A 3 ..^:. III 0 0 0 0 3
+chrM 401 A 3 ... III 0 0 0 0 3
+chrM 402 A 3 ... III 0 0 0 0 3
+chrM 403 A 3 ... III 0 0 0 0 3
+chrM 404 C 3 ... III 0 0 0 0 3
+chrM 405 C 3 ... III 0 0 0 0 3
+chrM 406 C 3 ... EII 0 0 0 0 3
+chrM 407 A 3 ... III 0 0 0 0 3
+chrM 408 G 3 ... III 0 0 0 0 3
+chrM 409 T 3 ... 0II 0 0 0 0 2
+chrM 410 T 3 ... III 0 0 0 0 3
+chrM 411 A 4 ...^:, IIII 0 0 0 0 4
+chrM 412 A 4 ..., FIII 0 0 0 0 4
+chrM 413 G 4 ..., IIIH 0 0 0 0 4
+chrM 414 C 4 ...a III2 0 0 0 0 3
+chrM 415 C 4 TTTt III7 0 0 0 4 4
+chrM 416 G 5 ...,^:, II?7: 0 0 0 0 5
+chrM 417 T 5 ...,, ;IIE@ 0 0 0 0 5
+chrM 418 A 5 ...,, IIIII 0 0 0 0 5
+chrM 419 A 5 ...,, IIIII 0 0 0 0 5
+chrM 420 A 5 ...,, FIIII 0 0 0 0 5
+chrM 421 A 5 ...,, IIIII 0 0 0 0 5
+chrM 422 A 5 ...,, >IIII 0 0 0 0 5
+chrM 423 G 6 ...,,^:, HII/I, 0 0 0 0 4
+chrM 424 C 6 .$..a,, ;II-I: 0 0 0 0 5
+chrM 425 T 5 .$.,,, IIIIF 0 0 0 0 5
+chrM 426 A 5 .,,,^:, III@I 0 0 0 0 5
+chrM 427 C 5 .,,,, III$I 0 0 0 0 4
+chrM 428 A 5 .,,,, IIIII 0 0 0 0 5
+chrM 429 A 5 .,,,, IIII. 0 0 0 0 4
+chrM 430 C 5 .,,,a I%I5' 0 0 0 0 3
+chrM 431 C 5 .,,,, I(I5< 0 0 0 0 4
+chrM 432 A 5 .,,,, IIIII 0 0 0 0 5
+chrM 433 A 5 .,,,, 0IIII 0 0 0 0 4
+chrM 434 A 5 .,,,, =IIII 0 0 0 0 5
+chrM 435 G 5 .$,,,, EIIII 0 0 0 0 5
+chrM 436 T 4 ,,,, III5 0 0 0 0 4
+chrM 437 A 4 ,,,, IIII 0 0 0 0 4
+chrM 438 A 4 ,,,, IIII 0 0 0 0 4
+chrM 439 A 4 ,,,, IIII 0 0 0 0 4
+chrM 440 A 4 ,,,, IIIF 0 0 0 0 4
+chrM 441 T 6 ,,,,^:.^:. III;II 0 0 0 0 6
+chrM 442 A 6 ,,,,.. IIIIII 0 0 0 0 6
+chrM 443 G 6 ,,,,.. IIIIII 0 0 0 0 6
+chrM 444 A 6 ,,,,.. IIIIII 0 0 0 0 6
+chrM 445 C 6 ,,,,.. IIIIII 0 0 0 0 6
+chrM 446 T 6 ,$,,,.. IIIIII 0 0 0 0 6
+chrM 447 A 5 ,,,.. IIIII 0 0 0 0 5
+chrM 448 C 5 ,,,.. IIIII 0 0 0 0 5
+chrM 449 G 6 ,,,..^:, IIIII6 0 0 0 0 6
+chrM 450 A 6 ,,,.., IIIIII 0 0 0 0 6
+chrM 451 A 6 ,$,,.., IIIIII 0 0 0 0 6
+chrM 452 A 5 ,,.., IIIII 0 0 0 0 5
+chrM 453 G 5 ,,.., IIIII 0 0 0 0 5
+chrM 454 T 6 ,,..,^:, IIIIII 0 0 0 0 6
+chrM 455 G 6 ,,..,, IIIIII 0 0 0 0 6
+chrM 456 A 6 ,,..,, IIIIII 0 0 0 0 6
+chrM 457 C 6 ,,..,, IIIII= 0 0 0 0 6
+chrM 458 T 6 ,$,..,, IIIIII 0 0 0 0 6
+chrM 459 T 5 ,..,, IIIII 0 0 0 0 5
+chrM 460 T 5 ,..,, IIIII 0 0 0 0 5
+chrM 461 A 5 ,$..,, IIIII 0 0 0 0 5
+chrM 462 A 4 ..,, IIII 0 0 0 0 4
+chrM 463 T 4 ..,, IIIC 0 0 0 0 4
+chrM 464 A 4 ..,, IIII 0 0 0 0 4
+chrM 465 C 4 ..,, IIII 0 0 0 0 4
+chrM 466 C 4 ..,, IIII 0 0 0 0 4
+chrM 467 T 4 ..,, II>? 0 0 0 0 4
+chrM 468 C 4 ..,, IIII 0 0 0 0 4
+chrM 469 T 4 ..,, IIIG 0 0 0 0 4
+chrM 470 G 4 ..,, %III 0 0 0 0 3
+chrM 471 A 4 ..,, 4;II 0 0 0 0 3
+chrM 472 C 4 ..,, II3I 0 0 0 0 3
+chrM 473 T 4 ..,, IIII 0 0 0 0 4
+chrM 474 A 4 ..,, ;III 0 0 0 0 4
+chrM 475 C 4 ..,, IIII 0 0 0 0 4
+chrM 476 A 4 .$.$,, 32II 0 0 0 0 2
+chrM 480 T 3 ,,^:. III 0 0 0 0 3
+chrM 481 A 3 ,,. III 0 0 0 0 3
+chrM 482 G 3 ,,. III 0 0 0 0 3
+chrM 483 C 4 ,,.^:, IIIE 0 0 0 0 4
+chrM 484 T 4 ,$,., III9 0 0 0 0 4
+chrM 485 A 3 ,., III 0 0 0 0 3
+chrM 486 A 3 ,., III 0 0 0 0 3
+chrM 487 G 3 ,., III 0 0 0 0 3
+chrM 488 A 3 ,., III 0 0 0 0 3
+chrM 489 C 3 ,$., III 0 0 0 0 3
+chrM 510 C 3 .,^:. III 0 0 0 0 3
+chrM 511 C 3 .,. III 0 0 0 0 3
+chrM 512 A 3 .,. 6II 0 0 0 0 3
+chrM 513 C 3 .,. III 0 0 0 0 3
+chrM 514 T 3 .,. III 0 0 0 0 3
+chrM 515 A 3 .$,. III 0 0 0 0 3
+chrM 518 C 3 ,$.^:. III 0 0 0 0 3
+chrM 520 T 3 ..^:, III 0 0 0 0 3
+chrM 521 A 3 .., III 0 0 0 0 3
+chrM 522 G 3 .., II, 0 0 0 0 2
+chrM 523 C 3 .., III 0 0 0 0 3
+chrM 524 C 3 .., II7 0 0 0 0 3
+chrM 525 C 3 .., III 0 0 0 0 3
+chrM 526 T 3 .., II? 0 0 0 0 3
+chrM 527 A 3 .., III 0 0 0 0 3
+chrM 528 A 3 .., III 0 0 0 0 3
+chrM 529 A 3 .., FII 0 0 0 0 3
+chrM 530 C 3 .., II+ 0 0 0 0 2
+chrM 531 T 3 .., III 0 0 0 0 3
+chrM 532 A 3 .., :II 0 0 0 0 3
+chrM 533 A 3 .., DGI 0 0 0 0 3
+chrM 534 A 3 .., III 0 0 0 0 3
+chrM 535 A 3 .., ?CI 0 0 0 0 3
+chrM 536 T 3 .., III 0 0 0 0 3
+chrM 537 A 3 .., 9II 0 0 0 0 3
+chrM 538 G 3 .., III 0 0 0 0 3
+chrM 539 C 3 .., III 0 0 0 0 3
+chrM 540 T 3 .., III 0 0 0 0 3
+chrM 541 T 3 .., III 0 0 0 0 3
+chrM 542 A 4 ..,^:. IIII 0 0 0 0 4
+chrM 543 C 4 ..,. IIII 0 0 0 0 4
+chrM 544 C 4 ..,. IIII 0 0 0 0 4
+chrM 545 A 4 N$.,. "III 0 0 0 0 3
+chrM 546 C 3 .,. III 0 0 0 0 3
+chrM 547 A 3 .,. DII 0 0 0 0 3
+chrM 548 A 3 .,. EII 0 0 0 0 3
+chrM 549 C 3 .,. III 0 0 0 0 3
+chrM 550 A 3 .,. III 0 0 0 0 3
+chrM 551 A 3 .,. 6II 0 0 0 0 3
+chrM 552 A 3 .,. GII 0 0 0 0 3
+chrM 553 G 3 .$,. ?II 0 0 0 0 3
+chrM 577 A 3 .$.^:. III 0 0 0 0 3
+chrM 580 A 3 ..^:, III 0 0 0 0 3
+chrM 581 G 3 .., III 0 0 0 0 3
+chrM 582 C 3 .., II? 0 0 0 0 3
+chrM 583 C 3 ..a II- 0 0 0 0 2
+chrM 584 T 3 .., IIH 0 0 0 0 3
+chrM 585 A 3 .., III 0 0 0 0 3
+chrM 586 A 3 .., III 0 0 0 0 3
+chrM 587 A 4 ..,^:, IIII 0 0 0 0 4
+chrM 588 A 4 ..,, IIII 0 0 0 0 4
+chrM 589 C 4 ..,, IIII 0 0 0 0 4
+chrM 590 T 4 ..,, II.5 0 0 0 0 3
+chrM 591 C 4 .$.,, II<I 0 0 0 0 4
+chrM 592 A 3 .,, III 0 0 0 0 3
+chrM 593 A 3 .,, III 0 0 0 0 3
+chrM 594 A 3 .,, III 0 0 0 0 3
+chrM 595 G 3 .,, III 0 0 0 0 3
+chrM 596 G 3 .,, III 0 0 0 0 3
+chrM 597 A 3 .,, :EI 0 0 0 0 3
+chrM 598 C 3 .,, III 0 0 0 0 3
+chrM 599 T 4 .,,^:. II@I 0 0 0 0 4
+chrM 600 T 4 .,,. IIII 0 0 0 0 4
+chrM 601 G 4 .,,. IIII 0 0 0 0 4
+chrM 602 G 4 .,,. IIII 0 0 0 0 4
+chrM 603 C 4 .,,. IIII 0 0 0 0 4
+chrM 604 G 4 .,,. IIII 0 0 0 0 4
+chrM 605 G 4 .,,. IIII 0 0 0 0 4
+chrM 606 T 4 .,,. 5III 0 0 0 0 4
+chrM 607 G 4 .,,. IIII 0 0 0 0 4
+chrM 608 C 4 .,,. *III 0 0 0 0 3
+chrM 609 T 5 .,,.^:, ?IIII 0 0 0 0 5
+chrM 610 T 5 .,,., IIII8 0 0 0 0 5
+chrM 611 T 5 .,,., IIIII 0 0 0 0 5
+chrM 612 A 5 T$,,., 3IIII 0 0 0 0 4
+chrM 613 C 4 ,,., III) 0 0 0 0 3
+chrM 614 A 4 ,,., IIII 0 0 0 0 4
+chrM 615 T 4 ,$,., IIII 0 0 0 0 4
+chrM 616 C 3 ,., III 0 0 0 0 3
+chrM 617 C 3 ,., III 0 0 0 0 3
+chrM 618 C 3 ,., III 0 0 0 0 3
+chrM 619 T 3 ,., IF9 0 0 0 0 3
+chrM 620 C 3 ,., II7 0 0 0 0 3
+chrM 621 T 3 ,., III 0 0 0 0 3
+chrM 622 A 3 ,$., I7I 0 0 0 0 3
+chrM 652 C 3 .,^:, II) 0 0 0 0 2
+chrM 653 G 3 .,, II2 0 0 0 0 2
+chrM 654 A 3 .,, III 0 0 0 0 3
+chrM 655 T 4 .,,^:. II*I 0 0 0 0 3
+chrM 656 A 4 .,,. IIII 0 0 0 0 4
+chrM 657 A 4 .,,. IIII 0 0 0 0 4
+chrM 658 A 4 .,,. IIII 0 0 0 0 4
+chrM 659 C 4 .,,. IIII 0 0 0 0 4
+chrM 660 C 4 .,,. IIII 0 0 0 0 4
+chrM 661 C 4 .,,. IIII 0 0 0 0 4
+chrM 662 C 4 .,,. IIFI 0 0 0 0 4
+chrM 663 A 4 .,,. =IDI 0 0 0 0 4
+chrM 664 C 4 .,,. II6I 0 0 0 0 4
+chrM 665 C 5 .,,.^:, IIIII 0 0 0 0 5
+chrM 666 A 5 .,,., BIIII 0 0 0 0 5
+chrM 667 T 5 .,,., II5I+ 0 0 0 0 4
+chrM 668 C 5 .,,., IIIII 0 0 0 0 5
+chrM 669 C 5 .,,., IIIII 0 0 0 0 5
+chrM 670 C 5 .,a., II.II 0 0 0 0 4
+chrM 671 T 5 .,,., IIIIA 0 0 0 0 5
+chrM 672 T 6 .,,.,^:. FI9I.I 0 0 0 0 5
+chrM 673 G 6 .,,.,. IIIIII 0 0 0 0 6
+chrM 674 C 6 .,,.,. IIIIII 0 0 0 0 6
+chrM 675 T 6 .,,.,. IIIIII 0 0 0 0 6
+chrM 676 A 6 .,,.,. ,IIEII 0 0 0 0 5
+chrM 677 A 7 .,,.,.^:. 3II;III 0 0 0 0 6
+chrM 678 T 7 .,,.,.. IIIIDII 0 0 0 0 7
+chrM 679 T 7 .,,.,.. CIIIIII 0 0 0 0 7
+chrM 680 C 7 .,,.,.. IIIIIII 0 0 0 0 7
+chrM 681 A 7 .$,,.,.. 9IIIIII 0 0 0 0 7
+chrM 682 G 6 ,,.,.. II$III 0 0 0 0 5
+chrM 683 C 6 ,,.,.. IIIIII 0 0 0 0 6
+chrM 684 C 6 ,$,.,.. IIIIII 0 0 0 0 6
+chrM 685 T 5 ,.,.. IIIII 0 0 0 0 5
+chrM 686 A 5 ,.,.. IIIII 0 0 0 0 5
+chrM 687 T 5 ,$.,.. IIIII 0 0 0 0 5
+chrM 688 A 4 .,.. IIII 0 0 0 0 4
+chrM 689 T 4 .,.. IIII 0 0 0 0 4
+chrM 690 A 4 .$,.. IIII 0 0 0 0 4
+chrM 691 C 3 ,.. III 0 0 0 0 3
+chrM 692 C 3 ,.. III 0 0 0 0 3
+chrM 693 G 4 ,..^:, IIII 0 0 0 0 4
+chrM 694 C 4 ,.., IIII 0 0 0 0 4
+chrM 695 C 4 ,.., IIII 0 0 0 0 4
+chrM 696 A 4 ,.., IIII 0 0 0 0 4
+chrM 697 T 4 ,.., IIII 0 0 0 0 4
+chrM 698 C 4 ,.., IIII 0 0 0 0 4
+chrM 699 T 4 ,.., IIII 0 0 0 0 4
+chrM 700 T 4 ,$.., IIII 0 0 0 0 4
+chrM 701 C 3 .., III 0 0 0 0 3
+chrM 702 A 3 .., III 0 0 0 0 3
+chrM 703 G 3 .., 2II 0 0 0 0 2
+chrM 704 C 3 .., III 0 0 0 0 3
+chrM 705 A 3 N., "II 0 0 0 0 2
+chrM 706 A 3 .., I5I 0 0 0 0 3
+chrM 707 A 3 .$., GII 0 0 0 0 3
+chrM 726 A 3 ,,^:. III 0 0 0 0 3
+chrM 727 G 3 ,,. III 0 0 0 0 3
+chrM 728 T 3 ,$,. III 0 0 0 0 3
+chrM 732 C 3 a.^:. $II 0 0 0 0 2
+chrM 733 A 3 ,.. III 0 0 0 0 3
+chrM 734 C 3 ,.. %II 0 0 0 0 2
+chrM 735 A 3 ,.. III 0 0 0 0 3
+chrM 736 A 3 ,.. *II 0 0 0 0 2
+chrM 737 A 3 ,.. III 0 0 0 0 3
+chrM 738 T 3 ,.. III 0 0 0 0 3
+chrM 739 A 3 ,.. III 0 0 0 0 3
+chrM 740 T 3 ,.. III 0 0 0 0 3
+chrM 741 C 3 ,.. III 0 0 0 0 3
+chrM 742 C 3 ,.. III 0 0 0 0 3
+chrM 743 A 3 ,.. III 0 0 0 0 3
+chrM 744 A 3 ,.. III 0 0 0 0 3
+chrM 745 C 3 ,.. III 0 0 0 0 3
+chrM 746 A 3 ,.. IIE 0 0 0 0 3
+chrM 747 T 3 ,.. III 0 0 0 0 3
+chrM 748 A 3 ,.. III 0 0 0 0 3
+chrM 749 A 3 ,.. III 0 0 0 0 3
+chrM 750 A 3 ,.. III 0 0 0 0 3
+chrM 751 A 3 ,.. IAI 0 0 0 0 3
+chrM 752 A 3 ,.. III 0 0 0 0 3
+chrM 753 C 3 ,.. III 0 0 0 0 3
+chrM 754 G 3 ,$.. III 0 0 0 0 3
+chrM 756 T 3 ..^:, III 0 0 0 0 3
+chrM 757 A 3 .., III 0 0 0 0 3
+chrM 758 G 3 .., III 0 0 0 0 3
+chrM 759 G 3 .., III 0 0 0 0 3
+chrM 760 T 3 .., =II 0 0 0 0 3
+chrM 761 C 3 .$., IID 0 0 0 0 3
+chrM 767 G 3 .$,^:, III 0 0 0 0 3
+chrM 769 A 3 ,,^:, III 0 0 0 0 3
+chrM 770 G 3 ,,, III 0 0 0 0 3
+chrM 771 C 3 ,,, IHI 0 0 0 0 3
+chrM 772 C 3 ,a, I)/ 0 0 0 0 1
+chrM 773 C 3 ,,, I7I 0 0 0 0 3
+chrM 774 A 4 ,,,^:. II:I 0 0 0 0 4
+chrM 775 T 4 ,,,. IH.I 0 0 0 0 3
+chrM 776 G 4 ,,,. IIII 0 0 0 0 4
+chrM 777 G 4 ,,,. IIII 0 0 0 0 4
+chrM 778 G 4 ,,,. IIII 0 0 0 0 4
+chrM 779 A 4 ,,,. IIAI 0 0 0 0 4
+chrM 780 T 4 ,,,. IIGI 0 0 0 0 4
+chrM 781 G 4 ,,,. IIII 0 0 0 0 4
+chrM 782 G 4 ,,,. IIII 0 0 0 0 4
+chrM 783 A 4 ,,,. IIII 0 0 0 0 4
+chrM 784 G 4 ,,,. IIII 0 0 0 0 4
+chrM 785 A 4 ,,,. IIII 0 0 0 0 4
+chrM 786 G 4 ,,,. IIII 0 0 0 0 4
+chrM 787 A 4 ,,,. IIII 0 0 0 0 4
+chrM 788 A 4 ,,,. IIII 0 0 0 0 4
+chrM 789 A 4 ,,,. IIII 0 0 0 0 4
+chrM 790 T 5 ,,,.^:. IIIII 0 0 0 0 5
+chrM 791 G 5 ,$,,.. IIIII 0 0 0 0 5
+chrM 792 G 4 ,,.. IIII 0 0 0 0 4
+chrM 793 G 4 ,,.. IIII 0 0 0 0 4
+chrM 794 C 4 ,,.. IIII 0 0 0 0 4
+chrM 795 T 4 ,,.. IIII 0 0 0 0 4
+chrM 796 A 4 ,,.. IIII 0 0 0 0 4
+chrM 797 C 4 ,,.. IIII 0 0 0 0 4
+chrM 798 A 4 ,,.. IIII 0 0 0 0 4
+chrM 799 T 4 ,,.. IIII 0 0 0 0 4
+chrM 800 T 4 ,,.. IIII 0 0 0 0 4
+chrM 801 T 4 ,,.. IIII 0 0 0 0 4
+chrM 802 T 4 ,$,.. IIII 0 0 0 0 4
+chrM 803 C 3 ,.. III 0 0 0 0 3
+chrM 804 T 3 ,$.. III 0 0 0 0 3
+chrM 806 C 3 ..^:. III 0 0 0 0 3
+chrM 807 C 3 ... III 0 0 0 0 3
+chrM 808 C 3 ... III 0 0 0 0 3
+chrM 809 T 3 .$.. III 0 0 0 0 3
+chrM 810 A 3 ..^:, III 0 0 0 0 3
+chrM 811 A 3 .., III 0 0 0 0 3
+chrM 812 G 3 .., II7 0 0 0 0 3
+chrM 813 A 3 .., III 0 0 0 0 3
+chrM 814 A 3 .., III 0 0 0 0 3
+chrM 815 C 3 .., III 0 0 0 0 3
+chrM 816 A 3 .., III 0 0 0 0 3
+chrM 817 A 3 .., III 0 0 0 0 3
+chrM 818 G 3 .., III 0 0 0 0 3
+chrM 819 A 3 .., III 0 0 0 0 3
+chrM 820 A 3 .., &II 0 0 0 0 2
+chrM 821 C 3 .., III 0 0 0 0 3
+chrM 822 T 3 .., III 0 0 0 0 3
+chrM 823 T 3 ..n II" 0 0 0 0 2
+chrM 824 T 3 .., III 0 0 0 0 3
+chrM 825 A 3 .$., III 0 0 0 0 3
+chrM 826 A 3 .,^:. III 0 0 0 0 3
+chrM 827 C 3 .,. III 0 0 0 0 3
+chrM 828 C 3 .,. III 0 0 0 0 3
+chrM 829 C 4 .,.^:, IIII 0 0 0 0 4
+chrM 830 G 4 .,., IIII 0 0 0 0 4
+chrM 831 G 4 .,., IIII 0 0 0 0 4
+chrM 832 A 4 .,., IIII 0 0 0 0 4
+chrM 833 C 4 .,., IIII 0 0 0 0 4
+chrM 834 G 4 .,., IIII 0 0 0 0 4
+chrM 835 A 4 .,., IIII 0 0 0 0 4
+chrM 836 A 4 .,., 8III 0 0 0 0 4
+chrM 837 A 4 .,., IIII 0 0 0 0 4
+chrM 838 G 4 .,., IIII 0 0 0 0 4
+chrM 839 T 5 .,.,^:, 4:IIG 0 0 0 0 4
+chrM 840 C 5 .,.,, IIIII 0 0 0 0 5
+chrM 841 T 5 .$,.,, IIIII 0 0 0 0 5
+chrM 842 C 4 ,.,, IIII 0 0 0 0 4
+chrM 843 C 4 ,.,, IIII 0 0 0 0 4
+chrM 844 A 4 ,.,, IIII 0 0 0 0 4
+chrM 845 T 4 ,$.,, IIII 0 0 0 0 4
+chrM 846 G 3 .,, @II 0 0 0 0 3
+chrM 847 A 3 .,, III 0 0 0 0 3
+chrM 848 A 3 .,, III 0 0 0 0 3
+chrM 849 A 3 .,, III 0 0 0 0 3
+chrM 850 C 3 .,, III 0 0 0 0 3
+chrM 851 T 3 .,, III 0 0 0 0 3
+chrM 852 G 3 .,, III 0 0 0 0 3
+chrM 853 G 3 .,, III 0 0 0 0 3
+chrM 854 A 3 .,, EII 0 0 0 0 3
+chrM 855 G 3 .,, DII 0 0 0 0 3
+chrM 856 A 3 .,, III 0 0 0 0 3
+chrM 857 C 3 .,, III 0 0 0 0 3
+chrM 858 T 4 .,,^:, IIIA 0 0 0 0 4
+chrM 859 A 4 .,,, @III 0 0 0 0 4
+chrM 860 A 4 .,,, IIII 0 0 0 0 4
+chrM 861 A 4 .$,,, EIII 0 0 0 0 4
+chrM 862 G 3 ,,, III 0 0 0 0 3
+chrM 863 G 3 ,,, III 0 0 0 0 3
+chrM 864 A 3 ,$,, III 0 0 0 0 3
+chrM 905 C 3 ,.^:, III 0 0 0 0 3
+chrM 906 A 3 ,., III 0 0 0 0 3
+chrM 907 G 3 ,., III 0 0 0 0 3
+chrM 908 G 3 ,., III 0 0 0 0 3
+chrM 909 C 3 ,., III 0 0 0 0 3
+chrM 910 C 3 ,., III 0 0 0 0 3
+chrM 911 A 4 ,.,^:, IIII 0 0 0 0 4
+chrM 912 T 4 ,.,, IIEG 0 0 0 0 4
+chrM 913 G 4 ,.,, III: 0 0 0 0 4
+chrM 914 A 4 ,.,, IIII 0 0 0 0 4
+chrM 915 A 4 ,.,, IIII 0 0 0 0 4
+chrM 916 G 4 ,.,, III5 0 0 0 0 4
+chrM 917 C 4 ,.,, III5 0 0 0 0 4
+chrM 918 G 4 ,.,, IIII 0 0 0 0 4
+chrM 919 C 4 ,.,, III< 0 0 0 0 4
+chrM 920 G 4 ,.,, IIII 0 0 0 0 4
+chrM 921 C 4 ,.,, IIII 0 0 0 0 4
+chrM 922 A 4 ,.,, IIII 0 0 0 0 4
+chrM 923 C 4 ,.,, III8 0 0 0 0 4
+chrM 924 A 4 ,.,, IFII 0 0 0 0 4
+chrM 925 C 4 ,.,, IIII 0 0 0 0 4
+chrM 926 A 4 ,.,, IIII 0 0 0 0 4
+chrM 927 C 4 ,.,, IIII 0 0 0 0 4
+chrM 928 C 5 ,.,,^:, IIII: 0 0 0 0 5
+chrM 929 G 5 ,.,,, IIIE: 0 0 0 0 5
+chrM 930 C 5 ,.,,, IIIII 0 0 0 0 5
+chrM 931 C 5 ,.,,, IIIIF 0 0 0 0 5
+chrM 932 C 5 ,.,,, IIIIC 0 0 0 0 5
+chrM 933 G 5 ,$.,,, I?II: 0 0 0 0 5
+chrM 934 T 4 .$,,, 4II> 0 0 0 0 3
+chrM 935 C 3 ,,, III 0 0 0 0 3
+chrM 936 A 3 ,,, III 0 0 0 0 3
+chrM 937 C 3 ,,, II1 0 0 0 0 2
+chrM 938 C 3 ,,, III 0 0 0 0 3
+chrM 939 C 3 ,,, III 0 0 0 0 3
+chrM 940 T 3 ,$,, III 0 0 0 0 3
+chrM 958 C 3 ,.^:. III 0 0 0 0 3
+chrM 959 A 3 ,.. III 0 0 0 0 3
+chrM 960 T 3 ,.. III 0 0 0 0 3
+chrM 961 A 3 ,.. III 0 0 0 0 3
+chrM 962 A 3 ,.. III 0 0 0 0 3
+chrM 963 C 4 ,$..^:. IIII 0 0 0 0 4
+chrM 964 A 3 ... I(; 0 0 0 0 2
+chrM 965 T 3 ... III 0 0 0 0 3
+chrM 966 A 4 ...^:. IIII 0 0 0 0 4
+chrM 967 A 4 .... IIII 0 0 0 0 4
+chrM 968 C 4 .... IEII 0 0 0 0 4
+chrM 969 A 4 .... IIII 0 0 0 0 4
+chrM 970 T 4 .... IIII 0 0 0 0 4
+chrM 971 A 4 .... IIII 0 0 0 0 4
+chrM 972 A 4 .... IIII 0 0 0 0 4
+chrM 973 A 4 .... II0I 0 0 0 0 3
+chrM 974 A 5 ....^:. IIIII 0 0 0 0 5
+chrM 975 C 5 ..... IIIII 0 0 0 0 5
+chrM 976 C 5 ..... IIIII 0 0 0 0 5
+chrM 977 G 5 ..... IIIII 0 0 0 0 5
+chrM 978 T 5 ..... IIIII 0 0 0 0 5
+chrM 979 G 5 ..... I0III 0 0 0 0 4
+chrM 980 A 5 ..... IIII4 0 0 0 0 4
+chrM 981 C 5 ..... IIIII 0 0 0 0 5
+chrM 982 C 5 ..... IIIII 0 0 0 0 5
+chrM 983 C 5 ..... IIIII 0 0 0 0 5
+chrM 984 A 5 ..... -IGII 0 0 0 0 4
+chrM 985 A 5 ..... 4GIII 0 0 0 0 4
+chrM 986 A 5 ..... BDGII 0 0 0 0 5
+chrM 987 C 5 ..... IDIII 0 0 0 0 5
+chrM 988 A 5 ..... @<III 0 0 0 0 5
+chrM 989 T 5 ..... IIIII 0 0 0 0 5
+chrM 990 A 5 .$.... I@III 0 0 0 0 5
+chrM 991 T 4 .... IICI 0 0 0 0 4
+chrM 992 G 4 T... )III 0 0 0 0 3
+chrM 993 A 4 .$... ?ICI 0 0 0 0 4
+chrM 994 A 3 ... III 0 0 0 0 3
+chrM 995 A 3 ... III 0 0 0 0 3
+chrM 996 G 3 ... III 0 0 0 0 3
+chrM 997 G 3 ... III 0 0 0 0 3
+chrM 998 A 3 .$.. 4II 0 0 0 0 2
+chrM 999 G 3 ..^:. III 0 0 0 0 3
+chrM 1000 A 3 ... III 0 0 0 0 3
+chrM 1001 C 3 .$.. III 0 0 0 0 3
+chrM 1043 A 3 ..^:, III 0 0 0 0 3
+chrM 1044 A 3 .., III 0 0 0 0 3
+chrM 1045 C 3 .., II7 0 0 0 0 3
+chrM 1046 C 3 .., II- 0 0 0 0 2
+chrM 1047 A 3 .., III 0 0 0 0 3
+chrM 1048 A 3 .., III 0 0 0 0 3
+chrM 1049 A 3 .., III 0 0 0 0 3
+chrM 1050 G 3 .., III 0 0 0 0 3
+chrM 1051 T 3 .., III 0 0 0 0 3
+chrM 1052 G 3 .., III 0 0 0 0 3
+chrM 1053 T 3 .., GII 0 0 0 0 3
+chrM 1054 A 3 .., III 0 0 0 0 3
+chrM 1055 G 3 .., :II 0 0 0 0 3
+chrM 1056 C 3 ..a HI% 0 0 0 0 2
+chrM 1057 T 3 .., III 0 0 0 0 3
+chrM 1058 T 3 .., III 0 0 0 0 3
+chrM 1059 A 3 .., BII 0 0 0 0 3
+chrM 1060 A 3 .., GII 0 0 0 0 3
+chrM 1061 A 3 .., HII 0 0 0 0 3
+chrM 1062 C 3 .., III 0 0 0 0 3
+chrM 1063 A 3 .., DII 0 0 0 0 3
+chrM 1064 A 3 .., BII 0 0 0 0 3
+chrM 1065 A 3 .., 1II 0 0 0 0 2
+chrM 1066 G 3 .$., &II 0 0 0 0 2
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.6col.20-3-yes-no.pileup.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.6col.20-3-yes-no.pileup.out Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,2 @@
+chrM 270 C 4 a... ;III 1 0 0 0 4
+chrM 415 C 4 TTTt III7 0 0 0 4 4
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.6col.20-3-yes-yes.pileup.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.6col.20-3-yes-yes.pileup.out Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,2 @@
+chrM 269 270 C 4 a... ;III 1 0 0 0 4
+chrM 414 415 C 4 TTTt III7 0 0 0 4 4
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.6col.40-3-yes-yes.pileup.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.6col.40-3-yes-yes.pileup.out Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,1 @@
+chrM 414 415 C 4 TTTt III7 0 0 0 3 3
diff -r ba2412c2a4d9 -r adff03258b45 test-data/pileup_parser.6col.pileup
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/pileup_parser.6col.pileup Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,1000 @@
+chrM 42 C 1 ^:. I
+chrM 43 C 2 .^:. II
+chrM 44 T 2 .. II
+chrM 45 A 3 ..^:. III
+chrM 46 G 4 ...^:. IIII
+chrM 47 A 5 ....^:, IIIII
+chrM 48 T 5 ...., IIIII
+chrM 49 G 5 ...., IIIII
+chrM 50 A 5 ...., IIIII
+chrM 51 G 5 ...., IIIII
+chrM 52 T 5 ...., IIIII
+chrM 53 A 5 ...., IIIII
+chrM 54 T 5 ...., IIIII
+chrM 55 T 5 ...., IIIII
+chrM 56 C 5 ...., IIIII
+chrM 57 T 5 ...., IIIII
+chrM 58 T 5 ...., IIIII
+chrM 59 A 5 ...., IIIII
+chrM 60 C 5 ...., IIIII
+chrM 61 T 5 ...., IIIII
+chrM 62 C 5 ...., IIIII
+chrM 63 C 5 ...., IIIII
+chrM 64 A 5 ...., IIIII
+chrM 65 T 5 ...., IIIII
+chrM 66 A 5 ...., IIIII
+chrM 67 A 5 ...., IIIII
+chrM 68 A 5 ...., IIICI
+chrM 69 C 5 ...., IIIII
+chrM 70 A 5 ...., IIIII
+chrM 71 C 5 ...., IIIII
+chrM 72 A 5 ...., IAIII
+chrM 73 T 5 ...., IIIII
+chrM 74 A 5 ...., IIIII
+chrM 75 G 5 ...., %IIII
+chrM 76 G 5 T..., *IIII
+chrM 77 C 5 .$..., GIIII
+chrM 78 T 4 .$.., IIII
+chrM 79 T 3 .., III
+chrM 80 G 3 .$., I1I
+chrM 81 G 2 .$, II
+chrM 82 T 1 ,$ I
+chrM 83 C 2 ^:.^:. II
+chrM 84 C 2 .. II
+chrM 85 T 2 .. II
+chrM 86 A 2 .. II
+chrM 87 G 2 .. II
+chrM 88 C 2 .. II
+chrM 89 C 2 .. II
+chrM 90 T 2 .. II
+chrM 91 T 2 .. II
+chrM 92 T 2 .. II
+chrM 93 T 2 .. II
+chrM 94 T 2 .. II
+chrM 95 A 2 .. II
+chrM 96 T 2 .. II
+chrM 97 T 2 .. II
+chrM 98 A 2 .. II
+chrM 99 G 2 .. II
+chrM 100 T 2 .. II
+chrM 101 T 2 .. II
+chrM 102 A 2 .. II
+chrM 103 T 2 .. II
+chrM 104 T 2 .. II
+chrM 105 A 2 .. IE
+chrM 106 A 2 .. II
+chrM 107 T 2 .. II
+chrM 108 A 2 .. II
+chrM 109 G 2 .. II
+chrM 110 A 2 .. II
+chrM 111 A 2 .. I2
+chrM 112 T 2 .. II
+chrM 113 T 2 .. II
+chrM 114 A 2 .. H7
+chrM 115 C 2 .. II
+chrM 116 A 2 .. II
+chrM 117 C 2 .. II
+chrM 118 A 2 .$.$ F8
+chrM 156 T 1 ^:, &
+chrM 157 C 1 , I
+chrM 158 A 2 g^:g I>
+chrM 159 C 2 ,, /F
+chrM 160 G 2 ,, II
+chrM 161 T 2 ,, I>
+chrM 162 C 2 ,, .-
+chrM 163 T 2 ,, I8
+chrM 164 C 2 ,, 4F
+chrM 165 T 2 ,, II
+chrM 166 A 2 ,, II
+chrM 167 C 2 ,, ;6
+chrM 168 G 2 ,, II
+chrM 169 A 2 ,, II
+chrM 170 T 2 ,, II
+chrM 171 T 2 ,, IB
+chrM 172 A 2 ,, II
+chrM 173 A 2 ,, II
+chrM 174 A 2 ,, II
+chrM 175 A 2 ,, II
+chrM 176 G 2 ,, II
+chrM 177 G 2 ,, II
+chrM 178 A 2 ,, II
+chrM 179 G 2 ,, II
+chrM 180 C 2 ,, II
+chrM 181 A 3 ,,^:, III
+chrM 182 G 3 ,,, III
+chrM 183 G 3 ,,, III
+chrM 184 T 3 ,,, III
+chrM 185 A 3 ,,, III
+chrM 186 T 3 ,,, III
+chrM 187 C 3 ,,, III
+chrM 188 A 3 ,,, III
+chrM 189 A 3 ,,, III
+chrM 190 G 3 ,,, III
+chrM 191 C 3 ,$,, III
+chrM 192 A 2 ,, II
+chrM 193 C 2 ,$, II
+chrM 194 A 1 , I
+chrM 195 C 1 , I
+chrM 196 T 1 , F
+chrM 197 A 1 , I
+chrM 198 G 1 , I
+chrM 199 A 1 , I
+chrM 200 A 1 , I
+chrM 201 A 2 ,^:. I-
+chrM 202 G 2 ,. II
+chrM 203 T 2 ,. II
+chrM 204 A 2 ,. II
+chrM 205 G 2 ,. I6
+chrM 206 C 2 ,. II
+chrM 207 T 2 ,. I,
+chrM 208 C 2 ,. II
+chrM 209 A 2 ,. II
+chrM 210 T 2 ,. II
+chrM 211 A 2 ,. II
+chrM 212 A 2 ,. IE
+chrM 213 C 2 ,. IC
+chrM 214 A 2 ,. I;
+chrM 215 C 2 ,. II
+chrM 216 C 2 ,$. II
+chrM 217 T 1 . I
+chrM 218 T 1 . I
+chrM 219 G 1 T I
+chrM 220 C 1 . I
+chrM 221 T 1 . I
+chrM 222 C 1 . E
+chrM 223 A 1 . 4
+chrM 224 G 1 T 9
+chrM 225 C 1 . :
+chrM 226 C 1 . ?
+chrM 227 A 1 . .
+chrM 228 C 1 . C
+chrM 229 A 3 .^:,^:, %II
+chrM 230 C 3 .,, 8II
+chrM 231 C 3 .,, 9II
+chrM 232 C 3 .,, III
+chrM 233 C 3 .,, AI'
+chrM 234 C 3 .,, DI+
+chrM 235 A 3 .,, &I@
+chrM 236 C 3 .$,a +I$
+chrM 237 G 2 ,, II
+chrM 238 G 2 ,, II
+chrM 239 G 2 ,, II
+chrM 240 A 2 ,, II
+chrM 241 C 2 ,, I+
+chrM 242 A 2 ,, II
+chrM 243 C 2 ,, II
+chrM 244 A 3 ,,^:, II;
+chrM 245 G 3 ,,, II*
+chrM 246 C 3 ,,n II"
+chrM 247 A 3 ,,, III
+chrM 248 G 4 ,,,^:. IIII
+chrM 249 T 4 ,,,. II)I
+chrM 250 G 4 ,,,. II2I
+chrM 251 A 4 ,,,. II(I
+chrM 252 T 4 ,,,. II*I
+chrM 253 A 4 ,,,. II7I
+chrM 254 A 4 ,,,. II1I
+chrM 255 A 4 ,,,. II?I
+chrM 256 A 4 ,,,. II9I
+chrM 257 A 4 ,,,. II?I
+chrM 258 T 4 ,,,. II$I
+chrM 259 T 5 ,,,.^:. II&II
+chrM 260 A 5 ,,,.. II,II
+chrM 261 A 5 ,,,.. II/II
+chrM 262 G 5 ,,,.. II5II
+chrM 263 C 5 ,,a.. II%II
+chrM 264 T 5 ,$,$,.. II%II
+chrM 265 A 3 ,.. )II
+chrM 266 T 3 ,.. +II
+chrM 267 G 4 ,..^:. *III
+chrM 268 A 4 ,... EIII
+chrM 269 A 4 ,... =III
+chrM 270 C 4 a... ;III
+chrM 271 G 4 ,... ;III
+chrM 272 A 4 ,... 8@II
+chrM 273 A 4 ,... 1III
+chrM 274 A 4 ,... ICII
+chrM 275 G 4 ,... IIII
+chrM 276 T 4 ,... IIII
+chrM 277 T 4 ,... IIII
+chrM 278 C 4 ,... IIII
+chrM 279 G 4 ,$... IIII
+chrM 280 A 3 ... III
+chrM 281 C 3 ... GII
+chrM 282 T 3 ... III
+chrM 283 A 3 .$.. IFI
+chrM 284 A 3 ..^:, IAI
+chrM 285 G 3 .., ;II
+chrM 286 T 4 ..,^:. IIII
+chrM 287 C 4 ..,. II4I
+chrM 288 A 4 ..,. @III
+chrM 289 T 4 ..,. IIII
+chrM 290 A 4 ..,. @:II
+chrM 291 T 4 ..,. IIAI
+chrM 292 T 4 ..,. IIII
+chrM 293 A 4 ..,. 8;II
+chrM 294 A 4 .$.,. I<II
+chrM 295 A 3 .,. 4II
+chrM 296 T 3 .,. III
+chrM 297 A 3 .,. BII
+chrM 298 A 3 .,. CII
+chrM 299 G 3 .,. III
+chrM 300 G 3 .,. ;II
+chrM 301 G 3 .,. III
+chrM 302 T 3 .$,. III
+chrM 303 T 2 ,. II
+chrM 304 G 2 ,. II
+chrM 305 G 2 ,. II
+chrM 306 T 2 ,. II
+chrM 307 A 2 ,. II
+chrM 308 A 2 ,. II
+chrM 309 A 2 ,. II
+chrM 310 T 2 ,. II
+chrM 311 T 2 ,. II
+chrM 312 T 3 ,.^:. III
+chrM 313 C 3 ,.. III
+chrM 314 G 3 ,.. III
+chrM 315 T 3 ,.. III
+chrM 316 G 3 ,.. III
+chrM 317 C 3 ,.. III
+chrM 318 C 3 ,.. III
+chrM 319 A 3 ,$.. III
+chrM 320 G 2 .. II
+chrM 321 C 2 .$. II
+chrM 322 C 1 . I
+chrM 323 A 1 . I
+chrM 324 C 1 . I
+chrM 325 C 1 . I
+chrM 326 G 1 . I
+chrM 327 C 1 . I
+chrM 328 G 1 . I
+chrM 329 G 1 . I
+chrM 330 T 1 . I
+chrM 331 C 1 . I
+chrM 332 A 1 . I
+chrM 333 T 1 . I
+chrM 334 A 1 . I
+chrM 335 C 1 . I
+chrM 336 G 1 . I
+chrM 337 A 1 . I
+chrM 338 T 1 . I
+chrM 339 T 1 . I
+chrM 340 A 1 . I
+chrM 341 A 1 . D
+chrM 342 C 1 . I
+chrM 343 C 1 . I
+chrM 344 C 1 . I
+chrM 345 A 1 . I
+chrM 346 A 1 . ;
+chrM 347 A 1 .$ 7
+chrM 360 C 1 ^:. I
+chrM 361 G 1 . I
+chrM 362 G 1 . I
+chrM 363 C 1 . I
+chrM 364 G 1 . I
+chrM 365 T 1 . I
+chrM 366 A 1 . I
+chrM 367 A 1 . I
+chrM 368 A 1 . I
+chrM 369 G 1 . I
+chrM 370 C 1 . I
+chrM 371 G 1 . I
+chrM 372 T 1 . I
+chrM 373 G 1 . I
+chrM 374 T 1 . I
+chrM 375 C 1 . I
+chrM 376 A 1 . I
+chrM 377 A 1 . I
+chrM 378 A 1 . I
+chrM 379 G 1 . I
+chrM 380 A 1 . I
+chrM 381 C 1 T I
+chrM 382 T 1 . I
+chrM 383 A 1 . I
+chrM 384 A 1 . I
+chrM 385 T 1 . I
+chrM 386 A 1 G I
+chrM 387 C 1 . I
+chrM 388 C 1 . I
+chrM 389 A 2 .^:. II
+chrM 390 A 3 ..^:. III
+chrM 391 A 3 ... >II
+chrM 392 A 3 ... III
+chrM 393 T 3 ... III
+chrM 394 A 3 ... III
+chrM 395 A 3 .$.. III
+chrM 396 A 2 .. II
+chrM 397 G 2 .. II
+chrM 398 T 2 .. EI
+chrM 399 T 2 .. II
+chrM 400 A 3 ..^:. III
+chrM 401 A 3 ... III
+chrM 402 A 3 ... III
+chrM 403 A 3 ... III
+chrM 404 C 3 ... III
+chrM 405 C 3 ... III
+chrM 406 C 3 ... EII
+chrM 407 A 3 ... III
+chrM 408 G 3 ... III
+chrM 409 T 3 ... 0II
+chrM 410 T 3 ... III
+chrM 411 A 4 ...^:, IIII
+chrM 412 A 4 ..., FIII
+chrM 413 G 4 ..., IIIH
+chrM 414 C 4 ...a III2
+chrM 415 C 4 TTTt III7
+chrM 416 G 5 ...,^:, II?7:
+chrM 417 T 5 ...,, ;IIE@
+chrM 418 A 5 ...,, IIIII
+chrM 419 A 5 ...,, IIIII
+chrM 420 A 5 ...,, FIIII
+chrM 421 A 5 ...,, IIIII
+chrM 422 A 5 ...,, >IIII
+chrM 423 G 6 ...,,^:, HII/I,
+chrM 424 C 6 .$..a,, ;II-I:
+chrM 425 T 5 .$.,,, IIIIF
+chrM 426 A 5 .,,,^:, III@I
+chrM 427 C 5 .,,,, III$I
+chrM 428 A 5 .,,,, IIIII
+chrM 429 A 5 .,,,, IIII.
+chrM 430 C 5 .,,,a I%I5'
+chrM 431 C 5 .,,,, I(I5<
+chrM 432 A 5 .,,,, IIIII
+chrM 433 A 5 .,,,, 0IIII
+chrM 434 A 5 .,,,, =IIII
+chrM 435 G 5 .$,,,, EIIII
+chrM 436 T 4 ,,,, III5
+chrM 437 A 4 ,,,, IIII
+chrM 438 A 4 ,,,, IIII
+chrM 439 A 4 ,,,, IIII
+chrM 440 A 4 ,,,, IIIF
+chrM 441 T 6 ,,,,^:.^:. III;II
+chrM 442 A 6 ,,,,.. IIIIII
+chrM 443 G 6 ,,,,.. IIIIII
+chrM 444 A 6 ,,,,.. IIIIII
+chrM 445 C 6 ,,,,.. IIIIII
+chrM 446 T 6 ,$,,,.. IIIIII
+chrM 447 A 5 ,,,.. IIIII
+chrM 448 C 5 ,,,.. IIIII
+chrM 449 G 6 ,,,..^:, IIIII6
+chrM 450 A 6 ,,,.., IIIIII
+chrM 451 A 6 ,$,,.., IIIIII
+chrM 452 A 5 ,,.., IIIII
+chrM 453 G 5 ,,.., IIIII
+chrM 454 T 6 ,,..,^:, IIIIII
+chrM 455 G 6 ,,..,, IIIIII
+chrM 456 A 6 ,,..,, IIIIII
+chrM 457 C 6 ,,..,, IIIII=
+chrM 458 T 6 ,$,..,, IIIIII
+chrM 459 T 5 ,..,, IIIII
+chrM 460 T 5 ,..,, IIIII
+chrM 461 A 5 ,$..,, IIIII
+chrM 462 A 4 ..,, IIII
+chrM 463 T 4 ..,, IIIC
+chrM 464 A 4 ..,, IIII
+chrM 465 C 4 ..,, IIII
+chrM 466 C 4 ..,, IIII
+chrM 467 T 4 ..,, II>?
+chrM 468 C 4 ..,, IIII
+chrM 469 T 4 ..,, IIIG
+chrM 470 G 4 ..,, %III
+chrM 471 A 4 ..,, 4;II
+chrM 472 C 4 ..,, II3I
+chrM 473 T 4 ..,, IIII
+chrM 474 A 4 ..,, ;III
+chrM 475 C 4 ..,, IIII
+chrM 476 A 4 .$.$,, 32II
+chrM 477 C 2 ,, II
+chrM 478 G 2 ,, II
+chrM 479 A 2 ,, II
+chrM 480 T 3 ,,^:. III
+chrM 481 A 3 ,,. III
+chrM 482 G 3 ,,. III
+chrM 483 C 4 ,,.^:, IIIE
+chrM 484 T 4 ,$,., III9
+chrM 485 A 3 ,., III
+chrM 486 A 3 ,., III
+chrM 487 G 3 ,., III
+chrM 488 A 3 ,., III
+chrM 489 C 3 ,$., III
+chrM 490 C 2 ., II
+chrM 491 C 2 ., II
+chrM 492 A 2 ., II
+chrM 493 A 2 ., II
+chrM 494 A 2 ., II
+chrM 495 C 2 ., II
+chrM 496 T 2 ., I2
+chrM 497 G 2 ., II
+chrM 498 G 2 ., II
+chrM 499 G 2 ., II
+chrM 500 A 2 ., II
+chrM 501 T 2 ., II
+chrM 502 T 2 ., II
+chrM 503 A 2 ., II
+chrM 504 G 2 ., II
+chrM 505 A 2 ., GI
+chrM 506 T 2 ., II
+chrM 507 A 2 ., II
+chrM 508 C 2 ., II
+chrM 509 C 2 ., II
+chrM 510 C 3 .,^:. III
+chrM 511 C 3 .,. III
+chrM 512 A 3 .,. 6II
+chrM 513 C 3 .,. III
+chrM 514 T 3 .,. III
+chrM 515 A 3 .$,. III
+chrM 516 T 2 ,. II
+chrM 517 G 2 ,. II
+chrM 518 C 3 ,$.^:. III
+chrM 519 T 2 .. II
+chrM 520 T 3 ..^:, III
+chrM 521 A 3 .., III
+chrM 522 G 3 .., II,
+chrM 523 C 3 .., III
+chrM 524 C 3 .., II7
+chrM 525 C 3 .., III
+chrM 526 T 3 .., II?
+chrM 527 A 3 .., III
+chrM 528 A 3 .., III
+chrM 529 A 3 .., FII
+chrM 530 C 3 .., II+
+chrM 531 T 3 .., III
+chrM 532 A 3 .., :II
+chrM 533 A 3 .., DGI
+chrM 534 A 3 .., III
+chrM 535 A 3 .., ?CI
+chrM 536 T 3 .., III
+chrM 537 A 3 .., 9II
+chrM 538 G 3 .., III
+chrM 539 C 3 .., III
+chrM 540 T 3 .., III
+chrM 541 T 3 .., III
+chrM 542 A 4 ..,^:. IIII
+chrM 543 C 4 ..,. IIII
+chrM 544 C 4 ..,. IIII
+chrM 545 A 4 N$.,. "III
+chrM 546 C 3 .,. III
+chrM 547 A 3 .,. DII
+chrM 548 A 3 .,. EII
+chrM 549 C 3 .,. III
+chrM 550 A 3 .,. III
+chrM 551 A 3 .,. 6II
+chrM 552 A 3 .,. GII
+chrM 553 G 3 .$,. ?II
+chrM 554 C 2 ,. I<
+chrM 555 T 2 ,$. II
+chrM 556 A 2 .^:. II
+chrM 557 T 2 .. II
+chrM 558 T 2 .. II
+chrM 559 C 2 .. II
+chrM 560 G 2 .. II
+chrM 561 C 2 .. II
+chrM 562 C 2 .. II
+chrM 563 A 2 .. CI
+chrM 564 G 2 .. II
+chrM 565 A 2 .. GI
+chrM 566 G 2 .. II
+chrM 567 T 2 .. /I
+chrM 568 A 2 .. DI
+chrM 569 C 2 .. II
+chrM 570 T 2 .. II
+chrM 571 A 2 .. II
+chrM 572 C 2 .. FI
+chrM 573 T 2 .. 9I
+chrM 574 A 2 .. II
+chrM 575 G 2 .. II
+chrM 576 C 2 .. II
+chrM 577 A 3 .$.^:. III
+chrM 578 A 2 .. II
+chrM 579 C 2 .. II
+chrM 580 A 3 ..^:, III
+chrM 581 G 3 .., III
+chrM 582 C 3 .., II?
+chrM 583 C 3 ..a II-
+chrM 584 T 3 .., IIH
+chrM 585 A 3 .., III
+chrM 586 A 3 .., III
+chrM 587 A 4 ..,^:, IIII
+chrM 588 A 4 ..,, IIII
+chrM 589 C 4 ..,, IIII
+chrM 590 T 4 ..,, II.5
+chrM 591 C 4 .$.,, II<I
+chrM 592 A 3 .,, III
+chrM 593 A 3 .,, III
+chrM 594 A 3 .,, III
+chrM 595 G 3 .,, III
+chrM 596 G 3 .,, III
+chrM 597 A 3 .,, :EI
+chrM 598 C 3 .,, III
+chrM 599 T 4 .,,^:. II@I
+chrM 600 T 4 .,,. IIII
+chrM 601 G 4 .,,. IIII
+chrM 602 G 4 .,,. IIII
+chrM 603 C 4 .,,. IIII
+chrM 604 G 4 .,,. IIII
+chrM 605 G 4 .,,. IIII
+chrM 606 T 4 .,,. 5III
+chrM 607 G 4 .,,. IIII
+chrM 608 C 4 .,,. *III
+chrM 609 T 5 .,,.^:, ?IIII
+chrM 610 T 5 .,,., IIII8
+chrM 611 T 5 .,,., IIIII
+chrM 612 A 5 T$,,., 3IIII
+chrM 613 C 4 ,,., III)
+chrM 614 A 4 ,,., IIII
+chrM 615 T 4 ,$,., IIII
+chrM 616 C 3 ,., III
+chrM 617 C 3 ,., III
+chrM 618 C 3 ,., III
+chrM 619 T 3 ,., IF9
+chrM 620 C 3 ,., II7
+chrM 621 T 3 ,., III
+chrM 622 A 3 ,$., I7I
+chrM 623 G 2 ., II
+chrM 624 A 2 ., 9I
+chrM 625 G 2 ., II
+chrM 626 G 2 ., II
+chrM 627 A 2 ., 2I
+chrM 628 G 2 ., II
+chrM 629 C 2 ., II
+chrM 630 C 2 ., II
+chrM 631 T 2 ., II
+chrM 632 G 2 ., II
+chrM 633 T 2 ., II
+chrM 634 T 2 .$, II
+chrM 635 C 1 , I
+chrM 636 C 1 , I
+chrM 637 A 1 , I
+chrM 638 T 1 , I
+chrM 639 A 1 , I
+chrM 640 A 1 , I
+chrM 641 T 1 , I
+chrM 642 C 1 , I
+chrM 643 G 1 , I
+chrM 644 A 1 ,$ I
+chrM 646 A 1 ^:. I
+chrM 647 A 1 . I
+chrM 648 A 1 . I
+chrM 649 C 2 .^:, II
+chrM 650 C 2 ., II
+chrM 651 C 2 ., II
+chrM 652 C 3 .,^:, II)
+chrM 653 G 3 .,, II2
+chrM 654 A 3 .,, III
+chrM 655 T 4 .,,^:. II*I
+chrM 656 A 4 .,,. IIII
+chrM 657 A 4 .,,. IIII
+chrM 658 A 4 .,,. IIII
+chrM 659 C 4 .,,. IIII
+chrM 660 C 4 .,,. IIII
+chrM 661 C 4 .,,. IIII
+chrM 662 C 4 .,,. IIFI
+chrM 663 A 4 .,,. =IDI
+chrM 664 C 4 .,,. II6I
+chrM 665 C 5 .,,.^:, IIIII
+chrM 666 A 5 .,,., BIIII
+chrM 667 T 5 .,,., II5I+
+chrM 668 C 5 .,,., IIIII
+chrM 669 C 5 .,,., IIIII
+chrM 670 C 5 .,a., II.II
+chrM 671 T 5 .,,., IIIIA
+chrM 672 T 6 .,,.,^:. FI9I.I
+chrM 673 G 6 .,,.,. IIIIII
+chrM 674 C 6 .,,.,. IIIIII
+chrM 675 T 6 .,,.,. IIIIII
+chrM 676 A 6 .,,.,. ,IIEII
+chrM 677 A 7 .,,.,.^:. 3II;III
+chrM 678 T 7 .,,.,.. IIIIDII
+chrM 679 T 7 .,,.,.. CIIIIII
+chrM 680 C 7 .,,.,.. IIIIIII
+chrM 681 A 7 .$,,.,.. 9IIIIII
+chrM 682 G 6 ,,.,.. II$III
+chrM 683 C 6 ,,.,.. IIIIII
+chrM 684 C 6 ,$,.,.. IIIIII
+chrM 685 T 5 ,.,.. IIIII
+chrM 686 A 5 ,.,.. IIIII
+chrM 687 T 5 ,$.,.. IIIII
+chrM 688 A 4 .,.. IIII
+chrM 689 T 4 .,.. IIII
+chrM 690 A 4 .$,.. IIII
+chrM 691 C 3 ,.. III
+chrM 692 C 3 ,.. III
+chrM 693 G 4 ,..^:, IIII
+chrM 694 C 4 ,.., IIII
+chrM 695 C 4 ,.., IIII
+chrM 696 A 4 ,.., IIII
+chrM 697 T 4 ,.., IIII
+chrM 698 C 4 ,.., IIII
+chrM 699 T 4 ,.., IIII
+chrM 700 T 4 ,$.., IIII
+chrM 701 C 3 .., III
+chrM 702 A 3 .., III
+chrM 703 G 3 .., 2II
+chrM 704 C 3 .., III
+chrM 705 A 3 N., "II
+chrM 706 A 3 .., I5I
+chrM 707 A 3 .$., GII
+chrM 708 C 2 ., II
+chrM 709 C 2 ., II
+chrM 710 C 2 ., II
+chrM 711 T 2 ., II
+chrM 712 A 2 .$, II
+chrM 713 A 1 , I
+chrM 714 A 1 , I
+chrM 715 C 1 , I
+chrM 716 A 1 , I
+chrM 717 A 1 , I
+chrM 718 G 1 , I
+chrM 719 G 2 ,^:, I&
+chrM 720 T 2 ,g I$
+chrM 721 A 2 ,, I3
+chrM 722 C 2 ,, I$
+chrM 723 C 2 ,t I&
+chrM 724 G 2 ,, I)
+chrM 725 A 2 ,, II
+chrM 726 A 3 ,,^:. III
+chrM 727 G 3 ,,. III
+chrM 728 T 3 ,$,. III
+chrM 729 A 2 ,. II
+chrM 730 A 2 n. "I
+chrM 731 G 2 ,. II
+chrM 732 C 3 a.^:. $II
+chrM 733 A 3 ,.. III
+chrM 734 C 3 ,.. %II
+chrM 735 A 3 ,.. III
+chrM 736 A 3 ,.. *II
+chrM 737 A 3 ,.. III
+chrM 738 T 3 ,.. III
+chrM 739 A 3 ,.. III
+chrM 740 T 3 ,.. III
+chrM 741 C 3 ,.. III
+chrM 742 C 3 ,.. III
+chrM 743 A 3 ,.. III
+chrM 744 A 3 ,.. III
+chrM 745 C 3 ,.. III
+chrM 746 A 3 ,.. IIE
+chrM 747 T 3 ,.. III
+chrM 748 A 3 ,.. III
+chrM 749 A 3 ,.. III
+chrM 750 A 3 ,.. III
+chrM 751 A 3 ,.. IAI
+chrM 752 A 3 ,.. III
+chrM 753 C 3 ,.. III
+chrM 754 G 3 ,$.. III
+chrM 755 T 2 .. II
+chrM 756 T 3 ..^:, III
+chrM 757 A 3 .., III
+chrM 758 G 3 .., III
+chrM 759 G 3 .., III
+chrM 760 T 3 .., =II
+chrM 761 C 3 .$., IID
+chrM 762 A 2 ., =I
+chrM 763 A 2 ., EI
+chrM 764 G 2 ., II
+chrM 765 G 2 ., II
+chrM 766 T 2 ., :I
+chrM 767 G 3 .$,^:, III
+chrM 768 T 2 ,, I>
+chrM 769 A 3 ,,^:, III
+chrM 770 G 3 ,,, III
+chrM 771 C 3 ,,, IHI
+chrM 772 C 3 ,a, I)/
+chrM 773 C 3 ,,, I7I
+chrM 774 A 4 ,,,^:. II:I
+chrM 775 T 4 ,,,. IH.I
+chrM 776 G 4 ,,,. IIII
+chrM 777 G 4 ,,,. IIII
+chrM 778 G 4 ,,,. IIII
+chrM 779 A 4 ,,,. IIAI
+chrM 780 T 4 ,,,. IIGI
+chrM 781 G 4 ,,,. IIII
+chrM 782 G 4 ,,,. IIII
+chrM 783 A 4 ,,,. IIII
+chrM 784 G 4 ,,,. IIII
+chrM 785 A 4 ,,,. IIII
+chrM 786 G 4 ,,,. IIII
+chrM 787 A 4 ,,,. IIII
+chrM 788 A 4 ,,,. IIII
+chrM 789 A 4 ,,,. IIII
+chrM 790 T 5 ,,,.^:. IIIII
+chrM 791 G 5 ,$,,.. IIIII
+chrM 792 G 4 ,,.. IIII
+chrM 793 G 4 ,,.. IIII
+chrM 794 C 4 ,,.. IIII
+chrM 795 T 4 ,,.. IIII
+chrM 796 A 4 ,,.. IIII
+chrM 797 C 4 ,,.. IIII
+chrM 798 A 4 ,,.. IIII
+chrM 799 T 4 ,,.. IIII
+chrM 800 T 4 ,,.. IIII
+chrM 801 T 4 ,,.. IIII
+chrM 802 T 4 ,$,.. IIII
+chrM 803 C 3 ,.. III
+chrM 804 T 3 ,$.. III
+chrM 805 A 2 .. II
+chrM 806 C 3 ..^:. III
+chrM 807 C 3 ... III
+chrM 808 C 3 ... III
+chrM 809 T 3 .$.. III
+chrM 810 A 3 ..^:, III
+chrM 811 A 3 .., III
+chrM 812 G 3 .., II7
+chrM 813 A 3 .., III
+chrM 814 A 3 .., III
+chrM 815 C 3 .., III
+chrM 816 A 3 .., III
+chrM 817 A 3 .., III
+chrM 818 G 3 .., III
+chrM 819 A 3 .., III
+chrM 820 A 3 .., &II
+chrM 821 C 3 .., III
+chrM 822 T 3 .., III
+chrM 823 T 3 ..n II"
+chrM 824 T 3 .., III
+chrM 825 A 3 .$., III
+chrM 826 A 3 .,^:. III
+chrM 827 C 3 .,. III
+chrM 828 C 3 .,. III
+chrM 829 C 4 .,.^:, IIII
+chrM 830 G 4 .,., IIII
+chrM 831 G 4 .,., IIII
+chrM 832 A 4 .,., IIII
+chrM 833 C 4 .,., IIII
+chrM 834 G 4 .,., IIII
+chrM 835 A 4 .,., IIII
+chrM 836 A 4 .,., 8III
+chrM 837 A 4 .,., IIII
+chrM 838 G 4 .,., IIII
+chrM 839 T 5 .,.,^:, 4:IIG
+chrM 840 C 5 .,.,, IIIII
+chrM 841 T 5 .$,.,, IIIII
+chrM 842 C 4 ,.,, IIII
+chrM 843 C 4 ,.,, IIII
+chrM 844 A 4 ,.,, IIII
+chrM 845 T 4 ,$.,, IIII
+chrM 846 G 3 .,, @II
+chrM 847 A 3 .,, III
+chrM 848 A 3 .,, III
+chrM 849 A 3 .,, III
+chrM 850 C 3 .,, III
+chrM 851 T 3 .,, III
+chrM 852 G 3 .,, III
+chrM 853 G 3 .,, III
+chrM 854 A 3 .,, EII
+chrM 855 G 3 .,, DII
+chrM 856 A 3 .,, III
+chrM 857 C 3 .,, III
+chrM 858 T 4 .,,^:, IIIA
+chrM 859 A 4 .,,, @III
+chrM 860 A 4 .,,, IIII
+chrM 861 A 4 .$,,, EIII
+chrM 862 G 3 ,,, III
+chrM 863 G 3 ,,, III
+chrM 864 A 3 ,$,, III
+chrM 865 G 2 ,, II
+chrM 866 G 2 ,, II
+chrM 867 A 2 ,, II
+chrM 868 T 2 ,, II
+chrM 869 T 2 ,, II
+chrM 870 T 2 ,, II
+chrM 871 A 2 ,, II
+chrM 872 G 2 ,, II
+chrM 873 C 2 ,, II
+chrM 874 A 2 ,$, II
+chrM 875 G 1 , I
+chrM 876 T 1 , I
+chrM 877 A 1 , I
+chrM 878 A 1 , I
+chrM 879 A 1 , I
+chrM 880 T 1 , I
+chrM 881 T 1 , I
+chrM 882 A 1 , I
+chrM 883 A 1 , I
+chrM 884 G 1 , I
+chrM 885 A 1 , I
+chrM 886 A 1 , I
+chrM 887 T 1 , (
+chrM 888 A 1 , I
+chrM 889 G 1 , I
+chrM 890 A 1 , I
+chrM 891 G 1 , I
+chrM 892 A 1 , I
+chrM 893 G 1 ,$ I
+chrM 898 A 1 ^:, I
+chrM 899 T 2 ,^:. /I
+chrM 900 T 2 ,. 7I
+chrM 901 G 2 ,. CI
+chrM 902 A 2 ,. II
+chrM 903 A 2 ,. II
+chrM 904 T 2 ,. II
+chrM 905 C 3 ,.^:, III
+chrM 906 A 3 ,., III
+chrM 907 G 3 ,., III
+chrM 908 G 3 ,., III
+chrM 909 C 3 ,., III
+chrM 910 C 3 ,., III
+chrM 911 A 4 ,.,^:, IIII
+chrM 912 T 4 ,.,, IIEG
+chrM 913 G 4 ,.,, III:
+chrM 914 A 4 ,.,, IIII
+chrM 915 A 4 ,.,, IIII
+chrM 916 G 4 ,.,, III5
+chrM 917 C 4 ,.,, III5
+chrM 918 G 4 ,.,, IIII
+chrM 919 C 4 ,.,, III<
+chrM 920 G 4 ,.,, IIII
+chrM 921 C 4 ,.,, IIII
+chrM 922 A 4 ,.,, IIII
+chrM 923 C 4 ,.,, III8
+chrM 924 A 4 ,.,, IFII
+chrM 925 C 4 ,.,, IIII
+chrM 926 A 4 ,.,, IIII
+chrM 927 C 4 ,.,, IIII
+chrM 928 C 5 ,.,,^:, IIII:
+chrM 929 G 5 ,.,,, IIIE:
+chrM 930 C 5 ,.,,, IIIII
+chrM 931 C 5 ,.,,, IIIIF
+chrM 932 C 5 ,.,,, IIIIC
+chrM 933 G 5 ,$.,,, I?II:
+chrM 934 T 4 .$,,, 4II>
+chrM 935 C 3 ,,, III
+chrM 936 A 3 ,,, III
+chrM 937 C 3 ,,, II1
+chrM 938 C 3 ,,, III
+chrM 939 C 3 ,,, III
+chrM 940 T 3 ,$,, III
+chrM 941 C 2 ,, II
+chrM 942 C 2 ,, I'
+chrM 943 T 2 ,, II
+chrM 944 T 2 ,, II
+chrM 945 A 2 ,, II
+chrM 946 A 2 ,$, II
+chrM 947 A 1 , I
+chrM 948 T 1 , I
+chrM 949 A 1 , I
+chrM 950 T 1 , I
+chrM 951 C 1 , I
+chrM 952 A 1 , I
+chrM 953 C 1 , I
+chrM 954 A 1 , I
+chrM 955 A 2 ,^:. II
+chrM 956 A 2 ,. II
+chrM 957 T 2 ,. II
+chrM 958 C 3 ,.^:. III
+chrM 959 A 3 ,.. III
+chrM 960 T 3 ,.. III
+chrM 961 A 3 ,.. III
+chrM 962 A 3 ,.. III
+chrM 963 C 4 ,$..^:. IIII
+chrM 964 A 3 ... I(;
+chrM 965 T 3 ... III
+chrM 966 A 4 ...^:. IIII
+chrM 967 A 4 .... IIII
+chrM 968 C 4 .... IEII
+chrM 969 A 4 .... IIII
+chrM 970 T 4 .... IIII
+chrM 971 A 4 .... IIII
+chrM 972 A 4 .... IIII
+chrM 973 A 4 .... II0I
+chrM 974 A 5 ....^:. IIIII
+chrM 975 C 5 ..... IIIII
+chrM 976 C 5 ..... IIIII
+chrM 977 G 5 ..... IIIII
+chrM 978 T 5 ..... IIIII
+chrM 979 G 5 ..... I0III
+chrM 980 A 5 ..... IIII4
+chrM 981 C 5 ..... IIIII
+chrM 982 C 5 ..... IIIII
+chrM 983 C 5 ..... IIIII
+chrM 984 A 5 ..... -IGII
+chrM 985 A 5 ..... 4GIII
+chrM 986 A 5 ..... BDGII
+chrM 987 C 5 ..... IDIII
+chrM 988 A 5 ..... @<III
+chrM 989 T 5 ..... IIIII
+chrM 990 A 5 .$.... I@III
+chrM 991 T 4 .... IICI
+chrM 992 G 4 T... )III
+chrM 993 A 4 .$... ?ICI
+chrM 994 A 3 ... III
+chrM 995 A 3 ... III
+chrM 996 G 3 ... III
+chrM 997 G 3 ... III
+chrM 998 A 3 .$.. 4II
+chrM 999 G 3 ..^:. III
+chrM 1000 A 3 ... III
+chrM 1001 C 3 .$.. III
+chrM 1002 A 2 .. II
+chrM 1003 A 2 .. II
+chrM 1004 G 2 .. II
+chrM 1005 T 2 .. II
+chrM 1006 C 2 .. II
+chrM 1007 G 2 .. CI
+chrM 1008 T 2 .. II
+chrM 1009 A 2 .$. II
+chrM 1010 A 1 . I
+chrM 1011 C 1 . I
+chrM 1012 A 1 . I
+chrM 1013 A 1 . I
+chrM 1014 G 1 . I
+chrM 1015 G 1 . I
+chrM 1016 T 1 . I
+chrM 1017 A 1 . I
+chrM 1018 A 1 . I
+chrM 1019 G 1 . I
+chrM 1020 T 1 . I
+chrM 1021 A 1 . I
+chrM 1022 T 1 . I
+chrM 1023 A 1 . I
+chrM 1024 C 1 . I
+chrM 1025 C 1 . I
+chrM 1026 G 1 . I
+chrM 1027 G 1 . I
+chrM 1028 A 1 . I
+chrM 1029 A 1 . I
+chrM 1030 G 1 . I
+chrM 1031 G 2 .^:. II
+chrM 1032 T 2 .. EI
+chrM 1033 G 2 .. II
+chrM 1034 T 2 .$. II
+chrM 1035 A 2 .^:. II
+chrM 1036 C 2 .. II
+chrM 1037 T 2 .. II
+chrM 1038 T 2 .. II
+chrM 1039 G 2 .. II
+chrM 1040 G 2 .. II
+chrM 1041 A 2 .. II
+chrM 1042 T 2 .. II
+chrM 1043 A 3 ..^:, III
+chrM 1044 A 3 .., III
+chrM 1045 C 3 .., II7
+chrM 1046 C 3 .., II-
+chrM 1047 A 3 .., III
+chrM 1048 A 3 .., III
+chrM 1049 A 3 .., III
+chrM 1050 G 3 .., III
+chrM 1051 T 3 .., III
+chrM 1052 G 3 .., III
+chrM 1053 T 3 .., GII
+chrM 1054 A 3 .., III
+chrM 1055 G 3 .., :II
+chrM 1056 C 3 ..a HI%
+chrM 1057 T 3 .., III
+chrM 1058 T 3 .., III
+chrM 1059 A 3 .., BII
+chrM 1060 A 3 .., GII
+chrM 1061 A 3 .., HII
+chrM 1062 C 3 .., III
+chrM 1063 A 3 .., DII
+chrM 1064 A 3 .., BII
+chrM 1065 A 3 .., 1II
+chrM 1066 G 3 .$., &II
+chrM 1067 C 2 ., II
+chrM 1068 A 2 ., II
+chrM 1069 T 2 ., II
+chrM 1070 C 2 .$, II
+chrM 1071 C 1 , I
+chrM 1072 A 1 , I
+chrM 1073 G 1 , I
+chrM 1074 C 1 , I
+chrM 1075 T 1 , I
+chrM 1076 T 1 , I
+chrM 1077 A 1 , I
+chrM 1078 C 1 ,$ I
+chrM 1090 T 1 ^:, I
+chrM 1091 T 1 , I
+chrM 1092 C 1 n "
+chrM 1093 A 1 , I
+chrM 1094 C 1 , I
+chrM 1095 T 1 , 7
+chrM 1096 C 1 a B
+chrM 1097 A 1 , I
+chrM 1098 A 1 , I
+chrM 1099 A 1 , I
+chrM 1100 A 1 , I
+chrM 1101 T 1 , I
+chrM 1102 G 2 ,^:, (I
+chrM 1103 A 2 ,, II
+chrM 1104 A 2 ,, I+
+chrM 1105 C 2 ,, .I
+chrM 1106 A 2 ,, 8I
diff -r ba2412c2a4d9 -r adff03258b45 tool_conf.xml.sample
--- a/tool_conf.xml.sample Wed Sep 02 13:36:16 2009 -0400
+++ b/tool_conf.xml.sample Fri Sep 04 10:23:37 2009 -0400
@@ -339,5 +339,6 @@
<tool file="samtools/sam_to_bam.xml" />
<tool file="samtools/sam_merge.xml" />
<tool file="samtools/sam_pileup.xml" />
+ <tool file="samtools/pileup_parser.xml" />
</section>
</toolbox>
diff -r ba2412c2a4d9 -r adff03258b45 tools/samtools/pileup_parser.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/samtools/pileup_parser.pl Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,98 @@
+#! /usr/bin/perl -w
+
+use strict;
+
+die "Usage: pileup_parser.pl <in_file> <ref_base_column> <read_bases_column> <base_quality_column> <coverage column> <qv cutoff> <coverage cutoff> <SNPs only?> <output bed?> <coord_column> <out_file>\n" unless @ARGV == 11;
+
+my $in_file = $ARGV[0];
+my $ref_base_column = $ARGV[1]-1; # 1 based
+my $read_bases_column = $ARGV[2]-1; # 1 based
+my $base_quality_column = $ARGV[3]-1; # 1 based
+my $cvrg_column = $ARGV[4]-1; # 1 based
+my $quality_cutoff = $ARGV[5]; # phred scale integer
+my $cvrg_cutoff = $ARGV[6]; # unsigned integer
+my $SNPs_only = $ARGV[7]; # set to "Yes" to print only positions with SNPs; set to "No" to pring everything
+my $bed = $ARGV[8]; #set to "Yes" to convert coordinates to bed format (0-based start, 1-based end); set to "No" to leave as is
+my $coord_column = $ARGV[9]-1; #1 based
+my $out_file = $ARGV[10];
+
+my $invalid_line_counter = 0;
+my $first_skipped_line = "";
+my %SNPs = ('A',0,'T',0,'C',0,'G',0);
+my $above_qv_bases = 0;
+my $SNPs_exist = 0;
+my $out_string = "";
+
+open (IN, "<$in_file") or die "Cannot open $in_file $!\n";
+open (OUT, ">$out_file") or die "Cannot open $out_file $!\n";
+
+while (<IN>) {
+ chop;
+ my @fields = split /\t/;
+ next if $fields[ $ref_base_column ] eq "*"; # skip indel lines
+ next if $fields[ $cvrg_column ] < $cvrg_cutoff; # skip low coverage lines
+ my $read_bases = $fields[ $read_bases_column ];
+ my $base_quality = $fields[ $base_quality_column ];
+
+ if ($read_bases =~ m/[\$\^\+-]/) {
+ $read_bases =~ s/\$//g; #removing end of the read segment mark
+ $read_bases =~ s/\^.//g; #removing the start of the read segement mark
+ while ($read_bases =~ m/[\+-]{1}(\d+)/g) {
+ my $indel_len = $1;
+ $read_bases =~ s/[\+-]{1}$indel_len.{$indel_len}//; # remove indel info from read base field
+ }
+ }
+ if ( length($read_bases) != length($base_quality) ) {
+
+ $first_skipped_line = $_ if $invalid_line_counter == 0;
+ ++$invalid_line_counter;
+ }
+ # after removing read block and indel data the length of read_base
+ # field should identical to the length of base_quality field
+
+ my @bases = split //, $read_bases;
+ my @qv = split //, $base_quality;
+
+ for my $base ( 0 .. @bases - 1 ) {
+ if ( ord( $qv[ $base ] ) - 33 >= $quality_cutoff )
+ {
+ ++$above_qv_bases;
+
+ if ( $bases[ $base ] =~ m/[ATGC]/i )
+ {
+ $SNPs_exist = 1;
+ $SNPs{ uc( $bases[ $base ] ) } += 1;
+ }
+ }
+ }
+
+ if ($bed eq "Yes") {
+ my $start = $fields[ $coord_column ] - 1;
+ my $end = $fields[ $coord_column ];
+ $fields[ $coord_column ] = "$start\t$end";
+ }
+
+ $out_string = join("\t", @fields); # \t$read_bases\t$base_quality";
+ foreach my $SNP (sort keys %SNPs) {
+ $out_string .= "\t$SNPs{$SNP}";
+ }
+ $out_string .= "\t$above_qv_bases\n";
+
+ if ( $SNPs_only eq "Yes" ) {
+ print OUT $out_string if $SNPs_exist == 1;
+ } else {
+ print OUT $out_string;
+ }
+
+
+ %SNPs = ();
+ %SNPs = ('A',0,'T',0,'C',0,'G',0);
+ $above_qv_bases = 0;
+ $SNPs_exist = 0;
+
+
+}
+
+print STDERR "Could not parse $invalid_line_counter line(s) beginning with: $first_skipped_line\n" if $invalid_line_counter > 0;
+close IN;
+close OUT;
\ No newline at end of file
diff -r ba2412c2a4d9 -r adff03258b45 tools/samtools/pileup_parser.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/samtools/pileup_parser.xml Fri Sep 04 10:23:37 2009 -0400
@@ -0,0 +1,286 @@
+<tool id="pileup_parser" name="Parse pileup">
+ <description>to find variants</description>
+ <command interpreter="perl">
+ #if $pileup_type.type_select == "six": #pileup_parser.pl $input "3" "5" "6" "4" $qv_cutoff $cvrg_cutoff $snps_only $interval "2" $out_file1
+ #elif $pileup_type.type_select == "ten": #pileup_parser.pl $input "3" "9" "10" "8" $qv_cutoff $cvrg_cutoff $snps_only $interval "2" $out_file1
+ #elif $pileup_type.type_select == "manual": #pileup_parser.pl $input $pileup_type.ref_base_column $pileup_type.read_bases_column $pileup_type.read_qv_column $pileup_type.cvrg_column $qv_cutoff $cvrg_cutoff $snps_only $interval $pileup_type.coord_column $out_file1
+ #end if
+ </command>
+ <inputs>
+ <param name="input" type="data" format="tabular" label="Select dataset"/>
+ <conditional name="pileup_type">
+ <param name="type_select" type="select" label="which contains" help="See "Types of pileup datasets" below for examples">
+ <option value="six" selected="true">Pileup with six columns (simple)</option>
+ <option value="ten">Pileup with ten columns (with consensus)</option>
+ <option value="manual">Set columns manually</option>
+ </param>
+ <when value="manual">
+ <param name="ref_base_column" label="Select column with reference base" type="data_column" numerical="false" data_ref="input" />
+ <param name="read_bases_column" label="Select column with read bases" type="data_column" numerical="false" data_ref="input" help="something like this: ..,a.."/>
+ <param name="read_qv_column" label="Select column with base qualities" type="data_column" numerical="false" data_ref="input" help="something like this: IIIGIAI"/>
+ <param name="cvrg_column" label="Select column with coverage" type="data_column" numerical="true" data_ref="input" />
+ <param name="coord_column" label="Select coordinate column" type="data_column" numerical="true" data_ref="input" />
+ </when>
+ <when value="six">
+ </when>
+ <when value="ten">
+ </when>
+ </conditional>
+ <param name="qv_cutoff" label="Do not consider read bases with quality lower than" type="integer" value="20" help="No variants with quality below this value will be reported"/>
+ <param name="cvrg_cutoff" label="Do not report positions with coverage lower than" type="integer" value="3" help="Pileup lines with coverage lower than this value will be skipped"/>
+ <param name="snps_only" label="Only report variants?" type="select" help="See "Examples 1 and 2" below for explanation">
+ <option value="No">No</option>
+ <option value="Yes" selected="true">Yes</option>
+ </param>
+ <param name="interval" label="Convert coordinates to intervals?" type="select" help="See "Output format" below for explanation">
+ <option value="No" selected="true">No</option>
+ <option value="Yes">Yes</option>
+ </param>
+
+ </inputs>
+ <outputs>
+ <data format="tabular" name="out_file1">
+ <change_format>
+ <when input="interval" value="Yes" format="interval" />
+ </change_format>
+ </data>
+ </outputs>
+ <tests>
+ <test>
+ <param name="input" value="pileup_parser.6col.pileup"/>
+ <output name="out_file1" file="pileup_parser.6col.20-3-yes-yes.pileup.out"/>
+ <param name="type_select" value="six"/>
+ <param name="qv_cutoff" value="20" />
+ <param name="cvrg_cutoff" value="3" />
+ <param name="snps_only" value="Yes"/>
+ <param name="interval" value="Yes" />
+ </test>
+ <test>
+ <param name="input" value="pileup_parser.6col.pileup"/>
+ <output name="out_file1" file="pileup_parser.6col.20-3-yes-no.pileup.out"/>
+ <param name="type_select" value="six"/>
+ <param name="qv_cutoff" value="20" />
+ <param name="cvrg_cutoff" value="3" />
+ <param name="snps_only" value="Yes"/>
+ <param name="interval" value="No" />
+ </test>
+ <test>
+ <param name="input" value="pileup_parser.6col.pileup"/>
+ <output name="out_file1" file="pileup_parser.6col.20-3-no-no.pileup.out"/>
+ <param name="type_select" value="six"/>
+ <param name="qv_cutoff" value="20" />
+ <param name="cvrg_cutoff" value="3" />
+ <param name="snps_only" value="No"/>
+ <param name="interval" value="No" />
+ </test>
+ <test>
+ <param name="input" value="pileup_parser.10col.pileup"/>
+ <output name="out_file1" file="pileup_parser.10col.20-3-yes-yes.pileup.out"/>
+ <param name="type_select" value="ten"/>
+ <param name="qv_cutoff" value="20" />
+ <param name="cvrg_cutoff" value="3" />
+ <param name="snps_only" value="Yes"/>
+ <param name="interval" value="Yes" />
+ </test>
+ <test>
+ <param name="input" value="pileup_parser.10col.pileup"/>
+ <output name="out_file1" file="pileup_parser.10col.20-3-yes-yes.pileup.out"/>
+ <param name="type_select" value="manual"/>
+ <param name="ref_base_column" value="3"/>
+ <param name="read_bases_column" value="9"/>
+ <param name="read_qv_column" value="10"/>
+ <param name="cvrg_column" value="8"/>
+ <param name="coord_column" value="2"/>
+ <param name="qv_cutoff" value="20" />
+ <param name="cvrg_cutoff" value="3" />
+ <param name="snps_only" value="Yes"/>
+ <param name="interval" value="Yes" />
+ </test>
+ </tests>
+<help>
+
+**What is does**
+
+Allows to find sequence variants and/or sites covered by specified number of reads with bases above a set quality threshold. The tool works on six and ten column pileup formats produced with *samtools pileup* command. However, it also allows you to specify columns in the input file manually. The tool assumes the following:
+
+- the quality scores follow phred33 convention, where input qualities are ASCII characters equal to the Phred quality plus 33.
+- the pileup dataset was produced by *samtools pileup* command (although you can override this by setting column assignments manually).
+
+--------
+
+**Types of pileup datasets**
+
+The description of pileup format below is largely based on information that can be found on SAMTools_ documentation page. The 6- and 10-column variants are described below.
+
+.. _SAMTools: http://samtools.sourceforge.net/pileup.shtml
+
+**Six column pileup**::
+
+ 1 2 3 4 5 6
+ ---------------------------------
+ chrM 412 A 2 ., II
+ chrM 413 G 4 ..t, IIIH
+ chrM 414 C 4 ...a III2
+ chrM 415 C 4 TTTt III7
+
+where::
+
+ Column Definition
+ ------- ----------------------------
+ 1 Chromosome
+ 2 Position (1-based)
+ 3 Reference base at that position
+ 4 Coverage (# reads aligning over that position)
+ 5 Bases within reads where (see Galaxy wiki for more info)
+ 6 Quality values (phred33 scale, see Galaxy wiki for more)
+
+**Ten column pileup**
+
+The `ten-column`__ pileup incoroporates additional consensus information generated with *-c* option of *samtools pileup* command::
+
+
+ 1 2 3 4 5 6 7 8 9 10
+ ------------------------------------------------
+ chrM 412 A A 75 0 25 2 ., II
+ chrM 413 G G 72 0 25 4 ..t, IIIH
+ chrM 414 C C 75 0 25 4 ...a III2
+ chrM 415 C T 75 75 25 4 TTTt III7
+
+where::
+
+ Column Definition
+ ------- ----------------------------
+ 1 Chromosome
+ 2 Position (1-based)
+ 3 Reference base at that position
+ 4 Consensus bases
+ 5 Consensus quality
+ 6 SNP quality
+ 7 Maximum mapping quality
+ 8 Coverage (# reads aligning over that position)
+ 9 Bases within reads where (see Galaxy wiki for more info)
+ 10 Quality values (phred33 scale, see Galaxy wiki for more)
+
+
+.. __: http://samtools.sourceforge.net/cns0.shtml
+
+------
+
+**The output format**
+
+The tool modifies the input dataset in two ways:
+
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/99dcba7af5b6
changeset: 2661:99dcba7af5b6
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Fri Sep 04 10:31:23 2009 -0400
description:
More performance improvements in checking security on datasets and generatng HTML for libraries, and a bit of code cleanup in these areas.
30 file(s) affected in this change:
lib/galaxy/model/__init__.py
lib/galaxy/model/mapping.py
lib/galaxy/model/migrate/versions/0017_library_item_indexes.py
lib/galaxy/security/__init__.py
lib/galaxy/tools/actions/__init__.py
lib/galaxy/tools/parameters/basic.py
lib/galaxy/web/controllers/admin.py
lib/galaxy/web/controllers/dataset.py
lib/galaxy/web/controllers/history.py
lib/galaxy/web/controllers/library.py
lib/galaxy/web/controllers/requests.py
lib/galaxy/web/controllers/root.py
lib/galaxy/web/framework/__init__.py
templates/admin/library/browse_library.mako
templates/admin/library/common.mako
templates/admin/library/ldda_info.mako
templates/dataset/edit_attributes.mako
templates/library/browse_library.mako
templates/library/common.mako
templates/library/folder_info.mako
templates/library/folder_permissions.mako
templates/library/ldda_edit_info.mako
templates/library/ldda_info.mako
templates/library/library_dataset_info.mako
templates/library/library_dataset_permissions.mako
templates/library/library_info.mako
templates/library/library_permissions.mako
templates/mobile/history/detail.mako
templates/mobile/manage_library.mako
templates/root/history_common.mako
diffs (1594 lines):
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/model/__init__.py
--- a/lib/galaxy/model/__init__.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/model/__init__.py Fri Sep 04 10:31:23 2009 -0400
@@ -709,9 +709,9 @@
folder.order_id = self.item_count
self.item_count += 1
def get_info_association( self, restrict=False ):
- # If restrict is True, we will return this folder's info_association whether it
- # exists or not. If restrict is False, we'll return the next available info_association
- # in the inheritable hierarchy
+ # If restrict is True, we will return this folder's info_association, not inheriting.
+ # If restrict is False, we'll return the next available info_association in the
+ # inheritable hierarchy
if self.info_association:
return self.info_association[0]
if restrict:
@@ -721,9 +721,6 @@
if self.library_root:
return self.library_root[0].get_info_association()
return None
- @property
- def active_components( self ):
- return list( self.active_folders ) + list( self.active_library_datasets )
@property
def active_library_datasets( self ):
# This needs to be a list
@@ -736,10 +733,6 @@
def active_datasets( self ):
# This needs to be a list
return [ ld.library_dataset_dataset_association.dataset for ld in self.datasets if not ld.library_dataset_dataset_association.deleted ]
- @property #make this a relation
- def activatable_folders( self ):
- # This needs to be a list
- return [ folder for folder in self.folders if not folder.purged ]
class LibraryDataset( object ):
# This class acts as a proxy to the currently selected LDDA
@@ -1062,17 +1055,11 @@
return s
return False
def submitted(self):
- if self.state == self.states.SUBMITTED:
- return True
- return False
+ return self.state == self.states.SUBMITTED
def unsubmitted(self):
- if self.state == self.states.UNSUBMITTED:
- return True
- return False
+ return self.state == self.states.UNSUBMITTED
def complete(self):
- if self.state == self.states.COMPLETE:
- return True
- return False
+ return self.state == self.states.COMPLETE
class RequestType( object ):
def __init__(self, name=None, desc=None, request_form=None, sample_form=None):
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/model/mapping.py
--- a/lib/galaxy/model/mapping.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/model/mapping.py Fri Sep 04 10:31:23 2009 -0400
@@ -233,10 +233,10 @@
Column( "id", Integer, primary_key=True ),
Column( "library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id", use_alter=True, name="library_dataset_dataset_association_id_fk" ), nullable=True, index=True ),#current version of dataset, if null, there is not a current version selected
Column( "folder_id", Integer, ForeignKey( "library_folder.id" ), index=True ),
- Column( "order_id", Integer ),
+ Column( "order_id", Integer ), #not currently being used, but for possible future use
Column( "create_time", DateTime, default=now ),
Column( "update_time", DateTime, default=now, onupdate=now ),
- Column( "name", TrimmedString( 255 ), key="_name" ), #when not None/null this will supercede display in library (but not when imported into user's history?)
+ Column( "name", TrimmedString( 255 ), key="_name", index=True ), #when not None/null this will supercede display in library (but not when imported into user's history?)
Column( "info", TrimmedString( 255 ), key="_info" ), #when not None/null this will supercede display in library (but not when imported into user's history?)
Column( "deleted", Boolean, index=True, default=False ) )
@@ -248,7 +248,7 @@
Column( "update_time", DateTime, default=now, onupdate=now ),
Column( "copied_from_history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id", use_alter=True, name='history_dataset_association_dataset_id_fkey' ), nullable=True ),
Column( "copied_from_library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id", use_alter=True, name='library_dataset_dataset_association_id_fkey' ), nullable=True ),
- Column( "name", TrimmedString( 255 ) ),
+ Column( "name", TrimmedString( 255 ), index=True ),
Column( "info", TrimmedString( 255 ) ),
Column( "blurb", TrimmedString( 255 ) ),
Column( "peek" , TEXT ),
@@ -276,9 +276,9 @@
Column( "parent_id", Integer, ForeignKey( "library_folder.id" ), nullable = True, index=True ),
Column( "create_time", DateTime, default=now ),
Column( "update_time", DateTime, default=now, onupdate=now ),
- Column( "name", TEXT ),
+ Column( "name", TEXT, index=True ),
Column( "description", TEXT ),
- Column( "order_id", Integer ),
+ Column( "order_id", Integer ), #not currently being used, but for possible future use
Column( "item_count", Integer ),
Column( "deleted", Boolean, index=True, default=False ),
Column( "purged", Boolean, index=True, default=False ),
@@ -823,15 +823,16 @@
folders=relation(
LibraryFolder,
primaryjoin=( LibraryFolder.table.c.parent_id == LibraryFolder.table.c.id ),
+ order_by=asc( LibraryFolder.table.c.name ),
backref=backref( "parent", primaryjoin=( LibraryFolder.table.c.parent_id == LibraryFolder.table.c.id ), remote_side=[LibraryFolder.table.c.id] ) ),
active_folders=relation( LibraryFolder,
primaryjoin=( ( LibraryFolder.table.c.parent_id == LibraryFolder.table.c.id ) & ( not_( LibraryFolder.table.c.deleted ) ) ),
- order_by=asc( LibraryFolder.table.c.order_id ),
+ order_by=asc( LibraryFolder.table.c.name ),
lazy=True, #"""sqlalchemy.exceptions.ArgumentError: Error creating eager relationship 'active_folders' on parent class '<class 'galaxy.model.LibraryFolder'>' to child class '<class 'galaxy.model.LibraryFolder'>': Cant use eager loading on a self referential relationship."""
viewonly=True ),
datasets=relation( LibraryDataset,
primaryjoin=( ( LibraryDataset.table.c.folder_id == LibraryFolder.table.c.id ) ),
- order_by=asc( LibraryDataset.table.c.order_id ),
+ order_by=asc( LibraryDataset.table.c._name ),
lazy=False,
viewonly=True )
) )
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/model/migrate/versions/0017_library_item_indexes.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/model/migrate/versions/0017_library_item_indexes.py Fri Sep 04 10:31:23 2009 -0400
@@ -0,0 +1,53 @@
+"""
+This script adds 3 indexes to table columns: library_folder.name,
+library_dataset.name, library_dataset_dataset_association.name.
+"""
+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 ) )
+LibraryFolder_table = Table( "library_folder", metadata, autoload=True )
+LibraryDatasetDatasetAssociation_table = Table( "library_dataset_dataset_association", metadata, autoload=True )
+LibraryDataset_table = Table( "library_dataset", metadata, autoload=True )
+
+def display_migration_details():
+ print "========================================"
+ print "This script adds 3 indexes to table columns: library_folder.name,"
+ print "library_dataset.name, library_dataset_dataset_association.name."
+ print "========================================"
+
+def upgrade():
+ display_migration_details()
+ # Load existing tables
+ metadata.reflect()
+ # Add 1 index to the library_folder table
+ i = Index( 'ix_library_folder_name', LibraryFolder_table.c.name )
+ try:
+ i.create()
+ except Exception, e:
+ log.debug( "Adding index 'ix_library_folder_name' to library_folder table failed: %s" % ( str( e ) ) )
+ # Add 1 index to the library_dataset_dataset_association table
+ i = Index( 'ix_library_dataset_dataset_association_name', LibraryDatasetDatasetAssociation_table.c.name )
+ try:
+ i.create()
+ except Exception, e:
+ log.debug( "Adding index 'ix_library_dataset_dataset_association_name' to library_dataset_dataset_association table failed: %s" % ( str( e ) ) )
+ # Add 1 index to the library_dataset table
+ i = Index( 'ix_library_dataset_name', LibraryDataset_table.c.name )
+ try:
+ i.create()
+ except Exception, e:
+ log.debug( "Adding index 'ix_library_dataset_name' to library_dataset table failed: %s" % ( str( e ) ) )
+def downgrade():
+ log.debug( "Downgrade is not possible." )
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/security/__init__.py
--- a/lib/galaxy/security/__init__.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/security/__init__.py Fri Sep 04 10:31:23 2009 -0400
@@ -33,11 +33,19 @@
def get_actions( self ):
"""Get all permitted actions as a list of Action objects"""
return self.permitted_actions.__dict__.values()
- def allow_action( self, user, roles, action, **kwd ):
- raise 'No valid method of checking action (%s) on %s for user %s.' % ( action, kwd, user )
def get_item_action( self, action, item ):
raise 'No valid method of retrieving action (%s) for item %s.' % ( action, item )
def guess_derived_permissions_for_datasets( self, datasets = [] ):
+ raise "Unimplemented Method"
+ def can_access_dataset( self, roles, dataset ):
+ raise "Unimplemented Method"
+ def can_manage_dataset( self, roles, dataset ):
+ raise "Unimplemented Method"
+ def can_add_library_item( self, user, roles, item ):
+ raise "Unimplemented Method"
+ def can_modify_library_item( self, user, roles, item ):
+ raise "Unimplemented Method"
+ def can_manage_library_item( self, user, roles, item ):
raise "Unimplemented Method"
def associate_components( self, **kwd ):
raise 'No valid method of associating provided components: %s' % kwd
@@ -89,36 +97,20 @@
to allow migration toward a more SQLAlchemy 0.4 style of use.
"""
return self.model.context.current
- def allow_action( self, user, roles, action, **kwd ):
- if 'dataset' in kwd:
- return self.allow_dataset_action( user, roles, action, kwd[ 'dataset' ] )
- elif 'library_item' in kwd:
- return self.allow_library_item_action( user, roles, action, kwd[ 'library_item' ] )
- raise 'No valid method of checking action (%s) for user %s using kwd %s' % ( action, str( user ), str( kwd ) )
- def allow_dataset_action( self, user, roles, action, dataset ):
- """Returns true when user has permission to perform an action"""
- if not user:
- if action == self.permitted_actions.DATASET_ACCESS and action.action not in [ dp.action for dp in dataset.actions ]:
- # anons only get access, and only if there are no roles required for the access action
- # Other actions (or if the dataset has roles defined for the access action) fall through
- # to the false below for anons
- return True
- elif action.action not in [ dp.action for dp in dataset.actions ]:
- if action.model == 'restrict':
- # Implicit access to restrict-style actions if the dataset does not have the action
- # Grant style actions fall through to the false below
- return True
- else:
- perms = self.get_dataset_permissions( dataset )
- if action in perms.keys():
- # The filter() returns a list of the dataset's role ids of which the user is not a member,
- # so an empty list means the user has all of the required roles.
- if not filter( lambda x: x not in roles, [ r for r in perms[ action ] ] ):
- # User has all of the roles required to perform the action
- return True
- # The user is missing at least one required role
- return False
- def allow_library_item_action( self, user, roles, action, library_item ):
+ def allow_dataset_action( self, roles, action, dataset ):
+ """
+ Returns true when user has permission to perform an action on an
+ instance of Dataset.
+ """
+ dataset_action = self.get_item_action( action, dataset )
+ if dataset_action is None:
+ return action.model == 'restrict'
+ return dataset_action.role in roles
+ def can_access_dataset( self, roles, dataset ):
+ return self.allow_dataset_action( roles, self.permitted_actions.DATASET_ACCESS, dataset )
+ def can_manage_dataset( self, roles, dataset ):
+ return self.allow_dataset_action( roles, self.permitted_actions.DATASET_MANAGE_PERMISSIONS, dataset )
+ def allow_library_item_action( self, user, roles, action, item ):
"""
Method for checking a permission for the current user to perform a
specific library action on a library item, which must be one of:
@@ -127,30 +119,22 @@
if user is None:
# All permissions are granted, so non-users cannot have permissions
return False
- # Check to see if user has access to any of the roles
- allowed_role_assocs = []
- for item_class, permission_class in self.library_item_assocs:
- if isinstance( library_item, item_class ):
- if permission_class == self.model.LibraryPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action,
- library=library_item ).all()
- elif permission_class == self.model.LibraryFolderPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action,
- folder=library_item ).all()
- elif permission_class == self.model.LibraryDatasetPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action,
- library_dataset=library_item ).all()
- elif permission_class == self.model.LibraryDatasetDatasetAssociationPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action,
- library_dataset_dataset_association=library_item ).all()
- for allowed_role_assoc in allowed_role_assocs:
- if allowed_role_assoc.role in roles:
- return True
- return False
+ # Check to see if user has access to any of the roles associated with action
+ item_action = self.get_item_action( action, item )
+ if item_action is None:
+ # All permissions are granted, so item must have action
+ return False
+ return item_action.role in roles
+ def can_add_library_item( self, user, roles, item ):
+ return self.allow_library_item_action( user, roles, self.permitted_actions.LIBRARY_ADD, item )
+ def can_modify_library_item( self, user, roles, item ):
+ return self.allow_library_item_action( user, roles, self.permitted_actions.LIBRARY_MODIFY, item )
+ def can_manage_library_item( self, user, roles, item ):
+ return self.allow_library_item_action( user, roles, self.permitted_actions.LIBRARY_MANAGE, item )
def get_item_action( self, action, item ):
# item must be one of: Dataset, Library, LibraryFolder, LibraryDataset, LibraryDatasetDatasetAssociation
for permission in item.actions:
- if permission.action == action:
+ if permission.action == action.action:
return permission
return None
def guess_derived_permissions_for_datasets( self, datasets=[] ):
@@ -282,10 +266,7 @@
if [ assoc for assoc in dataset.history_associations if assoc.history not in user.histories ]:
# Don't change permissions on a dataset associated with a history not owned by the user
continue
- if bypass_manage_permission or self.allow_action( user,
- user.all_roles(),
- self.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=dataset ):
+ if bypass_manage_permission or self.can_manage_dataset( user.all_roles(), dataset ):
self.set_all_dataset_permissions( dataset, permissions )
def history_get_default_permissions( self, history ):
permissions = {}
@@ -445,7 +426,7 @@
the string, True is returned if the current user has permission to perform any 1 of actions_to_check
on library_item. Otherwise, cycle through all sub-folders in library_item until one is found that meets
this criteria, if it exists.
- """
+ """
for action in actions_to_check:
if self.allow_library_item_action( user, roles, action, library_item ):
return True, hidden_folder_ids
@@ -515,7 +496,7 @@
with the string, True is returned if the current user has permission to access folder. Otherwise,
cycle through all sub-folders in folder until one is found that meets this criteria, if it exists.
"""
- action = self.permitted_actions.DATASET_ACCESS.action
+ action = self.permitted_actions.DATASET_ACCESS
lddas = self.sa_session.query( self.model.LibraryDatasetDatasetAssociation ) \
.join( "library_dataset" ) \
.filter( self.model.LibraryDataset.folder == folder ) \
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/tools/actions/__init__.py
--- a/lib/galaxy/tools/actions/__init__.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/tools/actions/__init__.py Fri Sep 04 10:31:23 2009 -0400
@@ -48,10 +48,7 @@
assoc.flush()
data = new_data
user, roles = trans.get_user_and_roles()
- if data and not trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset=data.dataset ):
+ if data and not trans.app.security_agent.can_access_dataset( roles, data.dataset ):
raise "User does not have permission to use a dataset (%s) provided for input." % data.id
return data
if isinstance( input, DataToolParameter ):
@@ -267,10 +264,7 @@
user, roles = trans.get_user_and_roles()
for name, dataset in inp_data.iteritems():
if dataset:
- if not trans.app.security_agent.allow_action( user,
- roles,
- dataset.permitted_actions.DATASET_ACCESS,
- dataset=dataset.dataset ):
+ if not trans.app.security_agent.can_access_dataset( roles, dataset.dataset ):
raise "User does not have permission to use a dataset (%s) provided for input." % data.id
job.add_input_dataset( name, dataset )
else:
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/tools/parameters/basic.py
--- a/lib/galaxy/tools/parameters/basic.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/tools/parameters/basic.py Fri Sep 04 10:31:23 2009 -0400
@@ -1149,19 +1149,11 @@
hid = str( hda.hid )
if not hda.dataset.state in [galaxy.model.Dataset.states.ERROR, galaxy.model.Dataset.states.DISCARDED] and \
hda.visible and \
- trans.app.security_agent.allow_action( user,
- roles,
- hda.permitted_actions.DATASET_ACCESS,
- dataset=hda.dataset ):
+ trans.app.security_agent.can_access_dataset( roles, hda.dataset ):
# If we are sending data to an external application, then we need to make sure there are no roles
- # associated with the dataset that restrict it's access from "public". We determine this by sending
- # None as the user to the allow_action method.
- if self.tool and self.tool.tool_type == 'data_destination':
- if not trans.app.security_agent.allow_action( None,
- None,
- hda.permitted_actions.DATASET_ACCESS,
- dataset=hda.dataset ):
- continue
+ # associated with the dataset that restrict it's access from "public".
+ if self.tool and self.tool.tool_type == 'data_destination' and not trans.app.security_agent.dataset_is_public( hda.dataset ):
+ continue
if self.options and hda.get_dbkey() != filter_value:
continue
if isinstance( hda.datatype, self.formats):
@@ -1172,10 +1164,7 @@
if target_ext:
if converted_dataset:
hda = converted_dataset
- if not trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.DATASET_ACCESS,
- dataset=hda.dataset ):
+ if not trans.app.security_agent.can_access_dataset( roles, hda.dataset ):
continue
selected = ( value and ( hda in value ) )
field.add_option( "%s: (as %s) %s" % ( hid, target_ext, hda_name ), hda.id, selected )
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/admin.py
--- a/lib/galaxy/web/controllers/admin.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/admin.py Fri Sep 04 10:31:23 2009 -0400
@@ -2001,7 +2001,6 @@
show_deleted=False,
msg=msg,
messagetype=messagetype )
-
def _save_request_type(self, trans, **kwd):
params = util.Params( kwd )
num_states = int( util.restore_text( params.get( 'num_states', 0 ) ))
@@ -2031,7 +2030,6 @@
ss.flush()
msg = "The new request type named '%s' with %s state(s) has been created" % (rt.name, num_states)
return rt, msg
-
@web.expose
@web.require_admin
def delete_request_type( self, trans, **kwd ):
@@ -2045,7 +2043,6 @@
action='manage_request_types',
msg='Request type <b>%s</b> has been deleted' % rt.name,
messagetype='done') )
-
@web.expose
@web.require_admin
def undelete_request_type( self, trans, **kwd ):
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/dataset.py
--- a/lib/galaxy/web/controllers/dataset.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/dataset.py Fri Sep 04 10:31:23 2009 -0400
@@ -109,10 +109,7 @@
if not data:
raise paste.httpexceptions.HTTPRequestRangeNotSatisfiable( "Invalid reference dataset id: %s." % str( dataset_id ) )
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset=data.dataset ):
+ if trans.app.security_agent.can_access_dataset( roles, data.dataset ):
if data.state == trans.model.Dataset.states.UPLOAD:
return trans.show_error_message( "Please wait until this dataset finishes uploading before attempting to view it." )
if filename is None or filename.lower() == "index":
@@ -147,12 +144,9 @@
return trans.show_error_message( 'Invalid parameters specified for "display at" link, please contact a Galaxy administrator' )
redirect_url = kwd['redirect_url'] % urllib.quote_plus( kwd['display_url'] )
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( None, None, data.permitted_actions.DATASET_ACCESS, dataset=data.dataset ):
+ if trans.app.security_agent.dataset_is_public( data.dataset ):
return trans.response.send_redirect( redirect_url ) # anon access already permitted by rbac
- if trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset=data.dataset ):
+ if trans.app.security_agent.can_access_dataset( roles, data.dataset ):
trans.app.host_security_agent.set_dataset_permissions( data, trans.user, site )
return trans.response.send_redirect( redirect_url )
else:
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/history.py
--- a/lib/galaxy/web/controllers/history.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/history.py Fri Sep 04 10:31:23 2009 -0400
@@ -443,15 +443,9 @@
for hda in history.activatable_datasets:
# If the current dataset is not public, we may need to perform an action on it to
# make it accessible by the other user.
- if not trans.app.security_agent.allow_action( send_to_user,
- send_to_user.all_roles(),
- trans.app.security_agent.permitted_actions.DATASET_ACCESS,
- dataset=hda.dataset ):
+ if not trans.app.security_agent.can_access_dataset( send_to_user.all_roles(), hda.dataset ):
# The user with which we are sharing the history does not have access permission on the current dataset
- if trans.app.security_agent.allow_action( user,
- user_roles,
- trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=hda.dataset ) and not hda.dataset.library_associations:
+ if trans.app.security_agent.can_manage_dataset( user_roles, hda.dataset ) and not hda.dataset.library_associations:
# The current user has authority to change permissions on the current dataset because
# they have permission to manage permissions on the dataset and the dataset is not associated
# with a library.
@@ -556,15 +550,9 @@
no_change_needed[ send_to_user ][ history ] = [ hda ]
else:
no_change_needed[ send_to_user ][ history ].append( hda )
- elif not trans.app.security_agent.allow_action( send_to_user,
- send_to_user.all_roles(),
- trans.app.security_agent.permitted_actions.DATASET_ACCESS,
- dataset=hda.dataset ):
+ elif not trans.app.security_agent.can_access_dataset( send_to_user.all_roles(), hda.dataset ):
# The user with which we are sharing the history does not have access permission on the current dataset
- if trans.app.security_agent.allow_action( user,
- user_roles,
- trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=hda.dataset ) and not hda.dataset.library_associations:
+ if trans.app.security_agent.can_manage_dataset( user_roles, hda.dataset ) and not hda.dataset.library_associations:
# The current user has authority to change permissions on the current dataset because
# they have permission to manage permissions on the dataset and the dataset is not associated
# with a library.
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/library.py
--- a/lib/galaxy/web/controllers/library.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/library.py Fri Sep 04 10:31:23 2009 -0400
@@ -2,6 +2,7 @@
from galaxy.model.orm import *
from galaxy.datatypes import sniff
from galaxy import util
+from galaxy.util.odict import odict
from galaxy.web.controllers.forms import get_all_forms, get_form_widgets
from galaxy.util.streamball import StreamBall
import logging, tempfile, zipfile, tarfile, os, sys
@@ -74,7 +75,7 @@
# The folders that should not be displayed may not be a complete list, but it is ultimately passed
# to the browse_library() method and the browse_library.mako template to keep from re-checking the
# same folders when the library is rendered.
- authorized_libraries = {}
+ authorized_libraries = odict()
for library in all_libraries:
can_access, hidden_folder_ids = trans.app.security_agent.check_folder_contents( user, roles, library.root_folder )
if can_access:
@@ -283,10 +284,7 @@
user, roles = trans.get_user_and_roles()
for id in ldda_ids:
ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
- if not ldda or not trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.DATASET_ACCESS,
- dataset = ldda.dataset ):
+ if not ldda or not trans.app.security_agent.can_access_dataset( roles, ldda.dataset ):
continue
path = ""
parent_folder = ldda.library_dataset.folder
@@ -384,10 +382,7 @@
user, roles = trans.get_user_and_roles()
if action == 'information':
if params.get( 'edit_attributes_button', False ):
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=library_dataset ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, library_dataset ):
if params.get( 'edit_attributes_button', False ):
old_name = library_dataset.name
new_name = util.restore_text( params.get( 'name', '' ) )
@@ -411,10 +406,7 @@
messagetype=messagetype )
elif action == 'permissions':
if params.get( 'update_roles_button', False ):
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=library_dataset ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, library_dataset ):
# The user clicked the Save button on the 'Associate With Roles' form
permissions = {}
for k, v in trans.app.model.Library.permitted_actions.items():
@@ -501,14 +493,8 @@
if action == 'permissions':
if params.get( 'update_roles_button', False ):
# The user clicked the Save button on the 'Associate With Roles' form
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=ldda ) and \
- trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=ldda.dataset ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, ldda ) and \
+ trans.app.security_agent.can_manage_dataset( roles, ldda.dataset ):
permissions = {}
for k, v in trans.app.model.Dataset.permitted_actions.items():
in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
@@ -547,10 +533,7 @@
elif action == 'edit_info':
if params.get( 'change', False ):
# The user clicked the Save button on the 'Change data type' form
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=ldda ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, ldda ):
if ldda.datatype.allow_datatype_change and trans.app.datatypes_registry.get_datatype_by_extension( params.datatype ).allow_datatype_change:
trans.app.datatypes_registry.change_datatype( ldda, params.datatype )
trans.app.model.flush()
@@ -571,10 +554,7 @@
messagetype=messagetype )
elif params.get( 'save', False ):
# The user clicked the Save button on the 'Edit Attributes' form
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=ldda ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, ldda ):
old_name = ldda.name
new_name = util.restore_text( params.get( 'name', '' ) )
new_info = util.restore_text( params.get( 'info', '' ) )
@@ -613,10 +593,7 @@
messagetype=messagetype )
elif params.get( 'detect', False ):
# The user clicked the Auto-detect button on the 'Edit Attributes' form
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=ldda ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, ldda ):
for name, spec in ldda.datatype.metadata_spec.items():
# We need to be careful about the attributes we are resetting
if name not in [ 'name', 'info', 'dbkey' ]:
@@ -638,10 +615,7 @@
msg=msg,
messagetype=messagetype )
elif params.get( 'delete', False ):
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=folder ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, folder ):
ldda.deleted = True
ldda.flush()
msg = 'Dataset %s has been removed from this library' % ldda.name
@@ -656,10 +630,7 @@
widgets=widgets,
msg=msg,
messagetype=messagetype )
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=ldda ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, ldda ):
ldda.datatype.before_edit( ldda )
if "dbkey" in ldda.datatype.metadata_spec and not ldda.metadata.dbkey:
# Copy dbkey into metadata, for backwards compatability
@@ -697,14 +668,8 @@
messagetype='error' ) )
if action == 'permissions':
if params.get( 'update_roles_button', False ):
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=ldda ) and \
- trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=ldda.dataset ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, ldda ) and \
+ trans.app.security_agent.can_manage_dataset( roles, ldda.dataset ):
permissions = {}
for k, v in trans.app.model.Dataset.permitted_actions.items():
in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
@@ -735,14 +700,8 @@
library_id=library_id,
msg=msg,
messagetype=messagetype )
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=ldda ) and \
- trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset=ldda.dataset ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, ldda ) and \
+ trans.app.security_agent.can_manage_dataset( roles, ldda.dataset ):
# Ensure that the permissions across all library items are identical, otherwise we can't update them together.
check_list = []
for ldda in lddas:
@@ -774,14 +733,8 @@
library_id=library_id,
msg=msg,
messagetype=messagetype )
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_ADD,
- library_item=folder ) or \
- ( replace_dataset and trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=replace_dataset ) ):
+ if trans.app.security_agent.can_add_library_item( user, roles, folder ) or \
+ ( replace_dataset and trans.app.security_agent.can_modify_library_item( user, roles, replace_dataset ) ):
if params.get( 'new_dataset_button', False ):
upload_option = params.get( 'upload_option', 'upload_file' )
created_ldda_ids = trans.webapp.controllers[ 'library_dataset' ].upload_dataset( trans,
@@ -804,10 +757,7 @@
# Since permissions on all LibraryDatasetDatasetAssociations must be the same at this point, we only need
# to check one of them to see if the current user can manage permissions on them.
check_ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( ldda_id_list[0] )
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=check_ldda ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, check_ldda ):
if replace_dataset:
default_action = ''
else:
@@ -929,10 +879,7 @@
# to check one of them to see if the current user can manage permissions on them.
check_ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( ldda_id_list[0] )
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=check_ldda ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, check_ldda ):
if replace_dataset:
default_action = ''
else:
@@ -1033,10 +980,7 @@
else:
widgets = []
if params.get( 'rename_folder_button', False ):
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=folder ):
+ if trans.app.security_agent.can_modify_library_item( user, roles, folder ):
old_name = folder.name
new_name = util.restore_text( params.name )
new_description = util.restore_text( params.description )
@@ -1077,10 +1021,7 @@
elif action == 'permissions':
if params.get( 'update_roles_button', False ):
# The user clicked the Save button on the 'Associate With Roles' form
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=folder ):
+ if trans.app.security_agent.can_manage_library_item( user, roles, folder ):
permissions = {}
for k, v in trans.app.model.Library.permitted_actions.items():
in_roles = [ trans.app.model.Role.get( int( x ) ) for x in util.listify( params.get( k + '_in', [] ) ) ]
@@ -1202,3 +1143,41 @@
edit_info=True,
msg=util.sanitize_text( msg ),
messagetype='done' ) )
+
+# ---- Utility methods -------------------------------------------------------
+
+def active_folders( trans, folder ):
+ # Much faster way of retrieving all active sub-folders within a given folder than the
+ # performance of the mapper. This query also eagerloads the permissions on each folder.
+ return trans.sa_session.query( trans.app.model.LibraryFolder ) \
+ .filter_by( parent=folder, deleted=False ) \
+ .options( eagerload_all( "actions" ) ) \
+ .order_by( trans.app.model.LibraryFolder.table.c.name ) \
+ .all()
+def activatable_folders( trans, folder ):
+ return trans.sa_session.query( trans.app.model.LibraryFolder ) \
+ .filter_by( parent=folder, purged=False ) \
+ .options( eagerload_all( "actions" ) ) \
+ .order_by( trans.app.model.LibraryFolder.table.c.name ) \
+ .all()
+def active_folders_and_lddas( trans, folder ):
+ folders = active_folders( trans, folder )
+ # This query is much faster than the folder.active_library_datasets property
+ lddas = trans.sa_session.query( trans.app.model.LibraryDatasetDatasetAssociation ) \
+ .filter_by( deleted=False ) \
+ .join( "library_dataset" ) \
+ .filter( trans.app.model.LibraryDataset.table.c.folder_id==folder.id ) \
+ .order_by( trans.app.model.LibraryDatasetDatasetAssociation.table.c.name ) \
+ .all()
+ return folders, lddas
+def activatable_folders_and_lddas( trans, folder ):
+ folders = activatable_folders( trans, folder )
+ # This query is much faster than the folder.activatable_library_datasets property
+ lddas = trans.sa_session.query( trans.app.model.LibraryDatasetDatasetAssociation ) \
+ .join( "library_dataset" ) \
+ .filter( trans.app.model.LibraryDataset.table.c.folder_id==folder.id ) \
+ .join( "dataset" ) \
+ .filter( trans.app.model.Dataset.table.c.deleted==False ) \
+ .order_by( trans.app.model.LibraryDatasetDatasetAssociation.table.c.name ) \
+ .all()
+ return folders, lddas
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/requests.py
--- a/lib/galaxy/web/controllers/requests.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/requests.py Fri Sep 04 10:31:23 2009 -0400
@@ -4,6 +4,7 @@
from galaxy.datatypes import sniff
from galaxy import util
from galaxy.util.streamball import StreamBall
+from galaxy.util.odict import odict
import logging, tempfile, zipfile, tarfile, os, sys
from galaxy.web.form_builder import *
from datetime import datetime, timedelta
@@ -470,7 +471,7 @@
# TODO: RC, when you add the folders select list to your request form, take advantage of the hidden_folder_ids
# so that you do not need to check those same folders yet again when populating the select list.
#
- libraries = {}
+ libraries = odict()
for library in all_libraries:
can_show, hidden_folder_ids = trans.app.security_agent.show_library_item( user, roles, library, actions_to_check )
if can_show:
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/controllers/root.py
--- a/lib/galaxy/web/controllers/root.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/controllers/root.py Fri Sep 04 10:31:23 2009 -0400
@@ -153,10 +153,7 @@
return "Dataset id '%s' is invalid" %str( id )
if data:
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset = data.dataset ):
+ if trans.app.security_agent.can_access_dataset( roles, data.dataset ):
mime = trans.app.datatypes_registry.get_mimetype_by_extension( data.extension.lower() )
trans.response.set_content_type(mime)
if tofile:
@@ -189,10 +186,7 @@
child = data.get_child_by_designation( designation )
if child:
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( user,
- roles,
- child.permitted_actions.DATASET_ACCESS,
- dataset = child ):
+ if trans.app.security_agent.can_access_dataset( roles, child ):
return self.display( trans, id=child.id, tofile=tofile, toext=toext )
else:
return "You are not privileged to access this dataset."
@@ -209,10 +203,7 @@
authz_method = kwd['authz_method']
if data:
user, roles = trans.get_user_and_roles()
- if authz_method == 'rbac' and trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset = data ):
+ if authz_method == 'rbac' and trans.app.security_agent.can_access_dataset( roles, data ):
trans.response.set_content_type( data.get_mime() )
trans.log_event( "Formatted dataset id %s for display at %s" % ( str( id ), display_app ) )
return data.as_display_type( display_app, **kwd )
@@ -262,10 +253,7 @@
if id is not None and data.history.user is not None and data.history.user != trans.user:
return trans.show_error_message( "This instance of a dataset (%s) in a history does not belong to you." % ( data.id ) )
user, roles = trans.get_user_and_roles()
- if trans.app.security_agent.allow_action( user,
- roles,
- data.permitted_actions.DATASET_ACCESS,
- dataset=data.dataset ):
+ if trans.app.security_agent.can_access_dataset( roles, data.dataset ):
if data.state == trans.model.Dataset.states.UPLOAD:
return trans.show_error_message( "Please wait until this dataset finishes uploading before attempting to edit its metadata." )
params = util.Params( kwd, safe=False )
@@ -331,10 +319,7 @@
elif params.update_roles_button:
if not trans.user:
return trans.show_error_message( "You must be logged in if you want to change permissions." )
- if trans.app.security_agent.allow_action( user,
- roles,
- data.dataset.permitted_actions.DATASET_MANAGE_PERMISSIONS,
- dataset = data.dataset ):
+ if trans.app.security_agent.can_manage_dataset( roles, data.dataset ):
permissions = {}
for k, v in trans.app.model.Dataset.permitted_actions.items():
in_roles = params.get( k + '_in', [] )
diff -r adff03258b45 -r 99dcba7af5b6 lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py Fri Sep 04 10:23:37 2009 -0400
+++ b/lib/galaxy/web/framework/__init__.py Fri Sep 04 10:31:23 2009 -0400
@@ -503,7 +503,7 @@
if user:
roles = user.all_roles()
else:
- roles = None
+ roles = []
return user, roles
def user_is_admin( self ):
diff -r adff03258b45 -r 99dcba7af5b6 templates/admin/library/browse_library.mako
--- a/templates/admin/library/browse_library.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/admin/library/browse_library.mako Fri Sep 04 10:31:23 2009 -0400
@@ -1,17 +1,15 @@
<%inherit file="/base.mako"/>
-<%namespace file="common.mako" import="render_dataset" />
<%namespace file="/message.mako" import="render_msg" />
-<% from galaxy import util %>
+<%
+ from time import strftime
+ from galaxy import util
+ from galaxy.web.controllers.library import active_folders_and_lddas, activatable_folders_and_lddas
+%>
<%def name="stylesheets()">
<link href="${h.url_for('/static/style/base.css')}" rel="stylesheet" type="text/css" />
<link href="${h.url_for('/static/style/library.css')}" rel="stylesheet" type="text/css" />
</%def>
-
-<%
-def name_sorted( l ):
- return sorted( l, lambda a, b: cmp( a.name.lower(), b.name.lower() ) )
-%>
<script type="text/javascript">
$( document ).ready( function () {
@@ -72,24 +70,77 @@
}
</script>
-<%def name="render_folder( folder, folder_pad, deleted, show_deleted, created_ldda_ids, library_id )">
+<%def name="render_dataset( ldda, library_dataset, selected, library, folder, deleted, show_deleted )">
<%
- root_folder = not folder.parent
+ ## The received data must always be a LibraryDatasetDatasetAssociation object. The object id passed to methods
+ ## from the drop down menu should be the ldda id to prevent id collision ( which could happen when displaying
+ ## children, which are always lddas ). We also need to make sure we're displaying the latest version of this
+ ## library_dataset, so we display the attributes from the ldda.
+ if ldda.user:
+ uploaded_by = ldda.user.email
+ else:
+ uploaded_by = 'anonymous'
+ if ldda == library_dataset.library_dataset_dataset_association:
+ current_version = True
+ else:
+ current_version = False
+ %>
+ <div class="historyItemWrapper historyItem historyItem-${ldda.state}" id="libraryItem-${ldda.id}">
+ ## Header row for library items (name, state, action buttons)
+ <div class="historyItemTitleBar">
+ <table cellspacing="0" cellpadding="0" border="0" width="100%">
+ <tr>
+ <td width="*">
+ %if selected:
+ <input type="checkbox" name="ldda_ids" value="${ldda.id}" checked/>
+ %else:
+ <input type="checkbox" name="ldda_ids" value="${ldda.id}"/>
+ %endif
+ <span class="libraryItemDeleted-${ldda.deleted}">
+ <a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, info=True, deleted=deleted, show_deleted=show_deleted )}"><b>${ldda.name[:50]}</b></a>
+ </span>
+ <a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
+ %if not library.deleted and not folder.deleted and not library_dataset.deleted:
+ <div popupmenu="dataset-${ldda.id}-popup">
+ <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
+ ## We're disabling the ability to add templates at the LDDA and LibraryDataset level, but will leave this here for possible future use
+ ##<a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library.id, library_dataset_id=library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
+ %if current_version:
+ <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
+ %endif
+ %if ldda.has_data:
+ <a class="action-button" href="${h.url_for( controller='admin', action='download_dataset_from_folder', id=ldda.id, library_id=library.id )}">Download this dataset</a>
+ %endif
+ <a class="action-button" confirm="Click OK to delete dataset '${ldda.name}'." href="${h.url_for( controller='admin', action='delete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Delete this dataset</a>
+ </div>
+ %elif not library.deleted and not folder.deleted and library_dataset.deleted:
+ <div popupmenu="dataset-${ldda.id}-popup">
+ <a class="action-button" href="${h.url_for( controller='admin', action='undelete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Undelete this dataset</a>
+ </div>
+ %endif
+ </td>
+ <td width="300">${ldda.message}</td>
+ <td width="150">${uploaded_by}</td>
+ <td width="60">${ldda.create_time.strftime( "%Y-%m-%d" )}</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+</%def>
+
+<%def name="render_folder( folder, folder_pad, deleted, show_deleted, created_ldda_ids, library_id, root_folder=False )">
+ <%
if root_folder:
pad = folder_pad
+ expander = "/static/images/silk/resultset_bottom.png"
+ folder_img = "/static/images/silk/folder_page.png"
else:
pad = folder_pad + 20
- if folder_pad == 0:
- expander = "/static/images/silk/resultset_bottom.png"
- folder_img = "/static/images/silk/folder_page.png"
- subfolder = False
- else:
expander = "/static/images/silk/resultset_next.png"
folder_img = "/static/images/silk/folder.png"
- subfolder = True
- created_ldda_id_list = util.listify( created_ldda_ids )
- if created_ldda_id_list:
- created_ldda_ids = [ int( ldda_id ) for ldda_id in created_ldda_id_list ]
+ if created_ldda_ids:
+ created_ldda_ids = [ int( ldda_id ) for ldda_id in util.listify( created_ldda_ids ) ]
%>
%if not root_folder:
<li class="folderRow libraryOrFolderRow" style="padding-left: ${pad}px;">
@@ -104,10 +155,6 @@
</div>
%endif
%if not folder.deleted:
- <%
- library_item_ids = {}
- library_item_ids[ 'folder' ] = folder.id
- %>
<div popupmenu="folder-${folder.id}-popup">
<a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder.id )}">Add datasets to this folder</a>
<a class="action-button" href="${h.url_for( controller='admin', action='folder', new=True, id=folder.id, library_id=library_id )}">Create a new sub-folder in this folder</a>
@@ -130,30 +177,31 @@
%endif
</li>
%endif
- %if subfolder:
+ %if pad > 0:
<ul id="subFolder">
%else:
<ul>
%endif
%if show_deleted:
<%
- parent_folders = folder.activatable_folders
- parent_datasets = folder.activatable_library_datasets
+ sub_folders, lddas = activatable_folders_and_lddas( trans, folder )
%>
%else:
<%
- parent_folders = folder.active_folders
- parent_datasets = folder.active_library_datasets
+ sub_folders, lddas = active_folders_and_lddas( trans, folder )
%>
%endif
- %for folder in name_sorted( parent_folders ):
- ${render_folder( folder, pad, deleted, show_deleted, created_ldda_ids, library_id )}
- %endfor
- %for library_dataset in name_sorted( parent_datasets ):
+ %for sub_folder in sub_folders:
+ ${render_folder( sub_folder, pad, deleted, show_deleted, created_ldda_ids, library_id )}
+ %endfor
+ %for ldda in lddas:
<%
- selected = created_ldda_ids and library_dataset.library_dataset_dataset_association.id in created_ldda_ids
+ library_dataset = ldda.library_dataset
+ selected = created_ldda_ids and ldda.id in created_ldda_ids
%>
- <li class="datasetRow" style="padding-left: ${pad + 18}px;">${render_dataset( library_dataset, selected, library, deleted, show_deleted )}</li>
+ <li class="datasetRow" style="padding-left: ${pad + 18}px;">
+ ${render_dataset( ldda, library_dataset, selected, library, folder, deleted, show_deleted )}
+ </li>
%endfor
</ul>
</%def>
@@ -196,10 +244,6 @@
<a id="library-${library.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="library-${library.id}-popup">
%if not deleted:
- <%
- library_item_ids = {}
- library_item_ids[ 'library' ] = library.id
- %>
<a class="action-button" href="${h.url_for( controller='admin', action='library', id=library.id, information=True )}">Edit this data library's information</a>
## Editing templates disabled until we determine optimal approach to re-linking library item to new version of form definition
##%if library.info_association:
@@ -228,7 +272,7 @@
</div>
</li>
<ul>
- ${render_folder( library.root_folder, 0, deleted, show_deleted, created_ldda_ids, library.id )}
+ ${render_folder( library.root_folder, 0, deleted, show_deleted, created_ldda_ids, library.id, root_folder=True )}
</ul>
<br/>
</ul>
diff -r adff03258b45 -r 99dcba7af5b6 templates/admin/library/common.mako
--- a/templates/admin/library/common.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/admin/library/common.mako Fri Sep 04 10:31:23 2009 -0400
@@ -1,68 +1,3 @@
-<% from time import strftime %>
-
-<%def name="render_dataset( library_dataset, selected, library, deleted, show_deleted )">
- <%
- ## The received data must always be a LibraryDataset object, but the object id passed to methods from the drop down menu
- ## should be the underlying ldda id to prevent id collision ( which could happen when displaying children, which are always
- ## lddas ). We also need to make sure we're displaying the latest version of this library_dataset, so we display the attributes
- ## from the ldda.
- ldda = library_dataset.library_dataset_dataset_association
- if ldda.user:
- uploaded_by = ldda.user.email
- else:
- uploaded_by = 'anonymous'
- if ldda == ldda.library_dataset.library_dataset_dataset_association:
- current_version = True
- else:
- current_version = False
- %>
- <div class="historyItemWrapper historyItem historyItem-${ldda.state}" id="libraryItem-${ldda.id}">
- ## Header row for library items (name, state, action buttons)
- <div class="historyItemTitleBar">
- <table cellspacing="0" cellpadding="0" border="0" width="100%">
- <tr>
- <td width="*">
- %if selected:
- <input type="checkbox" name="ldda_ids" value="${ldda.id}" checked/>
- %else:
- <input type="checkbox" name="ldda_ids" value="${ldda.id}"/>
- %endif
- <span class="libraryItemDeleted-${library_dataset.deleted}">
- <a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, info=True, deleted=deleted, show_deleted=show_deleted )}"><b>${ldda.name[:50]}</b></a>
- </span>
- <a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
- %if not library.deleted and not library_dataset.folder.deleted and not library_dataset.deleted:
- <%
- library_item_ids = {}
- library_item_ids[ 'ldda' ] = ldda.id
- %>
- <div popupmenu="dataset-${ldda.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
- ## We're disabling the ability to add templates at the LDDA and LibraryDataset level, but will leave this here for possible future use
- ##<a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library.id, library_dataset_id=library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
- %if current_version:
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
- %endif
- %if ldda.has_data:
- <a class="action-button" href="${h.url_for( controller='admin', action='download_dataset_from_folder', id=ldda.id, library_id=library.id )}">Download this dataset</a>
- %endif
- <a class="action-button" confirm="Click OK to delete dataset '${ldda.name}'." href="${h.url_for( controller='admin', action='delete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Delete this dataset</a>
- </div>
- %elif not library.deleted and not library_dataset.folder.deleted and library_dataset.deleted:
- <div popupmenu="dataset-${ldda.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='undelete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Undelete this dataset</a>
- </div>
- %endif
- </td>
- <td width="300">${ldda.message}</td>
- <td width="150">${uploaded_by}</td>
- <td width="60">${ldda.create_time.strftime( "%Y-%m-%d" )}</td>
- </tr>
- </table>
- </div>
- </div>
-</%def>
<%def name="render_template_info( library_item, library_id, widgets, editable=True )">
<%
diff -r adff03258b45 -r 99dcba7af5b6 templates/admin/library/ldda_info.mako
--- a/templates/admin/library/ldda_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/admin/library/ldda_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -86,26 +86,14 @@
<div class="form-row">
<div>${ldda.blurb}</div>
</div>
- <div class="form-row">
- <div id="info${ldda.id}" class="historyItemBody">
- %if ldda.peek != "no peek":
+ %if ldda.peek != "no peek":
+ <div class="form-row">
+ <div id="info${ldda.id}" class="historyItemBody">
<label>Peek:</label>
<div><pre id="peek${ldda.id}" class="peek">${ldda.display_peek()}</pre></div>
- %endif
- ## Recurse for child datasets
- %if len( ldda.visible_children ) > 0:
- <div>
- There are ${len( ldda.visible_children )} secondary datasets.
- %for idx, child in enumerate( ldda.visible_children ):
- ## TODO: do we need to clarify if the child is deleted?
- %if not child.purged:
- ${ render_dataset( child, selected, library, False, False ) }
- %endif
- %endfor
- </div>
- %endif
+ </div>
</div>
- </div>
+ %endif
</div>
%if widgets:
${render_template_info( ldda, library.id, widgets, editable=False )}
diff -r adff03258b45 -r 99dcba7af5b6 templates/dataset/edit_attributes.mako
--- a/templates/dataset/edit_attributes.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/dataset/edit_attributes.mako Fri Sep 04 10:31:23 2009 -0400
@@ -190,7 +190,7 @@
</div>
<p />
-%if trans.app.security_agent.allow_action( user, user_roles, data.permitted_actions.DATASET_MANAGE_PERMISSIONS, dataset=data.dataset ):
+%if trans.app.security_agent.can_manage_dataset( user_roles, data.dataset ):
<%namespace file="/dataset/security_common.mako" import="render_permission_form" />
${render_permission_form( data.dataset, data.name, h.url_for( controller='root', action='edit', id=data.id ), user_roles )}
%elif trans.user:
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/browse_library.mako
--- a/templates/library/browse_library.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/browse_library.mako Fri Sep 04 10:31:23 2009 -0400
@@ -2,6 +2,7 @@
<%namespace file="/message.mako" import="render_msg" />
<%
from galaxy import util
+ from galaxy.web.controllers.library import active_folders
from time import strftime
user, roles = trans.get_user_and_roles()
%>
@@ -13,10 +14,6 @@
</%def>
<%
-
-def name_sorted( l ):
- return sorted( l, lambda a, b: cmp( a.name.lower(), b.name.lower() ) )
-
class RowCounter( object ):
def __init__( self ):
self.count = 0
@@ -82,21 +79,22 @@
});
</script>
-<%def name="render_dataset( library_dataset, selected, library, pad, parent, row_conter )">
+<%def name="render_dataset( ldda, library_dataset, selected, library, folder, pad, parent, row_conter )">
<%
- ## The received data must always be a LibraryDataset object, but the object id passed to methods from the drop down menu
- ## should be the underlying ldda id to prevent id collision ( which could happen when displaying children, which are always
- ## lddas ). We also need to make sure we're displaying the latest version of this library_dataset, so we display the attributes
+ ## The id passed to methods from the drop down menu should be the ldda id to prevent id collision
+ ## ( which could happen when displaying children, which are always lddas ). We also need to make
+ ## sure we're displaying the latest version of this library_dataset, so we display the attributes
## from the ldda.
- ldda = library_dataset.library_dataset_dataset_association
if ldda.user:
uploaded_by = ldda.user.email
else:
uploaded_by = 'anonymous'
- if ldda == ldda.library_dataset.library_dataset_dataset_association:
+ if ldda == library_dataset.library_dataset_dataset_association:
current_version = True
else:
current_version = False
+ can_modify_library_dataset = trans.app.security_agent.can_modify_library_item( user, roles, library_dataset )
+ can_manage_library_dataset = trans.app.security_agent.can_manage_library_item( user, roles, library_dataset )
%>
<tr class="datasetRow"
@@ -111,19 +109,19 @@
%else:
<input type="checkbox" name="ldda_ids" value="${ldda.id}"/>
%endif
- <a href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, info=True )}"><b>${ldda.name[:60]}</b></a>
+ <a href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, info=True )}"><b>${ldda.name[:60]}</b></a>
<a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="dataset-${ldda.id}-popup">
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=ldda.library_dataset ):
- <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
+ %if can_modify_library_dataset:
+ <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
%else:
- <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, information=True )}">View this dataset's information</a>
+ <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, information=True )}">View this dataset's information</a>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS, dataset=ldda.dataset ) and trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=ldda.library_dataset ):
- <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
- %if current_version and trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=ldda.library_dataset ):
- <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library_dataset.folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
+ %if can_manage_library_dataset:
+ <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
%endif
+ %if current_version and can_modify_library_dataset:
+ <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
%endif
%if ldda.has_data:
<a class="action-button" href="${h.url_for( controller='library', action='datasets', library_id=library.id, ldda_ids=str( ldda.id ), do_action='add' )}">Import this dataset into your current history</a>
@@ -141,7 +139,7 @@
%>
</%def>
-<%def name="render_folder( folder, folder_pad, created_ldda_ids, library_id, hidden_folder_ids, parent=None, row_counter=None )">
+<%def name="render_folder( folder, folder_pad, created_ldda_ids, library_id, hidden_folder_ids, parent=None, row_counter=None, root_folder=False )">
<%
if str( folder.id ) in hidden_folder_ids:
return ""
@@ -156,18 +154,15 @@
trans.app.security_agent.permitted_actions.LIBRARY_MANAGE ] )
if not can_show:
return ""
- root_folder = not folder.parent
if root_folder:
pad = folder_pad
else:
pad = folder_pad + 20
- if folder_pad == 0:
- subfolder = False
- else:
- subfolder = True
- created_ldda_id_list = util.listify( created_ldda_ids )
- if created_ldda_id_list:
- created_ldda_ids = [ int( ldda_id ) for ldda_id in created_ldda_id_list ]
+ if created_ldda_ids:
+ created_ldda_ids = [ int( ldda_id ) for ldda_id in util.listify( created_ldda_ids ) ]
+ can_add = trans.app.security_agent.can_add_library_item( user, roles, folder )
+ can_modify = trans.app.security_agent.can_modify_library_item( user, roles, folder )
+ can_manage = trans.app.security_agent.can_manage_library_item( user, roles, folder )
my_row = None
%>
%if not root_folder:
@@ -187,21 +182,19 @@
%endif
<a id="folder_img-${folder.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="folder_img-${folder.id}-popup">
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_ADD, library_item=folder ):
+ %if can_add:
<a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder.id )}">Add datasets to this folder</a>
<a class="action-button" href="${h.url_for( controller='library', action='folder', new=True, id=folder.id, library_id=library_id )}">Create a new sub-folder in this folder</a>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=folder ):
+ %if can_modify:
<a class="action-button" href="${h.url_for( controller='library', action='folder', information=True, id=folder.id, library_id=library_id )}">Edit this folder's information</a>
%else:
<a class="action-button" href="${h.url_for( controller='library', action='folder', information=True, id=folder.id, library_id=library_id )}">View this folder's information</a>
%endif
- %if forms and not folder.info_association:
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_ADD, library_item=library ):
- <a class="action-button" href="${h.url_for( controller='library', action='info_template', library_id=library.id, add=True )}">Add an information template to this folder</a>
- %endif
+ %if can_add and forms and not folder.info_association:
+ <a class="action-button" href="${h.url_for( controller='library', action='info_template', library_id=library.id, add=True )}">Add an information template to this folder</a>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=folder ):
+ %if can_manage:
<a class="action-button" href="${h.url_for( controller='library', action='folder', permissions=True, id=folder.id, library_id=library_id )}">Edit this folder's permissions</a>
%endif
</div>
@@ -213,43 +206,48 @@
row_counter.increment()
%>
%endif
- %for child_folder in name_sorted( folder.active_folders ):
- ${render_folder( child_folder, pad, created_ldda_ids, library_id, hidden_folder_ids, my_row, row_counter )}
+ <% sub_folders = active_folders( trans, folder ) %>
+ %for sub_folder in sub_folders:
+ ${render_folder( sub_folder, pad, created_ldda_ids, library_id, hidden_folder_ids, parent=my_row, row_counter=row_counter )}
%endfor
- %for library_dataset in name_sorted( folder.active_library_datasets ):
+ %for library_dataset in folder.active_library_datasets:
<%
- selected = created_ldda_ids and library_dataset.library_dataset_dataset_association.id in created_ldda_ids
+ ldda = library_dataset.library_dataset_dataset_association
+ can_access = trans.app.security_agent.can_access_dataset( roles, ldda.dataset )
+ selected = created_ldda_ids and ldda.id in created_ldda_ids
%>
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.DATASET_ACCESS, dataset=library_dataset.library_dataset_dataset_association.dataset ):
- ${render_dataset( library_dataset, selected, library, pad, my_row, row_counter )}
+ %if can_access:
+ ${render_dataset( ldda, library_dataset, selected, library, folder, pad, my_row, row_counter )}
%endif
%endfor
</%def>
<h2>Data Library “${library.name}”</h2>
+<%
+can_add = trans.app.security_agent.can_add_library_item( user, roles, library )
+can_modify = trans.app.security_agent.can_modify_library_item( user, roles, library )
+can_manage = trans.app.security_agent.can_manage_library_item( user, roles, library )
+%>
+
<ul class="manage-table-actions">
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_ADD, library_item=library ):
- %if not deleted:
- <li>
- <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library.root_folder.id )}"><span>Add datasets to this library</span></a>
- </li>
- <li>
- <a class="action-button" href="${h.url_for( controller='library', action='folder', new=True, id=library.root_folder.id, library_id=library.id )}">Add a folder to this library</a>
- </li>
- %endif
+ %if can_add and not_deleted:
+ <li>
+ <a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library.id, folder_id=library.root_folder.id )}"><span>Add datasets to this library</span></a>
+ </li>
+ <li>
+ <a class="action-button" href="${h.url_for( controller='library', action='folder', new=True, id=library.root_folder.id, library_id=library.id )}">Add a folder to this library</a>
+ </li>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=library ):
+ %if can_modify:
<li><a class="action-button" href="${h.url_for( controller='library', action='library', information=True, id=library.id )}">Edit this library's information</a></li>
%else:
<li><a class="action-button" href="${h.url_for( controller='library', action='library', information=True, id=library.id )}">View this library's information</a></li>
%endif
- %if forms and not library.info_association:
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_ADD, library_item=library ):
- <a class="action-button" href="${h.url_for( controller='library', action='info_template', library_id=library.id, add=True )}">Add an information template to this library</a>
- %endif
+ %if can_add and forms and not library.info_association:
+ <a class="action-button" href="${h.url_for( controller='library', action='info_template', library_id=library.id, add=True )}">Add an information template to this library</a>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=library ):
+ %if can_manage:
<li><a class="action-button" href="${h.url_for( controller='library', action='library', permissions=True, id=library.id )}">Edit this library's permissions</a></li>
%endif
</ul>
@@ -259,10 +257,6 @@
%endif
<form name="import_from_library" action="${h.url_for( controller='library', action='datasets', library_id=library.id )}" method="post">
- <%
- library_item_ids = {}
- library_item_ids[ 'library' ] = library.id
- %>
<table cellspacing="0" cellpadding="0" border="0" width="100%" class="grid" id="library-grid">
<thead>
<tr class="libraryTitle">
@@ -273,7 +267,7 @@
</thead>
</tr>
<% row_counter = RowCounter() %>
- ${render_folder( library.root_folder, 0, created_ldda_ids, library.id, hidden_folder_ids, None, row_counter )}
+ ${render_folder( library.root_folder, 0, created_ldda_ids, library.id, hidden_folder_ids, parent=None, row_counter=row_counter, root_folder=True )}
<tfoot>
<tr>
<td colspan="4" style="padding-left: 42px;">
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/common.mako
--- a/templates/library/common.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/common.mako Fri Sep 04 10:31:23 2009 -0400
@@ -21,7 +21,7 @@
<div class="toolForm">
<div class="toolFormTitle">Other information about ${library_item_desc} ${library_item.name}</div>
<div class="toolFormBody">
- %if editable and trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=library_item ):
+ %if editable and trans.app.security_agent.can_modify_library_item( user, roles, library_item ):
<form name="edit_info" action="${h.url_for( controller='library', action='edit_template_info', library_id=library_id, num_widgets=len( widgets ) )}" method="post">
<input type="hidden" name="library_item_id" value="${library_item.id}"/>
<input type="hidden" name="library_item_type" value="${library_item_type}"/>
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/folder_info.mako
--- a/templates/library/folder_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/folder_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -18,7 +18,7 @@
<div class="toolForm">
<div class="toolFormTitle">Edit folder name and description</div>
<div class="toolFormBody">
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=folder ):
+ %if trans.app.security_agent.can_modify_library_item( user, roles, folder ):
<form name="folder" action="${h.url_for( controller='library', action='folder', rename=True, id=folder.id, library_id=library_id )}" method="post" >
<div class="form-row">
<label>Name:</label>
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/folder_permissions.mako
--- a/templates/library/folder_permissions.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/folder_permissions.mako Fri Sep 04 10:31:23 2009 -0400
@@ -15,6 +15,6 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=folder ):
+%if trans.app.security_agent.can_manage_library_item( user, roles, folder ):
${render_permission_form( folder, folder.name, h.url_for( controller='library', action='folder', id=folder.id, library_id=library_id, permissions=True ), trans.user.all_roles() )}
%endif
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/ldda_edit_info.mako
--- a/templates/library/ldda_edit_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/ldda_edit_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -34,7 +34,7 @@
</select>
</%def>
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=ldda.library_dataset ):
+%if trans.app.security_agent.can_modify_library_item( user, roles, ldda.library_dataset ):
<div class="toolForm">
<div class="toolFormTitle">Edit attributes of ${ldda.name}</div>
<div class="toolFormBody">
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/ldda_info.mako
--- a/templates/library/ldda_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/ldda_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -40,15 +40,15 @@
Information about ${ldda.name}
<a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="dataset-${ldda.id}-popup">
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=ldda.library_dataset ):
+ %if trans.app.security_agent.can_modify_library_item( user, roles, ldda.library_dataset ):
<a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
%else:
<a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, information=True )}">View this dataset's information</a>
%endif
- %if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS, dataset=ldda.dataset ) and trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=ldda.library_dataset ):
+ %if trans.app.security_agent.can_manage_dataset( roles, ldda.dataset ) and trans.app.security_agent.can_manage_library_item( user, roles, ldda.library_dataset ):
<a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
%endif
- %if current_version and trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=ldda.library_dataset ):
+ %if current_version and trans.app.security_agent.can_modify_library_item( user, roles, ldda.library_dataset ):
<a class="action-button" href="${h.url_for( controller='library', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, replace_id=ldda.library_dataset.id )}">Upload a new version of this dataset</a>
%endif
%if ldda.has_data:
@@ -86,28 +86,14 @@
<div class="form-row">
<div>${ldda.blurb}</div>
</div>
- <div class="form-row">
- <div id="info${ldda.id}" class="historyItemBody">
- %if ldda.peek != "no peek":
+ %if ldda.peek != "no peek":
+ <div class="form-row">
+ <div id="info${ldda.id}" class="historyItemBody">
<label>Peek:</label>
<div><pre id="peek${ldda.id}" class="peek">${ldda.display_peek()}</pre></div>
- %endif
- ## Recurse for child datasets
- ## TODO: eliminate this - child datasets are deprecated, and where does
- ## render_dataset() come from anyway - it's not imported!
- %if len( ldda.visible_children ) > 0:
- <div>
- There are ${len( ldda.visible_children )} secondary datasets.
- %for idx, child in enumerate( ldda.visible_children ):
- ## TODO: do we need to clarify if the child is deleted?
- %if not child.purged:
- ${ render_dataset( child, selected, library ) }
- %endif
- %endfor
- </div>
- %endif
+ </div>
</div>
- </div>
+ %endif
</div>
%if widgets:
${render_template_info( ldda, library_id, widgets, editable=False )}
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/library_dataset_info.mako
--- a/templates/library/library_dataset_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/library_dataset_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -21,7 +21,7 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=library_dataset ):
+%if trans.app.security_agent.can_modify_library_item( user, roles, library_dataset ):
<div class="toolForm">
<div class="toolFormTitle">Edit attributes of ${library_dataset.name}</div>
<div class="toolFormBody">
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/library_dataset_permissions.mako
--- a/templates/library/library_dataset_permissions.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/library_dataset_permissions.mako Fri Sep 04 10:31:23 2009 -0400
@@ -21,7 +21,7 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, user_roles, trans.app.security_agent.permitted_actions.LIBRARY_manage, library_item=library_dataset ):
+%if trans.app.security_agent.can_manage_library_item( user, user_roles, library_dataset ):
<%
roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.table.c.name ).all()
%>
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/library_info.mako
--- a/templates/library/library_info.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/library_info.mako Fri Sep 04 10:31:23 2009 -0400
@@ -15,7 +15,7 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=library ):
+%if trans.app.security_agent.can_modify_library_item( user, roles, library ):
<div class="toolForm">
<div class="toolFormTitle">Change library name and description</div>
<div class="toolFormBody">
diff -r adff03258b45 -r 99dcba7af5b6 templates/library/library_permissions.mako
--- a/templates/library/library_permissions.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/library/library_permissions.mako Fri Sep 04 10:31:23 2009 -0400
@@ -15,7 +15,7 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, user_roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=library ):
+%if trans.app.security_agent.can_manage_library_item( user, user_roles, library ):
<%
roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.table.c.name ).all()
%>
diff -r adff03258b45 -r 99dcba7af5b6 templates/mobile/history/detail.mako
--- a/templates/mobile/history/detail.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/mobile/history/detail.mako Fri Sep 04 10:31:23 2009 -0400
@@ -37,7 +37,7 @@
<div class="secondary">
## Body for history items, extra info and actions, data "peek"
<% user, roles = trans.get_user_and_roles() %>
- %if not trans.app.security_agent.allow_action( user, roles, data.permitted_actions.DATASET_ACCESS, dataset = data.dataset ):
+ %if not trans.app.security_agent.can_access_dataset( roles, data.dataset ):
<div>You do not have permission to view this dataset.</div>
%elif data_state == "queued":
<div>Job is waiting to run</div>
diff -r adff03258b45 -r 99dcba7af5b6 templates/mobile/manage_library.mako
--- a/templates/mobile/manage_library.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/mobile/manage_library.mako Fri Sep 04 10:31:23 2009 -0400
@@ -9,7 +9,7 @@
${render_msg( msg, messagetype )}
%endif
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, library_item=library ):
+%if trans.app.security_agent.can_modify_library_item( user, roles, library ):
<div class="toolForm">
<div class="toolFormTitle">Change library name and description</div>
<div class="toolFormBody">
@@ -55,7 +55,7 @@
</div>
</div>
%endif
-%if trans.app.security_agent.allow_action( user, roles, trans.app.security_agent.permitted_actions.LIBRARY_MANAGE, library_item=library ):
+%if trans.app.security_agent.can_manage_library_item( user, roles, library ):
<%
roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.table.c.name ).all()
%>
diff -r adff03258b45 -r 99dcba7af5b6 templates/root/history_common.mako
--- a/templates/root/history_common.mako Fri Sep 04 10:23:37 2009 -0400
+++ b/templates/root/history_common.mako Fri Sep 04 10:31:23 2009 -0400
@@ -8,7 +8,7 @@
data_state = data.state
user, roles = trans.get_user_and_roles()
%>
- %if not trans.app.security_agent.allow_action( user, roles, data.permitted_actions.DATASET_ACCESS, dataset = data.dataset ):
+ %if not trans.app.security_agent.can_access_dataset( roles, data.dataset ):
<div class="historyItemWrapper historyItem historyItem-${data_state} historyItem-noPermission" id="historyItem-${data.id}">
%else:
<div class="historyItemWrapper historyItem historyItem-${data_state}" id="historyItem-${data.id}">
@@ -42,7 +42,7 @@
## Body for history items, extra info and actions, data "peek"
<div id="info${data.id}" class="historyItemBody">
- %if not trans.app.security_agent.allow_action( user, roles, data.permitted_actions.DATASET_ACCESS, dataset = data.dataset ):
+ %if not trans.app.security_agent.can_access_dataset( roles, data.dataset ):
<div>You do not have permission to view this dataset.</div>
%elif data_state == "upload":
<div>Dataset is uploading</div>
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/0cb12b9d9d4d
changeset: 2658:0cb12b9d9d4d
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Tue Sep 01 17:01:44 2009 -0400
description:
Added several options to the Samtools pileup tool
2 file(s) affected in this change:
tools/samtools/sam_pileup.py
tools/samtools/sam_pileup.xml
diffs (107 lines):
diff -r a2d69372d699 -r 0cb12b9d9d4d tools/samtools/sam_pileup.py
--- a/tools/samtools/sam_pileup.py Tue Sep 01 14:20:49 2009 -0400
+++ b/tools/samtools/sam_pileup.py Tue Sep 01 17:01:44 2009 -0400
@@ -4,15 +4,22 @@
Creates a pileup file from a bam file and a reference.
usage: %prog [options]
- -i, --input1=i: bam file
+ -p, --input1=p: bam file
-o, --output1=o: Output pileup
- -r, --ref=r: Reference file type
+ -R, --ref=R: Reference file type
-n, --ownFile=n: User-supplied fasta reference file
-d, --dbkey=d: dbkey of user-supplied file
-x, --indexDir=x: Index directory
-b, --bamIndex=b: BAM index file
+ -s, --lastCol=s: Print the mapping quality as the last column
+ -i, --indels=i: Only output lines containing indels
+ -M, --mapCap=M: Cap mapping quality
+ -c, --consensus=c: Call the consensus sequence using MAQ consensu model
+ -T, --theta=T: Theta paramter (error dependency coefficient)
+ -N, --hapNum=N: Number of haplotypes in sample
+ -r, --fraction=r: Expected fraction of differences between a pair of haplotypes
+ -I, --phredProb=I: Phred probability of an indel in sequencing/prep
-usage: %prog input1 output1 ref_type refFile ownFile dbkey index_dir bam_index
"""
import os, sys, tempfile
@@ -49,17 +56,20 @@
tmpf0bambai = '%s.bam.bai' % tmpf0.name
tmpf1 = tempfile.NamedTemporaryFile(dir=tmp_dir)
tmpf1fai = '%s.fai' % tmpf1.name
+ opts = '%s %s -M %s' % (('','-s')[options.lastCol=='yes'], ('','-i')[options.indels=='yes'], options.mapCap)
+ if options.consensus == 'yes':
+ opts += ' -c -T %s -N %s -r %s -I %s' % (options.theta, options.hapNum, options.fraction, options.phredProb)
cmd1 = None
cmd2 = 'cp %s %s; cp %s %s' % (options.input1, tmpf0bam, options.bamIndex, tmpf0bambai)
- cmd3 = 'samtools pileup -f %s %s > %s 2> /dev/null'
+ cmd3 = 'samtools pileup %s -f %s %s > %s 2> /dev/null'
if options.ref =='indexed':
full_path = "%s.fai" % seq_path
if not os.path.exists( full_path ):
stop_err( "No sequences are available for '%s', request them by reporting this error." % options.dbkey )
- cmd3 = cmd3 % (seq_path, tmpf0bam, options.output1)
+ cmd3 = cmd3 % (opts, seq_path, tmpf0bam, options.output1)
elif options.ref == 'history':
cmd1 = 'cp %s %s; cp %s.fai %s' % (options.ownFile, tmpf1.name, options.ownFile, tmpf1fai)
- cmd3 = cmd3 % (tmpf1.name, tmpf0bam, options.output1)
+ cmd3 = cmd3 % (opts, tmpf1.name, tmpf0bam, options.output1)
# index reference if necessary
if cmd1:
try:
diff -r a2d69372d699 -r 0cb12b9d9d4d tools/samtools/sam_pileup.xml
--- a/tools/samtools/sam_pileup.xml Tue Sep 01 14:20:49 2009 -0400
+++ b/tools/samtools/sam_pileup.xml Tue Sep 01 17:01:44 2009 -0400
@@ -13,6 +13,21 @@
--dbkey=${input1.metadata.dbkey}
--indexDir=${GALAXY_DATA_INDEX_DIR}
--bamIndex=${input1.metadata.bam_index}
+ --lastCol=$lastCol
+ --indels=$indels
+ --mapCap=$mapCap
+ --consensus=$c.consensus
+ #if $c.consensus == "yes":
+ --theta=$c.theta
+ --hapNum=$c.hapNum
+ --fraction=$c.fraction
+ --phredProb=$c.phredProb
+ #else:
+ --theta="None"
+ --hapNum="None"
+ --fraction="None"
+ --phredProb="None"
+ #end if
</command>
<inputs>
<conditional name="refOrHistory">
@@ -31,6 +46,28 @@
<param name="ownFile" type="data" format="fasta" metadata_name="dbkey" label="Select a reference genome" />
</when>
</conditional>
+ <param name="lastCol" type="select" label="Whether or not to print the mapping quality as the last column" help="Makes the output easier to parse, but is space inefficient">
+ <option value="no">Do not print the mapping quality as the last column</option>
+ <option value="yes">Print the mapping quality as the last column</option>
+ </param>
+ <param name="indels" type="select" label="Whether or not to print only output pileup lines containing indels">
+ <option value="no">Print all lines</option>
+ <option value="yes">Print only lines containing indels</option>
+ </param>
+ <param name="mapCap" type="integer" value="60" label="Where to cap mapping quality" />
+ <conditional name="c">
+ <param name="consensus" type="select" label="Whether or not to call the consensus sequence using the MAQ consensus model">
+ <option value="no">Don't use MAQ consensus model</option>
+ <option value="yes">Use the MAQ consensus model</option>
+ </param>
+ <when value="no" />
+ <when value="yes">
+ <param name="theta" type="float" value="0.85" label="Theta paramter (error dependency coefficient) in the MAQ consensus calling model" />
+ <param name="hapNum" type="integer" value="2" label="Number of haplotypes in the sample" help="Greater than or equal to 2" />
+ <param name="fraction" type="float" value="0.001" label="Expected fraction of differences between a pair of haplotypes" />
+ <param name="phredProb" type="integer" value="40" label="Phred probability of an indel in sequencing/prep" />
+ </when>
+ </conditional>
</inputs>
<outputs>
<data format="tabular" name="output1" />
1
0
09 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/a2d69372d699
changeset: 2657:a2d69372d699
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Tue Sep 01 14:20:49 2009 -0400
description:
More performance improvements in checking security on library folders from the Data Libraries view. Fix a bug in the Data Libraries view where empty folders were rendered when they contained no accessible datasets. Clean up requests code that determined the libraries that should be rendered in the select list on the request form.
6 file(s) affected in this change:
lib/galaxy/security/__init__.py
lib/galaxy/web/controllers/library.py
lib/galaxy/web/controllers/requests.py
lib/galaxy/web/controllers/requests_admin.py
templates/library/browse_libraries.mako
templates/library/browse_library.mako
diffs (521 lines):
diff -r d7a780065c91 -r a2d69372d699 lib/galaxy/security/__init__.py
--- a/lib/galaxy/security/__init__.py Sat Aug 29 12:08:35 2009 -0400
+++ b/lib/galaxy/security/__init__.py Tue Sep 01 14:20:49 2009 -0400
@@ -101,7 +101,7 @@
if action == self.permitted_actions.DATASET_ACCESS and action.action not in [ dp.action for dp in dataset.actions ]:
# anons only get access, and only if there are no roles required for the access action
# Other actions (or if the dataset has roles defined for the access action) fall through
- # to the false below
+ # to the false below for anons
return True
elif action.action not in [ dp.action for dp in dataset.actions ]:
if action.model == 'restrict':
@@ -119,28 +119,34 @@
# The user is missing at least one required role
return False
def allow_library_item_action( self, user, roles, action, library_item ):
+ """
+ Method for checking a permission for the current user to perform a
+ specific library action on a library item, which must be one of:
+ Library, LibraryFolder, LibraryDataset, LibraryDatasetDatasetAssociation
+ """
if user is None:
# All permissions are granted, so non-users cannot have permissions
return False
- if action.model == 'grant':
- # Check to see if user has access to any of the roles
- allowed_role_assocs = []
- for item_class, permission_class in self.library_item_assocs:
- if isinstance( library_item, item_class ):
- if permission_class == self.model.LibraryPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action, library_id=library_item.id ).all()
- elif permission_class == self.model.LibraryFolderPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action, library_folder_id=library_item.id ).all()
- elif permission_class == self.model.LibraryDatasetPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action, library_dataset_id=library_item.id ).all()
- elif permission_class == self.model.LibraryDatasetDatasetAssociationPermissions:
- allowed_role_assocs = permission_class.filter_by( action=action.action, library_dataset_dataset_association_id=library_item.id ).all()
- for allowed_role_assoc in allowed_role_assocs:
- if allowed_role_assoc.role in roles:
- return True
- return False
- else:
- raise 'Unimplemented model (%s) specified for action (%s)' % ( action.model, action.action )
+ # Check to see if user has access to any of the roles
+ allowed_role_assocs = []
+ for item_class, permission_class in self.library_item_assocs:
+ if isinstance( library_item, item_class ):
+ if permission_class == self.model.LibraryPermissions:
+ allowed_role_assocs = permission_class.filter_by( action=action.action,
+ library=library_item ).all()
+ elif permission_class == self.model.LibraryFolderPermissions:
+ allowed_role_assocs = permission_class.filter_by( action=action.action,
+ folder=library_item ).all()
+ elif permission_class == self.model.LibraryDatasetPermissions:
+ allowed_role_assocs = permission_class.filter_by( action=action.action,
+ library_dataset=library_item ).all()
+ elif permission_class == self.model.LibraryDatasetDatasetAssociationPermissions:
+ allowed_role_assocs = permission_class.filter_by( action=action.action,
+ library_dataset_dataset_association=library_item ).all()
+ for allowed_role_assoc in allowed_role_assocs:
+ if allowed_role_assoc.role in roles:
+ return True
+ return False
def get_item_action( self, action, item ):
# item must be one of: Dataset, Library, LibraryFolder, LibraryDataset, LibraryDatasetDatasetAssociation
for permission in item.actions:
@@ -291,7 +297,10 @@
permissions[ action ] = [ dhp.role ]
return permissions
def set_all_dataset_permissions( self, dataset, permissions={} ):
- # Set new permissions on a dataset, eliminating all current permissions
+ """
+ Set new permissions on a dataset, eliminating all current permissions
+ permissions looks like: { Action : [ Role, Role ] }
+ """
# Delete all of the current permissions on the dataset
# TODO: If setting ACCESS permission, at least 1 user must have every role associated with this dataset,
# or the dataset is inaccessible. See admin/library_dataset_dataset_association()
@@ -305,7 +314,10 @@
for dp in [ self.model.DatasetPermissions( action, dataset, role ) for role in roles ]:
dp.flush()
def set_dataset_permission( self, dataset, permission={} ):
- # Set a specific permission on a dataset, leaving all other current permissions on the dataset alone
+ """
+ Set a specific permission on a dataset, leaving all other current permissions on the dataset alone
+ permissions looks like: { Action : [ Role, Role ] }
+ """
# TODO: If setting ACCESS permission, at least 1 user must have every role associated with this dataset,
# or the dataset is inaccessible. See admin/library_dataset_dataset_association()
for action, roles in permission.items():
@@ -331,8 +343,11 @@
dp.delete()
dp.flush()
def get_dataset_permissions( self, dataset ):
- if not isinstance( dataset, self.model.Dataset ):
- dataset = dataset.dataset
+ """
+ Return a dictionary containing the actions and associated roles on dataset.
+ The dictionary looks like: { Action : [ Role, Role ] }
+ dataset must be an instance of Dataset()
+ """
permissions = {}
for dp in dataset.actions:
action = self.get_action( dp.action )
@@ -423,18 +438,29 @@
else:
raise 'Invalid class (%s) specified for target_library_item (%s)' % \
( target_library_item.__class__, target_library_item.__class__.__name__ )
- def show_library_item( self, user, roles, library_item ):
- if self.allow_action( user, roles, self.permitted_actions.LIBRARY_MODIFY, library_item=library_item ) or \
- self.allow_action( user, roles, self.permitted_actions.LIBRARY_MANAGE, library_item=library_item ) or \
- self.allow_action( user, roles, self.permitted_actions.LIBRARY_ADD, library_item=library_item ):
- return True
+ def show_library_item( self, user, roles, library_item, actions_to_check, hidden_folder_ids='' ):
+ """
+ This method must be sent an instance of Library() or LibraryFolder(). Recursive execution produces a
+ comma-separated string of folder ids whose folders do NOT meet the criteria for showing. Along with
+ the string, True is returned if the current user has permission to perform any 1 of actions_to_check
+ on library_item. Otherwise, cycle through all sub-folders in library_item until one is found that meets
+ this criteria, if it exists.
+ """
+ for action in actions_to_check:
+ if self.allow_library_item_action( user, roles, action, library_item ):
+ return True, hidden_folder_ids
if isinstance( library_item, self.model.Library ):
- return self.show_library_item( user, roles, library_item.root_folder )
- elif isinstance( library_item, self.model.LibraryFolder ):
- for folder in library_item.folders:
- if self.show_library_item( user, roles, folder ):
- return True
- return False
+ return self.show_library_item( user, roles, library_item.root_folder, actions_to_check, hidden_folder_ids=hidden_folder_ids )
+ if isinstance( library_item, self.model.LibraryFolder ):
+ for folder in library_item.active_folders:
+ can_show, hidden_folder_ids = self.show_library_item( user, roles, folder, actions_to_check, hidden_folder_ids=hidden_folder_ids )
+ if can_show:
+ return True, hidden_folder_ids
+ if hidden_folder_ids:
+ hidden_folder_ids = '%s,%d' % ( hidden_folder_ids, folder.id )
+ else:
+ hidden_folder_ids = '%d' % folder.id
+ return False, hidden_folder_ids
def set_entity_user_associations( self, users=[], roles=[], groups=[], delete_existing_assocs=True ):
for user in users:
if delete_existing_assocs:
@@ -482,10 +508,12 @@
if 'role' in kwd:
return self.model.GroupRoleAssociation.filter_by( role_id = kwd['role'].id, group_id = kwd['group'].id ).first()
raise 'No valid method of associating provided components: %s' % kwd
- def check_folder_contents( self, user, roles, folder ):
+ def check_folder_contents( self, user, roles, folder, hidden_folder_ids='' ):
"""
- Return true if there are any datasets under 'folder' that are public or that the
- user has access permission on.
+ This method must always be sent an instance of LibraryFolder(). Recursive execution produces a
+ comma-separated string of folder ids whose folders do NOT meet the criteria for showing. Along
+ with the string, True is returned if the current user has permission to access folder. Otherwise,
+ cycle through all sub-folders in folder until one is found that meets this criteria, if it exists.
"""
action = self.permitted_actions.DATASET_ACCESS.action
lddas = self.sa_session.query( self.model.LibraryDatasetDatasetAssociation ) \
@@ -498,14 +526,19 @@
ldda_access = self.get_item_action( action, ldda.dataset )
if ldda_access is None:
# Dataset is public
- return True
+ return True, hidden_folder_ids
if ldda_access.role in roles:
# The current user has access permission on the dataset
- return True
+ return True, hidden_folder_ids
for sub_folder in folder.active_folders:
- if self.check_folder_contents( user, roles, sub_folder ):
- return True
- return False
+ can_access, hidden_folder_ids = self.check_folder_contents( user, roles, sub_folder, hidden_folder_ids=hidden_folder_ids )
+ if can_access:
+ return True, hidden_folder_ids
+ if hidden_folder_ids:
+ hidden_folder_ids = '%s,%d' % ( hidden_folder_ids, sub_folder.id )
+ else:
+ hidden_folder_ids = '%d' % sub_folder.id
+ return False, hidden_folder_ids
class HostAgent( RBACAgent ):
"""
diff -r d7a780065c91 -r a2d69372d699 lib/galaxy/web/controllers/library.py
--- a/lib/galaxy/web/controllers/library.py Sat Aug 29 12:08:35 2009 -0400
+++ b/lib/galaxy/web/controllers/library.py Tue Sep 01 14:20:49 2009 -0400
@@ -65,23 +65,24 @@
user, roles = trans.get_user_and_roles()
all_libraries = trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted==False ) \
.order_by( trans.app.model.Library.name ).all()
- authorized_libraries = []
+ library_actions = [ trans.app.security_agent.permitted_actions.LIBRARY_ADD,
+ trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
+ trans.app.security_agent.permitted_actions.LIBRARY_MANAGE ]
+ # The authorized_libraries dictionary looks like: { library : '1,2' }, library : '3' }
+ # Its keys are the libraries that should be displayed for the current user and whose values are a
+ # string of comma-separated folder ids, of the associated folders the should NOT be displayed.
+ # The folders that should not be displayed may not be a complete list, but it is ultimately passed
+ # to the browse_library() method and the browse_library.mako template to keep from re-checking the
+ # same folders when the library is rendered.
+ authorized_libraries = {}
for library in all_libraries:
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_ADD,
- library_item=library ) or \
- trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=library ) or \
- trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MANAGE,
- library_item=library ) or \
- trans.app.security_agent.check_folder_contents( user, roles, library.root_folder ) or \
- trans.app.security_agent.show_library_item( user, roles, library ):
- authorized_libraries.append( library )
+ can_access, hidden_folder_ids = trans.app.security_agent.check_folder_contents( user, roles, library.root_folder )
+ if can_access:
+ authorized_libraries[ library ] = hidden_folder_ids
+ else:
+ can_show, hidden_folder_ids = trans.app.security_agent.show_library_item( user, roles, library, library_actions )
+ if can_show:
+ authorized_libraries[ library ] = hidden_folder_ids
return trans.fill_template( '/library/browse_libraries.mako',
libraries=authorized_libraries,
default_action=params.get( 'default_action', None ),
@@ -94,6 +95,7 @@
messagetype = params.get( 'messagetype', 'done' )
id = params.get( 'id', None )
if not id:
+ # To handle bots
msg = "You must specify a library id."
return trans.response.send_redirect( web.url_for( controller='library',
action='browse_libraries',
@@ -102,6 +104,7 @@
messagetype='error' ) )
library = library=trans.app.model.Library.get( id )
if not library:
+ # To handle bots
msg = "Invalid library id ( %s )."
return trans.response.send_redirect( web.url_for( controller='library',
action='browse_libraries',
@@ -109,9 +112,11 @@
msg=util.sanitize_text( msg ),
messagetype='error' ) )
created_ldda_ids = params.get( 'created_ldda_ids', '' )
+ hidden_folder_ids = util.listify( util.restore_text( params.get( 'hidden_folder_ids', '' ) ) )
return trans.fill_template( '/library/browse_library.mako',
library=trans.app.model.Library.get( id ),
created_ldda_ids=created_ldda_ids,
+ hidden_folder_ids=hidden_folder_ids,
default_action=params.get( 'default_action', None ),
comptypes=comptypes,
msg=msg,
@@ -1197,25 +1202,3 @@
edit_info=True,
msg=util.sanitize_text( msg ),
messagetype='done' ) )
-
-def get_authorized_libs( trans, user ):
- # TODO: this is a mis-named function - the name should reflect the authorization policy
- # If user is not authenticated, this method should not even be called. Also, it looks
- # like all that is using this is the new request stuff, so it should be placed there.
- if not user:
- return []
- roles = user.all_roles()
- all_libraries = trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted == False ) \
- .order_by( trans.app.model.Library.name ).all()
- authorized_libraries = []
- for library in all_libraries:
- if trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_ADD,
- library_item=library ) \
- or trans.app.security_agent.allow_action( user,
- roles,
- trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
- library_item=library ):
- authorized_libraries.append( library )
- return authorized_libraries
diff -r d7a780065c91 -r a2d69372d699 lib/galaxy/web/controllers/requests.py
--- a/lib/galaxy/web/controllers/requests.py Sat Aug 29 12:08:35 2009 -0400
+++ b/lib/galaxy/web/controllers/requests.py Tue Sep 01 14:20:49 2009 -0400
@@ -9,8 +9,6 @@
from datetime import datetime, timedelta
from cgi import escape, FieldStorage
from galaxy.web.controllers.forms import get_form_widgets
-from galaxy.web.controllers.library import get_authorized_libs
-
log = logging.getLogger( __name__ )
@@ -432,8 +430,6 @@
return self.__show_request_form(trans, **kwd)
elif params.get('refresh', False) == 'true':
return self.__show_request_form(trans, **kwd)
-
-
def __show_request_form(self, trans, **kwd):
params = util.Params( kwd )
msg = util.restore_text( params.get( 'msg', '' ) )
@@ -460,7 +456,25 @@
helptext='(Optional)'))
# libraries selectbox
- libraries = get_authorized_libs(trans, trans.user)
+ all_libraries = trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted == False ) \
+ .order_by( trans.app.model.Library.name ).all()
+ user, roles = trans.get_user_and_roles()
+ actions_to_check = [ trans.app.security_agent.permitted_actions.LIBRARY_ADD ]
+ # The libraries dictionary looks like: { library : '1,2' }, library : '3' }
+ # Its keys are the libraries that should be displayed for the current user and whose values are a
+ # string of comma-separated folder ids, of the associated folders the should NOT be displayed.
+ # The folders that should not be displayed may not be a complete list, but it is ultimately passed
+ # to the calling method to keep from re-checking the same folders when the library / folder
+ # select lists are rendered.
+ #
+ # TODO: RC, when you add the folders select list to your request form, take advantage of the hidden_folder_ids
+ # so that you do not need to check those same folders yet again when populating the select list.
+ #
+ libraries = {}
+ for library in all_libraries:
+ can_show, hidden_folder_ids = trans.app.security_agent.show_library_item( user, roles, library, actions_to_check )
+ if can_show:
+ libraries[ library ] = hidden_folder_ids
libui = self.__library_ui(libraries, **kwd)
widgets = widgets + libui
widgets = widgets + get_form_widgets(trans, request_type.request_form, contents=[], **kwd)
@@ -470,12 +484,10 @@
widgets=widgets,
msg=msg,
messagetype=messagetype)
-
def __library_ui(self, libraries, request=None, **kwd):
params = util.Params( kwd )
lib_id = params.get( 'library_id', 'none' )
- lib_list = SelectField('library_id', refresh_on_change=True,
- refresh_on_change_values=['new'])
+ lib_list = SelectField( 'library_id', refresh_on_change=True, refresh_on_change_values=['new'] )
if request and lib_id == 'none':
if request.library:
lib_id = str(request.library.id)
@@ -483,7 +495,7 @@
lib_list.add_option('Select one', 'none', selected=True)
else:
lib_list.add_option('Select one', 'none')
- for lib in libraries:
+ for lib, hidden_folder_ids in libraries.items():
if str(lib.id) == lib_id:
lib_list.add_option(lib.name, lib.id, selected=True)
else:
@@ -653,9 +665,27 @@
widgets.append(dict(label='Description',
widget=TextField('desc', 40, desc),
helptext='(Optional)'))
-
# libraries selectbox
- libraries = get_authorized_libs(trans, trans.user)
+ all_libraries = trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted == False ) \
+ .order_by( trans.app.model.Library.name ).all()
+ user, roles = trans.get_user_and_roles()
+ actions_to_check = [ trans.app.security_agent.permitted_actions.LIBRARY_ADD ]
+ # The libraries dictionary looks like:
+ # { library : '1,2' }, library : '3' }
+ # Its keys are the libraries that should be displayed for the current user and whose values are a
+ # string of comma-separated folder ids, of the associated folders the should NOT be displayed.
+ # The folders that should not be displayed may not be a complete list, but it is ultimately passed
+ # to the calling method to keep from re-checking the same folders when the library / folder
+ # select lists are rendered.
+ #
+ # TODO: RC, when you add the folders select list to your request form, take advantage of the hidden_folder_ids
+ # so that you do not need to check those same folders yet again when populating the select list.
+ #
+ libraries = {}
+ for library in all_libraries:
+ can_show, hidden_folder_ids = trans.app.security_agent.show_library_item( user, roles, library, actions_to_check )
+ if can_show:
+ libraries[ library ] = hidden_folder_ids
libui = self.__library_ui(libraries, request, **kwd)
widgets = widgets + libui
widgets = widgets + get_form_widgets(trans, request.type.request_form, request.values.content, **kwd)
diff -r d7a780065c91 -r a2d69372d699 lib/galaxy/web/controllers/requests_admin.py
--- a/lib/galaxy/web/controllers/requests_admin.py Sat Aug 29 12:08:35 2009 -0400
+++ b/lib/galaxy/web/controllers/requests_admin.py Tue Sep 01 14:20:49 2009 -0400
@@ -8,7 +8,6 @@
from galaxy.web.form_builder import *
from datetime import datetime, timedelta
from galaxy.web.controllers.forms import get_form_widgets
-from galaxy.web.controllers.library import get_authorized_libs
log = logging.getLogger( __name__ )
@@ -709,14 +708,32 @@
return select_user
def __library_ui(self, trans, user, request=None, **kwd):
+ """
+ Return a list of libraries for which user has the permission
+ to perform the LIBRARY_ADD action on any of it's folders
+ """
params = util.Params( kwd )
lib_id = params.get( 'library_id', 'none' )
- if not user:
- libraries = trans.app.model.Library.filter(trans.app.model.Library.table.c.deleted == False).order_by(trans.app.model.Library.name).all()
- else:
- libraries = get_authorized_libs(trans, user)
- lib_list = SelectField('library_id', refresh_on_change=True,
- refresh_on_change_values=['new'])
+ all_libraries = trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted == False ) \
+ .order_by( trans.app.model.Library.name ).all()
+ roles = user.all_roles()
+ actions_to_check = [ trans.app.security_agent.permitted_actions.LIBRARY_ADD ]
+ # The libraries dictionary looks like: { library : '1,2' }, library : '3' }
+ # Its keys are the libraries that should be displayed for the current user and whose values are a
+ # string of comma-separated folder ids, of the associated folders the should NOT be displayed.
+ # The folders that should not be displayed may not be a complete list, but it is ultimately passed
+ # to the calling method to keep from re-checking the same folders when the library / folder
+ # select lists are rendered.
+ #
+ # TODO: RC, when you add the folders select list to your request form, take advantage of the hidden_folder_ids
+ # so that you do not need to check those same folders yet again when populating the select list.
+ #
+ libraries = {}
+ for library in all_libraries:
+ can_show, hidden_folder_ids = trans.app.security_agent.show_library_item( user, roles, library, actions_to_check )
+ if can_show:
+ libraries[ library ] = hidden_folder_ids
+ lib_list = SelectField( 'library_id', refresh_on_change=True, refresh_on_change_values=['new'] )
if request and lib_id == 'none':
if request.library:
lib_id = str(request.library.id)
@@ -724,7 +741,7 @@
lib_list.add_option('Select one', 'none', selected=True)
else:
lib_list.add_option('Select one', 'none')
- for lib in libraries:
+ for lib, hidden_folder_ids in libraries.items():
if str(lib.id) == lib_id:
lib_list.add_option(lib.name, lib.id, selected=True)
else:
diff -r d7a780065c91 -r a2d69372d699 templates/library/browse_libraries.mako
--- a/templates/library/browse_libraries.mako Sat Aug 29 12:08:35 2009 -0400
+++ b/templates/library/browse_libraries.mako Tue Sep 01 14:20:49 2009 -0400
@@ -20,9 +20,9 @@
</tr>
</thead>
<tbody>
- %for library in libraries:
+ %for library, hidden_folder_ids in libraries.items():
<tr class="libraryRow libraryOrFolderRow" id="libraryRow">
- <td><a href="${h.url_for( controller='library', action='browse_library', id=library.id )}">${library.name}</a></td>
+ <td><a href="${h.url_for( controller='library', action='browse_library', id=library.id, hidden_folder_ids=hidden_folder_ids )}">${library.name}</a></td>
<td><i>${library.description}</i></td>
</tr>
%endfor
diff -r d7a780065c91 -r a2d69372d699 templates/library/browse_library.mako
--- a/templates/library/browse_library.mako Sat Aug 29 12:08:35 2009 -0400
+++ b/templates/library/browse_library.mako Tue Sep 01 14:20:49 2009 -0400
@@ -3,7 +3,6 @@
<%
from galaxy import util
from time import strftime
-
user, roles = trans.get_user_and_roles()
%>
@@ -142,19 +141,21 @@
%>
</%def>
-<%def name="render_folder( folder, folder_pad, created_ldda_ids, library_id, parent=None, row_counter=None )">
+<%def name="render_folder( folder, folder_pad, created_ldda_ids, library_id, hidden_folder_ids, parent=None, row_counter=None )">
<%
- def show_folder():
- ## TODO: instead of calling check_folder_contents(), which we've already done prior to getting here,
- ## add a new method that will itself call check_folder_contents() and build a list of accessible folders
- ## for each library - this should improve performance dor large libraries where the current user can only
- ## access a small number of folders.
- if trans.app.security_agent.check_folder_contents( user, roles, folder ) or \
- trans.app.security_agent.show_library_item( user, roles, folder ):
- return True
- return False
- if not show_folder:
+ if str( folder.id ) in hidden_folder_ids:
return ""
+ can_access, folder_ids = trans.app.security_agent.check_folder_contents( user, roles, folder )
+ if not can_access:
+ can_show, folder_ids = \
+ trans.app.security_agent.show_library_item( user,
+ roles,
+ folder,
+ [ trans.app.security_agent.permitted_actions.LIBRARY_ADD,
+ trans.app.security_agent.permitted_actions.LIBRARY_MODIFY,
+ trans.app.security_agent.permitted_actions.LIBRARY_MANAGE ] )
+ if not can_show:
+ return ""
root_folder = not folder.parent
if root_folder:
pad = folder_pad
@@ -213,7 +214,7 @@
%>
%endif
%for child_folder in name_sorted( folder.active_folders ):
- ${render_folder( child_folder, pad, created_ldda_ids, library_id, my_row, row_counter )}
+ ${render_folder( child_folder, pad, created_ldda_ids, library_id, hidden_folder_ids, my_row, row_counter )}
%endfor
%for library_dataset in name_sorted( folder.active_library_datasets ):
<%
@@ -272,7 +273,7 @@
</thead>
</tr>
<% row_counter = RowCounter() %>
- ${render_folder( library.root_folder, 0, created_ldda_ids, library.id, None, row_counter )}
+ ${render_folder( library.root_folder, 0, created_ldda_ids, library.id, hidden_folder_ids, None, row_counter )}
<tfoot>
<tr>
<td colspan="4" style="padding-left: 42px;">
1
0
Hi,
I have a local install of Galaxy and would like to keep up-to-date with
the latest updates, but I'm not sure what functionality has changed nor
how significant the changes are. The mercurial updates on this list are
too detailed. I just want to know what the benefit of an update would
be, not which files have changed.
Would it be possible to start having more managed releases with a
changelog between each release? That way it will be much clearer what
the functional benefits of updating to a newer release would be.
Cheers,
Chris
--
Dr Chris Cole
Senior Bioinformatics Research Officer
School of Life Sciences Research
University of Dundee
Dow Street
Dundee
DD1 5EH
Scotland, UK
url: http://network.nature.com/profile/drchriscole
e-mail: chris(a)compbio.dundee.ac.uk
Tel: +44 (0)1382 388 721
The University of Dundee is a registered Scottish charity, No: SC015096
4
6
Hello,
Where can I find documentation on how to upload a library dataset and assign
roles to users and groups for a local Galaxy installation?
Thanks,
Kimberly
2
1