@@ -74,9 +74,9 @@ class Electrode(dj.Part):
74
74
---
75
75
shank: int # shank index, starts at 0, advance left to right
76
76
shank_col: int # column index, starts at 0, advance left to right
77
- shank_row: int # row index, starts at 0, advance tip to tail
78
- x_coord=NULL: float # (μm) x coordinate of the electrode within the probe, (0, 0) is the bottom left corner of the probe
79
- y_coord=NULL: float # (μm) y coordinate of the electrode within the probe, (0, 0) is the bottom left corner of the probe
77
+ shank_row: int # row index, starts at 0.
78
+ x_coord=NULL: float # (μm) x coordinate of the electrode within the probe.
79
+ y_coord=NULL: float # (μm) y coordinate of the electrode within the probe.
80
80
"""
81
81
82
82
@staticmethod
@@ -142,8 +142,8 @@ def create_neuropixels_probe(probe_type: str = "neuropixels 1.0 - 3A"):
142
142
),
143
143
}
144
144
145
- electrodes = build_electrode_layouts (** neuropixels_probes_config [probe_type ])
146
145
probe_type = {"probe_type" : probe_type }
146
+ electrodes = build_electrode_layouts ({** neuropixels_probes_config [probe_type ["probe_type" ]], ** probe_type })
147
147
with ProbeType .connection .transaction :
148
148
ProbeType .insert1 (probe_type , skip_duplicates = True )
149
149
ProbeType .Electrode .insert (
@@ -203,33 +203,35 @@ class Electrode(dj.Part):
203
203
204
204
205
205
def build_electrode_layouts (
206
+ probe_type : str ,
206
207
site_count_per_shank : int ,
207
- col_spacing : float = 1 ,
208
- row_spacing : float = 1 ,
208
+ col_spacing : float = None ,
209
+ row_spacing : float = None ,
209
210
white_spacing : float = None ,
210
211
col_count_per_shank : int = 1 ,
211
212
shank_count : int = 1 ,
212
- shank_spacing : float = 1 ,
213
+ shank_spacing : float = None ,
213
214
y_origin = "bottom" ,
214
- ) -> dict :
215
+ ) -> list [ dict ] :
215
216
216
217
"""Builds electrode layouts.
217
218
218
219
Args:
219
220
site_count_per_shank (int): site count per shank.
220
- col_spacing (float): (μm) horizontal spacing between sites. Defaults to 1 (single column).
221
- row_spacing (float): (μm) vertical spacing between columns. Defaults to 1 (single row).
221
+ col_spacing (float): (μm) horizontal spacing between sites. Defaults to None (single column).
222
+ row_spacing (float): (μm) vertical spacing between columns. Defaults to None (single row).
222
223
white_spacing (float): (μm) offset spacing. Defaults to None.
223
224
col_count_per_shank (int): number of column per shank. Defaults to 1 (single column).
224
225
shank_count (int): number of shank. Defaults to 1 (single shank).
225
- shank_spacing (float): spacing between shanks. Defaults to 1 (single shank).
226
+ shank_spacing (float): (μm) spacing between shanks. Defaults to None (single shank).
226
227
y_origin (str): {"bottom", "top"}. y value decrements if "top". Defaults to "bottom".
227
228
"""
228
229
row_count = int (site_count_per_shank / col_count_per_shank )
229
230
x_coords = np .tile (
230
- np .arange (0 , col_spacing * col_count_per_shank , col_spacing ), row_count
231
+ np .arange (0 , (col_spacing or 1 ) * col_count_per_shank , (col_spacing or 1 )),
232
+ row_count ,
231
233
)
232
- y_coords = np .repeat (np .arange (row_count ) * row_spacing , col_count_per_shank )
234
+ y_coords = np .repeat (np .arange (row_count ) * ( row_spacing or 1 ) , col_count_per_shank )
233
235
234
236
if white_spacing :
235
237
x_white_spaces = np .tile (
@@ -241,18 +243,19 @@ def build_electrode_layouts(
241
243
shank_rows = np .repeat (range (row_count ), col_count_per_shank )
242
244
243
245
electrode_layouts = [
244
- {
245
- "electrode" : (site_count_per_shank * shank_no ) + e_id ,
246
- "shank" : shank_no ,
247
- "shank_col" : c_id ,
248
- "shank_row" : r_id ,
249
- "x_coord" : x + (shank_no * shank_spacing ),
250
- "y_coord" : y if y_origin == "bottom" else - y ,
251
- }
252
- for shank_no in range (shank_count )
253
- for e_id , (c_id , r_id , x , y ) in enumerate (
254
- zip (shank_cols , shank_rows , x_coords , y_coords )
255
- )
256
- ]
246
+ {
247
+ "probe_type" : probe_type ,
248
+ "electrode" : (site_count_per_shank * shank_no ) + e_id ,
249
+ "shank" : shank_no ,
250
+ "shank_col" : c_id ,
251
+ "shank_row" : r_id ,
252
+ "x_coord" : x + (shank_no * (shank_spacing or 1 )),
253
+ "y_coord" : y if y_origin == "bottom" else - y ,
254
+ }
255
+ for shank_no in range (shank_count )
256
+ for e_id , (c_id , r_id , x , y ) in enumerate (
257
+ zip (shank_cols , shank_rows , x_coords , y_coords )
258
+ )
259
+ ]
257
260
258
261
return electrode_layouts
0 commit comments