Esempio n. 1
0
def add_deletions(design: sc.Design):

    for helix in range(3, maxhelix):
        if not design.strands_starting_on_helix(helix):
            pass
        else:
            hel1 = helix  #first starting helix
            break

    for helix in range(hel1, maxhelix, 2):
        for offset in range(block * cmax):
            if design.domains_at(helix, offset) and offset % 48 == 0:
                design.add_deletion(helix, offset)
Esempio n. 2
0
def add_angle_inducing_insertions_deletions(design: sc.Design):
    # insertion followed by deletion
    start = 59
    end = start + (32 * 12)
    for helix in [1, 5, 7, 11, 13]:
        for offset in range(start, end, 32):
            design.add_insertion(helix, offset, 1)
            design.add_deletion(helix, offset + 16)

    # deletion followed by insertion
    for helix in [2, 4, 8, 10, 14]:
        for offset in range(start, end, 32):
            design.add_deletion(helix, offset)
            design.add_insertion(helix, offset + 16, 1)
def add_deletion_in_range(design: sc.Design, helix: int, start: int, end: int,
                          deletion_offset: int) -> None:
    # Inserts deletion somewhere in given range.

    # `offset` is the relative offset within a column at which to put the deletions.
    # If negative, chooses first available offset.
    candidate_offsets = []
    for candidate_deletion_offset in range(start, end):
        if valid_deletion_offset(design, helix, candidate_deletion_offset):
            candidate_offsets.append(candidate_deletion_offset)
    if len(candidate_offsets) == 0:
        raise ValueError(f"no pair of Substrands found on Helix {helix} "
                         f"overlapping interval [{start},{end})")
    if deletion_offset < 0:
        # pick offset furthest from edges of interval
        candidate_offsets.sort(
            key=lambda offset: min(offset - start, end - offset))
        deletion_absolute_offset = candidate_offsets[0]
    else:
        deletion_absolute_offset = start + deletion_offset
    design.add_deletion(helix, deletion_absolute_offset)
def add_twist_correct_deletions(design: sc.Design) -> None:
    # I choose between 3 and 4 offset arbitrarily for twist-correction deletions for some reason,
    # so they have to be hard-coded.
    for col, offset in zip(range(4, 29, 3), [4, 3, 3, 4, 3, 3, 3, 3, 3]):
        for helix in range(2, 18):
            design.add_deletion(helix, 16 * col + offset)
def add_deletions(design: sc.Design):
    for helix in range(24):
        for offset in range(27, 294, 48):
            design.add_deletion(helix, offset)
def add_twist_correction_deletions(design: sc.Design) -> None:
    for helix in range(24):
        for offset in range(19, 286, 48):
            design.add_deletion(helix, offset)