def get_mutation_fixation_trajectories(population):

    mutations, depth_tuple = parse_annotated_timecourse(population)
    population_avg_depth_times, population_avg_depths, clone_avg_depth_times, clone_avg_depths = depth_tuple
    state_times, state_trajectories = parse_well_mixed_state_timecourse(population)
    times = mutations[0][9]
    Ms = numpy.zeros_like(times)*1.0
    fixed_Ms = numpy.zeros_like(times)*1.0

    #transit_times[population] = []

    for mutation_idx in range(0,len(mutations)):

        #location, gene_name, allele, var_type, test_statistic, pvalue, cutoff_idx, depth_fold_change, depth_change_pvalue, times, alts, depths, clone_times, clone_alts, clone_depths = mutations[mutation_idx]
        location, gene_name, allele, var_type, codon, position_in_codon, AAs_count,  test_statistic, pvalue, cutoff_idx, depth_fold_change, depth_change_pvalue, times, alts, depths, clone_times, clone_alts, clone_depths = mutations[mutation_idx]

        state_Ls = state_trajectories[mutation_idx]

        good_idxs, filtered_alts, filtered_depths = timecourse_utils.mask_timepoints(times, alts, depths, var_type, cutoff_idx, depth_fold_change, depth_change_pvalue)

        freqs = timecourse_utils.estimate_frequencies(filtered_alts, filtered_depths)

        masked_times = times[good_idxs]
        masked_freqs = freqs[good_idxs]
        masked_state_Ls = state_Ls[good_idxs]

        t0,tf,transit_time = timecourse_utils.calculate_appearance_fixation_time_from_hmm(masked_times, masked_freqs, masked_state_Ls)
        #print(t0,tf,transit_time)
        if t0==tf==transit_time==None:
            continue

        #print(masked_times, masked_freqs)

        interpolating_function = timecourse_utils.create_interpolation_function(masked_times, masked_freqs, tmax=100000)

        fs = interpolating_function(times)
        fs[fs<0]=0

        # Record
        Ms += fs
        if masked_state_Ls[-1] in well_mixed_fixed_states:
            fixed_Ms += (times>=tf)


    return times, Ms, fixed_Ms
示例#2
0
        Ls = haplotype_trajectories[mutation_idx]
        state_Ls = state_trajectories[mutation_idx]
        
        good_idxs, filtered_alts, filtered_depths = timecourse_utils.mask_timepoints(times, alts, depths, var_type, cutoff_idx, depth_fold_change, depth_change_pvalue)
        
        freqs = timecourse_utils.estimate_frequencies(filtered_alts, filtered_depths)
        
        masked_times = times[good_idxs]
        masked_freqs = freqs[good_idxs]
        masked_state_Ls = state_Ls[good_idxs]
        
        t0,tf,transit_time = timecourse_utils.calculate_appearance_fixation_time_from_hmm(masked_times, masked_freqs, masked_state_Ls)
        transit_times[population].append(transit_time)
        
          
        interpolating_function = timecourse_utils.create_interpolation_function(masked_times, masked_freqs, tmax=100000)
   
        fs = interpolating_function(times)
        fs[fs<0]=0
        
        # Record 
        Ms += fs
        if masked_state_Ls[-1] in parse_file.well_mixed_fixed_states:
            fixed_Ms += (times>=tf)
        

    fixed_mutation_trajectories[population] = (times, fixed_Ms)
    mutation_trajectories[population] = (times, Ms)

    sys.stderr.write("analyzed %d mutations!\n" % len(mutations))
    if is_mutator and var_type == 'sv' or var_type == 'indel':
        continue

    Ls = haplotype_trajectories[mutation_idx]

    good_idxs, filtered_alts, filtered_depths = timecourse_utils.mask_timepoints(
        times, alts, depths, var_type, cutoff_idx, depth_fold_change,
        depth_change_pvalue)

    freqs = timecourse_utils.estimate_frequencies(filtered_alts,
                                                  filtered_depths)

    masked_times = times[good_idxs]
    masked_freqs = freqs[good_idxs]

    interpolation_function = timecourse_utils.create_interpolation_function(
        masked_times, masked_freqs, tmax=100000)
    haplotype_interpolation_function = timecourse_utils.create_interpolation_function(
        times, Ls, tmax=100000, kind='nearest')

    clone_freqs = clone_alts * 1.0 / (clone_depths + (clone_depths == 0))
    clone_depth_fold_changes = timecourse_utils.estimate_depth_fold_changes(
        clone_avg_depths, clone_depths)

    # classify clade
    if (Ls[-1] == parse_file.ANCESTRAL_FIXED) or (
            Ls[-1] == parse_file.ANCESTRAL_POLYMORPHIC):
        clade = "ancestral"
    elif (Ls[-1]
          == parse_file.MAJOR_FIXED) or (Ls[-1]
                                         == parse_file.MAJOR_POLYMORPHIC):
        clade = "majority"