def run(
    normal_force = 0,
    sled_conditions = (9, 25),  # num particles in sled, floor
    pulling_force_v = 0.1,
    neighbor_facilitator = None
    ):
    global containers, lstats
    lj_method = 'dm' if neighbor_facilitator is None else 'nl'  # LJ method used either distance matrix or neighbor list
    info_for_naming = '{}-{} W={:.0f} Fpv={:.2f} Fpk={:.1f} dt={:.2f} k={:.1f} Fdm={:.1f}'.format(sled_conditions, lj_method, normal_force, pulling_force_v, pulling_force_k, dt, sled_k, damp_force_multiplier)

    print 'running with', info_for_naming

    init_container, last_particle_position = create(*sled_conditions)
    containers = [init_container]
    integrator = VerletIntegrator()
    sled_forcer = moldyn.SledForcer(2*a, u=last_particle_position, k=sled_k)
    sled_forcer.pulling_force_v = pulling_force_v
    sled_forcer.pulling_force_k = pulling_force_k
    sled_forcer.allow_negative_pull_force = allow_negative_pull_force
    sled_forcer.damp_force_multiplier = damp_force_multiplier
    sled_forcer.normal_force = normal_force
    integrator.sled_forcer = sled_forcer
    integrator.neighbor_facilitator = neighbor_facilitator

    run_func = None# RunFunc(last_particle_position)
    graphical.animate_with_live_integration(containers, integrator, dt, xlim, ylim, figsize, particle_radius, frame_show_modulus, num_frames_to_bootstrap, info_for_naming, save_animation, show_animation, run_func,
    anim_save_kwargs = anim_save_kwargs)

    stats = SimStats(info_for_naming, containers,
        sled_size = sled_conditions[0],
        W = normal_force,
        Fpv = pulling_force_v,
        Fpk = pulling_force_k,
        dt = dt,
        sled_k = sled_k,
        Fdm = damp_force_multiplier)
    lstats.append(stats)
    graphical.plot_pulling_force(stats.times, stats.pulling_forces, normal_force=stats.W, info_for_naming=info_for_naming, show=False)