Mercurial > repos > holtgrewe > ngs_roi
diff roi_details.py @ 1:0ac4f6f3d984 draft
Uploaded
| author | holtgrewe |
|---|---|
| date | Mon, 06 May 2013 12:34:43 -0400 |
| parents | 61d9bdb6d519 |
| children | 170e48a55078 |
line wrap: on
line diff
--- a/roi_details.py Thu Apr 18 08:03:38 2013 -0400 +++ b/roi_details.py Mon May 06 12:34:43 2013 -0400 @@ -12,28 +12,51 @@ import Cheetah.Template import matplotlib.pyplot as plt -import rois +import ngs_roi.app +import ngs_roi.argparse +import ngs_roi.io PAGE_TPL = """ <html> - <head><title>ROI Table</title></head> + <head> + <title>ROI Table</title> + <style type="text/css"> + div.plot + { + float: left; + padding: 4px; + margin: 2px; + width: 420px; + } + + .plot h2 { margin-top: 3px; margin-bottom: 3px; text-align: center; } + .plot img { display: block; margin: 0 auto; } + </style> + </head> <body> <h1>Detailed ROI Report</h1> + #for i, roi in enumerate($records) - <h2>${roi.ref}:${roi.start_pos + 1}-${roi.end_pos+1}</h2> - <img src="${args.out_prefix}${i}.png" /> - <dl> - <dt>chr:start-end name length strand</dt> - <dd>${roi.ref}:${roi.start_pos}-${roi.end_pos} ${roi.region_name} ${roi.region_length} ${roi.strand}</dd> - <dt>metrics</dt> - <dd>#for j, key in enumerate($data_keys)#$key: ${roi.data[$j]}, #end for#</dd> - </dl> + <div class="plot"> + <h2>${roi.ref}:${roi.start_pos + 1}-${roi.end_pos+1}</h2> + <a href="${href($roi)}" target="dead"><img src="plot_${i}.png" /></a> + <p> + <b>chr:start-end</b> <a href="${href($roi)}" target="dead">${roi.ref}:${roi.start_pos}-${roi.end_pos} ${roi.strand}</a>; + <b>region name</b> ${roi.region_name}; + <b>region length</b> ${roi.region_length}; + </p> + #if $roi.data + <p>#for j, key in enumerate($data_keys)#<b>$key:</b> ${roi.data[$j]}; #end for#</p> + #end if + </div> #end for + <iframe name="dead" height="0" width="0"></iframe> + <div><code>$args</code></div> </body> </html> """ -class DetailedRoiGenerator(object): +class DetailedRoiGenerator(ngs_roi.app.App): """Generate detailed ROI report. :ivar args:Arguments from the comment line. @@ -48,28 +71,40 @@ :return: integer with the result. """ print >>sys.stderr, 'Loading ROI' - keys, records = rois.loadRoi(self.args.in_file, self.args.max_rois) + records = ngs_roi.io.load(self.args.in_file, self.args.max_rois) + keys = records[0].data_keys self.writeHtml(keys, records) self.writePlots(records) return 0 def writePlots(self, records): + COLOR = 'blue' + LINE_WIDTH = .5 + LINE_STYLE = '-' + TICK_FONT_SIZE = 8 + LABEL_FONT_SIZE = 10 for i, roi in enumerate(records): - file_name = '%s%d.png' % (os.path.join(self.args.out_dir, self.args.out_prefix), i) + file_name = 'plot_%d.png' % i + file_name = os.path.join(self.args.out_dir, file_name) print >>sys.stderr, 'Writing plot %s' % file_name - plt.figure(figsize=(6, 4)) - plt.gcf().subplots_adjust(bottom=0.1, left=0.1) - plt.plot(roi.points) - plt.ylabel('coverage') - plt.xlabel('ROI pos') + plt.figure(figsize=(4, 2.5)) + plt.gcf().subplots_adjust(bottom=0.16, left=0.15) + plt.plot(roi.points, color=COLOR, linewidth=LINE_WIDTH, linestyle=LINE_STYLE) + plt.ylim(ymin=0) + if self.args.max_value: + plt.ylim(ymax=self.args.max_value) + plt.tick_params(labelsize=TICK_FONT_SIZE) + plt.ylabel('coverage', fontsize=LABEL_FONT_SIZE, weight='semibold') + plt.xlabel('ROI beginPos', fontsize=LABEL_FONT_SIZE, weight='semibold') plt.savefig(file_name) def writeHtml(self, keys, records): file_name = self.args.out_file print >>sys.stderr, 'Writing HTML file %s' % file_name - vals = {'args': self.args, 'records': records, 'data_keys': keys} + vals = {'args': self.args, 'records': records, 'data_keys': keys, + 'href': lambda x: self.buildHref(x.ref, x.start_pos, x.end_pos)} t = Cheetah.Template.Template(PAGE_TPL, searchList=vals) with open(file_name, 'wb') as f: @@ -78,64 +113,12 @@ def main(): parser = argparse.ArgumentParser(description='Plot ROI file.') - parser.add_argument('-o', '--out-file', dest='out_file', metavar='PATH', - help='Prefix of output HTML file. The tool will create ' - 'PNG files parallel to the HTML file.', - default='roi_plots.html') - parser.add_argument('-d', '--out-dir', dest='out_dir', metavar='DIR', - help='Directory to write images to. By default ' - 'this is the same as the directory for --out-file.', - default=None) - parser.add_argument('-p', '--out-prefix', dest='out_prefix', metavar='DIR', - help='Prefix of output PNG files.', default='roi_plot_grid') - parser.add_argument('-i', '--in-file', dest='in_file', metavar='FILE', - required=True, help='Path to ROI file to read.') - - group = parser.add_argument_group('Plot Configuration', 'Arguments for the plot images.') - - group.add_argument('--max-rois', dest='max_rois', metavar='NUM', - type=int, default=0, - help='Maximal number of ROIs, 0 for all.') + ngs_roi.argparse.addFileArguments(parser) + ngs_roi.argparse.addPlotGridArguments(parser) + ngs_roi.argparse.addLinkArguments(parser) + args = parser.parse_args() + ngs_roi.argparse.applyFileDefaults(args) - group.add_argument('--num-rows', dest='num_rows', metavar='ROWS', - type=int, default=50, - help='Number of rows per grid.') - group.add_argument('--num-cols', dest='num_cols', metavar='COLS', - type=int, default=40, - help='Number of columns per grid.') - - group.add_argument('--plot-height', dest='plot_height', metavar='HEIGHT', - type=int, default=30, help='Height of one plot in px.') - group.add_argument('--plot-width', dest='plot_width', metavar='WIDTH', - type=int, default=30, help='Width of one plot in px.') - - group = parser.add_argument_group('HTML Links', 'Arguments for HTML link creation.') - - group.add_argument('--link-target', dest='link_target', metavar='TARGET', - default='_blank', choices=['_blank', '_top'], - help='Select the link target to create (_blank or _top).') - - group.add_argument('--link-type', dest='link_type', metavar='TARGET', - default='local_igv', choices=['local_igv', 'ucsc'], - help='Select the type of links to create. One of ' - '"local_igv" and "ucsc".') - - group.add_argument('--igv-host', dest='igv_host', metavar='HOST', - default='localhost', help='Host for IGV link.') - group.add_argument('--igv-port', dest='igv_port', metavar='PORT', - type=int, default='60151', help='Port for IGV link.') - - group.add_argument('--ucsc-org', dest='ucsc_org', metavar='ORG', - default='human', help='Organism for UCSC browser link.') - group.add_argument('--ucsc-db', dest='ucsc_db', metavar='DB', - default='hg18', help='Assembly version for UCSC browser link.') - group.add_argument('--ucsc-chr-prefix', dest='ucsc_chr_prefix', metavar='PREFIX', - default='', help='Prefix for chromosome names in UCSC browser.') - - args = parser.parse_args() - if not args.out_dir: - args.out_dir = os.path.dirname(args.out_file) or '.' - print args app = DetailedRoiGenerator(args) return app.run()
