Example #1
0
def make_sorting(times1, labels1, times2, labels2, times3, labels3):
    sampling_frequency = 30000.
    sorting1 = NumpySorting.from_times_labels([times1], [labels1],
                                              sampling_frequency)
    sorting2 = NumpySorting.from_times_labels([times2], [labels2],
                                              sampling_frequency)
    sorting3 = NumpySorting.from_times_labels([times3], [labels3],
                                              sampling_frequency)
    return sorting1, sorting2, sorting3
Example #2
0
    def _run_from_folder(cls, output_folder, params, verbose):
        import mountainsort4

        recording = load_extractor(output_folder /
                                   'spikeinterface_recording.json')

        # alias to params
        p = params

        samplerate = recording.get_sampling_frequency()

        # Bandpass filter
        if p['filter'] and p['freq_min'] is not None and p[
                'freq_max'] is not None:
            if verbose:
                print('filtering')
            recording = bandpass_filter(recording=recording,
                                        freq_min=p['freq_min'],
                                        freq_max=p['freq_max'])

        # Whiten
        if p['whiten']:
            if verbose:
                print('whitenning')
            recording = whiten(recording=recording)

        print(
            'Mountainsort4 use the OLD spikeextractors mapped with RecordingExtractorOldAPI'
        )
        old_api_recording = RecordingExtractorOldAPI(recording)

        # Check location no more needed done in basesorter
        old_api_sorting = mountainsort4.mountainsort4(
            recording=old_api_recording,
            detect_sign=p['detect_sign'],
            adjacency_radius=p['adjacency_radius'],
            clip_size=p['clip_size'],
            detect_threshold=p['detect_threshold'],
            detect_interval=p['detect_interval'],
            num_workers=p['num_workers'],
            verbose=verbose)

        # Curate
        if p['noise_overlap_threshold'] is not None and p['curation'] is True:
            if verbose:
                print('Curating')
            old_api_sorting = mountainsort4.mountainsort4_curation(
                recording=old_api_recording,
                sorting=old_api_sorting,
                noise_overlap_threshold=p['noise_overlap_threshold'])

        # convert sorting to new API and save it
        unit_ids = old_api_sorting.get_unit_ids()
        units_dict_list = [{
            u: old_api_sorting.get_unit_spike_train(u)
            for u in unit_ids
        }]
        new_api_sorting = NumpySorting.from_dict(units_dict_list, samplerate)
        NpzSortingExtractor.write_sorting(new_api_sorting,
                                          str(output_folder / 'firings.npz'))
Example #3
0
def toy_example(duration=10,
                num_channels=4,
                num_units=10,
                sampling_frequency=30000.0,
                num_segments=2,
                average_peak_amplitude=-100,
                upsample_factor=13,
                dumpable=False,
                dump_folder=None,
                seed=None):
    '''
    Creates toy recording and sorting extractors.

    Parameters
    ----------
    duration: float (or list if multi segment)
        Duration in s (default 10)
    num_channels: int
        Number of channels (default 4)
    num_units: int
        Number of units (default 10)
    sampling_frequency: float
        Sampling frequency (default 30000)
    num_segments: int default 2
        Number of segments.
    dumpable: bool
        If True, objects are dumped to file and become 'dumpable'
    dump_folder: str or Path
        Path to dump folder (if None, 'test' is used
    seed: int
        Seed for random initialization

    Returns
    -------
    recording: RecordingExtractor
        The output recording extractor. If dumpable is False it's a NumpyRecordingExtractor, otherwise it's an
        MdaRecordingExtractor
    sorting: SortingExtractor
        The output sorting extractor. If dumpable is False it's a NumpyRecordingExtractor, otherwise it's an
        NpzSortingExtractor
    '''

    if isinstance(duration, int):
        duration = float(duration)

    if isinstance(duration, float):
        durations = [duration] * num_segments
    else:
        durations = duration
        assert isinstance(duration, list)
        assert len(durations) == num_segments
        assert all(isinstance(d, float) for d in durations)

    assert num_channels > 0
    assert num_units > 0

    waveforms, geometry = synthesize_random_waveforms(
        num_units=num_units,
        num_channels=num_channels,
        average_peak_amplitude=average_peak_amplitude,
        upsample_factor=upsample_factor,
        seed=seed)

    unit_ids = np.arange(num_units, dtype='int64')

    traces_list = []
    times_list = []
    labels_list = []
    for segment_index in range(num_segments):
        times, labels = synthesize_random_firings(
            num_units=num_units,
            duration=durations[segment_index],
            sampling_frequency=sampling_frequency,
            seed=seed)
        times_list.append(times)
        labels_list.append(labels)

        traces = synthesize_timeseries(
            times,
            labels,
            unit_ids,
            waveforms,
            sampling_frequency,
            durations[segment_index],
            noise_level=10,
            waveform_upsample_factor=upsample_factor,
            seed=seed)
        traces_list.append(traces)

    sorting = NumpySorting.from_times_labels(times_list, labels_list,
                                             sampling_frequency)

    recording = NumpyRecording(traces_list, sampling_frequency)
    recording.annotate(is_filtered=True)

    probe = Probe(ndim=2)
    probe.set_contacts(positions=geometry,
                       shapes='circle',
                       shape_params={'radius': 5})
    probe.create_auto_shape(probe_type='rect', margin=20)
    probe.set_device_channel_indices(np.arange(num_channels, dtype='int64'))
    recording = recording.set_probe(probe)

    return recording, sorting
def make_sorting(times1, labels1, times2, labels2):
    sampling_frequency = 30000.
    gt_sorting = NumpySorting.from_times_labels([times1], [labels1], sampling_frequency)
    tested_sorting = NumpySorting.from_times_labels([times2], [labels2], sampling_frequency)
    return gt_sorting, tested_sorting