annotate rlGAT/gat-run.py @ 11:53487f21c0d5 draft

Uploaded
author fubar
date Thu, 29 Aug 2013 01:57:54 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
1 ################################################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
2 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
3 # MRC FGU Computational Genomics Group
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
4 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
5 # $Id: script_template.py 2871 2010-03-03 10:20:44Z andreas $
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
6 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
7 # Copyright (C) 2009 Andreas Heger
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
8 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
9 # This program is free software; you can redistribute it and/or
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
10 # modify it under the terms of the GNU General Public License
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
11 # as published by the Free Software Foundation; either version 2
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
12 # of the License, or (at your option) any later version.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
13 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
14 # This program is distributed in the hope that it will be useful,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
17 # GNU General Public License for more details.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
18 #
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
19 # You should have received a copy of the GNU General Public License
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
20 # along with this program; if not, write to the Free Software
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
21 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
22 #################################################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
23 '''
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
24 gat-run - run the genomic annotation tool
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
25 =============================================
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
26
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
27 :Author: Andreas Heger
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
28 :Release: $Id$
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
29 :Date: |today|
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
30 :Tags: Python
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
31
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
32 Purpose
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
33 -------
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
34
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
35 This script compares one or more genomic segments of interest
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
36 against one more other genomic annotations.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
37
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
38 Usage
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
39 -----
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
40
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
41 Example::
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
42
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
43 python gat-run.py
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
44 --segment-file=segments.bed.gz
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
45 --workspace-file=workspace.bed.gz
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
46 --annotation-file=annotations_architecture.bed.gz
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
47
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
48 Type::
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
49
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
50 python gat-run.py --help
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
51
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
52 for command line help.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
53
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
54 Documentation
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
55 -------------
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
56
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
57 Code
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
58 ----
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
59
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
60 '''
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
61
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
62 import os, sys, re, optparse, collections, types, glob, time
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
63 import numpy
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
64
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
65 import gat
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
66 import gat.Experiment as E
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
67 import gat.IOTools as IOTools
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
68 import gat.IO as IO
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
69 import gat.Stats as Stats
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
70 import GatSegmentList
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
71 import GatEngine
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
72
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
73 def fromSegments( options, args ):
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
74 '''run analysis from segment files.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
75
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
76 This is the most common use case.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
77 '''
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
78
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
79 tstart = time.time()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
80
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
81 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
82 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
83 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
84 ## build segments
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
85 segments, annotations, workspaces, isochores = IO.buildSegments( options )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
86
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
87 E.info( "intervals loaded in %i seconds" % (time.time() - tstart) )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
88
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
89 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
90 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
91 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
92 ## open various additional output files
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
93 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
94 outfiles = {}
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
95 for section in ("sample",
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
96 "segment_metrics",
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
97 "sample_metrics",
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
98 ):
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
99 if section in options.output_stats or \
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
100 "all" in options.output_stats or \
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
101 len( [ x for x in options.output_stats if re.search( x, "section" ) ] ) > 0:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
102 outfiles[section] = E.openOutputFile(section)
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
103
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
104 if 'sample_metrics' in outfiles:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
105 outfiles['sample_metrics'].write( "track\tsection\tmetric\t%s\n" % "\t".join(Stats.Summary().getHeaders() ))
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
106
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
107 # filter segments by workspace
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
108 workspace = IO.applyIsochores( segments,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
109 annotations,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
110 workspaces,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
111 options,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
112 isochores,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
113 truncate_segments_to_workspace = options.truncate_segments_to_workspace,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
114 truncate_workspace_to_annotations = options.truncate_workspace_to_annotations,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
115 restrict_workspace = options.restrict_workspace )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
116
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
117 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
118 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
119 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
120 ## check memory requirements
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
121 counts = segments.countsPerTrack()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
122 max_counts = max(counts.values())
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
123 # previous algorithm: memory requirements if all samples are stored
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
124 memory = 8 * 2 * options.num_samples * max_counts * len(workspace)
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
125
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
126 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
127 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
128 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
129 # initialize sampler
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
130 if options.sampler == "annotator":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
131 sampler = GatEngine.SamplerAnnotator(
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
132 bucket_size = options.bucket_size,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
133 nbuckets = options.nbuckets )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
134 elif options.sampler == "shift":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
135 sampler = GatEngine.SamplerShift(
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
136 radius = options.shift_expansion,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
137 extension = options.shift_extension )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
138 elif options.sampler == "segments":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
139 sampler = GatEngine.SamplerSegments()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
140 elif options.sampler == "local-permutation":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
141 sampler = GatEngine.SamplerLocalPermutation()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
142 elif options.sampler == "global-permutation":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
143 sampler = GatEngine.SamplerGlobalPermutation()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
144 elif options.sampler == "brute-force":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
145 sampler = GatEngine.SamplerBruteForce()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
146 elif options.sampler == "uniform":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
147 sampler = GatEngine.SamplerUniform()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
148
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
149 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
150 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
151 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
152 # initialize counter
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
153 counters = []
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
154 for counter in options.counters:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
155 if counter == "nucleotide-overlap":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
156 counters.append( GatEngine.CounterNucleotideOverlap() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
157 elif counter == "nucleotide-density":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
158 counters.append( GatEngine.CounterNucleotideDensity() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
159 elif counter == "segment-overlap":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
160 counters.append( GatEngine.CounterSegmentOverlap() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
161 elif counter == "annotations-overlap":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
162 counters.append( GatEngine.CounterAnnotationsOverlap() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
163 elif counter == "segment-midoverlap":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
164 counters.append( GatEngine.CounterSegmentMidpointOverlap() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
165 elif counter == "annotations-midoverlap":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
166 counters.append( GatEngine.CounterAnnotationsMidpointOverlap() )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
167 else:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
168 raise ValueError("unknown counter '%s'" % counter )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
169
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
170 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
171 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
172 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
173 ## initialize workspace generator
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
174 if options.conditional == "unconditional":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
175 workspace_generator = GatEngine.UnconditionalWorkspace()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
176 elif options.conditional == "cooccurance":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
177 workspace_generator = GatEngine.ConditionalWorkspaceCooccurance()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
178 elif options.conditional == "annotation-centered":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
179 if options.conditional_extension == options.conditional_expansion == None:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
180 raise ValueError( "please specify either --conditional-expansion or --conditional-extension" )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
181 workspace_generator = GatEngine.ConditionalWorkspaceAnnotationCentered( options.conditional_extension,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
182 options.conditional_expansion )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
183 elif options.conditional == "segment-centered":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
184 if options.conditional_extension == options.conditional_expansion == None:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
185 raise ValueError( "please specify either --conditional-expansion or --conditional-extension" )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
186
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
187 workspace_generator = GatEngine.ConditionalWorkspaceSegmentCentered( options.conditional_extension,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
188 options.conditional_expansion )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
189 else:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
190 raise ValueError("unknown conditional workspace '%s'" % options.conditional )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
191
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
192
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
193 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
194 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
195 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
196 ## check if reference is compplete
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
197 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
198 if options.reference:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
199 reference = options.reference
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
200 for track in segments.tracks:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
201 if track not in options.reference:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
202 raise ValueError("missing track '%s' in reference" % track )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
203 r = options.reference[track]
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
204 for annotation in annotations.tracks:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
205 if annotation not in r:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
206 raise ValueError("missing annotation '%s' in annotations for track='%s'" % (annotation, track ))
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
207
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
208
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
209 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
210 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
211 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
212 ## compute
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
213 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
214 annotator_results = gat.run( segments,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
215 annotations,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
216 workspace,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
217 sampler,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
218 counters,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
219 workspace_generator = workspace_generator,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
220 num_samples = options.num_samples,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
221 cache = options.cache,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
222 outfiles = outfiles,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
223 output_counts_pattern = options.output_counts_pattern,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
224 output_samples_pattern = options.output_samples_pattern,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
225 sample_files = options.sample_files,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
226 conditional = options.conditional,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
227 conditional_extension = options.conditional_extension,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
228 reference = options.reference,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
229 pseudo_count = options.pseudo_count,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
230 num_threads = options.num_threads )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
231
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
232 return annotator_results
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
233
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
234
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
235 def main( argv = None ):
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
236 """script main.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
237
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
238 parses command line options in sys.argv, unless *argv* is given.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
239 """
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
240
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
241 if not argv: argv = sys.argv
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
242
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
243 parser = gat.buildParser( usage = globals()["__doc__"] )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
244
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
245 ## add common options (-h/--help, ...) and parse command line
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
246 (options, args) = E.Start( parser, argv = argv, add_output_options = True )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
247
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
248 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
249 description_header, descriptions, description_width = IO.readDescriptions( options )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
250
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
251 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
252 size_pos, size_segment = GatSegmentList.getSegmentSize()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
253 E.debug( "sizes: pos=%i segment=%i, max_coord=%i" % (size_pos, size_segment, 2**(8 * size_pos )))
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
254
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
255 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
256 # set default counter
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
257 if not options.counters:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
258 options.counters.append( "nucleotide-overlap" )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
259
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
260 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
261 if options.output_tables_pattern != None:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
262 if "%s" not in options.output_tables_pattern:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
263 raise ValueError( "output_tables_pattern should contain at least one '%s'")
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
264
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
265 if options.output_samples_pattern != None:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
266 if "%s" not in options.output_samples_pattern:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
267 raise ValueError( "output_samples_pattern should contain at least one '%s'")
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
268
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
269 if options.output_counts_pattern != None:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
270 if "%s" not in options.output_counts_pattern:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
271 raise ValueError( "output_counts_pattern should contain at least one '%s'")
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
272
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
273
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
274 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
275 # read fold changes that results should be compared with
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
276 if options.null != "default":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
277 if not os.path.exists( options.null ):
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
278 raise OSError( "file %s not found" % options.null )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
279 E.info( "reading reference results from %s" % options.null )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
280 options.reference = IO.readAnnotatorResults( options.null )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
281 else:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
282 options.reference = None
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
283
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
284 if options.input_filename_counts:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
285 # use pre-computed counts
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
286 annotator_results = GatEngine.fromCounts( options.input_filename_counts )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
287
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
288 elif options.input_filename_results:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
289 # use previous results (re-computes fdr)
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
290 E.info( "reading gat results from %s" % options.input_filename_results )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
291 annotator_results = IO.readAnnotatorResults( options.input_filename_results )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
292
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
293 else:
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
294 # do full gat analysis
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
295 annotator_results = fromSegments( options, args )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
296
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
297 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
298 if options.pvalue_method != "empirical":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
299 E.info("updating pvalues to %s" % options.pvalue_method )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
300 GatEngine.updatePValues( annotator_results, options.pvalue_method )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
301
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
302 ##################################################
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
303 ## output
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
304 IO.outputResults( annotator_results,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
305 options,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
306 GatEngine.AnnotatorResultExtended.headers,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
307 description_header,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
308 description_width,
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
309 descriptions )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
310
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
311 IO.plotResults( annotator_results, options )
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
312
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
313 ## write footer and output benchmark information.
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
314 E.Stop()
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
315
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
316 if __name__ == "__main__":
53487f21c0d5 Uploaded
fubar
parents:
diff changeset
317 sys.exit( main( sys.argv) )