def create_128channels_imec_prb(filename=None, bad_channels=None): r1 = np.array([103, 101, 99, 97, 95, 93, 91, 89, 87, 70, 66, 84, 82, 80, 108, 110, 47, 45, 43, 41, 1,61, 57, 36, 34, 32, 30, 28, 26, 24, 22, 20]) r2 = np.array([106, 104, 115, 117, 119, 121, 123, 125, 127, 71, 67, 74, 76, 78, 114, 112, 49, 51, 53, 55, 2, 62, 58, 4, 6, 8, 10, 12, 14, 21, 19, 16]) r3 = np.array([102, 100, 98, 96, 94, 92, 90, 88, 86, 72, 68, 65, 85, 83, 81, 111, 46, 44, 42, 40, 38, 63, 59, 39, 37, 35, 33, 31, 29, 27, 25, 23]) r4 = np.array([109, 107, 105, 116, 118, 120, 122, 124, 126, 73, 69, 64, 75, 77, 79, 113, 48, 50, 52, 54, 56, 0, 60, 3, 5, 7, 9, 11, 13, 15, 18,-1]) all_electrodes_concat = np.concatenate((r1, r2, r3, r4)) all_electrodes = all_electrodes_concat.reshape((4, 32)) all_electrodes = np.flipud(all_electrodes.T) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, channel_number=128) electrode_coordinate_grid = list(itertools.product(np.arange(1, 32), np.arange(1, 5))) electrode_coordinate_grid = [tuple(reversed(x)) for x in electrode_coordinate_grid] electrode_amplifier_index_on_grid = all_electrodes_concat electrode_amplifier_name_on_grid = np.array(["Int" + str(x) for x in electrode_amplifier_index_on_grid]) indices_arrays = [electrode_amplifier_index_on_grid.tolist(), electrode_amplifier_name_on_grid.tolist()] indices_tuples = list(zip(*indices_arrays)) channel_position_indices = pd.MultiIndex.from_tuples(indices_tuples, names=['Numbers', 'Strings']) channel_positions = pd.Series(electrode_coordinate_grid, index=channel_position_indices) channel_positions.columns = ['Positions'] channel_positions = channel_positions.reset_index(level=None, drop=False, name='Positions') if bad_channels is not None: channel_positions = channel_positions[~channel_positions.Numbers.isin(bad_channels)] return all_electrodes, channel_positions
def create_all_electrodes(filename=None, bad_channels=None): r1 = np.array([ 103, 101, 99, 97, 95, 93, 91, 89, 87, 70, 66, 84, 82, 80, 108, 110, 47, 45, 43, 41, 1, 61, 57, 36, 34, 32, 30, 28, 26, 24, 22, 20 ]) r2 = np.array([ 106, 104, 115, 117, 119, 121, 123, 125, 127, 71, 67, 74, 76, 78, 114, 112, 49, 51, 53, 55, 2, 62, 58, 4, 6, 8, 10, 12, 14, 21, 19, 16 ]) r3 = np.array([ 102, 100, 98, 96, 94, 92, 90, 88, 86, 72, 68, 65, 85, 83, 81, 111, 46, 44, 42, 40, 38, 63, 59, 39, 37, 35, 33, 31, 29, 27, 25, 23 ]) r4 = np.array([ 109, 107, 105, 116, 118, 120, 122, 124, 126, 73, 69, 64, 75, 77, 79, 113, 48, 50, 52, 54, 56, 0, 60, 3, 5, 7, 9, 11, 13, 15, 18, -1 ]) all_electrodes_concat = np.concatenate((r1, r2, r3, r4)) all_electrodes = all_electrodes_concat.reshape((4, 32)) all_electrodes = np.flipud(all_electrodes.T) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, channel_number=128) return all_electrodes
def create_32channels_nn_prb(filename=None, bad_channels=None): """ This function produces a grid with the electrodes positions of Neuronexus A1x32-Poly3-5mm-25s-177-CM32 silicone probe Parameters ---------- filename -- the filename (with path) of the .prb file for klustakwik bad_channels -- a list or numpy array with channels you may want to disregard Returns ------- all_electrodes -- channel_positions -- a Pandas Series with the electrodes positions (in two dimensions) """ electrode_amplifier_index_on_grid = np.array([-1, 0, -1, -1, -1, -1, -1, 31, -1, 24, -1, 7, -1, 1, -1, 21, -1, 10, -1, 30, -1, 25, -1, 6, -1, 15, -1, 20, -1, 11, -1, 16, -1, 26, -1, 5, -1, 14, -1, 19, -1, 12, -1, 17, -1, 27, -1, 4, -1, 8, -1, 18, -1, 13, -1, 23, -1, 28, -1, 3, -1, 9, -1, 29, -1, 2, -1, 22, -1]) all_electrodes = electrode_amplifier_index_on_grid.reshape((23, 3)) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, channel_number=32, steps_r=3, steps_c=3) electrode_coordinate_grid = list(itertools.product(np.arange(1, 24), np.arange(1, 4))) electrode_coordinate_grid = [tuple(reversed(x)) for x in electrode_coordinate_grid] electrode_amplifier_name_on_grid = np.array(["Int" + str(x) for x in electrode_amplifier_index_on_grid]) indices_arrays = [electrode_amplifier_index_on_grid.tolist(), electrode_amplifier_name_on_grid.tolist()] indices_tuples = list(zip(*indices_arrays)) channel_position_indices = pd.MultiIndex.from_tuples(indices_tuples, names=['Numbers', 'Strings']) channel_positions = pd.Series(electrode_coordinate_grid, index=channel_position_indices) channel_positions.columns = ['Positions'] channel_positions = channel_positions.reset_index(level=None, drop=False, name='Positions') if bad_channels is not None: channel_positions = channel_positions[~channel_positions.Numbers.isin(bad_channels)] return all_electrodes, channel_positions
def create_128channels_imec_prb(filename=None, bad_channels=None): r1 = np.array([ 103, 101, 99, 97, 95, 93, 91, 89, 87, 70, 66, 84, 82, 80, 108, 110, 47, 45, 43, 41, 1, 61, 57, 36, 34, 32, 30, 28, 26, 24, 22, 20 ]) r2 = np.array([ 106, 104, 115, 117, 119, 121, 123, 125, 127, 71, 67, 74, 76, 78, 114, 112, 49, 51, 53, 55, 2, 62, 58, 4, 6, 8, 10, 12, 14, 21, 19, 16 ]) r3 = np.array([ 102, 100, 98, 96, 94, 92, 90, 88, 86, 72, 68, 65, 85, 83, 81, 111, 46, 44, 42, 40, 38, 63, 59, 39, 37, 35, 33, 31, 29, 27, 25, 23 ]) r4 = np.array([ 109, 107, 105, 116, 118, 120, 122, 124, 126, 73, 69, 64, 75, 77, 79, 113, 48, 50, 52, 54, 56, 0, 60, 3, 5, 7, 9, 11, 13, 15, 18, -1 ]) all_electrodes_concat = np.concatenate((r1, r2, r3, r4)) all_electrodes = all_electrodes_concat.reshape((4, 32)) all_electrodes = np.flipud(all_electrodes.T) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, channel_number=128) electrode_coordinate_grid = list( itertools.product(np.arange(1, 32), np.arange(1, 5))) electrode_coordinate_grid = [ tuple(reversed(x)) for x in electrode_coordinate_grid ] electrode_amplifier_index_on_grid = all_electrodes_concat electrode_amplifier_name_on_grid = np.array( ["Int" + str(x) for x in electrode_amplifier_index_on_grid]) indices_arrays = [ electrode_amplifier_index_on_grid.tolist(), electrode_amplifier_name_on_grid.tolist() ] indices_tuples = list(zip(*indices_arrays)) channel_position_indices = pd.MultiIndex.from_tuples( indices_tuples, names=['Numbers', 'Strings']) channel_positions = pd.Series(electrode_coordinate_grid, index=channel_position_indices) channel_positions.columns = ['Positions'] channel_positions = channel_positions.reset_index(level=None, drop=False, name='Positions') if bad_channels is not None: channel_positions = channel_positions[~channel_positions.Numbers. isin(bad_channels)] return all_electrodes, channel_positions
def create_1440channels_neuroseeker_prb(base_info_folder, connected_channels_filename, prb_filename=None): x_coords = np.squeeze( np.load(join(base_info_folder, 'neuroseeker_channel_coordinates_x.npy'))) y_coords = np.squeeze( np.load(join(base_info_folder, 'neuroseeker_channel_coordinates_y.npy'))) connected = np.squeeze( np.load(join(base_info_folder, connected_channels_filename))) bad_channels = np.squeeze(np.argwhere(connected == False).astype(np.int)) r1 = np.array([[i, i + 1] for i in np.arange(0, 1433, 8)]) r1 = r1.reshape(r1.size) r2 = np.array([[i, i + 1] for i in np.arange(2, 1435, 8)]) r2 = r2.reshape(r1.size) r3 = np.array([[i, i + 1] for i in np.arange(4, 1437, 8)]) r3 = r3.reshape(r1.size) r4 = np.array([[i, i + 1] for i in np.arange(6, 1439, 8)]) r4 = r4.reshape(r1.size) all_electrodes_concat = np.concatenate((r1, r2, r3, r4)) all_electrodes = all_electrodes_concat.reshape((4, 360)) if prb_filename is not None: prb_gen.generate_prb_file(filename=prb_filename, all_electrodes_array=all_electrodes) electrode_coordinate_grid = [i for i in list(zip(x_coords, y_coords))] electrode_amplifier_index_on_grid = np.arange( len(electrode_coordinate_grid)) electrode_amplifier_name_on_grid = np.array( ["Int" + str(x) for x in electrode_amplifier_index_on_grid]) indices_arrays = [ electrode_amplifier_index_on_grid.tolist(), electrode_amplifier_name_on_grid.tolist() ] indices_tuples = list(zip(*indices_arrays)) channel_position_indices = pd.MultiIndex.from_tuples( indices_tuples, names=['Numbers', 'Strings']) channel_positions = pd.Series(electrode_coordinate_grid, index=channel_position_indices) channel_positions.columns = ['Positions'] channel_positions = channel_positions.reset_index(level=None, drop=False, name='Positions') channel_positions = channel_positions[~channel_positions.Numbers. isin(bad_channels)] return all_electrodes, channel_positions
def create_128channels_imec_prb(filename=None, bad_channels=None): r1 = np.array([103, 101, 99, 97, 95, 93, 91, 89, 87, 70, 66, 84, 82, 80, 108, 110, 47, 45, 43, 41, 1,61, 57, 36, 34, 32, 30, 28, 26, 24, 22, 20]) r2 = np.array([106, 104, 115, 117, 119, 121, 123, 125, 127, 71, 67, 74, 76, 78, 114, 112, 49, 51, 53, 55, 2, 62, 58, 4, 6, 8, 10, 12, 14, 21, 19, 16]) r3 = np.array([102, 100, 98, 96, 94, 92, 90, 88, 86, 72, 68, 65, 85, 83, 81, 111, 46, 44, 42, 40, 38, 63, 59, 39, 37, 35, 33, 31, 29, 27, 25, 23]) r4 = np.array([109, 107, 105, 116, 118, 120, 122, 124, 126, 73, 69, 64, 75, 77, 79, 113, 48, 50, 52, 54, 56, 0, 60, 3, 5, 7, 9, 11, 13, 15, 18,-1]) all_electrodes_concat = np.concatenate((r1, r2, r3, r4)) all_electrodes = all_electrodes_concat.reshape((4, 32)) all_electrodes = np.flipud(all_electrodes.T) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, channel_number=128) return all_electrodes
def create_256channels_imec_prb(filename=None, steps_r=2, steps_c=2, bad_channels=None): r1 = np.array( [163, 232, 236, 240, 249, 199, 193, 220, 36, 61, 1, 8, 12, 47, 41]) r2 = np.array( [162, 212, 206, 244, 202, 198, 229, 222, 29, 25, 2, 5, 16, 46, 42]) r3 = np.array( [217, 211, 207, 245, 251, 255, 228, 225, 35, 60, 55, 9, 17, 20, 95]) r4 = np.array( [161, 233, 237, 241, 203, 197, 192, 223, 37, 58, 54, 6, 51, 45, 40]) r5 = np.array( [216, 234, 205, 242, 201, 195, 218, 224, 28, 24, 3, 13, 50, 21, 39]) r6 = np.array( [215, 210, 204, 246, 252, 231, 227, 32, 63, 59, 53, 14, 18, 22, 94]) r7 = np.array( [160, 235, 238, 247, 200, 196, 219, 33, 27, 57, 7, 10, 48, 44, 38]) r8 = np.array( [213, 209, 239, 248, 253, 194, 221, 30, 26, 0, 4, 11, 49, 43, 93]) r9 = np.array([ 168, 159, 154, 181, 145, 140, 191, 131, 125, 120, 67, 111, 106, 77, 97 ]) r10 = np.array([ 172, 175, 153, 182, 185, 139, 167, 164, 90, 119, 114, 71, 105, 100, 81 ]) r11 = np.array( [169, 157, 179, 148, 143, 189, 134, 129, 123, 65, 68, 109, 75, 78, 84]) r12 = np.array([ 173, 156, 151, 183, 142, 137, 166, 128, 122, 117, 69, 108, 103, 79, 85 ]) r13 = np.array([ 170, 176, 152, 147, 186, 138, 133, 127, 89, 118, 113, 72, 104, 99, 82 ]) r14 = np.array([ 171, 177, 180, 146, 187, 190, 132, 126, 121, 66, 112, 107, 76, 98, 86 ]) r15 = np.array( [174, 155, 150, 184, 141, 136, 165, 91, 88, 116, 70, 73, 102, 80, 83]) r16 = np.array([ 158, 178, 149, 144, 188, 135, 130, 124, 64, 115, 110, 74, 101, 96, 87 ]) r17 = np.array( [214, 208, 243, 250, 254, 230, 226, 34, 62, 56, 52, 15, 19, 23, 92]) all_electrodes_concat = np.concatenate( (r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17)) all_electrodes = all_electrodes_concat.reshape((17, 15)) #all_electrodes = np.flipud(all_electrodes.T) electrode_coordinate_grid = list( itertools.product(np.arange(1, 18), np.arange(1, 16))) electrode_coordinate_grid = [ tuple(reversed(x)) for x in electrode_coordinate_grid ] electrode_amplifier_index_on_grid = all_electrodes_concat electrode_amplifier_name_on_grid = np.array( ["Int" + str(x) for x in electrode_amplifier_index_on_grid]) indices_arrays = [ electrode_amplifier_index_on_grid.tolist(), electrode_amplifier_name_on_grid.tolist() ] indices_tuples = list(zip(*indices_arrays)) channel_position_indices = pd.MultiIndex.from_tuples( indices_tuples, names=['Numbers', 'Strings']) channel_positions = pd.Series(electrode_coordinate_grid, index=channel_position_indices) channel_positions.columns = ['Positions'] channel_positions = channel_positions.reset_index(level=None, drop=False, name='Positions') if bad_channels is not None: #channel_positions = channel_positions[~channel_positions.Numbers.isin(bad_channels)] channel_positions[channel_positions.Numbers.isin(bad_channels)] = -1 bad_channels_mask = np.reshape(np.in1d(all_electrodes, bad_channels), (32, 4)) min_one_val = np.empty_like(bad_channels) min_one_val.fill(-1) np.place(all_electrodes, bad_channels_mask, min_one_val) if filename is not None: prb_gen.generate_prb_file(filename=filename, all_electrodes_array=all_electrodes, steps_r=steps_r, steps_c=steps_c) return all_electrodes, channel_positions
all_true = number_of_juxta precision = tp / all_pos recall = tp / all_true f_factor = 2 * (precision * recall) / (precision + recall) print('Precision = {}, Recall = {}, F1 factor = {}'.format( precision, recall, f_factor)) # ________________________________________ # ONE OFF FUNCTIONS # ________________________________________ # Generate prb file --------------- all_electrodes = np.array([0, 1, 2, 3]).reshape((2, 2)) prb_filename = join(base_folder, 'Analysis', 'KlustaKwik', 'tetrode.prb') prb_gen.generate_prb_file(filename=prb_filename, all_electrodes_array=all_electrodes, steps_r=2, steps_c=2) # --------------------------------- # SPIKEDETECT AND PCA--------------------- # filter all data high_pass_freq = 500 filtered_data_type = np.float64 temp_unfiltered = extra_data temp_unfiltered = temp_unfiltered.astype(filtered_data_type) iir_params = {'order': 4, 'ftype': 'butter', 'padlen': 0} extra_data_hp = filters.filter_data(temp_unfiltered, sampling_freq, l_freq=high_pass_freq, h_freq=None, method='iir',