Source code for simularium_readdy_models.kinesin.kinesin_simulation

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import readdy

from ..common import ReaddyUtil
from ..microtubules import MicrotubulesUtil
from .kinesin_util import KinesinUtil


[docs]class KinesinSimulation: def __init__(self, parameters, record=False, save_checkpoints=False): """ Creates a ReaDDy kinesin simulation Params = Dict[str, float] keys: total_steps, timestep, box_size, temperature_C, viscosity, force_constant, grow_reaction_distance, attach_reaction_distance, n_cpu, tubulin_concentration, seed_n_rings, seed_n_frayed_rings_minus, seed_n_frayed_rings_plus, seed_position_offset_x, seed_position_offset_y, seed_position_offset_z, tubulin_radius, protofilament_growth_GTP_rate, protofilament_growth_GDP_rate, protofilament_shrink_GTP_rate, protofilament_shrink_GDP_rate, ring_attach_GTP_rate, ring_attach_GDP_rate, ring_detach_GTP_rate, ring_detach_GDP_rate, hydrolyze_rate, verbose """ self.parameters = parameters self.kinesin_util = KinesinUtil(self.parameters) self.create_kinesin_system() self.simulation = ReaddyUtil.create_readdy_simulation( self.system, self.parameters["n_cpu"], self.parameters["name"], self.parameters["total_steps"], record, save_checkpoints, )
[docs] def create_kinesin_system(self): """ Create the ReaDDy system for kinesin including particle types, constraints, and reactions """ self.system = readdy.ReactionDiffusionSystem([self.parameters["box_size"]] * 3) self.parameters["temperature_K"] = self.parameters["temperature_C"] + 273.15 self.system.temperature = self.parameters["temperature_K"] self.motor_types = ["motor#ADP", "motor#ATP", "motor#apo", "motor#new"] self.tubulin_types = ["tubulinA#", "tubulinB#", "tubulinB#bound_"] self.add_kinesin_types() self.add_kinesin_constraints() self.add_kinesin_reactions()
[docs] def add_kinesin_types(self): """ Add particle and topology types for kinesin particles to the ReaDDy system """ temperature_K = self.parameters["temperature_K"] viscosity = self.parameters["viscosity"] hips_diffCoeff = ReaddyUtil.calculate_diffusionCoefficient( self.parameters["hips_radius"], viscosity, temperature_K ) # nm^2/s cargo_diffCoeff = ReaddyUtil.calculate_diffusionCoefficient( self.parameters["cargo_radius"], viscosity, temperature_K ) # nm^2/s motor_diffCoeff = ReaddyUtil.calculate_diffusionCoefficient( self.parameters["motor_radius"], viscosity, temperature_K ) # nm^2/s tubulin_diffCoeff = ReaddyUtil.calculate_diffusionCoefficient( self.parameters["tubulin_radius"], viscosity, temperature_K ) # nm^2/s self.system.topologies.add_type("Kinesin") self.system.topologies.add_type("Microtubule-Kinesin#ADP-ATP") self.system.topologies.add_type("Microtubule-Kinesin#ADP-apo") self.system.topologies.add_type("Microtubule-Kinesin#ATP-ATP") self.system.topologies.add_type("Microtubule-Kinesin#ATP-apo") self.system.topologies.add_type("Microtubule-Kinesin#apo-apo") self.system.topologies.add_type("Microtubule-Kinesin#Binding") self.system.topologies.add_type("Microtubule-Kinesin#Releasing") self.system.add_topology_species("hips", hips_diffCoeff) self.system.add_topology_species("cargo", cargo_diffCoeff) for motor_type in self.motor_types: self.system.add_topology_species(motor_type, motor_diffCoeff) self.system.topologies.add_type("Microtubule") for tubulin_type in self.tubulin_types: MicrotubulesUtil.add_polymer_topology_species( tubulin_type, tubulin_diffCoeff, self.system )
[docs] def add_kinesin_constraints(self): """ Add geometric constraints for connected kinesin particles, including bonds, angles, and repulsions, to the ReaDDy system """ force_constant = self.parameters["force_constant"] microtubule_force_constant = self.parameters["microtubules_force_constant"] util = ReaddyUtil() self.kinesin_util.add_kinesin_bonds_and_repulsions( self.motor_types, force_constant, self.system, util ) self.kinesin_util.add_kinesin_angles_and_dihedrals( self.tubulin_types[-1:], force_constant, self.system, util ) self.kinesin_util.add_tubulin_bonds_and_repulsions( self.tubulin_types, microtubule_force_constant, self.system, util ) self.kinesin_util.add_angles_between_tubulins( self.tubulin_types, microtubule_force_constant, self.system, util ) self.kinesin_util.add_motor_tubulin_interactions( self.motor_types, self.tubulin_types[-2:], self.tubulin_types, force_constant, self.system, util, )
[docs] def add_kinesin_reactions(self): """ Add reactions to the ReaDDy system """ self.kinesin_util.add_motor_bind_tubulin_reaction( self.system, self.parameters["motor_bind_tubulin_rate"], self.parameters["reaction_distance"], ) self.kinesin_util.add_motor_bind_ATP_reaction(self.system) self.kinesin_util.add_motor_release_tubulin_reaction(self.system)
[docs] def add_microtubule(self): """ Add a microtubule """ MicrotubulesUtil.add_microtubule( int(self.parameters["microtubule_n_rings"]), 0, 0, np.zeros(3), self.simulation, False, )
[docs] def add_kinesin(self): """ Add a kinesin """ self.kinesin_util.add_kinesin( np.array( [ self.parameters["kinesin_position_x"], self.parameters["kinesin_position_y"], self.parameters["kinesin_position_z"], ] ), self.simulation, )