def METHOD_NAME():
    n_particles = 100
    fields = [
        "particle_position_x",
        "particle_position_y",
        "particle_position_z",
        "particle_index",
        "particle_dummy",
    ]
    negative = [False, False, False, False, False]
    units = ["cm", "cm", "cm", "1", "1"]
    # Setup filters on the 'particle_dummy' field, keeping only the first 50
    @particle_filter(name="dummy", requires=["particle_dummy"])
    def dummy(pfilter, data):
        return data[(pfilter.filtered_type, "particle_dummy")] <= n_particles // 2
    # Setup fake particle datasets with repeated ids. This should work because
    # the ids are unique among `dummy_particles` so let's test this
    data = {
        "particle_index": np.arange(n_particles) % (n_particles // 2),
        "particle_dummy": np.arange(n_particles),
    }
    all_ds = [
        fake_particle_ds(
            fields=fields, negative=negative, units=units, npart=n_particles, data=data
        )
    ]
    for ds in all_ds:
        ds.add_particle_filter("dummy")
    ts = DatasetSeries(all_ds)
    # Select all dummy particles
    print(ts[0].derived_field_list)
    ids = ts[0].all_data()["dummy", "particle_index"]
    # Build trajectories
    ts.particle_trajectories(ids, ptype="dummy")