def get_response_content(fs): # precompute some transition matrices P_drift_selection = pgmsinglesite.create_drift_selection_transition_matrix( fs.npop, fs.selection_ratio) MatrixUtil.assert_transition_matrix(P_drift_selection) P_mutation = pgmsinglesite.create_mutation_transition_matrix( fs.npop, fs.mutation_ab, fs.mutation_ba) MatrixUtil.assert_transition_matrix(P_mutation) # define the R table headers headers = ['generation', 'number.of.mutants'] # compute the path samples P = np.dot(P_drift_selection, P_mutation) mypath = PathSampler.sample_endpoint_conditioned_path( fs.nmutants_initial, fs.nmutants_final, fs.ngenerations, P) arr = [[i, nmutants] for i, nmutants in enumerate(mypath)] # create the R table string and scripts # get the R table table_string = RUtil.get_table_string(arr, headers) # get the R script script = get_ggplot() # create the R plot image device_name = Form.g_imageformat_to_r_function[fs.imageformat] retcode, r_out, r_err, image_data = RUtil.run_plotter( table_string, script, device_name) if retcode: raise RUtil.RError(r_err) return image_data
def get_response_content(fs): # precompute some transition matrices P_drift_selection = pgmsinglesite.create_drift_selection_transition_matrix( fs.npop, fs.selection_ratio) MatrixUtil.assert_transition_matrix(P_drift_selection) P_mutation = pgmsinglesite.create_mutation_transition_matrix( fs.npop, fs.mutation_ab, fs.mutation_ba) MatrixUtil.assert_transition_matrix(P_mutation) # define the R table headers headers = [ 'generation', 'number.of.mutants', 'probability', 'log.prob', ] # compute the transition matrix P = np.dot(P_drift_selection, P_mutation) # Compute the endpoint conditional probabilities for various states # along the unobserved path. nstates = fs.npop + 1 M = np.zeros((nstates, fs.ngenerations)) M[fs.nmutants_initial, 0] = 1.0 M[fs.nmutants_final, fs.ngenerations-1] = 1.0 for i in range(fs.ngenerations-2): A_exponent = i + 1 B_exponent = fs.ngenerations - 1 - A_exponent A = np.linalg.matrix_power(P, A_exponent) B = np.linalg.matrix_power(P, B_exponent) weights = np.zeros(nstates) for k in range(nstates): weights[k] = A[fs.nmutants_initial, k] * B[k, fs.nmutants_final] weights /= np.sum(weights) for k, p in enumerate(weights): M[k, i+1] = p arr = [] for g in range(fs.ngenerations): for k in range(nstates): p = M[k, g] if p: logp = math.log(p) else: logp = float('-inf') row = [g, k, p, logp] arr.append(row) # create the R table string and scripts # get the R table table_string = RUtil.get_table_string(arr, headers) # get the R script script = get_ggplot() # create the R plot image device_name = Form.g_imageformat_to_r_function[fs.imageformat] retcode, r_out, r_err, image_data = RUtil.run_plotter( table_string, script, device_name) if retcode: raise RUtil.RError(r_err) return image_data
def get_response_content(fs): # transform the arguments according to the diffusion approximation mutation_ab = (fs.pop * fs.mutation_ab) / fs.pop_gran mutation_ba = (fs.pop * fs.mutation_ba) / fs.pop_gran if mutation_ab > 1 or mutation_ba > 1: raise Exception('the mutation probability is not small enough ' 'for the diffusion approximation to be meaningful') selection_ratio = 1 + (fs.pop * fs.additive_selection) / fs.pop_gran npop = fs.pop_gran ngenerations = fs.ngenerations nmutants_initial = int(fs.initial_freq * fs.pop_gran) nmutants_final = int(fs.final_freq * fs.pop_gran) # precompute some transition matrices P_drift_selection = pgmsinglesite.create_drift_selection_transition_matrix( npop, selection_ratio) MatrixUtil.assert_transition_matrix(P_drift_selection) P_mutation = pgmsinglesite.create_mutation_transition_matrix( npop, mutation_ab, mutation_ba) MatrixUtil.assert_transition_matrix(P_mutation) # define the R table headers headers = [ 'generation', 'allele.frequency', 'probability', 'log.density', ] # compute the transition matrix P = np.dot(P_drift_selection, P_mutation) # Compute the endpoint conditional probabilities for various states # along the unobserved path. nstates = npop + 1 M = np.zeros((nstates, ngenerations)) M[nmutants_initial, 0] = 1.0 M[nmutants_final, ngenerations - 1] = 1.0 for i in range(ngenerations - 2): A_exponent = i + 1 B_exponent = ngenerations - 1 - A_exponent A = np.linalg.matrix_power(P, A_exponent) B = np.linalg.matrix_power(P, B_exponent) weights = np.zeros(nstates) for k in range(nstates): weights[k] = A[nmutants_initial, k] * B[k, nmutants_final] weights /= np.sum(weights) for k, p in enumerate(weights): M[k, i + 1] = p arr = [] for g in range(ngenerations): for k in range(nstates): p = M[k, g] allele_frequency = k / float(npop) # Finer gridding needs larger scaling for the density # because each interval has a smaller support. density = p * nstates if density: log_density = math.log(density) else: log_density = float('-inf') row = [g, allele_frequency, p, log_density] arr.append(row) # create the R table string and scripts # get the R table table_string = RUtil.get_table_string(arr, headers) # get the R script script = get_ggplot(nstates) # create the R plot image device_name = Form.g_imageformat_to_r_function[fs.imageformat] retcode, r_out, r_err, image_data = RUtil.run_plotter( table_string, script, device_name) if retcode: raise RUtil.RError(r_err) return image_data
def get_response_content(fs): # transform the arguments according to the diffusion approximation mutation_ab = (fs.pop * fs.mutation_ab) / fs.pop_gran mutation_ba = (fs.pop * fs.mutation_ba) / fs.pop_gran if mutation_ab > 1 or mutation_ba > 1: raise Exception( 'the mutation probability is not small enough ' 'for the diffusion approximation to be meaningful') selection_ratio = 1 + (fs.pop * fs.additive_selection) / fs.pop_gran npop = fs.pop_gran ngenerations = fs.ngenerations nmutants_initial = int(fs.initial_freq * fs.pop_gran) nmutants_final = int(fs.final_freq * fs.pop_gran) # precompute some transition matrices P_drift_selection = pgmsinglesite.create_drift_selection_transition_matrix( npop, selection_ratio) MatrixUtil.assert_transition_matrix(P_drift_selection) P_mutation = pgmsinglesite.create_mutation_transition_matrix( npop, mutation_ab, mutation_ba) MatrixUtil.assert_transition_matrix(P_mutation) # define the R table headers headers = [ 'generation', 'allele.frequency', 'probability', 'log.density', ] # compute the transition matrix P = np.dot(P_drift_selection, P_mutation) # Compute the endpoint conditional probabilities for various states # along the unobserved path. nstates = npop + 1 M = np.zeros((nstates, ngenerations)) M[nmutants_initial, 0] = 1.0 M[nmutants_final, ngenerations-1] = 1.0 for i in range(ngenerations-2): A_exponent = i + 1 B_exponent = ngenerations - 1 - A_exponent A = np.linalg.matrix_power(P, A_exponent) B = np.linalg.matrix_power(P, B_exponent) weights = np.zeros(nstates) for k in range(nstates): weights[k] = A[nmutants_initial, k] * B[k, nmutants_final] weights /= np.sum(weights) for k, p in enumerate(weights): M[k, i+1] = p arr = [] for g in range(ngenerations): for k in range(nstates): p = M[k, g] allele_frequency = k / float(npop) # Finer gridding needs larger scaling for the density # because each interval has a smaller support. density = p * nstates if density: log_density = math.log(density) else: log_density = float('-inf') row = [g, allele_frequency, p, log_density] arr.append(row) # create the R table string and scripts # get the R table table_string = RUtil.get_table_string(arr, headers) # get the R script script = get_ggplot(nstates) # create the R plot image device_name = Form.g_imageformat_to_r_function[fs.imageformat] retcode, r_out, r_err, image_data = RUtil.run_plotter( table_string, script, device_name) if retcode: raise RUtil.RError(r_err) return image_data