def METHOD_NAME(sphere_model, particle, run_in_tmpdir):
    # Set track identifiers
    sphere_model.settings.track = [(1, 1, 1), (1, 1, 10), (2, 1, 15)]
    # Set source particle
    sphere_model.settings.source = openmc.IndependentSource(particle=particle)
    # Run OpenMC to generate tracks.h5 file
    generate_track_file(sphere_model)
    # Open track file and make sure we have correct number of tracks
    tracks = openmc.Tracks('tracks.h5')
    assert len(tracks) == len(sphere_model.settings.track)
    for track, identifier in zip(tracks, sphere_model.settings.track):
        # Check attributes on Track object
        assert isinstance(track, openmc.Track)
        assert track.identifier == identifier
        assert isinstance(track.particle_tracks, list)
        if particle == 'neutron':
            assert len(track.particle_tracks) == 1
        # Check attributes on ParticleTrack object
        particle_track = track.particle_tracks[0]
        assert isinstance(particle_track, openmc.ParticleTrack)
        assert particle_track.particle.name.lower() == particle
        assert isinstance(particle_track.states, np.ndarray)
        # Sanity checks on actual data
        for state in particle_track.states:
            assert np.linalg.norm([*state['r']]) <= 25.0001
            assert np.linalg.norm([*state['u']]) == pytest.approx(1.0)
            assert 0.0 <= state['E'] <= 20.0e6
            assert state['time'] >= 0.0
            assert 0.0 <= state['wgt'] <= 1.0
            assert state['cell_id'] == 1
            assert state['material_id'] == 1
        # Checks on 'sources' property
        sources = track.sources
        assert len(sources) == len(track.particle_tracks)
        x = sources[0]
        state = particle_track.states[0]
        assert x.r == (*state['r'],)
        assert x.u == (*state['u'],)
        assert x.E == state['E']
        assert x.time == state['time']
        assert x.wgt == state['wgt']
        assert x.particle == particle_track.particle