diff --git a/apps/probe-viewer/src/grouping/cambridgeneurotech.json b/apps/probe-viewer/src/grouping/cambridgeneurotech.json new file mode 100644 index 0000000..30c6997 --- /dev/null +++ b/apps/probe-viewer/src/grouping/cambridgeneurotech.json @@ -0,0 +1,641 @@ +{ + "hierarchy": [ + { + "label": "H (high-resolution / dense recording)", + "children": [ + { + "label": "32 channel", + "children": [ + { + "label": "H1b (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H1b", + "ASSY-116-H1b" + ] + }, + { + "label": "H4 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H4", + "ASSY-116-H4", + "ASSY-196-H4" + ] + }, + { + "label": "H6b (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H6b", + "ASSY-116-H6b", + "ASSY-196-H6b" + ] + }, + { + "label": "H7b (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H7b", + "ASSY-116-H7b" + ] + }, + { + "label": "H8b (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H8b", + "ASSY-116-H8b" + ] + }, + { + "label": "H10b (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H10b", + "ASSY-116-H10b", + "ASSY-196-H10b" + ] + } + ] + }, + { + "label": "64 channel", + "children": [ + { + "label": "H1 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H1", + "ASSY-156-H1", + "ASSY-236-H1" + ] + }, + { + "label": "H2 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H2", + "ASSY-156-H2", + "ASSY-158-H2", + "ASSY-236-H2", + "ASSY-276-H2", + "ASSY-325-H2" + ] + }, + { + "label": "H3 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-37-H3", + "ASSY-77-H3", + "ASSY-156-H3", + "ASSY-158-H3", + "ASSY-236-H3", + "ASSY-276-H3", + "ASSY-325-H3" + ] + }, + { + "label": "H5 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-H5", + "ASSY-156-H5", + "ASSY-158-H5", + "ASSY-236-H5", + "ASSY-276-H5", + "ASSY-325-H5" + ] + }, + { + "label": "H6 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H6", + "ASSY-156-H6", + "ASSY-158-H6", + "ASSY-236-H6", + "ASSY-276-H6", + "ASSY-325-H6" + ] + }, + { + "label": "H7 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H7", + "ASSY-156-H7", + "ASSY-158-H7", + "ASSY-236-H7", + "ASSY-276-H7", + "ASSY-325-H7" + ] + }, + { + "label": "H8 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H8", + "ASSY-156-H8", + "ASSY-158-H8", + "ASSY-236-H8", + "ASSY-276-H8", + "ASSY-325-H8" + ] + }, + { + "label": "H9 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-H9", + "ASSY-156-H9", + "ASSY-158-H9", + "ASSY-236-H9", + "ASSY-276-H9", + "ASSY-325-H9" + ] + }, + { + "label": "H10 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-H10", + "ASSY-156-H10", + "ASSY-158-H10", + "ASSY-236-H10", + "ASSY-276-H10", + "ASSY-325-H10" + ] + } + ] + }, + { + "label": "128 channel", + "children": [ + { + "label": "H7 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-325D-H7" + ] + }, + { + "label": "H10 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-325D-H10" + ] + }, + { + "label": "H12 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-350-H12" + ] + }, + { + "label": "H13 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-350-H13" + ] + }, + { + "label": "H14-1 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H14-1" + ] + }, + { + "label": "H14-2 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H14-2" + ] + }, + { + "label": "H15 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H15" + ] + }, + { + "label": "H15_2 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H15_2" + ] + }, + { + "label": "H16 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H16" + ] + }, + { + "label": "H20 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-H20" + ] + } + ] + } + ] + }, + { + "label": "P (compact array)", + "children": [ + { + "label": "16 channel", + "children": [ + { + "label": "P-1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-1-P-1", + "ASSY-79-P-1" + ] + }, + { + "label": "P-2 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-1-P-2", + "ASSY-79-P-2" + ] + } + ] + }, + { + "label": "32 channel", + "children": [ + { + "label": "P-1 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-P-1", + "ASSY-116-P-1", + "ASSY-196-P-1" + ] + }, + { + "label": "P-2 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-P-2", + "ASSY-116-P-2", + "ASSY-196-P-2" + ] + } + ] + }, + { + "label": "64 channel", + "children": [ + { + "label": "P-1 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-P-1", + "ASSY-156-P-1", + "ASSY-158-P-1", + "ASSY-236-P-1", + "ASSY-276-P-1", + "ASSY-325-P-1" + ] + }, + { + "label": "P-2 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-P-2", + "ASSY-156-P-2", + "ASSY-158-P-2", + "ASSY-236-P-2", + "ASSY-276-P-2", + "ASSY-325-P-2" + ] + } + ] + }, + { + "label": "128 channel", + "children": [ + { + "label": "P-1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-325D-P-1" + ] + }, + { + "label": "P-2 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-325D-P-2" + ] + } + ] + } + ], + "note": "Descriptive label inferred from geometry; Cambridge publishes an official name only for the H-series." + }, + { + "label": "E (compact edge array)", + "children": [ + { + "label": "16 channel", + "children": [ + { + "label": "E-1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-1-E-1", + "ASSY-79-E-1" + ] + }, + { + "label": "E-2 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-1-E-2", + "ASSY-79-E-2" + ] + } + ] + }, + { + "label": "32 channel", + "children": [ + { + "label": "E-1 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-E-1", + "ASSY-116-E-1", + "ASSY-196-E-1" + ] + }, + { + "label": "E-2 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-E-2", + "ASSY-116-E-2", + "ASSY-196-E-2" + ] + } + ] + }, + { + "label": "64 channel", + "children": [ + { + "label": "E-1 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-E-1", + "ASSY-156-E-1", + "ASSY-158-E-1", + "ASSY-236-E-1", + "ASSY-276-E-1", + "ASSY-325-E-1" + ] + }, + { + "label": "E-2 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-E-2", + "ASSY-156-E-2", + "ASSY-158-E-2", + "ASSY-236-E-2", + "ASSY-276-E-2", + "ASSY-325-E-2" + ] + } + ] + }, + { + "label": "128 channel", + "children": [ + { + "label": "E-1 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-325D-E-1" + ] + }, + { + "label": "E-2 (4 shanks)", + "collapsible": false, + "probes": [ + "ASSY-325D-E-2" + ] + } + ] + } + ], + "note": "Descriptive label inferred from geometry; Cambridge publishes an official name only for the H-series." + }, + { + "label": "F (fine-pitch multi-shank)", + "children": [ + { + "label": "32 channel", + "children": [ + { + "label": "Fb (3 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-Fb", + "ASSY-116-Fb", + "ASSY-196-Fb" + ] + } + ] + }, + { + "label": "64 channel", + "children": [ + { + "label": "F (6 shanks)", + "collapsible": false, + "probes": [ + "ASSY-77-F", + "ASSY-156-F", + "ASSY-158-F", + "ASSY-236-F", + "ASSY-276-F", + "ASSY-325-F" + ] + } + ] + }, + { + "label": "128 channel", + "children": [ + { + "label": "F (6 shanks)", + "collapsible": false, + "probes": [ + "ASSY-325D-F" + ] + }, + { + "label": "F8-0 (8 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-F8-0" + ] + }, + { + "label": "F8-1 (8 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-F8-1" + ] + }, + { + "label": "F8-2 (8 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-F8-2" + ] + } + ] + } + ], + "note": "Descriptive label inferred from geometry; Cambridge publishes an official name only for the H-series." + }, + { + "label": "L (linear / laminar)", + "children": [ + { + "label": "16 channel", + "children": [ + { + "label": "L1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-79-L1" + ] + } + ] + }, + { + "label": "32 channel", + "children": [ + { + "label": "L2 (2 shanks)", + "collapsible": false, + "probes": [ + "ASSY-37-L2", + "ASSY-116-L2" + ] + } + ] + }, + { + "label": "64 channel", + "children": [ + { + "label": "L3 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-L3", + "ASSY-156-L3", + "ASSY-158-L3", + "ASSY-236-L3", + "ASSY-276-L3", + "ASSY-325-L3" + ] + } + ] + }, + { + "label": "128 channel", + "children": [ + { + "label": "L13 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-350-L13" + ] + }, + { + "label": "L14 (8 shanks)", + "collapsible": false, + "probes": [ + "ASSY-350-L14" + ] + } + ] + } + ], + "note": "Descriptive label inferred from geometry; Cambridge publishes an official name only for the H-series." + }, + { + "label": "M (single-shank)", + "children": [ + { + "label": "64 channel", + "children": [ + { + "label": "M1v1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-M1v1", + "ASSY-156-M1v1", + "ASSY-158-M1v1", + "ASSY-236-M1v1", + "ASSY-276-M1v1" + ] + }, + { + "label": "M1v2 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-M1v2", + "ASSY-156-M1v2", + "ASSY-158-M1v2", + "ASSY-236-M1v2", + "ASSY-276-M1v2", + "ASSY-325-M1v2" + ] + }, + { + "label": "M2v1 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-M2v1", + "ASSY-156-M2v1", + "ASSY-158-M2v1", + "ASSY-236-M2v1", + "ASSY-276-M2v1" + ] + }, + { + "label": "M2v2 (1 shank)", + "collapsible": false, + "probes": [ + "ASSY-77-M2v2", + "ASSY-156-M2v2", + "ASSY-158-M2v2", + "ASSY-236-M2v2", + "ASSY-276-M2v2", + "ASSY-325-M2v2" + ] + } + ] + } + ], + "note": "Descriptive label inferred from geometry; Cambridge publishes an official name only for the H-series." + } + ] +} diff --git a/apps/probe-viewer/src/grouping/index.ts b/apps/probe-viewer/src/grouping/index.ts index 28b110d..23a0152 100644 --- a/apps/probe-viewer/src/grouping/index.ts +++ b/apps/probe-viewer/src/grouping/index.ts @@ -1,5 +1,6 @@ import type { HierarchyConfig } from "./types"; import imecHierarchy from "./imec_neuropixels.json"; +import cambridgeNeurotechHierarchy from "./cambridgeneurotech.json"; // Registry mapping a manufacturer key (as it appears in the manifest) to its // explicit sidebar hierarchy. A manufacturer absent here has no hierarchy and @@ -10,6 +11,7 @@ import imecHierarchy from "./imec_neuropixels.json"; // JSON is used because Vite imports it with no extra dependency. const REGISTRY: Record = { imec: imecHierarchy as HierarchyConfig, + cambridgeneurotech: cambridgeNeurotechHierarchy as HierarchyConfig, }; export function getGroupingConfig(manufacturer: string): HierarchyConfig | undefined {