Source code for BanzaiDB.imaging

# Copyright 2013-2014 Mitchell Stanton-Cook Licensed under the
# Educational Community License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may
# obtain a copy of the License at
#
# http://www.osedu.org/licenses/ECL-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an "AS IS"
# BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing
# permissions and limitations under the License.


import random
from reportlab.lib.units import cm
from Bio.Graphics import GenomeDiagram


SEED = 99


[docs]def hsv_to_rgb(h, s, v): """ Convert HSV to RGB :param h: hue :param s: saturation :param v: value """ h_i = int(h*6) f = h*6 - h_i p = v * (1 - s) q = v * (1 - f*s) t = v * (1 - (1 - f) * s) if h_i == 0: r, g, b = v, t, p elif h_i == 1: r, g, b = q, v, p elif h_i == 2: r, g, b = p, v, t elif h_i == 3: r, g, b = p, q, v elif h_i == 4: r, g, b = t, p, v elif h_i == 5: r, g, b = v, p, q else: print "Problem" return [int(r*256), int(g*256), int(b*256)]
[docs]def gen_colors(number): """ Generate a list of length number of distinct "good" random colors Based on http://martin.ankerl.com/ 2009/12/09/how-to-create-random-colors-programmatically/ :param number: int :type: int :rtype: a list of lists in the form: [[243, 137, 121], [232, 121, 243], [216, 121, 243]] """ rgb_list = [] golden_ratio_conjugate = 0.618033988749895 random.seed(SEED) for i in range(0, int(number)): h = (random.random()+golden_ratio_conjugate) % 1 rgb = hsv_to_rgb(h, 0.5, 0.95) rgb_list.append(rgb) return rgb_list
[docs]def plot_SNPs(snp_features, labels): """ Using GenomeDiagram from Biopython generate a SNP position plot_SNPs """ gdd = GenomeDiagram.Diagram('SNP Diagram') for idx, track in enumerate(snp_features): gdt_features = gdd.new_track(idx+1, greytrack=False, name=labels[idx]) gds_features = gdt_features.new_set() for feature in track: gds_features.add_feature(feature) gdd.draw(format='circular', pagesize=(15*cm, 15*cm), track_size=0.25) gdd.write("GD_labels_default.pdf", "pdf")