@@ -74,9 +74,9 @@ class Electrode(dj.Part):
7474 ---
7575 shank: int # shank index, starts at 0, advance left to right
7676 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.
8080 """
8181
8282 @staticmethod
@@ -142,8 +142,8 @@ def create_neuropixels_probe(probe_type: str = "neuropixels 1.0 - 3A"):
142142 ),
143143 }
144144
145- electrodes = build_electrode_layouts (** neuropixels_probes_config [probe_type ])
146145 probe_type = {"probe_type" : probe_type }
146+ electrodes = build_electrode_layouts ({** neuropixels_probes_config [probe_type ["probe_type" ]], ** probe_type })
147147 with ProbeType .connection .transaction :
148148 ProbeType .insert1 (probe_type , skip_duplicates = True )
149149 ProbeType .Electrode .insert (
@@ -203,33 +203,35 @@ class Electrode(dj.Part):
203203
204204
205205def build_electrode_layouts (
206+ probe_type : str ,
206207 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 ,
209210 white_spacing : float = None ,
210211 col_count_per_shank : int = 1 ,
211212 shank_count : int = 1 ,
212- shank_spacing : float = 1 ,
213+ shank_spacing : float = None ,
213214 y_origin = "bottom" ,
214- ) -> dict :
215+ ) -> list [ dict ] :
215216
216217 """Builds electrode layouts.
217218
218219 Args:
219220 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).
222223 white_spacing (float): (μm) offset spacing. Defaults to None.
223224 col_count_per_shank (int): number of column per shank. Defaults to 1 (single column).
224225 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).
226227 y_origin (str): {"bottom", "top"}. y value decrements if "top". Defaults to "bottom".
227228 """
228229 row_count = int (site_count_per_shank / col_count_per_shank )
229230 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 ,
231233 )
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 )
233235
234236 if white_spacing :
235237 x_white_spaces = np .tile (
@@ -241,18 +243,19 @@ def build_electrode_layouts(
241243 shank_rows = np .repeat (range (row_count ), col_count_per_shank )
242244
243245 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+ ]
257260
258261 return electrode_layouts
0 commit comments