def skin_kernel(alpha=0.0, length=601):
    """
    Generates a skin effect kernel, with the specified parameters

    kernel_step_function
        heaviside(t+1)*(1-errf(alpha/21./np.sqrt(t+1)))
    """
    t_kernel = np.arange(length)
    if abs(alpha) > 0.0:
        kernel_skineffect = kernel_generic2(htilde_skineffect, t_kernel, alpha)
    else:
        kernel_skineffect = np.zeros(length)
        kernel_skineffect[0] = 1.0
    return kernel_skineffect
def bounce_kernel(amp=0.02, time=4, length=601):
    """
    Generates a bounce kernel, with the specified parameters.

    kernel_step_function:
        heaviside(t) + amp*heaviside(t-time)
    """
    bounce = lambda t, amp, time: heaviside(t) - amp * np.double((t + 1) > time) * heaviside(t)
    htilde_bounce = lambda t, time: bounce(t, amp, time) - bounce(t - 1, amp, time)
    t_kernel = np.arange(length)
    if abs(amp) > 0.0:
        kernel_bounce = kernel_generic2(htilde_bounce, t_kernel, time)
    else:
        kernel_bounce = np.zeros(length)
        kernel_bounce[0] = 1.0
    return kernel_bounce