def spykingcircus(recording_path,
                  sorting_out,
                  detect_sign=-1,
                  adjacency_radius=200,
                  detect_threshold=6,
                  template_width_ms=3,
                  filter=True,
                  merge_spikes=True,
                  auto_merge=0.75,
                  whitening_max_elts=1000,
                  clustering_max_elts=10000):
    import spiketoolkit as st
    import spikesorters as ss
    from spikeforest2_utils import AutoRecordingExtractor, AutoSortingExtractor

    recording = AutoRecordingExtractor(dict(path=recording_path),
                                       download=True)

    # Sorting
    print('Sorting...')
    sorter = ss.SpykingcircusSorter(recording=recording,
                                    output_folder='/tmp/tmp_spykingcircus_' +
                                    _random_string(8),
                                    delete_output_folder=True)

    num_workers = os.environ.get('NUM_WORKERS', None)
    if not num_workers: num_workers = '1'
    num_workers = int(num_workers)

    sorter.set_params(detect_sign=detect_sign,
                      adjacency_radius=adjacency_radius,
                      detect_threshold=detect_threshold,
                      template_width_ms=template_width_ms,
                      filter=filter,
                      merge_spikes=merge_spikes,
                      auto_merge=auto_merge,
                      num_workers=num_workers,
                      whitening_max_elts=whitening_max_elts,
                      clustering_max_elts=clustering_max_elts)
    timer = sorter.run()
    print('#SF-SORTER-RUNTIME#{:.3f}#'.format(timer))
    sorting = sorter.get_result()

    AutoSortingExtractor.write_sorting(sorting=sorting, save_path=sorting_out)
def spykingcircus_wrapper1(recording_object: dict,
                           detect_sign=-1,
                           adjacency_radius=100,
                           detect_threshold=6,
                           template_width_ms=3,
                           filter=True,
                           merge_spikes=True,
                           auto_merge=0.75,
                           whitening_max_elts=1000,
                           clustering_max_elts=10000) -> dict:
    import sortingview as sv
    import spikesorters as ss

    recording = sv.LabboxEphysRecordingExtractor(recording_object)

    # Sorting
    with kc.TemporaryDirectory(prefix='tmp_spykingcircus') as tmpdir:
        sorter = ss.SpykingcircusSorter(recording=recording,
                                        output_folder=f'{tmpdir}/working',
                                        delete_output_folder=True)

        num_workers = 1

        sorter.set_params(detect_sign=detect_sign,
                          adjacency_radius=adjacency_radius,
                          detect_threshold=detect_threshold,
                          template_width_ms=template_width_ms,
                          filter=filter,
                          merge_spikes=merge_spikes,
                          auto_merge=auto_merge,
                          num_workers=num_workers,
                          whitening_max_elts=whitening_max_elts,
                          clustering_max_elts=clustering_max_elts)
        timer = sorter.run()
        print('#SF-SORTER-RUNTIME#{:.3f}#'.format(timer))
        sorting = sorter.get_result()

        return sv.LabboxEphysSortingExtractor.store_sorting(
            sorting=sorting).object()
    def run(self):

        import spikesorters as sorters
        print('SpyKING CIRCUS......')
        recording = SFMdaRecordingExtractor(self.recording_dir)
        code = ''.join(
            random.choice(string.ascii_uppercase) for x in range(10))
        tmpdir = os.environ.get('TEMPDIR', '/tmp') + '/spyking-circus-' + code

        num_workers = int(os.environ.get('NUM_WORKERS', '1'))

        sorter = sorters.SpykingcircusSorter(recording=recording,
                                             output_folder=tmpdir,
                                             verbose=True,
                                             delete_output_folder=True)

        sorter.set_params(
            detect_sign=self.detect_sign,
            adjacency_radius=self.adjacency_radius,
            detect_threshold=self.detect_threshold,
            template_width_ms=self.template_width_ms,
            filter=self.filter,
            merge_spikes=True,
            auto_merge=0.5,
            num_workers=num_workers,
            electrode_dimensions=None,
            whitening_max_elts=self.whitening_max_elts,
            clustering_max_elts=self.clustering_max_elts,
        )

        timer = sorter.run()
        print('#SF-SORTER-RUNTIME#{:.3f}#'.format(timer))

        sorting = sorter.get_result()

        SFMdaSortingExtractor.write_sorting(sorting=sorting,
                                            save_path=self.firings_out)
Beispiel #4
0
def spykingcircus(recording, sorting_out):
    import spiketoolkit as st
    import spikesorters as ss
    from spikeforest2_utils import AutoRecordingExtractor, AutoSortingExtractor
    import kachery as ka

    # TODO: need to think about how to deal with this
    ka.set_config(fr='default_readonly')

    recording = AutoRecordingExtractor(dict(path=recording), download=True)

    # Sorting
    print('Sorting...')
    sorter = ss.SpykingcircusSorter(recording=recording,
                                    output_folder='/tmp/tmp_spykingcircus_' +
                                    _random_string(8),
                                    delete_output_folder=True)

    sorter.set_params()
    timer = sorter.run()
    print('#SF-SORTER-RUNTIME#{:.3f}#'.format(timer))
    sorting = sorter.get_result()

    AutoSortingExtractor.write_sorting(sorting=sorting, save_path=sorting_out)