import sys import numpy import parse_file from scipy.special import gammaln as loggamma from math import log, exp populations = parse_file.all_lines coverages = [] nonmutator_coverages = [] for population in populations: sys.stderr.write("Processing %s...\t" % parse_file.get_pretty_name(population)) # calculate mutation trajectories # load mutations mutations, depth_tuple = parse_file.parse_annotated_timecourse(population) population_avg_depth_times, population_avg_depths, clone_avg_depth_times, clone_avg_depths = depth_tuple coverages.extend(population_avg_depths[population_avg_depths >= 5]) if population in parse_file.complete_nonmutator_lines: nonmutator_coverages.extend( population_avg_depths[population_avg_depths >= 5]) sys.stderr.write("Done!\n")
hspace=0.2) #, hspace=0.08) inner_grids = [inner_grid_1, inner_grid_2] axes = [] for metapopulation_idx in xrange(0, 2): axes.append([]) for population_idx in xrange(0, 6): population = metapopulations[metapopulation_idx][population_idx] axis = plt.Subplot(fig, inner_grids[metapopulation_idx][population_idx]) fig.add_subplot(axis) axes[metapopulation_idx].append(axis) axis.set_title(parse_file.get_pretty_name(population), fontsize=5, y=0.96, loc='left') axis.spines['top'].set_visible(False) axis.spines['right'].set_visible(False) axis.get_yaxis().tick_left() axis.get_yaxis().set_tick_params(direction='out', length=2) axis.set_xticks([]) axis.set_ylabel('Fixed mutations') axis.set_xlim([-1, 22]) if population_idx == 5: axis.set_xlabel('Clones')
std_dx40 = 0 std_dx50 = individual_50k_std_dxs[i] std_dx60 = individual_60k_std_dxs[i] late_fitness_ts = numpy.array([t40, t50, t60]) late_fitness_xs = numpy.array([dx40, dx50, dx60]) late_fitness_std_xs = numpy.array([std_dx40, std_dx50, std_dx60]) late_fitness_trajectories[population] = (late_fitness_ts, late_fitness_xs, late_fitness_std_xs) sys.stderr.write("Done!\n") sys.stderr.write("Loading mutation data...\n") for population in populations: sys.stderr.write("Processing %s...\t" % parse_file.get_pretty_name(population)) # calculate mutation trajectories # load mutations mutations, depth_tuple = parse_file.parse_annotated_timecourse(population) population_avg_depth_times, population_avg_depths, clone_avg_depth_times, clone_avg_depths = depth_tuple dummy_times,fmajors,fminors,haplotype_trajectories = parse_file.parse_haplotype_timecourse(population) state_times, state_trajectories = parse_file.parse_well_mixed_state_timecourse(population) times = mutations[0][10] Ms = numpy.zeros_like(times)*1.0 fixed_Ms = numpy.zeros_like(times)*1.0 transit_times[population] = []
pylab.figure(1,figsize=(5.45,3)) fig = pylab.gcf() # make three panels panels outer_grid = gridspec.GridSpec(1, 2, width_ratios=[4,1], wspace=0.125) inner_grid_1 = gridspec.GridSpecFromSubplotSpec(4, 1, height_ratios=[1,1,1,1], subplot_spec=outer_grid[0], hspace=0.30) #, hspace=0.08) inner_grid_2 = gridspec.GridSpecFromSubplotSpec(len(remaining_populations), 1, height_ratios=([1]*len(remaining_populations)), subplot_spec=outer_grid[1], hspace=0.25) #, hspace=0.08) fixed_axis = plt.Subplot(fig, inner_grid_1[0]) fig.add_subplot(fixed_axis) fixed_axis.set_title('%s basal clade' % parse_file.get_pretty_name(focal_population),loc='right',fontsize=5,y=0.89) fixed_axis.spines['top'].set_visible(False) fixed_axis.spines['right'].set_visible(False) fixed_axis.get_xaxis().tick_bottom() fixed_axis.get_yaxis().tick_left() fixed_axis.get_yaxis().set_tick_params(direction='out',length=2,pad=0) fixed_axis.get_xaxis().set_tick_params(direction='out',length=2,pad=0) fixed_axis.set_xticks(generation_ticks) fixed_axis.set_xticklabels([]) fixed_axis.set_yticks(frequency_ticks) #fixed_axis.set_ylabel('Allele frequency, $f(t)$')
height_ratios=[1, 1, 1, 1], subplot_spec=outer_grid[0], hspace=0.30) #, hspace=0.08) inner_grid_2 = gridspec.GridSpecFromSubplotSpec( len(remaining_populations), 1, height_ratios=([1] * len(remaining_populations)), subplot_spec=outer_grid[1], hspace=0.25) #, hspace=0.08) fixed_axis = plt.Subplot(fig, inner_grid_1[0]) fig.add_subplot(fixed_axis) fixed_axis.set_title('%s basal clade' % parse_file.get_pretty_name(focal_population), loc='right', fontsize=5, y=0.89) fixed_axis.spines['top'].set_visible(False) fixed_axis.spines['right'].set_visible(False) fixed_axis.get_xaxis().tick_bottom() fixed_axis.get_yaxis().tick_left() fixed_axis.get_yaxis().set_tick_params(direction='out', length=2, pad=0) fixed_axis.get_xaxis().set_tick_params(direction='out', length=2, pad=0) fixed_axis.set_xticks(generation_ticks) fixed_axis.set_xticklabels([]) fixed_axis.set_yticks(frequency_ticks)
replicate_str = "biological replicate 1" if sample_name_str in seen_sample_names: new_sample_name_str = sample_name_str idx = 1 while new_sample_name_str in seen_sample_names: idx += 1 new_sample_name_str = sample_name_str + (".%d" % idx) sample_name_str = new_sample_name_str replicate_str = "biological replicate %d" % idx population_str = ",".join([parse_file.get_pretty_name(population) for population in populations]) if "BG" in strain_str: description_str = "%s clonal isolate" % (population_str) else: description_str = "%s %s mixed population sample" % (population_str, timepoint_str) column_strs = [" " for column in column_headers] column_strs[sample_name_idx] = sample_name_str column_strs[bioproject_accession_idx] = bioproject_accession_str column_strs[organism_idx] = organsim_str column_strs[strain_idx] = strain_str
hspace=0.25) #, hspace=0.08) inner_grid_2 = gridspec.GridSpecFromSubplotSpec( len(remaining_populations), 1, height_ratios=([1] * len(remaining_populations)), subplot_spec=outer_grid[1], hspace=0.2) #, hspace=0.08) focal_axes = [] for i in xrange(0, len(focal_populations)): axis = plt.Subplot(fig, inner_grid_1[i]) focal_axes.append(axis) fig.add_subplot(axis) axis.set_title('%s' % parse_file.get_pretty_name(focal_populations[i]), loc='right', fontsize=5, y=0.93) axis.spines['top'].set_visible(False) axis.spines['right'].set_visible(False) axis.get_xaxis().tick_bottom() axis.get_yaxis().tick_left() axis.get_yaxis().set_tick_params(direction='out', length=3, pad=1) axis.get_xaxis().set_tick_params(direction='out', length=3, pad=1) axis.set_xticks(generation_ticks) axis.set_yticks(frequency_ticks) if i == (len(focal_populations) - 1):
axes = [axes] #fig = plt.figure(figsize=(fig_width,fig_height)) #outer_grid = gridspec.GridSpec(len(populations), 1) xticks = [5000 * i for i in xrange(0, 13)] xticklabels = ['%dk' % (5 * i) for i in xrange(0, 13)] xticklabels[0] = '0' freq_axis = None for population_idx in xrange(0, len(populations)): population = populations[population_idx] sys.stdout.write("Processing %s...\n" % parse_file.get_pretty_name(population)) # calculate mutation trajectories # load mutations mutations, depth_tuple = parse_file.parse_annotated_timecourse( population) population_avg_depth_times, population_avg_depths, clone_avg_depth_times, clone_avg_depths = depth_tuple dummy_times, fmajors, fminors, haplotype_trajectories = parse_file.parse_haplotype_timecourse( population) state_times, state_trajectories = parse_file.parse_well_mixed_state_timecourse( population) # set up figure axis freq_axis = axes[population_idx]
xticklabels[0] = '0' fixation_time_axis.set_xticks(xticks) fixation_time_axis.set_xticklabels(xticklabels) ###### # # Now do the calculations # ###### #populations = ['m5','p2','p4','p1','p5','p6','p3','m4','m2','m1','m3','m6'] nonmutator_populations = ['m5', 'p2', 'p4', 'p1', 'm6', 'p5'] mutator_populations = ['m1', 'm2', 'm3', 'm4', 'p3', 'p6'] population_labels = { population: parse_file.get_pretty_name(population) for population in nonmutator_populations } population_colors = { nonmutator_populations[i]: parse_file.nonmutator_line_colors[i] for i in xrange(0, len(nonmutator_populations)) } for i in xrange(0, len(mutator_populations)): population_labels[mutator_populations[i]] = parse_file.get_pretty_name( mutator_populations[i]) population_colors[ mutator_populations[i]] = parse_file.mutator_line_colors[i] populations = mutator_populations + nonmutator_populations
axes = [axes] #fig = plt.figure(figsize=(fig_width,fig_height)) #outer_grid = gridspec.GridSpec(len(populations), 1) xticks = [5000*i for i in xrange(0,13)] xticklabels = ['%dk' % (5*i) for i in xrange(0,13)] xticklabels[0] = '0' freq_axis = None for population_idx in xrange(0,len(populations)): population = populations[population_idx] sys.stderr.write("Processing %s...\n" % parse_file.get_pretty_name(population)) # calculate mutation trajectories # load mutations mutations, depth_tuple = parse_file.parse_annotated_timecourse(population) population_avg_depth_times, population_avg_depths, clone_avg_depth_times, clone_avg_depths = depth_tuple dummy_times,fmajors,fminors,haplotype_trajectories = parse_file.parse_haplotype_timecourse(population) state_times, state_trajectories = parse_file.parse_well_mixed_state_timecourse(population) # set up figure axis freq_axis = axes[population_idx] if additional_titles[population_idx]=="": title_text = parse_file.get_pretty_name(population)