human
I wrote the below code

    import pygame as pg
    screen = pg.display.set_mode(clip.size)
    step = (1.0 / fps)
    if ((t1 is None) and (t2 is None)):
        (t1, t2) = (0, clip.duration)
    elif (t2 is None):
        t2 = (t1 + (step / 2))
    t = t1
    txy_list = []
    def gatherClicks(t):
        imdisplay(clip.get_frame(t), screen)
        objects_to_click = nobjects
        clicks = []
        while objects_to_click:
            for event in pg.event.get():
                if (event.type == pg.KEYDOWN):
                    if (event.key == pg.K_BACKSLASH):
                        return 'return'
                    elif (event.key == pg.K_ESCAPE):
                        raise KeyboardInterrupt()
                elif (event.type == pg.MOUSEBUTTONDOWN):
                    (x, y) = pg.mouse.get_pos()
                    clicks.append((x, y))
                    objects_to_click -= 1
        return clicks
    while (t < t2):
        clicks = gatherClicks(t)
        if (clicks == 'return'):
            txy_list.pop()
            t -= step
        else:
            txy_list.append((t, clicks))
            t += step
    (tt, xylist) = zip(*txy_list)
    result = []
    for i in range(nobjects):
        xys = [e[i] for e in xylist]
        (xx, yy) = zip(*xys)
        result.append(Trajectory(tt, xx, yy))
    if (savefile is not None):
        Trajectory.save_list(result, savefile)
    return result

What's a good function header?
 ... Here's a good function header?
assistant
#Here's a good function header.

@convert_to_seconds(['t1', 't2'])
@use_clip_fps_by_default
def manual_tracking(clip, t1=None, t2=None, fps=None, nobjects=1, savefile=None):