annotate lib/galaxy/datatypes/gmap.py @ 10:93911bac43da

Modifications for ToolShed proprietary data types
author Jim Johnson <jj@umn.edu>
date Thu, 05 Jan 2012 14:31:24 -0600
parents 3be0e0a858fe
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
1 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
2 GMAP indexes
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
3 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
4 import logging
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
5 import os,os.path,re
10
93911bac43da Modifications for ToolShed proprietary data types
Jim Johnson <jj@umn.edu>
parents: 6
diff changeset
6 import galaxy.datatypes.data
93911bac43da Modifications for ToolShed proprietary data types
Jim Johnson <jj@umn.edu>
parents: 6
diff changeset
7 from galaxy.datatypes.data import Text
6
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
8 from galaxy import util
10
93911bac43da Modifications for ToolShed proprietary data types
Jim Johnson <jj@umn.edu>
parents: 6
diff changeset
9 from galaxy.datatypes.metadata import MetadataElement
6
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
10
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
11 log = logging.getLogger(__name__)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
12
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
13 class GmapDB( Text ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
14 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
15 A GMAP DB for indexes
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
16 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
17 MetadataElement( name="db_name", desc="The db name for this index set", default='unknown', set_in_upload=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
18 MetadataElement( name="basesize", default="12", desc="The basesize for offsetscomp", visible=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
19 MetadataElement( name="kmers", default=[''], desc="The kmer sizes for indexes", visible=True, no_value=[''], readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
20 MetadataElement( name="map_dir", desc="The maps directory", default='unknown', set_in_upload=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
21 MetadataElement( name="maps", default=[''], desc="The names of maps stored for this gmap gmapdb", visible=True, no_value=[''], readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
22 MetadataElement( name="snps", default=[''], desc="The names of SNP indexes stored for this gmapdb", visible=True, no_value=[''], readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
23 MetadataElement( name="cmet", default=False, desc="Has a cmet index", visible=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
24 MetadataElement( name="atoi", default=False, desc="Has a atoi index", visible=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
25
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
26 file_ext = 'gmapdb'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
27 is_binary = True
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
28 composite_type = 'auto_primary_file'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
29 allow_datatype_change = False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
30
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
31 def generate_primary_file( self, dataset = None ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
32 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
33 This is called only at upload to write the html file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
34 cannot rename the datasets here - they come with the default unfortunately
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
35 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
36 return '<html><head></head><body>AutoGenerated Primary File for Composite Dataset</body></html>'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
37
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
38 def regenerate_primary_file(self,dataset):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
39 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
40 cannot do this until we are setting metadata
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
41 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
42 bn = dataset.metadata.db_name
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
43 log.info( "GmapDB regenerate_primary_file %s" % (bn))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
44 rval = ['<html><head><title>GMAPDB %s</title></head><p/><H3>GMAPDB %s</H3><p/>cmet %s<br>atoi %s<H4>Maps:</H4><ul>' % (bn,bn,dataset.metadata.cmet,dataset.metadata.atoi)]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
45 for i,name in enumerate(dataset.metadata.maps):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
46 rval.append( '<li>%s' % name)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
47 rval.append( '</ul></html>' )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
48 f = file(dataset.file_name,'w')
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
49 f.write("\n".join( rval ))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
50 f.write('\n')
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
51 f.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
52
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
53 def set_peek( self, dataset, is_multi_byte=False ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
54 log.info( "GmapDB set_peek %s" % (dataset))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
55 if not dataset.dataset.purged:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
56 dataset.peek = "GMAPDB index %s\n cmet %s\n atoi %s\n maps %s" % ( dataset.metadata.db_name,dataset.metadata.cmet,dataset.metadata.atoi,dataset.metadata.maps )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
57 dataset.blurb = "GMAPDB %s" % ( dataset.metadata.db_name )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
58 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
59 dataset.peek = 'file does not exist'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
60 dataset.blurb = 'file purged from disk'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
61 def display_peek( self, dataset ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
62 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
63 return dataset.peek
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
64 except:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
65 return "GMAP index file"
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
66
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
67 def sniff( self, filename ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
68 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
69 def set_meta( self, dataset, overwrite = True, **kwd ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
70 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
71 Expecting:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
72 extra_files_path/<db_name>/db_name>.ref<basesize><kmer>3<index>
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
73 extra_files_path/db_name/db_name.ref1[2345]1[2345]3offsetscomp
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
74 extra_files_path/db_name/db_name.ref1[2345]1[2345]3positions
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
75 extra_files_path/db_name/db_name.ref1[2345]1[2345]3gammaptrs
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
76 index maps:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
77 extra_files_path/db_name/db_name.maps/*.iit
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
78 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
79 log.info( "GmapDB set_meta %s %s" % (dataset,dataset.extra_files_path))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
80 pat = '(.*)\.((ref)|(met)[atgc][atgc]|(a2i)[atgc][atgc])((\d\d)(\d\d))?3positions(\.(.+))?'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
81 efp = dataset.extra_files_path
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
82 flist = os.listdir(efp)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
83 for i,fname in enumerate(flist):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
84 log.info( "GmapDB set_meta %s %s" % (i,fname))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
85 fpath = os.path.join(efp,fname)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
86 if os.path.isdir(fpath):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
87 ilist = os.listdir(fpath)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
88 kmers = {'':'default'} # HACK '' empty key added so user has default choice when selecting kmer from metadata
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
89 for j,iname in enumerate(ilist):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
90 log.info( "GmapDB set_meta file %s %s" % (j,iname))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
91 ipath = os.path.join(fpath,iname)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
92 if os.path.isdir(ipath): # find maps
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
93 dataset.metadata.map_dir = iname
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
94 for mapfile in os.listdir(ipath):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
95 mapname = mapfile.replace('.iit','')
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
96 log.info( "GmapDB set_meta map %s %s" % (mapname,mapfile))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
97 dataset.metadata.maps.append(mapname)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
98 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
99 m = re.match(pat,iname)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
100 if m:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
101 log.info( "GmapDB set_meta m %s %s " % (iname, m))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
102 assert len(m.groups()) == 10
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
103 dataset.metadata.db_name = fname
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
104 if m.groups()[2] == 'ref':
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
105 if m.groups()[-1] != None:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
106 dataset.metadata.snps.append(m.groups()[-1])
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
107 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
108 if m.groups()[-3] != None:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
109 k = int(m.groups()[-3])
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
110 kmers[k] = k
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
111 if m.groups()[-4] != None:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
112 dataset.metadata.basesize = int( m.groups()[-4])
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
113 elif m.groups()[3] == 'met':
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
114 dataset.metadata.cmet = True
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
115 elif m.groups()[4] == 'a2i':
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
116 dataset.metadata.atoi = True
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
117 dataset.metadata.kmers = kmers.keys()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
118
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
119 class GmapSnpIndex( Text ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
120 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
121 A GMAP SNP index created by snpindex
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
122 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
123 MetadataElement( name="db_name", desc="The db name for this index set", default='unknown', set_in_upload=True, readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
124 MetadataElement( name="snps_name", default='snps', desc="The name of SNP index", visible=True, no_value='', readonly=True )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
125
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
126 file_ext = 'gmapsnpindex'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
127 is_binary = True
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
128 composite_type = 'auto_primary_file'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
129 allow_datatype_change = False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
130
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
131 def generate_primary_file( self, dataset = None ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
132 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
133 This is called only at upload to write the html file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
134 cannot rename the datasets here - they come with the default unfortunately
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
135 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
136 return '<html><head></head><body>AutoGenerated Primary File for Composite Dataset</body></html>'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
137
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
138 def regenerate_primary_file(self,dataset):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
139 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
140 cannot do this until we are setting metadata
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
141 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
142 bn = dataset.metadata.db_name
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
143 log.info( "GmapDB regenerate_primary_file %s" % (bn))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
144 rval = ['<html><head><title>GMAPDB %s</title></head><p/><H3>GMAPDB %s</H3><p/>cmet %s<br>atoi %s<H4>Maps:</H4><ul>' % (bn,bn,dataset.metadata.cmet,dataset.metadata.atoi)]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
145 for i,name in enumerate(dataset.metadata.maps):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
146 rval.append( '<li>%s' % name)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
147 rval.append( '</ul></html>' )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
148 f = file(dataset.file_name,'w')
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
149 f.write("\n".join( rval ))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
150 f.write('\n')
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
151 f.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
152 def set_peek( self, dataset, is_multi_byte=False ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
153 log.info( "GmapSnpIndex set_peek %s" % (dataset))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
154 if not dataset.dataset.purged:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
155 dataset.peek = "GMAP SNPindex %s on %s\n" % ( dataset.metadata.snps_name,dataset.metadata.db_name)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
156 dataset.blurb = "GMAP SNPindex %s on %s\n" % ( dataset.metadata.snps_name,dataset.metadata.db_name)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
157 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
158 dataset.peek = 'file does not exist'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
159 dataset.blurb = 'file purged from disk'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
160 def display_peek( self, dataset ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
161 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
162 return dataset.peek
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
163 except:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
164 return "GMAP SNP index"
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
165
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
166 def sniff( self, filename ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
167 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
168 def set_meta( self, dataset, overwrite = True, **kwd ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
169 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
170 Expecting:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
171 extra_files_path/snp_name.iit
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
172 extra_files_path/db_name/db_name.ref1[2345]1[2345]3offsetscomp.snp_name
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
173 extra_files_path/db_name/db_name.ref1[2345]1[2345]3positions.snp_name
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
174 extra_files_path/db_name/db_name.ref1[2345]1[2345]3gammaptrs.snp_name
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
175 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
176 log.info( "GmapSnpIndex set_meta %s %s" % (dataset,dataset.extra_files_path))
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
177 pat = '(.*)\.(ref((\d\d)(\d\d))?3positions)\.(.+)?'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
178 efp = dataset.extra_files_path
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
179 flist = os.listdir(efp)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
180 for i,fname in enumerate(flist):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
181 m = re.match(pat,fname)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
182 if m:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
183 assert len(m.groups()) == 6
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
184 dataset.metadata.db_name = m.groups()[0]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
185 dataset.metadata.snps_name = m.groups()[-1]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
186
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
187
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
188
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
189
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
190 class IntervalIndexTree( Text ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
191 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
192 A GMAP Interval Index Tree Map
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
193 created by iit_store
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
194 (/path/to/map)/(mapname).iit
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
195 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
196 file_ext = 'iit'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
197 is_binary = True
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
198
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
199 class SpliceSitesIntervalIndexTree( IntervalIndexTree ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
200 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
201 A GMAP Interval Index Tree Map
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
202 created by iit_store
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
203 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
204 file_ext = 'splicesites.iit'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
205
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
206 class IntronsIntervalIndexTree( IntervalIndexTree ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
207 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
208 A GMAP Interval Index Tree Map
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
209 created by iit_store
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
210 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
211 file_ext = 'introns.iit'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
212
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
213 class SNPsIntervalIndexTree( IntervalIndexTree ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
214 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
215 A GMAP Interval Index Tree Map
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
216 created by iit_store
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
217 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
218 file_ext = 'snps.iit'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
219
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
220 class TallyIntervalIndexTree( IntervalIndexTree ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
221 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
222 A GMAP Interval Index Tree Map
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
223 created by iit_store
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
224 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
225 file_ext = 'tally.iit'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
226
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
227 class IntervalAnnotation( Text ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
228 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
229 Class describing a GMAP Interval format:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
230 >label coords optional_tag
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
231 optional_annotation (which may be zero, one, or multiple lines)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
232 The coords should be of the form:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
233 chr:position
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
234 chr:startposition..endposition
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
235 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
236 file_ext = 'gmap_annotation'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
237 """Add metadata elements"""
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
238 MetadataElement( name="annotations", default=0, desc="Number of interval annotations", readonly=True, optional=True, visible=False, no_value=0 )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
239
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
240 def set_meta( self, dataset, **kwd ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
241 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
242 Set the number of annotations and the number of data lines in dataset.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
243 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
244 data_lines = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
245 annotations = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
246 for line in file( dataset.file_name ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
247 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
248 if line and line.startswith( '>' ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
249 annotations += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
250 data_lines +=1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
251 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
252 data_lines += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
253 dataset.metadata.data_lines = data_lines
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
254 dataset.metadata.annotations = annotations
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
255 def set_peek( self, dataset, is_multi_byte=False ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
256 if not dataset.dataset.purged:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
257 dataset.peek = data.get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
258 if dataset.metadata.annotations:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
259 dataset.blurb = "%s annotations" % util.commaify( str( dataset.metadata.annotations ) )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
260 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
261 dataset.blurb = data.nice_size( dataset.get_size() )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
262 else:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
263 dataset.peek = 'file does not exist'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
264 dataset.blurb = 'file purged from disk'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
265
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
266 def sniff( self, filename ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
267 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
268 Determines whether the file is a gmap annotation file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
269 Format:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
270 >label coords optional_tag
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
271 optional_annotation (which may be zero, one, or multiple lines)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
272 For example, the label may be an EST accession, with the coords
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
273 representing its genomic position. Labels may be duplicated if
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
274 necessary.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
275 The coords should be of the form
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
276 chr:position
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
277 chr:startposition..endposition
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
278 The term "chr:position" is equivalent to "chr:position..position". If
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
279 you want to indicate that the interval is on the minus strand or
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
280 reverse direction, then <endposition> may be less than <startposition>.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
281 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
282 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
283 pat = '>(\S+)\s((\S+):(\d+)(\.\.(\d+))?(\s.(.+))?$' #>label chr:position[..endposition][ optional_tag]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
284 fh = open( filename )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
285 count = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
286 while True and count < 10:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
287 line = fh.readline()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
288 if not line:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
289 break #EOF
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
290 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
291 if line: #first non-empty line
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
292 if line.startswith( '>' ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
293 count += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
294 if re.match(pat,line) == None: # Failed to match
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
295 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
296 finally:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
297 fh.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
298 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
299
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
300 class SpliceSiteAnnotation(IntervalAnnotation):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
301 file_ext = 'gmap_splicesites'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
302 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
303 Example:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
304 >NM_004448.ERBB2.exon1 17:35110090..35110091 donor 6678
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
305 >NM_004448.ERBB2.exon2 17:35116768..35116769 acceptor 6678
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
306 >NM_004448.ERBB2.exon2 17:35116920..35116921 donor 1179
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
307 >NM_004448.ERBB2.exon3 17:35118099..35118100 acceptor 1179
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
308 >NM_004449.ERG.exon1 21:38955452..38955451 donor 783
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
309 >NM_004449.ERG.exon2 21:38878740..38878739 acceptor 783
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
310 >NM_004449.ERG.exon2 21:38878638..38878637 donor 360
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
311 >NM_004449.ERG.exon3 21:38869542..38869541 acceptor 360
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
312 Each line must start with a ">" character, then be followed by an
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
313 identifier, which may have duplicates and can have any format, with
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
314 the gene name or exon number shown here only as a suggestion. Then
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
315 there should be the chromosomal coordinates which straddle the
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
316 exon-intron boundary, so one coordinate is on the exon and one is on
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
317 the intron. (Coordinates are all 1-based, so the first character of a
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
318 chromosome is number 1.) Finally, there should be the splice type:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
319 "donor" or "acceptor". You may optionally store the intron distance
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
320 at the end. GSNAP can use this intron distance, if it is longer than
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
321 its value for --localsplicedist, to look for long introns at that
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
322 splice site. The same splice site may have different intron distances
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
323 in the database; GSNAP will use the longest intron distance reported
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
324 in searching for long introns.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
325 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
326 def sniff( self, filename ): # TODO
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
327 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
328 Determines whether the file is a gmap splice site annotation file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
329 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
330 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
331 pat = '>(\S+\.intron\d+)\s((\S+):(\d+)\.\.(\d+))\s(donor|acceptor)(\s(\d+))?$' #>label chr:position..position donor|acceptor[ intron_dist]
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
332 fh = open( filename )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
333 count = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
334 while True and count < 10:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
335 line = fh.readline()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
336 if not line:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
337 break #EOF
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
338 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
339 if line: #first non-empty line
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
340 count += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
341 if re.match(pat,line) == None: # Failed to match
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
342 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
343 finally:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
344 fh.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
345 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
346
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
347 class IntronAnnotation(IntervalAnnotation):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
348 file_ext = 'gmap_introns'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
349 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
350 Example:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
351 >NM_004448.ERBB2.intron1 17:35110090..35116769
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
352 >NM_004448.ERBB2.intron2 17:35116920..35118100
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
353 >NM_004449.ERG.intron1 21:38955452..38878739
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
354 >NM_004449.ERG.intron2 21:38878638..38869541
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
355 The coordinates are 1-based, and specify the exon coordinates
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
356 surrounding the intron, with the first coordinate being from the donor
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
357 exon and the second one being from the acceptor exon.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
358 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
359 def sniff( self, filename ): # TODO
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
360 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
361 Determines whether the file is a gmap Intron annotation file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
362 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
363 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
364 pat = '>(\S+\.intron\d+)\s((\S+):(\d+)\.\.(\d+)(\s(.)+)?$' #>label chr:position
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
365 fh = open( filename )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
366 count = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
367 while True and count < 10:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
368 line = fh.readline()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
369 if not line:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
370 break #EOF
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
371 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
372 if line: #first non-empty line
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
373 count += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
374 if re.match(pat,line) == None: # Failed to match
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
375 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
376 finally:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
377 fh.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
378 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
379
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
380 class SNPAnnotation(IntervalAnnotation):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
381 file_ext = 'gmap_snps'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
382 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
383 Example:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
384 >rs62211261 21:14379270 CG
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
385 >rs62211262 21:14379281 AT
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
386 >rs62211263 21:14379298 WN
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
387 Each line must start with a ">" character, then be followed by an
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
388 identifier (which may have duplicates). Then there should be the
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
389 chromosomal coordinate of the SNP. (Coordinates are all 1-based, so
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
390 the first character of a chromosome is number 1.) Finally, there
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
391 should be the two possible alleles. (Previous versions required that
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
392 these be in alphabetical order: "AC", "AG", "AT", "CG", "CT", or "GT",
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
393 but that is no longer a requirement.) These alleles must correspond
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
394 to the possible nucleotides on the plus strand of the genome. If the
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
395 one of these two letters does not match the allele in the reference
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
396 sequence, that SNP will be ignored in subsequent processing as a
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
397 probable error.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
398
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
399 GSNAP also supports the idea of a wildcard SNP. A wildcard SNP allows
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
400 all nucleotides to match at that position, not just a given reference
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
401 and alternate allele. It is essentially as if an "N" were recorded at
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
402 that genomic location, although the index files still keep track of
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
403 the reference allele. To indicate that a position has a wildcard SNP,
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
404 you can indicate the genotype as "WN", where "W" is the reference
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
405 allele. Another indication of a wildcard SNP is to provide two
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
406 separate lines at that position with the genotypes "WX" and "WY",
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
407 where "W" is the reference allele and "X" and "Y" are two different
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
408 alternate alleles.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
409 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
410 def sniff( self, filename ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
411 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
412 Determines whether the file is a gmap SNP annotation file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
413 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
414 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
415 pat = '>(\S+)\s((\S+):(\d+)\s([TACGW][TACGN])$' #>label chr:position ATCG
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
416 fh = open( filename )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
417 count = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
418 while True and count < 10:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
419 line = fh.readline()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
420 if not line:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
421 break #EOF
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
422 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
423 if line: #first non-empty line
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
424 count += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
425 if re.match(pat,line) == None: # Failed to match
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
426 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
427 finally:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
428 fh.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
429 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
430
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
431
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
432 class TallyAnnotation(IntervalAnnotation):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
433 file_ext = 'gsnap_tally'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
434 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
435 Output produced by gsnap_tally
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
436 Example:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
437 >144 chr20:57268791..57268935
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
438 G0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
439 A1(1@7|1Q-3)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
440 A2(1@36,1@1|1Q2,1Q-8)
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
441 C2 0.889,0.912,0.889,0.889,0.933,0.912,0.912,0.889,0.889,0.889 -2.66,-2.89,-2.66,-2.66,-3.16,-2.89,-2.89,-2.66,-2.66,-2.66
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
442 C1 T1 0.888,0.9,0.888,0.9,0.913,0.9,0.911,0.888,0.9,0.913 -2.66,-2.78,-2.66,-2.78,-2.91,-2.78,-2.89,-2.66,-2.78,-2.91
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
443 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
444 def sniff( self, filename ): # TODO
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
445 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
446 Determines whether the file is a gmap splice site annotation file
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
447 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
448 try:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
449 pat = '^>(\d+)\s((\S+):(\d+)\.\.(\d+))$' #>total chr:position..position
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
450 pat2 = '^[GATCN]\d.*$' #BaseCountDeatails
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
451 fh = open( filename )
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
452 count = 0
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
453 while True and count < 10:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
454 line = fh.readline()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
455 if not line:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
456 break #EOF
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
457 line = line.strip()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
458 if line: #first non-empty line
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
459 count += 1
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
460 if re.match(pat,line) == None and re.match(pat2,line) == None: # Failed to match
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
461 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
462 finally:
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
463 fh.close()
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
464 return False
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
465
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
466 class GsnapResult( Text ):
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
467 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
468 The default output format for gsnap. Can be used as input for gsnap_tally.
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
469 """
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
470 file_ext = 'gsnap'
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
471
3be0e0a858fe refactor and update README
Jim Johnson <jj@umn.edu>
parents:
diff changeset
472