Beispiel #1
0
def splice_prep(step, pos_1, pos_2):
    """ Introduces the main body of the splicosome
        to assemble with the other parts and cut the intron """
    left, right = pos_1[:], pos_2[:]
    left[0] *= 0.94
    right[0] *= 0.89
    left[1] *= -1
    right[1] *= -1
    splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0],
                         models.splice_model)
    splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0],
                          models.splice_model)

    coord = get_added_distance(TP_START[8], TP_DUR[8], [0, 16, 0], step)
    y_loc = coord[1]
    splice_down = Sphere([0.5 * TWITCH1, 15 - y_loc, 2], BIG_SPLICE_SIZE,
                         "scale", [0, -1.25, 0], models.splice_model)

    text = Text(
        'ttf', '"timrom.ttf"',
        '"Here you see the main part of the spliceosome entering the screen"',
        0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1],
        models.text_model)
    text2 = Text(
        'ttf', '"timrom.ttf"',
        '"The smaller parts wil connect the intron ends to the main part"', 0,
        0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model)
    return [splice_left, splice_right, splice_down, text, text2]
Beispiel #2
0
def splice_cut(step, pos_1, pos_2):
    """ Moves both splice parts near each other and makes the cut """
    move = get_added_distance(TP_START[9], TP_DUR[9], [15, 5, 0], step)
    x_change, y_change = move[0], move[1]

    left, right = pos_1[:], pos_2[:]
    left[0] = 0.94 * left[0] - x_change
    right[0] = 0.89 * right[0] + x_change
    left[1] = -1 * left[1] - y_change
    right[1] = -1 * right[1] - y_change

    splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0],
                         models.splice_model)
    splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0],
                          models.splice_model)

    splice_down = Sphere([0, -1, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0],
                         models.splice_model)

    text = Text(
        'ttf', '"timrom.ttf"',
        '"Once the two smaller proteins have connected the intron ends"', 0, 0,
        'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model)
    text2 = Text('ttf', '"timrom.ttf"',
                 '"to the bigger protein, they will leave the reaction site"',
                 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1],
                 models.text_model)
    return [splice_left, splice_right, splice_down, text, text2]
Beispiel #3
0
def bind_schematic(frame, size):

    """
    Animating the binding part schematicly
    """

    insuline_model = Texture(Pigment('color', [0, 1, 0.5], ), Finish('reflection', 0))
    text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0))

    insuline = []
    s = size

    # frame 30 -> 120
    if frame < 120:
        x = (frame - 30) * (24.5*s / 90) - 30*s
        y = (frame - 30) * (-15*s / 90) + 20*s 
    else:
        x = -5*s
        y = 5*s

    insuline.append(Sphere([x, y, 0], s * 1.5, insuline_model))
    insuline.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Insulin')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [x - s, y-0.5*s, -2*s]))

    insuline.append(Sphere([0-x, y, 0], s * 1.5, insuline_model))
    insuline.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Insulin')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [0-x -1.4*s, y-0.5*s, -2*s]))

    return insuline
Beispiel #4
0
def s0_intro_text():
    """ This show the title of the animation with our names """
    title = Text('ttf', '"timrom.ttf"', '"RNA Splicing"', 0, 0, 'translate',
                 [-2.85, 0.9, -0], 'scale', [5, 5, 1], models.text_model)
    names = Text('ttf', '"timrom.ttf"', '"Reindert Visser and Vincent Talen"',
                 0, 0, 'translate', [-7.2, -0.5, -0], 'scale', [3, 3, 1],
                 models.text_model)
    return Scene(models.camera_scene0,
                 objects=[title, names] + models.lights_scene1)
Beispiel #5
0
def splice_text_scene():
    text = Text(
        'ttf', '"timrom.ttf"',
        '"Here we see pre-mRNA, it got created by duplicating a single strand of DNA"',
        0, 0, 'translate', [-15, 5, 5], 'scale', [1, 1, 1], models.text_model)
    text2 = Text(
        'ttf', '"timrom.ttf"',
        '"In this pre-mRNA there are non-usable pieces, these are called introns"',
        0, 0, 'translate', [-15, -5.5, 5], 'scale', [1, 1, 1],
        models.text_model)
    return [text, text2]
Beispiel #6
0
def s1_cell_overview():
    """ This scene is a single cell centered without any movement """
    cell_sphere = Sphere([0, 0, 0], 25, models.cell_model)

    text = Text('ttf', '"timrom.ttf"',
                '"To begin you first need to know that"', 0, 0, 'translate',
                [-14.5, -5, -30], 'scale', [2.5, 2.5, 1], models.text_model)
    text2 = Text('ttf', '"timrom.ttf"',
                 '"RNA Splicing takes place in the cell"', 0, 0, 'translate',
                 [-14.5, -6.25, -30], 'scale', [2.5, 2.5, 1],
                 models.text_model)
    return Scene(models.camera_scene1,
                 objects=[cell_sphere, text, text2] + models.lights_scene1)
Beispiel #7
0
def frame(step):
    """ Makes an image/frame """
    time_point = (step / TOTAL_FRAMES) * SETTINGS.Duration
    logger.info(" @Time: %.4fs, Step: %d", time_point, step)

    # Declaration of the end times of the scenes
    global TP_END
    TP_END = [4, 8, 11, 15, 18, 26, 32, 38, 44, 50, 58, 64]
    # scene   0  1  2   3   4   5   6   7   8   9   10, 11

    # Globals that change per frame
    global TP_START, TP_DUR, TWITCH1, TWITCH2
    TP_START, TP_DUR = get_time_point_data(TP_END)
    TWITCH1, TWITCH2 = make_random_int()

    if time_point < TP_END[0]:
        scene = s0_intro_text()
    elif time_point < TP_END[1]:
        scene = s1_cell_overview()
    elif time_point < TP_END[2]:
        scene = s2_cell_zoom(step)
    elif time_point < TP_END[3]:
        scene = s3_in_cell()
    elif time_point < TP_END[4]:
        scene = s4_zoom_to_mrna(step)
    elif time_point < TP_END[11]:
        scene = scenes_mrna(step, time_point)
    else:
        text = Text('ttf', '"timrom.ttf"', '"Uh-oh, this ain\'t right"', 0, 0,
                    'translate', [-4, 0, 0], 'scale', [2, 2, 0],
                    models.text_model)
        scene = Scene(models.default_camera,
                      objects=[models.default_light, text])
    return scene
Beispiel #8
0
def bind_phosphorus(frame, size):
    """
    Animating the process of phosfor binding to the Tyr
    """

    phosphorus_model = Texture(Pigment('color', [1, 0, 1], ), Finish('reflection', 0))
    text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0))

    phosphorus = []
    s = size

    # frame 480 -> 570
    x_locs = [[-20, -5], [20, 5], [-20, -5], [20, 5]]
    y_locs = [13, 13, 10, 10]

    for _ in range(4):
        if frame < 570:
            x = (frame - 480) * ((x_locs[_][1]*s - x_locs[_][0]*s) / 90) + x_locs[_][0]*s
            y = 0 - y_locs[_] * s
        else:
            x = x_locs[_][1]*s
            y = 0 - y_locs[_]*s
        phosphorus.append(Sphere([x, y, 2], s * 1.2, phosphorus_model))
        phosphorus.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('P')), 0.5, [0, 0, 0], text_model, 'scale', 7, 'translate', [x - 0.2*s, y-0.5*s, -1.5*s]))
    return phosphorus
Beispiel #9
0
def splicing_final():
    """ Provides the spliceosome and the text whilst the mrna forms """
    splice_down = Sphere([0, -1, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0],
                         models.splice_model)

    text = Text(
        'ttf', '"timrom.ttf"',
        '"The spliceosome now disconnects the intron and binds one end of"', 0,
        0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model)
    text2 = Text(
        'ttf', '"timrom.ttf"',
        '"the intron to a suitable place on the other end of the intron."', 0,
        0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model)
    text3 = Text(
        'ttf', '"timrom.ttf"',
        '"Meanwhile the exons get put together to form the finished mRNA"', 0,
        0, 'translate', [-15, -7.5, 5], 'scale', [1, 1, 1], models.text_model)
    return [splice_down, text, text2, text3]
Beispiel #10
0
def s3_in_cell():
    """ This scene makes it clear that the splicing process takes place in the nucleus """
    nucleus = Sphere([20, 7.5, 0], 7.5, models.nucleus_model)
    nucleus_text = Text('ttf', '"timrom.ttf"', '"Nucleus"', 0, 0, 'translate',
                        [6.75, 2.8, -7.6], 'scale', [2, 2, 0],
                        models.text_model)

    text = Text('ttf', '"timrom.ttf"',
                '"To be even more specific, the RNA splicing"', 0, 0,
                'translate', [-13.25, -4.2, -0], 'scale', [2.35, 2.35, 1],
                models.text_model)
    text2 = Text('ttf', '"timrom.ttf"',
                 '"takes place in the nucleus of the cell"', 0, 0, 'translate',
                 [-13.25, -5.4, -0], 'scale', [2.35, 2.35, 1],
                 models.text_model)
    return Scene(models.camera_scene3,
                 objects=[nucleus, nucleus_text, text, text2] +
                 models.spot_lights)
Beispiel #11
0
def splice_intro(step):
    """ Introduces both two splice complexes from the angles of the screen """
    change_list = get_added_distance(TP_START[6], TP_DUR[6], [12, 0, 0], step)
    x_change = change_list[0]

    splice_left = Sphere([-15 + x_change, TWITCH1, 0], SPLICE_SIZE, "scale",
                         [1.5, -1, 0], models.splice_model)
    splice_right = Sphere([15 - 0.95 * x_change, TWITCH2, 0], SPLICE_SIZE,
                          "scale", [2, -1, 0], models.splice_model)

    text = Text('ttf', '"timrom.ttf"',
                '"The removal of the introns is done by the spliceosome"', 0,
                0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1],
                models.text_model)
    text2 = Text(
        'ttf', '"timrom.ttf"',
        '"As can been seen here the spliceosome consists out of multiple proteins"',
        0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model)
    return [splice_left, splice_right, text, text2]
Beispiel #12
0
def splicing_fadeout(step):
    """ Moves the whole spliceosome to the corner with the intron """
    x_fly, y_fly = fly_away(step)

    splice_down = Sphere([x_fly, -1 - y_fly, 2], BIG_SPLICE_SIZE, "scale",
                         [0, -1.25, 0], models.splice_model)

    text = Text('ttf', '"timrom.ttf"',
                '"The intron later gets recycled so it can be used again,"', 0,
                0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1],
                models.text_model)
    text2 = Text('ttf', '"timrom.ttf"',
                 '"the spliceosome goes to the next site and"', 0, 0,
                 'translate', [-15, -6, 5], 'scale', [1, 1, 1],
                 models.text_model)
    text3 = Text('ttf', '"timrom.ttf"',
                 '"the mRNA will be used to make a protein"', 0, 0,
                 'translate', [-15, -7.5, 5], 'scale', [1, 1, 1],
                 models.text_model)
    return [splice_down, text, text2, text3]
Beispiel #13
0
def splice_move_close(pos_1, pos_2):
    """ Merges the two splice complexes holding the pre-mRNA """
    left, right = pos_1[:], pos_2[:]
    left[0] *= 0.75
    right[0] *= 0.65
    left[1] *= -1
    right[1] *= -1
    splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0],
                         models.splice_model)
    splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0],
                          models.splice_model)

    text = Text(
        'ttf', '"timrom.ttf"',
        '"Two parts of the spliceosome seek out the beginning and the end of an intron"',
        0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1],
        models.text_model)
    text2 = Text(
        'ttf', '"timrom.ttf"',
        '"Their job is to bring them closer together and hand them over"', 0,
        0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model)
    return [splice_left, splice_right, text, text2]
Beispiel #14
0
def make_tyrine(loc, size):
    """
    Creates the tyrine molecules
    """
    text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0))
    cyl_model = Texture(Pigment('color', [0, 1, 0.5], ), Finish('reflection', 0))

    tyr = []
    y_always = [13, 13, 10, 10]
    x_text = [-3, 5, -3, 5]
    x_end = [-5, 5, -5, 5]
    x = loc[0]
    y = loc[1]
    z = loc[2] + 7
    for _ in range(4):
        tyr.append(Cylinder([x, y-size * y_always[_], z], [x-size*x_end[_], y-size*y_always[_], z], size, cyl_model))
        text = Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Tyr')), 2, [0, 0, 0], text_model, 'scale', 5, 'translate', [x-size*x_text[_], y-size*y_always[_], z - 7])
        tyr.append(text)
    return tyr
Beispiel #15
0
def bind_IRS(frame, size):
    """
    Animating the process of IRS binding to the phosfor
    """

    IRS_model = Texture(Pigment('color', [1, 0, 1], ), Finish('reflection', 0))
    text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0))

    IRS = []
    s = size

    # frame 570 -> 630
    if frame < 630:
        x = (frame - 570) * ((7*s-30*s) / 60) + 30*s
        y = -12*s
    else:
        x = 7*s
        y = -12*s

    IRS.append(Sphere([x, y, 0], s * 2, IRS_model))
    IRS.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('IRS')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [x - s, y, -2*s]))
    return IRS
Beispiel #16
0
def get_animation_data(num=0,
                       start_frame=0,
                       sme_pos_ethanol=((70, 0, 0), (0, 0, 0), (-70, 0, 0)),
                       ethanol_start_wacht=0,
                       ethanol_mid_wacht=-1,
                       aldh_speed=0,
                       show_name=False):
    """
    Gets the data for the animation

    Needed data per object:
    - (String) Name object
    - (Bool) Molecule
        - True (bool) part of molecule {if true keyframes end position xyz becomes offset}
            - True (string) object to split
            - True (list) atoms to split {!!Current program only supports 1 atom split at a time!!}
                - (int) atom
            - False (file_path) pdb document
        - False (vapory components) components {!!These components are static and cant move!!}
    - (list) The frames of the end position
        - (int) frame
    - (list) The xyz end positions
        - (list) xyz end postions of the complement frame.
            - (int/float) x position
            - (int/float) y position
            - (int/float) z position

    Optional data per object:
    - (list) The frames of the rotation
        - (int) frame
    - (list) The rotation end positions
        - (list) rotation axes and radians to rotate of the complement frame
            - (list) rotation axes
                - (int/float) x axel (0-1)
                - (int/float) y axel (0-1)
                - (int/float) z axel (0-1)
            - (list) radians
                - (int/float) x axel
                - (int/float) y axel
                - (int/float) z axel
    - (list) The frames when object should be shown of not
        - (int) frame
    - (list) shown or not for the the complement frame
        - (bool) Should the object be shown
    """
    ethanol_shown = False
    if num == 0:
        ethanol_shown = True
        # Camera
        camera = {
            "name":
            "camera",
            "molecule": [False, [0, 0, 100], [0, 0, 0]],
            "keyframe_endpos_frames": [0, 30, 90, 140, 190, 250, 280],
            "keyframe_endpos": [
                [[0, 0, 100], [0, 0, 0]],
                [[30, 0, 50], [30, 0, -10]],
                [[30, 0, 50], [30, 0, -10]],
                [[0, 0, 75], [0, 0, 0]],
                [[-30, 0, 50], [-30, 0, -10]],
                [[-30, 0, 50], [-30, 0, -10]],
                [[0, 0, 100], [0, 0, 0]],
            ],
        }

        # Static vapory objects
        enzyme1 = {
            "name":
            "enzyme1",
            "molecule": [
                False,
                Sphere([30, 0, -10], 4,
                       Texture(Pigment("color", [1, 0, 0], "filter", 0.2),
                               Finish("phong", 0.6, "reflection", 0.1))),
                Text("ttf", '"timrom.ttf"', '"ADH"', 0.1, 0, "scale",
                     [2, 2, 2], models.text_model, "rotate", [0, 180, 0],
                     "translate", [32.5, -6, -10])
            ],
            "keyframe_endpos_frames": [0],
            "keyframe_endpos": [
                [30, 0, -10],
            ],
        }

        enzyme2 = {
            "name":
            "enzyme2",
            "molecule": [
                False,
                Sphere([-30, 0, -10], 4,
                       Texture(Pigment("color", [0, 1, 0], "filter", 0.2),
                               Finish("phong", 0.6, "reflection", 0.1))),
                Text("ttf", '"timrom.ttf"', '"ALDH"', 0.1, 0, "scale",
                     [2, 2, 2], models.text_model, "rotate", [0, 180, 0],
                     "translate", [-27.5, -6, -10])
            ],
            "keyframe_endpos_frames": [0],
            "keyframe_endpos": [
                [-30, 0, -10],
            ],
        }
    # Molecules step 1 (alcohol dehydrogenase)
    ethanol1_1 = {
        "name":
        "ethanol{}_1".format(num),
        "molecule": [True, False, "pdb/ethanol2.pdb"],
        "keyframe_endpos_frames":
        [20, 29, 30, 75, 90, 140, 141, 190, 205, 250],
        "keyframe_endpos": [
            [
                sme_pos_ethanol[0][0] + 10, sme_pos_ethanol[0][1],
                sme_pos_ethanol[0][2]
            ],
            sme_pos_ethanol[0],
            sme_pos_ethanol[0],
            [30, 0, 0],
            [30, 0, 0, "join", False, "h_movement{}_1".format(num)],
            sme_pos_ethanol[1],
            sme_pos_ethanol[1],
            [-30, 0, 0],
            [-30, 0, 0, "join", False, "water{}_3".format(num)],
            sme_pos_ethanol[2],
        ],
        "keyframe_rotation_frames":
        [29, 30, 75, 90, 140, 141, 190, 205, 250, 500],
        "keyframe_rotation": [
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]],
            [[1, 1, 1], [math.pi * 8, math.pi * 8, math.pi * 8]],
        ],
        "keyframe_shown_frames": [0 - start_frame, 0, 250],
        "keyframe_shown": [ethanol_shown, True, True],
    }

    water1_1 = {
        "name":
        "water{}_1".format(num),
        "molecule": [True, False, "pdb/water.pdb"],
        "keyframe_endpos_frames": [30, 75, 90, 140],
        "keyframe_endpos": [
            [-30, -70, 0],
            [30, -7.5, 0],
            [30, -7.5, 0, "join", False, "waterstof{}_1".format(num)],
            [70, -70, 0],
        ],
        "keyframe_rotation_frames": [30, 75, 90, 140],
        "keyframe_rotation": [[[0, 0, 0], [0, 0, 0]],
                              [[1, 1, 1],
                               [math.pi * 2, math.pi * 2, math.pi * 2]],
                              [[0, 0, 0], [0, 0, 0]],
                              [[1, 1, 1],
                               [math.pi * 2, math.pi * 2, math.pi * 2]]],
        "keyframe_shown_frames": [0, 140],
        "keyframe_shown": [True, False],
    }

    nad1_1 = {
        "name":
        "NAD{}_1".format(num),
        "molecule": [True, False, "pdb/NAD.pdb"],
        "keyframe_endpos_frames": [30, 75, 90, 140],
        "keyframe_endpos": [
            [-30, 70, 0],
            [20, 7.5, 0],
            [
                20, 7.5, 0, "join", False, "h_movement_nad{}_1".format(num),
                "hNAD{}_1".format(num)
            ],
            [70, 70, 0],
        ],
        "keyframe_rotation_frames": [30, 75, 90, 140],
        "keyframe_rotation": [
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi, 1.5, 0]],
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi, math.pi * 2, math.pi]],
        ],
        "keyframe_shown_frames": [0, 140],
        "keyframe_shown": [True, False],
    }

    waterstof1_1 = {
        "name": "waterstof{}_1".format(num),
        "molecule": [True, True, "ethanol{}_1".format(num), [3]],
        "keyframe_endpos_frames": [75, 90],
        "keyframe_endpos": [
            [0, 0, 0],
            [-0.3, -5.5, -0.2],
        ],
        "keyframe_shown_frames": [0, 90],
        "keyframe_shown": [True, False],
    }

    hnad1_1 = {
        "name": "hNAD{}_1".format(num),
        "molecule": [True, True, "ethanol{}_1".format(num), [8]],
        "keyframe_endpos_frames": [75, 90],
        "keyframe_endpos": [
            [0, 0, 0],
            [-6, 2.7, -1.5],
        ],
        "keyframe_shown_frames": [0, 90],
        "keyframe_shown": [True, False],
    }

    h_movement1_1 = {
        "name": "h_movement{}_1".format(num),
        "molecule": [True, True, "ethanol{}_1".format(num), [4]],
        "keyframe_endpos_frames": [75, 90],
        "keyframe_endpos": [
            [0, 0, 0],
            [0.1, -0.3, 0.8],
        ],
        "keyframe_shown_frames": [0, 90],
        "keyframe_shown": [True, False],
    }

    h_movement_nad1_1 = {
        "name": "h_movement_nad{}_1".format(num),
        "molecule": [True, True, "NAD{}_1".format(num), [64]],
        "keyframe_endpos_frames": [75, 90],
        "keyframe_endpos": [
            [0, 0, 0],
            [-0.3, 0.2, -0.9],
        ],
        "keyframe_shown_frames": [0, 90],
        "keyframe_shown": [True, False],
    }

    # Molecules step 2 (ethanal dehydrogenase)
    nad1_2 = {
        "name":
        "NAD{}_2".format(num),
        "molecule": [True, False, "pdb/NAD.pdb"],
        "keyframe_endpos_frames": [145, 190, 205, 260],
        "keyframe_endpos": [
            [-90, 70, 0],
            [-40, 7.5, 0],
            [
                -40, 7.5, 0, "join", False, "h_movement_nad{}_2".format(num),
                "hNAD{}_2".format(num)
            ],
            [10, 70, 0],
        ],
        "keyframe_rotation_frames": [145, 190, 205, 260],
        "keyframe_rotation": [
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi, 1.5, 0]],
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi, math.pi * 2, math.pi]],
        ],
        "keyframe_shown_frames": [0, 145, 250],
        "keyframe_shown": [False, True, False],
    }

    water1_2 = {
        "name":
        "water{}_2".format(num),
        "molecule": [True, False, "pdb/water.pdb"],
        "keyframe_endpos_frames": [145, 190, 205, 260],
        "keyframe_endpos": [
            [-90, -70, 0],
            [-30, -7.5, 0],
            [-30, -7.5, 0, "join", False, "waterstof{}_2".format(num)],
            [30, -70, 0],
        ],
        "keyframe_rotation_frames": [145, 190, 205, 260],
        "keyframe_rotation": [[[0, 0, 0], [0, 0, 0]],
                              [[1, 1, 1],
                               [math.pi * 2, math.pi * 2, math.pi * 2]],
                              [[0, 0, 0], [0, 0, 0]],
                              [[1, 1, 1],
                               [math.pi * 2, math.pi * 2, math.pi * 2]]],
        "keyframe_shown_frames": [0, 145, 250],
        "keyframe_shown": [False, True, False],
    }

    water1_3 = {
        "name":
        "water{}_3".format(num),
        "molecule": [True, False, "pdb/water.pdb"],
        "keyframe_endpos_frames": [145, 190, 205, 260],
        "keyframe_endpos": [
            [-90, -70, 0],
            [-35, -2, 0],
            [-31, -2.2, 0.2],
            [30, -70, 0],
        ],
        "keyframe_rotation_frames": [145, 190, 205],
        "keyframe_rotation": [
            [[0, 0, 0], [0, 0, 0]],
            [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi]],
            [[1, 0, 0], [1, 0, 0]],
        ],
        "keyframe_shown_frames": [0, 145, 205],
        "keyframe_shown": [False, True, False],
    }

    waterstof1_2 = {
        "name": "waterstof{}_2".format(num),
        "molecule": [True, True, "ethanol{}_1".format(num), [6]],
        "keyframe_endpos_frames": [190, 205],
        "keyframe_endpos": [
            [0, 0, 0],
            [-0.3, -5.5, -0.2],
        ],
        "keyframe_shown_frames": [190, 205],
        "keyframe_shown": [True, False],
    }

    hnad1_2 = {
        "name": "hNAD{}_2".format(num),
        "molecule": [True, True, "water{}_3".format(num), [2]],
        "keyframe_endpos_frames": [190, 205],
        "keyframe_endpos": [
            [0, 0, 0],
            [-1.8, 5.8, 0],
        ],
        "keyframe_shown_frames": [190, 205],
        "keyframe_shown": [True, False],
    }

    h_movement_nad1_2 = {
        "name": "h_movement_nad{}_2".format(num),
        "molecule": [True, True, "NAD{}_2".format(num), [64]],
        "keyframe_endpos_frames": [190, 205],
        "keyframe_endpos": [
            [0, 0, 0],
            [-0.3, 0.2, -0.9],
        ],
        "keyframe_shown_frames": [190, 205],
        "keyframe_shown": [True, False],
    }

    if num == 0:
        animation_objects = {
            "camera": camera,
            "enzyme1": enzyme1,
            "enzyme2": enzyme2,
            "ethanol{}_1".format(num): ethanol1_1,
            "water{}_1".format(num): water1_1,
            "NAD{}_1".format(num): nad1_1,
            "waterstof{}_1".format(num): waterstof1_1,
            "hNAD{}_1".format(num): hnad1_1,
            "h_movement{}_1".format(num): h_movement1_1,
            "h_movement_nad{}_1".format(num): h_movement_nad1_1,
            "NAD{}_2".format(num): nad1_2,
            "water{}_2".format(num): water1_2,
            "water{}_3".format(num): water1_3,
            "waterstof{}_2".format(num): waterstof1_2,
            "hNAD{}_2".format(num): hnad1_2,
            "h_movement_nad{}_2".format(num): h_movement_nad1_2,
        }
    else:
        animation_objects = {
            "ethanol{}_1".format(num): ethanol1_1,
            "water{}_1".format(num): water1_1,
            "NAD{}_1".format(num): nad1_1,
            "waterstof{}_1".format(num): waterstof1_1,
            "hNAD{}_1".format(num): hnad1_1,
            "h_movement{}_1".format(num): h_movement1_1,
            "h_movement_nad{}_1".format(num): h_movement_nad1_1,
            "NAD{}_2".format(num): nad1_2,
            "water{}_2".format(num): water1_2,
            "water{}_3".format(num): water1_3,
            "waterstof{}_2".format(num): waterstof1_2,
            "hNAD{}_2".format(num): hnad1_2,
            "h_movement_nad{}_2".format(num): h_movement_nad1_2,
        }

    for obj in animation_objects:

        if show_name and not obj == "camera":
            animation_objects[obj]["show_name"] = True
        else:
            animation_objects[obj]["show_name"] = False

        if try_dict_keys(animation_objects[obj], "keyframe_endpos_frames"):
            for frame in range(
                    len(animation_objects[obj]["keyframe_endpos_frames"])):
                animation_objects = add_multipliers(
                    obj, frame, animation_objects, "keyframe_endpos_frames",
                    start_frame, ethanol_start_wacht, ethanol_mid_wacht,
                    aldh_speed)

        if try_dict_keys(animation_objects[obj], "keyframe_rotation_frames"):
            for frame in range(
                    len(animation_objects[obj]["keyframe_rotation_frames"])):
                animation_objects = add_multipliers(
                    obj, frame, animation_objects, "keyframe_rotation_frames",
                    start_frame, ethanol_start_wacht, ethanol_mid_wacht,
                    aldh_speed)

        if try_dict_keys(animation_objects[obj], "keyframe_shown_frames"):
            for frame in range(
                    len(animation_objects[obj]["keyframe_shown_frames"])):
                animation_objects = add_multipliers(
                    obj, frame, animation_objects, "keyframe_shown_frames",
                    start_frame, ethanol_start_wacht, ethanol_mid_wacht,
                    aldh_speed)

    return animation_objects