Skip to content

Commit aaec763

Browse files
committed
fix(probe): better handling of different Neuropixels probe types
1 parent 46679e6 commit aaec763

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

element_array_ephys/probe.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,21 +155,19 @@ def create_neuropixels_probe(probe_type: str = "neuropixels 1.0 - 3A"):
155155
Electrode numbering is 0-indexing
156156
"""
157157
npx_probes_config = probe_geometry.M
158-
npx_probes_config["neuropixels 1.0 - 3A"] = npx_probes_config["3A"]
159-
npx_probes_config["neuropixels 1.0 - 3B"] = npx_probes_config["NP1010"]
160-
npx_probes_config["neuropixels UHD"] = npx_probes_config["NP1100"]
161-
npx_probes_config["neuropixels 2.0 - SS"] = npx_probes_config["NP2000"]
162-
npx_probes_config["neuropixels 2.0 - MS"] = npx_probes_config["NP2010"]
158+
if probe_type not in npx_probes_config:
159+
raise ValueError(
160+
f"Probe type {probe_type} not found in probe_geometry configuration. Not a Neuropixels probe?"
161+
)
163162

164-
probe_type = {"probe_type": probe_type}
165163
probe_params = dict(
166164
zip(
167165
probe_geometry.geom_param_names,
168-
npx_probes_config[probe_type["probe_type"]],
166+
npx_probes_config[probe_type],
169167
)
170168
)
171169
electrode_layouts = probe_geometry.build_npx_probe(
172-
**{**probe_params, **probe_type}
170+
**{**probe_params, "probe_type": probe_type}
173171
)
174172
with ProbeType.connection.transaction:
175173
ProbeType.insert1(probe_type)

element_array_ephys/readers/probe_geometry.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@
101101
]
102102
)
103103

104+
# additional alias to maintain compatibility with previous naming in the pipeline
105+
M["neuropixels 1.0 - 3A"] = M["3A"]
106+
M["neuropixels 1.0 - 3B"] = M["NP1010"]
107+
M["neuropixels 1.0"] = M["NP1010"]
108+
M["neuropixels UHD"] = M["NP1100"]
109+
M["neuropixels 2.0 - SS"] = M["NP2000"]
110+
M["neuropixels 2.0 - MS"] = M["NP2010"]
111+
104112

105113
def build_npx_probe(
106114
nShank: int,

element_array_ephys/readers/spikeglx.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,19 @@ def __init__(self, meta_filepath):
262262
self.fname = meta_filepath
263263
self.meta = _read_meta(meta_filepath)
264264

265+
# Get probe part number
266+
self.probe_PN = self.meta.get("imDatPrb_pn", "3A")
267+
265268
# Infer npx probe model (e.g. 1.0 (3A, 3B) or 2.0)
266-
probe_model = self.meta.get("imDatPrb_type", 1)
267-
if probe_model <= 1:
268-
if "typeEnabled" in self.meta:
269+
probe_model = self.meta.get("imDatPrb_type")
270+
if probe_model is None:
271+
if "typeEnabled" in self.meta and self.probe_PN == "3A":
269272
self.probe_model = "neuropixels 1.0 - 3A"
270-
elif "typeImEnabled" in self.meta:
271-
self.probe_model = "neuropixels 1.0 - 3B"
272-
elif probe_model == 1100:
273+
elif "typeImEnabled" in self.meta and self.probe_PN == "NP1010":
274+
self.probe_model = "neuropixels 1.0"
275+
else:
276+
self.probe_model = self.probe_PN
277+
if probe_model == 1100:
273278
self.probe_model = "neuropixels UHD"
274279
elif probe_model == 21:
275280
self.probe_model = "neuropixels 2.0 - SS"
@@ -293,8 +298,6 @@ def __init__(self, meta_filepath):
293298
"Probe Serial Number not found in"
294299
' either "imProbeSN" or "imDatPrb_sn"'
295300
)
296-
# Get probe part number
297-
self.probe_PN = self.meta.get("imDatPrb_pn", "3A")
298301

299302
# Parse channel info
300303
self.chanmap = (

0 commit comments

Comments
 (0)