def test_symetrie(): eps = 1e-4 P = Polymer(0, start=0, end=2, origins=[0, 2]) P.increment_time(dt=0.5) P.add_fork(ptags=["Left", "Right"], otag=0, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) P.add_fork(ptags=["Left1", "Right1"], otag=2, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) for t in range(4): #print("Avant",[[p,p.position] for p in P.modules]) inc = P.increment_time(dt=0.5) #print(inc) bind_diff, diff_diff, update_bond, passivated_origin, to_release, alone = inc #print(P.ended[-1].position) #print("Apres",[[p,p.position] for p in P.modules]) #print(P.end) if t == 0: assert ("Right1" in alone and "Left" in alone) #print("Here") for p in P.ended: if p.tag in ["Left", "Right1"]: #print("path", p.path,len) assert (len(p.path) == 1) elif p.tag in ["Left1", "Right"]: assert (len(p.path) == 2) if p.tag == "Right": #print(p.path) assert (p.path[0].pos == 0.5 and p.path[1].pos == 1) if p.tag == "Left1": #print(p.path,p.position) assert (p.path[0].pos == 2.5 and p.path[1].pos == 1.5) #print(p.tag,p.path) assert (np.all(P.get_replication_profile(1) == [1, 2, 1]))
def test_remove_passivated4(): P = Polymer(0, start=0, end=2, origins=[0, 1, 2]) P.modules[1].position = 1.9 P.modules[2].position = 2.1 P.add_fork(ptags=["Left", "Right"], otag=0, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) for t in range(5): #print("Avant",[[p,p.position] for p in P.modules]) inc = P.increment_time(dt=1) bind_diff, diff_diff, update_bond, passivated_origin, to_release, alone = inc #print(P.ended[-1].position) #print("Apres",[[p,p.position] for p in P.modules]) #print(P.end) #print(P.modules) #print(t,passivated_origin) if t == 0: assert ("Left" in alone) #print("Here") for p in P.ended: if p.tag in ["Right"]: #print("path", p.path,len) assert (len(p.path) == 1) if t == 1: assert (1 in passivated_origin and 2 in passivated_origin) #print(P.get_replication_profile(1)) assert (np.all(P.get_replication_profile(1) == [1, 2, 3]))
def test_jump2(): P = Polymer(0, start=0, end=2, origins=[0, 2]) # P.add_fork(ptags=["Left", "Right"], otag=2, new_btags=[None, None], diff_diff_tag=None, fork_speed=3) for t in range(3): #print([m.path for m in P.modules if m.move]) P.increment_time(dt=1) assert (np.all(P.get_replication_profile(1) == [1, 1, 1]))
def test_It(): P = Polymer(0, start=0, end=2, origins=[0, 2]) P.increment_time(dt=0.5) P.add_fork(ptags=["Left", "Right"], otag=0, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) P.add_fork(ptags=["Left1", "Right1"], otag=2, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) for t in range(3): P.increment_time(dt=1) #print([m.path for m in P.ended if m.move]) #print(P.get_replication_profile(1)) It = P.get_firing_time_It(cut=0, normed=False, dt=0.5) #print(It) assert (np.all(It[1] == array([0., 2., 0., 0., 0., 0., 0., 0., 0., 0.]))) assert (np.all(It[0] == array([1, 1])))
def test_simple2(): P = Polymer(0, start=0, end=2, origins=[0, 2]) P.increment_time(dt=0.5) P.add_fork(ptags=["Left", "Right"], otag=0, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) P.add_fork(ptags=["Left1", "Right1"], otag=2, new_btags=[None, None], diff_diff_tag=None, fork_speed=1) for t in range(3): P.increment_time(dt=1) #print([m.path for m in P.ended if m.move]) #print(P.get_replication_profile(1)) assert (np.all(P.get_replication_profile(1) == [1, 2, 1]))
def __init__(self, nori, ndiff, lengths, p_on, p_off, only_one=False, fork_speed=1, dt_speed=1, tolerance=0.1, gindin=True, p_v=1, random=False, positions=None, ramp=None, max_ramp=None, ramp_type="linear", strengths=None, fsd="uniform", variance_fs=1): self.p_on = p_on self.p_off = p_off self.ndiff = ndiff self.oris = [] self.only_one = only_one self.lengths = lengths self.dt_speed = dt_speed self.fs = fork_speed self.fsd = fsd self.vfs = variance_fs self.gindin = gindin self.p_v = p_v self.Ndiff_libre_t = [] self.positions = positions self.ramp = ramp self.max_ramp = max_ramp self.strengths = copy.deepcopy(strengths) self.uniform_strength = False self.ramp_type = ramp_type if self.ramp_type not in ["linear", "exp", "pulse"]: raise "Invalid ramp type" if self.max_ramp and self.max_ramp > self.ndiff: print(self.max_ramp, self.ndiff) raise "Problem max_ramp > ndiff" # print(nori) assert (len(lengths) == len(nori)) starts = [0] + np.cumsum(lengths).tolist() # print(starts) for el, length, start in zip(nori, lengths, starts): if type(el) in [list, np.ndarray]: self.oris.append(el) continue self.oris.append([]) while (el - len(self.oris[-1])) / el > tolerance: self.oris[-1] = [ np.random.randint(length) for ori in range(el) ] self.oris[-1] = list(set(self.oris[-1])) # print(self.oris) # print(len(self.oris),(nori-len(self.oris)) / nori) if strengths is None or strengths == []: self.uniform_strength = True self.strengths = [[1] * len(o) for o in self.oris] if positions is None: self.polys = [ Polymer(i, start, start + length - 1, np.array(oris) + start, random=random, strengths=strengths, max_fs=self.max_fs()) for i, (start, length, oris, strengths) in enumerate( zip(starts, lengths, self.oris, self.strengths)) ] else: self.polys = [ Polymer(i, start, start + length - 1, np.array(oris) + start, random=random, positions=np.array(position) + start, strengths=strengths, max_fs=self.max_fs()) for i, (start, length, oris, position, strengths) in enumerate( zip(starts, lengths, self.oris, self.positions, self.strengths)) ] class MyD(dict): def __init__(self, *args): dict.__init__(self, *args) self.set = 0 def __setitem__(self, key, value): if key == 0 and value == 0: self.set += 1 if self.set == 1: raise dict.__setitem__(self, key, value) self.libre = {d: 0 for d in np.arange(ndiff)} self.origins = {d: None for d in np.arange(ndiff)} self.record_diffusing = [Diffusing(d) for d in np.arange(ndiff)] self.fork_speeds = []