From ff1053f8a936751f5040c5a3d4b05982aef3dd75 Mon Sep 17 00:00:00 2001 From: stamalip Date: Mon, 24 Nov 2025 15:01:19 +0200 Subject: [PATCH 1/2] will update the ephys pipeline --- build_pipeline.py | 3 +- element_array_ephys/ephys.py | 6 +- populate_ephys.py | 103 + run_sorting_si.py | 214 + test_npx_pipe (1).ipynb | 14494 +++++++++++++++++++++++---------- 5 files changed, 10718 insertions(+), 4102 deletions(-) create mode 100755 populate_ephys.py create mode 100755 run_sorting_si.py diff --git a/build_pipeline.py b/build_pipeline.py index e193e7f6..41a4dcd5 100755 --- a/build_pipeline.py +++ b/build_pipeline.py @@ -7,8 +7,7 @@ import element_interface dj.config['database.host'] = 'database.eflab.org:3306' -dj.config['database.username'] = 'maria' -dj.config['database.password'] = 'Spike@Thr200' + experiment_dir = '/mnt/lab/data01/OpenEphys' db_prefix = 'lab_npx_' diff --git a/element_array_ephys/ephys.py b/element_array_ephys/ephys.py index f8217a07..699a6621 100644 --- a/element_array_ephys/ephys.py +++ b/element_array_ephys/ephys.py @@ -413,10 +413,12 @@ def make(self, key): for channel_idx, channel_info in channel2electrode_map.items() ] elif acq_software == "Open Ephys": - #print(session_dir) + print("Hey Im Here!!") + print(session_dir) dataset = openephys.OpenEphys(session_dir) - #print(dataset.probes.items()) + print(dataset.probes.items()) for serial_number, probe_data in dataset.probes.items(): + print(f"Serial Number is {str(serial_number)} while inserted probeserial is: {inserted_probe_serial_number}") if str(serial_number) == inserted_probe_serial_number: break else: diff --git a/populate_ephys.py b/populate_ephys.py new file mode 100755 index 00000000..e9b27754 --- /dev/null +++ b/populate_ephys.py @@ -0,0 +1,103 @@ +## Imports +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +from pathlib import Path +import os +# import numcodecs +import datajoint as dj + +## Database specifics +experiment_dir = '/mnt/lab/data01/OpenEphys' +db_prefix = 'lab_npx_' + +dj.config['database.host'] = 'database.eflab.org:3306' +dj.config["enable_python_native_blobs"] = True +dj.config['custom'] = {'database_prefix': db_prefix,'ephys_root_data_dir': experiment_dir} + + +from build_pipeline import Subject, Session, Recording, probe, ephys, ephys_report + +def get_key(): + while True: + # Get user inputs + animal_id = input("Enter animal_id: ").strip() + session = input("Enter session: ").strip() + insertion_number = input("Enter insertion number: ").strip() + + # Print and confirm + print("\nYou entered:") + print(f" animal_id : {animal_id}") + print(f" session : {session}") + print(f" insertion number : {insertion_number}") + confirm = input("Are these the correct inputs? (yes/no): ").strip().lower() + + + # safety check to confirm the inputs + if confirm == "yes": + break + else: + print("Let's try again...\n") + + # Pick Probe + print("\nNow let's choose a probe:") + print(probe.Probe()) + probes = probe.Probe.fetch(format="frame") + print(probes) + probe_idx = input("pick the index of your choice") + print(probe.iloc(3)) + + key = {'animal_id' : int(animal_id), 'session': int(session), 'insertion_number' : int(insertion_number)} + print(f'processing key: {key}') + return key , probe_idx + + +def populate_ephys(key,probe_idx): + ''' + A function that correctly checks and populates the Ephys schema with all its subsequent tables. + ''' + + +# TODO choose a different probe when they exist + ephys.ProbeInsertion.insert1( + dict( + key, + probe=(probe.Probe()).fetch('probe')[probe_idx], + ), skip_duplicates=True + ) + + ephys.EphysRecording().populate(key, display_progress=True) + + + + key['paramset_idx']=3 + file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path') + ks_path = file_path[0]+'/kilosort4/sorter_output' + ephys.ClusteringTask.insert1( + dict( + key, + task_mode="load", # load or trigger + clustering_output_dir=ks_path, + ), skip_duplicates=True + ) + + ephys.Clustering.populate(key, display_progress=True) + ephys.CuratedClustering.populate(key, display_progress=True) + ephys.QualityMetrics.populate(key, display_progress=True) + + + + +def main(): + key = get_key() + print(f"Populating the Ephys schema for key:\n {key} ... ") + populate_ephys(key) + + +if __name__ == "__main__": + main() + + + + + diff --git a/run_sorting_si.py b/run_sorting_si.py new file mode 100755 index 00000000..8ec37362 --- /dev/null +++ b/run_sorting_si.py @@ -0,0 +1,214 @@ +## Imports +# import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +from pathlib import Path +import os +import numcodecs + +import warnings +warnings.simplefilter("ignore") + +import spikeinterface.full as si +# import probeinterface as pi +# from probeinterface.plotting import plot_probe + +import datajoint as dj +dj.config['database.host'] = 'database.eflab.org:3306' + +# exp = dj.create_virtual_module('experiments.py', 'lab_experiments') +# stim = dj.create_virtual_module('stimuli.py', 'lab_stimuli') +# beh = dj.create_virtual_module('behavior.py', 'lab_behavior') +rec = dj.create_virtual_module('recordings.py', 'lab_recordings') +# npx = dj.create_virtual_module('neuropixels.py', 'lab_neuropixels') + +## Helpful functions +def replace_directory(a_directory): + """ + Temporary Solution, use common.Paths.getLocal instead + """ + # Define the mapping + old_prefix1 = 'X:/OpenEphys\\' + new_prefix1 = '/mnt/lab/data/OpenEphys/' + + old_prefix2 = 'W:/OpenEphys\\' + new_prefix2 = '/mnt/lab/data01/OpenEphys/' + + old_prefix3 = 'W:/OpenEphys' + new_prefix3 = '/mnt/lab/data01/OpenEphys/' + + # Replace the prefix + if a_directory.startswith(old_prefix1): + return a_directory.replace(old_prefix1, new_prefix1) + elif a_directory.startswith(old_prefix2): + return a_directory.replace(old_prefix2, new_prefix2) + elif a_directory.startswith(old_prefix3): + return a_directory.replace(old_prefix3, new_prefix3) + else: + print('Something is wrong with the OpenEphys path') + + +def get_session_directory(session_key: dict) -> str: + """Retrieve the session directory with Neuropixels for the given session. + + Args: + session_key (dict): A dictionary mapping subject to an entry in the subject table, and session_datetime corresponding to a session in the database. + + Returns: + A string for the path to the session directory. + """ + rep_dir = replace_directory((rec.Recording & session_key).fetch1("target_path")) + print(rep_dir) + if not rep_dir: + raise ValueError(f"No path found for key: {session_key}") + #print(rep_dir) + + return rep_dir #session_dir/'Record Node 101/experiment1/recording1' + + +def get_key(): + while True: + # Get user inputs + animal_id = input("Enter animal_id: ").strip() + session = input("Enter session: ").strip() + + # Print and confirm + print("\nYou entered:") + print(f" animal_id : {animal_id}") + print(f" session : {session}") + confirm = input("Are these the correct inputs? (yes/no): ").strip().lower() + + # safety check to confirm the inputs + if confirm == "yes": + break + else: + print("Let's try again...\n") + + key = {'animal_id' : int(animal_id), 'session': int(session)} + print(f'processing key: {key}') + return key + + +def process_session(key): + # define number of cores for preprocessing: + n_cpus = os.cpu_count() + n_jobs = n_cpus - 4 + + #set paths + base_folder = Path(get_session_directory(key)) + openephys_folder = base_folder / 'Record Node 101' + to_save_folder = openephys_folder / 'experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/' + + #load rec + full_raw_rec = si.read_openephys(openephys_folder, load_sync_channel=False) + # #and probe info + # probe = full_raw_rec.get_probe() + + print('preprocessing..') + if (to_save_folder / "preprocessed").is_dir(): + recording_saved = si.load_extractor(to_save_folder / "preprocessed") + else: # do the preprocessing + recording_to_process = full_raw_rec + #filtering + recording_f = si.bandpass_filter(recording_to_process, freq_min=300, freq_max=9000) + recording_cmr = si.common_reference(recording_f, reference='global', operator='median') + #remove bad channels + bad_channel_ids, channel_labels = si.detect_bad_channels(recording_f, method='coherence+psd') + recording_good_channels_f = recording_f.remove_channels(bad_channel_ids) + recording_good_channels = si.common_reference(recording_good_channels_f, reference='global', operator='median') + # and save + job_kwargs = dict(n_jobs=n_jobs, chunk_duration="1s", progress_bar=True) + recording_saved = recording_good_channels.save(folder=to_save_folder / "preprocessed", **job_kwargs) + + print('create compressed preprocessed..') + if (to_save_folder / "preprocessed_compressed.zarr").is_dir(): + ## if compressed preprocessed exist: + print('compressed preprocessed already saved') + #recording_saved = si.read_zarr(to_save_folder / "preprocessed_compressed.zarr") + else: #save + compressor = numcodecs.Blosc(cname="zstd", clevel=9, shuffle=numcodecs.Blosc.BITSHUFFLE) + recording_saved = recording_good_channels.save(format="zarr", folder=to_save_folder / "preprocessed_compressed.zarr", + compressor=compressor, + **job_kwargs) + + ## run kilosort4 in container: + # define params + print('preparing to run kilosort..') + + # these params are for paramset_idx=3 + sorter_params = {"batch_size": 100000, + "acg_threshold":0.1, + "ccg_threshold":0.15, + "duplicate_spike_ms": 0.15, + "pool_engine": "process", + "n_jobs": 1, + "chunk_duration": "1s", + "progress_bar": True, + "mp_context": None, + "max_threads_per_worker": 1,} + + if (to_save_folder / "kilosort4").is_dir(): + print('sorting already saved') + sorting_KS4 = si.read_kilosort(to_save_folder / "kilosort4/sorter_output") + else: + print('run spike sorting') + # run spike sorting on entire recording + sorting_KS4 = si.run_sorter('kilosort4', recording_saved, + output_folder=to_save_folder / 'kilosort4', + verbose=True, docker_image=True, + **sorter_params) + print(sorting_KS4) + + #remove empty units if any + sorting_KS4 = sorting_KS4.remove_empty_units() + print(f'KS4 found {len(sorting_KS4.get_unit_ids())} non-empty units') + + ## create a sorting analyzer + if (to_save_folder / "sorting_analyzer").is_dir(): + print('analyzer already saved') + analyzer = si.load_sorting_analyzer( + folder=to_save_folder / "sorting_analyzer" + ) + + ## add: check that all metrics folders exist and + # print('metrics computed') + else: + print('analyzer...') + analyzer = si.create_sorting_analyzer( + sorting=sorting_KS4, + recording=recording_saved, + folder=to_save_folder / "sorting_analyzer", + format="binary_folder", + sparse=True, + overwrite=True + ) + + #compute stuff + print('computing metrics..') + analyzer.compute(["noise_levels", "random_spikes", "waveforms", "templates"]) + analyzer.compute( + "spike_amplitudes", + peak_sign="pos" + ) + analyzer.compute(["unit_locations", "spike_locations", "correlograms", "principal_components"]) + analyzer.compute('template_metrics', include_multi_channel_metrics=True) + + #compute quality metrics + dqm_params = si.get_default_qm_params() + analyzer.compute( + "quality_metrics", + qm_params=dqm_params + ) + + ## all processing done + print(f'processing done for {key}') + + +def main(): + key = get_key() + process_session(key) + + +if __name__ == "__main__": + main() + diff --git a/test_npx_pipe (1).ipynb b/test_npx_pipe (1).ipynb index ea6a2741..07149747 100755 --- a/test_npx_pipe (1).ipynb +++ b/test_npx_pipe (1).ipynb @@ -2,26 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 25, "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Please enter DataJoint username: eflab\n", - "Please enter DataJoint password: ········\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-16 11:31:22,488][INFO]: Connecting eflab@database.eflab.org:3306\n", - "[2025-09-16 11:31:22,520][INFO]: Connected eflab@database.eflab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "import numpy as np\n", @@ -29,7 +12,8 @@ "\n", "\n", "dj.config['database.host'] = 'database.eflab.org:3306'\n", - "dj.config['database.username'] = 'eflab'\n", + "dj.config['database.user'] = 'eflab'\n", + "\n", "\n", "experiment_dir = '/mnt/lab/data01/OpenEphys'\n", "db_prefix = 'lab_npx_'\n", @@ -53,25 +37,16 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "rec = dj.create_virtual_module('lab_recordings.py', 'lab_recordings')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "ephys.EphysRecording.populate(key, display_progress=True)" + "probe.ProbeType.Electrode()" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -129,7 +104,7 @@ " }\n", " \n", " \n", - " Ephys recording from a probe insertion for a given session.\n", + " \n", "
\n", " \n", " \n", - " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -142,45 +117,152 @@ "

insertion_number

\n", " \n", "
\n", - "

electrode_config_hash

\n", - " \n", + "

channel_idx

\n", + " channel index (index of the raw data)\n", "
\n", - "

acq_software

\n", + "

electrode_config_hash

\n", " \n", "
\n", - "

sampling_rate

\n", - " (Hz)\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", + "

electrode

\n", + " electrode index, starts at 0\n", "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", + "

channel_name

\n", + " alias of the channel\n", "
2441481-17c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0
244148107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank1
244148117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2
244148127c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank3
244148137c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4
244148147c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank5
244148157c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6
244148167c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank7
244148177c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank8
244148187c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank9
244148197c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10
2441481107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank11
\n", - " \n", - "

Total: 0

\n", + "

...

\n", + "

Total: 20352

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" + "*animal_id *session *insertion_num *channel_idx electrode_conf probe_type electrode channel_name \n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +-----------+ +------------+\n", + "244 148 1 -1 7c36bff0-7661- Neuropixels 2. 0 \n", + "244 148 1 0 7c36bff0-7661- Neuropixels 2. 1 \n", + "244 148 1 1 7c36bff0-7661- Neuropixels 2. 2 \n", + "244 148 1 2 7c36bff0-7661- Neuropixels 2. 3 \n", + "244 148 1 3 7c36bff0-7661- Neuropixels 2. 4 \n", + "244 148 1 4 7c36bff0-7661- Neuropixels 2. 5 \n", + "244 148 1 5 7c36bff0-7661- Neuropixels 2. 6 \n", + "244 148 1 6 7c36bff0-7661- Neuropixels 2. 7 \n", + "244 148 1 7 7c36bff0-7661- Neuropixels 2. 8 \n", + "244 148 1 8 7c36bff0-7661- Neuropixels 2. 9 \n", + "244 148 1 9 7c36bff0-7661- Neuropixels 2. 10 \n", + "244 148 1 10 7c36bff0-7661- Neuropixels 2. 11 \n", + " ...\n", + " (Total: 20352)" ] }, - "execution_count": 14, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], - "source": [] + "source": [ + "ephys.EphysRecording.Channel()" + ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [], + "source": [ + "rec = dj.create_virtual_module('lab_recordings.py', 'lab_recordings')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [ { "data": { @@ -237,66 +319,94 @@ " }\n", " \n", " \n", - " Session info\n", + " Represent a physical probe with unique identification\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

user_name

\n", - " user performing the experiment\n", - "
\n", - "

setup

\n", - " computer id\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", "
\n", - "

session_tmst

\n", - " session timestamp\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

experiment_type

\n", + "

probe_comment

\n", " \n", - "
\n", - "

logger_tmst

\n", - " logger precise timestamp\n", "
244283mariaef-rp52025-07-30 11:04:01MatchPort0.0
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
23107806184Neuropixels 2.0 - Multishank
23107806302Neuropixels 2.0 - Multishank
23107806304Neuropixels 2.0 - Multishank
23107806671Neuropixels 2.0 - Multishank
\n", " \n", - "

Total: 1

\n", + "

Total: 6

\n", " " ], "text/plain": [ - "*animal_id *session user_name setup session_tmst experiment_typ logger_tmst \n", - "+-----------+ +---------+ +-----------+ +--------+ +------------+ +------------+ +------------+\n", - "244 283 maria ef-rp5 2025-07-30 11: MatchPort 0.0 \n", - " (Total: 1)" + "*probe probe_type probe_comment \n", + "+------------+ +------------+ +------------+\n", + "19108323581 neuropixels 1. fake probe \n", + "19108323583 neuropixels 2. fake probe \n", + "23107806184 Neuropixels 2. \n", + "23107806302 Neuropixels 2. \n", + "23107806304 Neuropixels 2. \n", + "23107806671 Neuropixels 2. \n", + " (Total: 6)" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "key = {'animal_id' : 244,\n", - " 'session' : 283,\n", - " 'insertion_number' : 1}\n", - "\n", - "Subject() & key" + "probe.Probe()" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'23107806304'" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "probe_idx=4\n", + "probe_choice= probe.Probe().fetch('probe')[probe_idx]\n", + "probe_choice" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "key = {\"animal_id\" : 299,\n", + " \"session\": 230,\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -354,7 +464,7 @@ " }\n", " \n", " \n", - " Manual table for defining a clustering task ready to be run\n", + " Probe insertion implanted into an animal for a given session.\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", + " \n", "
\n", @@ -367,103 +477,291 @@ "

insertion_number

\n", " \n", "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", "
24428313244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", " \n", - "

Total: 1

\n", + "

Total: 0

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 283 1 3 244_283_1_2025 load \n", - " (Total: 1)" + "*animal_id *session *insertion_num probe \n", + "+-----------+ +---------+ +------------+ +-------+\n", + "\n", + " (Total: 0)" ] }, - "execution_count": 4, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.ClusteringTask & key" + "ephys.ProbeInsertion() & key" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 31, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.Probe'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "string = \"244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\"\n", - "i = string.index('A/k')\n", - "string[:i]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n" + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08\n", + "Hey Im Here!!\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1\n", + "inside openephys class\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1\n", + "recording1\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101\n", + "if\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': None}\n", + "line 118\n", + "['ProbeA']\n", + "23107806304\n", + "line145\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@high_cut': '6000.0', '@low_cut': '300.0', '@Channels': ''}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@Channels': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@high_cut': '6000.0', '@low_cut': '300.0', '@Channels': ''}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@Channels': ''}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n" ] }, { - "data": { - "text/plain": [ - "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 100%|██████████| 1/1 [00:01<00:00, 1.39s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 169\n", + "ProbeA\n", + "ProbeA\n", + "line 184, ap only\n", + "dict_items([('23107806304', )])\n", + "Serial Number is 23107806304 while inserted probeserial is: 23107806304\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 272.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/mnt/lab/data01/OpenEphys']\n", + "299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "740\n", + "1347793\n", + "HERE\n", + "740 740\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "1347793\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", + " 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701\n", + " 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719\n", + " 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737\n", + " 738 739]\n", + "['mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [00:09<00:00, 9.83s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 740\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.31it/s]\n" + ] } ], "source": [ - "import re\n", - "string = \"244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\"\n", - "\n", - "def keep_until_probe(s):\n", - " match = re.search(r\"(.*?\\.Probe[^/]+/)(?=kilosort)\", s)\n", - " print(match)\n", - " return match.group(1) if match else s\n", + "from populate_ephys import populate_ephys\n", "\n", - "string = keep_until_probe(string)\n", - "string" + "key = {'animal_id' : 299, 'session': 230, 'insertion_number': 1}\n", + "populate_ephys(key,probe_idx)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -521,7 +819,7 @@ " }\n", " \n", " \n", - " Waveform metrics for a particular unit\n", + " File session info\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + " \n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -531,924 +829,3521 @@ "

session

\n", " session number\n", "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

amplitude_median

\n", - " (uV) absolute difference between waveform peak and trough\n", - "
\n", - "

peak_to_valley

\n", - " (ms) time between waveform peak and trough\n", - "
\n", - "

half_width

\n", - " (ms) spike width at half max amplitude\n", + "

rec_idx

\n", + " unique recording index\n", "
\n", - "

peak_trough_ratio

\n", - " absolute amplitude of peak divided by absolute amplitude of trough relative to 0\n", - "
\n", - "

repolarization_slope

\n", - " the repolarization slope was defined by fitting a regression line to the first 30us from trough to peak\n", - "
\n", - "

recovery_slope

\n", - " the recovery slope was defined by fitting a regression line to the first 30us from peak to tail\n", + "

rec_aim

\n", + " aim\n", "
\n", - "

spread

\n", - " (um) the range with amplitude above 12-percent of the maximum amplitude along the probe\n", + "

software

\n", + " program identification number\n", "
\n", - "

velocity_above

\n", - " (s/m) inverse velocity of waveform propagation from the soma toward the top of the probe\n", + "

version

\n", + " version of program\n", "
\n", - "

velocity_below

\n", - " (s/m) inverse velocity of waveform propagation from the soma toward the bottom of the probe\n", + "

filename

\n", + " file\n", "
\n", - "

num_positive_peaks

\n", - " \n", + "

source_path

\n", + " local path\n", "
\n", - "

num_negative_peaks

\n", - " \n", + "

target_path

\n", + " shared drive path\n", "
\n", - "

exp_decay

\n", - " \n", + "

timestamp

\n", + " timestamp\n", "
24428313066.8850.001243330.00132-0.20096571043.0-20526.590.0nannan1.01.00.00351934
24428313
288319117.3550.000840.00031-0.294477148725.0-23378.390.0nannan2.01.00.0279673
24428313224.180.0008333330.00024-0.288959217422.0-33734.360.0nannan1.01.00.0261229
24428313346.2150.0005933330.00199-1.5277539087.7-89019.6120.037.7815nan1.01.00.00955719
244283134139.8156.66667e-050.00185-0.9580333970350.0-6376.6190.0nannan0.00.00.00820124
244283135142.9356.66667e-050.00172333-0.9067664436500.017671.690.0nannan0.00.00.00851597
24428313613.650.0007166670.000276667-0.324688141258.0-21274.0120.0nannan1.01.00.0343427
244283137143.6176.66667e-050.00212-1.082023859520.0-5099.36180.0nannan0.00.00.00729127
24428313819.6950.0007133330.000226667-0.31022201312.0-27677.7120.01549.71nan1.01.00.0243837
244283139143.520.0004566670.00184333-1.080563744020.0-20808.7180.0nannan0.00.00.00759205
244283131064.9350.0007166670.000273333-0.357144444400.0-84944.4135.0nan425.9831.01.00.0250961
244283131139.00.0008566670.000206667-0.1969650944.0-58544.7105.0778.502nan0.01.00.0379851
neuropixelsOpenEphys0.6.7D:/OpenEphys\\2025-11-10_14-20-58W:/OpenEphys\\288_319_1_2025-11-10_14-21-102025-11-10 14:21:14
\n", - "

...

\n", - "

Total: 574

\n", + " \n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit amplitude_medi peak_to_valley half_width peak_trough_ra repolarization recovery_slope spread velocity_above velocity_below num_positive_p num_negative_p exp_decay \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +--------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "244 283 1 3 0 66.885 0.00124333 0.00132 -0.200965 71043.0 -20526.5 90.0 nan nan 1.0 1.0 0.00351934 \n", - "244 283 1 3 1 17.355 0.00084 0.00031 -0.294477 148725.0 -23378.3 90.0 nan nan 2.0 1.0 0.0279673 \n", - "244 283 1 3 2 24.18 0.000833333 0.00024 -0.288959 217422.0 -33734.3 60.0 nan nan 1.0 1.0 0.0261229 \n", - "244 283 1 3 3 46.215 0.000593333 0.00199 -1.52775 39087.7 -89019.6 120.0 37.7815 nan 1.0 1.0 0.00955719 \n", - "244 283 1 3 4 139.815 6.66667e-05 0.00185 -0.958033 3970350.0 -6376.61 90.0 nan nan 0.0 0.0 0.00820124 \n", - "244 283 1 3 5 142.935 6.66667e-05 0.00172333 -0.906766 4436500.0 17671.6 90.0 nan nan 0.0 0.0 0.00851597 \n", - "244 283 1 3 6 13.65 0.000716667 0.000276667 -0.324688 141258.0 -21274.0 120.0 nan nan 1.0 1.0 0.0343427 \n", - "244 283 1 3 7 143.617 6.66667e-05 0.00212 -1.08202 3859520.0 -5099.36 180.0 nan nan 0.0 0.0 0.00729127 \n", - "244 283 1 3 8 19.695 0.000713333 0.000226667 -0.31022 201312.0 -27677.7 120.0 1549.71 nan 1.0 1.0 0.0243837 \n", - "244 283 1 3 9 143.52 0.000456667 0.00184333 -1.08056 3744020.0 -20808.7 180.0 nan nan 0.0 0.0 0.00759205 \n", - "244 283 1 3 10 64.935 0.000716667 0.000273333 -0.357144 444400.0 -84944.4 135.0 nan 425.983 1.0 1.0 0.0250961 \n", - "244 283 1 3 11 39.0 0.000856667 0.000206667 -0.1969 650944.0 -58544.7 105.0 778.502 nan 0.0 1.0 0.0379851 \n", - " ...\n", - " (Total: 574)" + "*animal_id *session *rec_idx rec_aim software version filename source_path target_path timestamp \n", + "+-----------+ +---------+ +---------+ +------------+ +-----------+ +---------+ +----------+ +------------+ +------------+ +------------+\n", + "288 319 1 neuropixels OpenEphys 0.6.7 D:/OpenEphys\\2 W:/OpenEphys\\2 2025-11-10 14:\n", + " (Total: 1)" ] }, - "execution_count": 7, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.QualityMetrics." + "rec.Recording & key" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "execution_count": 9, + "metadata": { + "scrolled": true + }, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Cluster metrics for a particular unit\n", - "
\n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

num_spikes

\n", - " Number of spikes\n", - "
\n", - "

firing_rate

\n", - " (Hz) firing rate for a unit\n", - "
\n", - "

snr

\n", - " signal-to-noise ratio for a unit\n", - "
\n", - "

presence_ratio

\n", - " fraction of time in which spikes are present\n", - "
\n", - "

isi_violations_ratio

\n", - " rate of ISI violation as a fraction of overall rate\n", + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00)])\n", + "Serial Number is 23107806184 while inserted probeserial is: 23107806184\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 24.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/mnt/lab/data01/OpenEphys']\n", + "244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "/mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "491\n", + "958385\n", + "HERE\n", + "491 491\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "958385\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490]\n", + "['mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [00:09<00:00, 9.16s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 491\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00)])\n", + "Serial Number is 23107806184 while inserted probeserial is: 23107806184\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 24.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/mnt/lab/data01/OpenEphys']\n", + "244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "/mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "584\n", + "1092713\n", + "HERE\n", + "584 584\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "1092713\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583]\n", + "['good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [00:12<00:00, 12.54s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 584\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "from populate_ephys import populate_ephys\n", + "\n", + "# keys = [{'animal_id' : 288, 'session': 242, 'insertion_number': 1},\n", + "# {'animal_id' : 288, 'session': 243, 'insertion_number': 1},\n", + "# {'animal_id' : 288, 'session': 244, 'insertion_number': 1},\n", + "# {'animal_id' : 288, 'session': 245, 'insertion_number': 1},\n", + "# {'animal_id' : 288, 'session': 246, 'insertion_number': 1},\n", + "# ]\n", + "keys = [{'animal_id' : 288, 'session': 322, 'insertion_number': 1},\n", + " {'animal_id' : 288, 'session': 212, 'insertion_number': 1},\n", + " ]\n", + "\n", + "# probe_idx = 2\n", + "for key in keys:\n", + " populate_ephys(key,probe_idx)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "ephys.EphysRecording.populate(key, display_progress=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Ephys recording from a probe insertion for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

acq_software

\n", + " \n", + "
\n", + "

sampling_rate

\n", + " (Hz)\n", + "
\n", + "

recording_datetime

\n", + " datetime of the recording from this probe\n", + "
\n", + "

recording_duration

\n", + " (seconds) duration of the recording from this probe\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Session info\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

user_name

\n", + " user performing the experiment\n", + "
\n", + "

setup

\n", + " computer id\n", + "
\n", + "

session_tmst

\n", + " session timestamp\n", + "
\n", + "

experiment_type

\n", + " \n", + "
\n", + "

logger_tmst

\n", + " logger precise timestamp\n", + "
288242mariaef-master012025-10-07 15:20:03Passive0.0
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*animal_id *session user_name setup session_tmst experiment_typ logger_tmst \n", + "+-----------+ +---------+ +-----------+ +------------+ +------------+ +------------+ +------------+\n", + "288 242 maria ef-master01 2025-10-07 15: Passive 0.0 \n", + " (Total: 1)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# key = {'animal_id' : 244,\n", + "# 'session' : 223,\n", + "# 'insertion_number' : 1}\n", + "\n", + "Subject() & key" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Manual table for defining a clustering task ready to be run\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_output_dir

\n", + " clustering output directory relative to the clustering root data directory\n", + "
\n", + "

task_mode

\n", + " 'load': load computed analysis results, 'trigger': trigger computation\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ClusteringTask & key" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.Probe'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "string = \"244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\"\n", + "i = string.index('A/k')\n", + "string[:i]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " .Table{\n", + " border-collapse:collapse;\n", + " }\n", + " .Table th{\n", + " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", + " font-weight: normal; font-family: monospace; font-size: 100%;\n", + " }\n", + " .Table td{\n", + " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", + " }\n", + " .Table tr:nth-child(odd){\n", + " background: #ffffff;\n", + " color: #000000;\n", + " }\n", + " .Table tr:nth-child(even){\n", + " background: #f3f1ff;\n", + " color: #000000;\n", + " }\n", + " /* Tooltip container */\n", + " .djtooltip {\n", + " }\n", + " /* Tooltip text */\n", + " .djtooltip .djtooltiptext {\n", + " visibility: hidden;\n", + " width: 120px;\n", + " background-color: black;\n", + " color: #fff;\n", + " text-align: center;\n", + " padding: 5px 0;\n", + " border-radius: 6px;\n", + " /* Position the tooltip text - see examples below! */\n", + " position: absolute;\n", + " z-index: 1;\n", + " }\n", + " #primary {\n", + " font-weight: bold;\n", + " color: black;\n", + " }\n", + " #nonprimary {\n", + " font-weight: normal;\n", + " color: white;\n", + " }\n", + "\n", + " /* Show the tooltip text when you mouse over the tooltip container */\n", + " .djtooltip:hover .djtooltiptext {\n", + " visibility: visible;\n", + " }\n", + " \n", + " \n", + " Waveform metrics for a particular unit\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

unit

\n", + " \n", + "
\n", + "

amplitude_median

\n", + " (uV) absolute difference between waveform peak and trough\n", + "
\n", + "

peak_to_valley

\n", + " (ms) time between waveform peak and trough\n", + "
\n", + "

half_width

\n", + " (ms) spike width at half max amplitude\n", + "
\n", + "

peak_trough_ratio

\n", + " absolute amplitude of peak divided by absolute amplitude of trough relative to 0\n", + "
\n", + "

repolarization_slope

\n", + " the repolarization slope was defined by fitting a regression line to the first 30us from trough to peak\n", + "
\n", + "

recovery_slope

\n", + " the recovery slope was defined by fitting a regression line to the first 30us from peak to tail\n", + "
\n", + "

spread

\n", + " (um) the range with amplitude above 12-percent of the maximum amplitude along the probe\n", + "
\n", + "

velocity_above

\n", + " (s/m) inverse velocity of waveform propagation from the soma toward the top of the probe\n", + "
\n", + "

velocity_below

\n", + " (s/m) inverse velocity of waveform propagation from the soma toward the bottom of the probe\n", + "
\n", + "

num_positive_peaks

\n", + " \n", + "
\n", + "

num_negative_peaks

\n", + " \n", + "
\n", + "

exp_decay

\n", + " \n", + "
24428313066.8850.001243330.00132-0.20096571043.0-20526.590.0nannan1.01.00.00351934
24428313117.3550.000840.00031-0.294477148725.0-23378.390.0nannan2.01.00.0279673
24428313224.180.0008333330.00024-0.288959217422.0-33734.360.0nannan1.01.00.0261229
24428313346.2150.0005933330.00199-1.5277539087.7-89019.6120.037.7815nan1.01.00.00955719
244283134139.8156.66667e-050.00185-0.9580333970350.0-6376.6190.0nannan0.00.00.00820124
244283135142.9356.66667e-050.00172333-0.9067664436500.017671.690.0nannan0.00.00.00851597
24428313613.650.0007166670.000276667-0.324688141258.0-21274.0120.0nannan1.01.00.0343427
244283137143.6176.66667e-050.00212-1.082023859520.0-5099.36180.0nannan0.00.00.00729127
24428313819.6950.0007133330.000226667-0.31022201312.0-27677.7120.01549.71nan1.01.00.0243837
244283139143.520.0004566670.00184333-1.080563744020.0-20808.7180.0nannan0.00.00.00759205
244283131064.9350.0007166670.000273333-0.357144444400.0-84944.4135.0nan425.9831.01.00.0250961
244283131139.00.0008566670.000206667-0.1969650944.0-58544.7105.0778.502nan0.01.00.0379851
\n", + "

...

\n", + "

Total: 574

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx *unit amplitude_medi peak_to_valley half_width peak_trough_ra repolarization recovery_slope spread velocity_above velocity_below num_positive_p num_negative_p exp_decay \n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +--------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "244 283 1 3 0 66.885 0.00124333 0.00132 -0.200965 71043.0 -20526.5 90.0 nan nan 1.0 1.0 0.00351934 \n", + "244 283 1 3 1 17.355 0.00084 0.00031 -0.294477 148725.0 -23378.3 90.0 nan nan 2.0 1.0 0.0279673 \n", + "244 283 1 3 2 24.18 0.000833333 0.00024 -0.288959 217422.0 -33734.3 60.0 nan nan 1.0 1.0 0.0261229 \n", + "244 283 1 3 3 46.215 0.000593333 0.00199 -1.52775 39087.7 -89019.6 120.0 37.7815 nan 1.0 1.0 0.00955719 \n", + "244 283 1 3 4 139.815 6.66667e-05 0.00185 -0.958033 3970350.0 -6376.61 90.0 nan nan 0.0 0.0 0.00820124 \n", + "244 283 1 3 5 142.935 6.66667e-05 0.00172333 -0.906766 4436500.0 17671.6 90.0 nan nan 0.0 0.0 0.00851597 \n", + "244 283 1 3 6 13.65 0.000716667 0.000276667 -0.324688 141258.0 -21274.0 120.0 nan nan 1.0 1.0 0.0343427 \n", + "244 283 1 3 7 143.617 6.66667e-05 0.00212 -1.08202 3859520.0 -5099.36 180.0 nan nan 0.0 0.0 0.00729127 \n", + "244 283 1 3 8 19.695 0.000713333 0.000226667 -0.31022 201312.0 -27677.7 120.0 1549.71 nan 1.0 1.0 0.0243837 \n", + "244 283 1 3 9 143.52 0.000456667 0.00184333 -1.08056 3744020.0 -20808.7 180.0 nan nan 0.0 0.0 0.00759205 \n", + "244 283 1 3 10 64.935 0.000716667 0.000273333 -0.357144 444400.0 -84944.4 135.0 nan 425.983 1.0 1.0 0.0250961 \n", + "244 283 1 3 11 39.0 0.000856667 0.000206667 -0.1969 650944.0 -58544.7 105.0 778.502 nan 0.0 1.0 0.0379851 \n", + " ...\n", + " (Total: 574)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.QualityMetrics." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Cluster metrics for a particular unit\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

unit

\n", + " \n", + "
\n", + "

num_spikes

\n", + " Number of spikes\n", + "
\n", + "

firing_rate

\n", + " (Hz) firing rate for a unit\n", + "
\n", + "

snr

\n", + " signal-to-noise ratio for a unit\n", + "
\n", + "

presence_ratio

\n", + " fraction of time in which spikes are present\n", + "
\n", + "

isi_violations_ratio

\n", + " rate of ISI violation as a fraction of overall rate\n", + "
\n", + "

isi_violations_count

\n", + " total number of ISI violations\n", + "
\n", + "

amplitude_cutoff

\n", + " estimate of miss rate based on amplitude histogram\n", + "
\n", + "

amplitude_median

\n", + " \n", + "
\n", + "

amplitude_cv_median

\n", + " \n", + "
\n", + "

amplitude_cv_range

\n", + " \n", + "
\n", + "

isolation_distance

\n", + " distance to nearest cluster in Mahalanobis space\n", + "
\n", + "

l_ratio

\n", + " \n", + "
\n", + "

d_prime

\n", + " Classification accuracy based on LDA\n", + "
\n", + "

nn_hit_rate

\n", + " Fraction of neighbors for target cluster that are also in target cluster\n", + "
\n", + "

nn_miss_rate

\n", + " Fraction of neighbors outside target cluster that are in target cluster\n", + "
\n", + "

silhouette

\n", + " Standard metric for cluster overlap\n", + "
\n", + "

drift_ptp

\n", + " Maximum change in spike depth throughout recording\n", + "
\n", + "

drift_mad

\n", + " Cumulative change in spike depth throughout recording\n", + "
\n", + "

drift_std

\n", + " \n", + "
\n", + "

rp_contamination

\n", + " \n", + "
\n", + "

rp_violations

\n", + " \n", + "
\n", + "

sliding_rp_violation

\n", + " \n", + "
\n", + "

sync_spike_2

\n", + " \n", + "
\n", + "

sync_spike_4

\n", + " \n", + "
\n", + "

sync_spike_8

\n", + " \n", + "
\n", + "

firing_range

\n", + " \n", + "
\n", + "

sd_ratio

\n", + " \n", + "
2442831302475.00.7096152.363061.057.8873050.00023929666.8850.3761710.33563769.27841.476352.753640.5608110.01913290.107392nannannan1.0176.0nan0.3422220.02181820.04.81.10102
2442831314327.01.240612.601171.00.31047656.15437e-0517.3551.574380.95975681.0590.5847793.402890.4398650.01861370.0471289nannannan0.09793871.00.290.1451350.007164320.0006933213.241.01791
24428313215959.04.575653.892891.00.136943301.62154e-0524.181.141630.86270181.47940.5397053.979620.6344590.009319830.105931.041150.1690720.2496790.10860515.00.1250.09944230.001378530.00018798212.01.01223
244283133862.00.2471471.497011.00.000.0029372346.2150.5954570.379135134.860.04761714.41070.8962590.001416650.183495nannannan0.00.0nan0.1368910.001160090.00.81.18848
2442831344056.01.162915.607790.98275916.25412300.00243291139.815nannan81.40750.5457343.694570.6824320.01240910.101762nannannan1.0139.0nan0.07569030.0002465480.05.01.69756
2442831351381.00.3959516.107870.96551715.24250.00751238142.9350.369190.21493782.31510.4890033.729670.5641890.0177310.0991084nannannan1.07.0nan0.07965240.0007241130.01.81.77574
2442831362783.00.7979222.303771.00.30021720.00067213.652.056771.39111102.8420.5812253.367960.3869050.009658970.0383607nannannan0.00.0nan0.1153430.003952570.01.61.20404
2442831372142.00.6141395.098260.96551719.2578760.017865143.617nannan137.6520.8873995.21730.8773290.002464680.23809nannannan1.027.0nan0.07282910.0009337070.0004668532.641.29442
24428313813089.03.752793.395931.00.15608233.20644e-0519.6951.198090.802193114.0870.2864213.704460.3928570.0125180.04350451.760760.3004380.4067770.09624339.00.120.09618760.00061120.00015285.01.04354
2442831392687.00.7703985.847710.96551711.7549730.0099644143.52nannan122.3632.101334.786170.816770.002210590.17551nannannan1.033.0nan0.09341270.001116490.0003721623.21.33561
24428313107066.02.025917.581891.00.465708200.00026467464.9350.67940.274888108.663.944782.255750.3307450.008740730.01962172.137890.2683150.2637230.69690113.0nan0.1844040.007925280.0005660913.41.27954
24428313111182.00.3388959.739231.00.000.0030610439.00.5353950.245662298.0641.79671e-0710.62910.912260.0007148690.205392nannannan0.00.0nan0.1125210.00.01.40.968612
\n", + "

...

\n", + "

Total: 574

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx *unit num_spikes firing_rate snr presence_ratio isi_violations isi_violations amplitude_cuto amplitude_medi amplitude_cv_m amplitude_cv_r isolation_dist l_ratio d_prime nn_hit_rate nn_miss_rate silhouette drift_ptp drift_mad drift_std rp_contaminati rp_violations sliding_rp_vio sync_spike_2 sync_spike_4 sync_spike_8 firing_range sd_ratio \n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +-----------+ +-----------+ +-----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", + "244 283 1 3 0 2475.0 0.709615 2.36306 1.0 57.887 305 0.000239296 66.885 0.376171 0.335637 69.2784 1.47635 2.75364 0.560811 0.0191329 0.107392 nan nan nan 1.0 176.0 nan 0.342222 0.0218182 0.0 4.8 1.10102 \n", + "244 283 1 3 1 4327.0 1.24061 2.60117 1.0 0.310476 5 6.15437e-05 17.355 1.57438 0.959756 81.059 0.584779 3.40289 0.439865 0.0186137 0.0471289 nan nan nan 0.0979387 1.0 0.29 0.145135 0.00716432 0.000693321 3.24 1.01791 \n", + "244 283 1 3 2 15959.0 4.57565 3.89289 1.0 0.136943 30 1.62154e-05 24.18 1.14163 0.862701 81.4794 0.539705 3.97962 0.634459 0.00931983 0.10593 1.04115 0.169072 0.249679 0.108605 15.0 0.125 0.0994423 0.00137853 0.000187982 12.0 1.01223 \n", + "244 283 1 3 3 862.0 0.247147 1.49701 1.0 0.0 0 0.00293723 46.215 0.595457 0.379135 134.86 0.0476171 4.4107 0.896259 0.00141665 0.183495 nan nan nan 0.0 0.0 nan 0.136891 0.00116009 0.0 0.8 1.18848 \n", + "244 283 1 3 4 4056.0 1.16291 5.60779 0.982759 16.2541 230 0.00243291 139.815 nan nan 81.4075 0.545734 3.69457 0.682432 0.0124091 0.101762 nan nan nan 1.0 139.0 nan 0.0756903 0.000246548 0.0 5.0 1.69756 \n", + "244 283 1 3 5 1381.0 0.395951 6.10787 0.965517 15.24 25 0.00751238 142.935 0.36919 0.214937 82.3151 0.489003 3.72967 0.564189 0.017731 0.0991084 nan nan nan 1.0 7.0 nan 0.0796524 0.000724113 0.0 1.8 1.77574 \n", + "244 283 1 3 6 2783.0 0.797922 2.30377 1.0 0.300217 2 0.000672 13.65 2.05677 1.39111 102.842 0.581225 3.36796 0.386905 0.00965897 0.0383607 nan nan nan 0.0 0.0 nan 0.115343 0.00395257 0.0 1.6 1.20404 \n", + "244 283 1 3 7 2142.0 0.614139 5.09826 0.965517 19.2578 76 0.017865 143.617 nan nan 137.652 0.887399 5.2173 0.877329 0.00246468 0.23809 nan nan nan 1.0 27.0 nan 0.0728291 0.000933707 0.000466853 2.64 1.29442 \n", + "244 283 1 3 8 13089.0 3.75279 3.39593 1.0 0.15608 23 3.20644e-05 19.695 1.19809 0.802193 114.087 0.286421 3.70446 0.392857 0.012518 0.0435045 1.76076 0.300438 0.406777 0.0962433 9.0 0.12 0.0961876 0.0006112 0.0001528 5.0 1.04354 \n", + "244 283 1 3 9 2687.0 0.770398 5.84771 0.965517 11.7549 73 0.0099644 143.52 nan nan 122.363 2.10133 4.78617 0.81677 0.00221059 0.17551 nan nan nan 1.0 33.0 nan 0.0934127 0.00111649 0.000372162 3.2 1.33561 \n", + "244 283 1 3 10 7066.0 2.02591 7.58189 1.0 0.465708 20 0.000264674 64.935 0.6794 0.274888 108.66 3.94478 2.25575 0.330745 0.00874073 0.0196217 2.13789 0.268315 0.263723 0.696901 13.0 nan 0.184404 0.00792528 0.000566091 3.4 1.27954 \n", + "244 283 1 3 11 1182.0 0.338895 9.73923 1.0 0.0 0 0.00306104 39.0 0.535395 0.245662 298.064 1.79671e-07 10.6291 0.91226 0.000714869 0.205392 nan nan nan 0.0 0.0 nan 0.112521 0.0 0.0 1.4 0.968612 \n", + " ...\n", + " (Total: 574)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.QualityMetrics.Cluster()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Loaded quality_metrics metrics: (574, 28)\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Loaded template_metrics metrics: (574, 12)\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.26it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 574\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "ephys.QualityMetrics().populate(key, display_progress=True)\n", + "# ephys.QualityMetrics().drop()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# keys = [{'animal_id' : 244,\n", + "# 'session' : 228,\n", + "# 'insertion_number' : 1,},\n", + "# {'animal_id' : 244,\n", + "# 'session' : 229,\n", + "# 'insertion_number' : 1,},\n", + "# {'animal_id' : 244,\n", + "# 'session' : 230,\n", + "# 'insertion_number' : 1,},\n", + "# {'animal_id' : 244,\n", + "# 'session' : 231,\n", + "# 'insertion_number' : 1,},\n", + "# {'animal_id' : 244,\n", + "# 'session' : 233,\n", + "# 'insertion_number' : 1,},\n", + "# ]\n", + "\n", + "keys = [key]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Ephys recording from a probe insertion for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

animal_id

\n", + " animal id\n", "
\n", - "

isi_violations_count

\n", - " total number of ISI violations\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

acq_software

\n", + " \n", + "
\n", + "

sampling_rate

\n", + " (Hz)\n", + "
\n", + "

recording_datetime

\n", + " datetime of the recording from this probe\n", + "
\n", + "

recording_duration

\n", + " (seconds) duration of the recording from this probe\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording() & key\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Clustering Procedure\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_time

\n", + " time of generation of this set of clustering results\n", + "
\n", + "

package_version

\n", + " \n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.Clustering() & key" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Properties of a given unit from a round of clustering (and curation)\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

animal_id

\n", + " animal id\n", "
\n", - "

amplitude_cutoff

\n", - " estimate of miss rate based on amplitude histogram\n", + "

session

\n", + " session number\n", "
\n", - "

amplitude_median

\n", + "

insertion_number

\n", " \n", "
\n", - "

amplitude_cv_median

\n", + "

paramset_idx

\n", " \n", "
\n", - "

amplitude_cv_range

\n", + "

unit

\n", " \n", "
\n", - "

isolation_distance

\n", - " distance to nearest cluster in Mahalanobis space\n", - "
\n", - "

l_ratio

\n", + "

electrode_config_hash

\n", " \n", "
\n", - "

d_prime

\n", - " Classification accuracy based on LDA\n", - "
\n", - "

nn_hit_rate

\n", - " Fraction of neighbors for target cluster that are also in target cluster\n", - "
\n", - "

nn_miss_rate

\n", - " Fraction of neighbors outside target cluster that are in target cluster\n", - "
\n", - "

silhouette

\n", - " Standard metric for cluster overlap\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

drift_ptp

\n", - " Maximum change in spike depth throughout recording\n", + "

electrode

\n", + " electrode index, starts at 0\n", "
\n", - "

drift_mad

\n", - " Cumulative change in spike depth throughout recording\n", + "

cluster_quality_label

\n", + " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", "
\n", - "

drift_std

\n", - " \n", + "

spike_count

\n", + " how many spikes in this recording for this unit\n", "
\n", - "

rp_contamination

\n", - " \n", + "

spike_times

\n", + " (s) spike times of this unit, relative to the start of the EphysRecording\n", "
\n", - "

rp_violations

\n", - " \n", + "

spike_sites

\n", + " array of electrode associated with each spike\n", "
\n", - "

sliding_rp_violation

\n", - " \n", + "

spike_depths

\n", + " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", + "\n", + " (Total: 0)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.CuratedClustering.Unit()& key" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-09-15 11:52:05,478][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", + "[2025-09-15 11:52:05,484][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", + "[2025-09-15 11:52:05,492][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", + "[2025-09-15 11:52:05,497][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", + "[2025-09-15 11:52:05,503][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Proceed? [yes, No]: yes\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-09-15 11:52:07,888][INFO]: Dropped table `lab_npx_ephys_report`.`__quality_metric_report`\n", + "[2025-09-15 11:52:07,922][INFO]: Dropped table `lab_npx_ephys_report`.`quality_metric_set`\n", + "[2025-09-15 11:52:07,953][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__cluster`\n", + "[2025-09-15 11:52:07,985][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__waveform`\n", + "[2025-09-15 11:52:08,015][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics`\n", + "[2025-09-15 11:52:08,022][INFO]: Tables dropped. Restart kernel.\n" + ] + } + ], + "source": [ + "ephys.QualityMetrics.drop()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Represent a physical probe with unique identification\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", "
\n", - "

sync_spike_2

\n", - " \n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

sync_spike_4

\n", + "

probe_comment

\n", " \n", + "
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
23107806184Neuropixels 2.0 - Multishank
\n", + " \n", + "

Total: 3

\n", + " " + ], + "text/plain": [ + "*probe probe_type probe_comment \n", + "+------------+ +------------+ +------------+\n", + "19108323581 neuropixels 1. fake probe \n", + "19108323583 neuropixels 2. fake probe \n", + "23107806184 Neuropixels 2. \n", + " (Total: 3)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "probe.Probe() #& 'probe_type=\"Neuropixels 2.0 - Multishank\"'" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "574\n", + "9236529\n", + "HERE\n", + "574 574\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "9236529\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573]\n", + "['mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [04:10<00:00, 250.06s/it]\n" + ] + } + ], + "source": [ + "# Checked and works\n", + "for key in keys:\n", + " ephys.ProbeInsertion.insert1(\n", + " dict(\n", + " key,\n", + " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", + " ), skip_duplicates=True\n", + " ) # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", + " #ephys.ProbeInsertion()\n", + " ephys.EphysRecording().populate(key, display_progress=True)\n", + "\n", + " key['paramset_idx']=3\n", + " file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", + " ks_path = file_path[0]+'/kilosort4/sorter_output'\n", + " ephys.ClusteringTask.insert1(\n", + " dict(\n", + " key,\n", + " task_mode=\"load\", # load or trigger\n", + " clustering_output_dir=ks_path,\n", + " )\n", + " )\n", + "\n", + " ephys.Clustering.populate(key, display_progress=True)\n", + " (ephys.CuratedClustering).populate(key, display_progress=True)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-10-08 10:00:04,345][INFO]: Deleting 0 rows from `lab_npx_ephys`.`probe_insertion`\n", + "[2025-10-08 10:00:04,346][WARNING]: Nothing to delete.\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(ephys.ProbeInsertion() & 'animal_id = 288').delete()# & key" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Probe insertion implanted into an animal for a given session.\n", + "
\n", + " \n", + " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", + " \n", + " \n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", "
\n", - "

sync_spike_8

\n", - " \n", + "

session

\n", + " session number\n", "
\n", - "

firing_range

\n", + "

insertion_number

\n", " \n", "
\n", - "

sd_ratio

\n", - " \n", - "
2442831302475.00.7096152.363061.057.8873050.00023929666.8850.3761710.33563769.27841.476352.753640.5608110.01913290.107392nannannan1.0176.0nan0.3422220.02181820.04.81.10102
2442831314327.01.240612.601171.00.31047656.15437e-0517.3551.574380.95975681.0590.5847793.402890.4398650.01861370.0471289nannannan0.09793871.00.290.1451350.007164320.0006933213.241.01791
24428313215959.04.575653.892891.00.136943301.62154e-0524.181.141630.86270181.47940.5397053.979620.6344590.009319830.105931.041150.1690720.2496790.10860515.00.1250.09944230.001378530.00018798212.01.01223
244283133862.00.2471471.497011.00.000.0029372346.2150.5954570.379135134.860.04761714.41070.8962590.001416650.183495nannannan0.00.0nan0.1368910.001160090.00.81.18848
2442831344056.01.162915.607790.98275916.25412300.00243291139.815nannan81.40750.5457343.694570.6824320.01240910.101762nannannan1.0139.0nan0.07569030.0002465480.05.01.69756
2442831351381.00.3959516.107870.96551715.24250.00751238142.9350.369190.21493782.31510.4890033.729670.5641890.0177310.0991084nannannan1.07.0nan0.07965240.0007241130.01.81.77574
2442831362783.00.7979222.303771.00.300217
1012220.00067213.652.056771.39111102.8420.5812253.367960.3869050.009658970.0383607nannannan0.00.0nan0.1153430.003952570.01.61.20404
24428319108323581
2441481372142.00.6141395.098260.96551719.2578760.017865143.617nannan137.6520.8873995.21730.8773290.002464680.23809nannannan1.027.0nan0.07282910.0009337070.0004668532.641.29442
24428323107806184
24415013813089.03.752793.395931.00.15608233.20644e-0519.6951.198090.802193114.0870.2864213.704460.3928570.0125180.04350451.760760.3004380.4067770.09624339.00.120.09618760.00061120.00015285.01.04354
24428323107806184
2441521392687.00.7703985.847710.96551711.7549730.0099644143.52nannan122.3632.101334.786170.816770.002210590.17551nannannan1.033.0nan0.09341270.001116490.0003721623.21.33561
24428323107806184
244154123107806184
244156123107806184
244158123107806184
244160123107806184
244162123107806184
244163123107806184
244164123107806184
244166123107806184
\n", + "

...

\n", + "

Total: 47

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num probe \n", + "+-----------+ +---------+ +------------+ +------------+\n", + "101 22 2 19108323581 \n", + "244 148 1 23107806184 \n", + "244 150 1 23107806184 \n", + "244 152 1 23107806184 \n", + "244 154 1 23107806184 \n", + "244 156 1 23107806184 \n", + "244 158 1 23107806184 \n", + "244 160 1 23107806184 \n", + "244 162 1 23107806184 \n", + "244 163 1 23107806184 \n", + "244 164 1 23107806184 \n", + "244 166 1 23107806184 \n", + " ...\n", + " (Total: 47)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ProbeInsertion()# & key" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(probe.Probe()) #& 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "DuplicateError", + "evalue": "(\"Duplicate entry '288-242-1' for key 'PRIMARY'\", 'To ignore duplicate entries in insert, set skip_duplicates=True')", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mDuplicateError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbeInsertion\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbe\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m&\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe_type=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mNeuropixels 2.0 - Multishank\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfetch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m)\u001b[49m \u001b[38;5;66;03m# probe, subject, session_datetime needs to follow the restrictions of foreign keys.\u001b[39;00m\n\u001b[1;32m 7\u001b[0m ephys\u001b[38;5;241m.\u001b[39mProbeInsertion()\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:337\u001b[0m, in \u001b[0;36mTable.insert1\u001b[0;34m(self, row, **kwargs)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minsert1\u001b[39m(\u001b[38;5;28mself\u001b[39m, row, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 331\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;124;03m Insert one data record into the table. For ``kwargs``, see ``insert()``.\u001b[39;00m\n\u001b[1;32m 333\u001b[0m \n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m :param row: a numpy record, a dict-like object, or an ordered sequence to be inserted\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \u001b[38;5;124;03m as one row.\u001b[39;00m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:453\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\u001b[38;5;241m.\u001b[39msuggest(\n\u001b[1;32m 450\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTo ignore extra fields in insert, set ignore_extra_fields=True\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 451\u001b[0m )\n\u001b[1;32m 452\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m DuplicateError \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 453\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\u001b[38;5;241m.\u001b[39msuggest(\n\u001b[1;32m 454\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTo ignore duplicate entries in insert, set skip_duplicates=True\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 455\u001b[0m )\n", + "\u001b[0;31mDuplicateError\u001b[0m: (\"Duplicate entry '288-242-1' for key 'PRIMARY'\", 'To ignore duplicate entries in insert, set skip_duplicates=True')" + ] + } + ], + "source": [ + "ephys.ProbeInsertion.insert1(\n", + " dict(\n", + " key,\n", + " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", + " )\n", + ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", + "ephys.ProbeInsertion()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Ephys recording from a probe insertion for a given session.\n", + "
\n", + " \n", + " \n", + " \n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

acq_software

\n", + " \n", + "
\n", + "

sampling_rate

\n", + " (Hz)\n", + "
\n", + "

recording_datetime

\n", + " datetime of the recording from this probe\n", + "
\n", + "

recording_duration

\n", + " (seconds) duration of the recording from this probe\n", + "
24422513107066.02.025917.581891.00.465708200.00026467464.9350.67940.274888108.663.944782.255750.3307450.008740730.01962172.137890.2683150.2637230.69690113.0nan0.1844040.007925280.0005660913.41.27954
2447c36bff0-7661-5320-7844-9cb708b5b41cOpen Ephys30000.02025-07-03 14:09:1648.9805
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", + "244 225 1 7c36bff0-7661- Open Ephys 30000.0 2025-07-03 14: 48.9805 \n", + " (Total: 1)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEphysRecording\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:423\u001b[0m, in \u001b[0;36mEphysRecording.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 422\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 423\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 424\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo Open Ephys data found for probe insertion: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(key)\n\u001b[1;32m 425\u001b[0m )\n\u001b[1;32m 426\u001b[0m \u001b[38;5;66;03m#print(probe_data)\u001b[39;00m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;66;03m#print(probe_data.ap_meta)\u001b[39;00m\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m probe_data\u001b[38;5;241m.\u001b[39map_meta:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}" + ] + } + ], + "source": [ + "ephys.EphysRecording().populate(key, display_progress=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Paths of files of a given EphysRecording round.\n", + "
\n", + " \n", + " \n", + " \n", "\n", "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

file_path

\n", + " filepath relative to root data directory\n", + "
2442831244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *file_path \n", + "+-----------+ +---------+ +------------+ +------------+\n", + "244 283 1 244_283_1_2025\n", + " (Total: 1)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.EphysRecording.EphysFile() & key\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-09-10 14:25:12,601][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", + "[2025-09-10 14:25:12,608][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", + "[2025-09-10 14:25:12,615][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", + "[2025-09-10 14:25:12,629][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", + "[2025-09-10 14:25:12,635][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Proceed? [yes, No]: yes\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-09-10 14:25:23,863][INFO]: Dropped table `lab_npx_ephys_report`.`__quality_metric_report`\n", + "[2025-09-10 14:25:23,900][INFO]: Dropped table `lab_npx_ephys_report`.`quality_metric_set`\n", + "[2025-09-10 14:25:23,929][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__cluster`\n", + "[2025-09-10 14:25:23,963][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__waveform`\n", + "[2025-09-10 14:25:23,997][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics`\n", + "[2025-09-10 14:25:24,003][INFO]: Tables dropped. Restart kernel.\n" + ] + } + ], + "source": [ + "ephys.QualityMetrics().drop()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-09-10 14:24:42,906][WARNING]: MySQL server has gone away. Reconnecting to the server.\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Clustering Procedure\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_time

\n", + " time of generation of this set of clustering results\n", + "
\n", + "

package_version

\n", + " \n", + "
24422513111182.00.3388959.739231.00.000.0030610439.00.5353950.245662298.0641.79671e-0710.62910.912260.0007148690.205392nannannan0.00.0nan0.1125210.00.01.40.968612
2025-08-29 10:35:37
\n", - "

...

\n", - "

Total: 574

\n", + " \n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit num_spikes firing_rate snr presence_ratio isi_violations isi_violations amplitude_cuto amplitude_medi amplitude_cv_m amplitude_cv_r isolation_dist l_ratio d_prime nn_hit_rate nn_miss_rate silhouette drift_ptp drift_mad drift_std rp_contaminati rp_violations sliding_rp_vio sync_spike_2 sync_spike_4 sync_spike_8 firing_range sd_ratio \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +-----------+ +-----------+ +-----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", - "244 283 1 3 0 2475.0 0.709615 2.36306 1.0 57.887 305 0.000239296 66.885 0.376171 0.335637 69.2784 1.47635 2.75364 0.560811 0.0191329 0.107392 nan nan nan 1.0 176.0 nan 0.342222 0.0218182 0.0 4.8 1.10102 \n", - "244 283 1 3 1 4327.0 1.24061 2.60117 1.0 0.310476 5 6.15437e-05 17.355 1.57438 0.959756 81.059 0.584779 3.40289 0.439865 0.0186137 0.0471289 nan nan nan 0.0979387 1.0 0.29 0.145135 0.00716432 0.000693321 3.24 1.01791 \n", - "244 283 1 3 2 15959.0 4.57565 3.89289 1.0 0.136943 30 1.62154e-05 24.18 1.14163 0.862701 81.4794 0.539705 3.97962 0.634459 0.00931983 0.10593 1.04115 0.169072 0.249679 0.108605 15.0 0.125 0.0994423 0.00137853 0.000187982 12.0 1.01223 \n", - "244 283 1 3 3 862.0 0.247147 1.49701 1.0 0.0 0 0.00293723 46.215 0.595457 0.379135 134.86 0.0476171 4.4107 0.896259 0.00141665 0.183495 nan nan nan 0.0 0.0 nan 0.136891 0.00116009 0.0 0.8 1.18848 \n", - "244 283 1 3 4 4056.0 1.16291 5.60779 0.982759 16.2541 230 0.00243291 139.815 nan nan 81.4075 0.545734 3.69457 0.682432 0.0124091 0.101762 nan nan nan 1.0 139.0 nan 0.0756903 0.000246548 0.0 5.0 1.69756 \n", - "244 283 1 3 5 1381.0 0.395951 6.10787 0.965517 15.24 25 0.00751238 142.935 0.36919 0.214937 82.3151 0.489003 3.72967 0.564189 0.017731 0.0991084 nan nan nan 1.0 7.0 nan 0.0796524 0.000724113 0.0 1.8 1.77574 \n", - "244 283 1 3 6 2783.0 0.797922 2.30377 1.0 0.300217 2 0.000672 13.65 2.05677 1.39111 102.842 0.581225 3.36796 0.386905 0.00965897 0.0383607 nan nan nan 0.0 0.0 nan 0.115343 0.00395257 0.0 1.6 1.20404 \n", - "244 283 1 3 7 2142.0 0.614139 5.09826 0.965517 19.2578 76 0.017865 143.617 nan nan 137.652 0.887399 5.2173 0.877329 0.00246468 0.23809 nan nan nan 1.0 27.0 nan 0.0728291 0.000933707 0.000466853 2.64 1.29442 \n", - "244 283 1 3 8 13089.0 3.75279 3.39593 1.0 0.15608 23 3.20644e-05 19.695 1.19809 0.802193 114.087 0.286421 3.70446 0.392857 0.012518 0.0435045 1.76076 0.300438 0.406777 0.0962433 9.0 0.12 0.0961876 0.0006112 0.0001528 5.0 1.04354 \n", - "244 283 1 3 9 2687.0 0.770398 5.84771 0.965517 11.7549 73 0.0099644 143.52 nan nan 122.363 2.10133 4.78617 0.81677 0.00221059 0.17551 nan nan nan 1.0 33.0 nan 0.0934127 0.00111649 0.000372162 3.2 1.33561 \n", - "244 283 1 3 10 7066.0 2.02591 7.58189 1.0 0.465708 20 0.000264674 64.935 0.6794 0.274888 108.66 3.94478 2.25575 0.330745 0.00874073 0.0196217 2.13789 0.268315 0.263723 0.696901 13.0 nan 0.184404 0.00792528 0.000566091 3.4 1.27954 \n", - "244 283 1 3 11 1182.0 0.338895 9.73923 1.0 0.0 0 0.00306104 39.0 0.535395 0.245662 298.064 1.79671e-07 10.6291 0.91226 0.000714869 0.205392 nan nan nan 0.0 0.0 nan 0.112521 0.0 0.0 1.4 0.968612 \n", - " ...\n", - " (Total: 574)" + "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", + "244 225 1 3 2025-08-29 10: \n", + " (Total: 1)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(ephys.Clustering() & key)#.delete()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Method for clustering\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

clustering_method

\n", + " \n", + "
\n", + "

clustering_method_desc

\n", + " \n", + "
kilosort2kilosort2 clustering method
kilosort2.5kilosort2.5 clustering method
kilosort3kilosort3 clustering method
kilosort4kilosort4 clustering method
\n", + " \n", + "

Total: 4

\n", + " " + ], + "text/plain": [ + "*clustering_me clustering_met\n", + "+------------+ +------------+\n", + "kilosort2 kilosort2 clus\n", + "kilosort2.5 kilosort2.5 cl\n", + "kilosort3 kilosort3 clus\n", + "kilosort4 kilosort4 clus\n", + " (Total: 4)" ] }, - "execution_count": 8, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.QualityMetrics.Cluster()" + "ephys.ClusteringMethod()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 38, "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Loaded quality_metrics metrics: (574, 28)\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Loaded template_metrics metrics: (574, 12)\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.26it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 574\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Parameter set to be used in a clustering procedure\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_method

\n", + " \n", + "
\n", + "

paramset_desc

\n", + " \n", + "
\n", + "

param_set_hash

\n", + " \n", + "
\n", + "

params

\n", + " dictionary of all applicable parameters\n", + "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", + " \n", + "

Total: 4

\n", + " " + ], + "text/plain": [ + "*paramset_idx clustering_met paramset_desc param_set_hash params \n", + "+------------+ +------------+ +------------+ +------------+ +--------+\n", + "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", + "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", + "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", + "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", + " (Total: 4)" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "ephys.QualityMetrics().populate(key, display_progress=True)\n", - "# ephys.QualityMetrics().drop()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# keys = [{'animal_id' : 244,\n", - "# 'session' : 228,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 229,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 230,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 231,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 233,\n", - "# 'insertion_number' : 1,},\n", - "# ]\n", - "\n", - "keys = [key]" + "ephys.ClusteringParamSet()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1506,7 +4401,7 @@ " }\n", " \n", " \n", - " Ephys recording from a probe insertion for a given session.\n", + " Manual table for defining a clustering task ready to be run\n", "
\n", " \n", " \n", - " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -1519,46 +4414,104 @@ "

insertion_number

\n", " \n", "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", + "

paramset_idx

\n", " \n", "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", + "

clustering_output_dir

\n", + " clustering output directory relative to the clustering root data directory\n", "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", + "

task_mode

\n", + " 'load': load computed analysis results, 'trigger': trigger computation\n", "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", " \n", - "

Total: 0

\n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" + "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", + "244 225 1 3 244_225_1_2025 load \n", + " (Total: 1)" ] }, - "execution_count": 6, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.EphysRecording() & key\n" + "ephys.ClusteringTask() & key" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# # insert clustering task manually\n", + "# import numpy as np\n", + "# params_ks = {\n", + "# 'data_dtype': 'int16',\n", + "# 'n_chan_bin': 384,\n", + "# 'fs': 30000.0,\n", + "# 'batch_size': 100000,\n", + "# 'nblocks': 1,\n", + "# 'Th_universal': 9.0,\n", + "# 'Th_learned': 8.0,\n", + "# 'tmin': 0.0,\n", + "# 'tmax': np.inf,\n", + "# 'nt': 61,\n", + "# 'shift': None,\n", + "# 'scale': None,\n", + "# 'artifact_threshold': np.inf,\n", + "# 'nskip': 25,\n", + "# 'whitening_range': 32,\n", + "# 'highpass_cutoff': 300.0,\n", + "# 'binning_depth': 5.0,\n", + "# 'sig_interp': 20.0,\n", + "# 'drift_smoothing': [0.5, 0.5, 0.5],\n", + "# 'nt0min': 20,\n", + "# 'dmin': None,\n", + "# 'dminx': 32.0,\n", + "# 'min_template_size': 10.0,\n", + "# 'template_sizes': 5,\n", + "# 'nearest_chans': 10,\n", + "# 'nearest_templates': 100,\n", + "# 'max_channel_distance': 32.0,\n", + "# 'max_peels': 100,\n", + "# 'templates_from_data': True,\n", + "# 'n_templates': 6,\n", + "# 'n_pcs': 6,\n", + "# 'Th_single_ch': 6.0,\n", + "# 'acg_threshold': 0.1,\n", + "# 'ccg_threshold': 0.15,\n", + "# 'cluster_downsampling': 20,\n", + "# 'x_centers': None,\n", + "# 'duplicate_spike_ms': 0.15,\n", + "# 'position_limit': 100.0,\n", + "# 'save_preprocessed_copy': False,\n", + "# 'clear_cache': False,\n", + "# 'do_CAR': True,\n", + "# 'invert_sign': False,\n", + "# 'verbose_log': False,\n", + "# 'NTbuff': 100122,\n", + "# 'Nchan': 384,\n", + "# 'duplicate_spike_bins': 4,\n", + "# 'torch_device': 'cuda'\n", + "# }" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -1616,53 +4569,141 @@ " }\n", " \n", " \n", - " Clustering Procedure\n", + " Parameter set to be used in a clustering procedure\n", "
\n", " \n", " \n", - " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", + "

paramset_idx

\n", " \n", "
\n", - "

paramset_idx

\n", + "

clustering_method

\n", " \n", "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", + "

paramset_desc

\n", + " \n", "
\n", - "

package_version

\n", + "

param_set_hash

\n", " \n", + "
\n", + "

params

\n", + " dictionary of all applicable parameters\n", "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", " \n", - "

Total: 0

\n", + "

Total: 4

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" + "*paramset_idx clustering_met paramset_desc param_set_hash params \n", + "+------------+ +------------+ +------------+ +------------+ +--------+\n", + "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", + "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", + "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", + "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", + " (Total: 4)" ] }, - "execution_count": 7, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.Clustering() & key" + "# insert clustering task manually\n", + "# params_ks = {\n", + "# \"fs\": 30000,\n", + "# \"fshigh\": 150,\n", + "# \"minfr_goodchannels\": 0.1,\n", + "# \"Th\": [10, 4],\n", + "# \"lam\": 10,\n", + "# \"AUCsplit\": 0.9,\n", + "# \"minFR\": 0.02,\n", + "# \"momentum\": [20, 400],\n", + "# \"sigmaMask\": 30,\n", + "# \"ThPr\": 8,\n", + "# \"spkTh\": -6,\n", + "# \"reorder\": 1,\n", + "# \"nskip\": 25,\n", + "# \"GPU\": 1,\n", + "# \"Nfilt\": 1024,\n", + "# \"nfilt_factor\": 4,\n", + "# \"ntbuff\": 64,\n", + "# \"whiteningRange\": 32,\n", + "# \"nSkipCov\": 25,\n", + "# \"scaleproc\": 200,\n", + "# \"nPCs\": 3,\n", + "# \"useRAM\": 0,\n", + "# }\n", + "ephys.ClusteringParamSet.insert_new_params(\n", + " clustering_method=\"kilosort4\",\n", + " paramset_idx=3,\n", + " params=params_ks,\n", + " paramset_desc=\"si kilosort4 params acg:0.1, ccg:0.15, xcenters:None\",\n", + ")\n", + "ephys.ClusteringParamSet()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_oputput'" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", + "ks_path = file_path[0]+'/kilosort4/sorter_oputput'\n", + "ks_path" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", + "ks_path = file_path[0]+'/kilosort4/sorter_output'\n", + "\n", + "ephys.ClusteringTask.insert1(\n", + " dict(\n", + " key,\n", + " paramset_idx=3,\n", + " task_mode=\"load\", # load or trigger\n", + " clustering_output_dir=ks_path,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -1720,7 +4761,7 @@ " }\n", " \n", " \n", - " Properties of a given unit from a round of clustering (and curation)\n", + " Manual table for defining a clustering task ready to be run\n", "
\n", " \n", " \n", - " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -1736,327 +4777,160 @@ "

paramset_idx

\n", " \n", "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", + "

clustering_output_dir

\n", + " clustering output directory relative to the clustering root data directory\n", "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", + "

task_mode

\n", + " 'load': load computed analysis results, 'trigger': trigger computation\n", "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", " \n", - "

Total: 0

\n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "\n", - " (Total: 0)" + "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", + "244 225 1 3 244_225_1_2025 load \n", + " (Total: 1)" ] }, - "execution_count": 8, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.CuratedClustering.Unit()& key" + "(ephys.ClusteringTask() & key)#.delete()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 42, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-15 11:52:05,478][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", - "[2025-09-15 11:52:05,484][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", - "[2025-09-15 11:52:05,492][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", - "[2025-09-15 11:52:05,497][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", - "[2025-09-15 11:52:05,503][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Proceed? [yes, No]: yes\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-15 11:52:07,888][INFO]: Dropped table `lab_npx_ephys_report`.`__quality_metric_report`\n", - "[2025-09-15 11:52:07,922][INFO]: Dropped table `lab_npx_ephys_report`.`quality_metric_set`\n", - "[2025-09-15 11:52:07,953][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__cluster`\n", - "[2025-09-15 11:52:07,985][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__waveform`\n", - "[2025-09-15 11:52:08,015][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics`\n", - "[2025-09-15 11:52:08,022][INFO]: Tables dropped. Restart kernel.\n" - ] - } - ], + "outputs": [], "source": [ - "ephys.QualityMetrics.drop()\n" + "ephys.Clustering.populate(key, display_progress=True)\n" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "scrolled": true - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "574\n", - "9236529\n", - "HERE\n", - "574 574\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "9236529\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573]\n", - "['mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [04:10<00:00, 250.06s/it]\n" - ] + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Clustering Procedure\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_time

\n", + " time of generation of this set of clustering results\n", + "
\n", + "

package_version

\n", + " \n", + "
244225132025-08-29 10:35:37
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", + "244 225 1 3 2025-08-29 10: \n", + " (Total: 1)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "# Checked and works\n", - "for key in keys:\n", - " ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", - " ), skip_duplicates=True\n", - " ) # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - " #ephys.ProbeInsertion()\n", - " ephys.EphysRecording().populate(key, display_progress=True)\n", - "\n", - " key['paramset_idx']=3\n", - " file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - " ks_path = file_path[0]+'/kilosort4/sorter_output'\n", - " ephys.ClusteringTask.insert1(\n", - " dict(\n", - " key,\n", - " task_mode=\"load\", # load or trigger\n", - " clustering_output_dir=ks_path,\n", - " )\n", - " )\n", - "\n", - " ephys.Clustering.populate(key, display_progress=True)\n", - " (ephys.CuratedClustering).populate(key, display_progress=True)\n", - " " + "ephys.Clustering() & key" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -2114,7 +4988,7 @@ " }\n", " \n", " \n", - " Probe insertion implanted into an animal for a given session.\n", + " Clustering results of the spike sorting step.\n", "
\n", " \n", " \n", " \n", - "\n", + "\n", "\n", - "\n", + "\n", "
\n", @@ -2127,37 +5001,227 @@ "

insertion_number

\n", " \n", "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", + "

paramset_idx

\n", + " \n", "
244283225123107806184
3
\n", " \n", "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 283 1 23107806184 \n", - " (Total: 1)" + "*animal_id *session *insertion_num *paramset_idx \n", + "+-----------+ +---------+ +------------+ +------------+\n", + "244 225 1 3 \n", + " (Total: 1)" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.CuratedClustering() & key" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'animal_id': 244, 'session': 186, 'insertion_number': 1, 'paramset_idx': 3}" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "key['paramset_idx']=3\n", + "key" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "685\n", + "12691145\n", + "HERE\n", + "685 685\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "12691145\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", + " 684]\n", + "['mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:26<00:00, 86.12s/it]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'success_count': 1, 'error_list': []}" ] }, - "execution_count": 17, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.ProbeInsertion() & key" + "(ephys.CuratedClustering).populate(key, display_progress=True)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -2215,7 +5279,7 @@ " }\n", " \n", " \n", - " Probe insertion implanted into an animal for a given session.\n", + " Properties of a given unit from a round of clustering (and curation)\n", "
\n", " \n", " \n", " \n", "\n", "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -2228,90 +5292,217 @@ "

insertion_number

\n", " \n", "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

unit

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", + "
\n", + "

electrode

\n", + " electrode index, starts at 0\n", + "
\n", + "

cluster_quality_label

\n", + " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", + "
\n", + "

spike_count

\n", + " how many spikes in this recording for this unit\n", + "
\n", + "

spike_times

\n", + " (s) spike times of this unit, relative to the start of the EphysRecording\n", + "
\n", + "

spike_sites

\n", + " array of electrode associated with each spike\n", + "
\n", + "

spike_depths

\n", + " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", "
244225123107806184
307c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0mua470=BLOB==BLOB==BLOB=
2442251317c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4mua302=BLOB==BLOB==BLOB=
2442251327c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10mua396=BLOB==BLOB==BLOB=
2442251337c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua779=BLOB==BLOB==BLOB=
2442251347c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua274=BLOB==BLOB==BLOB=
2442251357c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank22mua747=BLOB==BLOB==BLOB=
2442251367c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good716=BLOB==BLOB==BLOB=
2442251377c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good475=BLOB==BLOB==BLOB=
2442251387c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank24good277=BLOB==BLOB==BLOB=
2442251397c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua772=BLOB==BLOB==BLOB=
24422513107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good563=BLOB==BLOB==BLOB=
24422513117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank32mua563=BLOB==BLOB==BLOB=
\n", - " \n", - "

Total: 1

\n", + "

...

\n", + "

Total: 124

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 225 1 23107806184 \n", - " (Total: 1)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'23107806184'" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe1=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0]\n", - "probe1" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'`paramset_idx` is not in the table heading'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[27], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbeInsertion\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbe\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m&\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe_type=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mNeuropixels 2.0 - Multishank\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfetch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m)\u001b[49m \u001b[38;5;66;03m# probe, subject, session_datetime needs to follow the restrictions of foreign keys.\u001b[39;00m\n\u001b[1;32m 7\u001b[0m ephys\u001b[38;5;241m.\u001b[39mProbeInsertion()\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:337\u001b[0m, in \u001b[0;36mTable.insert1\u001b[0;34m(self, row, **kwargs)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minsert1\u001b[39m(\u001b[38;5;28mself\u001b[39m, row, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 331\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;124;03m Insert one data record into the table. For ``kwargs``, see ``insert()``.\u001b[39;00m\n\u001b[1;32m 333\u001b[0m \n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m :param row: a numpy record, a dict-like object, or an ordered sequence to be inserted\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \u001b[38;5;124;03m as one row.\u001b[39;00m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:419\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[0;32m--> 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 420\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrows\u001b[49m\n\u001b[1;32m 422\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:420\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[1;32m 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\n\u001b[0;32m--> 420\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m row \u001b[38;5;129;01min\u001b[39;00m rows\n\u001b[1;32m 422\u001b[0m )\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:871\u001b[0m, in \u001b[0;36mTable.__make_row_to_insert\u001b[0;34m(self, row, field_list, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 865\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 866\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__make_placeholder(name, row[name], ignore_extra_fields)\n\u001b[1;32m 867\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 868\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mfields\n\u001b[1;32m 869\u001b[0m ]\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[0;32m--> 871\u001b[0m \u001b[43mcheck_fields\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 873\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__make_placeholder(name, row[name], ignore_extra_fields)\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:857\u001b[0m, in \u001b[0;36mTable.__make_row_to_insert..check_fields\u001b[0;34m(fields)\u001b[0m\n\u001b[1;32m 855\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m field \u001b[38;5;129;01min\u001b[39;00m fields:\n\u001b[1;32m 856\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m field \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading:\n\u001b[0;32m--> 857\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[1;32m 858\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m`\u001b[39m\u001b[38;5;132;01m{0:s}\u001b[39;00m\u001b[38;5;124m` is not in the table heading\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(field)\n\u001b[1;32m 859\u001b[0m )\n\u001b[1;32m 860\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mset\u001b[39m(field_list) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mset\u001b[39m(fields)\u001b[38;5;241m.\u001b[39mintersection(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\u001b[38;5;241m.\u001b[39mnames):\n\u001b[1;32m 861\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m DataJointError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAttempt to insert rows with different fields.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mKeyError\u001b[0m: '`paramset_idx` is not in the table heading'" - ] + "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", + "244 225 1 3 0 7c36bff0-7661- Neuropixels 2. 0 mua 470 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 1 7c36bff0-7661- Neuropixels 2. 4 mua 302 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 2 7c36bff0-7661- Neuropixels 2. 10 mua 396 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 3 7c36bff0-7661- Neuropixels 2. 16 mua 779 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 4 7c36bff0-7661- Neuropixels 2. 16 mua 274 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 5 7c36bff0-7661- Neuropixels 2. 22 mua 747 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 6 7c36bff0-7661- Neuropixels 2. 20 good 716 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 7 7c36bff0-7661- Neuropixels 2. 20 good 475 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 8 7c36bff0-7661- Neuropixels 2. 24 good 277 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 9 7c36bff0-7661- Neuropixels 2. 26 mua 772 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 10 7c36bff0-7661- Neuropixels 2. 26 good 563 =BLOB= =BLOB= =BLOB= \n", + "244 225 1 3 11 7c36bff0-7661- Neuropixels 2. 32 mua 563 =BLOB= =BLOB= =BLOB= \n", + " ...\n", + " (Total: 124)" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", - " )\n", - ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - "ephys.ProbeInsertion()" + "ephys.CuratedClustering.Unit & key #& 'cluster_quality_label = \"good\"'" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -2369,7 +5560,7 @@ " }\n", " \n", " \n", - " Ephys recording from a probe insertion for a given session.\n", + " Properties of a given unit from a round of clustering (and curation)\n", "
\n", " \n", " \n", " \n", - "\n", + "\n", "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -2382,60 +5573,264 @@ "

insertion_number

\n", " \n", "
\n", - "

electrode_config_hash

\n", + "

paramset_idx

\n", " \n", "
\n", - "

acq_software

\n", + "

unit

\n", " \n", "
\n", - "

sampling_rate

\n", - " (Hz)\n", + "

electrode_config_hash

\n", + " \n", "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", + "

electrode

\n", + " electrode index, starts at 0\n", + "
\n", + "

cluster_quality_label

\n", + " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", + "
\n", + "

spike_count

\n", + " how many spikes in this recording for this unit\n", + "
\n", + "

spike_times

\n", + " (s) spike times of this unit, relative to the start of the EphysRecording\n", + "
\n", + "

spike_sites

\n", + " array of electrode associated with each spike\n", + "
\n", + "

spike_depths

\n", + " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", "
2442251631007c36bff0-7661-5320-7844-9cb708b5b41cOpen Ephys30000.02025-07-03 14:09:1648.9805
Neuropixels 2.0 - Multishank2mua23=BLOB==BLOB==BLOB=
2441631017c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6good1101=BLOB==BLOB==BLOB=
2441631027c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10good2531=BLOB==BLOB==BLOB=
2441631037c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good5420=BLOB==BLOB==BLOB=
2441631047c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank12mua1296=BLOB==BLOB==BLOB=
2441631057c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good2980=BLOB==BLOB==BLOB=
2441631067c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua1866=BLOB==BLOB==BLOB=
2441631077c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good4098=BLOB==BLOB==BLOB=
2441631087c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank27mua1666=BLOB==BLOB==BLOB=
2441631097c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good270=BLOB==BLOB==BLOB=
24416310107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good654=BLOB==BLOB==BLOB=
24416310117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua3618=BLOB==BLOB==BLOB=
\n", - " \n", - "

Total: 1

\n", + "

...

\n", + "

Total: 265

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 7c36bff0-7661- Open Ephys 30000.0 2025-07-03 14: 48.9805 \n", - " (Total: 1)" + "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", + "244 163 1 0 0 7c36bff0-7661- Neuropixels 2. 2 mua 23 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 1 7c36bff0-7661- Neuropixels 2. 6 good 1101 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 2 7c36bff0-7661- Neuropixels 2. 10 good 2531 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 3 7c36bff0-7661- Neuropixels 2. 14 good 5420 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 4 7c36bff0-7661- Neuropixels 2. 12 mua 1296 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 5 7c36bff0-7661- Neuropixels 2. 14 good 2980 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 6 7c36bff0-7661- Neuropixels 2. 16 mua 1866 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 7 7c36bff0-7661- Neuropixels 2. 20 good 4098 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 8 7c36bff0-7661- Neuropixels 2. 27 mua 1666 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 9 7c36bff0-7661- Neuropixels 2. 26 good 270 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 10 7c36bff0-7661- Neuropixels 2. 26 good 654 =BLOB= =BLOB= =BLOB= \n", + "244 163 1 0 11 7c36bff0-7661- Neuropixels 2. 26 mua 3618 =BLOB= =BLOB= =BLOB= \n", + " ...\n", + " (Total: 265)" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.CuratedClustering.Unit & \"animal_id=244\" & \"session=163\" #& \"unit>263\" #& 'cluster_quality_label = \"good\"'" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-05-30 14:24:11,075][INFO]: Deleting 621 rows from `lab_npx_ephys`.`_curated_clustering__unit`\n", + "[2025-05-30 14:24:11,081][INFO]: Deleting 1 rows from `lab_npx_ephys`.`_curated_clustering`\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Commit deletes? [yes, No]: yes\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2025-05-30 14:24:14,695][INFO]: Deletes committed.\n" + ] + }, + { + "data": { + "text/plain": [ + "1" ] }, - "execution_count": 31, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], "source": [ - "ephys.EphysRecording().populate(key, display_progress=True)\n" + "# (ephys.CuratedClustering & key).delete()" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 61, "metadata": {}, "outputs": [ { @@ -2493,7 +5888,7 @@ " }\n", " \n", " \n", - " Paths of files of a given EphysRecording round.\n", + " Spike waveforms and their mean across spikes for the given unit\n", "
\n", " \n", " \n", " \n", - "\n", + "\n", "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", @@ -2506,413 +5901,520 @@ "

insertion_number

\n", " \n", "
\n", - "

file_path

\n", - " filepath relative to root data directory\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

unit

\n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", + "
\n", + "

electrode

\n", + " electrode index, starts at 0\n", + "
\n", + "

waveform_mean

\n", + " (uV) mean waveform across spikes of the given unit\n", + "
\n", + "

waveforms

\n", + " (uV) (spike x sample) waveforms of a sampling of spikes at the given electrode for the given unit\n", "
2442831631244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA
02647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank1=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank3=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank5=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank7=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank8=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank9=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank11=BLOB==BLOB=
\n", - " \n", - "

Total: 1

\n", + "

...

\n", + "

Total: 384

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *file_path \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 283 1 244_283_1_2025\n", - " (Total: 1)" + "*animal_id *session *insertion_num *paramset_idx *unit *electrode_con *probe_type *electrode waveform_m waveforms \n", + "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +--------+ +--------+\n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 0 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 1 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 2 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 3 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 4 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 5 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 6 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 7 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 8 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 9 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 10 =BLOB= =BLOB= \n", + "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 11 =BLOB= =BLOB= \n", + " ...\n", + " (Total: 384)" ] }, - "execution_count": 20, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.EphysRecording.EphysFile() & key\n" + "ephys.WaveformSet.Waveform() & \"session=163\" & \"unit>263\"" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WaveformSet: 0%| | 0/1 [00:00 2\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveformSet\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1464\u001b[0m, in \u001b[0;36mWaveformSet.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1462\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mPeakWaveform\u001b[38;5;241m.\u001b[39minsert1(unit_peak_waveform, ignore_extra_fields\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 1463\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m unit_electrode_waveforms:\n\u001b[0;32m-> 1464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveform\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43munit_electrode_waveforms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:419\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[0;32m--> 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 420\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrows\u001b[49m\n\u001b[1;32m 422\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:420\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[1;32m 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\n\u001b[0;32m--> 420\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m row \u001b[38;5;129;01min\u001b[39;00m rows\n\u001b[1;32m 422\u001b[0m )\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:872\u001b[0m, in \u001b[0;36mTable.__make_row_to_insert\u001b[0;34m(self, row, field_list, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[0;32m--> 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 873\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__make_placeholder(name, row[name], ignore_extra_fields)\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:873\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[1;32m 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m--> 873\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_placeholder\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m[\u001b[49m\u001b[43mname\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:809\u001b[0m, in \u001b[0;36mTable.__make_placeholder\u001b[0;34m(self, name, value, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 807\u001b[0m value \u001b[38;5;241m=\u001b[39m value\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 808\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_blob:\n\u001b[0;32m--> 809\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[43mblob\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 810\u001b[0m value \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 811\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexternal[attr\u001b[38;5;241m.\u001b[39mstore]\u001b[38;5;241m.\u001b[39mput(value)\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 812\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_external\n\u001b[1;32m 813\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m value\n\u001b[1;32m 814\u001b[0m )\n\u001b[1;32m 815\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_attachment:\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:594\u001b[0m, in \u001b[0;36mpack\u001b[0;34m(obj, compress)\u001b[0m\n\u001b[1;32m 590\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, \u001b[38;5;28mbytes\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mstartswith(\n\u001b[1;32m 591\u001b[0m (\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmYm\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdj0\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 592\u001b[0m )\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n\u001b[0;32m--> 594\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBlob\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:581\u001b[0m, in \u001b[0;36mBlob.pack\u001b[0;34m(self, obj, compress)\u001b[0m\n\u001b[1;32m 579\u001b[0m blob \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprotocol \u001b[38;5;241m+\u001b[39m blob\n\u001b[1;32m 580\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compress \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(blob) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1000\u001b[39m:\n\u001b[0;32m--> 581\u001b[0m compressed \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m len_u64(blob) \u001b[38;5;241m+\u001b[39m \u001b[43mzlib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblob\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(compressed) \u001b[38;5;241m<\u001b[39m \u001b[38;5;28mlen\u001b[39m(blob):\n\u001b[1;32m 583\u001b[0m blob \u001b[38;5;241m=\u001b[39m compressed\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "## this doesn't populate because of size \n", + "ephys.WaveformSet.populate(key, display_progress=True)" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, + "execution_count": 3, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "[2025-09-10 14:25:12,601][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", - "[2025-09-10 14:25:12,608][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", - "[2025-09-10 14:25:12,615][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", - "[2025-09-10 14:25:12,629][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", - "[2025-09-10 14:25:12,635][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" + "LFP: 0%| | 0/1 [00:00\n", + "{}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "ename": "KeyError", + "evalue": "'channels_indices'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mLFP\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:257\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, keys, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 253\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m)\n\u001b[1;32m 254\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m display_progress\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 256\u001b[0m ):\n\u001b[0;32m--> 257\u001b[0m status \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 259\u001b[0m success_list\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;241m1\u001b[39m)\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:335\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_generator:\n\u001b[0;32m--> 335\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 337\u001b[0m \u001b[38;5;66;03m# tripartite make - transaction is delayed until the final stage\u001b[39;00m\n\u001b[1;32m 338\u001b[0m gen \u001b[38;5;241m=\u001b[39m make(\u001b[38;5;28mdict\u001b[39m(key), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(make_kwargs \u001b[38;5;129;01mor\u001b[39;00m {}))\n", + "File \u001b[0;32m/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/ephys.py:611\u001b[0m, in \u001b[0;36mLFP.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 608\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe)\n\u001b[1;32m 609\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta)\n\u001b[1;32m 610\u001b[0m lfp_channel_ind \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mr_[\n\u001b[0;32m--> 611\u001b[0m \u001b[38;5;28mlen\u001b[39m(\u001b[43moe_probe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlfp_meta\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchannels_indices\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 612\u001b[0m \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m : \u001b[38;5;241m0\u001b[39m : \u001b[38;5;241m-\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_skip_channel_counts\n\u001b[1;32m 613\u001b[0m ]\n\u001b[1;32m 615\u001b[0m lfp \u001b[38;5;241m=\u001b[39m oe_probe\u001b[38;5;241m.\u001b[39mlfp_timeseries[:, lfp_channel_ind] \u001b[38;5;66;03m# (sample x channel)\u001b[39;00m\n\u001b[1;32m 616\u001b[0m lfp \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 617\u001b[0m lfp \u001b[38;5;241m*\u001b[39m np\u001b[38;5;241m.\u001b[39marray(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchannels_gains\u001b[39m\u001b[38;5;124m\"\u001b[39m])[lfp_channel_ind]\n\u001b[1;32m 618\u001b[0m )\u001b[38;5;241m.\u001b[39mT \u001b[38;5;66;03m# (channel x sample)\u001b[39;00m\n", + "\u001b[0;31mKeyError\u001b[0m: 'channels_indices'" ] } ], "source": [ - "ephys.QualityMetrics().drop()" + "## ephys.LFP.populate(key, display_progress=True) ## not supported for the new OpenEphys as LFP data is not saved separately.." ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "units, unit_spiketimes = (\n", + " ephys.CuratedClustering.Unit\n", + " & key\n", + " & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")'\n", + ").fetch(\"unit\", \"spike_times\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-10 14:24:42,906][WARNING]: MySQL server has gone away. Reconnecting to the server.\n" - ] - }, { "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering Procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", - "
\n", - "

package_version

\n", - " \n", - "
244225132025-08-29 10:35:37
\n", - " \n", - "

Total: 1

\n", - " " - ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGwCAYAAABcnuQpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABK6klEQVR4nO3deXxU9b0//teZfZLJzGSyTBaSkBVZYxRJEUQQBHMtAnZxqz/Uq9z6xQW1VGmr1t4q1rbW5XK1t96KXvdaY9UWN1ZRCAIJlKWEkEBCQhLIMpPJMpnMnN8fyRxnJjPJBJJMDr6ej8c8zJzlc97ncz7nnJeTyUEQRVEEERERkUwpIl0AERER0blgmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIllTRbqAkebxeFBXV4eYmBgIghDpcoiIiCgMoiiira0NKSkpUCgG/uzlvA8zdXV1SEtLi3QZREREdBZqamowbty4AZc578NMTEwMgN7OMBqNEa6GiIiIwmG325GWlibdxwdy3ocZ76+WjEYjwwwREZHMhPMVEX4BmIiIiGSNYYaIiIhkjWGGiIiIZI1hhoiIiGSNYYaIiIhkjWGGiIiIZI1hhoiIiGSNYYaIiIhkjWGGiIiIZI1hhoiIiGTtvP/nDEZDo70Lr5dU46bCdCQadX7vzzic+Om7+wEAT31/GgDgp+/uh8vtwcUZsVi1IA/lDW34yV/2YWZ2HNYUTQQAv/YCHaqz4bEPD+HRxZMQb9Di9ZJqLJpsxScHG/xqeObzchw+1YbHl03BpBQTDtXZcN/bZWhu78YfrrsQs3MTwtq3wHbOph8C96PR3oX/2VYJAFgxJwuJRp1U3+k2JwqzLEg1R+Hai1LxycEGLJpsxWs7T2D/SRumjTPhR9/JGHB/vf3iPQbB+uvXHx3CV5XNSDFpUZgZBwA42uhAbqIBcQYtVszJCnosgtUerA8AhFzOt53alg6UVDXDEq1GbmIMalo6MW2cCasW5Pn1o+8x9rbd0d2DKI3Kr/3AGgKPSeB63mUWTbbivb21qG3pwJfHzqC7x4N5FyTisWumBB2HwY6/7/4G63dvHd4xfPcVOdhy5DQ6unv6tRelUWHuhAQ8v6kiaBvh8o6NPSdaAABZ8dF+fezbRwCCjiNv3zQ5nDje1IEHFubhr3tOYnvFGUwfH+s3Vm8qTEd5Qxse/Ot+/OZ70zA7NwGH6mz46bv70dndA5VSgbhoDfacaEaUVo3nbyhAnjVm0HPFu23f8/BQnQ0/Lz6AickxfuPlmc/Lsf+krd9YfvDdfdhe0YQVczKx+0Qr7r4iB18fb+k3vn3PnZ8XH0CSUYt6uxO3zR6P13ZW4+4rcvCPf57C/pM2JBg02HfSBku0GmmxUThc34bf/SBfur74jrmW9m7sPtEi9Zl33IYa44HjOPA659tHwcZ8SVUTfvruPqSao3Dvglz8eftxTEyOwY++k4HXdp7A4VNtuDTbgj99UYX7rsxFeb0D2yvOYHZuPO64LAufHGzAJeNjpTE4KcUU9Bz3PYenppqh1yilMezte++54TtOAsdb4PU12H5dMj4WT274FwDgPy7Pwms7q7E4PxkvbDmGh4ouwI5jTX7j1/ec9G7Pex31jhkv73m5OD8ZT39aDrfHgxidGh3dbuSnmdDa0YPbZo/HH7dWorO7B109HjS1dWGcJRrP3VAw4P1hpDHMDIPGNiee3XgUV06y9p6YPu8rGh04UGcHAJQ3OABAen+kwYEbCzNQWt2KersTxaV1+PfZvQPOt71A5Q0OlFQ1o7zBAY/Yu2xmfHS/Gt7YVSMtPynFhPIGB4701VBa3RpemAnSztn0Q78LdJsTL22vAgAsLUhFolHnV9+GAw0AgCmpJmn/vHUcqLNjRmbcgPvr7RfvMQjWX19VNgMA6mxOFJfVSbV5j8/SgtSgxyJY7cH6AEDI5QLbAYDmDhcqTndINdxYmOHXj77H2LftwPYDawjsp8D1vMtkxkf7zfMeh5XzcsMLMwH9EqzfvXV4x/Ds6tZ+2/Rl0qtDthEu37EBQBpj3j727r+3v4KNo8C+Ka1ulcZM4Fi9cpIVpdWtqG3tks6z8oZvrgO+nB0ulFa3whylCetc8dblPQ/LGxworWlFaU2r33jxPVeAb47z5vIzAIAvKpqw/6QNs6tbg45v33OntKZV2nZJZbN03Hz7FPAfv77Xl8D6ffvMO25DjfHAnwOvc759FGy9kspmdLpEVJxuR0lls9RXMzLjpPrdoohut4gvjjbhq2NNAIDi0jpcnpeIZzcexQNX5kljcFKKKeQ5HtgHXt6+9y7nO04ADHh9DbZfD1yZJx1X7/GwRGtQ29qFksrmfuPX95z03Z7vNcbLe15aojVo7nABAGxdbgDA5iNnpG0GjuWK0+2D3h9GGn/NRERERLLGMENERESyxjBDREREssYwQ0RERLLGMENERESyxjBDREREssY/zR4GiTFa3Ds/F4kx2n7vFQIwJcUIAMizGgD0vvc+ZyYxRouCdDOSjFrMzI6T2vBtL1Ce1YDCTAvyrAbEG3q3lWc19KvhxhlpOHyqTdpuntWACVYDmtu7UZBuDnvfAts5m34ItuztszOln33r833OjHe/8qwG3DgjTXo+wmD76+0X7zEI1l+XZlkGfM5MqGMRrPZQfRBqOd92Qj1nJrAfA/f59tmZ0vNiAuvzXS6wn4Kt523fW4/vc2ZCjcPBjmmwfvc91oWZFhSkm6V6AkVpVChIN4dsI1zesRHsOTPB+ijYOPL2jfdZLwXpZiy7MMXvOTO+x6cg3YxUs046z/KsBkxJMQZ9zkxBujmsc8W7bd/zMM9qQEGaGROTY/qdC77PmfHOm5cXj+0VTbgsJw56tRIF6eag49v33ClIM0vPmSnMsuBoowMF6WZpG8GeM+N7ffEdc4HPmRlsjAf+HDg/WM2+6xVmWfDXvTVINUehMMuCg3V2TEyOka4n3ufM/OuUHZflxsEao5WeM+Pdlu8YDLatwHM48DkzgdeCwH0Y6PoabL8K0s3SPcV7PGblxGH/yVYUZlngEUW/8Rt4DfK9jgb2o/e8nJUTh5LKpqDPmSnMsqCsprXfc2YGuz+MNEEURTGiFYwwu90Ok8kEm80Go9EY6XKIiIgoDEO5f/PXTERERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrEQ0z27Ztw+LFi5GSkgJBEPD+++/7zXc4HLjrrrswbtw46PV6TJo0CS+++GJkiiUiIqIxKaJhpr29Hfn5+Vi3bl3Q+ffffz8+/vhjvPbaazh8+DBWrVqFu+66Cx988MEoV0pERERjlSqSGy8qKkJRUVHI+V999RWWL1+OuXPnAgBWrFiBP/7xj9i1axeuueaaUaqSiIiIxrIx/Z2ZSy+9FB988AFqa2shiiI2b96M8vJyLFy4MOQ6TqcTdrvd70VERETnrzEdZp5//nlMmjQJ48aNg0ajwVVXXYV169Zhzpw5IddZu3YtTCaT9EpLSxvFiomIiGi0jfkws3PnTnzwwQfYs2cPfv/732PlypX4/PPPQ66zZs0a2Gw26VVTUzOKFRMREdFoi+h3ZgbS2dmJn/3sZyguLsbVV18NAJg2bRrKysrwu9/9DgsWLAi6nlarhVarHc1SiYiIKILG7CczLpcLLpcLCoV/iUqlEh6PJ0JVERER0VgT0U9mHA4HKioqpPdVVVUoKyuDxWJBeno6Lr/8cqxevRp6vR4ZGRnYunUrXn31VTz99NMRrJqIiIjGEkEURTFSG9+yZQvmzZvXb/ry5cuxfv161NfXY82aNfj000/R3NyMjIwMrFixAvfddx8EQQhrG3a7HSaTCTabDUajcbh3gYiIiEbAUO7fEQ0zo4FhhoiISH6Gcv8es9+ZISIiIgoHwwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDzDn4cF8t8n72d2Sv+Tte23l82NpttHfhD5+Vo9HeNWxtjoZw6g533w7V2bDoD1txya8/w4f7aoetP0Jt3zv9UJ3trLbVaO/Cnf+3GxMf3oAb/7QDlz+1CRf8/O+Y+9Qm3Pl/u7Fs3ZfYfvT0oNs4VGfDdX/cgUN1Nny4rxaTH9mAO1/b7bdOsH041/oH27dw2g7Vt9uPnsasJzdi+9HT+HBfLXIe+jvGP/R3/Pbjw4NuM9i2Xtt5HHk//wde23l8wOUa7V342Xv7segPW/Hd577AoTrboO377uuvPzqEX390KOh+hzuOw+m7RnvXgNsKtr3huEb4bnc4ztlw1x2p69vZtjvYGBpqm97x/uG+Wvz6o0O4761SzP/dZlz0q09x39ulYbU1En001DZ9x8eH+2qlfRqr9yaGmXNQUtmMbg/gFoEvK5qGrd3GNiee3XgUjW3OYWtzNIRTd7j7Vt7gwJEGB047ulFS2Txs/RFq+97p5Q2Os9pWY5sTGw42oNPlwVfHmnGiuRNdbuB4cyc2HGxAaU0rSqtbB91GeYMDJVXNvf+tbEZ7twcbDjT4rRNsH861/sH2LZy2Q/VtaXUralu7UFrdipLKZvT0Tf9igHNmoHHyZUUTut0ivqxoGnC5xjYn3thVgyMNDhyos6O8wTFo+777+tL2Kry0vSrofoc7jsPpu8Y254DbCra94bhG+G53OM7ZcNcdqevb2bY72Bgaapve8V5S2YyXtlehuKwOx850oLnDheLSurDaGok+GmqbvuOjpLJZ2qexem9imCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIllTRboAOSvMsuCdr6vhFoFZOXHD1m5ijBb3zs9FYox22NocDeHUHe6+5VkNmGA1oLm9G4VZFsQZtMPSH6G2752eZzWcVd8nxmhRNNmKLeWnUZBuRm1LJxpsnUgy6TEx2Yh6uxMF6eZBt5FnNaAw04I8qwFKBVBcehJz8hL6rRO4/rnWP9i+hdN2qL4tSDcj1axDQboZLR3deKukGj0ALhvgnBlonMzKicPGww2YlRM34HKJMVrcOCMNe060QK1UIM9qGLR93329fXYmAATd73DHcTh9lxijHXBbwbY3HNcI3+0Oxzkb7rojdX0723YHG0NDbdM73guzLNCplWhyOLH/ZCtaOly4fEJCWG2NRB8NtU3f8ZGfZsLmI43Dei0eboIoimKkixhJdrsdJpMJNpsNRqMx0uUQERFRGIZy/+avmYiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWIhpmtm3bhsWLFyMlJQWCIOD999/vt8zhw4dxzTXXwGQyITo6Gpdccgmqq6tHv1giIiIakyIaZtrb25Gfn49169YFnX/s2DHMnj0bF1xwAbZs2YL9+/fj4Ycfhk6nG+VKiYiIaKwSRFEUI10EAAiCgOLiYixdulSadv3110OtVuP//u//wm7H6XTC6XRK7+12O9LS0mCz2WA0GoezZCIiIhohdrsdJpMprPv3mP3OjMfjwd///nfk5eVh0aJFSExMRGFhYdBfRflau3YtTCaT9EpLSxudgomIiCgixmyYaWxshMPhwJNPPomrrroKn376KZYtW4Zrr70WW7duDbnemjVrYLPZpFdNTc0oVk1ERESjTRXpAkLxeDwAgCVLluC+++4DAFx44YX46quv8OKLL+Lyyy8Pup5Wq4VWqx21OomIiCiyxuwnM/Hx8VCpVJg0aZLf9IkTJ/KvmYiIiEgyZsOMRqPBJZdcgiNHjvhNLy8vR0ZGRoSqIiIiorEmor9mcjgcqKiokN5XVVWhrKwMFosF6enpWL16Na677jrMmTMH8+bNw8cff4wPP/wQW7ZsiVzRRERENKZE9E+zt2zZgnnz5vWbvnz5cqxfvx4A8Oc//xlr167FyZMnMWHCBDz22GNYsmRJ2NsYyp92ERER0dgwlPv3mHnOzEhhmCEiIpKf8+I5M0REREThYJghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWVNFugA5++Xf/on1O6qHtU1LlBr3L8zD05+Wo9PlQqfrm3nx0WoIgoB7F+TirV01OONwot7uDNqOUgAeWzIZ4+Oi8eBf92OcWYeS461h1SAAuGqKFbNy4vHY3w7CJYa3TqjF4qI1aOvohkKpwPWXjMPrO6vhEnuTtADA3fff9FgdTrR0AQCi1ECHz77fMjMdAPr1t1mnRGuXO6z9CqQC0BMwTSEA8y9IwGeHT8OoU+LxZVNR0diORZOt+PVHh/BVZTOUfTV721CpBExJNaGi0YHO7h44Q5STYtKizuaEAsBFGWaUN7TB3ld7YP9plUCPu3c7mRY9qpo7pXlTkg040+7yO/Z6NdDt+qau9FgdTju6/MbPQJQAPAB0agGdAQdc2dcvGo0CPT2ekPsXH61GnEGLrPho1LR0Yto4E2Zmx+Hh9w/A3tkDT3il9O2PALNegwa7s996vmMjRqtAm9PTbzoAqZ//VW+Hw/lNKwIAlQCo1AI6u7/ZV9/jCvSeQzq1gPZusd/xsehVaO4MHD2AXq3An/6/6Zidm4BGexee+bwc+0/aoBCA/bV2aTm1AChVQFeQ42PQCHB0+x8DtQKIjdLA3tkNvUaFliDbBgCtAnCG6GiNAujum2fUKaFVKXHvglz8dU8tlAKwt7oVIvqfxwoAWrUCi6cl4509tf3aTYvVoabvvA0l2aRDZ3cPWjt7oFMBenXoffDKTzVCoVDg0mwL1m2pDHs/R0tCtBqn2/0PYH6qETUtnWj2GYi+/e5dz6hXo6XDBUu0GhWnO6R5KgEw6dVo6vBvV6uEdN55x6lOCQx26YuPVqOrx41OpwduAGlmHWpagx8rq0GDBkc3ACDVpEVLZzc6usO4+PeZk2PBq7fPDHv54cYwcw62H2se9jabO1z4sqLJ72TwOtN34nxZ0YQDdfZ+8325xd7lWtpdqG3tQkuQ9kIRAWw40ABACCvIeNcJpam99wRBjwfbjzVLbfpei0TA74IYWG6ovj7bIAP0DzIA4BGB3SdaAQD2LjdKKpvxWkk1MuOj8VVlbw2+W+wB0NMjSusMpM7WGz48QL/lA/vPNzD4BhkAKG9sR7fbf43A0FI9yM0lkHdzgUHGO88tAq5B7h5n2l040+7CkQYHAOBAnR0KQUDrIDetYDpdIjpdwYO679ho86kpcMwE62egt69dIuAKuFAHjiS3CLT3LRPYK8GCTG/dHpRWt/aGmTYn3thVE3Q5lwi4QpySgUEGAFweoLHvRtM1QH8OdIh8b6i9IdqNLyuaUFrTGnol9PZjp8sjjf9AgwUZADhl+2aZrh6gq2fwMbGvL/y5xf79EekgA6BfkAG+qdlXd0Ctp9td0rqB1/keEf2CDOB/PfD+GM6l70xAjaGCDAApyABArS34uTeQ0pMD35NGGn/NRERERLLGMENERESyxjBDREREssYwQ0RERLLGMENERESyxjBDREREssYwcw5mZ1uGvU1LlBqzcuJgiVJDr/afFx+tRoJBg1k5cZiSYkSSURuyHaUAzMqJQ0G6GalmHaamxIRdgwCgaIoVs3LioBbCXyeUuGgNNAKgUykwO9sitalA7zMTvOunxeqkdaIC9n12tiVof5t1yn7TwhXsuQQKAZieYQbQ+yyOwiwL7p2fizyrAZdm9W7fd4sqADqVgOkZZpj1KmgHKCfF1Hu8FOjdhtGn9sD+0yq/2U6mRe83Ly8xut+x16v960qP1fUbPwNR9tWgD3LAleh9Lkq0VjHg/sVHqzHBakDRZCumpBhx44w0FGZZYNarhnyh0asFJBu1QdfzHRsxWkXQ6cA3/WzQ+rci9O2PXuO/r4G7phSA6L5lAnvFog/+VAu9WoGCdDMAIDFGixtnpGFKihHTUo1+y6kFQBfi+Bg0/Y+BWgEkGjTQKYHYENsGep+/EorGZ55Rp5SuJQVpZkxPN0vPfQqk6Nsv7/gP5HvehpJs0sHcV7dONfA+eOWnGlGQZsZlOXH95g20n6MlIbr/AcxPNcISMBA1AbUmRKuRHR8FS5QaOQlRfvNUAhAXOJABv/PO+2M4l774aDUMWoW0Tpo59LGyGjTSz6kmLaKCjMOBFIwzDr7QCBJEMcgf8Z9H7HY7TCYTbDYbjMbIdjYRERGFZyj37zGQb4mIiIjOHsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJmirSBcjZoTobHvvwEB5dPAmTUkxotHfh9ZJqLJpsxXt7awEA116U6vfzaztPYM+JFgDAxRmx+NF3MvDe3loca2zD5vIzo1K3AEAEoFMD7h5AFIGes2xLrxbQ6RLPupYkoxatHU509RVg1CnR1uXGYC2mmLSIN2ixv9YepCagpwcIVpZeLSBGq0ajo1uaplMBbnfw5QeiUwJd7qGt48t7HLRKwOkGjFoFuro9cIvAUJo1aAQ4ugcv3qJXocvtRle3iGitEm1ON4xaBexOj99yt8xMx47KZhw/44AzSCF6NdDpGkKBIagF/z4365RoDdKhQ92eAoAnYFq0VgGjVo0zdicCm/IeBwBQKYBfXjMZT338L9gHObg6FaBUCPCIAu6Zn4PnNx1FR4jjEKymYNsPh0WvQnNn6DM2SiPA1S32289wqARAr1FAo1Li+kvSsG5LZb9lfPfFatCgwedcGkyoYzwUvuedRgF09xXjPQ9UCmBSshGHau1+1zW1Aog3aNFgd8IDQKsAvEPftx0vrVLAxeNjcaDWBkeXO+TxC9fiaUnYWdmM00Por8BxEzhWojSCNOb0KmCAYREWnQrweHr7Qi0AKpUCT31/GrITDPh58QGMj4tCnEGLay9KxZ+2VWJ7xRlMHx+LVHMUVszJQqJRd24FnIOIhplt27bht7/9Lfbs2YNTp06huLgYS5cuDbrsj3/8Y/zxj3/EH/7wB6xatWpU6wylvMGBkqpmlDc4esNMmxPPbjyKzPhovLS9CgAwJdXk9/Mbu2qk9Y80ODAjM06aP1q8J0PXMNyQziXIAEC93en3frAbiFedzYk6mzPovIFufJ0uEZ0u/4tJ11leAM7xmiwdB29gCAwV4QonyADwuwG29W002Da3H2tGRaMjZDvDEWSA/uEx1E1uqNsL1ovtTg/ancHHi28ZPR7gy4qmsMZh77gRAYj44mhTyCATqqZg2w/HQEEGwIB1DKZHBNqcHsDpwRcVTUGX8d2XoQQZIPQxHgrfJnwDiPc86PEg6P/kuDzAKZ/rje/QDwwyAOB0i/jqWPM51+tVUtUypCAD9B83gUfW91ifa5AB/K+FLhFwuTwoqWyG2wOU1rSitKYVQO+9rLisDgCw4UADAGBpQWpEw0xEf83U3t6O/Px8rFu3bsDliouLsXPnTqSkpIxSZURERCQXEf1kpqioCEVFRQMuU1tbi7vvvhuffPIJrr766kHbdDqdcPr8H5jd3j+hExER0fljTH8B2OPx4Oabb8bq1asxefLksNZZu3YtTCaT9EpLSxvhKomIiCiSxnSY+c1vfgOVSoV77rkn7HXWrFkDm80mvWpqagZfiYiIiGRrzP410549e/Dss89i7969EAQh7PW0Wi20Wu0IVkZERERjyZj9ZOaLL75AY2Mj0tPToVKpoFKpcOLECTzwwAMYP358pMsjIiKiMWLMhpmbb74Z+/fvR1lZmfRKSUnB6tWr8cknn0S6PABAntWAwkwL8qwGAEBijBb3zs9FntWA22dn4vbZmf1+vnFGGiZYDZjQ97N3/ry8+FGr2/s5l07d9yyBc2hLrw7/U7Ngkoxa6HwKMOqUCKfFFJMW01KNIWrq3a/g8wQkGjR+03Sq0MsPRKcc+jq+vJvU9rVj1CqgEYChNmvQhFe8Ra9ClEaAAkBM30aN2v6XgNnZFkywGqS6AunVQywwhMA+N4fo0KFuL9hFLVqrQLJRi2BN+ZahUgCzcuJgDOPg6lRAtEaAXq3AZblxiBrgOAx0oR3q0LPoBz5jozRC0P0Mh0oAYrQKxEWrcVlOXNBlfPfFGnAuDSbUMR4K3yY0PsV4zwOVApiWaux3XVMrgGSjVqrfd+hrghwgrVLApdkWGHXKYblRFmbGImGI/RW43cCx4jvmBhkWYdGpvukLtQDo1QoUZvXe4wrSzFh2YYp0L1t2YQoSDBoUTbHi9tmZSIyJ7G9EBFEUz+1BIefA4XCgoqICAFBQUICnn34a8+bNg8ViQXp6er/lx48fj1WrVg3pOTN2ux0mkwk2mw1GY/CbHxEREY0tQ7l/R/Q7M7t378a8efOk9/fffz8AYPny5Vi/fn2EqiIiIiI5iWiYmTt3LobywdDx48dHrhgiIiKSpTH7nRkiIiKicDDMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsnVWYycrKQlNTU7/pra2tyMrKOueiiIiIiMJ1VmHm+PHjcLvd/aY7nU7U1taec1FERERE4VINZeEPPvhA+vmTTz6ByWSS3rvdbmzcuBHjx48ftuKIiIiIBjOkMLN06VIAgCAIWL58ud88tVqN8ePH4/e///2wFUdEREQ0mCGFGY/HAwDIzMzE119/jfj4+BEpioiIiChcQwozXlVVVcNdBxEREdFZCTvMPPfcc1ixYgV0Oh2ee+65AZe95557zrkwIiIionAIoiiK4SyYmZmJ3bt3Iy4uDpmZmaEbFARUVlYOW4Hnym63w2QywWazwWg0RrocIiIiCsNQ7t9hfzLj+6sl/pqJiIiIxgo+AZiIiIhk7ay+AOx2u7F+/Xps3LgRjY2N0l85eW3atGlYiiMiIiIazFmFmXvvvRfr16/H1VdfjSlTpkAQhOGui4iIiCgsZxVm3nrrLbzzzjv4t3/7t+Guh4iIiGhIzuo7MxqNBjk5OcNdCxEREdGQnVWYeeCBB/Dss88izL/qJiIiIhoxZ/Vrpu3bt2Pz5s3YsGEDJk+eDLVa7Tf/vffeG5biiIiIiAZzVmHGbDZj2bJlw10LERER0ZCdVZh5+eWXh7sOIiIiorMypDATGxsb9M+wTSYT8vLy8JOf/ARXXnnlsBVHRERENJghhZlnnnkm6PTW1lbs2bMH3/3ud/Huu+9i8eLFYbW3bds2/Pa3v8WePXtw6tQpFBcXY+nSpQAAl8uFX/ziF/jHP/6ByspKmEwmLFiwAE8++SRSUlKGUjYRERGdx4YUZpYvXz7g/AsvvBBr164NO8y0t7cjPz8ft912G6699lq/eR0dHdi7dy8efvhh5Ofno6WlBffeey+uueYa7N69eyhlExER0Xks7H81Oxzl5eX4zne+g+bm5qEXIgh+n8wE8/XXX2PGjBk4ceIE0tPTw2qX/2o2ERGR/IzIv5odDqfTCY1GM5xN+rHZbBAEAWazecAanE6n9N5ut49YPURERBR5w/qvZv/v//4vLrzwwuFsUtLV1YUHH3wQN9xww4AJbe3atTCZTNIrLS1tROohIiKisWFIn8zcf//9QafbbDbs3bsX5eXl2LZt27AU5svlcuGHP/whRFHECy+8MOCya9as8avTbrcz0BAREZ3HhhRmSktLg043Go248sor8d577yEzM3NYCvPyBpkTJ05g06ZNg/7eTKvVQqvVDmsNRERENHYNKcxs3rx5pOoIyhtkjh49is2bNyMuLm5Ut09ERERj37B+AXioHA4HKioqpPdVVVUoKyuDxWJBcnIyvv/972Pv3r346KOP4Ha7UV9fDwCwWCwj+kVjIiIiko9h/dPsodqyZQvmzZvXb/ry5cvxy1/+MuSvrDZv3oy5c+eGtQ3+aTYREZH8ROxPs4dq7ty5GChLRTBnERERkUwM659mExEREY02hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKStYiGmW3btmHx4sVISUmBIAh4//33/eaLoohHHnkEycnJ0Ov1WLBgAY4ePRqZYomIiGhMimiYaW9vR35+PtatWxd0/lNPPYXnnnsOL774IkpKShAdHY1Fixahq6trlCslIiKisUoVyY0XFRWhqKgo6DxRFPHMM8/gF7/4BZYsWQIAePXVV2G1WvH+++/j+uuvH81SiYiIaIwas9+ZqaqqQn19PRYsWCBNM5lMKCwsxI4dO0Ku53Q6Ybfb/V5ERER0/hqzYaa+vh4AYLVa/aZbrVZpXjBr166FyWSSXmlpaSNaJxEREUXWmA0zZ2vNmjWw2WzSq6amJtIlERER0Qgas2EmKSkJANDQ0OA3vaGhQZoXjFarhdFo9HsRERHR+WvMhpnMzEwkJSVh48aN0jS73Y6SkhLMnDkzgpURERHRWBLRv2ZyOByoqKiQ3ldVVaGsrAwWiwXp6elYtWoVfv3rXyM3NxeZmZl4+OGHkZKSgqVLl0auaCIiIhpTIhpmdu/ejXnz5knv77//fgDA8uXLsX79evz0pz9Fe3s7VqxYgdbWVsyePRsff/wxdDpdpEomIiKiMUYQRVGMdBEjyW63w2QywWaz8fszREREMjGU+/eY/c4MERERUTgYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWVJEuQM7ufmMPPtxfDwBQAojSKaFRKNDU4UJarA5rr52G13eewKZ/NUCnUeHS7DhABHZUNkGpEPDLayZjX40NZdUt2F3dCrUCWDDJiseumYJEo67f9hrtXXi9pBqXjI/F85sq8OjiSZiUYkKjvQv/s60SHd096Ox243hTBx5fNgXxBi1eL6nGTYXpA7YXar7XazuP47EPDmJ2bgJWL5qATw42YNFkKz452ICbCtMBAM98Xo49J1qgVirwH5dn4bWd1bj7ihx8fbxlwPa9Nfi2l2jU4VCdDY99eEjaRwBBp3nbeObzchw+1YbHl03xm+e7jLePojQqXHtRqt/2fOt4b28tAGDFnCyp7sC+8rYXuNyhOhvufmMvjp/pgBuAgL7/YxCAx5ZMxo++M75fTd42yhvacM+bpRBFEd/JjoOtw4Udlc1QK4H5E624qTDD77h7fbivFg/9dT9iozQ42doFa4wGL986A5NSTFI9p2xd+OH0cXjr62roNWo8f0MBZucm+PXf/pM2TBtnwqoFeQAg7a/3+B4+1YYHFubh9Z0nsO3oGaz5twuw53gLtlecwezceKwpmhi0b3zXD3V8gvXxQHyXPeNw4ufFBzAxOQarFuQNuu658N0ugKDn40Dr+I61cPbzXOobqO1DdTapz370nQy/cyFYm8HGeqjthzrW3m2Oj4tCnEEb9PwarC+HUzh9Fex4D3Ych9Jfgde0UNfDgZYNVn9g3Y/+7QC2HT2DJ783FYWZcX7rBbuufrivFj99dx/Meg06XW7EGzSYkRmHVQvycMbhDHodjjR+MnMOSqpapJ/dANq63GjqcAEAalq6UFrdig0HG+B0A7bOHmw40IANBxvQ2tmDpnYXSiqb8dL2KuyubgUAuDzAhgMNaGxzBt1eY5sTz248itLqVpRUNaO8wSFNf2l7Fd7YVYPisjqU1rSivMEhLT9Ye6Hme31Z0QSXB9h85DTKGxx4duNR6b+NbU40tjnxxq4aHGlw4ECdHSWVzSipakZpdeug7Xtr8G0PAMobHH77GGqat403dtVI+x1qO94+eml7Vb/t+dbx0vYqvLS9yq/uwL7ythe4XHmDA8f6ggwAiOgdG26xtx+D1eRto7S6Fc0dLrT0jZWvKpshAuh2946LwOPuVVLZjPZuD062dgEAGtq6pWW89XS4PNh+rBldPUBLhwulfWPOt/8O1Nnxxq4a6ZgGHt/SmlZpTLd3u/FlRROKy+pw2tGN4tK6kH0TzvEJ1scD8V22vMGB0ppWqfaRFNgvwc7HgdYJ9n6k6huIb58FngvB2gw21kMtG+pYe7dZXFYX8vwarC+HUzh9Fex4D3Ych9Jfgde0UNfDgZYNto3Aur3nbEllc7/1gl1XSyqb0ekSccruRGtnDypOd0jnV6jrcKQxzBAREZGsMcwQERGRrDHMEBERkawxzBAREZGsMcwQERGRrDHMEBERkazxOTPnoDAzdsDnzBSkm1E02RryOTOFWRbo1Mp+z5lJjNEG3V5ijBb3zs9FQboZhZkW5FkN0vTbZ2f6PWcmz2pAvKF3+cHaCzXfa1ZOHD4/VI/ZuQnIsxpw7/xc6b/edW+ckSY9Z6Ywy4KjjQ4UpJsHbd9bQ2B7eVaD3z6GmuZt48YZaTh8qq3fPN9lvH0UpVH1255vHbfPzpSmheorb3uBy+VZDciOjwr6nJlZOXFBa/L+XJBuhiVKHfI5M4HH3aswy4Li0pN+z5nxLuOt55StC7OzLTjZ7IBeo0ZBurlf/3mfM+Pdn8Dje/hUmzSmtx09g1k5cdCpFNJzZgbqm8GOT7A+HojvsgoBKEgzY2JyTFjrnovAGoOdj4OtM5T9PNf6QsmzGqQ+CzwXgrUZbKyHWjbUsfZu0/ucmWDn12B9OZzC6atgx3uw4ziU/gq8poW6Hg60bLBtBM7znrOFWZZ+84JdVwuzLPjr3pp+z5nxnm+jdYyGQhBFUYx0ESPJbrfDZDLBZrPBaDRGuhwiIiIKw1Du3/w1ExEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJGsMMERERyRrDDBEREckawwwRERHJ2pgOM263Gw8//DAyMzOh1+uRnZ2N//zP/4QoipEujYiIiMYIVaQLGMhvfvMbvPDCC3jllVcwefJk7N69G7feeitMJhPuueeeSJdHREREY8CYDjNfffUVlixZgquvvhoAMH78eLz55pvYtWtXyHWcTiecTqf03m63j3idREREFDlj+tdMl156KTZu3Ijy8nIAwL59+7B9+3YUFRWFXGft2rUwmUzSKy0tbbTKJSIioggQxDH8BRSPx4Of/exneOqpp6BUKuF2u/H4449jzZo1IdcJ9slMWloabDYbjEbjaJRNRERE58hut8NkMoV1/x7Tv2Z655138Prrr+ONN97A5MmTUVZWhlWrViElJQXLly8Puo5Wq4VWqx3lSomIiChSxnSYWb16NR566CFcf/31AICpU6fixIkTWLt2bcgwQ0RERN8uY/o7Mx0dHVAo/EtUKpXweDwRqoiIiIjGmjH9yczixYvx+OOPIz09HZMnT0ZpaSmefvpp3HbbbZEujYiIiMaIMf0F4La2Njz88MMoLi5GY2MjUlJScMMNN+CRRx6BRqMJq42hfIGIiIiIxoah3L/HdJgZDgwzRERE8jOU+/eY/s4MERER0WAYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWVJEuQM62Hz2Nu97Yi/auHvSIgDiEdVUAeoawrKfvRecuzaxDTWtXRLYtIPQ4UWB0j7EAwKxXo6XT5TdtoHGsADAl1YiK023o6Bah6Ft+KGN/rBhqf2uUQLd7pKqJjKFch4gGsnJuFlZfNTFi2+cnM+egtLoVrZ09cA0xyABDu4D0gEFmOEUqyAADj5PRPsYi4BdkvNMG4gGwv9aOjm5Rei/HIAMMvb/PtyADMMjQ8Pmioimi22eYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYOQcF6WaY9Sqohd7ncwzFUB7wowIP1HBKM+situ2BxsloH2MBQKxe3W/aQBQApqUaEaURpPdDHftjxVD7W6MckTIiig8ao+FyWU5cRLcviKIo18dEhMVut8NkMsFms8FoNEa6HCIiIgrDUO7f/B9+IiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjWGGSIiIpI1hhkiIiKSNYYZIiIikjVVpAsYTG1tLR588EFs2LABHR0dyMnJwcsvv4zp06dHujS8sOUofvNx+Yi1r1UCGpUCHlGEq0cEBKDb7b+MWgFMTDbiQK0dHp/pQt/LA0CnAkQRMGjVaO10ITM+ClWnOxAXo0WP24PCLAu6ut3YUdkEo04NW0c3onRqXDkxEe/sqUV8tBrdbg9cbjecLiAlVo9LMmIBAIdO2WHrdOGMw4n/mJOFzw834kSTA109vUk5Rq/C5BQjDtXZ4fZ4oFIoYNKrcby5E7mJUVAICvS4PejxiGhs60SnC9AogO6+nYnWKhCr16C1sxtuD3Dd9HF4e3cNotQqtHS4EButQYfThfHx0ThS70C0TonZOfGwdbiwq6oZk1KMqDjdho5uEWmxOvz0qgvwzGflqGnqAAQgzqBFm9MFV48HCgXQ6QJSTVq0OXvQ6XRDoRCQZtGj4nQHACDFpMUEawy+PtEMh/ObHr9yYgIOnWrDnXOz8dauGrjcHmTFR2P3iRacdnRDKQBpsXqkmPX4uqoZHgA3fycdHx9sQEG6GanmKMydkIDff1qOickxmJkdh8f/fhjjYvU4WGfH5BQjKk+3w6hTQQSkvlIJQIxOhZbOHujVgEapRGyUBlq1EpOSjWiwd2FnZbPULxCBHZVNcPb0oMsFqJW9Yyo3IQrHz3TAJQJaFdDdA2jVgOgBLNFaNLc74ewbe0oAbvRu2xKtQWt7N8S+Qefy9I67izPMaOvqgcPZg6a2LsRGa9He3YP2LjfcABIMGjicPZicYkRFowMCgIkpRhyotUn9nhCjxcnWLmmbCgFQKAFnDzApyYCTrZ3SshOSYnCk3g6VSgGPx4PuHiAzPgqVpzsQo1dh9aIJ+HDfKdx9RQ62HDmNJocTRxsdSDBosO+kDVqVAs0OJzQaJVLNeqycl4M/bz8OpQCUVrfCHK2Bo7MbGo0S1hgt0mKjcKDOjoy4KByotWFcbBS+d3EqnvmsHD3u3vPOqFPB1tUjnY8zsy2wxuhw6JQdPW4Puno8aHY4UZARiwZbF+psHeh0fXMOx0erEa1Vod7WCacbMGoV6PEAd8/Pwd/316Oloxtn7F3QaJTQq5RodHRDqxJw++xMvLmrBi63GwpBQJRGhZZ2J5JM34w/lwjo1IDHDajVCkAU4REF/PzqidhzvAXbK85gSqoR1U0daOlw+V0jYqM0aHI40e0BrDEanG7rhlYjIEqtwkXpZnx2+DTUAtAjAipF75iw6FVQKhW4bfZ4/Hn7cXg8Ipo6XFAJQJJJB6VCQEtHN5wuN5xuQK8WYI3RweURcdrWBRGATquEQaNCs8MJnbZ3W+UNDtS2dkGjBKaNM+NkSyd+94N8fH6oHut3VPtdC7+TbUG3y4Pd1a2wxmigUyth63RBr1ai2eGEQiWgxyXCLQIigOUz07H7RCsa7F047eiWrktmnRJtTjcy46Ok60Ig77nY4/GgvVuEQavoO+a9fdHldqOjW5TqUysAc5QGto5uad8qT7ejvrUTHvT24S0z05FjjcGj7x+ERiNAo1AgIUaLqalmtHZ0Y2v5GXgARGsUWPNvE/HWrhq0dbnQ0tENl9vde23t66dDp2zo6BYxKcmAqiaHNO7Gx0Whq7sH9W3dwW9KA1g8LQnP33jxkNcbLoIoimLEtj6IlpYWFBQUYN68ebjzzjuRkJCAo0ePIjs7G9nZ2WG1YbfbYTKZYLPZYDQah7W+G/+0E18daxrWNseScbF6nGzpDHv5aeNM2H/SNoIVATmJBlQ0Os56/R8VpuO1kuphrKhXbJQaLR0uFE1JwoYD9WGtE7gvD1yZh99/Vj6idX5beY+Lbx8P5Gz6/9LsuFG5Hgy2nXM5D4cyfoPxngehjEYfPXBlHv62r+6crhPAuV9rhltOogG5iYawjs+5HsezkRijxa6fLxjWNody/x7Tn8z85je/QVpaGl5++WVpWmZmZgQrIiIiorFmTH9n5oMPPsD06dPxgx/8AImJiSgoKMCf/vSnAddxOp2w2+1+LyIiIjp/jekwU1lZiRdeeAG5ubn45JNPcOedd+Kee+7BK6+8EnKdtWvXwmQySa+0tLRRrJiIiIhG25gOMx6PBxdddBGeeOIJFBQUYMWKFbjjjjvw4osvhlxnzZo1sNls0qumpmYUKyYiIqLRNqbDTHJyMiZNmuQ3beLEiaiuDv3FPK1WC6PR6PciIiKi89eYDjOzZs3CkSNH/KaVl5cjIyMjQhURERHRWDOmw8x9992HnTt34oknnkBFRQXeeOMN/M///A9WrlwZ6dIAAJflxo1o+1olEKNVIFojQKPofUZAILUCmJZq7HcgBXxzcHWq3rbiotRQCkBOQhSU6P1TOkuUGkVTrJiXFw+dSkCiQQOtovdPLC/NsgDofd6FUaeEXt3b5rhYPZZdmIJlF6ZggtWAJKMWKgVwWU4cJlgN0PX9jZwCgEmvwqXZFpj1KsRoFYjVqzDeogcA5CZGYYLVgOz4KGRY9NCre9fT+OxMtFaBcWYdDFoF9GoFZmdboFcLiItSQwEgLloDvUrAxCRD73NtdEoUTbHi0iwLVEJv30RpBABAWqwOhVkWZMdHQSP0bifZqIVBq4BWCWn7qSYtjDol1AKgVQrISYiS6kkxaTEvLx4GrX+PT88wI9Wsw6ycOExJMWKC1YCiyVYkGDQAAKUAjLfocWmWBWqh9/3sbAuSjFoUTbHi9tmZKEg3oyDNjBtnpKEwq3fe9Awz9GoFpmeYYYlSY7xF79dXKgGI1fd2uF4NmHRKjLfoMcFqwLILU3BplsWvX4omW2HWq6BX944R75jKTYiCWugbd6reeTp177hJNmqh9Rl73h9VApBo0EAjAGqhdyx6x970DDMmWA1INeug62vDqFNK6yYYNNJ+mfUqxPaNE99+H2fW+W1TLfTWBvQ+Z8Z32WmpRmiVveNFr4Y0zr1jcFZOHAozLShIN+P22ZlYdmEKpqQYMS8vHpYode8+Knr76YIkAwqzLChIM2N6uhnKvnHmnZ+TEIV5efFIMGgwPcMMnUpATkI0LsuNg1bZW6sAwKT75o9FBQCXZlukcyY7PgqpZh30KgGXZveOSe8x9YqPViPDopf63qhVIEqtwGW5vWMs1ayTakrsG2dalYDLcuJgiVIjRquASadEslELndJ//KHv+GoUvX0WrRGgVyswKycOyy5MQYJBg3kT4pEdH9XvGpFs1ErnqDVGAwUAvUZAXLQa0zPMQN+x8j4/Beh9tkqCQYPLcuOQYNAgLkotjaFxZh0yLHoYdUppX/VqAeMteqSaddL4iunbF62i95jOmxCP1L4xolH2jrkkoxYF6WbMzrb49b2ir/+np5ulujMsepj1KqlNvUaAWuhdVkDv+TklxSidw959NuuU0vgKxXsuRvddewxahXRdtOhV0jXJW59GAena6923DIseWsU3fTg724JZOXFQ9vW3qW8sLrswBfPy4qXrfbRGIV2HvP0qXVv7+sm7/UlJBr9xNz4uCkkxmpD7NZDCzNizWm+4jOnnzADARx99hDVr1uDo0aPIzMzE/fffjzvuuCPs9UfyOTNEREQ0MoZy/x7zYeZcMcwQERHJz1Du32P610xEREREg2GYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZY5ghIiIiWWOYISIiIlljmCEiIiJZUw2+iLx5H3Bst9sjXAkRERGFy3vfDucfKjjvw0xbWxsAIC0tLcKVEBER0VC1tbXBZDINuMx5/28zeTwe1NXVISYmBoIgDL5CmOx2O9LS0lBTU8N/8ykA+yY49kto7Jvg2C+hsW+CO5/6RRRFtLW1ISUlBQrFwN+KOe8/mVEoFBg3btyItW80GmU/YEYK+yY49kto7Jvg2C+hsW+CO1/6ZbBPZLz4BWAiIiKSNYYZIiIikjWGmbOk1Wrx6KOPQqvVRrqUMYd9Exz7JTT2TXDsl9DYN8F9W/vlvP8CMBEREZ3f+MkMERERyRrDDBEREckawwwRERHJGsMMERERyRrDzFlat24dxo8fD51Oh8LCQuzatSvSJY2qX/7ylxAEwe91wQUXSPO7urqwcuVKxMXFwWAw4Hvf+x4aGhoiWPHI2bZtGxYvXoyUlBQIgoD333/fb74oinjkkUeQnJwMvV6PBQsW4OjRo37LNDc346abboLRaITZbMa///u/w+FwjOJeDL/B+uWWW27pN4auuuoqv2XOx35Zu3YtLrnkEsTExCAxMRFLly7FkSNH/JYJ5/yprq7G1VdfjaioKCQmJmL16tXo6ekZzV0ZduH0zdy5c/uNmx//+Md+y5xvffPCCy9g2rRp0oPwZs6ciQ0bNkjzv63jxRfDzFl4++23cf/99+PRRx/F3r17kZ+fj0WLFqGxsTHSpY2qyZMn49SpU9Jr+/bt0rz77rsPH374If7yl79g69atqKurw7XXXhvBakdOe3s78vPzsW7duqDzn3rqKTz33HN48cUXUVJSgujoaCxatAhdXV3SMjfddBMOHjyIzz77DB999BG2bduGFStWjNYujIjB+gUArrrqKr8x9Oabb/rNPx/7ZevWrVi5ciV27tyJzz77DC6XCwsXLkR7e7u0zGDnj9vtxtVXX43u7m589dVXeOWVV7B+/Xo88sgjkdilYRNO3wDAHXfc4TdunnrqKWne+dg348aNw5NPPok9e/Zg9+7duOKKK7BkyRIcPHgQwLd3vPgRachmzJghrly5UnrvdrvFlJQUce3atRGsanQ9+uijYn5+ftB5ra2tolqtFv/yl79I0w4fPiwCEHfs2DFKFUYGALG4uFh67/F4xKSkJPG3v/2tNK21tVXUarXim2++KYqiKB46dEgEIH799dfSMhs2bBAFQRBra2tHrfaRFNgvoiiKy5cvF5csWRJynW9Dv4iiKDY2NooAxK1bt4qiGN75849//ENUKBRifX29tMwLL7wgGo1G0el0ju4OjKDAvhFFUbz88svFe++9N+Q635a+iY2NFV966SWOlz78ZGaIuru7sWfPHixYsECaplAosGDBAuzYsSOClY2+o0ePIiUlBVlZWbjppptQXV0NANizZw9cLpdfH11wwQVIT0//1vVRVVUV6uvr/frCZDKhsLBQ6osdO3bAbDZj+vTp0jILFiyAQqFASUnJqNc8mrZs2YLExERMmDABd955J5qamqR535Z+sdlsAACLxQIgvPNnx44dmDp1KqxWq7TMokWLYLfbpf9bPx8E9o3X66+/jvj4eEyZMgVr1qxBR0eHNO987xu324233noL7e3tmDlzJsdLn/P+H5ocbmfOnIHb7fYbFABgtVrxr3/9K0JVjb7CwkKsX78eEyZMwKlTp/DYY4/hsssuw4EDB1BfXw+NRgOz2ey3jtVqRX19fWQKjhDv/gYbL9559fX1SExM9JuvUqlgsVjO6/666qqrcO211yIzMxPHjh3Dz372MxQVFWHHjh1QKpXfin7xeDxYtWoVZs2ahSlTpgBAWOdPfX190DHlnXc+CNY3AHDjjTciIyMDKSkp2L9/Px588EEcOXIE7733HoDzt2/++c9/YubMmejq6oLBYEBxcTEmTZqEsrIyjhcwzNBZKioqkn6eNm0aCgsLkZGRgXfeeQd6vT6ClZFcXH/99dLPU6dOxbRp05CdnY0tW7Zg/vz5Eaxs9KxcuRIHDhzw+74Z9QrVN77fmZo6dSqSk5Mxf/58HDt2DNnZ2aNd5qiZMGECysrKYLPZ8O6772L58uXYunVrpMsaM/hrpiGKj4+HUqns903xhoYGJCUlRaiqyDObzcjLy0NFRQWSkpLQ3d2N1tZWv2W+jX3k3d+BxktSUlK/L4/39PSgubn5W9VfWVlZiI+PR0VFBYDzv1/uuusufPTRR9i8eTPGjRsnTQ/n/ElKSgo6przz5C5U3wRTWFgIAH7j5nzsG41Gg5ycHFx88cVYu3Yt8vPz8eyzz3K89GGYGSKNRoOLL74YGzdulKZ5PB5s3LgRM2fOjGBlkeVwOHDs2DEkJyfj4osvhlqt9uujI0eOoLq6+lvXR5mZmUhKSvLrC7vdjpKSEqkvZs6cidbWVuzZs0daZtOmTfB4PNKF+tvg5MmTaGpqQnJyMoDzt19EUcRdd92F4uJibNq0CZmZmX7zwzl/Zs6ciX/+859+Ye+zzz6D0WjEpEmTRmdHRsBgfRNMWVkZAPiNm/OxbwJ5PB44nc5v9XjxE+lvIMvRW2+9JWq1WnH9+vXioUOHxBUrVohms9nvm+LnuwceeEDcsmWLWFVVJX755ZfiggULxPj4eLGxsVEURVH88Y9/LKanp4ubNm0Sd+/eLc6cOVOcOXNmhKseGW1tbWJpaalYWloqAhCffvppsbS0VDxx4oQoiqL45JNPimazWfzb3/4m7t+/X1yyZImYmZkpdnZ2Sm1cddVVYkFBgVhSUiJu375dzM3NFW+44YZI7dKwGKhf2traxJ/85Cfijh07xKqqKvHzzz8XL7roIjE3N1fs6uqS2jgf++XOO+8UTSaTuGXLFvHUqVPSq6OjQ1pmsPOnp6dHnDJlirhw4UKxrKxM/Pjjj8WEhARxzZo1kdilYTNY31RUVIi/+tWvxN27d4tVVVXi3/72NzErK0ucM2eO1Mb52DcPPfSQuHXrVrGqqkrcv3+/+NBDD4mCIIiffvqpKIrf3vHii2HmLD3//PNienq6qNFoxBkzZog7d+6MdEmj6rrrrhOTk5NFjUYjpqamitddd51YUVEhze/s7BT/3//7f2JsbKwYFRUlLlu2TDx16lQEKx45mzdvFgH0ey1fvlwUxd4/z3744YdFq9UqarVacf78+eKRI0f82mhqahJvuOEG0WAwiEajUbz11lvFtra2COzN8BmoXzo6OsSFCxeKCQkJolqtFjMyMsQ77rij3/8QnI/9EqxPAIgvv/yytEw458/x48fFoqIiUa/Xi/Hx8eIDDzwgulyuUd6b4TVY31RXV4tz5swRLRaLqNVqxZycHHH16tWizWbza+d865vbbrtNzMjIEDUajZiQkCDOnz9fCjKi+O0dL74EURTF0fsciIiIiGh48TszREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNEREQkawwzREREJGsMM0RERCRrDDNENOpuueUWLF26NGLbv/nmm/HEE0+Etez111+P3//+9yNcERGdCz4BmIiGlSAIA85/9NFHcd9990EURZjN5tEpyse+fftwxRVX4MSJEzAYDIMuf+DAAcyZMwdVVVUwmUyjUCERDRXDDBENq/r6eunnt99+G4888giOHDkiTTMYDGGFiJFy++23Q6VS4cUXXwx7nUsuuQS33HILVq5cOYKVEdHZ4q+ZiGhYJSUlSS+TyQRBEPymGQyGfr9mmjt3Lu6++26sWrUKsbGxsFqt+NOf/oT29nbceuutiImJQU5ODjZs2OC3rQMHDqCoqAgGgwFWqxU333wzzpw5E7I2t9uNd999F4sXL/ab/t///d/Izc2FTqeD1WrF97//fb/5ixcvxltvvXXunUNEI4JhhojGhFdeeQXx8fHYtWsX7r77btx55534wQ9+gEsvvRR79+7FwoULcfPNN6OjowMA0NraiiuuuAIFBQXYvXs3Pv74YzQ0NOCHP/xhyG3s378fNpsN06dPl6bt3r0b99xzD371q1/hyJEj+PjjjzFnzhy/9WbMmIFdu3bB6XSOzM4T0TlhmCGiMSE/Px+/+MUvkJubizVr1kCn0yE+Ph533HEHcnNz8cgjj6CpqQn79+8HAPzXf/0XCgoK8MQTT+CCCy5AQUEB/vznP2Pz5s0oLy8Puo0TJ05AqVQiMTFRmlZdXY3o6Gh897vfRUZGBgoKCnDPPff4rZeSkoLu7m6/X6ER0djBMENEY8K0adOkn5VKJeLi4jB16lRpmtVqBQA0NjYC6P0i7+bNm6Xv4BgMBlxwwQUAgGPHjgXdRmdnJ7Rard+XlK+88kpkZGQgKysLN998M15//XXp0x8vvV4PAP2mE9HYwDBDRGOCWq32ey8Igt80bwDxeDwAAIfDgcWLF6OsrMzvdfTo0X6/JvKKj49HR0cHuru7pWkxMTHYu3cv3nzzTSQnJ+ORRx5Bfn4+WltbpWWam5sBAAkJCcOyr0Q0vBhmiEiWLrroIhw8eBDjx49HTk6O3ys6OjroOhdeeCEA4NChQ37TVSoVFixYgKeeegr79+/H8ePHsWnTJmn+gQMHMG7cOMTHx4/Y/hDR2WOYISJZWrlyJZqbm3HDDTfg66+/xrFjx/DJJ5/g1ltvhdvtDrpOQkICLrroImzfvl2a9tFHH+G5555DWVkZTpw4gVdffRUejwcTJkyQlvniiy+wcOHCEd8nIjo7DDNEJEspKSn48ssv4Xa7sXDhQkydOhWrVq2C2WyGQhH60nb77bfj9ddfl96bzWa89957uOKKKzBx4kS8+OKLePPNNzF58mQAQFdXF95//33ccccdI75PRHR2+NA8IvpW6ezsxIQJE/D2229j5syZgy7/wgsvoLi4GJ9++ukoVEdEZ4OfzBDRt4per8err7464MP1fKnVajz//PMjXBURnQt+MkNERESyxk9miIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1hhmiIiISNYYZoiIiEjWGGaIiIhI1v5/Xylls2DUZIYAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = np.hstack(unit_spiketimes)\n", + "y = np.hstack([np.full_like(s, u) for u, s in zip(units, unit_spiketimes)])\n", + "plt.plot(x, y, \"|\")\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Unit\");" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "unit_key = (ephys.CuratedClustering.Unit & key & \"unit = '6'\").fetch1(\"KEY\")\n", + "unit_data = (\n", + " ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key\n", + ").fetch1()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ryyzrFy5Ejt37sSHH3442pcyIpj5SZGSkhIYjUa0traGvb+1tRUVFRVRP6eiokLT7Sk19HyvIpnNZixevBgHDhwYjkukJMT6vbLb7cjKyhqlqyItTjnlFP5ujaA77rgDr7/+OtauXYuJEyfGve14ed5i8JMiFosFJ554It577z3lfT6fD++9915YxiDU0qVLw24PAO+8807M21Nq6PleRfJ6vdixYwcqKyuH6zJJJ/5ejX3btm3j79YIkGUZd9xxB1599VW8//77qK2tTfg54+b3a7QrrseTP/3pT7LVapXXrFkj7969W77tttvkgoICuaWlRZZlWb7++uvlH/zgB8rtP/roI9lkMsmPPfaYvGfPHvmhhx6SzWazvGPHjtH6K2QMrd+r//qv/5Lffvtt+eDBg/LmzZvla6+9VrbZbPKuXbtG66+QMXp6euStW7fKW7dulQHIjz/+uLx161b56NGjsizL8g9+8AP5+uuvV25/6NAhOTs7W7733nvlPXv2yKtXr5aNRqP81ltvjdZfIaNo/X498cQT8muvvSbv379f3rFjh/ztb39bNhgM8rvvvjtaf4WMcfvtt8v5+fnyBx98IDc3Nytv/f39ym3G6/MWg58Ue+qpp+RJkybJFotFPuWUU+RNmzYpHzvrrLPkG2+8Mez2f/7zn+UZM2bIFotFnjt3rvzGG2+M8BVnLi3fq7vuuku5bXl5uXzxxRfLW7ZsGYWrzjyiFTryTXx/brzxRvmss84a8jmLFi2SLRaLPGXKFPm5554b8evOVFq/X48++qg8depU2WazyUVFRfLZZ58tv//++6Nz8Rkm2vcJQNjvy3h93pJkWZZHOttERERENFpY80NEREQZhcEPERERZRQGP0RERJRRGPwQERFRRmHwQ0RERBmFwQ8RERFlFAY/RERElFEY/BAREVFGYfBDRGnja1/7Gq688spR+/rXX389fvKTnwzb/e/evRsTJ05EX1/fsH0NIkqME56JaERIkhT34w899BC+853vQJZlFBQUjMxFhdi+fTvOPfdcHD16FLm5ucP2db70pS9h4cKF+OEPfzhsX4OI4mPwQ0QjoqWlRfn/l156CQ8++CD27t2rvC83N3dYg45Evv71r8NkMuGZZ54Z1q/zxhtv4NZbb0VdXR1MJtOwfi0iio7HXkQ0IioqKpS3/Px8SJIU9r7c3Nwhx15nn3027rzzTtx1110oLCxEeXk5nn32WfT19eGmm25CXl4epk2bhn/+859hX2vnzp246KKLkJubi/Lyclx//fU4duxYzGvzer14+eWXcdlll4W9f/LkyXjkkUdwww03IDc3FzU1Nfj73/+O9vZ2XHHFFcjNzcWCBQvw2WefKZ9z9OhRXHbZZSgsLEROTg7mzp2LN998U/n4+eefj87OTqxbty7Jf1Ei0ovBDxGltd/97ncoKSnBJ598gjvvvBO33347vvzlL+O0007Dli1bsGLFClx//fXo7+8HAHR1deHcc8/F4sWL8dlnn+Gtt95Ca2srrrnmmphf4/PPP0d3dzdOOumkIR974okncPrpp2Pr1q245JJLcP311+OGG27AV7/6VWzZsgVTp07FDTfcAJFEX7lyJZxOJ9avX48dO3bg0UcfDctoWSwWLFq0CBs2bEjxvxQRqcXgh4jS2sKFC/HAAw9g+vTpuO+++2Cz2VBSUoJbb70V06dPx4MPPoiOjg58/vnnAIBf/OIXWLx4MX7yk59g1qxZWLx4MX77299i7dq12LdvX9SvcfToURiNRpSVlQ352MUXX4xvfOMbytdyOBw4+eST8eUvfxkzZszA97//fezZswetra0AgLq6Opx++umYP38+pkyZgksvvRTLli0Lu8+qqiocPXo0xf9SRKQWgx8iSmsLFixQ/t9oNKK4uBjz589X3ldeXg4AaGtrA+AvXF67dq1SQ5Sbm4tZs2YBAA4ePBj1awwMDMBqtUYtyg79+uJrxfv63/rWt/DII4/g9NNPx0MPPaQEZaGysrKUTBURjTwGP0SU1sxmc9ifJUkKe58IWHw+HwCgt7cXl112GbZt2xb2tn///iEZGKGkpAT9/f1wuVxxv774WvG+/te//nUcOnQI119/PXbs2IGTTjoJTz31VNh9dnZ2orS0VN0/ABGlHIMfIhpXTjjhBOzatQuTJ0/GtGnTwt5ycnKifs6iRYsA+OfwpEJ1dTW++c1v4pVXXsE999yDZ599NuzjO3fuxOLFi1PytYhIOwY/RDSurFy5Ep2dnbjuuuvw6aef4uDBg3j77bdx0003wev1Rv2c0tJSnHDCCfjwww+T/vp33XUX3n77bRw+fBhbtmzB2rVrMXv2bOXjR44cQWNjI5YvX5701yIifRj8ENG4UlVVhY8++gherxcrVqzA/Pnzcdddd6GgoAAGQ+yHvK9//et44YUXkv76Xq8XK1euxOzZs3HhhRdixowZ+OUvf6l8/I9//CNWrFiBmpqapL8WEenDIYdERPAXPc+cORMvvfQSli5dOixfw+VyYfr06XjxxRdx+umnD8vXIKLEmPkhIoK/A+v3v/993GGIyaqrq8P999/PwIdolDHzQ0RERBmFmR8iIiLKKAx+iIiIKKMw+CEiIqKMwuCHiIiIMgqDHyIiIsooDH6IiIgoozD4ISIioozC4IeIiIgyCoMfIiIiyij/PzM/oiMtBp7nAAAAAElFTkSuQmCC", "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 3 2025-08-29 10: \n", - " (Total: 1)" + "
" ] }, - "execution_count": 14, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "(ephys.Clustering() & key)#.delete()" + "sampling_rate = (ephys.EphysRecording & key).fetch1(\n", + " \"sampling_rate\"\n", + ") / 1000 # in kHz\n", + "plt.plot(\n", + " np.r_[: unit_data[\"peak_electrode_waveform\"].size] * 1 / sampling_rate,\n", + " unit_data[\"peak_electrode_waveform\"],\n", + ")\n", + "plt.xlabel(\"Time (ms)\")\n", + "plt.ylabel(r\"Voltage ($\\mu$V)\");" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 3, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Method for clustering\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

clustering_method_desc

\n", - " \n", - "
kilosort2kilosort2 clustering method
kilosort2.5kilosort2.5 clustering method
kilosort3kilosort3 clustering method
kilosort4kilosort4 clustering method
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*clustering_me clustering_met\n", - "+------------+ +------------+\n", - "kilosort2 kilosort2 clus\n", - "kilosort2.5 kilosort2.5 cl\n", - "kilosort3 kilosort3 clus\n", - "kilosort4 kilosort4 clus\n", - " (Total: 4)" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'key' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mkey\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'key' is not defined" + ] } ], "source": [ - "ephys.ClusteringMethod()" + "key" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 3, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", - "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", - "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", - "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", - " (Total: 4)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mQualityMetrics\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1608\u001b[0m, in \u001b[0;36mQualityMetrics.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1606\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 1607\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1608\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQC metrics file not found in: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutput_dir\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1610\u001b[0m metrics_df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(metric_fp)\n\u001b[1;32m 1612\u001b[0m \u001b[38;5;66;03m# Conform the dataframe to match the table definition\u001b[39;00m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: QC metrics file not found in: /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output" + ] } ], "source": [ - "ephys.ClusteringParamSet()" + "ephys.QualityMetrics().populate(key, display_progress=True)" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, "outputs": [ { "data": { @@ -2969,117 +6471,46 @@ " }\n", " \n", " \n", - " Manual table for defining a clustering task ready to be run\n", + " Type of probe, with specific electrodes geometry defined\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", + " \n", "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", " \n", - "

Total: 1

\n", + "

Total: 6

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 225 1 3 244_225_1_2025 load \n", - " (Total: 1)" + "*probe_type \n", + "+------------+\n", + "neuropixels 1.\n", + "neuropixels 1.\n", + "neuropixels 2.\n", + "Neuropixels 2.\n", + "neuropixels 2.\n", + "neuropixels UH\n", + " (Total: 6)" ] }, - "execution_count": 37, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.ClusteringTask() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "# # insert clustering task manually\n", - "# import numpy as np\n", - "# params_ks = {\n", - "# 'data_dtype': 'int16',\n", - "# 'n_chan_bin': 384,\n", - "# 'fs': 30000.0,\n", - "# 'batch_size': 100000,\n", - "# 'nblocks': 1,\n", - "# 'Th_universal': 9.0,\n", - "# 'Th_learned': 8.0,\n", - "# 'tmin': 0.0,\n", - "# 'tmax': np.inf,\n", - "# 'nt': 61,\n", - "# 'shift': None,\n", - "# 'scale': None,\n", - "# 'artifact_threshold': np.inf,\n", - "# 'nskip': 25,\n", - "# 'whitening_range': 32,\n", - "# 'highpass_cutoff': 300.0,\n", - "# 'binning_depth': 5.0,\n", - "# 'sig_interp': 20.0,\n", - "# 'drift_smoothing': [0.5, 0.5, 0.5],\n", - "# 'nt0min': 20,\n", - "# 'dmin': None,\n", - "# 'dminx': 32.0,\n", - "# 'min_template_size': 10.0,\n", - "# 'template_sizes': 5,\n", - "# 'nearest_chans': 10,\n", - "# 'nearest_templates': 100,\n", - "# 'max_channel_distance': 32.0,\n", - "# 'max_peels': 100,\n", - "# 'templates_from_data': True,\n", - "# 'n_templates': 6,\n", - "# 'n_pcs': 6,\n", - "# 'Th_single_ch': 6.0,\n", - "# 'acg_threshold': 0.1,\n", - "# 'ccg_threshold': 0.15,\n", - "# 'cluster_downsampling': 20,\n", - "# 'x_centers': None,\n", - "# 'duplicate_spike_ms': 0.15,\n", - "# 'position_limit': 100.0,\n", - "# 'save_preprocessed_copy': False,\n", - "# 'clear_cache': False,\n", - "# 'do_CAR': True,\n", - "# 'invert_sign': False,\n", - "# 'verbose_log': False,\n", - "# 'NTbuff': 100122,\n", - "# 'Nchan': 384,\n", - "# 'duplicate_spike_bins': 4,\n", - "# 'torch_device': 'cuda'\n", - "# }" + "# probe.ProbeType.insert1(\n", + "# dict(probe_type=\"Neuropixels 2.0 - Multishank\")\n", + "# ) # this info could be achieve from neuropixels meta file.\n", + "probe.ProbeType()" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -3120,158 +6551,67 @@ " border-radius: 6px;\n", " /* Position the tooltip text - see examples below! */\n", " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", - "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", - "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", - "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", - " (Total: 4)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# insert clustering task manually\n", - "# params_ks = {\n", - "# \"fs\": 30000,\n", - "# \"fshigh\": 150,\n", - "# \"minfr_goodchannels\": 0.1,\n", - "# \"Th\": [10, 4],\n", - "# \"lam\": 10,\n", - "# \"AUCsplit\": 0.9,\n", - "# \"minFR\": 0.02,\n", - "# \"momentum\": [20, 400],\n", - "# \"sigmaMask\": 30,\n", - "# \"ThPr\": 8,\n", - "# \"spkTh\": -6,\n", - "# \"reorder\": 1,\n", - "# \"nskip\": 25,\n", - "# \"GPU\": 1,\n", - "# \"Nfilt\": 1024,\n", - "# \"nfilt_factor\": 4,\n", - "# \"ntbuff\": 64,\n", - "# \"whiteningRange\": 32,\n", - "# \"nSkipCov\": 25,\n", - "# \"scaleproc\": 200,\n", - "# \"nPCs\": 3,\n", - "# \"useRAM\": 0,\n", - "# }\n", - "ephys.ClusteringParamSet.insert_new_params(\n", - " clustering_method=\"kilosort4\",\n", - " paramset_idx=3,\n", - " params=params_ks,\n", - " paramset_desc=\"si kilosort4 params acg:0.1, ccg:0.15, xcenters:None\",\n", - ")\n", - "ephys.ClusteringParamSet()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { + " z-index: 1;\n", + " }\n", + " #primary {\n", + " font-weight: bold;\n", + " color: black;\n", + " }\n", + " #nonprimary {\n", + " font-weight: normal;\n", + " color: white;\n", + " }\n", + "\n", + " /* Show the tooltip text when you mouse over the tooltip container */\n", + " .djtooltip:hover .djtooltiptext {\n", + " visibility: visible;\n", + " }\n", + " \n", + " \n", + " Type of probe, with specific electrodes geometry defined\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", + "
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", + " \n", + "

Total: 6

\n", + " " + ], "text/plain": [ - "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_oputput'" + "*probe_type \n", + "+------------+\n", + "neuropixels 1.\n", + "neuropixels 1.\n", + "neuropixels 2.\n", + "Neuropixels 2.\n", + "neuropixels 2.\n", + "neuropixels UH\n", + " (Total: 6)" ] }, - "execution_count": 39, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - "ks_path = file_path[0]+'/kilosort4/sorter_oputput'\n", - "ks_path" + "probe.ProbeType()" ] }, { "cell_type": "code", - "execution_count": 72, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - "ks_path = file_path[0]+'/kilosort4/sorter_output'\n", - "\n", - "ephys.ClusteringTask.insert1(\n", - " dict(\n", - " key,\n", - " paramset_idx=3,\n", - " task_mode=\"load\", # load or trigger\n", - " clustering_output_dir=ks_path,\n", - " )\n", - ")" - ] + "source": [] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -3329,67 +6669,55 @@ " }\n", " \n", " \n", - " Manual table for defining a clustering task ready to be run\n", + " Represent a physical probe with unique identification\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", "
\n", - "

insertion_number

\n", - " \n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

paramset_idx

\n", + "

probe_comment

\n", " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
19108323584Neuropixels 2.0 - Multishankfake probe
\n", " \n", - "

Total: 1

\n", + "

Total: 3

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 225 1 3 244_225_1_2025 load \n", - " (Total: 1)" + "*probe probe_type probe_comment \n", + "+------------+ +------------+ +------------+\n", + "19108323581 neuropixels 1. fake probe \n", + "19108323583 neuropixels 2. fake probe \n", + "19108323584 Neuropixels 2. fake probe \n", + " (Total: 3)" ] }, - "execution_count": 40, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(ephys.ClusteringTask() & key)#.delete()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [], - "source": [ - "ephys.Clustering.populate(key, display_progress=True)\n" + "probe.Probe.insert1(\n", + " dict(probe=\"19108323584\", probe_type=\"Neuropixels 2.0 - Multishank\", probe_comment=\"fake probe\")\n", + ") # this info could be achieve from neuropixels meta file.\n", + "probe.Probe()" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -3447,58 +6775,154 @@ " }\n", " \n", " \n", - " Clustering Procedure\n", + " \n", "
\n", " \n", " \n", - " \n", - "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", - "

animal_id

\n", - " animal id\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", "
\n", - "

session

\n", - " session number\n", + "

electrode

\n", + " electrode index, starts at 0\n", "
\n", - "

insertion_number

\n", - " \n", + "

shank

\n", + " shank index, starts at 0, advance left to right\n", "
\n", - "

paramset_idx

\n", - " \n", + "

shank_col

\n", + " column index, starts at 0, advance left to right\n", "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", + "

shank_row

\n", + " row index, starts at 0.\n", "
\n", - "

package_version

\n", - " \n", + "

x_coord

\n", + " (um) x coordinate of the electrode within the probe.\n", + "
\n", + "

y_coord

\n", + " (um) y coordinate of the electrode within the probe.\n", "
244225
Neuropixels 2.0 - Multishank000027.00.0
Neuropixels 2.0 - Multishank101059.00.0
Neuropixels 2.0 - Multishank200127.015.0
Neuropixels 2.0 - Multishank32025-08-29 10:35:37
01159.015.0
Neuropixels 2.0 - Multishank400227.030.0
Neuropixels 2.0 - Multishank501259.030.0
Neuropixels 2.0 - Multishank600327.045.0
Neuropixels 2.0 - Multishank701359.045.0
Neuropixels 2.0 - Multishank800427.060.0
Neuropixels 2.0 - Multishank901459.060.0
Neuropixels 2.0 - Multishank1000527.075.0
Neuropixels 2.0 - Multishank1101559.075.0
\n", - " \n", - "

Total: 1

\n", + "

...

\n", + "

Total: 5120

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 3 2025-08-29 10: \n", - " (Total: 1)" + "*probe_type *electrode shank shank_col shank_row x_coord y_coord \n", + "+------------+ +-----------+ +-------+ +-----------+ +-----------+ +---------+ +---------+\n", + "Neuropixels 2. 0 0 0 0 27.0 0.0 \n", + "Neuropixels 2. 1 0 1 0 59.0 0.0 \n", + "Neuropixels 2. 2 0 0 1 27.0 15.0 \n", + "Neuropixels 2. 3 0 1 1 59.0 15.0 \n", + "Neuropixels 2. 4 0 0 2 27.0 30.0 \n", + "Neuropixels 2. 5 0 1 2 59.0 30.0 \n", + "Neuropixels 2. 6 0 0 3 27.0 45.0 \n", + "Neuropixels 2. 7 0 1 3 59.0 45.0 \n", + "Neuropixels 2. 8 0 0 4 27.0 60.0 \n", + "Neuropixels 2. 9 0 1 4 59.0 60.0 \n", + "Neuropixels 2. 10 0 0 5 27.0 75.0 \n", + "Neuropixels 2. 11 0 1 5 59.0 75.0 \n", + " ...\n", + " (Total: 5120)" ] }, - "execution_count": 43, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.Clustering() & key" + "probe.ProbeType.Electrode() & 'probe_type = \"Neuropixels 2.0 - Multishank\"'" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -3538,258 +6962,83 @@ " padding: 5px 0;\n", " border-radius: 6px;\n", " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Clustering results of the spike sorting step.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
24422513
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 225 1 3 \n", - " (Total: 1)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'animal_id': 244, 'session': 186, 'insertion_number': 1, 'paramset_idx': 3}" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "key['paramset_idx']=3\n", - "key" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 0%| | 0/1 [00:00\n", - "685\n", - "12691145\n", - "HERE\n", - "685 685\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "12691145\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", - " 684]\n", - "['mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:26<00:00, 86.12s/it]\n" - ] - }, - { - "data": { + " position: absolute;\n", + " z-index: 1;\n", + " }\n", + " #primary {\n", + " font-weight: bold;\n", + " color: black;\n", + " }\n", + " #nonprimary {\n", + " font-weight: normal;\n", + " color: white;\n", + " }\n", + "\n", + " /* Show the tooltip text when you mouse over the tooltip container */\n", + " .djtooltip:hover .djtooltiptext {\n", + " visibility: visible;\n", + " }\n", + " \n", + " \n", + " The electrode configuration setting on a given probe\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "

electrode_config_hash

\n", + " \n", + "
\n", + "

probe_type

\n", + " e.g. neuropixels_1.0\n", + "
\n", + "

electrode_config_name

\n", + " user friendly name\n", + "
\n", + " \n", + "

Total: 0

\n", + " " + ], "text/plain": [ - "{'success_count': 1, 'error_list': []}" + "*electrode_con probe_type electrode_conf\n", + "+------------+ +------------+ +------------+\n", + "\n", + " (Total: 0)" ] }, - "execution_count": 78, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "(ephys.CuratedClustering).populate(key, display_progress=True)" + "probe.ElectrodeConfig()" ] }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'ephys' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241m.\u001b[39mProbeInsertion()\n", + "\u001b[0;31mNameError\u001b[0m: name 'ephys' is not defined" + ] + } + ], + "source": [ + "ephys.ProbeInsertion()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -3834,243 +7083,73 @@ " }\n", " #primary {\n", " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + " color: black;\n", + " }\n", + " #nonprimary {\n", + " font-weight: normal;\n", + " color: white;\n", + " }\n", + "\n", + " /* Show the tooltip text when you mouse over the tooltip container */\n", + " .djtooltip:hover .djtooltiptext {\n", + " visibility: visible;\n", + " }\n", + " \n", + " \n", + " Probe insertion implanted into an animal for a given session.\n", + "
\n", + "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
2442251307c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0mua470=BLOB==BLOB==BLOB=
2442251317c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4mua302=BLOB==BLOB==BLOB=
2442251327c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10mua396=BLOB==BLOB==BLOB=
2442251337c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua779=BLOB==BLOB==BLOB=
2442251347c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua274=BLOB==BLOB==BLOB=
2442251357c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank22mua747=BLOB==BLOB==BLOB=
2442251367c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good716=BLOB==BLOB==BLOB=
2442251377c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good475=BLOB==BLOB==BLOB=
2442251387c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank24good277=BLOB==BLOB==BLOB=
2442251397c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua772=BLOB==BLOB==BLOB=
24422513107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good563=BLOB==BLOB==BLOB=
244225
\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", "
\n", + "

animal_id

\n", + " animal id\n", + "
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", + "
10122219108323581
24416313117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank32mua563=BLOB==BLOB==BLOB=
19108323584
\n", - "

...

\n", - "

Total: 124

\n", + " \n", + "

Total: 2

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "244 225 1 3 0 7c36bff0-7661- Neuropixels 2. 0 mua 470 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 1 7c36bff0-7661- Neuropixels 2. 4 mua 302 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 2 7c36bff0-7661- Neuropixels 2. 10 mua 396 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 3 7c36bff0-7661- Neuropixels 2. 16 mua 779 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 4 7c36bff0-7661- Neuropixels 2. 16 mua 274 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 5 7c36bff0-7661- Neuropixels 2. 22 mua 747 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 6 7c36bff0-7661- Neuropixels 2. 20 good 716 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 7 7c36bff0-7661- Neuropixels 2. 20 good 475 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 8 7c36bff0-7661- Neuropixels 2. 24 good 277 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 9 7c36bff0-7661- Neuropixels 2. 26 mua 772 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 10 7c36bff0-7661- Neuropixels 2. 26 good 563 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 11 7c36bff0-7661- Neuropixels 2. 32 mua 563 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 124)" + "*animal_id *session *insertion_num probe \n", + "+-----------+ +---------+ +------------+ +------------+\n", + "101 22 2 19108323581 \n", + "244 163 1 19108323584 \n", + " (Total: 2)" ] }, - "execution_count": 45, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.CuratedClustering.Unit & key #& 'cluster_quality_label = \"good\"'" + "ephys.ProbeInsertion.insert1(\n", + " dict(\n", + " key,\n", + " probe='19108323584',\n", + " )\n", + ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", + "ephys.ProbeInsertion()" ] }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -4128,230 +7207,309 @@ " }\n", " \n", " \n", - " Properties of a given unit from a round of clustering (and curation)\n", + " Probe insertion implanted into an animal for a given session.\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "

animal_id

\n", + " animal id\n", + " \n", + " \n", "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
2441631007c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2mua23=BLOB==BLOB==BLOB=
2441631017c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6good1101=BLOB==BLOB==BLOB=
2441631027c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10good2531=BLOB==BLOB==BLOB=
2441631037c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good5420=BLOB==BLOB==BLOB=
2441631047c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank12mua1296=BLOB==BLOB==BLOB=
2441631057c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good2980=BLOB==BLOB==BLOB=
2441631067c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua1866=BLOB==BLOB==BLOB=
2441631077c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good4098=BLOB==BLOB==BLOB=
2441631087c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank27mua1666=BLOB==BLOB==BLOB=
2441631097c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good270=BLOB==BLOB==BLOB=
24416310107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good654=BLOB==BLOB==BLOB=
244
\n", + "

session

\n", + " session number\n", + "
\n", + "

insertion_number

\n", + " \n", + "
\n", + "

probe

\n", + " unique identifier for this model of probe (e.g. serial number)\n", + "
24416310117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua3618=BLOB==BLOB=19108323583
\n", + " \n", + "

Total: 1

\n", + " " + ], + "text/plain": [ + "*animal_id *session *insertion_num probe \n", + "+-----------+ +---------+ +------------+ +------------+\n", + "244 163 1 19108323583 \n", + " (Total: 1)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ephys.ProbeInsertion() & key" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " Parameter set to be used in a clustering procedure\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", "\n", "
\n", + "

paramset_idx

\n", + " \n", + "
\n", + "

clustering_method

\n", + " \n", + "
\n", + "

paramset_desc

\n", + " \n", + "
\n", + "

param_set_hash

\n", + " \n", + "
\n", + "

params

\n", + " dictionary of all applicable parameters\n", + "
0kilosort2Spike sorting using Kilosort2de78cee1-526f-319e-b6d5-8a2ba04963d8=BLOB=
\n", - "

...

\n", - "

Total: 265

\n", + " \n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "244 163 1 0 0 7c36bff0-7661- Neuropixels 2. 2 mua 23 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 1 7c36bff0-7661- Neuropixels 2. 6 good 1101 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 2 7c36bff0-7661- Neuropixels 2. 10 good 2531 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 3 7c36bff0-7661- Neuropixels 2. 14 good 5420 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 4 7c36bff0-7661- Neuropixels 2. 12 mua 1296 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 5 7c36bff0-7661- Neuropixels 2. 14 good 2980 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 6 7c36bff0-7661- Neuropixels 2. 16 mua 1866 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 7 7c36bff0-7661- Neuropixels 2. 20 good 4098 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 8 7c36bff0-7661- Neuropixels 2. 27 mua 1666 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 9 7c36bff0-7661- Neuropixels 2. 26 good 270 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 10 7c36bff0-7661- Neuropixels 2. 26 good 654 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 11 7c36bff0-7661- Neuropixels 2. 26 mua 3618 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 265)" + "*paramset_idx clustering_met paramset_desc param_set_hash params \n", + "+------------+ +------------+ +------------+ +------------+ +--------+\n", + "0 kilosort2 Spike sorting de78cee1-526f- =BLOB= \n", + " (Total: 1)" ] }, - "execution_count": 59, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.CuratedClustering.Unit & \"animal_id=244\" & \"session=163\" #& \"unit>263\" #& 'cluster_quality_label = \"good\"'" + "# # insert clustering task manually\n", + "# params_ks = {\n", + "# \"fs\": 30000,\n", + "# \"fshigh\": 150,\n", + "# \"minfr_goodchannels\": 0.1,\n", + "# \"Th\": [10, 4],\n", + "# \"lam\": 10,\n", + "# \"AUCsplit\": 0.9,\n", + "# \"minFR\": 0.02,\n", + "# \"momentum\": [20, 400],\n", + "# \"sigmaMask\": 30,\n", + "# \"ThPr\": 8,\n", + "# \"spkTh\": -6,\n", + "# \"reorder\": 1,\n", + "# \"nskip\": 25,\n", + "# \"GPU\": 1,\n", + "# \"Nfilt\": 1024,\n", + "# \"nfilt_factor\": 4,\n", + "# \"ntbuff\": 64,\n", + "# \"whiteningRange\": 32,\n", + "# \"nSkipCov\": 25,\n", + "# \"scaleproc\": 200,\n", + "# \"nPCs\": 3,\n", + "# \"useRAM\": 0,\n", + "# }\n", + "# ephys.ClusteringParamSet.insert_new_params(\n", + "# clustering_method=\"kilosort2\",\n", + "# paramset_idx=0,\n", + "# params=params_ks,\n", + "# paramset_desc=\"Spike sorting using Kilosort2\",\n", + "# )\n", + "Ephys.ClusteringParamSet()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Massive Populates:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00)])\n", + "Serial Number is 23107806302 while inserted probeserial is: 23107806184\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 11\u001b[0m\n\u001b[1;32m 3\u001b[0m keys \u001b[38;5;241m=\u001b[39m [{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m242\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 4\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m243\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 5\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m244\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 6\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m245\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 7\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m246\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 8\u001b[0m ]\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m keys:\n\u001b[0;32m---> 11\u001b[0m \u001b[43mpopulate_ephys\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/populate_ephys.py:58\u001b[0m, in \u001b[0;36mpopulate_ephys\u001b[0;34m(key)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;66;03m# TODO choose a different probe when they exist\u001b[39;00m\n\u001b[1;32m 51\u001b[0m ephys\u001b[38;5;241m.\u001b[39mProbeInsertion\u001b[38;5;241m.\u001b[39minsert1(\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 53\u001b[0m key,\n\u001b[1;32m 54\u001b[0m probe\u001b[38;5;241m=\u001b[39m(probe\u001b[38;5;241m.\u001b[39mProbe() \u001b[38;5;241m&\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprobe_type=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNeuropixels 2.0 - Multishank\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mfetch(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprobe\u001b[39m\u001b[38;5;124m'\u001b[39m)[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 55\u001b[0m ), skip_duplicates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 56\u001b[0m )\n\u001b[0;32m---> 58\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEphysRecording\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 62\u001b[0m key[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparamset_idx\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3\u001b[39m\n\u001b[1;32m 63\u001b[0m file_path \u001b[38;5;241m=\u001b[39m (ephys\u001b[38;5;241m.\u001b[39mEphysRecording\u001b[38;5;241m.\u001b[39mEphysFile() \u001b[38;5;241m&\u001b[39m key)\u001b[38;5;241m.\u001b[39mfetch(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_path\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", + "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:425\u001b[0m, in \u001b[0;36mEphysRecording.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 425\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 426\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo Open Ephys data found for probe insertion: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(key)\n\u001b[1;32m 427\u001b[0m )\n\u001b[1;32m 428\u001b[0m \u001b[38;5;66;03m#print(probe_data)\u001b[39;00m\n\u001b[1;32m 429\u001b[0m \u001b[38;5;66;03m#print(probe_data.ap_meta)\u001b[39;00m\n\u001b[1;32m 430\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m probe_data\u001b[38;5;241m.\u001b[39map_meta:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}" + ] + } + ], + "source": [ + "from populate_ephys import populate_ephys\n", + "\n", + "keys = [{'animal_id' : 288, 'session': 242, 'insertion_number': 1},\n", + " {'animal_id' : 288, 'session': 243, 'insertion_number': 1},\n", + " {'animal_id' : 288, 'session': 244, 'insertion_number': 1},\n", + " {'animal_id' : 288, 'session': 245, 'insertion_number': 1},\n", + " {'animal_id' : 288, 'session': 246, 'insertion_number': 1},\n", + " ]\n", + "\n", + "for key in keys:\n", + " populate_ephys(key)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 2, "metadata": { "collapsed": true, "jupyter": { @@ -4363,299 +7521,3660 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2025-05-30 14:24:11,075][INFO]: Deleting 621 rows from `lab_npx_ephys`.`_curated_clustering__unit`\n", - "[2025-05-30 14:24:11,081][INFO]: Deleting 1 rows from `lab_npx_ephys`.`_curated_clustering`\n" + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 124\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_228_1_2025-07-03_13-57-56/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_228_1_2025-07-03_13-57-56/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 315\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_229_1_2025-07-03_14-04-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_229_1_2025-07-03_14-04-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 408\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_230_1_2025-07-03_14-10-14/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_230_1_2025-07-03_14-10-14/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 569\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.70it/s]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_231_1_2025-07-03_14-20-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_231_1_2025-07-03_14-20-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 548\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_233_1_2025-07-03_14-27-59/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_233_1_2025-07-03_14-27-59/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 439\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "639\n", + "16597908\n", + "HERE\n", + "639 639\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "16597908\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638]\n", + "['good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:34<00:00, 154.88s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_266_1_2025-07-23_11-27-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_266_1_2025-07-23_11-27-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 639\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.71it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "660\n", + "10721364\n", + "HERE\n", + "660 660\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "10721364\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659]\n", + "['good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:37<00:00, 97.66s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_273_1_2025-07-24_11-55-31/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_273_1_2025-07-24_11-55-31/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 660\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.78it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "691\n", + "14436090\n", + "HERE\n", + "691 691\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "14436090\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", + " 684 685 686 687 688 689 690]\n", + "['good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:20<00:00, 140.38s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_275_1_2025-07-24_13-01-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_275_1_2025-07-24_13-01-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 691\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.69it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "690\n", + "15545910\n", + "HERE\n", + "690 690\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "15545910\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", + " 684 685 686 687 688 689]\n", + "['good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:35<00:00, 155.31s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_284_1_2025-07-31_10-36-32/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_284_1_2025-07-31_10-36-32/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 690\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.72it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "561\n", + "7838409\n", + "HERE\n", + "561 561\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "7838409\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560]\n", + "['mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:14<00:00, 74.76s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_290_1_2025-08-05_12-17-18/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_290_1_2025-08-05_12-17-18/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 561\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.91it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "654\n", + "10133761\n", + "HERE\n", + "654 654\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "10133761\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653]\n", + "['mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:38<00:00, 98.63s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_291_1_2025-08-06_11-21-48/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_291_1_2025-08-06_11-21-48/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 654\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.78it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "497\n", + "9719900\n", + "HERE\n", + "497 497\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "9719900\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496]\n", + "['good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:34<00:00, 94.26s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 497\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "594\n", + "10869318\n", + "HERE\n", + "594 594\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "10869318\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593]\n", + "['mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:47<00:00, 107.39s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.93it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 594\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "553\n", + "11262769\n", + "HERE\n", + "553 553\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "11262769\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552]\n", + "['mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:48<00:00, 108.18s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 553\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "602\n", + "14868285\n", + "HERE\n", + "602 602\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "14868285\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601]\n", + "['good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:33<00:00, 153.92s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 602\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.86it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "496\n", + "6621429\n", + "HERE\n", + "496 496\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "6621429\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495]\n", + "['mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:06<00:00, 66.85s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 496\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "539\n", + "13036038\n", + "HERE\n", + "539 539\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "13036038\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538]\n", + "['mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:04<00:00, 124.04s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 539\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "609\n", + "5333398\n", + "HERE\n", + "609 609\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "5333398\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608]\n", + "['good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [00:54<00:00, 54.08s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 609\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.85it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00\n", + "546\n", + "7487518\n", + "HERE\n", + "546 546\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "7487518\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545]\n", + "['good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:13<00:00, 73.58s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 546\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "679\n", + "11912947\n", + "HERE\n", + "679 679\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "11912947\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669 670 671 672 673 674 675 676 677 678]\n", + "['good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:59<00:00, 119.80s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", - " .Table{\n", - " border-collapse:collapse;\n", - " }\n", - " .Table th{\n", - " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", - " font-weight: normal; font-family: monospace; font-size: 100%;\n", - " }\n", - " .Table td{\n", - " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", - " }\n", - " .Table tr:nth-child(odd){\n", - " background: #ffffff;\n", - " color: #000000;\n", - " }\n", - " .Table tr:nth-child(even){\n", - " background: #f3f1ff;\n", - " color: #000000;\n", - " }\n", - " /* Tooltip container */\n", - " .djtooltip {\n", - " }\n", - " /* Tooltip text */\n", - " .djtooltip .djtooltiptext {\n", - " visibility: hidden;\n", - " width: 120px;\n", - " background-color: black;\n", - " color: #fff;\n", - " text-align: center;\n", - " padding: 5px 0;\n", - " border-radius: 6px;\n", - " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Spike waveforms and their mean across spikes for the given unit\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

waveform_mean

\n", - " (uV) mean waveform across spikes of the given unit\n", - "
\n", - "

waveforms

\n", - " (uV) (spike x sample) waveforms of a sampling of spikes at the given electrode for the given unit\n", - "
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank1=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank3=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank5=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank7=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank8=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank9=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank11=BLOB==BLOB=
\n", - "

...

\n", - "

Total: 384

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit *electrode_con *probe_type *electrode waveform_m waveforms \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +--------+ +--------+\n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 0 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 1 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 2 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 3 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 4 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 5 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 6 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 7 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 8 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 9 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 10 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 11 =BLOB= =BLOB= \n", - " ...\n", - " (Total: 384)" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet.Waveform() & \"session=163\" & \"unit>263\"" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "544\n", + "13769765\n", + "HERE\n", + "544 544\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "13769765\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543]\n", + "['mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:11<00:00, 131.14s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 544\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 0%| | 0/1 [00:00\n", + "670\n", + "16055880\n", + "HERE\n", + "670 670\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "16055880\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", + " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", + " 666 667 668 669]\n", + "['good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "WaveformSet: 0%| | 0/1 [01:22 2\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveformSet\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1464\u001b[0m, in \u001b[0;36mWaveformSet.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1462\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mPeakWaveform\u001b[38;5;241m.\u001b[39minsert1(unit_peak_waveform, ignore_extra_fields\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 1463\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m unit_electrode_waveforms:\n\u001b[0;32m-> 1464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveform\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43munit_electrode_waveforms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:419\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[0;32m--> 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 420\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrows\u001b[49m\n\u001b[1;32m 422\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:420\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[1;32m 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\n\u001b[0;32m--> 420\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m row \u001b[38;5;129;01min\u001b[39;00m rows\n\u001b[1;32m 422\u001b[0m )\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:872\u001b[0m, in \u001b[0;36mTable.__make_row_to_insert\u001b[0;34m(self, row, field_list, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[0;32m--> 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 873\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__make_placeholder(name, row[name], ignore_extra_fields)\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:873\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[1;32m 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m--> 873\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_placeholder\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m[\u001b[49m\u001b[43mname\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:809\u001b[0m, in \u001b[0;36mTable.__make_placeholder\u001b[0;34m(self, name, value, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 807\u001b[0m value \u001b[38;5;241m=\u001b[39m value\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 808\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_blob:\n\u001b[0;32m--> 809\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[43mblob\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 810\u001b[0m value \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 811\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexternal[attr\u001b[38;5;241m.\u001b[39mstore]\u001b[38;5;241m.\u001b[39mput(value)\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 812\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_external\n\u001b[1;32m 813\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m value\n\u001b[1;32m 814\u001b[0m )\n\u001b[1;32m 815\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_attachment:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:594\u001b[0m, in \u001b[0;36mpack\u001b[0;34m(obj, compress)\u001b[0m\n\u001b[1;32m 590\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, \u001b[38;5;28mbytes\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mstartswith(\n\u001b[1;32m 591\u001b[0m (\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmYm\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdj0\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 592\u001b[0m )\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n\u001b[0;32m--> 594\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBlob\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:581\u001b[0m, in \u001b[0;36mBlob.pack\u001b[0;34m(self, obj, compress)\u001b[0m\n\u001b[1;32m 579\u001b[0m blob \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprotocol \u001b[38;5;241m+\u001b[39m blob\n\u001b[1;32m 580\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compress \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(blob) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1000\u001b[39m:\n\u001b[0;32m--> 581\u001b[0m compressed \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m len_u64(blob) \u001b[38;5;241m+\u001b[39m \u001b[43mzlib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblob\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(compressed) \u001b[38;5;241m<\u001b[39m \u001b[38;5;28mlen\u001b[39m(blob):\n\u001b[1;32m 583\u001b[0m blob \u001b[38;5;241m=\u001b[39m compressed\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", - "{}\n" + "line 184, ap only\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "\n" + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 27.24it/s]\n" ] }, { - "ename": "KeyError", - "evalue": "'channels_indices'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mLFP\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:257\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, keys, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 253\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m)\n\u001b[1;32m 254\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m display_progress\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 256\u001b[0m ):\n\u001b[0;32m--> 257\u001b[0m status \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 259\u001b[0m success_list\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;241m1\u001b[39m)\n", - "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:335\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_generator:\n\u001b[0;32m--> 335\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 337\u001b[0m \u001b[38;5;66;03m# tripartite make - transaction is delayed until the final stage\u001b[39;00m\n\u001b[1;32m 338\u001b[0m gen \u001b[38;5;241m=\u001b[39m make(\u001b[38;5;28mdict\u001b[39m(key), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(make_kwargs \u001b[38;5;129;01mor\u001b[39;00m {}))\n", - "File \u001b[0;32m/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/ephys.py:611\u001b[0m, in \u001b[0;36mLFP.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 608\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe)\n\u001b[1;32m 609\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta)\n\u001b[1;32m 610\u001b[0m lfp_channel_ind \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mr_[\n\u001b[0;32m--> 611\u001b[0m \u001b[38;5;28mlen\u001b[39m(\u001b[43moe_probe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlfp_meta\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchannels_indices\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 612\u001b[0m \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m : \u001b[38;5;241m0\u001b[39m : \u001b[38;5;241m-\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_skip_channel_counts\n\u001b[1;32m 613\u001b[0m ]\n\u001b[1;32m 615\u001b[0m lfp \u001b[38;5;241m=\u001b[39m oe_probe\u001b[38;5;241m.\u001b[39mlfp_timeseries[:, lfp_channel_ind] \u001b[38;5;66;03m# (sample x channel)\u001b[39;00m\n\u001b[1;32m 616\u001b[0m lfp \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 617\u001b[0m lfp \u001b[38;5;241m*\u001b[39m np\u001b[38;5;241m.\u001b[39marray(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchannels_gains\u001b[39m\u001b[38;5;124m\"\u001b[39m])[lfp_channel_ind]\n\u001b[1;32m 618\u001b[0m )\u001b[38;5;241m.\u001b[39mT \u001b[38;5;66;03m# (channel x sample)\u001b[39;00m\n", - "\u001b[0;31mKeyError\u001b[0m: 'channels_indices'" + "name": "stdout", + "output_type": "stream", + "text": [ + "['/mnt/lab/data01/OpenEphys']\n", + "244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "/mnt/lab/data01/OpenEphys/244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" ] - } - ], - "source": [ - "## ephys.LFP.populate(key, display_progress=True) ## not supported for the new OpenEphys as LFP data is not saved separately.." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "units, unit_spiketimes = (\n", - " ephys.CuratedClustering.Unit\n", - " & key\n", - " & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")'\n", - ").fetch(\"unit\", \"spike_times\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ + }, { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x = np.hstack(unit_spiketimes)\n", - "y = np.hstack([np.full_like(s, u) for u, s in zip(units, unit_spiketimes)])\n", - "plt.plot(x, y, \"|\")\n", - "plt.xlabel(\"Time (s)\")\n", - "plt.ylabel(\"Unit\");" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "unit_key = (ephys.CuratedClustering.Unit & key & \"unit = '6'\").fetch1(\"KEY\")\n", - "unit_data = (\n", - " ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key\n", - ").fetch1()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "632\n", + "10798821\n", + "HERE\n", + "632 632\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "10798821\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631]\n", + "['mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:47<00:00, 107.50s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", + "Final metrics list length: 632\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.91it/s]\n", + "EphysRecording: 0%| | 0/1 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sampling_rate = (ephys.EphysRecording & key).fetch1(\n", - " \"sampling_rate\"\n", - ") / 1000 # in kHz\n", - "plt.plot(\n", - " np.r_[: unit_data[\"peak_electrode_waveform\"].size] * 1 / sampling_rate,\n", - " unit_data[\"peak_electrode_waveform\"],\n", - ")\n", - "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(r\"Voltage ($\\mu$V)\");" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39\n", + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39\n", + "inside openephys class\n", + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101/experiment1/recording1\n", + "recording1\n", + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101\n", + "if\n", + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': None}\n", + "line 118\n", + "['ProbeA']\n", + "23107806184\n", + "line145\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@high_cut': '6000.0', '@low_cut': '300.0', '@Channels': ''}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1', '@Channels': ''}}\n", + "{'@name': 'ProbeA', '@description': 'description', '@sample_rate': '30000.0', '@channel_count': '384', '@device_name': 'Neuropixels 2.0 - Multishank', 'PARAMETERS': {'@enable_stream': '1'}}\n" + ] + }, { - "ename": "NameError", - "evalue": "name 'key' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mkey\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'key' is not defined" + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 100%|██████████| 1/1 [00:56<00:00, 56.44s/it]\n" ] - } - ], - "source": [ - "key" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 169\n", + "ProbeA\n", + "ProbeA\n", + "line 184, ap only\n" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "QualityMetrics: 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mQualityMetrics\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1608\u001b[0m, in \u001b[0;36mQualityMetrics.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1606\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 1607\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1608\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQC metrics file not found in: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutput_dir\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1610\u001b[0m metrics_df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(metric_fp)\n\u001b[1;32m 1612\u001b[0m \u001b[38;5;66;03m# Conform the dataframe to match the table definition\u001b[39;00m\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: QC metrics file not found in: /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output" + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", - " .Table{\n", - " border-collapse:collapse;\n", - " }\n", - " .Table th{\n", - " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", - " font-weight: normal; font-family: monospace; font-size: 100%;\n", - " }\n", - " .Table td{\n", - " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", - " }\n", - " .Table tr:nth-child(odd){\n", - " background: #ffffff;\n", - " color: #000000;\n", - " }\n", - " .Table tr:nth-child(even){\n", - " background: #f3f1ff;\n", - " color: #000000;\n", - " }\n", - " /* Tooltip container */\n", - " .djtooltip {\n", - " }\n", - " /* Tooltip text */\n", - " .djtooltip .djtooltiptext {\n", - " visibility: hidden;\n", - " width: 120px;\n", - " background-color: black;\n", - " color: #fff;\n", - " text-align: center;\n", - " padding: 5px 0;\n", - " border-radius: 6px;\n", - " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Type of probe, with specific electrodes geometry defined\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", - " \n", - "

Total: 6

\n", - " " - ], - "text/plain": [ - "*probe_type \n", - "+------------+\n", - "neuropixels 1.\n", - "neuropixels 1.\n", - "neuropixels 2.\n", - "Neuropixels 2.\n", - "neuropixels 2.\n", - "neuropixels UH\n", - " (Total: 6)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# probe.ProbeType.insert1(\n", - "# dict(probe_type=\"Neuropixels 2.0 - Multishank\")\n", - "# ) # this info could be achieve from neuropixels meta file.\n", - "probe.ProbeType()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1037: /mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "kilosort4\n", + "/mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output/sorting_analyzer\n", + "\n", + "634\n", + "17191560\n", + "HERE\n", + "634 634\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "17191560\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", + " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", + " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", + " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", + " 630 631 632 633]\n", + "['mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", + " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua']\n" + ] + }, { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Type of probe, with specific electrodes geometry defined\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", - " \n", - "

Total: 6

\n", - " " - ], - "text/plain": [ - "*probe_type \n", - "+------------+\n", - "neuropixels 1.\n", - "neuropixels 1.\n", - "neuropixels 2.\n", - "Neuropixels 2.\n", - "neuropixels 2.\n", - "neuropixels UH\n", - " (Total: 6)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ProbeType()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [02:48<00:00, 168.23s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", - " .Table{\n", - " border-collapse:collapse;\n", - " }\n", - " .Table th{\n", - " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", - " font-weight: normal; font-family: monospace; font-size: 100%;\n", - " }\n", - " .Table td{\n", - " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", - " }\n", - " .Table tr:nth-child(odd){\n", - " background: #ffffff;\n", - " color: #000000;\n", - " }\n", - " .Table tr:nth-child(even){\n", - " background: #f3f1ff;\n", - " color: #000000;\n", - " }\n", - " /* Tooltip container */\n", - " .djtooltip {\n", - " }\n", - " /* Tooltip text */\n", - " .djtooltip .djtooltiptext {\n", - " visibility: hidden;\n", - " width: 120px;\n", - " background-color: black;\n", - " color: #fff;\n", - " text-align: center;\n", - " padding: 5px 0;\n", - " border-radius: 6px;\n", - " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Represent a physical probe with unique identification\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

probe_comment

\n", - " \n", - "
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
19108323584Neuropixels 2.0 - Multishankfake probe
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*probe probe_type probe_comment \n", - "+------------+ +------------+ +------------+\n", - "19108323581 neuropixels 1. fake probe \n", - "19108323583 neuropixels 2. fake probe \n", - "19108323584 Neuropixels 2. fake probe \n", - " (Total: 3)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe.insert1(\n", - " dict(probe=\"19108323584\", probe_type=\"Neuropixels 2.0 - Multishank\", probe_comment=\"fake probe\")\n", - ") # this info could be achieve from neuropixels meta file.\n", - "probe.Probe()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", - " .Table{\n", - " border-collapse:collapse;\n", - " }\n", - " .Table th{\n", - " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", - " font-weight: normal; font-family: monospace; font-size: 100%;\n", - " }\n", - " .Table td{\n", - " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", - " }\n", - " .Table tr:nth-child(odd){\n", - " background: #ffffff;\n", - " color: #000000;\n", - " }\n", - " .Table tr:nth-child(even){\n", - " background: #f3f1ff;\n", - " color: #000000;\n", - " }\n", - " /* Tooltip container */\n", - " .djtooltip {\n", - " }\n", - " /* Tooltip text */\n", - " .djtooltip .djtooltiptext {\n", - " visibility: hidden;\n", - " width: 120px;\n", - " background-color: black;\n", - " color: #fff;\n", - " text-align: center;\n", - " padding: 5px 0;\n", - " border-radius: 6px;\n", - " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

shank

\n", - " shank index, starts at 0, advance left to right\n", - "
\n", - "

shank_col

\n", - " column index, starts at 0, advance left to right\n", - "
\n", - "

shank_row

\n", - " row index, starts at 0.\n", - "
\n", - "

x_coord

\n", - " (um) x coordinate of the electrode within the probe.\n", - "
\n", - "

y_coord

\n", - " (um) y coordinate of the electrode within the probe.\n", - "
Neuropixels 2.0 - Multishank000027.00.0
Neuropixels 2.0 - Multishank101059.00.0
Neuropixels 2.0 - Multishank200127.015.0
Neuropixels 2.0 - Multishank301159.015.0
Neuropixels 2.0 - Multishank400227.030.0
Neuropixels 2.0 - Multishank501259.030.0
Neuropixels 2.0 - Multishank600327.045.0
Neuropixels 2.0 - Multishank701359.045.0
Neuropixels 2.0 - Multishank800427.060.0
Neuropixels 2.0 - Multishank901459.060.0
Neuropixels 2.0 - Multishank1000527.075.0
Neuropixels 2.0 - Multishank1101559.075.0
\n", - "

...

\n", - "

Total: 5120

\n", - " " - ], - "text/plain": [ - "*probe_type *electrode shank shank_col shank_row x_coord y_coord \n", - "+------------+ +-----------+ +-------+ +-----------+ +-----------+ +---------+ +---------+\n", - "Neuropixels 2. 0 0 0 0 27.0 0.0 \n", - "Neuropixels 2. 1 0 1 0 59.0 0.0 \n", - "Neuropixels 2. 2 0 0 1 27.0 15.0 \n", - "Neuropixels 2. 3 0 1 1 59.0 15.0 \n", - "Neuropixels 2. 4 0 0 2 27.0 30.0 \n", - "Neuropixels 2. 5 0 1 2 59.0 30.0 \n", - "Neuropixels 2. 6 0 0 3 27.0 45.0 \n", - "Neuropixels 2. 7 0 1 3 59.0 45.0 \n", - "Neuropixels 2. 8 0 0 4 27.0 60.0 \n", - "Neuropixels 2. 9 0 1 4 59.0 60.0 \n", - "Neuropixels 2. 10 0 0 5 27.0 75.0 \n", - "Neuropixels 2. 11 0 1 5 59.0 75.0 \n", - " ...\n", - " (Total: 5120)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ProbeType.Electrode() & 'probe_type = \"Neuropixels 2.0 - Multishank\"'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "EphysRecording: 100%|██████████| 1/1 [00:48<00:00, 48.85s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "line 169\n", + "ProbeA\n", + "ProbeA\n", + "line 184, ap only\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Clustering: 100%|██████████| 1/1 [00:00<00:00, 31.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['/mnt/lab/data01/OpenEphys']\n", + "244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", + "/mnt/lab/data01/OpenEphys/244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 0%| | 0/1 [00:00\n", + "570\n", + "10914628\n", + "HERE\n", + "570 570\n" + ] + }, { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " The electrode configuration setting on a given probe\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode_config_name

\n", - " user friendly name\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*electrode_con probe_type electrode_conf\n", - "+------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ElectrodeConfig()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", + " self._data[\"spike_depths\"] = np.sum(\n" + ] + }, { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
10122219108323581
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "101 22 2 19108323581 \n", - " (Total: 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "line 1167\n", + "10914628\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", + " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", + " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", + " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", + " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", + " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", + " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", + " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", + " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", + " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", + " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", + " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", + " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", + " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", + " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", + " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", + " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", + " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", + " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", + " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", + " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", + " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", + " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", + " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", + " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", + " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", + " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", + " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", + " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", + " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", + " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", + " 558 559 560 561 562 563 564 565 566 567 568 569]\n", + "['mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", + " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", + " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", + " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", + " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CuratedClustering: 100%|██████████| 1/1 [01:44<00:00, 104.72s/it]\n", + "QualityMetrics: 0%| | 0/1 [00:00\n", + "Checking /mnt/lab/data01/OpenEphys/244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", + "Checking /mnt/lab/data01/OpenEphys/244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", + "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final metrics list length: 570\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] } ], "source": [ - "ephys.ProbeInsertion()" + "from populate_ephys import populate_ephys\n", + "\n", + "keys = [{'animal_id' : 244, 'session': 225, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 228, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 229, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 230, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 231, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 233, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 266, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 273, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 275, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 283, 'insertion_number': 1}, \n", + " {'animal_id' : 244, 'session': 284, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 290, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 291, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 305, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 306, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 318, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 319, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 326, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 329, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 330, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 331, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 332, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 343, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 345, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 353, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 356, 'insertion_number': 1},\n", + " {'animal_id' : 244, 'session': 370, 'insertion_number': 1}, \n", + " ]\n", + "\n", + "for key in keys:\n", + " populate_ephys(key)\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -5744,7 +12134,7 @@ " }\n", " \n", " \n", - " Probe insertion implanted into an animal for a given session.\n", + " Clusters and waveforms metrics\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "\n", + " \n", + "\n", "\n", - "\n", + "\n", "
\n", @@ -5757,47 +12147,37 @@ "

insertion_number

\n", " \n", "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", + "

paramset_idx

\n", + " \n", "
10122219108323581
244163
244225119108323584
3
\n", " \n", - "

Total: 2

\n", + "

Total: 1

\n", " " ], "text/plain": [ - "*animal_id *session *insertion_num probe \n", + "*animal_id *session *insertion_num *paramset_idx \n", "+-----------+ +---------+ +------------+ +------------+\n", - "101 22 2 19108323581 \n", - "244 163 1 19108323584 \n", - " (Total: 2)" + "244 225 1 3 \n", + " (Total: 1)" ] }, - "execution_count": 6, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe='19108323584',\n", - " )\n", - ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - "ephys.ProbeInsertion()" + "ephys.QualityMetrics() & \"session = 225\"" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -5855,7 +12235,7 @@ " }\n", " \n", " \n", - " Probe insertion implanted into an animal for a given session.\n", + " Manual table for defining a clustering task ready to be run\n", "
\n", " \n", " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", @@ -5868,189 +12248,107 @@ "

insertion_number

\n", " \n", "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
244163119108323583
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 163 1 19108323583 \n", - " (Total: 1)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion() & key" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "
\n", "

paramset_idx

\n", " \n", "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", + "

clustering_output_dir

\n", + " clustering output directory relative to the clustering root data directory\n", "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", + "

task_mode

\n", + " 'load': load computed analysis results, 'trigger': trigger computation\n", "
0kilosort2Spike sorting using Kilosort2de78cee1-526f-319e-b6d5-8a2ba04963d8=BLOB=
24430513244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24430613244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24431813244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24431913244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24432613244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24432913244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433013244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433113244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433213244_332_1_2025-08-28_12-09-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24434313244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24434513244_345_1_2025-09-04_10-14-30/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24435313244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", - " \n", - "

Total: 1

\n", + "

...

\n", + "

Total: 14

\n", " " ], "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort2 Spike sorting de78cee1-526f- =BLOB= \n", - " (Total: 1)" + "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", + "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", + "244 305 1 3 244_305_1_2025 load \n", + "244 306 1 3 244_306_1_2025 load \n", + "244 318 1 3 244_318_1_2025 load \n", + "244 319 1 3 244_319_1_2025 load \n", + "244 326 1 3 244_326_1_2025 load \n", + "244 329 1 3 244_329_1_2025 load \n", + "244 330 1 3 244_330_1_2025 load \n", + "244 331 1 3 244_331_1_2025 load \n", + "244 332 1 3 244_332_1_2025 load \n", + "244 343 1 3 244_343_1_2025 load \n", + "244 345 1 3 244_345_1_2025 load \n", + "244 353 1 3 244_353_1_2025 load \n", + " ...\n", + " (Total: 14)" ] }, - "execution_count": 15, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# # insert clustering task manually\n", - "# params_ks = {\n", - "# \"fs\": 30000,\n", - "# \"fshigh\": 150,\n", - "# \"minfr_goodchannels\": 0.1,\n", - "# \"Th\": [10, 4],\n", - "# \"lam\": 10,\n", - "# \"AUCsplit\": 0.9,\n", - "# \"minFR\": 0.02,\n", - "# \"momentum\": [20, 400],\n", - "# \"sigmaMask\": 30,\n", - "# \"ThPr\": 8,\n", - "# \"spkTh\": -6,\n", - "# \"reorder\": 1,\n", - "# \"nskip\": 25,\n", - "# \"GPU\": 1,\n", - "# \"Nfilt\": 1024,\n", - "# \"nfilt_factor\": 4,\n", - "# \"ntbuff\": 64,\n", - "# \"whiteningRange\": 32,\n", - "# \"nSkipCov\": 25,\n", - "# \"scaleproc\": 200,\n", - "# \"nPCs\": 3,\n", - "# \"useRAM\": 0,\n", - "# }\n", - "# ephys.ClusteringParamSet.insert_new_params(\n", - "# clustering_method=\"kilosort2\",\n", - "# paramset_idx=0,\n", - "# params=params_ks,\n", - "# paramset_desc=\"Spike sorting using Kilosort2\",\n", - "# )\n", - "Ephys.ClusteringParamSet()" + "ephys.ClusteringTask() & \"session > 300\"" ] } ], From 4b78470716f75f5b9f80b8187d8484cdc7baa339 Mon Sep 17 00:00:00 2001 From: stamalip Date: Mon, 24 Nov 2025 15:27:21 +0200 Subject: [PATCH 2/2] delete some files --- run_sorting_si.py | 214 - test_npx_pipe (1).ipynb | 12376 -------------------------------------- 2 files changed, 12590 deletions(-) delete mode 100755 run_sorting_si.py delete mode 100755 test_npx_pipe (1).ipynb diff --git a/run_sorting_si.py b/run_sorting_si.py deleted file mode 100755 index 8ec37362..00000000 --- a/run_sorting_si.py +++ /dev/null @@ -1,214 +0,0 @@ -## Imports -# import matplotlib.pyplot as plt -import numpy as np -import pandas as pd -from pathlib import Path -import os -import numcodecs - -import warnings -warnings.simplefilter("ignore") - -import spikeinterface.full as si -# import probeinterface as pi -# from probeinterface.plotting import plot_probe - -import datajoint as dj -dj.config['database.host'] = 'database.eflab.org:3306' - -# exp = dj.create_virtual_module('experiments.py', 'lab_experiments') -# stim = dj.create_virtual_module('stimuli.py', 'lab_stimuli') -# beh = dj.create_virtual_module('behavior.py', 'lab_behavior') -rec = dj.create_virtual_module('recordings.py', 'lab_recordings') -# npx = dj.create_virtual_module('neuropixels.py', 'lab_neuropixels') - -## Helpful functions -def replace_directory(a_directory): - """ - Temporary Solution, use common.Paths.getLocal instead - """ - # Define the mapping - old_prefix1 = 'X:/OpenEphys\\' - new_prefix1 = '/mnt/lab/data/OpenEphys/' - - old_prefix2 = 'W:/OpenEphys\\' - new_prefix2 = '/mnt/lab/data01/OpenEphys/' - - old_prefix3 = 'W:/OpenEphys' - new_prefix3 = '/mnt/lab/data01/OpenEphys/' - - # Replace the prefix - if a_directory.startswith(old_prefix1): - return a_directory.replace(old_prefix1, new_prefix1) - elif a_directory.startswith(old_prefix2): - return a_directory.replace(old_prefix2, new_prefix2) - elif a_directory.startswith(old_prefix3): - return a_directory.replace(old_prefix3, new_prefix3) - else: - print('Something is wrong with the OpenEphys path') - - -def get_session_directory(session_key: dict) -> str: - """Retrieve the session directory with Neuropixels for the given session. - - Args: - session_key (dict): A dictionary mapping subject to an entry in the subject table, and session_datetime corresponding to a session in the database. - - Returns: - A string for the path to the session directory. - """ - rep_dir = replace_directory((rec.Recording & session_key).fetch1("target_path")) - print(rep_dir) - if not rep_dir: - raise ValueError(f"No path found for key: {session_key}") - #print(rep_dir) - - return rep_dir #session_dir/'Record Node 101/experiment1/recording1' - - -def get_key(): - while True: - # Get user inputs - animal_id = input("Enter animal_id: ").strip() - session = input("Enter session: ").strip() - - # Print and confirm - print("\nYou entered:") - print(f" animal_id : {animal_id}") - print(f" session : {session}") - confirm = input("Are these the correct inputs? (yes/no): ").strip().lower() - - # safety check to confirm the inputs - if confirm == "yes": - break - else: - print("Let's try again...\n") - - key = {'animal_id' : int(animal_id), 'session': int(session)} - print(f'processing key: {key}') - return key - - -def process_session(key): - # define number of cores for preprocessing: - n_cpus = os.cpu_count() - n_jobs = n_cpus - 4 - - #set paths - base_folder = Path(get_session_directory(key)) - openephys_folder = base_folder / 'Record Node 101' - to_save_folder = openephys_folder / 'experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/' - - #load rec - full_raw_rec = si.read_openephys(openephys_folder, load_sync_channel=False) - # #and probe info - # probe = full_raw_rec.get_probe() - - print('preprocessing..') - if (to_save_folder / "preprocessed").is_dir(): - recording_saved = si.load_extractor(to_save_folder / "preprocessed") - else: # do the preprocessing - recording_to_process = full_raw_rec - #filtering - recording_f = si.bandpass_filter(recording_to_process, freq_min=300, freq_max=9000) - recording_cmr = si.common_reference(recording_f, reference='global', operator='median') - #remove bad channels - bad_channel_ids, channel_labels = si.detect_bad_channels(recording_f, method='coherence+psd') - recording_good_channels_f = recording_f.remove_channels(bad_channel_ids) - recording_good_channels = si.common_reference(recording_good_channels_f, reference='global', operator='median') - # and save - job_kwargs = dict(n_jobs=n_jobs, chunk_duration="1s", progress_bar=True) - recording_saved = recording_good_channels.save(folder=to_save_folder / "preprocessed", **job_kwargs) - - print('create compressed preprocessed..') - if (to_save_folder / "preprocessed_compressed.zarr").is_dir(): - ## if compressed preprocessed exist: - print('compressed preprocessed already saved') - #recording_saved = si.read_zarr(to_save_folder / "preprocessed_compressed.zarr") - else: #save - compressor = numcodecs.Blosc(cname="zstd", clevel=9, shuffle=numcodecs.Blosc.BITSHUFFLE) - recording_saved = recording_good_channels.save(format="zarr", folder=to_save_folder / "preprocessed_compressed.zarr", - compressor=compressor, - **job_kwargs) - - ## run kilosort4 in container: - # define params - print('preparing to run kilosort..') - - # these params are for paramset_idx=3 - sorter_params = {"batch_size": 100000, - "acg_threshold":0.1, - "ccg_threshold":0.15, - "duplicate_spike_ms": 0.15, - "pool_engine": "process", - "n_jobs": 1, - "chunk_duration": "1s", - "progress_bar": True, - "mp_context": None, - "max_threads_per_worker": 1,} - - if (to_save_folder / "kilosort4").is_dir(): - print('sorting already saved') - sorting_KS4 = si.read_kilosort(to_save_folder / "kilosort4/sorter_output") - else: - print('run spike sorting') - # run spike sorting on entire recording - sorting_KS4 = si.run_sorter('kilosort4', recording_saved, - output_folder=to_save_folder / 'kilosort4', - verbose=True, docker_image=True, - **sorter_params) - print(sorting_KS4) - - #remove empty units if any - sorting_KS4 = sorting_KS4.remove_empty_units() - print(f'KS4 found {len(sorting_KS4.get_unit_ids())} non-empty units') - - ## create a sorting analyzer - if (to_save_folder / "sorting_analyzer").is_dir(): - print('analyzer already saved') - analyzer = si.load_sorting_analyzer( - folder=to_save_folder / "sorting_analyzer" - ) - - ## add: check that all metrics folders exist and - # print('metrics computed') - else: - print('analyzer...') - analyzer = si.create_sorting_analyzer( - sorting=sorting_KS4, - recording=recording_saved, - folder=to_save_folder / "sorting_analyzer", - format="binary_folder", - sparse=True, - overwrite=True - ) - - #compute stuff - print('computing metrics..') - analyzer.compute(["noise_levels", "random_spikes", "waveforms", "templates"]) - analyzer.compute( - "spike_amplitudes", - peak_sign="pos" - ) - analyzer.compute(["unit_locations", "spike_locations", "correlograms", "principal_components"]) - analyzer.compute('template_metrics', include_multi_channel_metrics=True) - - #compute quality metrics - dqm_params = si.get_default_qm_params() - analyzer.compute( - "quality_metrics", - qm_params=dqm_params - ) - - ## all processing done - print(f'processing done for {key}') - - -def main(): - key = get_key() - process_session(key) - - -if __name__ == "__main__": - main() - diff --git a/test_npx_pipe (1).ipynb b/test_npx_pipe (1).ipynb deleted file mode 100755 index 07149747..00000000 --- a/test_npx_pipe (1).ipynb +++ /dev/null @@ -1,12376 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "import datajoint as dj\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "dj.config['database.host'] = 'database.eflab.org:3306'\n", - "dj.config['database.user'] = 'eflab'\n", - "\n", - "\n", - "experiment_dir = '/mnt/lab/data01/OpenEphys'\n", - "db_prefix = 'lab_npx_'\n", - "dj.config[\"enable_python_native_blobs\"] = True\n", - "dj.config['custom'] = {'database_prefix': db_prefix,'ephys_root_data_dir': experiment_dir}\n", - "\n", - "dj.conn()\n", - "\n", - "# schemata = {'experiment_db' : 'lab_experiments',\n", - "# 'stimulus_db' : 'lab_stimuli',\n", - "# 'behavior_db' : 'lab_behavior',\n", - "# 'recording_db' : 'lab_recordings',\n", - "# 'mice_db' : 'lab_mice' }\n", - "\n", - "# # # create a virtual module for every database schema that you are going to use\n", - "# for schema, value in schemata.items():\n", - "# globals()[schema] = dj.create_virtual_module(schema, value, create_tables=True, create_schema=True)\n", - "\n", - "from build_pipeline import Subject, Session, Recording, probe, ephys, ephys_report\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "probe.ProbeType.Electrode()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

channel_idx

\n", - " channel index (index of the raw data)\n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

channel_name

\n", - " alias of the channel\n", - "
2441481-17c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0
244148107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank1
244148117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2
244148127c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank3
244148137c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4
244148147c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank5
244148157c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6
244148167c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank7
244148177c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank8
244148187c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank9
244148197c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10
2441481107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank11
\n", - "

...

\n", - "

Total: 20352

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *channel_idx electrode_conf probe_type electrode channel_name \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +-----------+ +------------+\n", - "244 148 1 -1 7c36bff0-7661- Neuropixels 2. 0 \n", - "244 148 1 0 7c36bff0-7661- Neuropixels 2. 1 \n", - "244 148 1 1 7c36bff0-7661- Neuropixels 2. 2 \n", - "244 148 1 2 7c36bff0-7661- Neuropixels 2. 3 \n", - "244 148 1 3 7c36bff0-7661- Neuropixels 2. 4 \n", - "244 148 1 4 7c36bff0-7661- Neuropixels 2. 5 \n", - "244 148 1 5 7c36bff0-7661- Neuropixels 2. 6 \n", - "244 148 1 6 7c36bff0-7661- Neuropixels 2. 7 \n", - "244 148 1 7 7c36bff0-7661- Neuropixels 2. 8 \n", - "244 148 1 8 7c36bff0-7661- Neuropixels 2. 9 \n", - "244 148 1 9 7c36bff0-7661- Neuropixels 2. 10 \n", - "244 148 1 10 7c36bff0-7661- Neuropixels 2. 11 \n", - " ...\n", - " (Total: 20352)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording.Channel()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "rec = dj.create_virtual_module('lab_recordings.py', 'lab_recordings')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Represent a physical probe with unique identification\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

probe_comment

\n", - " \n", - "
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
23107806184Neuropixels 2.0 - Multishank
23107806302Neuropixels 2.0 - Multishank
23107806304Neuropixels 2.0 - Multishank
23107806671Neuropixels 2.0 - Multishank
\n", - " \n", - "

Total: 6

\n", - " " - ], - "text/plain": [ - "*probe probe_type probe_comment \n", - "+------------+ +------------+ +------------+\n", - "19108323581 neuropixels 1. fake probe \n", - "19108323583 neuropixels 2. fake probe \n", - "23107806184 Neuropixels 2. \n", - "23107806302 Neuropixels 2. \n", - "23107806304 Neuropixels 2. \n", - "23107806671 Neuropixels 2. \n", - " (Total: 6)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'23107806304'" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe_idx=4\n", - "probe_choice= probe.Probe().fetch('probe')[probe_idx]\n", - "probe_choice" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "key = {\"animal_id\" : 299,\n", - " \"session\": 230,\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +-------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00)])\n", - "Serial Number is 23107806304 while inserted probeserial is: 23107806304\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Clustering: 100%|██████████| 1/1 [00:00<00:00, 272.76it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['/mnt/lab/data01/OpenEphys']\n", - "299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", - "/mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 0%| | 0/1 [00:00\n", - "740\n", - "1347793\n", - "HERE\n", - "740 740\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "1347793\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", - " 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701\n", - " 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719\n", - " 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737\n", - " 738 739]\n", - "['mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [00:09<00:00, 9.83s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/299_230_1_2025-11-20_12-48-08/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 740\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.31it/s]\n" - ] - } - ], - "source": [ - "from populate_ephys import populate_ephys\n", - "\n", - "key = {'animal_id' : 299, 'session': 230, 'insertion_number': 1}\n", - "populate_ephys(key,probe_idx)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " File session info\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

rec_idx

\n", - " unique recording index\n", - "
\n", - "

rec_aim

\n", - " aim\n", - "
\n", - "

software

\n", - " program identification number\n", - "
\n", - "

version

\n", - " version of program\n", - "
\n", - "

filename

\n", - " file\n", - "
\n", - "

source_path

\n", - " local path\n", - "
\n", - "

target_path

\n", - " shared drive path\n", - "
\n", - "

timestamp

\n", - " timestamp\n", - "
2883191neuropixelsOpenEphys0.6.7D:/OpenEphys\\2025-11-10_14-20-58W:/OpenEphys\\288_319_1_2025-11-10_14-21-102025-11-10 14:21:14
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *rec_idx rec_aim software version filename source_path target_path timestamp \n", - "+-----------+ +---------+ +---------+ +------------+ +-----------+ +---------+ +----------+ +------------+ +------------+ +------------+\n", - "288 319 1 neuropixels OpenEphys 0.6.7 D:/OpenEphys\\2 W:/OpenEphys\\2 2025-11-10 14:\n", - " (Total: 1)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rec.Recording & key" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00)])\n", - "Serial Number is 23107806184 while inserted probeserial is: 23107806184\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Clustering: 100%|██████████| 1/1 [00:00<00:00, 24.16it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['/mnt/lab/data01/OpenEphys']\n", - "244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", - "/mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 0%| | 0/1 [00:00\n", - "491\n", - "958385\n", - "HERE\n", - "491 491\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "958385\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490]\n", - "['mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [00:09<00:00, 9.16s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_209_1_2025-06-16_11-45-38/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.55it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 491\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00)])\n", - "Serial Number is 23107806184 while inserted probeserial is: 23107806184\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Clustering: 100%|██████████| 1/1 [00:00<00:00, 24.33it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['/mnt/lab/data01/OpenEphys']\n", - "244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n", - "/mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 0%| | 0/1 [00:00\n", - "584\n", - "1092713\n", - "HERE\n", - "584 584\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "1092713\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583]\n", - "['good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [00:12<00:00, 12.54s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_212_1_2025-06-16_13-27-49/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.17it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 584\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "from populate_ephys import populate_ephys\n", - "\n", - "# keys = [{'animal_id' : 288, 'session': 242, 'insertion_number': 1},\n", - "# {'animal_id' : 288, 'session': 243, 'insertion_number': 1},\n", - "# {'animal_id' : 288, 'session': 244, 'insertion_number': 1},\n", - "# {'animal_id' : 288, 'session': 245, 'insertion_number': 1},\n", - "# {'animal_id' : 288, 'session': 246, 'insertion_number': 1},\n", - "# ]\n", - "keys = [{'animal_id' : 288, 'session': 322, 'insertion_number': 1},\n", - " {'animal_id' : 288, 'session': 212, 'insertion_number': 1},\n", - " ]\n", - "\n", - "# probe_idx = 2\n", - "for key in keys:\n", - " populate_ephys(key,probe_idx)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "ephys.EphysRecording.populate(key, display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", - "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Session info\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

user_name

\n", - " user performing the experiment\n", - "
\n", - "

setup

\n", - " computer id\n", - "
\n", - "

session_tmst

\n", - " session timestamp\n", - "
\n", - "

experiment_type

\n", - " \n", - "
\n", - "

logger_tmst

\n", - " logger precise timestamp\n", - "
288242mariaef-master012025-10-07 15:20:03Passive0.0
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session user_name setup session_tmst experiment_typ logger_tmst \n", - "+-----------+ +---------+ +-----------+ +------------+ +------------+ +------------+ +------------+\n", - "288 242 maria ef-master01 2025-10-07 15: Passive 0.0 \n", - " (Total: 1)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# key = {'animal_id' : 244,\n", - "# 'session' : 223,\n", - "# 'insertion_number' : 1}\n", - "\n", - "Subject() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask & key" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.Probe'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "string = \"244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output\"\n", - "i = string.index('A/k')\n", - "string[:i]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " .Table{\n", - " border-collapse:collapse;\n", - " }\n", - " .Table th{\n", - " background: #A0A0A0; color: #ffffff; padding:4px; border:#f0e0e0 1px solid;\n", - " font-weight: normal; font-family: monospace; font-size: 100%;\n", - " }\n", - " .Table td{\n", - " padding:4px; border:#f0e0e0 1px solid; font-size:100%;\n", - " }\n", - " .Table tr:nth-child(odd){\n", - " background: #ffffff;\n", - " color: #000000;\n", - " }\n", - " .Table tr:nth-child(even){\n", - " background: #f3f1ff;\n", - " color: #000000;\n", - " }\n", - " /* Tooltip container */\n", - " .djtooltip {\n", - " }\n", - " /* Tooltip text */\n", - " .djtooltip .djtooltiptext {\n", - " visibility: hidden;\n", - " width: 120px;\n", - " background-color: black;\n", - " color: #fff;\n", - " text-align: center;\n", - " padding: 5px 0;\n", - " border-radius: 6px;\n", - " /* Position the tooltip text - see examples below! */\n", - " position: absolute;\n", - " z-index: 1;\n", - " }\n", - " #primary {\n", - " font-weight: bold;\n", - " color: black;\n", - " }\n", - " #nonprimary {\n", - " font-weight: normal;\n", - " color: white;\n", - " }\n", - "\n", - " /* Show the tooltip text when you mouse over the tooltip container */\n", - " .djtooltip:hover .djtooltiptext {\n", - " visibility: visible;\n", - " }\n", - " \n", - " \n", - " Waveform metrics for a particular unit\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

amplitude_median

\n", - " (uV) absolute difference between waveform peak and trough\n", - "
\n", - "

peak_to_valley

\n", - " (ms) time between waveform peak and trough\n", - "
\n", - "

half_width

\n", - " (ms) spike width at half max amplitude\n", - "
\n", - "

peak_trough_ratio

\n", - " absolute amplitude of peak divided by absolute amplitude of trough relative to 0\n", - "
\n", - "

repolarization_slope

\n", - " the repolarization slope was defined by fitting a regression line to the first 30us from trough to peak\n", - "
\n", - "

recovery_slope

\n", - " the recovery slope was defined by fitting a regression line to the first 30us from peak to tail\n", - "
\n", - "

spread

\n", - " (um) the range with amplitude above 12-percent of the maximum amplitude along the probe\n", - "
\n", - "

velocity_above

\n", - " (s/m) inverse velocity of waveform propagation from the soma toward the top of the probe\n", - "
\n", - "

velocity_below

\n", - " (s/m) inverse velocity of waveform propagation from the soma toward the bottom of the probe\n", - "
\n", - "

num_positive_peaks

\n", - " \n", - "
\n", - "

num_negative_peaks

\n", - " \n", - "
\n", - "

exp_decay

\n", - " \n", - "
24428313066.8850.001243330.00132-0.20096571043.0-20526.590.0nannan1.01.00.00351934
24428313117.3550.000840.00031-0.294477148725.0-23378.390.0nannan2.01.00.0279673
24428313224.180.0008333330.00024-0.288959217422.0-33734.360.0nannan1.01.00.0261229
24428313346.2150.0005933330.00199-1.5277539087.7-89019.6120.037.7815nan1.01.00.00955719
244283134139.8156.66667e-050.00185-0.9580333970350.0-6376.6190.0nannan0.00.00.00820124
244283135142.9356.66667e-050.00172333-0.9067664436500.017671.690.0nannan0.00.00.00851597
24428313613.650.0007166670.000276667-0.324688141258.0-21274.0120.0nannan1.01.00.0343427
244283137143.6176.66667e-050.00212-1.082023859520.0-5099.36180.0nannan0.00.00.00729127
24428313819.6950.0007133330.000226667-0.31022201312.0-27677.7120.01549.71nan1.01.00.0243837
244283139143.520.0004566670.00184333-1.080563744020.0-20808.7180.0nannan0.00.00.00759205
244283131064.9350.0007166670.000273333-0.357144444400.0-84944.4135.0nan425.9831.01.00.0250961
244283131139.00.0008566670.000206667-0.1969650944.0-58544.7105.0778.502nan0.01.00.0379851
\n", - "

...

\n", - "

Total: 574

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit amplitude_medi peak_to_valley half_width peak_trough_ra repolarization recovery_slope spread velocity_above velocity_below num_positive_p num_negative_p exp_decay \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +--------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "244 283 1 3 0 66.885 0.00124333 0.00132 -0.200965 71043.0 -20526.5 90.0 nan nan 1.0 1.0 0.00351934 \n", - "244 283 1 3 1 17.355 0.00084 0.00031 -0.294477 148725.0 -23378.3 90.0 nan nan 2.0 1.0 0.0279673 \n", - "244 283 1 3 2 24.18 0.000833333 0.00024 -0.288959 217422.0 -33734.3 60.0 nan nan 1.0 1.0 0.0261229 \n", - "244 283 1 3 3 46.215 0.000593333 0.00199 -1.52775 39087.7 -89019.6 120.0 37.7815 nan 1.0 1.0 0.00955719 \n", - "244 283 1 3 4 139.815 6.66667e-05 0.00185 -0.958033 3970350.0 -6376.61 90.0 nan nan 0.0 0.0 0.00820124 \n", - "244 283 1 3 5 142.935 6.66667e-05 0.00172333 -0.906766 4436500.0 17671.6 90.0 nan nan 0.0 0.0 0.00851597 \n", - "244 283 1 3 6 13.65 0.000716667 0.000276667 -0.324688 141258.0 -21274.0 120.0 nan nan 1.0 1.0 0.0343427 \n", - "244 283 1 3 7 143.617 6.66667e-05 0.00212 -1.08202 3859520.0 -5099.36 180.0 nan nan 0.0 0.0 0.00729127 \n", - "244 283 1 3 8 19.695 0.000713333 0.000226667 -0.31022 201312.0 -27677.7 120.0 1549.71 nan 1.0 1.0 0.0243837 \n", - "244 283 1 3 9 143.52 0.000456667 0.00184333 -1.08056 3744020.0 -20808.7 180.0 nan nan 0.0 0.0 0.00759205 \n", - "244 283 1 3 10 64.935 0.000716667 0.000273333 -0.357144 444400.0 -84944.4 135.0 nan 425.983 1.0 1.0 0.0250961 \n", - "244 283 1 3 11 39.0 0.000856667 0.000206667 -0.1969 650944.0 -58544.7 105.0 778.502 nan 0.0 1.0 0.0379851 \n", - " ...\n", - " (Total: 574)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.QualityMetrics." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Cluster metrics for a particular unit\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

num_spikes

\n", - " Number of spikes\n", - "
\n", - "

firing_rate

\n", - " (Hz) firing rate for a unit\n", - "
\n", - "

snr

\n", - " signal-to-noise ratio for a unit\n", - "
\n", - "

presence_ratio

\n", - " fraction of time in which spikes are present\n", - "
\n", - "

isi_violations_ratio

\n", - " rate of ISI violation as a fraction of overall rate\n", - "
\n", - "

isi_violations_count

\n", - " total number of ISI violations\n", - "
\n", - "

amplitude_cutoff

\n", - " estimate of miss rate based on amplitude histogram\n", - "
\n", - "

amplitude_median

\n", - " \n", - "
\n", - "

amplitude_cv_median

\n", - " \n", - "
\n", - "

amplitude_cv_range

\n", - " \n", - "
\n", - "

isolation_distance

\n", - " distance to nearest cluster in Mahalanobis space\n", - "
\n", - "

l_ratio

\n", - " \n", - "
\n", - "

d_prime

\n", - " Classification accuracy based on LDA\n", - "
\n", - "

nn_hit_rate

\n", - " Fraction of neighbors for target cluster that are also in target cluster\n", - "
\n", - "

nn_miss_rate

\n", - " Fraction of neighbors outside target cluster that are in target cluster\n", - "
\n", - "

silhouette

\n", - " Standard metric for cluster overlap\n", - "
\n", - "

drift_ptp

\n", - " Maximum change in spike depth throughout recording\n", - "
\n", - "

drift_mad

\n", - " Cumulative change in spike depth throughout recording\n", - "
\n", - "

drift_std

\n", - " \n", - "
\n", - "

rp_contamination

\n", - " \n", - "
\n", - "

rp_violations

\n", - " \n", - "
\n", - "

sliding_rp_violation

\n", - " \n", - "
\n", - "

sync_spike_2

\n", - " \n", - "
\n", - "

sync_spike_4

\n", - " \n", - "
\n", - "

sync_spike_8

\n", - " \n", - "
\n", - "

firing_range

\n", - " \n", - "
\n", - "

sd_ratio

\n", - " \n", - "
2442831302475.00.7096152.363061.057.8873050.00023929666.8850.3761710.33563769.27841.476352.753640.5608110.01913290.107392nannannan1.0176.0nan0.3422220.02181820.04.81.10102
2442831314327.01.240612.601171.00.31047656.15437e-0517.3551.574380.95975681.0590.5847793.402890.4398650.01861370.0471289nannannan0.09793871.00.290.1451350.007164320.0006933213.241.01791
24428313215959.04.575653.892891.00.136943301.62154e-0524.181.141630.86270181.47940.5397053.979620.6344590.009319830.105931.041150.1690720.2496790.10860515.00.1250.09944230.001378530.00018798212.01.01223
244283133862.00.2471471.497011.00.000.0029372346.2150.5954570.379135134.860.04761714.41070.8962590.001416650.183495nannannan0.00.0nan0.1368910.001160090.00.81.18848
2442831344056.01.162915.607790.98275916.25412300.00243291139.815nannan81.40750.5457343.694570.6824320.01240910.101762nannannan1.0139.0nan0.07569030.0002465480.05.01.69756
2442831351381.00.3959516.107870.96551715.24250.00751238142.9350.369190.21493782.31510.4890033.729670.5641890.0177310.0991084nannannan1.07.0nan0.07965240.0007241130.01.81.77574
2442831362783.00.7979222.303771.00.30021720.00067213.652.056771.39111102.8420.5812253.367960.3869050.009658970.0383607nannannan0.00.0nan0.1153430.003952570.01.61.20404
2442831372142.00.6141395.098260.96551719.2578760.017865143.617nannan137.6520.8873995.21730.8773290.002464680.23809nannannan1.027.0nan0.07282910.0009337070.0004668532.641.29442
24428313813089.03.752793.395931.00.15608233.20644e-0519.6951.198090.802193114.0870.2864213.704460.3928570.0125180.04350451.760760.3004380.4067770.09624339.00.120.09618760.00061120.00015285.01.04354
2442831392687.00.7703985.847710.96551711.7549730.0099644143.52nannan122.3632.101334.786170.816770.002210590.17551nannannan1.033.0nan0.09341270.001116490.0003721623.21.33561
24428313107066.02.025917.581891.00.465708200.00026467464.9350.67940.274888108.663.944782.255750.3307450.008740730.01962172.137890.2683150.2637230.69690113.0nan0.1844040.007925280.0005660913.41.27954
24428313111182.00.3388959.739231.00.000.0030610439.00.5353950.245662298.0641.79671e-0710.62910.912260.0007148690.205392nannannan0.00.0nan0.1125210.00.01.40.968612
\n", - "

...

\n", - "

Total: 574

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit num_spikes firing_rate snr presence_ratio isi_violations isi_violations amplitude_cuto amplitude_medi amplitude_cv_m amplitude_cv_r isolation_dist l_ratio d_prime nn_hit_rate nn_miss_rate silhouette drift_ptp drift_mad drift_std rp_contaminati rp_violations sliding_rp_vio sync_spike_2 sync_spike_4 sync_spike_8 firing_range sd_ratio \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +---------+ +------------+ +------------+ +------------+ +-----------+ +-----------+ +-----------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+ +----------+\n", - "244 283 1 3 0 2475.0 0.709615 2.36306 1.0 57.887 305 0.000239296 66.885 0.376171 0.335637 69.2784 1.47635 2.75364 0.560811 0.0191329 0.107392 nan nan nan 1.0 176.0 nan 0.342222 0.0218182 0.0 4.8 1.10102 \n", - "244 283 1 3 1 4327.0 1.24061 2.60117 1.0 0.310476 5 6.15437e-05 17.355 1.57438 0.959756 81.059 0.584779 3.40289 0.439865 0.0186137 0.0471289 nan nan nan 0.0979387 1.0 0.29 0.145135 0.00716432 0.000693321 3.24 1.01791 \n", - "244 283 1 3 2 15959.0 4.57565 3.89289 1.0 0.136943 30 1.62154e-05 24.18 1.14163 0.862701 81.4794 0.539705 3.97962 0.634459 0.00931983 0.10593 1.04115 0.169072 0.249679 0.108605 15.0 0.125 0.0994423 0.00137853 0.000187982 12.0 1.01223 \n", - "244 283 1 3 3 862.0 0.247147 1.49701 1.0 0.0 0 0.00293723 46.215 0.595457 0.379135 134.86 0.0476171 4.4107 0.896259 0.00141665 0.183495 nan nan nan 0.0 0.0 nan 0.136891 0.00116009 0.0 0.8 1.18848 \n", - "244 283 1 3 4 4056.0 1.16291 5.60779 0.982759 16.2541 230 0.00243291 139.815 nan nan 81.4075 0.545734 3.69457 0.682432 0.0124091 0.101762 nan nan nan 1.0 139.0 nan 0.0756903 0.000246548 0.0 5.0 1.69756 \n", - "244 283 1 3 5 1381.0 0.395951 6.10787 0.965517 15.24 25 0.00751238 142.935 0.36919 0.214937 82.3151 0.489003 3.72967 0.564189 0.017731 0.0991084 nan nan nan 1.0 7.0 nan 0.0796524 0.000724113 0.0 1.8 1.77574 \n", - "244 283 1 3 6 2783.0 0.797922 2.30377 1.0 0.300217 2 0.000672 13.65 2.05677 1.39111 102.842 0.581225 3.36796 0.386905 0.00965897 0.0383607 nan nan nan 0.0 0.0 nan 0.115343 0.00395257 0.0 1.6 1.20404 \n", - "244 283 1 3 7 2142.0 0.614139 5.09826 0.965517 19.2578 76 0.017865 143.617 nan nan 137.652 0.887399 5.2173 0.877329 0.00246468 0.23809 nan nan nan 1.0 27.0 nan 0.0728291 0.000933707 0.000466853 2.64 1.29442 \n", - "244 283 1 3 8 13089.0 3.75279 3.39593 1.0 0.15608 23 3.20644e-05 19.695 1.19809 0.802193 114.087 0.286421 3.70446 0.392857 0.012518 0.0435045 1.76076 0.300438 0.406777 0.0962433 9.0 0.12 0.0961876 0.0006112 0.0001528 5.0 1.04354 \n", - "244 283 1 3 9 2687.0 0.770398 5.84771 0.965517 11.7549 73 0.0099644 143.52 nan nan 122.363 2.10133 4.78617 0.81677 0.00221059 0.17551 nan nan nan 1.0 33.0 nan 0.0934127 0.00111649 0.000372162 3.2 1.33561 \n", - "244 283 1 3 10 7066.0 2.02591 7.58189 1.0 0.465708 20 0.000264674 64.935 0.6794 0.274888 108.66 3.94478 2.25575 0.330745 0.00874073 0.0196217 2.13789 0.268315 0.263723 0.696901 13.0 nan 0.184404 0.00792528 0.000566091 3.4 1.27954 \n", - "244 283 1 3 11 1182.0 0.338895 9.73923 1.0 0.0 0 0.00306104 39.0 0.535395 0.245662 298.064 1.79671e-07 10.6291 0.91226 0.000714869 0.205392 nan nan nan 0.0 0.0 nan 0.112521 0.0 0.0 1.4 0.968612 \n", - " ...\n", - " (Total: 574)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.QualityMetrics.Cluster()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Loaded quality_metrics metrics: (574, 28)\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Loaded template_metrics metrics: (574, 12)\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.26it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 574\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "ephys.QualityMetrics().populate(key, display_progress=True)\n", - "# ephys.QualityMetrics().drop()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# keys = [{'animal_id' : 244,\n", - "# 'session' : 228,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 229,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 230,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 231,\n", - "# 'insertion_number' : 1,},\n", - "# {'animal_id' : 244,\n", - "# 'session' : 233,\n", - "# 'insertion_number' : 1,},\n", - "# ]\n", - "\n", - "keys = [key]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", - "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording() & key\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering Procedure\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", - "
\n", - "

package_version

\n", - " \n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.Clustering() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit()& key" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-15 11:52:05,478][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", - "[2025-09-15 11:52:05,484][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", - "[2025-09-15 11:52:05,492][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", - "[2025-09-15 11:52:05,497][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", - "[2025-09-15 11:52:05,503][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Proceed? [yes, No]: yes\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-15 11:52:07,888][INFO]: Dropped table `lab_npx_ephys_report`.`__quality_metric_report`\n", - "[2025-09-15 11:52:07,922][INFO]: Dropped table `lab_npx_ephys_report`.`quality_metric_set`\n", - "[2025-09-15 11:52:07,953][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__cluster`\n", - "[2025-09-15 11:52:07,985][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__waveform`\n", - "[2025-09-15 11:52:08,015][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics`\n", - "[2025-09-15 11:52:08,022][INFO]: Tables dropped. Restart kernel.\n" - ] - } - ], - "source": [ - "ephys.QualityMetrics.drop()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Represent a physical probe with unique identification\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

probe_comment

\n", - " \n", - "
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
23107806184Neuropixels 2.0 - Multishank
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*probe probe_type probe_comment \n", - "+------------+ +------------+ +------------+\n", - "19108323581 neuropixels 1. fake probe \n", - "19108323583 neuropixels 2. fake probe \n", - "23107806184 Neuropixels 2. \n", - " (Total: 3)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe() #& 'probe_type=\"Neuropixels 2.0 - Multishank\"'" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "574\n", - "9236529\n", - "HERE\n", - "574 574\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "9236529\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573]\n", - "['mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [04:10<00:00, 250.06s/it]\n" - ] - } - ], - "source": [ - "# Checked and works\n", - "for key in keys:\n", - " ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", - " ), skip_duplicates=True\n", - " ) # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - " #ephys.ProbeInsertion()\n", - " ephys.EphysRecording().populate(key, display_progress=True)\n", - "\n", - " key['paramset_idx']=3\n", - " file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - " ks_path = file_path[0]+'/kilosort4/sorter_output'\n", - " ephys.ClusteringTask.insert1(\n", - " dict(\n", - " key,\n", - " task_mode=\"load\", # load or trigger\n", - " clustering_output_dir=ks_path,\n", - " )\n", - " )\n", - "\n", - " ephys.Clustering.populate(key, display_progress=True)\n", - " (ephys.CuratedClustering).populate(key, display_progress=True)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-10-08 10:00:04,345][INFO]: Deleting 0 rows from `lab_npx_ephys`.`probe_insertion`\n", - "[2025-10-08 10:00:04,346][WARNING]: Nothing to delete.\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(ephys.ProbeInsertion() & 'animal_id = 288').delete()# & key" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
10122219108323581
244148123107806184
244150123107806184
244152123107806184
244154123107806184
244156123107806184
244158123107806184
244160123107806184
244162123107806184
244163123107806184
244164123107806184
244166123107806184
\n", - "

...

\n", - "

Total: 47

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "101 22 2 19108323581 \n", - "244 148 1 23107806184 \n", - "244 150 1 23107806184 \n", - "244 152 1 23107806184 \n", - "244 154 1 23107806184 \n", - "244 156 1 23107806184 \n", - "244 158 1 23107806184 \n", - "244 160 1 23107806184 \n", - "244 162 1 23107806184 \n", - "244 163 1 23107806184 \n", - "244 164 1 23107806184 \n", - "244 166 1 23107806184 \n", - " ...\n", - " (Total: 47)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion()# & key" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "6" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(probe.Probe()) #& 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "ename": "DuplicateError", - "evalue": "(\"Duplicate entry '288-242-1' for key 'PRIMARY'\", 'To ignore duplicate entries in insert, set skip_duplicates=True')", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mDuplicateError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbeInsertion\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert1\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mprobe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mProbe\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m&\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe_type=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mNeuropixels 2.0 - Multishank\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfetch\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprobe\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m)\u001b[49m \u001b[38;5;66;03m# probe, subject, session_datetime needs to follow the restrictions of foreign keys.\u001b[39;00m\n\u001b[1;32m 7\u001b[0m ephys\u001b[38;5;241m.\u001b[39mProbeInsertion()\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:337\u001b[0m, in \u001b[0;36mTable.insert1\u001b[0;34m(self, row, **kwargs)\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minsert1\u001b[39m(\u001b[38;5;28mself\u001b[39m, row, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 331\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;124;03m Insert one data record into the table. For ``kwargs``, see ``insert()``.\u001b[39;00m\n\u001b[1;32m 333\u001b[0m \n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03m :param row: a numpy record, a dict-like object, or an ordered sequence to be inserted\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \u001b[38;5;124;03m as one row.\u001b[39;00m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:453\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\u001b[38;5;241m.\u001b[39msuggest(\n\u001b[1;32m 450\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTo ignore extra fields in insert, set ignore_extra_fields=True\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 451\u001b[0m )\n\u001b[1;32m 452\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m DuplicateError \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 453\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\u001b[38;5;241m.\u001b[39msuggest(\n\u001b[1;32m 454\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTo ignore duplicate entries in insert, set skip_duplicates=True\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 455\u001b[0m )\n", - "\u001b[0;31mDuplicateError\u001b[0m: (\"Duplicate entry '288-242-1' for key 'PRIMARY'\", 'To ignore duplicate entries in insert, set skip_duplicates=True')" - ] - } - ], - "source": [ - "ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe=(probe.Probe() & 'probe_type=\"Neuropixels 2.0 - Multishank\"').fetch('probe')[0],\n", - " )\n", - ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - "ephys.ProbeInsertion()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Ephys recording from a probe insertion for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

acq_software

\n", - " \n", - "
\n", - "

sampling_rate

\n", - " (Hz)\n", - "
\n", - "

recording_datetime

\n", - " datetime of the recording from this probe\n", - "
\n", - "

recording_duration

\n", - " (seconds) duration of the recording from this probe\n", - "
24422517c36bff0-7661-5320-7844-9cb708b5b41cOpen Ephys30000.02025-07-03 14:09:1648.9805
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num electrode_conf acq_software sampling_rate recording_date recording_dura\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 7c36bff0-7661- Open Ephys 30000.0 2025-07-03 14: 48.9805 \n", - " (Total: 1)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEphysRecording\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:423\u001b[0m, in \u001b[0;36mEphysRecording.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 422\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 423\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 424\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo Open Ephys data found for probe insertion: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(key)\n\u001b[1;32m 425\u001b[0m )\n\u001b[1;32m 426\u001b[0m \u001b[38;5;66;03m#print(probe_data)\u001b[39;00m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;66;03m#print(probe_data.ap_meta)\u001b[39;00m\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m probe_data\u001b[38;5;241m.\u001b[39map_meta:\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}" - ] - } - ], - "source": [ - "ephys.EphysRecording().populate(key, display_progress=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Paths of files of a given EphysRecording round.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

file_path

\n", - " filepath relative to root data directory\n", - "
2442831244_283_1_2025-07-30_11-04-01/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *file_path \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 283 1 244_283_1_2025\n", - " (Total: 1)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.EphysRecording.EphysFile() & key\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-10 14:25:12,601][INFO]: `lab_npx_ephys`.`_quality_metrics` (1 tuples)\n", - "[2025-09-10 14:25:12,608][INFO]: `lab_npx_ephys`.`_quality_metrics__waveform` (124 tuples)\n", - "[2025-09-10 14:25:12,615][INFO]: `lab_npx_ephys`.`_quality_metrics__cluster` (124 tuples)\n", - "[2025-09-10 14:25:12,629][INFO]: `lab_npx_ephys_report`.`quality_metric_set` (0 tuples)\n", - "[2025-09-10 14:25:12,635][INFO]: `lab_npx_ephys_report`.`__quality_metric_report` (0 tuples)\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Proceed? [yes, No]: yes\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-10 14:25:23,863][INFO]: Dropped table `lab_npx_ephys_report`.`__quality_metric_report`\n", - "[2025-09-10 14:25:23,900][INFO]: Dropped table `lab_npx_ephys_report`.`quality_metric_set`\n", - "[2025-09-10 14:25:23,929][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__cluster`\n", - "[2025-09-10 14:25:23,963][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics__waveform`\n", - "[2025-09-10 14:25:23,997][INFO]: Dropped table `lab_npx_ephys`.`_quality_metrics`\n", - "[2025-09-10 14:25:24,003][INFO]: Tables dropped. Restart kernel.\n" - ] - } - ], - "source": [ - "ephys.QualityMetrics().drop()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-09-10 14:24:42,906][WARNING]: MySQL server has gone away. Reconnecting to the server.\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering Procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", - "
\n", - "

package_version

\n", - " \n", - "
244225132025-08-29 10:35:37
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 3 2025-08-29 10: \n", - " (Total: 1)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(ephys.Clustering() & key)#.delete()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Method for clustering\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

clustering_method_desc

\n", - " \n", - "
kilosort2kilosort2 clustering method
kilosort2.5kilosort2.5 clustering method
kilosort3kilosort3 clustering method
kilosort4kilosort4 clustering method
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*clustering_me clustering_met\n", - "+------------+ +------------+\n", - "kilosort2 kilosort2 clus\n", - "kilosort2.5 kilosort2.5 cl\n", - "kilosort3 kilosort3 clus\n", - "kilosort4 kilosort4 clus\n", - " (Total: 4)" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringMethod()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", - "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", - "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", - "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", - " (Total: 4)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringParamSet()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 225 1 3 244_225_1_2025 load \n", - " (Total: 1)" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "# # insert clustering task manually\n", - "# import numpy as np\n", - "# params_ks = {\n", - "# 'data_dtype': 'int16',\n", - "# 'n_chan_bin': 384,\n", - "# 'fs': 30000.0,\n", - "# 'batch_size': 100000,\n", - "# 'nblocks': 1,\n", - "# 'Th_universal': 9.0,\n", - "# 'Th_learned': 8.0,\n", - "# 'tmin': 0.0,\n", - "# 'tmax': np.inf,\n", - "# 'nt': 61,\n", - "# 'shift': None,\n", - "# 'scale': None,\n", - "# 'artifact_threshold': np.inf,\n", - "# 'nskip': 25,\n", - "# 'whitening_range': 32,\n", - "# 'highpass_cutoff': 300.0,\n", - "# 'binning_depth': 5.0,\n", - "# 'sig_interp': 20.0,\n", - "# 'drift_smoothing': [0.5, 0.5, 0.5],\n", - "# 'nt0min': 20,\n", - "# 'dmin': None,\n", - "# 'dminx': 32.0,\n", - "# 'min_template_size': 10.0,\n", - "# 'template_sizes': 5,\n", - "# 'nearest_chans': 10,\n", - "# 'nearest_templates': 100,\n", - "# 'max_channel_distance': 32.0,\n", - "# 'max_peels': 100,\n", - "# 'templates_from_data': True,\n", - "# 'n_templates': 6,\n", - "# 'n_pcs': 6,\n", - "# 'Th_single_ch': 6.0,\n", - "# 'acg_threshold': 0.1,\n", - "# 'ccg_threshold': 0.15,\n", - "# 'cluster_downsampling': 20,\n", - "# 'x_centers': None,\n", - "# 'duplicate_spike_ms': 0.15,\n", - "# 'position_limit': 100.0,\n", - "# 'save_preprocessed_copy': False,\n", - "# 'clear_cache': False,\n", - "# 'do_CAR': True,\n", - "# 'invert_sign': False,\n", - "# 'verbose_log': False,\n", - "# 'NTbuff': 100122,\n", - "# 'Nchan': 384,\n", - "# 'duplicate_spike_bins': 4,\n", - "# 'torch_device': 'cuda'\n", - "# }" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort4Default params kilosort4b611e082-bdaa-6ef6-1c13-acba4904a1f5=BLOB=
1kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:4d59a35a8-6ec7-e2bf-81b4-c1f80402a8b9=BLOB=
2kilosort4kilosort4 params acg:0.1, ccg:0.15, xcenters:None0ad61454-47dc-2fde-90f5-ff1f574cee61=BLOB=
3kilosort4si kilosort4 params acg:0.1, ccg:0.15, xcenters:None6d0118fc-8f39-8b16-130b-39ae79013ef3=BLOB=
\n", - " \n", - "

Total: 4

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort4 Default params b611e082-bdaa- =BLOB= \n", - "1 kilosort4 kilosort4 para d59a35a8-6ec7- =BLOB= \n", - "2 kilosort4 kilosort4 para 0ad61454-47dc- =BLOB= \n", - "3 kilosort4 si kilosort4 p 6d0118fc-8f39- =BLOB= \n", - " (Total: 4)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# insert clustering task manually\n", - "# params_ks = {\n", - "# \"fs\": 30000,\n", - "# \"fshigh\": 150,\n", - "# \"minfr_goodchannels\": 0.1,\n", - "# \"Th\": [10, 4],\n", - "# \"lam\": 10,\n", - "# \"AUCsplit\": 0.9,\n", - "# \"minFR\": 0.02,\n", - "# \"momentum\": [20, 400],\n", - "# \"sigmaMask\": 30,\n", - "# \"ThPr\": 8,\n", - "# \"spkTh\": -6,\n", - "# \"reorder\": 1,\n", - "# \"nskip\": 25,\n", - "# \"GPU\": 1,\n", - "# \"Nfilt\": 1024,\n", - "# \"nfilt_factor\": 4,\n", - "# \"ntbuff\": 64,\n", - "# \"whiteningRange\": 32,\n", - "# \"nSkipCov\": 25,\n", - "# \"scaleproc\": 200,\n", - "# \"nPCs\": 3,\n", - "# \"useRAM\": 0,\n", - "# }\n", - "ephys.ClusteringParamSet.insert_new_params(\n", - " clustering_method=\"kilosort4\",\n", - " paramset_idx=3,\n", - " params=params_ks,\n", - " paramset_desc=\"si kilosort4 params acg:0.1, ccg:0.15, xcenters:None\",\n", - ")\n", - "ephys.ClusteringParamSet()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_oputput'" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - "ks_path = file_path[0]+'/kilosort4/sorter_oputput'\n", - "ks_path" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [], - "source": [ - "file_path = (ephys.EphysRecording.EphysFile() & key).fetch('file_path')\n", - "ks_path = file_path[0]+'/kilosort4/sorter_output'\n", - "\n", - "ephys.ClusteringTask.insert1(\n", - " dict(\n", - " key,\n", - " paramset_idx=3,\n", - " task_mode=\"load\", # load or trigger\n", - " clustering_output_dir=ks_path,\n", - " )\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
24422513244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 225 1 3 244_225_1_2025 load \n", - " (Total: 1)" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(ephys.ClusteringTask() & key)#.delete()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [], - "source": [ - "ephys.Clustering.populate(key, display_progress=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering Procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_time

\n", - " time of generation of this set of clustering results\n", - "
\n", - "

package_version

\n", - " \n", - "
244225132025-08-29 10:35:37
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_tim package_versio\n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +------------+\n", - "244 225 1 3 2025-08-29 10: \n", - " (Total: 1)" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.Clustering() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clustering results of the spike sorting step.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
24422513
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 225 1 3 \n", - " (Total: 1)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering() & key" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'animal_id': 244, 'session': 186, 'insertion_number': 1, 'paramset_idx': 3}" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "key['paramset_idx']=3\n", - "key" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 0%| | 0/1 [00:00\n", - "685\n", - "12691145\n", - "HERE\n", - "685 685\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "12691145\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", - " 684]\n", - "['mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:26<00:00, 86.12s/it]\n" - ] - }, - { - "data": { - "text/plain": [ - "{'success_count': 1, 'error_list': []}" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(ephys.CuratedClustering).populate(key, display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
2442251307c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0mua470=BLOB==BLOB==BLOB=
2442251317c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4mua302=BLOB==BLOB==BLOB=
2442251327c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10mua396=BLOB==BLOB==BLOB=
2442251337c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua779=BLOB==BLOB==BLOB=
2442251347c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua274=BLOB==BLOB==BLOB=
2442251357c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank22mua747=BLOB==BLOB==BLOB=
2442251367c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good716=BLOB==BLOB==BLOB=
2442251377c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good475=BLOB==BLOB==BLOB=
2442251387c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank24good277=BLOB==BLOB==BLOB=
2442251397c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua772=BLOB==BLOB==BLOB=
24422513107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good563=BLOB==BLOB==BLOB=
24422513117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank32mua563=BLOB==BLOB==BLOB=
\n", - "

...

\n", - "

Total: 124

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "244 225 1 3 0 7c36bff0-7661- Neuropixels 2. 0 mua 470 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 1 7c36bff0-7661- Neuropixels 2. 4 mua 302 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 2 7c36bff0-7661- Neuropixels 2. 10 mua 396 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 3 7c36bff0-7661- Neuropixels 2. 16 mua 779 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 4 7c36bff0-7661- Neuropixels 2. 16 mua 274 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 5 7c36bff0-7661- Neuropixels 2. 22 mua 747 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 6 7c36bff0-7661- Neuropixels 2. 20 good 716 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 7 7c36bff0-7661- Neuropixels 2. 20 good 475 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 8 7c36bff0-7661- Neuropixels 2. 24 good 277 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 9 7c36bff0-7661- Neuropixels 2. 26 mua 772 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 10 7c36bff0-7661- Neuropixels 2. 26 good 563 =BLOB= =BLOB= =BLOB= \n", - "244 225 1 3 11 7c36bff0-7661- Neuropixels 2. 32 mua 563 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 124)" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit & key #& 'cluster_quality_label = \"good\"'" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Properties of a given unit from a round of clustering (and curation)\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

cluster_quality_label

\n", - " cluster quality type - e.g. 'good', 'MUA', 'noise', etc.\n", - "
\n", - "

spike_count

\n", - " how many spikes in this recording for this unit\n", - "
\n", - "

spike_times

\n", - " (s) spike times of this unit, relative to the start of the EphysRecording\n", - "
\n", - "

spike_sites

\n", - " array of electrode associated with each spike\n", - "
\n", - "

spike_depths

\n", - " (um) array of depths associated with each spike, relative to the (0, 0) of the probe\n", - "
2441631007c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2mua23=BLOB==BLOB==BLOB=
2441631017c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6good1101=BLOB==BLOB==BLOB=
2441631027c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10good2531=BLOB==BLOB==BLOB=
2441631037c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good5420=BLOB==BLOB==BLOB=
2441631047c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank12mua1296=BLOB==BLOB==BLOB=
2441631057c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank14good2980=BLOB==BLOB==BLOB=
2441631067c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank16mua1866=BLOB==BLOB==BLOB=
2441631077c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank20good4098=BLOB==BLOB==BLOB=
2441631087c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank27mua1666=BLOB==BLOB==BLOB=
2441631097c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good270=BLOB==BLOB==BLOB=
24416310107c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26good654=BLOB==BLOB==BLOB=
24416310117c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank26mua3618=BLOB==BLOB==BLOB=
\n", - "

...

\n", - "

Total: 265

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit electrode_conf probe_type electrode cluster_qualit spike_count spike_time spike_site spike_dept\n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +------------+ +------------+ +--------+ +--------+ +--------+\n", - "244 163 1 0 0 7c36bff0-7661- Neuropixels 2. 2 mua 23 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 1 7c36bff0-7661- Neuropixels 2. 6 good 1101 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 2 7c36bff0-7661- Neuropixels 2. 10 good 2531 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 3 7c36bff0-7661- Neuropixels 2. 14 good 5420 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 4 7c36bff0-7661- Neuropixels 2. 12 mua 1296 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 5 7c36bff0-7661- Neuropixels 2. 14 good 2980 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 6 7c36bff0-7661- Neuropixels 2. 16 mua 1866 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 7 7c36bff0-7661- Neuropixels 2. 20 good 4098 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 8 7c36bff0-7661- Neuropixels 2. 27 mua 1666 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 9 7c36bff0-7661- Neuropixels 2. 26 good 270 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 10 7c36bff0-7661- Neuropixels 2. 26 good 654 =BLOB= =BLOB= =BLOB= \n", - "244 163 1 0 11 7c36bff0-7661- Neuropixels 2. 26 mua 3618 =BLOB= =BLOB= =BLOB= \n", - " ...\n", - " (Total: 265)" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.CuratedClustering.Unit & \"animal_id=244\" & \"session=163\" #& \"unit>263\" #& 'cluster_quality_label = \"good\"'" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-05-30 14:24:11,075][INFO]: Deleting 621 rows from `lab_npx_ephys`.`_curated_clustering__unit`\n", - "[2025-05-30 14:24:11,081][INFO]: Deleting 1 rows from `lab_npx_ephys`.`_curated_clustering`\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "Commit deletes? [yes, No]: yes\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2025-05-30 14:24:14,695][INFO]: Deletes committed.\n" - ] - }, - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# (ephys.CuratedClustering & key).delete()" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Spike waveforms and their mean across spikes for the given unit\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

unit

\n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

waveform_mean

\n", - " (uV) mean waveform across spikes of the given unit\n", - "
\n", - "

waveforms

\n", - " (uV) (spike x sample) waveforms of a sampling of spikes at the given electrode for the given unit\n", - "
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank0=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank1=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank2=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank3=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank4=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank5=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank6=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank7=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank8=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank9=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank10=BLOB==BLOB=
244163102647c36bff0-7661-5320-7844-9cb708b5b41cNeuropixels 2.0 - Multishank11=BLOB==BLOB=
\n", - "

...

\n", - "

Total: 384

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx *unit *electrode_con *probe_type *electrode waveform_m waveforms \n", - "+-----------+ +---------+ +------------+ +------------+ +------+ +------------+ +------------+ +-----------+ +--------+ +--------+\n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 0 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 1 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 2 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 3 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 4 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 5 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 6 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 7 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 8 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 9 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 10 =BLOB= =BLOB= \n", - "244 163 1 0 264 7c36bff0-7661- Neuropixels 2. 11 =BLOB= =BLOB= \n", - " ...\n", - " (Total: 384)" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.WaveformSet.Waveform() & \"session=163\" & \"unit>263\"" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WaveformSet: 0%| | 0/1 [00:00 2\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveformSet\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1464\u001b[0m, in \u001b[0;36mWaveformSet.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1462\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mPeakWaveform\u001b[38;5;241m.\u001b[39minsert1(unit_peak_waveform, ignore_extra_fields\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 1463\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m unit_electrode_waveforms:\n\u001b[0;32m-> 1464\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mWaveform\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minsert\u001b[49m\u001b[43m(\u001b[49m\u001b[43munit_electrode_waveforms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:419\u001b[0m, in \u001b[0;36mTable.insert\u001b[0;34m(self, rows, replace, skip_duplicates, ignore_extra_fields, allow_direct_insert)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[0;32m--> 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 420\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrows\u001b[49m\n\u001b[1;32m 422\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:420\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 418\u001b[0m field_list \u001b[38;5;241m=\u001b[39m [] \u001b[38;5;66;03m# collects the field list from first row (passed by reference)\u001b[39;00m\n\u001b[1;32m 419\u001b[0m rows \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(\n\u001b[0;32m--> 420\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_row_to_insert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfield_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 421\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m row \u001b[38;5;129;01min\u001b[39;00m rows\n\u001b[1;32m 422\u001b[0m )\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m rows:\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:872\u001b[0m, in \u001b[0;36mTable.__make_row_to_insert\u001b[0;34m(self, row, field_list, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[0;32m--> 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 873\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__make_placeholder(name, row[name], ignore_extra_fields)\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:873\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, collections\u001b[38;5;241m.\u001b[39mabc\u001b[38;5;241m.\u001b[39mMapping): \u001b[38;5;66;03m# dict-based\u001b[39;00m\n\u001b[1;32m 871\u001b[0m check_fields(row)\n\u001b[1;32m 872\u001b[0m attributes \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m--> 873\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__make_placeholder\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrow\u001b[49m\u001b[43m[\u001b[49m\u001b[43mname\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mignore_extra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheading\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m row\n\u001b[1;32m 876\u001b[0m ]\n\u001b[1;32m 877\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# positional\u001b[39;00m\n\u001b[1;32m 878\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/table.py:809\u001b[0m, in \u001b[0;36mTable.__make_placeholder\u001b[0;34m(self, name, value, ignore_extra_fields)\u001b[0m\n\u001b[1;32m 807\u001b[0m value \u001b[38;5;241m=\u001b[39m value\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 808\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_blob:\n\u001b[0;32m--> 809\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[43mblob\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 810\u001b[0m value \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 811\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexternal[attr\u001b[38;5;241m.\u001b[39mstore]\u001b[38;5;241m.\u001b[39mput(value)\u001b[38;5;241m.\u001b[39mbytes\n\u001b[1;32m 812\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_external\n\u001b[1;32m 813\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m value\n\u001b[1;32m 814\u001b[0m )\n\u001b[1;32m 815\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m attr\u001b[38;5;241m.\u001b[39mis_attachment:\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:594\u001b[0m, in \u001b[0;36mpack\u001b[0;34m(obj, compress)\u001b[0m\n\u001b[1;32m 590\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(obj, \u001b[38;5;28mbytes\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mstartswith(\n\u001b[1;32m 591\u001b[0m (\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmYm\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdj0\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 592\u001b[0m )\n\u001b[1;32m 593\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n\u001b[0;32m--> 594\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mBlob\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpack\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/blob.py:581\u001b[0m, in \u001b[0;36mBlob.pack\u001b[0;34m(self, obj, compress)\u001b[0m\n\u001b[1;32m 579\u001b[0m blob \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprotocol \u001b[38;5;241m+\u001b[39m blob\n\u001b[1;32m 580\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compress \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(blob) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1000\u001b[39m:\n\u001b[0;32m--> 581\u001b[0m compressed \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mZL123\u001b[39m\u001b[38;5;130;01m\\0\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m len_u64(blob) \u001b[38;5;241m+\u001b[39m \u001b[43mzlib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompress\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblob\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 582\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(compressed) \u001b[38;5;241m<\u001b[39m \u001b[38;5;28mlen\u001b[39m(blob):\n\u001b[1;32m 583\u001b[0m blob \u001b[38;5;241m=\u001b[39m compressed\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "## this doesn't populate because of size \n", - "ephys.WaveformSet.populate(key, display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "LFP: 0%| | 0/1 [00:00\n", - "{}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "ename": "KeyError", - "evalue": "'channels_indices'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mLFP\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:257\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, keys, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 253\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m)\n\u001b[1;32m 254\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m display_progress\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 256\u001b[0m ):\n\u001b[0;32m--> 257\u001b[0m status \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m status \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 259\u001b[0m success_list\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;241m1\u001b[39m)\n", - "File \u001b[0;32m~/.local/lib/python3.10/site-packages/datajoint/autopopulate.py:335\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_generator:\n\u001b[0;32m--> 335\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 337\u001b[0m \u001b[38;5;66;03m# tripartite make - transaction is delayed until the final stage\u001b[39;00m\n\u001b[1;32m 338\u001b[0m gen \u001b[38;5;241m=\u001b[39m make(\u001b[38;5;28mdict\u001b[39m(key), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(make_kwargs \u001b[38;5;129;01mor\u001b[39;00m {}))\n", - "File \u001b[0;32m/mnt/lab/users/maria/github/element-array-ephys/element_array_ephys/ephys.py:611\u001b[0m, in \u001b[0;36mLFP.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 608\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe)\n\u001b[1;32m 609\u001b[0m \u001b[38;5;28mprint\u001b[39m(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta)\n\u001b[1;32m 610\u001b[0m lfp_channel_ind \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mr_[\n\u001b[0;32m--> 611\u001b[0m \u001b[38;5;28mlen\u001b[39m(\u001b[43moe_probe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlfp_meta\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchannels_indices\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m)\n\u001b[1;32m 612\u001b[0m \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m : \u001b[38;5;241m0\u001b[39m : \u001b[38;5;241m-\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_skip_channel_counts\n\u001b[1;32m 613\u001b[0m ]\n\u001b[1;32m 615\u001b[0m lfp \u001b[38;5;241m=\u001b[39m oe_probe\u001b[38;5;241m.\u001b[39mlfp_timeseries[:, lfp_channel_ind] \u001b[38;5;66;03m# (sample x channel)\u001b[39;00m\n\u001b[1;32m 616\u001b[0m lfp \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 617\u001b[0m lfp \u001b[38;5;241m*\u001b[39m np\u001b[38;5;241m.\u001b[39marray(oe_probe\u001b[38;5;241m.\u001b[39mlfp_meta[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchannels_gains\u001b[39m\u001b[38;5;124m\"\u001b[39m])[lfp_channel_ind]\n\u001b[1;32m 618\u001b[0m )\u001b[38;5;241m.\u001b[39mT \u001b[38;5;66;03m# (channel x sample)\u001b[39;00m\n", - "\u001b[0;31mKeyError\u001b[0m: 'channels_indices'" - ] - } - ], - "source": [ - "## ephys.LFP.populate(key, display_progress=True) ## not supported for the new OpenEphys as LFP data is not saved separately.." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "units, unit_spiketimes = (\n", - " ephys.CuratedClustering.Unit\n", - " & key\n", - " & 'unit IN (\"6\",\"7\",\"9\",\"14\",\"15\",\"17\",\"19\")'\n", - ").fetch(\"unit\", \"spike_times\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x = np.hstack(unit_spiketimes)\n", - "y = np.hstack([np.full_like(s, u) for u, s in zip(units, unit_spiketimes)])\n", - "plt.plot(x, y, \"|\")\n", - "plt.xlabel(\"Time (s)\")\n", - "plt.ylabel(\"Unit\");" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "unit_key = (ephys.CuratedClustering.Unit & key & \"unit = '6'\").fetch1(\"KEY\")\n", - "unit_data = (\n", - " ephys.CuratedClustering.Unit * ephys.WaveformSet.PeakWaveform & unit_key\n", - ").fetch1()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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ryyzrFy5Ejt37sSHH3442pcyIpj5SZGSkhIYjUa0traGvb+1tRUVFRVRP6eiokLT7Sk19HyvIpnNZixevBgHDhwYjkukJMT6vbLb7cjKyhqlqyItTjnlFP5ujaA77rgDr7/+OtauXYuJEyfGve14ed5i8JMiFosFJ554It577z3lfT6fD++9915YxiDU0qVLw24PAO+8807M21Nq6PleRfJ6vdixYwcqKyuH6zJJJ/5ejX3btm3j79YIkGUZd9xxB1599VW8//77qK2tTfg54+b3a7QrrseTP/3pT7LVapXXrFkj7969W77tttvkgoICuaWlRZZlWb7++uvlH/zgB8rtP/roI9lkMsmPPfaYvGfPHvmhhx6SzWazvGPHjtH6K2QMrd+r//qv/5Lffvtt+eDBg/LmzZvla6+9VrbZbPKuXbtG66+QMXp6euStW7fKW7dulQHIjz/+uLx161b56NGjsizL8g9+8AP5+uuvV25/6NAhOTs7W7733nvlPXv2yKtXr5aNRqP81ltvjdZfIaNo/X498cQT8muvvSbv379f3rFjh/ztb39bNhgM8rvvvjtaf4WMcfvtt8v5+fnyBx98IDc3Nytv/f39ym3G6/MWg58Ue+qpp+RJkybJFotFPuWUU+RNmzYpHzvrrLPkG2+8Mez2f/7zn+UZM2bIFotFnjt3rvzGG2+M8BVnLi3fq7vuuku5bXl5uXzxxRfLW7ZsGYWrzjyiFTryTXx/brzxRvmss84a8jmLFi2SLRaLPGXKFPm5554b8evOVFq/X48++qg8depU2WazyUVFRfLZZ58tv//++6Nz8Rkm2vcJQNjvy3h93pJkWZZHOttERERENFpY80NEREQZhcEPERERZRQGP0RERJRRGPwQERFRRmHwQ0RERBmFwQ8RERFlFAY/RERElFEY/BAREVFGYfBDRGnja1/7Gq688spR+/rXX389fvKTnwzb/e/evRsTJ05EX1/fsH0NIkqME56JaERIkhT34w899BC+853vQJZlFBQUjMxFhdi+fTvOPfdcHD16FLm5ucP2db70pS9h4cKF+OEPfzhsX4OI4mPwQ0QjoqWlRfn/l156CQ8++CD27t2rvC83N3dYg45Evv71r8NkMuGZZ54Z1q/zxhtv4NZbb0VdXR1MJtOwfi0iio7HXkQ0IioqKpS3/Px8SJIU9r7c3Nwhx15nn3027rzzTtx1110oLCxEeXk5nn32WfT19eGmm25CXl4epk2bhn/+859hX2vnzp246KKLkJubi/Lyclx//fU4duxYzGvzer14+eWXcdlll4W9f/LkyXjkkUdwww03IDc3FzU1Nfj73/+O9vZ2XHHFFcjNzcWCBQvw2WefKZ9z9OhRXHbZZSgsLEROTg7mzp2LN998U/n4+eefj87OTqxbty7Jf1Ei0ovBDxGltd/97ncoKSnBJ598gjvvvBO33347vvzlL+O0007Dli1bsGLFClx//fXo7+8HAHR1deHcc8/F4sWL8dlnn+Gtt95Ca2srrrnmmphf4/PPP0d3dzdOOumkIR974okncPrpp2Pr1q245JJLcP311+OGG27AV7/6VWzZsgVTp07FDTfcAJFEX7lyJZxOJ9avX48dO3bg0UcfDctoWSwWLFq0CBs2bEjxvxQRqcXgh4jS2sKFC/HAAw9g+vTpuO+++2Cz2VBSUoJbb70V06dPx4MPPoiOjg58/vnnAIBf/OIXWLx4MX7yk59g1qxZWLx4MX77299i7dq12LdvX9SvcfToURiNRpSVlQ352MUXX4xvfOMbytdyOBw4+eST8eUvfxkzZszA97//fezZswetra0AgLq6Opx++umYP38+pkyZgksvvRTLli0Lu8+qqiocPXo0xf9SRKQWgx8iSmsLFixQ/t9oNKK4uBjz589X3ldeXg4AaGtrA+AvXF67dq1SQ5Sbm4tZs2YBAA4ePBj1awwMDMBqtUYtyg79+uJrxfv63/rWt/DII4/g9NNPx0MPPaQEZaGysrKUTBURjTwGP0SU1sxmc9ifJUkKe58IWHw+HwCgt7cXl112GbZt2xb2tn///iEZGKGkpAT9/f1wuVxxv774WvG+/te//nUcOnQI119/PXbs2IGTTjoJTz31VNh9dnZ2orS0VN0/ABGlHIMfIhpXTjjhBOzatQuTJ0/GtGnTwt5ycnKifs6iRYsA+OfwpEJ1dTW++c1v4pVXXsE999yDZ599NuzjO3fuxOLFi1PytYhIOwY/RDSurFy5Ep2dnbjuuuvw6aef4uDBg3j77bdx0003wev1Rv2c0tJSnHDCCfjwww+T/vp33XUX3n77bRw+fBhbtmzB2rVrMXv2bOXjR44cQWNjI5YvX5701yIifRj8ENG4UlVVhY8++gherxcrVqzA/Pnzcdddd6GgoAAGQ+yHvK9//et44YUXkv76Xq8XK1euxOzZs3HhhRdixowZ+OUvf6l8/I9//CNWrFiBmpqapL8WEenDIYdERPAXPc+cORMvvfQSli5dOixfw+VyYfr06XjxxRdx+umnD8vXIKLEmPkhIoK/A+v3v/993GGIyaqrq8P999/PwIdolDHzQ0RERBmFmR8iIiLKKAx+iIiIKKMw+CEiIqKMwuCHiIiIMgqDHyIiIsooDH6IiIgoozD4ISIioozC4IeIiIgyCoMfIiIiyij/PzM/oiMtBp7nAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sampling_rate = (ephys.EphysRecording & key).fetch1(\n", - " \"sampling_rate\"\n", - ") / 1000 # in kHz\n", - "plt.plot(\n", - " np.r_[: unit_data[\"peak_electrode_waveform\"].size] * 1 / sampling_rate,\n", - " unit_data[\"peak_electrode_waveform\"],\n", - ")\n", - "plt.xlabel(\"Time (ms)\")\n", - "plt.ylabel(r\"Voltage ($\\mu$V)\");" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'key' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mkey\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'key' is not defined" - ] - } - ], - "source": [ - "key" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mQualityMetrics\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:1608\u001b[0m, in \u001b[0;36mQualityMetrics.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1606\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 1607\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1608\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQC metrics file not found in: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutput_dir\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1610\u001b[0m metrics_df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(metric_fp)\n\u001b[1;32m 1612\u001b[0m \u001b[38;5;66;03m# Conform the dataframe to match the table definition\u001b[39;00m\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: QC metrics file not found in: /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_output" - ] - } - ], - "source": [ - "ephys.QualityMetrics().populate(key, display_progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Type of probe, with specific electrodes geometry defined\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", - " \n", - "

Total: 6

\n", - " " - ], - "text/plain": [ - "*probe_type \n", - "+------------+\n", - "neuropixels 1.\n", - "neuropixels 1.\n", - "neuropixels 2.\n", - "Neuropixels 2.\n", - "neuropixels 2.\n", - "neuropixels UH\n", - " (Total: 6)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# probe.ProbeType.insert1(\n", - "# dict(probe_type=\"Neuropixels 2.0 - Multishank\")\n", - "# ) # this info could be achieve from neuropixels meta file.\n", - "probe.ProbeType()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Type of probe, with specific electrodes geometry defined\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
neuropixels 1.0 - 3A
neuropixels 1.0 - 3B
neuropixels 2.0 - MS
Neuropixels 2.0 - Multishank
neuropixels 2.0 - SS
neuropixels UHD
\n", - " \n", - "

Total: 6

\n", - " " - ], - "text/plain": [ - "*probe_type \n", - "+------------+\n", - "neuropixels 1.\n", - "neuropixels 1.\n", - "neuropixels 2.\n", - "Neuropixels 2.\n", - "neuropixels 2.\n", - "neuropixels UH\n", - " (Total: 6)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ProbeType()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Represent a physical probe with unique identification\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

probe_comment

\n", - " \n", - "
19108323581neuropixels 1.0 - 3Bfake probe
19108323583neuropixels 2.0 - MSfake probe
19108323584Neuropixels 2.0 - Multishankfake probe
\n", - " \n", - "

Total: 3

\n", - " " - ], - "text/plain": [ - "*probe probe_type probe_comment \n", - "+------------+ +------------+ +------------+\n", - "19108323581 neuropixels 1. fake probe \n", - "19108323583 neuropixels 2. fake probe \n", - "19108323584 Neuropixels 2. fake probe \n", - " (Total: 3)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.Probe.insert1(\n", - " dict(probe=\"19108323584\", probe_type=\"Neuropixels 2.0 - Multishank\", probe_comment=\"fake probe\")\n", - ") # this info could be achieve from neuropixels meta file.\n", - "probe.Probe()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode

\n", - " electrode index, starts at 0\n", - "
\n", - "

shank

\n", - " shank index, starts at 0, advance left to right\n", - "
\n", - "

shank_col

\n", - " column index, starts at 0, advance left to right\n", - "
\n", - "

shank_row

\n", - " row index, starts at 0.\n", - "
\n", - "

x_coord

\n", - " (um) x coordinate of the electrode within the probe.\n", - "
\n", - "

y_coord

\n", - " (um) y coordinate of the electrode within the probe.\n", - "
Neuropixels 2.0 - Multishank000027.00.0
Neuropixels 2.0 - Multishank101059.00.0
Neuropixels 2.0 - Multishank200127.015.0
Neuropixels 2.0 - Multishank301159.015.0
Neuropixels 2.0 - Multishank400227.030.0
Neuropixels 2.0 - Multishank501259.030.0
Neuropixels 2.0 - Multishank600327.045.0
Neuropixels 2.0 - Multishank701359.045.0
Neuropixels 2.0 - Multishank800427.060.0
Neuropixels 2.0 - Multishank901459.060.0
Neuropixels 2.0 - Multishank1000527.075.0
Neuropixels 2.0 - Multishank1101559.075.0
\n", - "

...

\n", - "

Total: 5120

\n", - " " - ], - "text/plain": [ - "*probe_type *electrode shank shank_col shank_row x_coord y_coord \n", - "+------------+ +-----------+ +-------+ +-----------+ +-----------+ +---------+ +---------+\n", - "Neuropixels 2. 0 0 0 0 27.0 0.0 \n", - "Neuropixels 2. 1 0 1 0 59.0 0.0 \n", - "Neuropixels 2. 2 0 0 1 27.0 15.0 \n", - "Neuropixels 2. 3 0 1 1 59.0 15.0 \n", - "Neuropixels 2. 4 0 0 2 27.0 30.0 \n", - "Neuropixels 2. 5 0 1 2 59.0 30.0 \n", - "Neuropixels 2. 6 0 0 3 27.0 45.0 \n", - "Neuropixels 2. 7 0 1 3 59.0 45.0 \n", - "Neuropixels 2. 8 0 0 4 27.0 60.0 \n", - "Neuropixels 2. 9 0 1 4 59.0 60.0 \n", - "Neuropixels 2. 10 0 0 5 27.0 75.0 \n", - "Neuropixels 2. 11 0 1 5 59.0 75.0 \n", - " ...\n", - " (Total: 5120)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ProbeType.Electrode() & 'probe_type = \"Neuropixels 2.0 - Multishank\"'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " The electrode configuration setting on a given probe\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "

electrode_config_hash

\n", - " \n", - "
\n", - "

probe_type

\n", - " e.g. neuropixels_1.0\n", - "
\n", - "

electrode_config_name

\n", - " user friendly name\n", - "
\n", - " \n", - "

Total: 0

\n", - " " - ], - "text/plain": [ - "*electrode_con probe_type electrode_conf\n", - "+------------+ +------------+ +------------+\n", - "\n", - " (Total: 0)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "probe.ElectrodeConfig()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'ephys' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241m.\u001b[39mProbeInsertion()\n", - "\u001b[0;31mNameError\u001b[0m: name 'ephys' is not defined" - ] - } - ], - "source": [ - "ephys.ProbeInsertion()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
10122219108323581
244163119108323584
\n", - " \n", - "

Total: 2

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "101 22 2 19108323581 \n", - "244 163 1 19108323584 \n", - " (Total: 2)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion.insert1(\n", - " dict(\n", - " key,\n", - " probe='19108323584',\n", - " )\n", - ") # probe, subject, session_datetime needs to follow the restrictions of foreign keys.\n", - "ephys.ProbeInsertion()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Probe insertion implanted into an animal for a given session.\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

probe

\n", - " unique identifier for this model of probe (e.g. serial number)\n", - "
244163119108323583
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num probe \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 163 1 19108323583 \n", - " (Total: 1)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ProbeInsertion() & key" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Parameter set to be used in a clustering procedure\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_method

\n", - " \n", - "
\n", - "

paramset_desc

\n", - " \n", - "
\n", - "

param_set_hash

\n", - " \n", - "
\n", - "

params

\n", - " dictionary of all applicable parameters\n", - "
0kilosort2Spike sorting using Kilosort2de78cee1-526f-319e-b6d5-8a2ba04963d8=BLOB=
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*paramset_idx clustering_met paramset_desc param_set_hash params \n", - "+------------+ +------------+ +------------+ +------------+ +--------+\n", - "0 kilosort2 Spike sorting de78cee1-526f- =BLOB= \n", - " (Total: 1)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# # insert clustering task manually\n", - "# params_ks = {\n", - "# \"fs\": 30000,\n", - "# \"fshigh\": 150,\n", - "# \"minfr_goodchannels\": 0.1,\n", - "# \"Th\": [10, 4],\n", - "# \"lam\": 10,\n", - "# \"AUCsplit\": 0.9,\n", - "# \"minFR\": 0.02,\n", - "# \"momentum\": [20, 400],\n", - "# \"sigmaMask\": 30,\n", - "# \"ThPr\": 8,\n", - "# \"spkTh\": -6,\n", - "# \"reorder\": 1,\n", - "# \"nskip\": 25,\n", - "# \"GPU\": 1,\n", - "# \"Nfilt\": 1024,\n", - "# \"nfilt_factor\": 4,\n", - "# \"ntbuff\": 64,\n", - "# \"whiteningRange\": 32,\n", - "# \"nSkipCov\": 25,\n", - "# \"scaleproc\": 200,\n", - "# \"nPCs\": 3,\n", - "# \"useRAM\": 0,\n", - "# }\n", - "# ephys.ClusteringParamSet.insert_new_params(\n", - "# clustering_method=\"kilosort2\",\n", - "# paramset_idx=0,\n", - "# params=params_ks,\n", - "# paramset_desc=\"Spike sorting using Kilosort2\",\n", - "# )\n", - "Ephys.ClusteringParamSet()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Massive Populates:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00)])\n", - "Serial Number is 23107806302 while inserted probeserial is: 23107806184\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "ename": "FileNotFoundError", - "evalue": "No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[2], line 11\u001b[0m\n\u001b[1;32m 3\u001b[0m keys \u001b[38;5;241m=\u001b[39m [{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m242\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 4\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m243\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 5\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m244\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 6\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m245\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 7\u001b[0m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124manimal_id\u001b[39m\u001b[38;5;124m'\u001b[39m : \u001b[38;5;241m288\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msession\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m246\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minsertion_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1\u001b[39m},\n\u001b[1;32m 8\u001b[0m ]\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m keys:\n\u001b[0;32m---> 11\u001b[0m \u001b[43mpopulate_ephys\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/populate_ephys.py:58\u001b[0m, in \u001b[0;36mpopulate_ephys\u001b[0;34m(key)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;66;03m# TODO choose a different probe when they exist\u001b[39;00m\n\u001b[1;32m 51\u001b[0m ephys\u001b[38;5;241m.\u001b[39mProbeInsertion\u001b[38;5;241m.\u001b[39minsert1(\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28mdict\u001b[39m(\n\u001b[1;32m 53\u001b[0m key,\n\u001b[1;32m 54\u001b[0m probe\u001b[38;5;241m=\u001b[39m(probe\u001b[38;5;241m.\u001b[39mProbe() \u001b[38;5;241m&\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprobe_type=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNeuropixels 2.0 - Multishank\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mfetch(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprobe\u001b[39m\u001b[38;5;124m'\u001b[39m)[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 55\u001b[0m ), skip_duplicates\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 56\u001b[0m )\n\u001b[0;32m---> 58\u001b[0m \u001b[43mephys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEphysRecording\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpopulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisplay_progress\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 62\u001b[0m key[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparamset_idx\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3\u001b[39m\n\u001b[1;32m 63\u001b[0m file_path \u001b[38;5;241m=\u001b[39m (ephys\u001b[38;5;241m.\u001b[39mEphysRecording\u001b[38;5;241m.\u001b[39mEphysFile() \u001b[38;5;241m&\u001b[39m key)\u001b[38;5;241m.\u001b[39mfetch(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_path\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:241\u001b[0m, in \u001b[0;36mAutoPopulate.populate\u001b[0;34m(self, suppress_errors, return_exception_objects, reserve_jobs, order, limit, max_calls, display_progress, processes, make_kwargs, *restrictions)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m processes \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m (\n\u001b[1;32m 239\u001b[0m tqdm(keys, desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m display_progress \u001b[38;5;28;01melse\u001b[39;00m keys\n\u001b[1;32m 240\u001b[0m ):\n\u001b[0;32m--> 241\u001b[0m error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_populate1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjobs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopulate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 243\u001b[0m error_list\u001b[38;5;241m.\u001b[39mappend(error)\n", - "File \u001b[0;32m/opt/tljh/user/lib/python3.10/site-packages/datajoint/autopopulate.py:292\u001b[0m, in \u001b[0;36mAutoPopulate._populate1\u001b[0;34m(self, key, jobs, suppress_errors, return_exception_objects, make_kwargs)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m_allow_insert \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 292\u001b[0m \u001b[43mmake\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmake_kwargs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mKeyboardInterrupt\u001b[39;00m, \u001b[38;5;167;01mSystemExit\u001b[39;00m, \u001b[38;5;167;01mException\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/ephys.py:425\u001b[0m, in \u001b[0;36mEphysRecording.make\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 424\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 425\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 426\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo Open Ephys data found for probe insertion: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(key)\n\u001b[1;32m 427\u001b[0m )\n\u001b[1;32m 428\u001b[0m \u001b[38;5;66;03m#print(probe_data)\u001b[39;00m\n\u001b[1;32m 429\u001b[0m \u001b[38;5;66;03m#print(probe_data.ap_meta)\u001b[39;00m\n\u001b[1;32m 430\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m probe_data\u001b[38;5;241m.\u001b[39map_meta:\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: No Open Ephys data found for probe insertion: {'animal_id': 288, 'session': 242, 'insertion_number': 1}" - ] - } - ], - "source": [ - "from populate_ephys import populate_ephys\n", - "\n", - "keys = [{'animal_id' : 288, 'session': 242, 'insertion_number': 1},\n", - " {'animal_id' : 288, 'session': 243, 'insertion_number': 1},\n", - " {'animal_id' : 288, 'session': 244, 'insertion_number': 1},\n", - " {'animal_id' : 288, 'session': 245, 'insertion_number': 1},\n", - " {'animal_id' : 288, 'session': 246, 'insertion_number': 1},\n", - " ]\n", - "\n", - "for key in keys:\n", - " populate_ephys(key)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_225_1_2025-07-03_13-43-54/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.52it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 124\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_228_1_2025-07-03_13-57-56/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_228_1_2025-07-03_13-57-56/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.28it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 315\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_229_1_2025-07-03_14-04-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_229_1_2025-07-03_14-04-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.00it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 408\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_230_1_2025-07-03_14-10-14/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_230_1_2025-07-03_14-10-14/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 569\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.70it/s]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_231_1_2025-07-03_14-20-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_231_1_2025-07-03_14-20-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.67it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 548\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_233_1_2025-07-03_14-27-59/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_233_1_2025-07-03_14-27-59/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.34it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 439\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "639\n", - "16597908\n", - "HERE\n", - "639 639\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "16597908\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638]\n", - "['good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:34<00:00, 154.88s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_266_1_2025-07-23_11-27-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_266_1_2025-07-23_11-27-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 639\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.71it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "660\n", - "10721364\n", - "HERE\n", - "660 660\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "10721364\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659]\n", - "['good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:37<00:00, 97.66s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_273_1_2025-07-24_11-55-31/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_273_1_2025-07-24_11-55-31/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 660\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.78it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "691\n", - "14436090\n", - "HERE\n", - "691 691\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "14436090\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", - " 684 685 686 687 688 689 690]\n", - "['good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:20<00:00, 140.38s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_275_1_2025-07-24_13-01-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_275_1_2025-07-24_13-01-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 691\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.69it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "690\n", - "15545910\n", - "HERE\n", - "690 690\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "15545910\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683\n", - " 684 685 686 687 688 689]\n", - "['good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:35<00:00, 155.31s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_284_1_2025-07-31_10-36-32/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_284_1_2025-07-31_10-36-32/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 690\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.72it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "561\n", - "7838409\n", - "HERE\n", - "561 561\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "7838409\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560]\n", - "['mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:14<00:00, 74.76s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_290_1_2025-08-05_12-17-18/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_290_1_2025-08-05_12-17-18/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 561\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.91it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "654\n", - "10133761\n", - "HERE\n", - "654 654\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "10133761\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653]\n", - "['mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:38<00:00, 98.63s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_291_1_2025-08-06_11-21-48/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_291_1_2025-08-06_11-21-48/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 654\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.78it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "497\n", - "9719900\n", - "HERE\n", - "497 497\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "9719900\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496]\n", - "['good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:34<00:00, 94.26s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.09it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 497\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "594\n", - "10869318\n", - "HERE\n", - "594 594\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "10869318\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593]\n", - "['mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:47<00:00, 107.39s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.93it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 594\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "553\n", - "11262769\n", - "HERE\n", - "553 553\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "11262769\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552]\n", - "['mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:48<00:00, 108.18s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.12it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 553\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "602\n", - "14868285\n", - "HERE\n", - "602 602\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "14868285\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601]\n", - "['good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:33<00:00, 153.92s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 602\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.86it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "496\n", - "6621429\n", - "HERE\n", - "496 496\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "6621429\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495]\n", - "['mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:06<00:00, 66.85s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.13it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 496\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "539\n", - "13036038\n", - "HERE\n", - "539 539\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "13036038\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538]\n", - "['mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:04<00:00, 124.04s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.01it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 539\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "609\n", - "5333398\n", - "HERE\n", - "609 609\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "5333398\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608]\n", - "['good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [00:54<00:00, 54.08s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 609\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.85it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "546\n", - "7487518\n", - "HERE\n", - "546 546\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "7487518\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545]\n", - "['good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:13<00:00, 73.58s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.97it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 546\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "679\n", - "11912947\n", - "HERE\n", - "679 679\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "11912947\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669 670 671 672 673 674 675 676 677 678]\n", - "['good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:59<00:00, 119.80s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_332_1_2025-08-28_12-09-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_332_1_2025-08-28_12-09-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 679\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.74it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "544\n", - "13769765\n", - "HERE\n", - "544 544\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "13769765\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543]\n", - "['mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:11<00:00, 131.14s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.14it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 544\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "EphysRecording: 0%| | 0/1 [00:00\n", - "670\n", - "16055880\n", - "HERE\n", - "670 670\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "16055880\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647\n", - " 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665\n", - " 666 667 668 669]\n", - "['good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:38<00:00, 158.80s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_345_1_2025-09-04_10-14-30/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_345_1_2025-09-04_10-14-30/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 670\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.87it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "632\n", - "10798821\n", - "HERE\n", - "632 632\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "10798821\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631]\n", - "['mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:47<00:00, 107.50s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 632\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 1.91it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "634\n", - "17191560\n", - "HERE\n", - "634 634\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "17191560\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575\n", - " 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593\n", - " 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611\n", - " 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629\n", - " 630 631 632 633]\n", - "['mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'good' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua'\n", - " 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [02:48<00:00, 168.23s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_356_1_2025-09-11_10-15-39/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n", - "Final metrics list length: 634\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.05it/s]\n", - "EphysRecording: 0%| | 0/1 [00:00\n", - "570\n", - "10914628\n", - "HERE\n", - "570 570\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/mnt/lab/users/stamatis/My_Code/Python/Pipeline/element_array_ephys/element_array_ephys/readers/kilosort.py:182: RuntimeWarning: invalid value encountered in divide\n", - " self._data[\"spike_depths\"] = np.sum(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "line 1167\n", - "10914628\n", - "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n", - " 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n", - " 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53\n", - " 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\n", - " 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89\n", - " 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107\n", - " 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125\n", - " 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143\n", - " 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161\n", - " 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179\n", - " 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197\n", - " 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215\n", - " 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233\n", - " 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251\n", - " 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269\n", - " 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287\n", - " 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305\n", - " 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323\n", - " 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341\n", - " 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359\n", - " 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377\n", - " 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395\n", - " 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413\n", - " 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431\n", - " 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449\n", - " 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467\n", - " 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485\n", - " 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503\n", - " 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521\n", - " 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539\n", - " 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557\n", - " 558 559 560 561 562 563 564 565 566 567 568 569]\n", - "['mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'good' 'good'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'good' 'good' 'good' 'good' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'good' 'mua' 'good'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'good' 'mua'\n", - " 'good' 'good' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'good' 'mua' 'good'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'good' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'good' 'good'\n", - " 'mua' 'good' 'mua' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'good' 'good' 'mua' 'good' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'good' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'good'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'good' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'mua' 'mua' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'good' 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua'\n", - " 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'good' 'good' 'mua' 'mua' 'mua'\n", - " 'mua' 'good' 'good' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua' 'mua']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CuratedClustering: 100%|██████████| 1/1 [01:44<00:00, 104.72s/it]\n", - "QualityMetrics: 0%| | 0/1 [00:00\n", - "Checking /mnt/lab/data01/OpenEphys/244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/quality_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'num_spikes', 'firing_rate', 'presence_ratio', 'snr', 'isi_violations_ratio', 'isi_violations_count', 'rp_contamination', 'rp_violations', 'sliding_rp_violation', 'amplitude_cutoff', 'amplitude_median', 'amplitude_cv_median', 'amplitude_cv_range', 'sync_spike_2', 'sync_spike_4', 'sync_spike_8', 'firing_range', 'drift_ptp', 'drift_std', 'drift_mad', 'sd_ratio', 'isolation_distance', 'l_ratio', 'd_prime', 'silhouette', 'nn_hit_rate', 'nn_miss_rate']\n", - "Checking /mnt/lab/data01/OpenEphys/244_370_1_2025-09-17_10-22-12/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/sorting_analyzer/extensions/template_metrics/metrics.csv\n", - "Collumns ['Unnamed: 0', 'peak_to_valley', 'peak_trough_ratio', 'half_width', 'repolarization_slope', 'recovery_slope', 'num_positive_peaks', 'num_negative_peaks', 'velocity_above', 'velocity_below', 'exp_decay', 'spread']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "QualityMetrics: 100%|██████████| 1/1 [00:00<00:00, 2.00it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Final metrics list length: 570\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "from populate_ephys import populate_ephys\n", - "\n", - "keys = [{'animal_id' : 244, 'session': 225, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 228, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 229, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 230, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 231, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 233, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 266, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 273, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 275, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 283, 'insertion_number': 1}, \n", - " {'animal_id' : 244, 'session': 284, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 290, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 291, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 305, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 306, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 318, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 319, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 326, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 329, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 330, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 331, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 332, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 343, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 345, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 353, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 356, 'insertion_number': 1},\n", - " {'animal_id' : 244, 'session': 370, 'insertion_number': 1}, \n", - " ]\n", - "\n", - "for key in keys:\n", - " populate_ephys(key)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Clusters and waveforms metrics\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
24422513
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx \n", - "+-----------+ +---------+ +------------+ +------------+\n", - "244 225 1 3 \n", - " (Total: 1)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.QualityMetrics() & \"session = 225\"" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " Manual table for defining a clustering task ready to be run\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

animal_id

\n", - " animal id\n", - "
\n", - "

session

\n", - " session number\n", - "
\n", - "

insertion_number

\n", - " \n", - "
\n", - "

paramset_idx

\n", - " \n", - "
\n", - "

clustering_output_dir

\n", - " clustering output directory relative to the clustering root data directory\n", - "
\n", - "

task_mode

\n", - " 'load': load computed analysis results, 'trigger': trigger computation\n", - "
24430513244_305_1_2025-08-12_10-43-41/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24430613244_306_1_2025-08-13_10-05-09/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24431813244_318_1_2025-08-21_10-49-07/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24431913244_319_1_2025-08-22_10-26-19/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24432613244_326_1_2025-08-27_10-18-23/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24432913244_329_1_2025-08-27_13-04-45/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433013244_330_1_2025-08-27_14-27-10/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433113244_331_1_2025-08-28_10-39-43/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24433213244_332_1_2025-08-28_12-09-36/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24434313244_343_1_2025-09-03_10-08-03/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24434513244_345_1_2025-09-04_10-14-30/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
24435313244_353_1_2025-09-10_10-17-04/Record Node 101/experiment1/recording1/continuous/Neuropix-PXI-100.ProbeA/kilosort4/sorter_outputload
\n", - "

...

\n", - "

Total: 14

\n", - " " - ], - "text/plain": [ - "*animal_id *session *insertion_num *paramset_idx clustering_out task_mode \n", - "+-----------+ +---------+ +------------+ +------------+ +------------+ +-----------+\n", - "244 305 1 3 244_305_1_2025 load \n", - "244 306 1 3 244_306_1_2025 load \n", - "244 318 1 3 244_318_1_2025 load \n", - "244 319 1 3 244_319_1_2025 load \n", - "244 326 1 3 244_326_1_2025 load \n", - "244 329 1 3 244_329_1_2025 load \n", - "244 330 1 3 244_330_1_2025 load \n", - "244 331 1 3 244_331_1_2025 load \n", - "244 332 1 3 244_332_1_2025 load \n", - "244 343 1 3 244_343_1_2025 load \n", - "244 345 1 3 244_345_1_2025 load \n", - "244 353 1 3 244_353_1_2025 load \n", - " ...\n", - " (Total: 14)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ephys.ClusteringTask() & \"session > 300\"" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -}