Example #1
0
def setup_catalogue(dirname, dataset_name='olfactory_bulb'):
    if os.path.exists(dirname):
        shutil.rmtree(dirname)
        
    dataio = DataIO(dirname=dirname)
    localdir, filenames, params = download_dataset(name=dataset_name)
    dataio.set_data_source(type='RawData', filenames=filenames, **params)
    
    if dataset_name=='olfactory_bulb':
        channels = [5, 6, 7, 8, 9]
    else:
        channels = [0,1,2,3]
    dataio.add_one_channel_group(channels=channels)
    
    
    catalogueconstructor = CatalogueConstructor(dataio=dataio)
    
    
    params = {
        'duration' : 60.,
        'preprocessor' : {
            'highpass_freq' : 300.,
            'chunksize' : 1024,
            'lostfront_chunksize' : 100,
        },
        'peak_detector' : {
            'peak_sign' : '-',
            'relative_threshold' : 7.,
            'peak_span_ms' : 0.5,
        },
        'extract_waveforms' : {
            'wf_left_ms' : -2.5,
            'wf_right_ms' : 4.0,
            'nb_max' : 10000,
        },
        'clean_waveforms' : {
            'alien_value_threshold' : 60.,
        },
        'noise_snippet' : {
            'nb_snippet' : 300,
        },
        'feature_method': 'global_pca', 
        'feature_kargs':{'n_components': 5},
        'cluster_method' : 'kmeans', 
        'cluster_kargs' : {'n_clusters': 12},
        'clean_cluster' : False,
        'clean_cluster_kargs' : {},
    }
    
    apply_all_catalogue_steps(catalogueconstructor, params, verbose=True)
        
    catalogueconstructor.trash_small_cluster()
    
    catalogueconstructor.order_clusters(by='waveforms_rms')
    
    
    catalogueconstructor.make_catalogue_for_peeler()
def test_make_catalogue():
    if os.path.exists('test_catalogueconstructor'):
        shutil.rmtree('test_catalogueconstructor')
        
    dataio = DataIO(dirname='test_catalogueconstructor')
    localdir, filenames, params = download_dataset(name='olfactory_bulb')
    dataio.set_data_source(type='RawData', filenames=filenames, **params)
    #~ dataio.set_manual_channel_group(range(14))
    dataio.set_manual_channel_group([5, 6, 7, 8, 9])

    catalogueconstructor = CatalogueConstructor(dataio=dataio)

    catalogueconstructor.set_preprocessor_params(chunksize=1024,
            
                                    #signal preprocessor
                                    highpass_freq=300,
                                    backward_chunksize=1280,
                                    
                                    #peak detector
                                    peak_sign='-', relative_threshold=7, peak_span=0.0005,
                                    )
    
    t1 = time.perf_counter()
    catalogueconstructor.estimate_signals_noise(seg_num=0, duration=10.)
    t2 = time.perf_counter()
    print('estimate_signals_noise', t2-t1)
    
    t1 = time.perf_counter()
    catalogueconstructor.run_signalprocessor()
    t2 = time.perf_counter()
    print('run_signalprocessor', t2-t1)

    print(catalogueconstructor)
    
    t1 = time.perf_counter()
    catalogueconstructor.extract_some_waveforms(n_left=-12, n_right=15,  nb_max=10000)
    t2 = time.perf_counter()
    print('extract_some_waveforms', t2-t1)


    # PCA
    t1 = time.perf_counter()
    catalogueconstructor.project(method='pca', n_components=12, batch_size=16384)
    t2 = time.perf_counter()
    print('project', t2-t1)
    
    # cluster
    t1 = time.perf_counter()
    catalogueconstructor.find_clusters(method='kmeans', n_clusters=13)
    t2 = time.perf_counter()
    print('find_clusters', t2-t1)
    
    # trash_small_cluster
    catalogueconstructor.trash_small_cluster()
    
    catalogueconstructor.make_catalogue()
Example #3
0
def test_trash_small_cluster():
    dirname = 'test_cleancluster'

    restore_savepoint(dirname, savepoint='after_trash_low_extremum')

    dataio = DataIO(dirname=dirname)
    cc = CatalogueConstructor(dataio=dataio)

    t1 = time.perf_counter()
    cc.trash_small_cluster()
    t2 = time.perf_counter()
    print('trash_small_cluster', t2 - t1)
Example #4
0
def setup_catalogue():
    if os.path.exists('test_peeler'):
        shutil.rmtree('test_peeler')

    dataio = DataIO(dirname='test_peeler')
    localdir, filenames, params = download_dataset(name='olfactory_bulb')
    dataio.set_data_source(type='RawData', filenames=filenames, **params)
    dataio.add_one_channel_group(channels=[5, 6, 7, 8, 9])

    catalogueconstructor = CatalogueConstructor(dataio=dataio)

    fullchain_kargs = {
        'duration': 60.,
        'preprocessor': {
            'highpass_freq': 300.,
            'chunksize': 1024,
            'lostfront_chunksize': 100,
        },
        'peak_detector': {
            'peak_sign': '-',
            'relative_threshold': 7.,
            'peak_span': 0.0005,
            #~ 'peak_span' : 0.000,
        },
        'extract_waveforms': {
            'n_left': -25,
            'n_right': 40,
            'nb_max': 10000,
        },
        'clean_waveforms': {
            'alien_value_threshold': 60.,
        },
        'noise_snippet': {
            'nb_snippet': 300,
        },
    }

    apply_all_catalogue_steps(catalogueconstructor,
                              fullchain_kargs,
                              'global_pca', {'n_components': 12},
                              'kmeans', {'n_clusters': 12},
                              verbose=True)
    catalogueconstructor.trash_small_cluster()

    catalogueconstructor.make_catalogue_for_peeler()
Example #5
0
def test_catalogue_constructor():
    if os.path.exists('test_catalogueconstructor'):
        shutil.rmtree('test_catalogueconstructor')

    dataio = DataIO(dirname='test_catalogueconstructor')
    localdir, filenames, params = download_dataset(name='olfactory_bulb')
    #~ localdir, filenames, params = download_dataset(name='locust')
    dataio.set_data_source(type='RawData', filenames=filenames, **params)

    channels = range(14)
    #~ channels=list(range(4))
    dataio.add_one_channel_group(channels=channels, chan_grp=0)

    cc = CatalogueConstructor(dataio=dataio)

    for memory_mode in ['ram', 'memmap']:
        for mode in ['dense', 'sparse']:

            print('*' * 5)
            print('memory_mode', memory_mode, 'mode', mode)

            if mode == 'dense':
                peak_engine = 'numpy'
                peak_method = 'global'
                adjacency_radius_um = None
            elif mode == 'sparse':
                peak_engine = 'numpy'
                peak_method = 'geometrical'
                adjacency_radius_um = 450.

            cc.set_global_params(
                chunksize=1024,
                memory_mode=memory_mode,
                mode=mode,
                n_jobs=1,
                #~ adjacency_radius_um=adjacency_radius_um,
            )

            cc.set_preprocessor_params(
                #signal preprocessor
                highpass_freq=300,
                lowpass_freq=5000.,
                common_ref_removal=False,
                smooth_size=0,
                lostfront_chunksize=None)

            cc.set_peak_detector_params(
                #peak detector
                method=peak_method,
                engine=peak_engine,
                peak_sign='-',
                relative_threshold=7,
                peak_span_ms=0.5,
                adjacency_radius_um=adjacency_radius_um,
            )

            t1 = time.perf_counter()
            cc.estimate_signals_noise(seg_num=0, duration=10.)
            t2 = time.perf_counter()
            print('estimate_signals_noise', t2 - t1)

            t1 = time.perf_counter()
            cc.run_signalprocessor(duration=10., detect_peak=True)
            t2 = time.perf_counter()
            print('run_signalprocessor_loop', t2 - t1)

            for seg_num in range(dataio.nb_segment):
                mask = cc.all_peaks['segment'] == seg_num
                print('seg_num', seg_num, 'nb peak', np.sum(mask))

            # redetect peak
            cc.re_detect_peak(method=peak_method,
                              engine=peak_engine,
                              peak_sign='-',
                              relative_threshold=5,
                              peak_span_ms=0.7,
                              adjacency_radius_um=adjacency_radius_um)
            for seg_num in range(dataio.nb_segment):
                mask = cc.all_peaks['segment'] == seg_num
                print('seg_num', seg_num, 'nb peak', np.sum(mask))

            cc.set_waveform_extractor_params(n_left=-25, n_right=40)

            t1 = time.perf_counter()
            cc.clean_peaks(alien_value_threshold=100,
                           mode='extremum_amplitude')
            t2 = time.perf_counter()
            print('clean_peaks extremum_amplitude', t2 - t1)

            t1 = time.perf_counter()
            cc.clean_peaks(alien_value_threshold=100, mode='full_waveform')
            t2 = time.perf_counter()
            print('clean_peaks full_waveforms', t2 - t1)

            t1 = time.perf_counter()
            cc.sample_some_peaks(mode='rand', nb_max=5000)
            t2 = time.perf_counter()
            print('sample_some_peaks', t2 - t1)

            print(cc)

            #extract_some_noise
            t1 = time.perf_counter()
            cc.extract_some_noise(nb_snippet=400)
            t2 = time.perf_counter()
            print('extract_some_noise', t2 - t1)

            if mode == 'dense':
                # PCA
                t1 = time.perf_counter()
                cc.extract_some_features(method='global_pca', n_components=12)
                t2 = time.perf_counter()
                print('project pca', t2 - t1)

                # cluster
                t1 = time.perf_counter()
                cc.find_clusters(method='kmeans', n_clusters=11)
                t2 = time.perf_counter()
                print('find_clusters', t2 - t1)

            elif mode == 'sparse':

                # PCA
                t1 = time.perf_counter()
                cc.extract_some_features(method='pca_by_channel',
                                         n_components_by_channel=3)
                t2 = time.perf_counter()
                print('project pca', t2 - t1)

                # cluster
                t1 = time.perf_counter()
                cc.find_clusters(method='pruningshears')
                t2 = time.perf_counter()
                print('find_clusters', t2 - t1)

            print(cc)

        t1 = time.perf_counter()
        cc.auto_split_cluster()
        t2 = time.perf_counter()
        print('auto_split_cluster', t2 - t1)

        t1 = time.perf_counter()
        cc.trash_not_aligned()
        t2 = time.perf_counter()
        print('trash_not_aligned', t2 - t1)

        t1 = time.perf_counter()
        cc.auto_merge_cluster()
        t2 = time.perf_counter()
        print('auto_merge_cluster', t2 - t1)

        t1 = time.perf_counter()
        cc.trash_low_extremum()
        t2 = time.perf_counter()
        print('trash_low_extremum', t2 - t1)

        t1 = time.perf_counter()
        cc.trash_small_cluster()
        t2 = time.perf_counter()
        print('trash_small_cluster', t2 - t1)