def METHOD_NAME( gamma_boost, ramp, p_zmin, p_zmax,
                              show, N_check=2, cartesian=False ):
    # Chose the time step
    dt = (zmax-zmin)/Nz/c
    def dens_func_cylindrical( z, r ):
        dens = np.ones_like( z )
        # Make the density smooth at rmax
        dens = np.where( r > rmax-smooth_r,
            np.cos(0.5*np.pi*(r-smooth_r)/smooth_r)**2, dens)
        # Make the density 0 below p_zmin
        dens = np.where( z < p_zmin, 0., dens )
        # Make a linear ramp
        dens = np.where( (z>=p_zmin) & (z<p_zmin+ramp),
                         (z-p_zmin)/ramp*dens, dens )
        return( dens )
    if cartesian:
        def dens_func( x, y, z ):
            return dens_func_cylindrical( z, (x**2 + y**2)**.5 )
    else:
        dens_func = dens_func_cylindrical
    # Initialize the different structures
    sim = Simulation( Nz, zmax, Nr, rmax, Nm, dt,
        p_zmin, p_zmax, 0, p_rmax, p_nz, p_nr, p_nt, 0.5*n,
        dens_func=dens_func, initialize_ions=False, zmin=zmin,
        use_cuda=use_cuda, gamma_boost=gamma_boost, boundaries={'z':'open', 'r':'reflective'} )
    # Add another species with a different number of particles per cell
    # and with a finite temperature
    uth = 0.0001
    sim.add_new_species( -e, m_e, 0.5*n, dens_func,
                            2*p_nz, 2*p_nr, 2*p_nt,
                            p_zmin, p_zmax, 0, p_rmax,
                            ux_th=uth, uy_th=uth, uz_th=uth )
    # Set the moving window, which handles the continuous injection
    # The moving window has an arbitrary velocity (0.7*c) so as to check
    # that the injection is correct in this case also
    sim.set_moving_window( v=c )
    # Check that the density is correct after different timesteps
    N_step = int( Nz/N_check/2 )
    for i in range( N_check ):
        sim.step( N_step, move_momenta=False )
        check_density( sim, gamma_boost, dens_func_cylindrical, show )