Ejemplo n.º 1
0
    def create_default_init_cell_node_coords(self, bounding_box,
                                             init_cell_radius, num_nodes):
        cell_centre = calc_bounding_box_centre(bounding_box)

        cell_node_thetas = np.pi * np.linspace(
            0, 2, endpoint=False, num=num_nodes)
        cell_node_coords = np.transpose(
            np.array([
                cell_centre[0] + init_cell_radius * np.cos(cell_node_thetas),
                cell_centre[1] + init_cell_radius * np.sin(cell_node_thetas)
            ]))

        edge_vectors = geometry.calculate_edge_vectors(num_nodes,
                                                       cell_node_coords)

        edge_lengths = geometry.calculate_2D_vector_mags(
            num_nodes, edge_vectors)

        length_edge_resting = np.average(edge_lengths)

        area_resting = geometry.calculate_polygon_area(num_nodes,
                                                       cell_node_coords)
        if area_resting < 0:
            raise StandardError("Resting area was calculated to be negative.")
        return cell_node_coords, length_edge_resting, area_resting
Ejemplo n.º 2
0
    def create_default_init_cell_verts(
            bbox, cell_r
    ):
        cell_centre = calc_bb_centre(bbox)

        cell_node_thetas = np.pi * \
                           np.linspace(0, 2, endpoint=False, num=16)
        cell_verts = np.transpose(
            np.array(
                [
                    cell_r * np.cos(cell_node_thetas),
                    cell_r * np.sin(cell_node_thetas),
                ]
            )
        )

        # rotation_theta = np.random.rand()*2*np.pi
        # cell_verts = np.array([
        # geometry.rotate_2D_vector_CCW_by_theta(rotation_theta, x) for x in
        # cell_verts], dtype=np.float64)
        cell_verts = np.array(
            [[x + cell_centre[0], y + cell_centre[1]] for x, y in
             cell_verts],
            dtype=np.float64,
        )

        edge_vectors = geometry.calculate_edge_vectors(cell_verts)

        edge_lengths = geometry.calculate_vec_mags(edge_vectors)

        rest_edge_len = np.average(edge_lengths)

        rest_area = geometry.calculate_polygon_area(cell_verts)
        if rest_area < 0:
            raise Exception("Resting area was calculated to be negative.")
        return cell_verts, rest_edge_len, rest_area
Ejemplo n.º 3
0
    def set_next_state(
        self,
        next_state_array,
        close_point_smoothness_factors,
        x_cils,
        x_coas,
    ):
        self.tpoint += self.dt
        self.insert_state_array_into_system_history(next_state_array)

        verts = self.curr_state[:, [parameters.x_ix, parameters.y_ix]]

        edge_displacement_vectors_plus = geometry.calculate_edge_vectors(verts)
        edge_lengths = geometry.calculate_vec_mags(
            edge_displacement_vectors_plus)

        self.curr_state[:, parameters.edge_lengths_ix] = edge_lengths
        self.curr_state[:, parameters.old_x_coa_ix] = x_coas
        self.curr_state[:, parameters.old_x_cil_ix] = x_cils

        # ==================================
        if self.tpoint == self.next_randomization_event_tpoint:
            self.next_randomization_event_tpoint += 1200

            # randomization event has occurred, so renew Rac kgtp rate
            # multipliers
            self.rac_rands = \
                self.renew_rac_rands(
                    self.tpoint)

        # store the Rac randomization factors for this timestep
        self.curr_state[:, parameters.rac_rands_ix] = self.rac_rands

        # ==================================
        rac_acts = self.curr_state[:, parameters.rac_act_ix]
        rho_acts = self.curr_state[:, parameters.rho_act_ix]

        self.curr_state[:, parameters.old_x_cil_ix] = x_cils
        self.curr_state[:, parameters.old_x_coa_ix] = x_coas

        rac_cyto = (1 - np.sum(rac_acts) -
                    np.sum(self.curr_state[:, parameters.rac_inact_ix]))
        rho_cyto = (1 - np.sum(rho_acts) -
                    np.sum(self.curr_state[:, parameters.rho_inact_ix]))

        insertion_array = np.zeros(16)
        insertion_array[0] = 1

        self.curr_state[:,
                        parameters.rac_cyto_ix] = (rac_cyto * insertion_array)
        self.curr_state[:,
                        parameters.rho_cyto_ix] = (rho_cyto * insertion_array)

        sum_forces, edge_forces_plus, edge_forces_minus, uevs, rgtp_forces, \
        cyto_forces, \
        edge_strains, local_strains, unit_inside_pointing_vecs = \
            mechanics.calculate_forces(
                verts,
                rac_acts,
                rho_acts,
                self.rest_edge_len,
                self.stiffness_edge,
                self.halfmax_vertex_rgtp,
                self.const_protrusive,
                self.const_retractive,
                self.rest_area,
                self.stiffness_cyto,
            )

        self.curr_state[:, parameters.local_strains_ix] = local_strains

        edgeplus_lengths = geometry.calculate_edgeplus_lengths(verts)
        avg_edge_lengths = geometry.calculate_average_edge_length_around_nodes(
            edgeplus_lengths)

        conc_rac_acts = chemistry.calc_concs(rac_acts, avg_edge_lengths)

        conc_rho_acts = chemistry.calc_concs(rho_acts, avg_edge_lengths)

        self.curr_state[:, parameters.rac_rands_ix] = self.rac_rands

        kgtp_racs = chemistry.calculate_kgtp_rac(
            conc_rac_acts,
            self.halfmax_vertex_rgtp_conc,
            self.kgtp_rac,
            self.kgtp_rac_auto,
            x_coas,
            self.rac_rands,
            x_cils,
            close_point_smoothness_factors,
        )

        kdgtps_rac = chemistry.calculate_kdgtp_rac(
            conc_rho_acts,
            self.halfmax_vertex_rgtp_conc,
            self.kdgtp_rac,
            self.kdgtp_rho_on_rac,
            x_cils,
            self.halfmax_tension_inhib,
            self.tension_inhib,
            np.array([ls if ls > 0 else 0.0 for ls in local_strains]),
        )

        kdgtps_rho = chemistry.calculate_kdgtp_rho(
            conc_rac_acts,
            self.halfmax_vertex_rgtp_conc,
            self.kdgtp_rho,
            self.kdgtp_rac_on_rho,
        )

        kgtp_rhos = chemistry.calculate_kgtp_rho(
            conc_rho_acts,
            x_cils,
            self.halfmax_vertex_rgtp_conc,
            self.kgtp_rho,
            self.kgtp_rho_auto,
        )

        self.curr_state[:, parameters.kgtp_rac_ix] = kgtp_racs
        self.curr_state[:, parameters.kgtp_rho_ix] = kgtp_rhos

        self.curr_state[:, parameters.kdgtp_rac_ix] = kdgtps_rac

        self.curr_state[:, parameters.kdgtp_rho_ix] = kdgtps_rho

        # update mechanics parameters
        self.curr_state[:, [
            parameters.sum_forces_x_ix, parameters.sum_forces_y_ix
        ]] = sum_forces
        self.curr_state[:, [parameters.edge_forces_plus_x_ix,
                            parameters.edge_forces_plus_y_ix]] = \
            edge_forces_plus
        self.curr_state[:, [parameters.edge_forces_minus_x_ix,
                            parameters.edge_forces_minus_y_ix]] = \
            edge_forces_minus
        self.curr_state[:, [
            parameters.rgtp_forces_x_ix, parameters.rgtp_forces_y_ix
        ]] = rgtp_forces
        self.curr_state[:, [
            parameters.cyto_forces_x_ix, parameters.cyto_forces_y_ix
        ]] = cyto_forces

        self.curr_state[:, [parameters.uiv_x_ix, parameters.
                            uiv_y_ix]] = unit_inside_pointing_vecs
        self.curr_verts = verts
Ejemplo n.º 4
0
def make_chem_mech_space_parameter_defn_dict(C_total=3e6, H_total=1.5e6, num_nodes=15, num_cells=1, init_cell_radius=12.5e-6, cell_group_bounding_box=np.array([0, 50, 0, 50])*1e-6, stiffness_edge=2e-10, stiffness_cytoplasmic=100, kgtp_rac_multiplier=40, kgtp_rac_autoact_multiplier=1000, kdgtp_rac_multiplier=17, kdgtp_rho_mediated_rac_inhib_multiplier=30, kgtp_rho_multiplier=200, kgtp_rho_autoact_multiplier=350, kdgtp_rho_multiplier=250, kdgtp_rac_mediated_rho_inhib_multiplier=67, kdgdi_rac_estimate_multiplier=1, kdgdi_rho_estimate_multiplier=1, kgdi_rac_estimate_multiplier=1, kgdi_rho_estimate_multiplier=1, threshold_tension_mediated_rac_inhib=0.2*0.75, exponent_tension_mediated_rac_inhib=3, biased_rgtpase_distrib_defn=['unbiased random', 0, 0], threshold_rac_autoact_multiplier=0.5, threshold_rho_autoact_multiplier=0.5, threshold_rho_mediated_rac_inhib_multiplier=0.5, threshold_rac_mediated_rho_inhib_multiplier=0.5, space_at_node_factor_rac=1, space_at_node_factor_rho=1, migr_bdry_contact_factor_mag=2, init_rgtpase_cytosol_gdi_bound_frac = 0.8, init_rgtpase_membrane_inactive_frac = 0.1, init_rgtpase_membrane_active_frac = 0.1, intercellular_contact_factor_magnitudes=np.array([2]), halfmax_coa_sensing_dist_multiplier=3, max_protrusive_node_velocity=0.25e-6, sigma_rac=2e-4, sigma_rho_multiplier=0.2, force_rac_exp=3, force_rho_exp=3, force_rac_threshold_multiplier=0.5, force_rho_threshold_multiplier=0.5, closeness_dist_squared_criteria=(0.5e-6)**2, exponent_rac_autoact=3, exponent_rho_autoact=3, exponent_rho_mediated_rac_inhib=3, exponent_rac_mediated_rho_inhib=3, randomization_scheme=0, randomization_time_mean=20, randomization_time_variance_factor=0.25, randomization_width_baseline=2, randomization_width_halfmax_threshold=0.3, randomization_width_hf_exponent=3, randomization_centre=0.15, randomization_width=10, randomization_depth=1.0, randomization_function_type=0, randomization=False, skip_dynamics=False, randomization_rgtpase_distrib_strength=0.1, tension_mediated_rac_inhibition_half_strain=0.025, tension_mediated_rac_hill_exponent=3, tension_fn_type=0, coa_sensitivity_percent_drop_over_cell_diameter=0.25, coa_belt_offset_multiplier=1.0):
    
    kgtp_rac_factor = 1.5e-4 # per second
    kdgtp_rac_factor = 1.8e-4 # per second
    
    kgtp_rho_factor = 1.5e-4 # per second    
    kdgtp_rho_factor = 3.5e-4 # per second

    kdgdi_rac_estimate = 0.1*kdgdi_rac_estimate_multiplier # per second
    kgdi_rac_estimate = 0.1*kgdi_rac_estimate_multiplier # per second
    
    kdgdi_rho_estimate = 0.1*kdgdi_rho_estimate_multiplier # per second
    kgdi_rho_estimate = 0.1*kgdi_rho_estimate_multiplier # per second
    
    assert(init_rgtpase_cytosol_gdi_bound_frac + init_rgtpase_membrane_inactive_frac + init_rgtpase_membrane_active_frac == 1)
    
    #--------------   
    kgtp_rac_baseline = kgtp_rac_factor*(kgtp_rac_multiplier + 1) # per second
    kdgtp_rac_baseline = kdgtp_rac_factor*(kdgtp_rac_multiplier + 1) # per second
    #--------------
    kgtp_rho_baseline = kgtp_rho_factor*(kgtp_rho_multiplier + 1) # per second
    kdgtp_rho_baseline = kdgtp_rho_factor*(kdgtp_rho_multiplier + 1) # per second
    #--------------
    kgtp_rac_autoact_baseline = kgtp_rac_autoact_multiplier*kgtp_rac_factor # per second
    kgtp_rho_autoact_baseline = kgtp_rho_autoact_multiplier*kgtp_rho_factor # per second
    #--------------
    kdgtp_rho_mediated_rac_inhib_baseline = kdgtp_rac_factor*kdgtp_rho_mediated_rac_inhib_multiplier # per second
    kdgtp_rac_mediated_rho_inhib_baseline = kdgtp_rho_factor*kdgtp_rac_mediated_rho_inhib_multiplier # per second
    #--------------
    kgdi_rac = kgdi_rac_estimate # per second
    kdgdi_rac = kdgdi_rac_estimate # per second
    #--------------
    kgdi_rho = kgdi_rho_estimate # per second
    kdgdi_rho = kdgdi_rho_estimate # per second
    #--------------
    threshold_rac_autoact = threshold_rac_autoact_multiplier*C_total
    threshold_rho_autoact = threshold_rho_autoact_multiplier*H_total
    #--------------
    threshold_rho_mediated_rac_inhib = threshold_rho_mediated_rac_inhib_multiplier*H_total
    threshold_rac_mediated_rho_inhib = threshold_rac_mediated_rho_inhib_multiplier*C_total
    #--------------
    force_rac_threshold = force_rac_threshold_multiplier*C_total
    force_rho_threshold = force_rho_threshold_multiplier*H_total
    #--------------
    diffusion_const = 0.15*1e-12
    diffusion_const_active = diffusion_const # micrometers squared per second
    diffusion_const_inactive = diffusion_const # micrometers squared per second
    #--------------
    
    cell_node_thetas = np.pi*np.linspace(0, 2, endpoint=False, num=num_nodes)
    cell_node_coords = np.transpose(np.array([init_cell_radius*np.cos(cell_node_thetas), init_cell_radius*np.sin(cell_node_thetas)]))
    edge_vectors = geometry.calculate_edge_vectors(num_nodes, cell_node_coords)
    edge_lengths = geometry.calculate_2D_vector_mags(num_nodes, edge_vectors)
        
    length_edge_resting = np.average(edge_lengths)
        
    eta = (sigma_rac*length_edge_resting)/max_protrusive_node_velocity
    #--------------
    factor_migr_bdry_contact = 10
    #--------------
    stiffness_cytoplasmic = 0.00001 # Newtons
    #--------------
    halfmax_coa_sensing_dist = halfmax_coa_sensing_dist_multiplier*25e-6
    coa_belt_offset = coa_belt_offset_multiplier*2*init_cell_radius

    ignore_list = ['intercellular_contact_factor_magnitudes', 'space_physical_bdry_polygon', 'space_migratory_bdry_polygon', 'cell_dependent_coa_signal_strengths']
    relevant_labels = [label for label in standard_chem_mech_space_parameter_labels if label not in ignore_list]
    parameter_definition_dict = dict(zip(relevant_labels, [eval(label) for label in relevant_labels]))
    
    return parameter_definition_dict
Ejemplo n.º 5
0
def refine_raw_params(raw_params):
    params = copy.deepcopy(raw_params)

    params["coa_vertex_mag"] = raw_params["coa_mag"] / 16
    params["coa_halfmax_dist"] = raw_params["coa_halfmax_dist"] / params["l"]
    params["coa_distrib_exp"] = calc_coa_distrib_exp(
        params["coa_halfmax_dist"])
    params["init_cyto_rgtp"] = 1 - raw_params["init_inact_rgtp"] - \
                               raw_params["init_act_rgtp"]
    # --------------
    params["kgtp_rac"] = (params["kgtp"] * raw_params["kgtp_rac"] * params["t"]
                          )  # per second
    params["kdgtp_rac"] = (params["kgtp"] * raw_params["kdgtp_rac"] *
                           params["t"])  # per second
    # --------------
    params["kgtp_rho"] = (params["kgtp"] *
                          raw_params["kgtp_rho"]) * params["t"]
    params["kdgtp_rho"] = (params["kgtp"] *
                           raw_params["kdgtp_rho"]) * params["t"]
    # --------------
    params["kgtp_rac_auto"] = \
        raw_params["kgtp_rac_autoact"] * params["kgtp"] * params["t"]
    params["kgtp_rho_auto"] = \
        raw_params["kgtp_rho_autoact"] * params["kgtp"] * params["t"]
    # --------------
    params["kdgtp_rho_on_rac"] = (params["kgtp"] *
                                  raw_params["kdgtp_rho_on_rac"] * params["t"]
                                  )  # per second
    params["kdgtp_rac_on_rho"] = (params["kgtp"] *
                                  raw_params["kdgtp_rac_on_rho"] * params["t"]
                                  )  # per second
    # --------------
    params["k_mem_off"] = (params["k_mem_off"] * raw_params["kgdi"] *
                           params["t"])  # per second
    params["k_mem_on_vertex"] = (params["k_mem_on"] * raw_params["kdgdi"] *
                                 params["t"] / 16)  # per second
    del params["k_mem_on"]
    # --------------
    params["diffusion_rgtp"] = \
        raw_params["diffusion_rgtp"] * (params["t"] / (params["l"] ** 2))
    # --------------
    params["halfmax_vertex_rgtp"] = \
        raw_params["halfmax_vertex_rgtp"] / 16
    # --------------
    params["cell_r"] = raw_params["cell_r"] / params["l"]
    vert_thetas = np.pi * np.linspace(0, 2, endpoint=False, num=16)
    cell_verts = np.transpose(
        np.array([
            params["cell_r"] * np.cos(vert_thetas),
            params["cell_r"] * np.sin(vert_thetas),
        ]))
    edge_vectors = geometry.calculate_edge_vectors(cell_verts)
    edge_lengths = geometry.calculate_vec_mags(edge_vectors)

    params["rest_edge_len"] = np.average(edge_lengths)
    params["rest_area"] = geometry.calculate_polygon_area(cell_verts)
    params["halfmax_vertex_rgtp_conc"] = params["halfmax_vertex_rgtp"] / \
                                         params["rest_edge_len"]

    params["vertex_eta"] = (params["vertex_eta"] * params["eta"] / 16) / \
                           (params["f"] / (params["l"] / params["t"]))
    params["stiffness_edge"] = \
        raw_params["stiffness_edge"] * \
        params["l3d"] * \
        params["l"] / params["f"]
    params["const_protrusive"] = \
        raw_params["lm_ss"] * raw_params["lm_h"] * \
        (params["rest_edge_len"] * params["l"]) * \
        params["halfmax_rgtp_max_f_frac"] / params["f"]
    params["const_retractive"] = (raw_params["force_rho"] *
                                  params["const_protrusive"])
    params["stiffness_cyto"] = raw_params["stiffness_cyto"] / params["f"] / 16
    # --------------
    params["zero_at"] = raw_params["close_zero_at"] / params["l"]
    params["one_at"] = raw_params["close_one_at"] / params["l"]
    # --------------
    params["rand_avg_t"] = raw_params["rand_avg_t"] * 60.0 / params["t"]
    params["rand_std_t"] = raw_params["rand_std_t"] * 60.0 / params["t"]
    params["rand_mag"] = raw_params["rand_mag"]

    params["snap_period"] = raw_params["snap_period"] / params["t"]
    return params