From 2902779360ec0d4443aa11e4c0d0b326ef14260e Mon Sep 17 00:00:00 2001 From: Joseph Burling Date: Tue, 31 May 2022 13:48:04 -0500 Subject: [PATCH 1/4] chore: stylistic hooks for black, isort, etc. --- .pre-commit-config.yaml | 56 + Makefile | 4 - entrypoint.py | 20 +- howto.py | 5 +- ibl_pipeline/acquisition.py | 4 +- ibl_pipeline/acquisition_internal.py | 13 +- ibl_pipeline/acquisition_shared.py | 66 +- ibl_pipeline/action.py | 5 +- ibl_pipeline/action_internal.py | 12 +- ibl_pipeline/action_shared.py | 8 +- ibl_pipeline/analyses/analysis_utils.py | 126 +- ibl_pipeline/analyses/behavior.py | 637 +- ibl_pipeline/analyses/end_session_criteria.py | 178 +- ibl_pipeline/analyses/ephys.py | 115 +- ibl_pipeline/behavior.py | 5 +- ibl_pipeline/behavior_internal.py | 363 +- ibl_pipeline/common.py | 15 +- ibl_pipeline/data.py | 46 +- ibl_pipeline/ephys.py | 270 +- ibl_pipeline/group_shared/wheel.py | 202 +- ibl_pipeline/histology.py | 5 +- ibl_pipeline/histology_internal.py | 120 +- ibl_pipeline/histology_shared.py | 169 +- ibl_pipeline/ingest/__init__.py | 99 +- ibl_pipeline/ingest/acquisition.py | 67 +- ibl_pipeline/ingest/action.py | 307 +- ibl_pipeline/ingest/alyxraw.py | 20 +- ibl_pipeline/ingest/common.py | 12 +- ibl_pipeline/ingest/data.py | 258 +- ibl_pipeline/ingest/ephys.py | 99 +- ibl_pipeline/ingest/histology.py | 127 +- ibl_pipeline/ingest/ingest_utils.py | 18 +- ibl_pipeline/ingest/job.py | 6 +- ibl_pipeline/ingest/qc.py | 195 +- ibl_pipeline/ingest/reference.py | 161 +- ibl_pipeline/ingest/subject.py | 686 +- ibl_pipeline/patch/patch.py | 366 +- ibl_pipeline/plotting/behavior.py | 5 +- ibl_pipeline/plotting/behavior_internal.py | 375 +- ibl_pipeline/plotting/behavior_shared.py | 1 + ibl_pipeline/plotting/ephys.py | 1634 ++--- ibl_pipeline/plotting/ephys_plotting.py | 161 +- ibl_pipeline/plotting/figure_model.py | 107 +- ibl_pipeline/plotting/histology.py | 65 +- ibl_pipeline/plotting/histology_plotting.py | 56 +- .../plotting/plotting_utils_behavior.py | 684 +- ibl_pipeline/plotting/plotting_utils_ephys.py | 608 +- ibl_pipeline/plotting/utils.py | 58 +- ibl_pipeline/process/__init__.py | 59 +- ibl_pipeline/process/autoprocess.py | 285 +- ibl_pipeline/process/create_ingest_task.py | 131 +- ibl_pipeline/process/delete_update_entries.py | 268 +- ibl_pipeline/process/ingest_alyx_raw.py | 184 +- .../process/ingest_alyx_raw_postgres.py | 238 +- ibl_pipeline/process/ingest_brainregion.py | 88 +- ibl_pipeline/process/ingest_membership.py | 384 +- ibl_pipeline/process/ingest_real.py | 235 +- ibl_pipeline/process/ingest_shadow.py | 117 +- ibl_pipeline/process/populate_behavior.py | 125 +- ibl_pipeline/process/populate_ephys.py | 68 +- ibl_pipeline/process/populate_wheel.py | 39 +- ibl_pipeline/process/process_histology.py | 171 +- ibl_pipeline/process/process_public.py | 169 +- ibl_pipeline/process/process_qc.py | 127 +- ibl_pipeline/process/update_utils.py | 33 +- ibl_pipeline/public.py | 137 +- ibl_pipeline/qc.py | 90 +- ibl_pipeline/reference.py | 35 +- ibl_pipeline/subject.py | 5 +- ibl_pipeline/subject_internal.py | 9 +- ibl_pipeline/subject_shared.py | 9 +- ibl_pipeline/tests/tear_down_utils.py | 127 +- ibl_pipeline/update.py | 6 +- ibl_pipeline/utils/__init__.py | 9 +- ibl_pipeline/utils/atlas.py | 33 +- ibl_pipeline/utils/delete_unused_external.py | 12 +- ibl_pipeline/utils/dependent_tables.py | 26 +- ibl_pipeline/utils/dj_alter_table.py | 53 +- ibl_pipeline/utils/dj_compare_table.py | 95 +- .../utils/dj_compare_table_archived.py | 33 +- ibl_pipeline/utils/psychofit.py | 233 +- ingest-example.env | 1 - ingest_to_detect_updates.sh | 1 - .../Behavioral overview snapshot.ipynb | 138 +- .../citricacid_performance.ipynb | 808 +-- .../erd_behavior_ephys.ipynb | 1994 +----- .../AmbientSensorData.ipynb | 182 +- .../notebooks_plotting/ContrastHeatmap.ipynb | 4003 +----------- .../notebooks_plotting/DatePsychCurve.ipynb | 1650 +---- .../DateReactionTimeContrast.ipynb | 414 +- .../DateReactionTimeTrialNumber.ipynb | 3336 +--------- notebooks/notebooks_plotting/FitPars.ipynb | 4125 +----------- notebooks/notebooks_plotting/PSTH.ipynb | 117 +- .../notebooks_plotting/PSTH_combined.ipynb | 3158 +-------- .../PerformanceReactionTime.ipynb | 823 +-- .../SessionPsychCurve.ipynb | 1668 +---- .../SessionReactionTimeContrast.ipynb | 316 +- .../SessionReactionTimeTrialNumber.ipynb | 3330 +--------- .../TrialCountsSessionDuration.ipynb | 1388 +--- .../contrast_heatmap-Copy1.json | 2 +- .../notebooks_plotting/contrast_heatmap.json | 2 +- .../date_reaction_time_contrast.json | 2 +- notebooks/notebooks_plotting/fit_pars.json | 2 +- .../performance_reaction_time.json | 2 +- .../notebooks_plotting/plotting_utils.py | 242 +- .../populate plotting.ipynb | 12 +- notebooks/notebooks_plotting/psth.json | 2 +- .../notebooks_plotting/psth_combined.json | 2 +- .../psth_combined_with_errorbars.json | 2 +- .../psych_results_date-Copy1.json | 2 +- .../psych_results_date.json | 2 +- notebooks/notebooks_plotting/rasters.json | 2 +- .../notebooks_plotting/rasters_contrast.json | 2 +- .../notebooks_plotting/rasters_feedback.json | 2 +- .../rasters_feedback_type.json | 2 +- .../reaction_time_contrast.json | 2 +- .../reaction_time_trial_number.json | 2 +- .../session_psych_results.json | 2 +- .../session_reaction_time_contrast.json | 2 +- .../session_reaction_time_trial_number.json | 2 +- .../trial_counts_session_duration.json | 2 +- .../notebooks_plotting/water_weight.json | 2 +- .../notebooks_qc/brainwidemap_sessions.txt | 2 +- .../201904_tutorial/Check_tables.ipynb | 67 +- .../Query_example_subject.ipynb | 1566 +---- .../Query_example_training_summary.ipynb | 500 +- .../Query_example_water_info.ipynb | 1643 +---- .../201904_tutorial/erd.ipynb | 5658 +---------------- .../201904_tutorial/list_tables.py | 6 +- .../paper_behavior_functions.py | 280 +- .../paper_behavior_functions.py | 280 +- ...1-Explore IBL behavior data pipeline.ipynb | 2 +- .../paper_behavior_functions.py | 280 +- .../paper_behavior_functions.py | 280 +- .../05-Access the database locally.ipynb | 90 +- .../paper_behavior_functions.py | 677 +- .../Replication of Figure 2a and b.ipynb | 89 +- .../one_example.ipynb | 104 +- .../paper_behavior_functions.py | 677 +- .../behavioral_snapshots/README.md | 1 - .../behavioral_snapshots/behavior_plots.py | 464 +- .../behavioral_overview_perlab.py | 468 +- .../behavioral_snapshot.py | 346 +- .../load_mouse_data_datajoint.py | 240 +- scripts/analyses_behavior.py | 15 +- scripts/auto_update_subject_fields.py | 205 +- scripts/auto_update_trajectories.py | 49 +- scripts/behavior_ingest_analyses.py | 8 +- scripts/compute_latest_date.py | 19 +- scripts/create_summary_csv.py | 93 +- scripts/dbtest/ingest_alyx_raw_dbtest.py | 17 +- scripts/dbtest/ingest_alyx_real.py | 17 +- scripts/dbtest/ingest_alyx_shadow.py | 18 +- .../dbtest/ingest_alyx_shadow_membership.py | 469 +- scripts/dbtest/table_names.py | 109 +- scripts/delete_real_tables_for_updates.py | 9 +- scripts/delete_shadow_tables_for_updates.py | 57 +- scripts/ibl-shell.py | 45 +- scripts/ingest_alyx_raw.py | 125 +- scripts/ingest_alyx_real.py | 35 +- scripts/ingest_alyx_shadow.py | 37 +- scripts/ingest_alyx_shadow_membership.py | 492 +- .../ingest_alyx_shadow_membership_updates.py | 491 +- scripts/ingest_behavior.py | 25 +- scripts/ingest_data_tables.py | 163 +- scripts/ingest_ephys_movement.py | 18 +- scripts/ingest_increment.py | 8 +- scripts/ingest_utils.py | 17 +- scripts/plotting_behavior.py | 59 +- scripts/populate_external.py | 7 +- scripts/public/behavior_ingest_analyses.py | 24 +- scripts/public/delete_non_sharing_entries.py | 8 +- scripts/public/drop_non_sharing_tables.py | 14 +- scripts/public/ingest_alyx_raw.py | 69 +- scripts/public/ingest_alyx_real.py | 15 +- scripts/public/ingest_alyx_shadow.py | 19 +- .../public/ingest_alyx_shadow_membership.py | 320 +- scripts/public/ingest_data_tables.py | 159 +- scripts/public/ingest_user_map.py | 17 +- scripts/public/plotting_behavior.py | 32 +- scripts/public/table_names.py | 88 +- scripts/public/utils.py | 106 +- scripts/table_names.py | 131 +- scripts/test_pipeline/ingest_alyx_raw.py | 69 +- scripts/test_spinning_brain.py | 63 +- scripts/tests/add_probe_label.py | 28 +- scripts/tests/criteria.py | 10 +- scripts/tests/ephys_ingestion.py | 118 +- scripts/tests/ephys_ingestion_single.py | 76 +- scripts/tests/external_performance.py | 203 +- scripts/tests/patching.py | 29 +- scripts/tests/reaction_time_correction.py | 49 +- .../add_empty_entries_to_aligned_times.py | 39 +- scripts/updates/add_level_graph_order.py | 18 +- scripts/updates/add_ts.py | 27 +- scripts/updates/auto_deletion.py | 32 +- scripts/updates/auto_updates.py | 60 +- ...elete_and_repopulate_old_ephys_sessions.py | 45 +- scripts/updates/delete_bad_aligned_spikes.py | 9 +- scripts/updates/delete_corrupted_sessions.py | 40 +- scripts/updates/detect_updates.py | 46 +- scripts/updates/detect_updates_subjects.py | 46 +- scripts/updates/drop_alyx_raw.py | 7 +- scripts/updates/ingest_alyx_raw.py | 99 +- scripts/updates/ingest_alyx_shadow_updates.py | 8 +- scripts/updates/repopulate_prob_left.py | 322 +- scripts/updates/tables_for_updates.py | 90 +- scripts/updates/tables_with_ts.py | 112 +- scripts/updates/update_complete_session.py | 51 +- scripts/updates/update_go_cue_fields.py | 72 +- scripts/updates/update_iti_reward_volume.py | 72 +- .../updates/update_probe_insertion_uuid.py | 51 +- scripts/updates/update_psth.py | 13 +- scripts/updates/update_rt.py | 57 +- scripts/updates/update_session_uuids.py | 43 +- scripts/updates/update_spike_amp_time.py | 11 +- scripts/updates/update_summary_by_date.py | 36 +- scripts/updates/update_trial_fields.py | 61 +- scripts/validate_new_ingestion.py | 87 +- 219 files changed, 13039 insertions(+), 46489 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..1dccc1af --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,56 @@ +default_language_version: + python: python3.9 +# files: "^(tests|src\/brain_lab)\/.*$" +exclude: "^$" +default_stages: [commit] +repos: + # for debugging hook input arguments + - repo: meta + hooks: + - id: identity + exclude: (devcontainer\.json|\.code-workspace)$ + + # out-of-the-box hooks + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.2.0 + hooks: + - id: check-case-conflict + - id: detect-private-key + - id: check-added-large-files + args: ["--maxkb=25000"] + - id: end-of-file-fixer + exclude: "^LICENSE|\\.csv$" + - id: mixed-line-ending + args: ["--fix=lf"] # replace 'auto' with 'lf' to enforce Linux/Mac line endings or 'crlf' for Windows + exclude: "^LICENSE|\\.csv$" + + # run black code formatter on python files + - repo: https://github.com/psf/black + rev: 22.3.0 + hooks: + - id: black + args: + - "--line-length" + - "88" + + # run isort on python files to sort imports + - repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + args: + - "--profile" + - "black" + + # run black on python code blocks in documentation files. + - repo: https://github.com/asottile/blacken-docs + rev: v1.12.1 + hooks: + - id: blacken-docs + additional_dependencies: [black] + + # strip out metadata for notebooks + - repo: https://github.com/kynan/nbstripout + rev: 0.5.0 + hooks: + - id: nbstripout diff --git a/Makefile b/Makefile index fb035b43..47d3490f 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,3 @@ pypitest: clean sdist wheel clean: rm -rf dist && rm -rf build && rm -rf *.egg-info - - - - diff --git a/entrypoint.py b/entrypoint.py index 270cc50b..a24adcea 100644 --- a/entrypoint.py +++ b/entrypoint.py @@ -1,17 +1,19 @@ import sys -from ibl_pipeline.ingest import job -from ibl_pipeline.process import populate_behavior, populate_wheel, populate_ephys +from ibl_pipeline.ingest import job +from ibl_pipeline.process import populate_behavior, populate_ephys, populate_wheel -if __name__ == '__main__': - if sys.argv[1] == 'ingest': +if __name__ == "__main__": + if sys.argv[1] == "ingest": job.populate_ingestion_tables(run_duration=-1) - elif sys.argv[1] == 'behavior': + elif sys.argv[1] == "behavior": populate_behavior.main(backtrack_days=3, run_duration=-1) - elif sys.argv[1] == 'wheel': + elif sys.argv[1] == "wheel": populate_wheel.main(backtrack_days=3, run_duration=-1) - elif sys.argv[1] == 'ephys': + elif sys.argv[1] == "ephys": populate_ephys.main(run_duration=-1) else: - raise ValueError(f'Usage error! Unknown argument {sys.argv[1]}. ' - f'Accepting: ingest|behavior|wheel|ephys') + raise ValueError( + f"Usage error! Unknown argument {sys.argv[1]}. " + f"Accepting: ingest|behavior|wheel|ephys" + ) diff --git a/howto.py b/howto.py index 53b4cfe4..f1ac227a 100644 --- a/howto.py +++ b/howto.py @@ -1,6 +1,7 @@ # clean up external files import datajoint as dj -schema = dj.schema('ibl_ephys') + +schema = dj.schema("ibl_ephys") # This only deletes entries that has been deleted before in the database. -schema.external['ephys_local'].delete(delete_external_files=True) +schema.external["ephys_local"].delete(delete_external_files=True) diff --git a/ibl_pipeline/acquisition.py b/ibl_pipeline/acquisition.py index d9b40497..8f234cfb 100755 --- a/ibl_pipeline/acquisition.py +++ b/ibl_pipeline/acquisition.py @@ -1,5 +1,5 @@ -from ibl_pipeline.acquisition_shared import * from ibl_pipeline import mode +from ibl_pipeline.acquisition_shared import * -if mode != 'public': +if mode != "public": from ibl_pipeline.acquisition_internal import * diff --git a/ibl_pipeline/acquisition_internal.py b/ibl_pipeline/acquisition_internal.py index ec5b9b45..ca7bd2a5 100644 --- a/ibl_pipeline/acquisition_internal.py +++ b/ibl_pipeline/acquisition_internal.py @@ -1,24 +1,23 @@ import datajoint as dj -from ibl_pipeline import reference, subject, action -from ibl_pipeline import mode +from ibl_pipeline import action, mode, reference, subject # try to access parent schemas with virtual modules, if not created, import from package try: - action = dj.create_virtual_module('action', 'ibl_action') + action = dj.create_virtual_module("action", "ibl_action") except dj.DataJointError: from ibl_pipeline import action try: - acquisition = dj.create_virtual_module('acquisition', 'ibl_acquistion') + acquisition = dj.create_virtual_module("acquisition", "ibl_acquistion") Session = acquisition.Session except dj.DataJointError: from ibl_pipeline.acquisition import Session -if mode == 'update': - schema = dj.schema('ibl_acquisition') +if mode == "update": + schema = dj.schema("ibl_acquisition") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_acquisition') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_acquisition") @schema diff --git a/ibl_pipeline/acquisition_shared.py b/ibl_pipeline/acquisition_shared.py index 819f6ffd..997690e2 100644 --- a/ibl_pipeline/acquisition_shared.py +++ b/ibl_pipeline/acquisition_shared.py @@ -1,20 +1,21 @@ -import datajoint as dj import datetime -from tqdm import tqdm import uuid -from ibl_pipeline import reference, subject, action -from ibl_pipeline import mode, one +import datajoint as dj +from tqdm import tqdm +from ibl_pipeline import action, mode, one, reference, subject -alyxraw = dj.create_virtual_module('alyxraw', dj.config.get('database.prefix', '') + 'ibl_alyxraw') +alyxraw = dj.create_virtual_module( + "alyxraw", dj.config.get("database.prefix", "") + "ibl_alyxraw" +) # Map to the correct schema based on mode. -if mode == 'update': - schema = dj.schema('ibl_acquisition') +if mode == "update": + schema = dj.schema("ibl_acquisition") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_acquisition') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_acquisition") @schema @@ -42,36 +43,47 @@ def insert_with_alyx_rest(cls, backtrack_days=1, verbose=False): """ date_cutoff = datetime.datetime.now() - datetime.timedelta(days=backtrack_days) - alyx_sessions = one.alyx.rest('sessions', 'list', django=f'start_time__gte,{date_cutoff}') + alyx_sessions = one.alyx.rest( + "sessions", "list", django=f"start_time__gte,{date_cutoff}" + ) for alyx_session in tqdm(alyx_sessions): - if not subject.Subject & {'subject_nickname': alyx_session['subject']}: + if not subject.Subject & {"subject_nickname": alyx_session["subject"]}: continue sess_key = { - 'subject_uuid': (subject.Subject & {'subject_nickname': alyx_session['subject']}).fetch1('subject_uuid'), - 'session_start_time': datetime.datetime.strptime( - alyx_session["start_time"], '%Y-%m-%dT%H:%M:%S.%f').strftime('%Y-%m-%d %H:%M:%S'), - } + "subject_uuid": ( + subject.Subject & {"subject_nickname": alyx_session["subject"]} + ).fetch1("subject_uuid"), + "session_start_time": datetime.datetime.strptime( + alyx_session["start_time"], "%Y-%m-%dT%H:%M:%S.%f" + ).strftime("%Y-%m-%d %H:%M:%S"), + } - sess_uuid = alyx_session['url'].split('/')[-1] + sess_uuid = alyx_session["url"].split("/")[-1] - if (cls & sess_key) or (alyxraw.AlyxRaw & {'uuid': sess_uuid}): + if (cls & sess_key) or (alyxraw.AlyxRaw & {"uuid": sess_uuid}): # If this session is already in AlyxRaw, skip, as it will get inserted into Session in this ingestion cycle continue if verbose: - print(f'\tInserting new session directly from Alyx: {alyx_session["subject"]}, {sess_key["session_start_time"]}') - - cls.insert1({**sess_key, - 'session_uuid': uuid.UUID(sess_uuid), - 'session_number': alyx_session['number'], - 'session_end_time': None, - 'session_lab': alyx_session['lab'], - 'session_location': None, - 'task_protocol': alyx_session['task_protocol'], - 'session_type': None, - 'session_narrative': None}) + print( + f'\tInserting new session directly from Alyx: {alyx_session["subject"]}, {sess_key["session_start_time"]}' + ) + + cls.insert1( + { + **sess_key, + "session_uuid": uuid.UUID(sess_uuid), + "session_number": alyx_session["number"], + "session_end_time": None, + "session_lab": alyx_session["lab"], + "session_location": None, + "task_protocol": alyx_session["task_protocol"], + "session_type": None, + "session_narrative": None, + } + ) @schema diff --git a/ibl_pipeline/action.py b/ibl_pipeline/action.py index 065dd1c7..8849012f 100755 --- a/ibl_pipeline/action.py +++ b/ibl_pipeline/action.py @@ -1,6 +1,5 @@ -from ibl_pipeline.action_shared import * from ibl_pipeline import mode +from ibl_pipeline.action_shared import * - -if mode != 'public': +if mode != "public": from ibl_pipeline.action_internal import * diff --git a/ibl_pipeline/action_internal.py b/ibl_pipeline/action_internal.py index 0abc9c6c..b09a863b 100644 --- a/ibl_pipeline/action_internal.py +++ b/ibl_pipeline/action_internal.py @@ -1,14 +1,16 @@ +import os + import datajoint as dj + from ibl_pipeline import reference, subject from ibl_pipeline.action_shared import ProcedureType -import os -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") -if mode == 'update': - schema = dj.schema('ibl_action') +if mode == "update": + schema = dj.schema("ibl_action") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_action') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_action") @schema diff --git a/ibl_pipeline/action_shared.py b/ibl_pipeline/action_shared.py index 90407d52..059cf57e 100644 --- a/ibl_pipeline/action_shared.py +++ b/ibl_pipeline/action_shared.py @@ -1,11 +1,11 @@ import datajoint as dj -from ibl_pipeline import mode +from ibl_pipeline import mode -if mode == 'update': - schema = dj.schema('ibl_action') +if mode == "update": + schema = dj.schema("ibl_action") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_action') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_action") @schema diff --git a/ibl_pipeline/analyses/analysis_utils.py b/ibl_pipeline/analyses/analysis_utils.py index 65f54120..42f90f1d 100755 --- a/ibl_pipeline/analyses/analysis_utils.py +++ b/ibl_pipeline/analyses/analysis_utils.py @@ -1,82 +1,87 @@ import datajoint as dj -from ibl_pipeline import subject, action, acquisition, behavior -from ibl_pipeline.utils import psychofit as psy import numpy as np import pandas as pd -import scipy import scikits.bootstrap as bootstrap +import scipy + +from ibl_pipeline import acquisition, action, behavior, subject +from ibl_pipeline.utils import psychofit as psy def compute_psych_pars(trials): trials = trials.proj( - 'trial_response_choice', - signed_contrast='trial_stim_contrast_right \ - - trial_stim_contrast_left') - q = dj.U('signed_contrast').aggr(trials, n='count(*)', - n_right='sum(trial_response_choice="CCW")') + "trial_response_choice", + signed_contrast="trial_stim_contrast_right \ + - trial_stim_contrast_left", + ) + q = dj.U("signed_contrast").aggr( + trials, n="count(*)", n_right='sum(trial_response_choice="CCW")' + ) signed_contrasts, n_trials_stim, n_trials_stim_right = q.fetch( - 'signed_contrast', 'n', 'n_right' + "signed_contrast", "n", "n_right" ) signed_contrasts = signed_contrasts.astype(float) n_trials_stim = n_trials_stim.astype(int) n_trials_stim_right = n_trials_stim_right.astype(int) # merge left 0 and right 0 - data = pd.DataFrame({ - 'signed_contrasts': signed_contrasts, - 'n_trials_stim': n_trials_stim, - 'n_trials_stim_right': n_trials_stim_right - }) - data = data.groupby('signed_contrasts').sum() + data = pd.DataFrame( + { + "signed_contrasts": signed_contrasts, + "n_trials_stim": n_trials_stim, + "n_trials_stim_right": n_trials_stim_right, + } + ) + data = data.groupby("signed_contrasts").sum() signed_contrasts = np.unique(signed_contrasts) - n_trials_stim_right = np.array(data['n_trials_stim_right']) - n_trials_stim = np.array(data['n_trials_stim']) + n_trials_stim_right = np.array(data["n_trials_stim_right"]) + n_trials_stim = np.array(data["n_trials_stim"]) - prob_choose_right = np.divide(n_trials_stim_right, - n_trials_stim) + prob_choose_right = np.divide(n_trials_stim_right, n_trials_stim) # convert to percentage and fit psychometric function contrasts = signed_contrasts * 100 pars, L = psy.mle_fit_psycho( np.vstack([contrasts, n_trials_stim, prob_choose_right]), - P_model='erf_psycho_2gammas', - parstart=np.array([np.mean(contrasts), 20., 0.05, 0.05]), - parmin=np.array([np.min(contrasts), 0., 0., 0.]), - parmax=np.array([np.max(contrasts), 100., 1, 1])) + P_model="erf_psycho_2gammas", + parstart=np.array([np.mean(contrasts), 20.0, 0.05, 0.05]), + parmin=np.array([np.min(contrasts), 0.0, 0.0, 0.0]), + parmax=np.array([np.max(contrasts), 100.0, 1, 1]), + ) return { - 'signed_contrasts': signed_contrasts, - 'n_trials_stim': n_trials_stim, - 'n_trials_stim_right': n_trials_stim_right, - 'prob_choose_right': prob_choose_right, - 'bias': pars[0], - 'threshold': pars[1], - 'lapse_low': pars[2], - 'lapse_high': pars[3] + "signed_contrasts": signed_contrasts, + "n_trials_stim": n_trials_stim, + "n_trials_stim_right": n_trials_stim_right, + "prob_choose_right": prob_choose_right, + "bias": pars[0], + "threshold": pars[1], + "lapse_low": pars[2], + "lapse_high": pars[3], } def compute_performance_easy(trials): trials = trials.proj( - 'trial_response_choice', - signed_contrast='trial_stim_contrast_right \ - - trial_stim_contrast_left') + "trial_response_choice", + signed_contrast="trial_stim_contrast_right \ + - trial_stim_contrast_left", + ) - trials_easy = trials & 'ABS(signed_contrast)>0.499' + trials_easy = trials & "ABS(signed_contrast)>0.499" if not len(trials_easy): return else: - trials_response_choice, trials_signed_contrast = \ - trials_easy.fetch('trial_response_choice', 'signed_contrast') - n_correct_trials_easy = \ - np.sum((trials_response_choice == "CCW") & - (trials_signed_contrast > 0)) + \ - np.sum((trials_response_choice == "CW") & - (trials_signed_contrast < 0)) - return n_correct_trials_easy/len(trials_easy) + trials_response_choice, trials_signed_contrast = trials_easy.fetch( + "trial_response_choice", "signed_contrast" + ) + n_correct_trials_easy = np.sum( + (trials_response_choice == "CCW") & (trials_signed_contrast > 0) + ) + np.sum((trials_response_choice == "CW") & (trials_signed_contrast < 0)) + return n_correct_trials_easy / len(trials_easy) def compute_reaction_time(trials, compute_ci=False): @@ -91,38 +96,37 @@ def compute_reaction_time(trials, compute_ci=False): # 1. There were trials where stim_on_time is not available, # but go_cue_trigger_time is; # 2. There were any trials where stim_on_time is available. - trials_go_cue_only = trials & \ - 'trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL' - trials_stim_on = trials & \ - 'trial_stim_on_time is not NULL' + trials_go_cue_only = ( + trials & "trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL" + ) + trials_stim_on = trials & "trial_stim_on_time is not NULL" rt = [] if len(trials_go_cue_only): trials_rt_go_cue_only = trials_go_cue_only.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_go_cue_trigger_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_go_cue_trigger_time", + ) rt += trials_rt_go_cue_only.fetch(as_dict=True) if len(trials_stim_on): trials_rt_stim_on = trials.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_stim_on_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_stim_on_time", + ) rt += trials_rt_stim_on.fetch(as_dict=True) rt = pd.DataFrame(rt) - rt = rt[['signed_contrast', 'rt']] - grouped_rt = rt['rt'].groupby(rt['signed_contrast']) + rt = rt[["signed_contrast", "rt"]] + grouped_rt = rt["rt"].groupby(rt["signed_contrast"]) median_rt = grouped_rt.median() if compute_ci: - ci_rt = grouped_rt.apply( - lambda x: bootstrap.ci(x, scipy.nanmedian, alpha=0.32)) - ci_low = np.array( - [x[0] if not np.isnan(x[0]) else None for x in ci_rt]) - ci_high = np.array( - [x[1] if not np.isnan(x[1]) else None for x in ci_rt]) + ci_rt = grouped_rt.apply(lambda x: bootstrap.ci(x, scipy.nanmedian, alpha=0.32)) + ci_low = np.array([x[0] if not np.isnan(x[0]) else None for x in ci_rt]) + ci_high = np.array([x[1] if not np.isnan(x[1]) else None for x in ci_rt]) return median_rt.values, ci_low, ci_high else: return median_rt.values diff --git a/ibl_pipeline/analyses/behavior.py b/ibl_pipeline/analyses/behavior.py index 2a6cac49..7d51fbb1 100755 --- a/ibl_pipeline/analyses/behavior.py +++ b/ibl_pipeline/analyses/behavior.py @@ -1,39 +1,42 @@ -import datajoint as dj -from ibl_pipeline import subject, action, acquisition, behavior -from ibl_pipeline.utils import psychofit as psy -from ibl_pipeline.analyses import analysis_utils as utils from datetime import datetime +from pdb import set_trace as bp + +import datajoint as dj import numpy as np import pandas as pd -from pdb import set_trace as bp -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_analyses_behavior') +from ibl_pipeline import acquisition, action, behavior, subject +from ibl_pipeline.analyses import analysis_utils as utils +from ibl_pipeline.utils import psychofit as psy + +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_analyses_behavior") -def compute_reaction_time(trials, stim_on_type='stim on'): +def compute_reaction_time(trials, stim_on_type="stim on"): # median reaction time - if stim_on_type == 'stim on': + if stim_on_type == "stim on": trials_rt = trials.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_stim_on_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_stim_on_time", + ) else: trials_rt = trials.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_go_cue_trigger_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_go_cue_trigger_time", + ) rt = trials_rt.fetch(as_dict=True) rt = pd.DataFrame(rt) - rt = rt[['signed_contrast', 'rt']] + rt = rt[["signed_contrast", "rt"]] try: - median_rt = rt.groupby('signed_contrast').median().reset_index() + median_rt = rt.groupby("signed_contrast").median().reset_index() except: - median_rt = rt.groupby('signed_contrast').count().reset_index() - median_rt['rt'] = np.nan + median_rt = rt.groupby("signed_contrast").count().reset_index() + median_rt["rt"] = np.nan return median_rt @@ -63,11 +66,12 @@ def make(self, key): performance_easy = utils.compute_performance_easy(trials) if performance_easy: - psych_results['performance_easy'] = performance_easy + psych_results["performance_easy"] = performance_easy n_trials, n_correct_trials = (behavior.TrialSet & key).fetch1( - 'n_trials', 'n_correct_trials') - psych_results['performance'] = n_correct_trials/n_trials + "n_trials", "n_correct_trials" + ) + psych_results["performance"] = n_correct_trials / n_trials self.insert1(psych_results) @@ -91,33 +95,32 @@ class PsychResultsBlock(dj.Computed): def make(self, key): - task_protocol = (acquisition.Session & key).fetch1( - 'task_protocol') + task_protocol = (acquisition.Session & key).fetch1("task_protocol") trials = behavior.TrialSet.Trial & key - if task_protocol and ('biased' in task_protocol or 'ephys' in task_protocol): - prob_lefts = dj.U('trial_stim_prob_left') & trials + if task_protocol and ("biased" in task_protocol or "ephys" in task_protocol): + prob_lefts = dj.U("trial_stim_prob_left") & trials for prob_left in prob_lefts: - p_left = prob_left['trial_stim_prob_left'] - trials_sub = trials & \ - 'ABS(trial_stim_prob_left - {})<1e-6'.format(p_left) + p_left = prob_left["trial_stim_prob_left"] + trials_sub = trials & "ABS(trial_stim_prob_left - {})<1e-6".format( + p_left + ) # compute psych results psych_results = utils.compute_psych_pars(trials_sub) psych_results = {**key, **psych_results} - psych_results['prob_left'] = prob_left[ - 'trial_stim_prob_left'] - psych_results['prob_left_block'] = round(p_left*10)*10 + psych_results["prob_left"] = prob_left["trial_stim_prob_left"] + psych_results["prob_left_block"] = round(p_left * 10) * 10 self.insert1(psych_results) else: psych_results = utils.compute_psych_pars(trials) psych_results = {**key, **psych_results} - psych_results['prob_left'] = 0.5 - psych_results['prob_left_block'] = 50 + psych_results["prob_left"] = 0.5 + psych_results["prob_left_block"] = 50 self.insert1(psych_results) @@ -129,15 +132,19 @@ class ReactionTime(dj.Computed): --- reaction_time: blob # median reaction time for each contrasts """ - key_source = PsychResults & \ - (behavior.CompleteTrialSession & - 'stim_on_times_status in ("Complete", "Partial") or \ - go_cue_trigger_times_status in ("Complete", "Partial")') + key_source = PsychResults & ( + behavior.CompleteTrialSession + & 'stim_on_times_status in ("Complete", "Partial") or \ + go_cue_trigger_times_status in ("Complete", "Partial")' + ) def make(self, key): - trials = behavior.TrialSet.Trial & key & \ - 'trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL' - key['reaction_time'] = utils.compute_reaction_time(trials) + trials = ( + behavior.TrialSet.Trial + & key + & "trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL" + ) + key["reaction_time"] = utils.compute_reaction_time(trials) self.insert1(key) @@ -152,42 +159,50 @@ class ReactionTimeContrastBlock(dj.Computed): reaction_time_ci_low: blob # 68 percent confidence interval lower bound """ - key_source = behavior.TrialSet & \ - (behavior.CompleteTrialSession & - 'stim_on_times_status in ("Complete", "Partial") or \ - go_cue_trigger_times_status in ("Complete", "Partial")') + key_source = behavior.TrialSet & ( + behavior.CompleteTrialSession + & 'stim_on_times_status in ("Complete", "Partial") or \ + go_cue_trigger_times_status in ("Complete", "Partial")' + ) def make(self, key): - task_protocol = (acquisition.Session & key).fetch1( - 'task_protocol') + task_protocol = (acquisition.Session & key).fetch1("task_protocol") - trials = behavior.TrialSet.Trial & key & \ - 'trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL' + trials = ( + behavior.TrialSet.Trial + & key + & "trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL" + ) - if task_protocol and ('biased' in task_protocol or 'ephys' in task_protocol): - prob_lefts = dj.U('trial_stim_prob_left') & trials + if task_protocol and ("biased" in task_protocol or "ephys" in task_protocol): + prob_lefts = dj.U("trial_stim_prob_left") & trials for prob_left in prob_lefts: rt = key.copy() - p_left = prob_left['trial_stim_prob_left'] - trials_sub = trials & \ - 'ABS(trial_stim_prob_left - {})<1e-6'.format(p_left) + p_left = prob_left["trial_stim_prob_left"] + trials_sub = trials & "ABS(trial_stim_prob_left - {})<1e-6".format( + p_left + ) # compute reaction_time - rt['reaction_time_contrast'], rt['reaction_time_ci_low'], \ - rt['reaction_time_ci_high'] = utils.compute_reaction_time( - trials_sub, compute_ci=True) + ( + rt["reaction_time_contrast"], + rt["reaction_time_ci_low"], + rt["reaction_time_ci_high"], + ) = utils.compute_reaction_time(trials_sub, compute_ci=True) - rt['prob_left_block'] = round(p_left*10)*10 + rt["prob_left_block"] = round(p_left * 10) * 10 self.insert1(rt) else: rt = key.copy() - rt['prob_left_block'] = 50 - rt['reaction_time_contrast'], rt['reaction_time_ci_low'], \ - rt['reaction_time_ci_high'] = utils.compute_reaction_time( - trials, compute_ci=True) + rt["prob_left_block"] = 50 + ( + rt["reaction_time_contrast"], + rt["reaction_time_ci_low"], + rt["reaction_time_ci_high"], + ) = utils.compute_reaction_time(trials, compute_ci=True) self.insert1(rt) @@ -204,9 +219,9 @@ class BehavioralSummaryByDate(dj.Computed): training_week=null: int # weeks since training """ - key_source = dj.U('subject_uuid', 'session_date') \ - & behavior.TrialSet.proj( - session_date='DATE(session_start_time)') + key_source = dj.U("subject_uuid", "session_date") & behavior.TrialSet.proj( + session_date="DATE(session_start_time)" + ) def make(self, key): @@ -215,162 +230,182 @@ def make(self, key): rt_overall = key.copy() # get all trial sets and trials from that date - trial_sets_proj = (behavior.TrialSet.proj( - session_date='DATE(session_start_time)')) & key + trial_sets_proj = ( + behavior.TrialSet.proj(session_date="DATE(session_start_time)") + ) & key - trial_sets_keys = (behavior.TrialSet * trial_sets_proj).fetch('KEY') + trial_sets_keys = (behavior.TrialSet * trial_sets_proj).fetch("KEY") - n_trials, n_correct_trials = \ - (behavior.TrialSet & trial_sets_keys).fetch( - 'n_trials', 'n_correct_trials') + n_trials, n_correct_trials = (behavior.TrialSet & trial_sets_keys).fetch( + "n_trials", "n_correct_trials" + ) trials = behavior.TrialSet.Trial & trial_sets_keys # compute the performance for easy trials performance_easy = utils.compute_performance_easy(trials) if performance_easy: - master_entry['performance_easy'] = performance_easy + master_entry["performance_easy"] = performance_easy # compute the performance for all trials - master_entry['performance'] = np.divide( - np.sum(n_correct_trials), np.sum(n_trials)) - - master_entry['n_trials_date'] = len(trials) - master_entry['training_day'] = len( - dj.U('session_date') & - (acquisition.Session.proj( - 'task_protocol', - session_date='date(session_start_time)') & - {'subject_uuid': key['subject_uuid']} & - 'task_protocol not like "%habituation%" or task_protocol is null') & - 'session_date<="{}"'.format( - key['session_date'].strftime('%Y-%m-%d'))) - master_entry['training_week'] = np.floor( - master_entry['training_day'] / 5) + master_entry["performance"] = np.divide( + np.sum(n_correct_trials), np.sum(n_trials) + ) + + master_entry["n_trials_date"] = len(trials) + master_entry["training_day"] = len( + dj.U("session_date") + & ( + acquisition.Session.proj( + "task_protocol", session_date="date(session_start_time)" + ) + & {"subject_uuid": key["subject_uuid"]} + & 'task_protocol not like "%habituation%" or task_protocol is null' + ) + & 'session_date<="{}"'.format(key["session_date"].strftime("%Y-%m-%d")) + ) + master_entry["training_week"] = np.floor(master_entry["training_day"] / 5) self.insert1(master_entry) complete_stim_on, complete_go_cue_trigger = ( - behavior.CompleteTrialSession & trial_sets_keys).fetch( - 'stim_on_times_status', 'go_cue_trigger_times_status') - rt_available = \ - np.any([c in ['Complete', 'Partial'] for c in complete_stim_on]) or \ - np.any([c in ['Complete', 'Partial'] for c in complete_go_cue_trigger]) + behavior.CompleteTrialSession & trial_sets_keys + ).fetch("stim_on_times_status", "go_cue_trigger_times_status") + rt_available = np.any( + [c in ["Complete", "Partial"] for c in complete_stim_on] + ) or np.any([c in ["Complete", "Partial"] for c in complete_go_cue_trigger]) # compute reaction time for all trials if rt_available: - trials_for_rt = trials & \ - 'trial_stim_on_time is not NULL or trial_go_cue_trigger is not NULL' + trials_for_rt = ( + trials + & "trial_stim_on_time is not NULL or trial_go_cue_trigger is not NULL" + ) - trials_go_cue_only = trials & \ - 'trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL' - trials_stim_on = trials & \ - 'trial_stim_on_time is not NULL' + trials_go_cue_only = ( + trials + & "trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL" + ) + trials_stim_on = trials & "trial_stim_on_time is not NULL" rts = [] if len(trials_go_cue_only): trials_rt_go_cue_only = trials_go_cue_only.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_go_cue_trigger_time') - rts += list( - (trials_rt_go_cue_only & 'rt is not NULL').fetch('rt')) + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_go_cue_trigger_time", + ) + rts += list((trials_rt_go_cue_only & "rt is not NULL").fetch("rt")) if len(trials_stim_on): trials_rt_stim_on = trials.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_stim_on_time') - rts += list((trials_rt_stim_on & 'rt is not NULL').fetch('rt')) + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_stim_on_time", + ) + rts += list((trials_rt_stim_on & "rt is not NULL").fetch("rt")) if len(rts): - rt_overall['median_reaction_time'] = np.median(rts) + rt_overall["median_reaction_time"] = np.median(rts) self.ReactionTimeByDate.insert1(rt_overall) # compute psych results for all trials - task_protocols = (acquisition.Session & trial_sets_keys).fetch( - 'task_protocol') + task_protocols = (acquisition.Session & trial_sets_keys).fetch("task_protocol") task_protocols = [protocol for protocol in task_protocols if protocol] - if any('biased' in task_protocol or 'ephys' in task_protocol - for task_protocol in task_protocols): - trials_biased = trials & (acquisition.Session & - trial_sets_keys & - 'task_protocol like "%biased%" or task_protocol like "%ephys%"') - prob_lefts = dj.U('trial_stim_prob_left') & trials_biased + if any( + "biased" in task_protocol or "ephys" in task_protocol + for task_protocol in task_protocols + ): + trials_biased = trials & ( + acquisition.Session + & trial_sets_keys + & 'task_protocol like "%biased%" or task_protocol like "%ephys%"' + ) + prob_lefts = dj.U("trial_stim_prob_left") & trials_biased for prob_left in prob_lefts: - p_left = prob_left['trial_stim_prob_left'] + p_left = prob_left["trial_stim_prob_left"] - if any('training' in task_protocol - for task_protocol in task_protocols): + if any("training" in task_protocol for task_protocol in task_protocols): if p_left != 0.5: - trials_sub = trials_biased & \ - 'ABS(trial_stim_prob_left - {})<1e-6'.format( - p_left) + trials_sub = ( + trials_biased + & "ABS(trial_stim_prob_left - {})<1e-6".format(p_left) + ) else: - trials_training = trials & \ - (acquisition.Session & - trial_sets_keys & - 'task_protocol LIKE "%training%"') - trials_50 = trials_biased & \ - 'ABS(trial_stim_prob_left - {})<1e-6'.format( - p_left) - trials_sub = behavior.TrialSet.Trial & \ - [trials_training.fetch('KEY'), - trials_50.fetch('KEY')] + trials_training = trials & ( + acquisition.Session + & trial_sets_keys + & 'task_protocol LIKE "%training%"' + ) + trials_50 = ( + trials_biased + & "ABS(trial_stim_prob_left - {})<1e-6".format(p_left) + ) + trials_sub = behavior.TrialSet.Trial & [ + trials_training.fetch("KEY"), + trials_50.fetch("KEY"), + ] else: - trials_sub = trials & \ - 'ABS(trial_stim_prob_left - {})<1e-6'.format(p_left) + trials_sub = trials & "ABS(trial_stim_prob_left - {})<1e-6".format( + p_left + ) # compute psych results psych_results_tmp = utils.compute_psych_pars(trials_sub) psych_results = {**key, **psych_results_tmp} - psych_results['prob_left'] = prob_left[ - 'trial_stim_prob_left'] + psych_results["prob_left"] = prob_left["trial_stim_prob_left"] if abs(p_left - 0.8) < 0.001: - psych_results['prob_left_block'] = 2 + psych_results["prob_left_block"] = 2 elif abs(p_left - 0.2) < 0.001: - psych_results['prob_left_block'] = 1 + psych_results["prob_left_block"] = 1 elif abs(p_left - 0.5) < 0.001: - psych_results['prob_left_block'] = 0 + psych_results["prob_left_block"] = 0 self.PsychResults.insert1(psych_results) # compute reaction time if rt_available: - trials_sub = trials_sub & \ - 'trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL' + trials_sub = ( + trials_sub + & "trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL" + ) if abs(p_left - 0.8) < 0.001: - rt['prob_left_block'] = 2 + rt["prob_left_block"] = 2 elif abs(p_left - 0.2) < 0.001: - rt['prob_left_block'] = 1 + rt["prob_left_block"] = 1 elif abs(p_left - 0.5) < 0.001: - rt['prob_left_block'] = 0 + rt["prob_left_block"] = 0 - rt['reaction_time_contrast'], rt['reaction_time_ci_low'], \ - rt['reaction_time_ci_high'] = \ - utils.compute_reaction_time( - trials_sub, compute_ci=True) + ( + rt["reaction_time_contrast"], + rt["reaction_time_ci_low"], + rt["reaction_time_ci_high"], + ) = utils.compute_reaction_time(trials_sub, compute_ci=True) self.ReactionTimeContrast.insert1(rt) else: psych_results_tmp = utils.compute_psych_pars(trials) psych_results = {**key, **psych_results_tmp} - psych_results['prob_left'] = 0.5 - psych_results['prob_left_block'] = 0 + psych_results["prob_left"] = 0.5 + psych_results["prob_left_block"] = 0 self.PsychResults.insert1(psych_results) # compute reaction time if rt_available: - trials = trials & \ - 'trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL' - - rt['prob_left_block'] = 0 - rt['reaction_time_contrast'], rt['reaction_time_ci_low'], \ - rt['reaction_time_ci_high'] = utils.compute_reaction_time( - trials, compute_ci=True) + trials = ( + trials + & "trial_stim_on_time is not NULL or trial_go_cue_trigger_time is not NULL" + ) + + rt["prob_left_block"] = 0 + ( + rt["reaction_time_contrast"], + rt["reaction_time_ci_low"], + rt["reaction_time_ci_high"], + ) = utils.compute_reaction_time(trials, compute_ci=True) self.ReactionTimeContrast.insert1(rt) class PsychResults(dj.Part): @@ -411,14 +446,18 @@ class TrainingStatus(dj.Lookup): definition = """ training_status: varchar(32) """ - contents = zip(['untrainable', - 'unbiasable', - 'in_training', - 'trained_1a', - 'trained_1b', - 'ready4ephysrig', - 'ready4delay', - 'ready4recording']) + contents = zip( + [ + "untrainable", + "unbiasable", + "in_training", + "trained_1a", + "trained_1b", + "ready4ephysrig", + "ready4delay", + "ready4recording", + ] + ) @schema @@ -433,51 +472,66 @@ class SessionTrainingStatus(dj.Computed): def make(self, key): subject_key = key.copy() - subject_key.pop('session_start_time') + subject_key.pop("session_start_time") # ========================================================= # # check for "good enough for brainwide map" # ========================================================= # # trials for current session - n_trials_current = (behavior.TrialSet & key).fetch1('n_trials') + n_trials_current = (behavior.TrialSet & key).fetch1("n_trials") # performance of the current session - perf_current = (PsychResults & key).fetch1('performance_easy') + perf_current = (PsychResults & key).fetch1("performance_easy") # check protocol - protocol = (acquisition.Session & key).fetch1('task_protocol') - - if n_trials_current > 400 and perf_current > 0.9 and protocol and 'ephys' in protocol: - key['good_enough_for_brainwide_map'] = 1 - - previous_sessions = SessionTrainingStatus & subject_key & \ - 'session_start_time < "{}"'.format( - key['session_start_time'].strftime('%Y-%m-%d %H:%M:%S') + protocol = (acquisition.Session & key).fetch1("task_protocol") + + if ( + n_trials_current > 400 + and perf_current > 0.9 + and protocol + and "ephys" in protocol + ): + key["good_enough_for_brainwide_map"] = 1 + + previous_sessions = ( + SessionTrainingStatus + & subject_key + & 'session_start_time < "{}"'.format( + key["session_start_time"].strftime("%Y-%m-%d %H:%M:%S") ) - status = previous_sessions.fetch('training_status') + ) + status = previous_sessions.fetch("training_status") # ========================================================= # # is the animal ready to be recorded? # ========================================================= # # if the previous status was 'ready4recording', keep - if len(status) and np.any(status == 'ready4recording'): - key['training_status'] = 'ready4recording' + if len(status) and np.any(status == "ready4recording"): + key["training_status"] = "ready4recording" self.insert1(key) return # check whether the session is "ready4recording" - task_protocol = (acquisition.Session & key).fetch1('task_protocol') + task_protocol = (acquisition.Session & key).fetch1("task_protocol") - if task_protocol and (('ephys' in task_protocol) or ('biased' in task_protocol)): + if task_protocol and ( + ("ephys" in task_protocol) or ("biased" in task_protocol) + ): # Criteria for "ready4recording" - sessions = (behavior.TrialSet & subject_key & - (acquisition.Session & 'task_protocol LIKE "%biased%" or task_protocol LIKE "%ephys%"') & - 'session_start_time <= "{}"'.format( - key['session_start_time'].strftime( - '%Y-%m-%d %H:%M:%S') - )).fetch('KEY') + sessions = ( + behavior.TrialSet + & subject_key + & ( + acquisition.Session + & 'task_protocol LIKE "%biased%" or task_protocol LIKE "%ephys%"' + ) + & 'session_start_time <= "{}"'.format( + key["session_start_time"].strftime("%Y-%m-%d %H:%M:%S") + ) + ).fetch("KEY") # if more than 3 biased or ephys sessions, see what's up if len(sessions) >= 3: @@ -485,23 +539,27 @@ def make(self, key): sessions_rel = sessions[-3:] # were these last 3 sessions done on an ephys rig? - bpod_board = (behavior.Settings & sessions_rel).fetch('pybpod_board') - ephys_board = [True for i in list(bpod_board) if 'ephys' in i] + bpod_board = (behavior.Settings & sessions_rel).fetch("pybpod_board") + ephys_board = [True for i in list(bpod_board) if "ephys" in i] - delays = (behavior.SessionDelay & sessions_rel).fetch('session_delay_in_mins') + delays = (behavior.SessionDelay & sessions_rel).fetch( + "session_delay_in_mins" + ) if len(ephys_board) == 3 and np.any(delays >= 15): - n_trials = (behavior.TrialSet & sessions_rel).fetch('n_trials') + n_trials = (behavior.TrialSet & sessions_rel).fetch("n_trials") performance_easy = (PsychResults & sessions_rel).fetch( - 'performance_easy') + "performance_easy" + ) # criterion: 3 sessions with >400 trials, and >90% correct on high contrasts if np.all(n_trials > 400) and np.all(performance_easy > 0.9): trials = behavior.TrialSet.Trial & sessions_rel - prob_lefts = (dj.U('trial_stim_prob_left') & trials).fetch( - 'trial_stim_prob_left') + prob_lefts = (dj.U("trial_stim_prob_left") & trials).fetch( + "trial_stim_prob_left" + ) # if no 0.5 of prob_left, keep trained if not np.all(abs(prob_lefts - 0.5) > 0.001): @@ -510,19 +568,21 @@ def make(self, key): # trials_50 = trials & \ # 'ABS(trial_stim_prob_left - 0.5) < 0.001' - trials_80 = trials & \ - 'ABS(trial_stim_prob_left - 0.2) < 0.001' + trials_80 = ( + trials & "ABS(trial_stim_prob_left - 0.2) < 0.001" + ) - trials_20 = trials & \ - 'ABS(trial_stim_prob_left - 0.8) < 0.001' + trials_20 = ( + trials & "ABS(trial_stim_prob_left - 0.8) < 0.001" + ) if not (len(trials_80) and len(trials_20)): - key['training_status'] = 'trained_1b' + key["training_status"] = "trained_1b" self.insert1(key) return # also compute the median reaction time - # to put into + # to put into medRT = compute_reaction_time(trials) # psych_unbiased = utils.compute_psych_pars(trials_unbiased) @@ -532,35 +592,39 @@ def make(self, key): # repeat the criteria for training_1b # add on criteria for lapses and bias shift in the biased blocks - criterion = psych_80['lapse_low'] < 0.1 and \ - psych_80['lapse_high'] < 0.1 and \ - psych_20['lapse_low'] < 0.1 and \ - psych_20['lapse_high'] < 0.1 and \ - psych_20['bias'] - psych_80['bias'] > 5 and \ - medRT.loc[medRT['signed_contrast'] == 0, 'rt'].iloc[0] < 2 + criterion = ( + psych_80["lapse_low"] < 0.1 + and psych_80["lapse_high"] < 0.1 + and psych_20["lapse_low"] < 0.1 + and psych_20["lapse_high"] < 0.1 + and psych_20["bias"] - psych_80["bias"] > 5 + and medRT.loc[medRT["signed_contrast"] == 0, "rt"].iloc[ + 0 + ] + < 2 + ) if criterion: # were all 3 sessions done on an ephys rig already? - key['training_status'] = 'ready4recording' + key["training_status"] = "ready4recording" self.insert1(key) return # if the previous status was 'ready4delay', keep - if len(status) and np.any(status=='ready4delay'): - key['training_status'] = 'ready4delay' + if len(status) and np.any(status == "ready4delay"): + key["training_status"] = "ready4delay" self.insert1(key) return # if not, check for criterion of 'ready4delay' - if len(status) and np.any(status=='ready4ephysrig'): + if len(status) and np.any(status == "ready4ephysrig"): # if the current session is performed on ephys rig, run the biased protocol - bpod_board = (behavior.Settings & key).fetch1('pybpod_board') - if 'biased' in task_protocol and 'ephys' in bpod_board: - n_trials = (behavior.TrialSet & key).fetch1('n_trials') - performance_easy = (PsychResults & key).fetch1( - 'performance_easy') + bpod_board = (behavior.Settings & key).fetch1("pybpod_board") + if "biased" in task_protocol and "ephys" in bpod_board: + n_trials = (behavior.TrialSet & key).fetch1("n_trials") + performance_easy = (PsychResults & key).fetch1("performance_easy") if n_trials > 400 and performance_easy > 0.9: - key['training_status'] = 'ready4delay' + key["training_status"] = "ready4delay" self.insert1(key) return @@ -569,43 +633,47 @@ def make(self, key): # ========================================================= # # if the previous status was 'ready4ephysrig', keep - if len(status) and np.any(status == 'ready4ephysrig'): - key['training_status'] = 'ready4ephysrig' + if len(status) and np.any(status == "ready4ephysrig"): + key["training_status"] = "ready4ephysrig" self.insert1(key) return # if the protocol for the current session is a biased session, # set the status to be "trained" and check up the criteria for # "ready4ephysrig" - task_protocol = (acquisition.Session & key).fetch1('task_protocol') - if task_protocol and 'biased' in task_protocol: + task_protocol = (acquisition.Session & key).fetch1("task_protocol") + if task_protocol and "biased" in task_protocol: # Criteria for "ready4ephysrig" status - sessions = (behavior.TrialSet & subject_key & - (acquisition.Session & 'task_protocol LIKE "%biased%"') & - 'session_start_time <= "{}"'.format( - key['session_start_time'].strftime( - '%Y-%m-%d %H:%M:%S') - )).fetch('KEY') + sessions = ( + behavior.TrialSet + & subject_key + & (acquisition.Session & 'task_protocol LIKE "%biased%"') + & 'session_start_time <= "{}"'.format( + key["session_start_time"].strftime("%Y-%m-%d %H:%M:%S") + ) + ).fetch("KEY") # if there are more than 40 sessions of biasedChoiceWorld, give up on this mouse if len(sessions) >= 40: - key['training_status'] = 'unbiasable' + key["training_status"] = "unbiasable" # if not more than 3 biased sessions, see what's up if len(sessions) >= 3: sessions_rel = sessions[-3:] - n_trials = (behavior.TrialSet & sessions_rel).fetch('n_trials') + n_trials = (behavior.TrialSet & sessions_rel).fetch("n_trials") performance_easy = (PsychResults & sessions_rel).fetch( - 'performance_easy') + "performance_easy" + ) # criterion: 3 sessions with >400 trials, and >90% correct on high contrasts if np.all(n_trials > 400) and np.all(performance_easy > 0.9): trials = behavior.TrialSet.Trial & sessions_rel - prob_lefts = (dj.U('trial_stim_prob_left') & trials).fetch( - 'trial_stim_prob_left') + prob_lefts = (dj.U("trial_stim_prob_left") & trials).fetch( + "trial_stim_prob_left" + ) # if no 0.5 of prob_left, keep trained if not np.all(abs(prob_lefts - 0.5) > 0.001): @@ -614,14 +682,12 @@ def make(self, key): # trials_50 = trials & \ # 'ABS(trial_stim_prob_left - 0.5) < 0.001' - trials_80 = trials & \ - 'ABS(trial_stim_prob_left - 0.2) < 0.001' + trials_80 = trials & "ABS(trial_stim_prob_left - 0.2) < 0.001" - trials_20 = trials & \ - 'ABS(trial_stim_prob_left - 0.8) < 0.001' + trials_20 = trials & "ABS(trial_stim_prob_left - 0.8) < 0.001" if not (len(trials_80) and len(trials_20)): - key['training_status'] = 'trained_1b' + key["training_status"] = "trained_1b" self.insert1(key) return @@ -635,15 +701,18 @@ def make(self, key): # repeat the criteria for training_1b # add on criteria for lapses and bias shift in the biased blocks - criterion = psych_80['lapse_low'] < 0.1 and \ - psych_80['lapse_high'] < 0.1 and \ - psych_20['lapse_low'] < 0.1 and \ - psych_20['lapse_high'] < 0.1 and \ - psych_20['bias'] - psych_80['bias'] > 5 and \ - medRT.loc[medRT['signed_contrast'] == 0, 'rt'].iloc[0] < 2 + criterion = ( + psych_80["lapse_low"] < 0.1 + and psych_80["lapse_high"] < 0.1 + and psych_20["lapse_low"] < 0.1 + and psych_20["lapse_high"] < 0.1 + and psych_20["bias"] - psych_80["bias"] > 5 + and medRT.loc[medRT["signed_contrast"] == 0, "rt"].iloc[0] + < 2 + ) if criterion: - key['training_status'] = 'ready4ephysrig' + key["training_status"] = "ready4ephysrig" self.insert1(key) return @@ -653,33 +722,33 @@ def make(self, key): # ========================================================= # # if has reached 'trained_1b' before, mark the current session 'trained_1b' as well - if len(status) and np.any(status == 'trained_1b'): - key['training_status'] = 'trained_1b' + if len(status) and np.any(status == "trained_1b"): + key["training_status"] = "trained_1b" self.insert1(key) return # training in progress if the animals was trained in < 3 sessions - sessions = (behavior.TrialSet & subject_key & - 'session_start_time <= "{}"'.format( - key['session_start_time'].strftime('%Y-%m-%d %H:%M:%S') - )).fetch('KEY') + sessions = ( + behavior.TrialSet + & subject_key + & 'session_start_time <= "{}"'.format( + key["session_start_time"].strftime("%Y-%m-%d %H:%M:%S") + ) + ).fetch("KEY") if len(sessions) >= 3: # training in progress if any of the last three sessions have # < 400 trials or performance of easy trials < 0.8 sessions_rel = sessions[-3:] - n_trials = (behavior.TrialSet & sessions_rel).fetch('n_trials') - performance_easy = (PsychResults & sessions_rel).fetch( - 'performance_easy') + n_trials = (behavior.TrialSet & sessions_rel).fetch("n_trials") + performance_easy = (PsychResults & sessions_rel).fetch("performance_easy") if np.all(n_trials > 400) and np.all(performance_easy > 0.9): # training in progress if the current session does not # have low contrasts - contrasts = abs( - (PsychResults & key).fetch1('signed_contrasts')) - if 0 in contrasts and \ - np.sum((contrasts < 0.065) & (contrasts > 0.001)): + contrasts = abs((PsychResults & key).fetch1("signed_contrasts")) + if 0 in contrasts and np.sum((contrasts < 0.065) & (contrasts > 0.001)): # compute psych results of last three sessions trials = behavior.TrialSet.Trial & sessions_rel psych = utils.compute_psych_pars(trials) @@ -688,14 +757,16 @@ def make(self, key): medRT = compute_reaction_time(trials) # cum_perform_easy = utils.compute_performance_easy(trials) - criterion = abs(psych['bias']) < 10 and \ - psych['threshold'] < 20 and \ - psych['lapse_low'] < 0.1 and \ - psych['lapse_high'] < 0.1 and \ - medRT.loc[medRT['signed_contrast'] == 0, 'rt'].iloc[0] < 2 + criterion = ( + abs(psych["bias"]) < 10 + and psych["threshold"] < 20 + and psych["lapse_low"] < 0.1 + and psych["lapse_high"] < 0.1 + and medRT.loc[medRT["signed_contrast"] == 0, "rt"].iloc[0] < 2 + ) if criterion: - key['training_status'] = 'trained_1b' + key["training_status"] = "trained_1b" self.insert1(key) return @@ -705,45 +776,47 @@ def make(self, key): # ========================================================= # # if has reached 'trained_1a' before, mark the current session 'trained_1a' as well - if len(status) and np.any(status == 'trained_1a'): - key['training_status'] = 'trained_1a' + if len(status) and np.any(status == "trained_1a"): + key["training_status"] = "trained_1a" # TODO: check also for `trained_1a_4sess` self.insert1(key) return # training in progress if the animals was trained in < 3 sessions - sessions = (behavior.TrialSet & subject_key & - 'session_start_time <= "{}"'.format( - key['session_start_time'].strftime('%Y-%m-%d %H:%M:%S') - )).fetch('KEY') + sessions = ( + behavior.TrialSet + & subject_key + & 'session_start_time <= "{}"'.format( + key["session_start_time"].strftime("%Y-%m-%d %H:%M:%S") + ) + ).fetch("KEY") if len(sessions) >= 3: # training in progress if any of the last three sessions have # < 400 trials or performance of easy trials < 0.8 sessions_rel = sessions[-3:] - n_trials = (behavior.TrialSet & sessions_rel).fetch('n_trials') - performance_easy = (PsychResults & sessions_rel).fetch( - 'performance_easy') + n_trials = (behavior.TrialSet & sessions_rel).fetch("n_trials") + performance_easy = (PsychResults & sessions_rel).fetch("performance_easy") if np.all(n_trials > 200) and np.all(performance_easy > 0.8): # training in progress if the current session does not # have low contrasts - contrasts = abs( - (PsychResults & key).fetch1('signed_contrasts')) - if 0 in contrasts and \ - np.sum((contrasts < 0.065) & (contrasts > 0.001)): + contrasts = abs((PsychResults & key).fetch1("signed_contrasts")) + if 0 in contrasts and np.sum((contrasts < 0.065) & (contrasts > 0.001)): # compute psych results of last three sessions trials = behavior.TrialSet.Trial & sessions_rel psych = utils.compute_psych_pars(trials) # cum_perform_easy = utils.compute_performance_easy(trials) - criterion = abs(psych['bias']) < 16 and \ - psych['threshold'] < 19 and \ - psych['lapse_low'] < 0.2 and \ - psych['lapse_high'] < 0.2 + criterion = ( + abs(psych["bias"]) < 16 + and psych["threshold"] < 19 + and psych["lapse_low"] < 0.2 + and psych["lapse_high"] < 0.2 + ) if criterion: - key['training_status'] = 'trained_1a' + key["training_status"] = "trained_1a" self.insert1(key) return @@ -753,7 +826,7 @@ def make(self, key): # check whether the subject has been trained over 40 days if len(sessions) >= 40: - key['training_status'] = 'untrainable' + key["training_status"] = "untrainable" self.insert1(key) return @@ -761,6 +834,6 @@ def make(self, key): # assume a base key of 'in_training' for all mice # ========================================================= # - key['training_status'] = 'in_training' + key["training_status"] = "in_training" self.insert1(key) diff --git a/ibl_pipeline/analyses/end_session_criteria.py b/ibl_pipeline/analyses/end_session_criteria.py index ceedc730..e9bfcb58 100755 --- a/ibl_pipeline/analyses/end_session_criteria.py +++ b/ibl_pipeline/analyses/end_session_criteria.py @@ -3,10 +3,10 @@ Author: Miles Well """ -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt import datajoint as dj +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd from ibl_pipeline import acquisition, behavior @@ -17,52 +17,89 @@ def session_end_indices(trials, make_plot=False, ax=None): perf_win_size = 50 # Size of performance rolling window min_trials = 400 # Minimum number of trials for criteria to apply - trials['correct_easy'] = trials.correct - trials.loc[np.abs(trials['signed_contrast']) < .5, 'correct_easy'] = np.NaN - trials['n_trials_last_5'] = trials['trial_start_time'].expanding().apply( - lambda x: sum((x[-1] - x[0:-1]) < 5 * 60), raw=True) + trials["correct_easy"] = trials.correct + trials.loc[np.abs(trials["signed_contrast"]) < 0.5, "correct_easy"] = np.NaN + trials["n_trials_last_5"] = ( + trials["trial_start_time"] + .expanding() + .apply(lambda x: sum((x[-1] - x[0:-1]) < 5 * 60), raw=True) + ) # Local and session median reaction times - trials['RT_local'] = trials['rt'].rolling(rt_win_size).median() - trials['RT_global'] = trials['rt'].expanding().median() - trials['RT_delta'] = trials['RT_local'] > (trials['RT_global'] * 5) + trials["RT_local"] = trials["rt"].rolling(rt_win_size).median() + trials["RT_global"] = trials["rt"].expanding().median() + trials["RT_delta"] = trials["RT_local"] > (trials["RT_global"] * 5) # Local and global performance - trials['perf_local'] = trials['correct'].rolling(perf_win_size).apply(lambda x: sum(x) / x.size, raw=True) - trials['perf_global'] = trials['correct'].expanding().apply(lambda x: sum(x) / x.size, raw=True) - trials['perf_delta'] = (trials['perf_global'] - trials['perf_local']) / trials['perf_global'] + trials["perf_local"] = ( + trials["correct"] + .rolling(perf_win_size) + .apply(lambda x: sum(x) / x.size, raw=True) + ) + trials["perf_global"] = ( + trials["correct"].expanding().apply(lambda x: sum(x) / x.size, raw=True) + ) + trials["perf_delta"] = (trials["perf_global"] - trials["perf_local"]) / trials[ + "perf_global" + ] # Performance for easy trials only - def last(x): return x[~np.isnan(x)][-perf_win_size:] # Find last n values that aren't nan - trials['perf_local_ez'] = (trials['correct_easy'].expanding() - .apply(lambda x: sum(last(x)) / last(x).size if last(x).size else np.nan, raw=True)) - trials['perf_global_ez'] = trials['correct_easy'].expanding().apply( - lambda x: (sum(x == 1) / sum(~np.isnan(x))), raw=True) - trials['perf_delta_ez'] = (trials['perf_global_ez'] - trials['perf_local_ez']) / trials['perf_global_ez'] + def last(x): + return x[~np.isnan(x)][-perf_win_size:] # Find last n values that aren't nan + + trials["perf_local_ez"] = ( + trials["correct_easy"] + .expanding() + .apply( + lambda x: sum(last(x)) / last(x).size if last(x).size else np.nan, raw=True + ) + ) + trials["perf_global_ez"] = ( + trials["correct_easy"] + .expanding() + .apply(lambda x: (sum(x == 1) / sum(~np.isnan(x))), raw=True) + ) + trials["perf_delta_ez"] = ( + trials["perf_global_ez"] - trials["perf_local_ez"] + ) / trials["perf_global_ez"] status_idx = dict.fromkeys(EndCriteria.contents) - status_idx['long_rt'] = (trials.RT_delta & (trials.index > min_trials)).idxmax() if ( - trials.RT_delta & (trials.index > min_trials)).any() else np.nan - status_idx['perf_ez<40'] = ((trials['perf_delta_ez'] > 0.4) & (trials.index > min_trials)).idxmax() - status_idx['perf<40'] = ((trials['perf_delta_ez'] > 0.4) & (trials.index > min_trials)).idxmax() - status_idx['<400_trials'] = ((trials.trial_start_time > 45 * 60) & (trials.index < min_trials)).idxmax() - status_idx['>45_min_&_stopped'] = ( - (trials.trial_start_time > 45 * 60) & (trials['n_trials_last_5'] < 45)).idxmax() - status_idx['>90_min'] = (trials.trial_start_time > 90 * 60).idxmax() + status_idx["long_rt"] = ( + (trials.RT_delta & (trials.index > min_trials)).idxmax() + if (trials.RT_delta & (trials.index > min_trials)).any() + else np.nan + ) + status_idx["perf_ez<40"] = ( + (trials["perf_delta_ez"] > 0.4) & (trials.index > min_trials) + ).idxmax() + status_idx["perf<40"] = ( + (trials["perf_delta_ez"] > 0.4) & (trials.index > min_trials) + ).idxmax() + status_idx["<400_trials"] = ( + (trials.trial_start_time > 45 * 60) & (trials.index < min_trials) + ).idxmax() + status_idx[">45_min_&_stopped"] = ( + (trials.trial_start_time > 45 * 60) & (trials["n_trials_last_5"] < 45) + ).idxmax() + status_idx[">90_min"] = (trials.trial_start_time > 90 * 60).idxmax() if make_plot: if not ax: fig, ax = plt.subplots(1, 1) - c = ['#ba0f00','#00aaba','#aaba00','#0f00ba'] - trials.plot(y=['RT_local','RT_global','perf_local_ez','perf_global_ez'], ax=ax, color=c) - ax.set_ylim([0,2]) - [plt.plot([v,v],[0,2],'k:') for (k, v) in status_idx.items() if v > 0] + c = ["#ba0f00", "#00aaba", "#aaba00", "#0f00ba"] + trials.plot( + y=["RT_local", "RT_global", "perf_local_ez", "perf_global_ez"], + ax=ax, + color=c, + ) + ax.set_ylim([0, 2]) + [plt.plot([v, v], [0, 2], "k:") for (k, v) in status_idx.items() if v > 0] # plt.show() return {k: v for (k, v) in status_idx.items() if v > 0} -schema = dj.schema('ibl_end_criteria') +schema = dj.schema("ibl_end_criteria") @schema @@ -70,13 +107,16 @@ class EndCriteria(dj.Lookup): definition = """ end_criteria: varchar(32) """ - contents = zip(['long_rt', - 'perf<40', - 'perf_ez<40', - '<400_trials', - '>45_min_&_stopped', - '>90_min' - ]) + contents = zip( + [ + "long_rt", + "perf<40", + "perf_ez<40", + "<400_trials", + ">45_min_&_stopped", + ">90_min", + ] + ) @schema @@ -94,16 +134,17 @@ def make(self, key): query = behavior.TrialSet.Trial & key query = query.proj( - 'trial_response_choice', - 'trial_response_choice', - 'trial_response_time', - 'trial_stim_on_time', - 'trial_start_time', - signed_contrast='trial_stim_contrast_right \ - - trial_stim_contrast_left', - rt='trial_response_time - trial_stim_on_time', - correct='trial_feedback_type = 1') - trials = pd.DataFrame(query.fetch(order_by='trial_id')) + "trial_response_choice", + "trial_response_choice", + "trial_response_time", + "trial_stim_on_time", + "trial_start_time", + signed_contrast="trial_stim_contrast_right \ + - trial_stim_contrast_left", + rt="trial_response_time - trial_stim_on_time", + correct="trial_feedback_type = 1", + ) + trials = pd.DataFrame(query.fetch(order_by="trial_id")) if trials.empty: return @@ -111,8 +152,8 @@ def make(self, key): status_idx = session_end_indices(trials) if status_idx: criterion = min(status_idx, key=status_idx.get) - key['end_status'] = criterion - key['end_status_index'] = status_idx[criterion] + key["end_status"] = criterion + key["end_status_index"] = status_idx[criterion] self.insert1(key) @@ -132,26 +173,33 @@ def make(self, key): query = behavior.TrialSet.Trial & key query = query.proj( - 'trial_response_choice', - 'trial_response_choice', - 'trial_response_time', - 'trial_stim_on_time', - 'trial_start_time', - signed_contrast='trial_stim_contrast_right \ - - trial_stim_contrast_left', - rt='trial_response_time - trial_stim_on_time', - correct='trial_feedback_type = 1') - trials = pd.DataFrame(query.fetch(order_by='trial_id')) + "trial_response_choice", + "trial_response_choice", + "trial_response_time", + "trial_stim_on_time", + "trial_start_time", + signed_contrast="trial_stim_contrast_right \ + - trial_stim_contrast_left", + rt="trial_response_time - trial_stim_on_time", + correct="trial_feedback_type = 1", + ) + trials = pd.DataFrame(query.fetch(order_by="trial_id")) if trials.empty: return status_idx = session_end_indices(trials) - exclude = ['>45_min_&_stopped', 'perf<40', 'perf_ez<40'] # List of unimplemented criteria - status_idx = {k: v for (k, v) in status_idx.items() if k not in exclude} # Remove from dict + exclude = [ + ">45_min_&_stopped", + "perf<40", + "perf_ez<40", + ] # List of unimplemented criteria + status_idx = { + k: v for (k, v) in status_idx.items() if k not in exclude + } # Remove from dict if status_idx: criterion = min(status_idx, key=status_idx.get) - key['end_status'] = criterion - key['end_status_index'] = status_idx[criterion] + key["end_status"] = criterion + key["end_status_index"] = status_idx[criterion] self.insert1(key) diff --git a/ibl_pipeline/analyses/ephys.py b/ibl_pipeline/analyses/ephys.py index 6a621059..8e2d6f7c 100755 --- a/ibl_pipeline/analyses/ephys.py +++ b/ibl_pipeline/analyses/ephys.py @@ -1,14 +1,15 @@ -import datajoint as dj -from ibl_pipeline import behavior, ephys from datetime import datetime -from tqdm import tqdm -from brainbox import singlecell + +import datajoint as dj import numpy as np +from brainbox import singlecell +from tqdm import tqdm -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_analyses_ephys') +from ibl_pipeline import behavior, ephys -wheel = dj.create_virtual_module('wheel', 'group_shared_wheel') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_analyses_ephys") + +wheel = dj.create_virtual_module("wheel", "group_shared_wheel") @schema @@ -16,11 +17,15 @@ class TrialType(dj.Lookup): definition = """ trial_type: varchar(32) """ - contents = zip(['Correct Left Contrast', - 'Correct Right Contrast', - 'Incorrect Left Contrast', - 'Incorrect Right Contrast', - 'Correct All']) + contents = zip( + [ + "Correct Left Contrast", + "Correct Right Contrast", + "Incorrect Left Contrast", + "Incorrect Right Contrast", + "Correct All", + ] + ) @schema @@ -36,29 +41,41 @@ class DepthPeth(dj.Computed): depth_baseline : longblob # baseline for each depth bin, average activity during -0.3 to 0 relative to the event depth_peth_ts=CURRENT_TIMESTAMP : timestamp """ - key_source = ephys.ProbeInsertion * ephys.Event * \ - (TrialType & 'trial_type="Correct All"') & ephys.DefaultCluster & \ - behavior.TrialSet & \ - ['event in ("stim on", "feedback")', - dj.AndList([wheel.MovementTimes, 'event="movement"'])] + key_source = ( + ephys.ProbeInsertion * ephys.Event * (TrialType & 'trial_type="Correct All"') + & ephys.DefaultCluster + & behavior.TrialSet + & [ + 'event in ("stim on", "feedback")', + dj.AndList([wheel.MovementTimes, 'event="movement"']), + ] + ) def make(self, key): - clusters_spk_depths, clusters_spk_times, clusters_ids = \ - (ephys.DefaultCluster & key).fetch( - 'cluster_spikes_depths', 'cluster_spikes_times', 'cluster_id') + clusters_spk_depths, clusters_spk_times, clusters_ids = ( + ephys.DefaultCluster & key + ).fetch("cluster_spikes_depths", "cluster_spikes_times", "cluster_id") spikes_depths = np.hstack(clusters_spk_depths) spikes_times = np.hstack(clusters_spk_times) spikes_clusters = np.hstack( - [[cluster_id]*len(cluster_spk_depths) - for (cluster_id, cluster_spk_depths) in zip(clusters_ids, - clusters_spk_depths)]) - - if key['event'] == 'movement': - q = behavior.TrialSet.Trial * wheel.MovementTimes & key & 'trial_feedback_type=1' + [ + [cluster_id] * len(cluster_spk_depths) + for (cluster_id, cluster_spk_depths) in zip( + clusters_ids, clusters_spk_depths + ) + ] + ) + + if key["event"] == "movement": + q = ( + behavior.TrialSet.Trial * wheel.MovementTimes + & key + & "trial_feedback_type=1" + ) else: - q = behavior.TrialSet.Trial & key & 'trial_feedback_type=1' + q = behavior.TrialSet.Trial & key & "trial_feedback_type=1" trials = q.fetch() @@ -68,16 +85,17 @@ def make(self, key): bin_edges = np.arange(min_depth, max_depth, bin_size_depth) spk_bin_ids = np.digitize(spikes_depths, bin_edges) - edges = np.hstack([bin_edges, [bin_edges[-1]+bin_size_depth]]) - key.update(trial_type='Correct All', - depth_bin_centers=(edges[:-1] + edges[1:])/2) + edges = np.hstack([bin_edges, [bin_edges[-1] + bin_size_depth]]) + key.update( + trial_type="Correct All", depth_bin_centers=(edges[:-1] + edges[1:]) / 2 + ) - if key['event'] == 'feedback': - event_times = trials['trial_feedback_time'] - elif key['event'] == 'stim on': - event_times = trials['trial_stim_on_time'] - elif key['event'] == 'movement': - event_times = trials['movement_onset'] + if key["event"] == "feedback": + event_times = trials["trial_feedback_time"] + elif key["event"] == "stim on": + event_times = trials["trial_stim_on_time"] + elif key["event"] == "movement": + event_times = trials["movement_onset"] peth_list = [] baseline_list = [] @@ -89,8 +107,13 @@ def make(self, key): cluster_ids = np.unique(spike_clusters) peths, binned_spikes = singlecell.calculate_peths( - spikes_ibin, spike_clusters, cluster_ids, - event_times, pre_time=0.3, post_time=1) + spikes_ibin, + spike_clusters, + cluster_ids, + event_times, + pre_time=0.3, + post_time=1, + ) if len(peths.means): time = peths.tscale peth = np.sum(peths.means, axis=0) @@ -103,9 +126,11 @@ def make(self, key): peth_list.append(np.zeros_like(peths.tscale)) baseline_list.append(0) - key.update(depth_peth=np.vstack(peth_list), - depth_baseline=np.array(baseline_list), - time_bin_centers=peths.tscale) + key.update( + depth_peth=np.vstack(peth_list), + depth_baseline=np.array(baseline_list), + time_bin_centers=peths.tscale, + ) self.insert1(key, skip_duplicates=True) @@ -120,13 +145,13 @@ class NormedDepthPeth(dj.Computed): def make(self, key): - depth_peth = (DepthPeth & key).fetch1('depth_peth') + depth_peth = (DepthPeth & key).fetch1("depth_peth") # fetch the baseline from the key_temp = key.copy() - key_temp.update(event='stim on') - baseline = (DepthPeth & key_temp).fetch1('depth_baseline') + key_temp.update(event="stim on") + baseline = (DepthPeth & key_temp).fetch1("depth_baseline") - key.update(normed_peth=((depth_peth.T - baseline)/(baseline + 1)).T) + key.update(normed_peth=((depth_peth.T - baseline) / (baseline + 1)).T) self.insert1(key) diff --git a/ibl_pipeline/behavior.py b/ibl_pipeline/behavior.py index 817b29c1..38c2989f 100755 --- a/ibl_pipeline/behavior.py +++ b/ibl_pipeline/behavior.py @@ -1,6 +1,5 @@ -from ibl_pipeline.behavior_shared import * from ibl_pipeline import mode +from ibl_pipeline.behavior_shared import * - -if mode != 'public': +if mode != "public": from ibl_pipeline.behavior_internal import * diff --git a/ibl_pipeline/behavior_internal.py b/ibl_pipeline/behavior_internal.py index 753ba1f0..003926c7 100644 --- a/ibl_pipeline/behavior_internal.py +++ b/ibl_pipeline/behavior_internal.py @@ -1,20 +1,20 @@ -import datajoint as dj -import numpy as np -import pandas as pd -from os import path import datetime import logging import warnings -from ibl_pipeline import reference, subject, acquisition, data -from ibl_pipeline import mode, one +from os import path + +import datajoint as dj +import numpy as np +import pandas as pd +from ibl_pipeline import acquisition, data, mode, one, reference, subject logger = logging.getLogger(__name__) -if mode == 'update': - schema = dj.schema('ibl_behavior') +if mode == "update": + schema = dj.schema("ibl_behavior") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_behavior') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_behavior") @schema @@ -35,41 +35,46 @@ class Eye(dj.Imported): eye_end_time: float # (seconds) """ - key_source = acquisition.Session & (data.FileRecord & {'exists': 1} & 'dataset_name in \ + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in \ ("eye.area.npy", "eye.blink.npy", \ - "eye.xyPos.npy", "eye.timestamps.npy")') + "eye.xyPos.npy", "eye.timestamps.npy")' + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - eye_area, eye_blink, eye_xypos, eye_timestamps = \ - one.load(eID, dataset_types=['eye.area', - 'eye.blink', - 'eye.xypos', - 'eye.timestamps']) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + eye_area, eye_blink, eye_xypos, eye_timestamps = one.load( + eID, dataset_types=["eye.area", "eye.blink", "eye.xypos", "eye.timestamps"] + ) eye_sample_ids = eye_timestamps[:, 0] eye_timestamps = eye_timestamps[:, 1] - assert len(np.unique(np.array([len(eye_xypos), - len(eye_blink), - len(eye_area)]))) == 1, \ - 'Loaded eye files do not have the same length' - - key['eye_sample_ids'] = eye_sample_ids - key['eye_timestamps'] = eye_timestamps - key['eye_area'] = eye_area - key['eye_x_pos'] = eye_xypos[:, 0] - key['eye_y_pos'] = eye_xypos[:, 1] - key['eye_blink'] = eye_blink - key['eye_fps'] = 1 / np.median(np.diff(eye_timestamps)) - key['eye_start_time'] = eye_timestamps[0] - key['eye_end_time'] = eye_timestamps[-1] + assert ( + len(np.unique(np.array([len(eye_xypos), len(eye_blink), len(eye_area)]))) + == 1 + ), "Loaded eye files do not have the same length" + + key["eye_sample_ids"] = eye_sample_ids + key["eye_timestamps"] = eye_timestamps + key["eye_area"] = eye_area + key["eye_x_pos"] = eye_xypos[:, 0] + key["eye_y_pos"] = eye_xypos[:, 1] + key["eye_blink"] = eye_blink + key["eye_fps"] = 1 / np.median(np.diff(eye_timestamps)) + key["eye_start_time"] = eye_timestamps[0] + key["eye_end_time"] = eye_timestamps[-1] self.insert1(key) - logger.info('Populated an Eye tuple for subject {subject_uuid} \ - on session started at {session_start_time}'.format( - **key)) + logger.info( + "Populated an Eye tuple for subject {subject_uuid} \ + on session started at {session_start_time}".format( + **key + ) + ) @schema @@ -82,29 +87,42 @@ class SparseNoise(dj.Imported): sparse_noise_times: longblob # times of those stimulus squares appeared in universal seconds """ - key_source = acquisition.Session & \ - (data.FileRecord & {'exists': 1} & - 'dataset_name in ("_ibl_sparseNoise.positions.npy", \ - "_ibl_sparseNoise.times.npy")') + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in ("_ibl_sparseNoise.positions.npy", \ + "_ibl_sparseNoise.times.npy")' + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - - sparse_noise_positions, sparse_noise_times = \ - one.load_datasets(eID, datasets=['_ibl_sparseNoise.positions', - '_ibl_sparseNoise.times'], clobber=True) - - assert len(np.unique(np.array([len(sparse_noise_positions), - len(sparse_noise_times)]))) == 1, \ - 'Loaded sparse noise files do not have the same length' - - key['sparse_noise_x_pos'] = sparse_noise_positions[:, 0], - key['sparse_noise_y_pos'] = sparse_noise_positions[:, 1], - key['sparse_noise_times'] = sparse_noise_times + eID = str((acquisition.Session & key).fetch1("session_uuid")) + + sparse_noise_positions, sparse_noise_times = one.load_datasets( + eID, + datasets=["_ibl_sparseNoise.positions", "_ibl_sparseNoise.times"], + clobber=True, + ) + + assert ( + len( + np.unique( + np.array([len(sparse_noise_positions), len(sparse_noise_times)]) + ) + ) + == 1 + ), "Loaded sparse noise files do not have the same length" + + key["sparse_noise_x_pos"] = (sparse_noise_positions[:, 0],) + key["sparse_noise_y_pos"] = (sparse_noise_positions[:, 1],) + key["sparse_noise_times"] = sparse_noise_times self.insert1(key) - logger.info('Populated a SparseNoise tuple for subject {subject_uuid} \ - in session started at {session_start_time}'.format(**key)) + logger.info( + "Populated a SparseNoise tuple for subject {subject_uuid} \ + in session started at {session_start_time}".format( + **key + ) + ) @schema @@ -116,24 +134,31 @@ class ExtraRewards(dj.Imported): extra_rewards_times: longblob # times of extra rewards (seconds) """ - key_source = acquisition.Session & \ - (data.FileRecord & {'exists': 1} & - 'dataset_name in ("_ibl_extraRewards.times.npy")') + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in ("_ibl_extraRewards.times.npy")' + ) def make(self, key): - eID = (acquisition.Session & key).fetch1('session_uuid') + eID = (acquisition.Session & key).fetch1("session_uuid") - extra_rewards_times = one.load_dataset(eID, dataset='_ibl_extraRewards.times', - clobber=True) + extra_rewards_times = one.load_dataset( + eID, dataset="_ibl_extraRewards.times", clobber=True + ) - key['extra_rewards_times'] = extra_rewards_times + key["extra_rewards_times"] = extra_rewards_times self.insert1(key) - logger.info('Populated an ExtraRewards tuple for \ + logger.info( + "Populated an ExtraRewards tuple for \ subject {subject_uuid} in session started at \ - {session_start_time}'.format(**key)) + {session_start_time}".format( + **key + ) + ) @schema @@ -145,34 +170,40 @@ class SpontaneousTimeSet(dj.Imported): spontaneous_time_total_num: int # total number of the spontaneous time periods """ - key_source = acquisition.Session & \ - (data.FileRecord & {'exists': 1} & - 'dataset_name in ("_ibl_spontaneous.intervals.npy")') + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in ("_ibl_spontaneous.intervals.npy")' + ) def make(self, key): spon_time_key = key.copy() - eID = str((acquisition.Session & key).fetch1('session_uuid')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) - spontaneous_intervals = one.load_dataset(eID, dataset='_ibl_spontaneous.intervals', - clobber=True) + spontaneous_intervals = one.load_dataset( + eID, dataset="_ibl_spontaneous.intervals", clobber=True + ) - key['spontaneous_time_total_num'] = len(spontaneous_intervals) + key["spontaneous_time_total_num"] = len(spontaneous_intervals) self.insert1(key) for idx_spon in range(len(spontaneous_intervals)): - spon_time_key['spontaneous_time_id'] = idx_spon + 1 - spon_time_key['spontaneous_start_time'] = \ - spontaneous_intervals[idx_spon, 0] - spon_time_key['spontaneous_end_time'] = \ - spontaneous_intervals[idx_spon, 1] - spon_time_key['spontaneous_time_duration'] = \ - float(np.diff(spontaneous_intervals[idx_spon, :])) + spon_time_key["spontaneous_time_id"] = idx_spon + 1 + spon_time_key["spontaneous_start_time"] = spontaneous_intervals[idx_spon, 0] + spon_time_key["spontaneous_end_time"] = spontaneous_intervals[idx_spon, 1] + spon_time_key["spontaneous_time_duration"] = float( + np.diff(spontaneous_intervals[idx_spon, :]) + ) self.SpontaneousTime().insert1(spon_time_key) - logger.info('Populated a SpontaneousTimeSet tuple and all \ + logger.info( + "Populated a SpontaneousTimeSet tuple and all \ Spontaneoustime tuples for subject {subject_uuid} in \ - session started at {session_start_time}'.format(**key)) + session started at {session_start_time}".format( + **key + ) + ) class SpontaneousTime(dj.Part): definition = """ @@ -200,38 +231,48 @@ class Lick(dj.Imported): lick_sampling_rate: float # number of samples per second """ - key_source = acquisition.Session & \ - (data.FileRecord & {'exists': 1} & - 'dataset_name in ("_ibl_licks.times.npy", \ + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in ("_ibl_licks.times.npy", \ "_ibl_lickPiezo.raw.npy", \ - "_ibl_lickPiezo.timestamps.npy")') + "_ibl_lickPiezo.timestamps.npy")' + ) def make(self, key): - eID = (acquisition.Session & key).fetch1('session_uuid') + eID = (acquisition.Session & key).fetch1("session_uuid") - lick_times, lick_piezo_raw, lick_piezo_timestamps = \ - one.load_datasets(eID, datasets=['_ibl_licks.times', - '_ibl_lickPiezo.raw', - '_ibl_lickPiezo.timestamps'], clobber=True) + lick_times, lick_piezo_raw, lick_piezo_timestamps = one.load_datasets( + eID, + datasets=[ + "_ibl_licks.times", + "_ibl_lickPiezo.raw", + "_ibl_lickPiezo.timestamps", + ], + clobber=True, + ) lick_sample_ids = lick_piezo_timestamps[:, 0] lick_piezo_timestamps = lick_piezo_timestamps[:, 1] - key['lick_times'] = lick_times - key['lick_piezo_raw'] = lick_piezo_raw - key['lick_sample_ids'] = lick_sample_ids - key['lick_piezo_timestamps'] = lick_piezo_timestamps - key['lick_start_time'] = lick_piezo_timestamps[0] - key['lick_end_time'] = lick_piezo_timestamps[-1] - key['lick_sampling_rate'] = \ - 1 / np.median(np.diff(lick_piezo_timestamps)) + key["lick_times"] = lick_times + key["lick_piezo_raw"] = lick_piezo_raw + key["lick_sample_ids"] = lick_sample_ids + key["lick_piezo_timestamps"] = lick_piezo_timestamps + key["lick_start_time"] = lick_piezo_timestamps[0] + key["lick_end_time"] = lick_piezo_timestamps[-1] + key["lick_sampling_rate"] = 1 / np.median(np.diff(lick_piezo_timestamps)) self.insert1(key) - logger.info('Populated a Lick tuple for \ + logger.info( + "Populated a Lick tuple for \ subject {subject_uuid} in session started at \ - {session_start_time}'.format(**key)) + {session_start_time}".format( + **key + ) + ) @schema @@ -244,31 +285,51 @@ class PassiveTrialSet(dj.Imported): passive_trials_end_time : float """ - key_source = acquisition.Session & (data.FileRecord & {'exists': 1} & - 'dataset_name in \ + key_source = acquisition.Session & ( + data.FileRecord + & {"exists": 1} + & 'dataset_name in \ ("passiveTrials.contrastLeft.npy", \ "passiveTrials.contrastRight.npy", \ - "_ibl_lickPiezo.timestamps.npy")') + "_ibl_lickPiezo.timestamps.npy")' + ) def make(self, key): passive_trial_key = key.copy() - eID = str((acquisition.Session & key).fetch1('session_uuid')) - - passive_visual_stim_contrast_left, \ - passive_visual_stim_contrast_right, \ - passive_visual_stim_times = \ - one.load_datasets(eID, datasets=['passiveTrials.contrastLeft', - 'passiveTrials.contrastRight', - 'passiveTrials.times'], clobber=True) - - assert len(np.unique(np.array([len(passive_visual_stim_contrast_left), - len(passive_visual_stim_contrast_right), - len(passive_visual_stim_times)]))) == 1, \ - 'Loaded passive visual files do not have the same length' - - key['passive_trials_total_num'] = len(passive_visual_stim_times) - key['passive_trials_start_time'] = float(passive_visual_stim_times[0]) - key['passive_trials_end_time'] = float(passive_visual_stim_times[-1]) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + + ( + passive_visual_stim_contrast_left, + passive_visual_stim_contrast_right, + passive_visual_stim_times, + ) = one.load_datasets( + eID, + datasets=[ + "passiveTrials.contrastLeft", + "passiveTrials.contrastRight", + "passiveTrials.times", + ], + clobber=True, + ) + + assert ( + len( + np.unique( + np.array( + [ + len(passive_visual_stim_contrast_left), + len(passive_visual_stim_contrast_right), + len(passive_visual_stim_times), + ] + ) + ) + ) + == 1 + ), "Loaded passive visual files do not have the same length" + + key["passive_trials_total_num"] = len(passive_visual_stim_times) + key["passive_trials_start_time"] = float(passive_visual_stim_times[0]) + key["passive_trials_end_time"] = float(passive_visual_stim_times[-1]) self.insert1(key) @@ -277,28 +338,37 @@ def make(self, key): if np.isnan(passive_visual_stim_contrast_left[idx_trial]): passive_stim_contrast_left = 0 else: - passive_stim_contrast_left = \ - passive_visual_stim_contrast_left[idx_trial] + passive_stim_contrast_left = passive_visual_stim_contrast_left[ + idx_trial + ] if np.isnan(passive_visual_stim_contrast_right[idx_trial]): passive_stim_contrast_right = 0 else: - passive_stim_contrast_right = \ - passive_visual_stim_contrast_right[idx_trial] - - passive_trial_key['passive_trial_id'] = idx_trial + 1 - passive_trial_key['passive_trial_stim_on_time'] = float( - passive_visual_stim_times[idx_trial]) - passive_trial_key['passive_trial_stim_contrast_left'] = float( - passive_stim_contrast_left) - passive_trial_key['passive_trial_stim_contrast_right'] = float( - passive_stim_contrast_right) + passive_stim_contrast_right = passive_visual_stim_contrast_right[ + idx_trial + ] + + passive_trial_key["passive_trial_id"] = idx_trial + 1 + passive_trial_key["passive_trial_stim_on_time"] = float( + passive_visual_stim_times[idx_trial] + ) + passive_trial_key["passive_trial_stim_contrast_left"] = float( + passive_stim_contrast_left + ) + passive_trial_key["passive_trial_stim_contrast_right"] = float( + passive_stim_contrast_right + ) self.PassiveTrial.insert1(passive_trial_key) - logger.info('Populated a PassiveTrialSet tuple, all Trial tuples and \ + logger.info( + "Populated a PassiveTrialSet tuple, all Trial tuples and \ Excluded Trial tuples for subject {subject_uuid} in \ - session started at {session_start_time}'.format(**key)) + session started at {session_start_time}".format( + **key + ) + ) class PassiveTrial(dj.Part): definition = """ @@ -321,16 +391,29 @@ class PassiveRecordings(dj.Imported): passive_white_noise_times: longblob # Times of white noise bursts, equivilent to the negative feedback sound during the choice world task (seconds) """ - key_source = acquisition.Session & (data.FileRecord & 'repo_name LIKE "flatiron_%"' & {'exists': 1} & 'dataset_name in \ - ("passiveBeeps.times.npy", "passiveValveClicks.times.npy", "passiveWhiteNoise.times.npy")') + key_source = acquisition.Session & ( + data.FileRecord + & 'repo_name LIKE "flatiron_%"' + & {"exists": 1} + & 'dataset_name in \ + ("passiveBeeps.times.npy", "passiveValveClicks.times.npy", "passiveWhiteNoise.times.npy")' + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - - key['passive_beep_times'], key['passive_valve_click_times'], \ - key['passive_white_noise_times'] = \ - one.load_datasets(eID, datasets=['passiveBeeps.times', - 'passiveValveClicks.times', - 'passiveWhiteNoise.times'], clobber=True) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + + ( + key["passive_beep_times"], + key["passive_valve_click_times"], + key["passive_white_noise_times"], + ) = one.load_datasets( + eID, + datasets=[ + "passiveBeeps.times", + "passiveValveClicks.times", + "passiveWhiteNoise.times", + ], + clobber=True, + ) self.insert1(key) diff --git a/ibl_pipeline/common.py b/ibl_pipeline/common.py index bcaa6585..ae91be87 100755 --- a/ibl_pipeline/common.py +++ b/ibl_pipeline/common.py @@ -1,8 +1,15 @@ -from ibl_pipeline import reference, subject, action, acquisition, data, behavior +from ibl_pipeline import ( + acquisition, + action, + behavior, + data, + ephys, + histology, + reference, + subject, +) from ibl_pipeline.analyses import behavior as behavior_analyses -from ibl_pipeline.plotting import behavior as behavior_plotting - -from ibl_pipeline import ephys, histology from ibl_pipeline.analyses import ephys as ephys_analyses +from ibl_pipeline.plotting import behavior as behavior_plotting from ibl_pipeline.plotting import ephys as ephys_plotting from ibl_pipeline.plotting import histology as histology_plotting diff --git a/ibl_pipeline/data.py b/ibl_pipeline/data.py index 0c4c2884..df3de0d9 100755 --- a/ibl_pipeline/data.py +++ b/ibl_pipeline/data.py @@ -1,13 +1,12 @@ import datajoint as dj from tqdm import tqdm -from ibl_pipeline import reference, acquisition -from ibl_pipeline import mode, one +from ibl_pipeline import acquisition, mode, one, reference -if mode == 'update': - schema = dj.schema('ibl_data') +if mode == "update": + schema = dj.schema("ibl_data") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_data') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_data") @schema @@ -103,37 +102,44 @@ def insert_with_alyx_rest(cls, session_uuids, dataset_names): for uuid in tqdm(session_uuids): for dataset_name in tqdm(dataset_names): try: - dataset = one.alyx.rest('datasets', 'list', session=uuid, name=dataset_name) + dataset = one.alyx.rest( + "datasets", "list", session=uuid, name=dataset_name + ) if not dataset: - print(f'Dataset {dataset_name} for session {uuid} does not exist in alyx.') + print( + f"Dataset {dataset_name} for session {uuid} does not exist in alyx." + ) continue else: dataset = dataset[0] - session_key = (acquisition.Session & {'session_uuid': uuid}).fetch1('KEY') + session_key = (acquisition.Session & {"session_uuid": uuid}).fetch1( + "KEY" + ) dataset_entry = dict( session_key, dataset_name=dataset_name, - dataset_uuid=dataset['hash'], - dataset_created_by=dataset['created_by'], - dataset_type_name=dataset['dataset_type'], - format_name=dataset['data_format'], - created_datetime=dataset['created_datetime'], - file_size=dataset['file_size']) + dataset_uuid=dataset["hash"], + dataset_created_by=dataset["created_by"], + dataset_type_name=dataset["dataset_type"], + format_name=dataset["data_format"], + created_datetime=dataset["created_datetime"], + file_size=dataset["file_size"], + ) cls.insert1(dataset_entry, skip_duplicates=True) # except Exception as e: # print(f'Error inserting {dataset_name} in table DataSet for session {uuid}: {str(e)}') file_record_entries = [] - for fr in dataset['file_records']: - if fr['exists'] and 'flatiron' in fr['data_repository']: + for fr in dataset["file_records"]: + if fr["exists"] and "flatiron" in fr["data_repository"]: file_record_entry = dict( session_key, dataset_name=dataset_name, - repo_name=fr['data_repository'], - record_uuid=fr['id'], - exists=fr['exists'], - relative_path=fr['relative_path'] + repo_name=fr["data_repository"], + record_uuid=fr["id"], + exists=fr["exists"], + relative_path=fr["relative_path"], ) file_record_entries.append(file_record_entry) # try: diff --git a/ibl_pipeline/ephys.py b/ibl_pipeline/ephys.py index 210f6ed7..1494e3ee 100755 --- a/ibl_pipeline/ephys.py +++ b/ibl_pipeline/ephys.py @@ -1,22 +1,21 @@ import os + import datajoint as dj -from tqdm import tqdm import numpy as np import pandas as pd +from tqdm import tqdm -from ibl_pipeline import acquisition, reference, behavior, data -from ibl_pipeline import one, mode - +from ibl_pipeline import acquisition, behavior, data, mode, one, reference try: - wheel = dj.create_virtual_module('wheel', 'group_shared_wheel') + wheel = dj.create_virtual_module("wheel", "group_shared_wheel") except dj.DataJointError: from ibl_pipeline.group_shared import wheel -if mode == 'update': - schema = dj.schema('ibl_ephys') +if mode == "update": + schema = dj.schema("ibl_ephys") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_ephys') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ephys") @schema @@ -42,33 +41,36 @@ class CompleteClusterSession(dj.Computed): complete_cluster_session_ts=CURRENT_TIMESTAMP : timestamp """ required_datasets = [ - 'clusters.amps.npy', - 'clusters.channels.npy', - 'clusters.depths.npy', - 'clusters.metrics.pqt', - 'clusters.peakToTrough.npy', - 'clusters.uuids.csv', - 'clusters.metrics.pqt', - 'clusters.waveforms.npy', - 'clusters.waveformsChannels.npy', - 'spikes.amps.npy', - 'spikes.clusters.npy', - 'spikes.depths.npy', - 'spikes.samples.npy', - 'spikes.templates.npy' + "clusters.amps.npy", + "clusters.channels.npy", + "clusters.depths.npy", + "clusters.metrics.pqt", + "clusters.peakToTrough.npy", + "clusters.uuids.csv", + "clusters.metrics.pqt", + "clusters.waveforms.npy", + "clusters.waveformsChannels.npy", + "spikes.amps.npy", + "spikes.clusters.npy", + "spikes.depths.npy", + "spikes.samples.npy", + "spikes.templates.npy", ] - key_source = acquisition.Session & \ - 'task_protocol like "%ephysChoiceWorld%"' \ - & (data.FileRecord & 'dataset_name like "%spikes.times%.npy"') \ + key_source = ( + acquisition.Session + & 'task_protocol like "%ephysChoiceWorld%"' + & (data.FileRecord & 'dataset_name like "%spikes.times%.npy"') & (data.FileRecord & 'dataset_name="spikes.clusters.npy"') + ) def make(self, key): - datasets = (data.FileRecord & key & 'repo_name LIKE "flatiron_%"' & - {'exists': 1}).fetch('dataset_name') - is_complete = bool(np.all([req_ds in datasets - for req_ds in self.required_datasets])) \ - and bool(np.any(['spikes.times' in d for d in datasets])) + datasets = ( + data.FileRecord & key & 'repo_name LIKE "flatiron_%"' & {"exists": 1} + ).fetch("dataset_name") + is_complete = bool( + np.all([req_ds in datasets for req_ds in self.required_datasets]) + ) and bool(np.any(["spikes.times" in d for d in datasets])) if is_complete: self.insert1(key) @@ -78,9 +80,8 @@ def make(self, key): for req_ds in self.required_datasets: if req_ds not in datasets: EphysMissingDataLog.insert1( - dict(**key, - missing_data=req_ds), - skip_duplicates=True) + dict(**key, missing_data=req_ds), skip_duplicates=True + ) @schema @@ -117,9 +118,11 @@ class ProbeInsertion(dj.Imported): @classmethod def validate(cls): - probe_insertions_alyx = one.alyx.rest('insertions', 'list') - uuids_alyx = {p['id'] for p in probe_insertions_alyx} - uuids_dj = (cls & 'probe_insertion_uuid is not null').fetch('probe_insertion_uuid') + probe_insertions_alyx = one.alyx.rest("insertions", "list") + uuids_alyx = {p["id"] for p in probe_insertions_alyx} + uuids_dj = (cls & "probe_insertion_uuid is not null").fetch( + "probe_insertion_uuid" + ) uuids_dj = {str(uuid) for uuid in uuids_dj} return list(uuids_alyx - uuids_dj) @@ -146,28 +149,35 @@ class ChannelGroup(dj.Imported): channel_group_ts=CURRENT_TIMESTAMP : timestamp """ - if mode != 'public': - key_source = ProbeInsertion \ - & (data.FileRecord & 'dataset_name="channels.rawInd.npy"') \ - & (data.FileRecord & 'dataset_name="channels.localCoordinates.npy"') - \ - (ProbeInsertionMissingDataLog & 'missing_data="channels"') + if mode != "public": + key_source = ( + ProbeInsertion + & (data.FileRecord & 'dataset_name="channels.rawInd.npy"') + & (data.FileRecord & 'dataset_name="channels.localCoordinates.npy"') + - (ProbeInsertionMissingDataLog & 'missing_data="channels"') + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - probe_name = (ProbeInsertion & key).fetch1('probe_label') + eID = str((acquisition.Session & key).fetch1("session_uuid")) + probe_name = (ProbeInsertion & key).fetch1("probe_label") try: - channels = one.load_object(eID, obj='channels', - collection=f'alf/{probe_name}') + channels = one.load_object( + eID, obj="channels", collection=f"alf/{probe_name}" + ) except Exception as e: ProbeInsertionMissingDataLog.insert1( - dict(**key, missing_data='channels', error_message=str(e))) + dict(**key, missing_data="channels", error_message=str(e)) + ) return self.insert1( - dict(**key, - channel_raw_inds=channels.rawInd, - channel_local_coordinates=channels.localCoordinates)) + dict( + **key, + channel_raw_inds=channels.rawInd, + channel_local_coordinates=channels.localCoordinates, + ) + ) @schema @@ -175,7 +185,7 @@ class ClusteringMethod(dj.Lookup): definition = """ clustering_method: varchar(32) # clustering method """ - contents = [['ks2']] + contents = [["ks2"]] @schema @@ -200,33 +210,43 @@ class DefaultCluster(dj.Imported): cluster_ts=CURRENT_TIMESTAMP : timestamp """ - if mode != 'public': - key_source = (ProbeInsertion & (CompleteClusterSession - ProblematicDataSet) - - (ProbeInsertionMissingDataLog & 'missing_data="clusters"')) + if mode != "public": + key_source = ProbeInsertion & (CompleteClusterSession - ProblematicDataSet) - ( + ProbeInsertionMissingDataLog & 'missing_data="clusters"' + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - probe_name = (ProbeInsertion & key).fetch1('probe_label') + eID = str((acquisition.Session & key).fetch1("session_uuid")) + probe_name = (ProbeInsertion & key).fetch1("probe_label") try: - clusters = one.load_object(eID, obj='clusters', collection=f'alf/{probe_name}') - spikes = one.load_object(eID, obj='spikes', collection=f'alf/{probe_name}') + clusters = one.load_object( + eID, obj="clusters", collection=f"alf/{probe_name}" + ) + spikes = one.load_object(eID, obj="spikes", collection=f"alf/{probe_name}") except Exception as e: ProbeInsertionMissingDataLog.insert1( - dict(**key, missing_data='clusters', error_message=str(e))) + dict(**key, missing_data="clusters", error_message=str(e)) + ) return - time_fnames = [k for k in spikes.keys() if 'times' in k] + time_fnames = [k for k in spikes.keys() if "times" in k] if len(time_fnames) > 1: - raise ValueError('More than one fields of spikes are about times: {}'.format(spikes.keys())) + raise ValueError( + "More than one fields of spikes are about times: {}".format( + spikes.keys() + ) + ) else: time_fname = time_fnames[0] max_spike_time = spikes[time_fname][-1] cluster_list, metrics_list, metric_list, Ks2Label_list = [], [], [], [] - for icluster, cluster_uuid in tqdm(enumerate(clusters.uuids['uuids']), position=0): + for icluster, cluster_uuid in tqdm( + enumerate(clusters.uuids["uuids"]), position=0 + ): idx = spikes.clusters == icluster cluster = dict( **key, @@ -242,31 +262,42 @@ def make(self, key): cluster_spikes_depths=spikes.depths[idx], cluster_spikes_amps=spikes.amps[idx], cluster_spikes_templates=spikes.templates[idx], - cluster_spikes_samples=spikes.samples[idx]) + cluster_spikes_samples=spikes.samples[idx], + ) cluster_list.append(cluster) - num_spikes = len(cluster['cluster_spikes_times']) - firing_rate = num_spikes/max_spike_time + num_spikes = len(cluster["cluster_spikes_times"]) + firing_rate = num_spikes / max_spike_time metrics = clusters.metrics.iloc[icluster] - metrics_list.append(dict(**key, - cluster_id=icluster, - num_spikes=num_spikes, - firing_rate=firing_rate, - metrics=metrics.to_dict())) + metrics_list.append( + dict( + **key, + cluster_id=icluster, + num_spikes=num_spikes, + firing_rate=firing_rate, + metrics=metrics.to_dict(), + ) + ) if metrics.ks2_label and (not pd.isnull(metrics.ks2_label)): Ks2Label_list.append( - dict(**key, cluster_id=icluster, - ks2_label=metrics.ks2_label)) + dict(**key, cluster_id=icluster, ks2_label=metrics.ks2_label) + ) metric_list.extend( - [dict(**key, cluster_id=icluster, - metric_name=name, metric_value=value) - for name, value in metrics.to_dict().items() - if name != 'ks2_label' and not np.isnan(value) and not np.isinf(value)]) + [ + dict( + **key, cluster_id=icluster, metric_name=name, metric_value=value + ) + for name, value in metrics.to_dict().items() + if name != "ks2_label" + and not np.isnan(value) + and not np.isinf(value) + ] + ) self.insert(cluster_list) self.Metrics.insert(metrics_list) @@ -309,7 +340,7 @@ class GoodClusterCriterion(dj.Lookup): --- criterion_description: varchar(255) """ - contents = [[1, 'firing rate greater than 0.2']] + contents = [[1, "firing rate greater than 0.2"]] @schema @@ -323,10 +354,10 @@ class GoodCluster(dj.Computed): """ def make(self, key): - firing_rate = (DefaultCluster.Metrics & key).fetch1('firing_rate') - if key['criterion_id'] == 1: + firing_rate = (DefaultCluster.Metrics & key).fetch1("firing_rate") + if key["criterion_id"] == 1: if firing_rate > 0.2: - key['is_good'] = True + key["is_good"] = True self.insert1(key) @@ -336,7 +367,7 @@ class Event(dj.Lookup): # Different behavioral events, including 'go cue', 'stim on', 'response', 'feedback', and 'movement' event: varchar(32) """ - contents = zip(['go cue', 'stim on', 'response', 'feedback', 'movement']) + contents = zip(["go cue", "stim on", "response", "feedback", "movement"]) @schema @@ -350,63 +381,84 @@ class AlignedTrialSpikes(dj.Computed): trial_spike_times=null: longblob # spike time for each trial, aligned to different event times trial_spikes_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = behavior.TrialSet * DefaultCluster * Event & \ - ['event in ("stim on", "feedback")', - dj.AndList([wheel.MovementTimes, 'event="movement"'])] + key_source = behavior.TrialSet * DefaultCluster * Event & [ + 'event in ("stim on", "feedback")', + dj.AndList([wheel.MovementTimes, 'event="movement"']), + ] def make(self, key): cluster = DefaultCluster() & key - spike_times = cluster.fetch1('cluster_spikes_times') - event = (Event & key).fetch1('event') + spike_times = cluster.fetch1("cluster_spikes_times") + event = (Event & key).fetch1("event") - if event == 'movement': + if event == "movement": trials = behavior.TrialSet.Trial * wheel.MovementTimes & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times, \ - trial_movement_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time', - 'movement_onset') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + trial_movement_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + "movement_onset", + ) else: trials = behavior.TrialSet.Trial & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + ) # trial idx of each spike spike_ids = np.searchsorted( np.sort(np.hstack(np.vstack([trial_start_times, trial_end_times]).T)), - spike_times) + spike_times, + ) trial_spks = [] for itrial, trial_key in enumerate(trial_keys): trial_spk = dict( - **trial_key, - cluster_id=key['cluster_id'], - probe_idx=key['probe_idx'] + **trial_key, cluster_id=key["cluster_id"], probe_idx=key["probe_idx"] ) - trial_spike_time = spike_times[spike_ids == itrial*2+1] + trial_spike_time = spike_times[spike_ids == itrial * 2 + 1] if not len(trial_spike_time): - trial_spk['trial_spike_times'] = np.array([]) + trial_spk["trial_spike_times"] = np.array([]) else: - if event == 'stim on': - trial_spk['trial_spike_times'] = \ + if event == "stim on": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_stim_on_times[itrial] - elif event == 'movement': - trial_spk['trial_spike_times'] = \ + ) + elif event == "movement": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_movement_times[itrial] - elif event == 'feedback': + ) + elif event == "feedback": if trial_feedback_times[itrial]: - trial_spk['trial_spike_times'] = \ + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_feedback_times[itrial] + ) else: continue - trial_spk['event'] = event + trial_spk["event"] = event trial_spks.append(trial_spk.copy()) self.insert(trial_spks) diff --git a/ibl_pipeline/group_shared/wheel.py b/ibl_pipeline/group_shared/wheel.py index 643a9b35..f60d3e25 100755 --- a/ibl_pipeline/group_shared/wheel.py +++ b/ibl_pipeline/group_shared/wheel.py @@ -1,32 +1,32 @@ import logging +import pathlib from logging.handlers import RotatingFileHandler +import brainbox.behavior.wheel as wh import datajoint as dj -from ibl_pipeline import acquisition, behavior, mode import numpy as np -import pathlib +from ibllib.io.extractors.training_wheel import ( + extract_first_movement_times, + extract_wheel_moves, + infer_wheel_units, +) -import brainbox.behavior.wheel as wh -from ibllib.io.extractors.training_wheel import extract_wheel_moves, extract_first_movement_times, infer_wheel_units +from ibl_pipeline import acquisition, behavior, mode, one -from ibl_pipeline import one - - -log_path = pathlib.Path(__file__).parent / 'logs' +log_path = pathlib.Path(__file__).parent / "logs" log_path.mkdir(parents=True, exist_ok=True) log_file = log_path / f'process_wheel{"_public" if mode == "public" else ""}.log' log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + format="%(asctime)s - %(message)s", + handlers=[logging.FileHandler(log_file), logging.StreamHandler()], + level=25, +) logger = logging.getLogger(__name__) -schema = dj.schema('group_shared_wheel') # group_shared_wheel +schema = dj.schema("group_shared_wheel") # group_shared_wheel @schema @@ -69,22 +69,22 @@ def make(self, key, one=None): move_key = key.copy() change_key = move_key.copy() one = one or ONE() - eid, ver = (acquisition.Session & key).fetch1('session_uuid', 'task_protocol') - logger.info('WheelMoves for session %s, %s', str(eid), ver) + eid, ver = (acquisition.Session & key).fetch1("session_uuid", "task_protocol") + logger.info("WheelMoves for session %s, %s", str(eid), ver) try: # Should be able to remove this - wheel = one.load_object(str(eid), 'wheel') - all_loaded = \ - all([isinstance(wheel[lab], np.ndarray) for lab in wheel]) and \ - all(k in wheel for k in ('timestamps', 'position')) - assert all_loaded, 'wheel data missing' + wheel = one.load_object(str(eid), "wheel") + all_loaded = all( + [isinstance(wheel[lab], np.ndarray) for lab in wheel] + ) and all(k in wheel for k in ("timestamps", "position")) + assert all_loaded, "wheel data missing" # If times and timestamps present, drop times - if {'times', 'timestamps'}.issubset(wheel): - wheel.pop('times') + if {"times", "timestamps"}.issubset(wheel): + wheel.pop("times") wheel_moves = extract_wheel_moves(wheel.timestamps, wheel.position) except ValueError: - logger.exception('Failed to find movements') + logger.exception("Failed to find movements") raise except AssertionError as ex: logger.exception(str(ex)) @@ -94,16 +94,24 @@ def make(self, key, one=None): raise # Build list of table entries - keys = ('move_id', 'movement_onset', 'movement_offset', 'max_velocity', 'movement_amplitude') + keys = ( + "move_id", + "movement_onset", + "movement_offset", + "max_velocity", + "movement_amplitude", + ) on_off, amp, vel_t = wheel_moves.values() # Unpack into short vars - moves = [dict(zip(keys, (i, on, off, vel_t[i], amp[i])), **move_key) - for i, (on, off) in enumerate(on_off)] + moves = [ + dict(zip(keys, (i, on, off, vel_t[i], amp[i])), **move_key) + for i, (on, off) in enumerate(on_off) + ] # Calculate direction changes Fs = 1000 re_ts, re_pos = wheel.timestamps, wheel.position if len(re_ts.shape) != 1: - logger.info('2D wheel timestamps') + logger.info("2D wheel timestamps") if len(re_pos.shape) > 1: # Ensure 1D array of positions re_pos = re_pos.flatten() # Linearly interpolate the times @@ -119,19 +127,28 @@ def make(self, key, one=None): mask = np.logical_and(ts > on, ts < off) ind = np.logical_and(mask, change_mask) changes.extend( - dict(change_key, move_id=i, change_id=j, change_time=t) for j, t in enumerate(ts[ind]) + dict(change_key, move_id=i, change_id=j, change_time=t) + for j, t in enumerate(ts[ind]) ) # Get the units of the position data units, *_ = infer_wheel_units(wheel.position) - key['n_movements'] = wheel_moves['intervals'].shape[0] # total number of movements within the session - key['total_displacement'] = float(np.diff(wheel.position[[0, -1]])) # total displacement of the wheel during session - key['total_distance'] = float(np.abs(np.diff(wheel.position)).sum()) # total movement of the wheel - key['n_direction_changes'] = sum(change_mask) # total number of direction changes - if units == 'cm': # convert to radians - key['total_displacement'] = wh.cm_to_rad(key['total_displacement']) - key['total_distance'] = wh.cm_to_rad(key['total_distance']) - wheel_moves['peakAmplitude'] = wh.cm_to_rad(wheel_moves['peakAmplitude']) + key["n_movements"] = wheel_moves["intervals"].shape[ + 0 + ] # total number of movements within the session + key["total_displacement"] = float( + np.diff(wheel.position[[0, -1]]) + ) # total displacement of the wheel during session + key["total_distance"] = float( + np.abs(np.diff(wheel.position)).sum() + ) # total movement of the wheel + key["n_direction_changes"] = sum( + change_mask + ) # total number of direction changes + if units == "cm": # convert to radians + key["total_displacement"] = wh.cm_to_rad(key["total_displacement"]) + key["total_distance"] = wh.cm_to_rad(key["total_distance"]) + wheel_moves["peakAmplitude"] = wh.cm_to_rad(wheel_moves["peakAmplitude"]) # Insert the keys in order self.insert1(key) @@ -157,91 +174,116 @@ class MovementTimes(dj.Computed): def make(self, key, one=None): # Log eid and task version - eid, ver = (acquisition.Session & key).fetch1('session_uuid', 'task_protocol') - logger.info('MovementTimes for session %s, %s', str(eid), ver) + eid, ver = (acquisition.Session & key).fetch1("session_uuid", "task_protocol") + logger.info("MovementTimes for session %s, %s", str(eid), ver) # Get required data from wheel moves and trials tables, each as a dict of numpy arrays - fields = ('move_id', 'movement_onset', 'movement_offset', 'movement_amplitude') - wheel_move_data = {k: v.values for k, v in ( - ( - (WheelMoveSet.Move & key) - .proj(*fields) - .fetch(order_by='move_id', format='frame') - .reset_index() - .drop(['subject_uuid', 'session_start_time'], axis=1) - .rename(columns={'movement_amplitude': 'peakAmplitude'}) - .iteritems() + fields = ("move_id", "movement_onset", "movement_offset", "movement_amplitude") + wheel_move_data = { + k: v.values + for k, v in ( + ( + (WheelMoveSet.Move & key) + .proj(*fields) + .fetch(order_by="move_id", format="frame") + .reset_index() + .drop(["subject_uuid", "session_start_time"], axis=1) + .rename(columns={"movement_amplitude": "peakAmplitude"}) + .iteritems() + ) ) - )} - - fields = ('trial_response_choice', 'trial_response_time', 'trial_stim_on_time', - 'trial_go_cue_time', 'trial_feedback_time', 'trial_start_time') - trial_data = {k: v.values for k, v in ( - ( - (behavior.TrialSet.Trial & key) - .proj(*fields) - .fetch(order_by='trial_id', format='frame') - .reset_index() - .drop(['subject_uuid', 'session_start_time'], axis=1) - .iteritems() + } + + fields = ( + "trial_response_choice", + "trial_response_time", + "trial_stim_on_time", + "trial_go_cue_time", + "trial_feedback_time", + "trial_start_time", + ) + trial_data = { + k: v.values + for k, v in ( + ( + (behavior.TrialSet.Trial & key) + .proj(*fields) + .fetch(order_by="trial_id", format="frame") + .reset_index() + .drop(["subject_uuid", "session_start_time"], axis=1) + .iteritems() + ) ) - )} + } - if trial_data['trial_id'].size == 0 or wheel_move_data['move_id'].size == 0: - logger.warning('Missing DJ trial or move data') + if trial_data["trial_id"].size == 0 or wheel_move_data["move_id"].size == 0: + logger.warning("Missing DJ trial or move data") return # Get minimum quiescent period for session try: one = one or ONE() - task_params = one.load_object(str(eid), '_iblrig_taskSettings.raw') - min_qt = task_params['raw']['QUIESCENT_PERIOD'] + task_params = one.load_object(str(eid), "_iblrig_taskSettings.raw") + min_qt = task_params["raw"]["QUIESCENT_PERIOD"] except Exception: - logger.warning('failed to load min quiescent time') + logger.warning("failed to load min quiescent time") min_qt = None # Many of the timestamps are missing for sessions, therefore will patch together the approximate # closed-loop periods by taking the minimum of go_cue and stim_on, response and feedback. - start = np.nanmin(np.c_[trial_data['trial_stim_on_time'], trial_data['trial_go_cue_time']], axis=1) - end = np.nanmin(np.c_[trial_data['trial_response_time'], trial_data['trial_feedback_time']], axis=1) + start = np.nanmin( + np.c_[trial_data["trial_stim_on_time"], trial_data["trial_go_cue_time"]], + axis=1, + ) + end = np.nanmin( + np.c_[trial_data["trial_response_time"], trial_data["trial_feedback_time"]], + axis=1, + ) # Check we have times for at least some trials nan_trial = np.isnan(np.c_[start, end]).any(axis=1) - assert ~nan_trial.all(), 'no reliable trials times for session' + assert ~nan_trial.all(), "no reliable trials times for session" - assert (((start < end) | nan_trial).all() and - ((np.diff(start) > 0) | np.isnan(np.diff(start))).all()), 'timestamps not increasing' - go_trial = trial_data['trial_response_choice'] != 'No Go' + assert ((start < end) | nan_trial).all() and ( + (np.diff(start) > 0) | np.isnan(np.diff(start)) + ).all(), "timestamps not increasing" + go_trial = trial_data["trial_response_choice"] != "No Go" # Rename data for the firstMovement_times extractor function - wheel_move_data['intervals'] = np.c_[ - wheel_move_data['movement_onset'], wheel_move_data['movement_offset'] + wheel_move_data["intervals"] = np.c_[ + wheel_move_data["movement_onset"], wheel_move_data["movement_offset"] ] - trial_data = {'goCue_times': start, 'feedback_times': end, 'trial_id': trial_data['trial_id']} + trial_data = { + "goCue_times": start, + "feedback_times": end, + "trial_id": trial_data["trial_id"], + } # Find first significant movement for each trial. To be counted, the movement must # occur between go cue / stim on and before feedback / response time. The movement # onset is sometimes just before the cue (occurring in the gap between quiescence end and # cue start, or during the quiescence period but sub-threshold). The movement is # sufficiently large if it is greater than or equal to THRESH - onsets, final_movement, ids = extract_first_movement_times(wheel_move_data, trial_data, min_qt) + onsets, final_movement, ids = extract_first_movement_times( + wheel_move_data, trial_data, min_qt + ) move_ids = np.full_like(onsets, np.nan) move_ids[~np.isnan(onsets)] = ids # Check if any movements failed to be detected n_nan = np.count_nonzero(np.isnan(onsets[go_trial])) if n_nan > 0: - logger.warning('failed to detect movement on %i go trials', n_nan) + logger.warning("failed to detect movement on %i go trials", n_nan) # Create matrix of values for insertion into table movement_data = np.c_[ - trial_data['trial_id'], # trial_id + trial_data["trial_id"], # trial_id move_ids, # wheel_move_id onsets - start, # reaction_time final_movement, # final_movement end - onsets, # movement_time end - start, # response_time - onsets # movement_onset + onsets, # movement_onset ] data = [] for row in movement_data: diff --git a/ibl_pipeline/histology.py b/ibl_pipeline/histology.py index 7e2d06f8..eb4f1239 100755 --- a/ibl_pipeline/histology.py +++ b/ibl_pipeline/histology.py @@ -1,6 +1,5 @@ -from ibl_pipeline.histology_shared import * from ibl_pipeline import mode +from ibl_pipeline.histology_shared import * - -if mode != 'public': +if mode != "public": from ibl_pipeline.histology_internal import * diff --git a/ibl_pipeline/histology_internal.py b/ibl_pipeline/histology_internal.py index 9d918c67..9f56263c 100644 --- a/ibl_pipeline/histology_internal.py +++ b/ibl_pipeline/histology_internal.py @@ -1,26 +1,27 @@ +import warnings + import datajoint as dj import numpy as np -from ibl_pipeline.utils import atlas -import warnings -from ibl_pipeline import reference, acquisition, data, qc -from ibl_pipeline import mode, one +from ibl_pipeline import acquisition, data, mode, one, qc, reference +from ibl_pipeline.utils import atlas # avoid importing ONE when importing the ephys module if possible try: - ephys = dj.create_virtual_module('ephys', 'ibl_ephys') + ephys = dj.create_virtual_module("ephys", "ibl_ephys") except dj.DataJointError: from ibl_pipeline import ephys -if mode == 'update': - schema = dj.schema('ibl_histology') +if mode == "update": + schema = dj.schema("ibl_histology") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_histology') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_histology") # ================= The temporary tables before the probe trajectories are finally resolved =================== + @schema class Provenance(dj.Lookup): definition = """ @@ -30,10 +31,10 @@ class Provenance(dj.Lookup): provenance_description : varchar(128) # type of trajectory """ contents = [ - (70, 'Ephys aligned histology track'), - (50, 'Histology track'), - (30, 'Micro-manipulator'), - (10, 'Planned'), + (70, "Ephys aligned histology track"), + (50, "Histology track"), + (30, "Micro-manipulator"), + (10, "Planned"), ] @@ -81,8 +82,8 @@ def detect_outdated_entries(cls): Returns: list of str: list of channel_brain_location_uuids that are deleted from alyx """ - dj_uuids = [str(uuid) for uuid in cls.fetch('channel_brain_location_uuid')] - alyx_uuids = [c['id'] for c in one.alyx.rest('channels', 'list')] + dj_uuids = [str(uuid) for uuid in cls.fetch("channel_brain_location_uuid")] + alyx_uuids = [c["id"] for c in one.alyx.rest("channels", "list")] return list(set(dj_uuids) - set(alyx_uuids)) @@ -103,13 +104,21 @@ def make(self, key): from ibllib.pipes.ephys_alignment import EphysAlignment x, y, z, axial = (ChannelBrainLocationTemp & key).fetch( - 'channel_x', 'channel_y', 'channel_z', 'channel_axial', - order_by='channel_axial') + "channel_x", + "channel_y", + "channel_z", + "channel_axial", + order_by="channel_axial", + ) xyz_channels = np.c_[x, y, z] - key['region_boundaries'], key['region_label'], \ - key['region_color'], key['region_id'] = \ - EphysAlignment.get_histology_regions( - xyz_channels.astype('float')/1e6, axial.astype('float')) + ( + key["region_boundaries"], + key["region_label"], + key["region_color"], + key["region_id"], + ) = EphysAlignment.get_histology_regions( + xyz_channels.astype("float") / 1e6, axial.astype("float") + ) self.insert1(key) @@ -124,54 +133,65 @@ class ClusterBrainRegionTemp(dj.Computed): --- -> reference.BrainRegion """ - key_source = ephys.DefaultCluster * Provenance & \ - ProbeTrajectoryTemp & ephys.ChannelGroup & ChannelBrainLocationTemp + key_source = ( + ephys.DefaultCluster * Provenance + & ProbeTrajectoryTemp + & ephys.ChannelGroup + & ChannelBrainLocationTemp + ) def make(self, key): # pdb.set_trace() - channel_raw_inds, channel_local_coordinates = \ - (ephys.ChannelGroup & key).fetch1( - 'channel_raw_inds', 'channel_local_coordinates') - channel = (ephys.DefaultCluster & key).fetch1('cluster_channel') + channel_raw_inds, channel_local_coordinates = (ephys.ChannelGroup & key).fetch1( + "channel_raw_inds", "channel_local_coordinates" + ) + channel = (ephys.DefaultCluster & key).fetch1("cluster_channel") if channel in channel_raw_inds: channel_coords = np.squeeze( - channel_local_coordinates[channel_raw_inds == channel]) + channel_local_coordinates[channel_raw_inds == channel] + ) else: return - q = ChannelBrainLocationTemp & key & \ - dict(channel_lateral=channel_coords[0], - channel_axial=channel_coords[1]) + q = ( + ChannelBrainLocationTemp + & key + & dict(channel_lateral=channel_coords[0], channel_axial=channel_coords[1]) + ) if len(q) == 1: - key['ontology'], key['acronym'] = q.fetch1( - 'ontology', 'acronym') + key["ontology"], key["acronym"] = q.fetch1("ontology", "acronym") self.insert1(key) elif len(q) > 1: - ontology, acronym = q.fetch('ontology', 'acronym') + ontology, acronym = q.fetch("ontology", "acronym") if len(np.unique(acronym)) == 1: - key['ontology'] = 'CCF 2017' - key['acronym'] = acronym[0] + key["ontology"] = "CCF 2017" + key["acronym"] = acronym[0] self.insert1(key) else: # check which one is in alyx - uuids = q.fetch('channel_brain_location_uuid') + uuids = q.fetch("channel_brain_location_uuid") channel_detected = 0 for uuid in uuids: - channel = one.alyx.rest('channels', 'list', id=str(uuid)) + channel = one.alyx.rest("channels", "list", id=str(uuid)) if channel: if channel_detected: - warnings.warn('Duplicated Channel entries detected in alyx') + warnings.warn("Duplicated Channel entries detected in alyx") else: - ontology, acronym = (ChannelBrainLocationTemp & {'channel_brain_location_uuid': uuid}).fetch1('ontology', 'acronym') - key['ontology'] = 'CCF 2017' - key['acronym'] = acronym + ontology, acronym = ( + ChannelBrainLocationTemp + & {"channel_brain_location_uuid": uuid} + ).fetch1("ontology", "acronym") + key["ontology"] = "CCF 2017" + key["acronym"] = acronym self.insert1(key) channel_detected = 1 - warnings.warn('Detect duplicated channel brain location entries in table ChannelBrainLocationTemp') + warnings.warn( + "Detect duplicated channel brain location entries in table ChannelBrainLocationTemp" + ) else: return @@ -186,10 +206,14 @@ class ProbeBrainRegionTemp(dj.Computed): key_source = ProbeTrajectoryTemp & ClusterBrainRegionTemp def make(self, key): - regions = (dj.U('acronym') & (ClusterBrainRegionTemp & key)).fetch('acronym') + regions = (dj.U("acronym") & (ClusterBrainRegionTemp & key)).fetch("acronym") associated_regions = [ - atlas.BrainAtlas.get_parents(acronym) - for acronym in regions] + list(regions) - - self.insert([dict(**key, ontology='CCF 2017', acronym=region) - for region in np.unique(np.hstack(associated_regions))]) + atlas.BrainAtlas.get_parents(acronym) for acronym in regions + ] + list(regions) + + self.insert( + [ + dict(**key, ontology="CCF 2017", acronym=region) + for region in np.unique(np.hstack(associated_regions)) + ] + ) diff --git a/ibl_pipeline/histology_shared.py b/ibl_pipeline/histology_shared.py index 0d8161f8..d5487805 100644 --- a/ibl_pipeline/histology_shared.py +++ b/ibl_pipeline/histology_shared.py @@ -1,19 +1,18 @@ +import warnings + import datajoint as dj import numpy as np -from ibl_pipeline.utils import atlas from tqdm import tqdm -import warnings - -from ibl_pipeline import reference, subject, acquisition, data, ephys, qc -from ibl_pipeline import mode, one +from ibl_pipeline import acquisition, data, ephys, mode, one, qc, reference, subject +from ibl_pipeline.utils import atlas -if mode == 'update': - schema = dj.schema('ibl_histology') +if mode == "update": + schema = dj.schema("ibl_histology") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_histology') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_histology") -if mode != 'public': +if mode != "public": from ibl_pipeline.histology_internal import ProbeTrajectoryTemp @@ -35,25 +34,32 @@ class ProbeTrajectory(dj.Imported): trajectory_ts=CURRENT_TIMESTAMP: timestamp """ - if mode != 'public': - key_source = ephys.ProbeInsertion & \ - (qc.ProbeInsertionExtendedQC & 'qc_type="alignment_resolved"') & \ - (ProbeTrajectoryTemp & 'provenance=70') + if mode != "public": + key_source = ( + ephys.ProbeInsertion + & (qc.ProbeInsertionExtendedQC & 'qc_type="alignment_resolved"') + & (ProbeTrajectoryTemp & "provenance=70") + ) def make(self, key): - if mode != 'public': + if mode != "public": # get the result from temp - probe_trajectory = (ProbeTrajectoryTemp & 'provenance=70' & key).fetch1() - probe_trajectory.pop('provenance') + probe_trajectory = (ProbeTrajectoryTemp & "provenance=70" & key).fetch1() + probe_trajectory.pop("provenance") else: - subject_nickname = (subject.Subject & key).fetch1('subject_nickname') - probe_insertion_uuid = str((ephys.ProbeInsertion & key).fetch1('probe_insertion_uuid')) + subject_nickname = (subject.Subject & key).fetch1("subject_nickname") + probe_insertion_uuid = str( + (ephys.ProbeInsertion & key).fetch1("probe_insertion_uuid") + ) # get the result from Alyx with ONE traj = one.alyx.rest( - 'trajectories', 'list', subject=subject_nickname, + "trajectories", + "list", + subject=subject_nickname, probe_insertion=probe_insertion_uuid, - provenance='Ephys aligned histology track')[0] + provenance="Ephys aligned histology track", + )[0] # here is an example data returned by ONE # [{'id': 'c652f72e-e1f4-4067-8961-1a61235f0dbc', # 'probe_insertion': 'da8dfec1-d265-44e8-84ce-6ae9c109b8bd', @@ -85,11 +91,13 @@ def make(self, key): # 0.0017561732283464578, # 1.0978058600524505], # 'PASS: None']}}] - kept_fields = ['x', 'y', 'z', 'depth', 'theta', 'phi', 'roll'] + kept_fields = ["x", "y", "z", "depth", "theta", "phi", "roll"] probe_trajectory = dict( - **key, **{f: traj[f] for f in kept_fields}, - coordinate_system_name=traj['coordinate_system'], - probe_trajectory_uuid=traj['id']) + **key, + **{f: traj[f] for f in kept_fields}, + coordinate_system_name=traj["coordinate_system"], + probe_trajectory_uuid=traj["id"], + ) self.insert1(probe_trajectory) @@ -107,41 +115,47 @@ class ChannelBrainLocation(dj.Imported): -> reference.BrainRegion """ - if mode != 'public': - key_source = (ProbeTrajectory - & (data.FileRecord & 'dataset_name like "%channels.brainLocationIds%"') - & (data.FileRecord & 'dataset_name like "%channels.mlapdv%"')) - \ - (ephys.ProbeInsertionMissingDataLog & 'missing_data="channels_brain_region"') + if mode != "public": + key_source = ( + ProbeTrajectory + & (data.FileRecord & 'dataset_name like "%channels.brainLocationIds%"') + & (data.FileRecord & 'dataset_name like "%channels.mlapdv%"') + ) - ( + ephys.ProbeInsertionMissingDataLog & 'missing_data="channels_brain_region"' + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - probe_name = (ephys.ProbeInsertion & key).fetch1('probe_label') - probe_name = probe_name or 'probe0' + key['probe_idx'] + eID = str((acquisition.Session & key).fetch1("session_uuid")) + probe_name = (ephys.ProbeInsertion & key).fetch1("probe_label") + probe_name = probe_name or "probe0" + key["probe_idx"] try: - channels = one.load_object(eID, obj='channels', - collection=f'alf/{probe_name}') + channels = one.load_object( + eID, obj="channels", collection=f"alf/{probe_name}" + ) except Exception as e: ephys.ProbeInsertionMissingDataLog.insert1( - dict(**key, missing_data='channels_brain_region', - error_message=str(e))) + dict(**key, missing_data="channels_brain_region", error_message=str(e)) + ) return channel_entries = [] for ichannel, (brain_loc_id, loc) in tqdm( - enumerate(zip(channels['brainLocationIds_ccf_2017'], - channels['mlapdv']))): - brain_region_key = (reference.BrainRegion & - {'brain_region_pk': brain_loc_id}).fetch1('KEY') + enumerate(zip(channels["brainLocationIds_ccf_2017"], channels["mlapdv"])) + ): + brain_region_key = ( + reference.BrainRegion & {"brain_region_pk": brain_loc_id} + ).fetch1("KEY") channel_entries.append( dict( channel_idx=ichannel, - **key, **brain_region_key, + **key, + **brain_region_key, channel_ml=loc[0], channel_ap=loc[1], - channel_dv=loc[2] + channel_dv=loc[2], ) ) @@ -160,37 +174,43 @@ class ClusterBrainRegion(dj.Imported): cluster_dv : decimal(6, 1) # (um) dorso-ventral coordinate relative to Bregma, ventral negative -> reference.BrainRegion """ - key_source = ProbeTrajectory & \ - (data.FileRecord & 'dataset_name like "%clusters.brainLocationIds%"') & \ - (data.FileRecord & 'dataset_name like "%clusters.mlapdv%"') + key_source = ( + ProbeTrajectory + & (data.FileRecord & 'dataset_name like "%clusters.brainLocationIds%"') + & (data.FileRecord & 'dataset_name like "%clusters.mlapdv%"') + ) def make(self, key): - eID = str((acquisition.Session & key).fetch1('session_uuid')) - probe_name = (ephys.ProbeInsertion & key).fetch1('probe_label') - probe_name = probe_name or 'probe0' + key['probe_idx'] + eID = str((acquisition.Session & key).fetch1("session_uuid")) + probe_name = (ephys.ProbeInsertion & key).fetch1("probe_label") + probe_name = probe_name or "probe0" + key["probe_idx"] try: - clusters = one.load_object(eID, obj='clusters', collection=f'alf/{probe_name}') + clusters = one.load_object( + eID, obj="clusters", collection=f"alf/{probe_name}" + ) except Exception as e: ephys.ProbeInsertionMissingDataLog.insert1( - dict(**key, missing_data='clusters_brain_region', - error_message=str(e))) + dict(**key, missing_data="clusters_brain_region", error_message=str(e)) + ) return cluster_entries = [] for icluster, (brain_loc_id, loc) in tqdm( - enumerate(zip(clusters['brainLocationIds_ccf_2017'], - clusters['mlapdv']))): - brain_region_key = (reference.BrainRegion & - {'brain_region_pk': brain_loc_id}).fetch1('KEY') + enumerate(zip(clusters["brainLocationIds_ccf_2017"], clusters["mlapdv"])) + ): + brain_region_key = ( + reference.BrainRegion & {"brain_region_pk": brain_loc_id} + ).fetch1("KEY") cluster_entries.append( dict( cluster_id=icluster, - **key, **brain_region_key, + **key, + **brain_region_key, cluster_ml=loc[0], cluster_ap=loc[1], - cluster_dv=loc[2] + cluster_dv=loc[2], ) ) @@ -207,13 +227,17 @@ class ProbeBrainRegion(dj.Computed): key_source = ProbeTrajectory & ClusterBrainRegion def make(self, key): - regions = (dj.U('acronym') & (ClusterBrainRegion & key)).fetch('acronym') + regions = (dj.U("acronym") & (ClusterBrainRegion & key)).fetch("acronym") associated_regions = [ - atlas.BrainAtlas.get_parents(acronym) - for acronym in regions] + list(regions) + atlas.BrainAtlas.get_parents(acronym) for acronym in regions + ] + list(regions) - self.insert([dict(**key, ontology='CCF 2017', acronym=region) - for region in np.unique(np.hstack(associated_regions))]) + self.insert( + [ + dict(**key, ontology="CCF 2017", acronym=region) + for region in np.unique(np.hstack(associated_regions)) + ] + ) @schema @@ -233,15 +257,20 @@ def make(self, key): from ibllib.pipes.ephys_alignment import EphysAlignment x, y, z = (ChannelBrainLocation & key).fetch( - 'channel_ml', 'channel_ap', 'channel_dv') + "channel_ml", "channel_ap", "channel_dv" + ) - coords = (ephys.ChannelGroup & key).fetch1('channel_local_coordinates') + coords = (ephys.ChannelGroup & key).fetch1("channel_local_coordinates") xyz_channels = np.c_[x, y, z] - key['region_boundaries'], key['region_label'], \ - key['region_color'], key['region_id'] = \ - EphysAlignment.get_histology_regions( - xyz_channels.astype('float')/1e6, coords[:, 1]) + ( + key["region_boundaries"], + key["region_label"], + key["region_color"], + key["region_id"], + ) = EphysAlignment.get_histology_regions( + xyz_channels.astype("float") / 1e6, coords[:, 1] + ) self.insert1(key) @@ -255,11 +284,11 @@ def check_boundaries_duplicates(cls, restrictor={}): keys_with_duplicated_boundaries (list of dicts): a list of keys that have duplicated boundaries. """ - keys = (cls & restrictor).fetch('KEY') + keys = (cls & restrictor).fetch("KEY") keys_with_duplicated_boundaries = [] for key in keys: - region_labels = (cls & key).fetch1('region_label') + region_labels = (cls & key).fetch1("region_label") if len(region_labels) != len(set(region_labels[:, 0])): keys_with_duplicated_boundaries.append(key) diff --git a/ibl_pipeline/ingest/__init__.py b/ibl_pipeline/ingest/__init__.py index 0d4599ce..0622c184 100755 --- a/ibl_pipeline/ingest/__init__.py +++ b/ibl_pipeline/ingest/__init__.py @@ -1,4 +1,4 @@ -''' +""" ibl.ingest @@ -51,40 +51,48 @@ While this should not happen in the current architecture, following the pattern outlined here should prevent it in general and so is a good 'safe practice' to use for the ingest modules. -''' +""" import logging +import os + import datajoint as dj from tqdm import tqdm + from ibl_pipeline.ingest import alyxraw -import os -if dj.config.get('custom', {}).get('database.mode', "") == 'test': - dj.config['database.prefix'] = 'test_' +if dj.config.get("custom", {}).get("database.mode", "") == "test": + dj.config["database.prefix"] = "test_" logger = logging.getLogger(__name__) def get_raw_field(key, field, multiple_entries=False, model=None): if model: - query = alyxraw.AlyxRaw.Field & \ - (alyxraw.AlyxRaw & 'model="{}"'.format(model)) & \ - key & 'fname="{}"'.format(field) + query = ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="{}"'.format(model)) + & key + & 'fname="{}"'.format(field) + ) else: query = alyxraw.AlyxRaw.Field & key & 'fname="{}"'.format(field) if not query: raise AlyxKeyError(f'No "{field}" field in AlyxRaw.Field for key: {key}') - return (query.fetch1('fvalue') - if not multiple_entries and len(query) - else query.fetch('fvalue')) + return ( + query.fetch1("fvalue") + if not multiple_entries and len(query) + else query.fetch("fvalue") + ) class QueryBuffer(object): - ''' + """ QueryBuffer: a utility class to help managed chunked inserts Currently requires records do not have prerequisites. - ''' + """ + def __init__(self, rel, verbose=False): self._rel = rel self._queue = [] @@ -99,10 +107,10 @@ def add_to_queue(self, recs): self._queue.extend(recs) def flush_insert(self, chunksz=None, **kwargs): - ''' + """ flush the buffer XXX: ignore_extra_fields na, requires .insert() support - ''' + """ qlen = len(self._queue) if not qlen: return @@ -115,17 +123,25 @@ def flush_insert(self, chunksz=None, **kwargs): try: self._rel.insert(entries, **kwargs) except Exception as e: - logger.info('error in flush-insert: {}' - ' - Trying ingestion one by one ({} records)'.format(e, len(entries))) + logger.info( + "error in flush-insert: {}" + " - Trying ingestion one by one ({} records)".format( + e, len(entries) + ) + ) for entry in entries: try: self._rel.insert1(entry, **kwargs) except Exception as e: failed_insertions.append(entry) - logger.debug('error in flush-insert: {}'.format(e)) + logger.debug("error in flush-insert: {}".format(e)) if self.verbose: - logger.log(25, 'Inserted {}/{} raw field tuples'.format( - chunksz - len(failed_insertions), chunksz)) + logger.log( + 25, + "Inserted {}/{} raw field tuples".format( + chunksz - len(failed_insertions), chunksz + ), + ) del entries qlen = len(self._queue) # new queue size for the next loop-iteration @@ -133,9 +149,9 @@ def flush_insert(self, chunksz=None, **kwargs): return failed_insertions def flush_delete(self, chunksz=1, quick=True): - ''' + """ flush the delete - ''' + """ qlen = len(self._queue) if qlen > 0 and qlen % chunksz == 0: @@ -146,7 +162,7 @@ def flush_delete(self, chunksz=1, quick=True): else: (self._rel & self._queue).delete() except Exception as e: - print('error in flush delete: {}, trying deletion one by one'.format(e)) + print("error in flush delete: {}, trying deletion one by one".format(e)) for t in self._queue: try: with dj.config(safemode=False): @@ -156,27 +172,29 @@ def flush_delete(self, chunksz=1, quick=True): (self._rel & t).delete() except Exception as e: - print('error in flush delete: {}'.format(e)) + print("error in flush delete: {}".format(e)) self._queue.clear() return qlen else: return 0 def flush_fetch(self, field, chunksz=1): - ''' + """ flush the fetch - ''' + """ qlen = len(self._queue) if qlen > 0 and qlen % chunksz == 0: try: self.fetched_results.extend((self._rel & self._queue).fetch(field)) except Exception as e: - print('error in flush fetch: {}, trying fetch one by one'.format(e)) + print("error in flush fetch: {}, trying fetch one by one".format(e)) for t in self._queue: try: - self.fetched_results.append((self._rel & self._queue).fetch1(field)) + self.fetched_results.append( + (self._rel & self._queue).fetch1(field) + ) except Exception as e: - print('error in flush fetch: {}'.format(e)) + print("error in flush fetch: {}".format(e)) self._queue.clear() return qlen else: @@ -185,31 +203,38 @@ def flush_fetch(self, field, chunksz=1): def populate_batch(t, chunksz=1000, verbose=True): - keys = (t.key_source - t.proj()).fetch('KEY') + keys = (t.key_source - t.proj()).fetch("KEY") table = QueryBuffer(t) for key in tqdm(keys, position=0): entry = t.create_entry(key) if entry: table.add_to_queue1(entry) - if table.flush_insert( - skip_duplicates=True, - allow_direct_insert=True, chunksz=chunksz) and verbose: - print(f'Inserted {chunksz} {t.__name__} tuples.') + if ( + table.flush_insert( + skip_duplicates=True, allow_direct_insert=True, chunksz=chunksz + ) + and verbose + ): + print(f"Inserted {chunksz} {t.__name__} tuples.") if table.flush_insert(skip_duplicates=True, allow_direct_insert=True) and verbose: - print(f'Inserted all remaining {t.__name__} tuples.') + print(f"Inserted all remaining {t.__name__} tuples.") class ShadowIngestionError(Exception): """Raise when ingestion failed for any shadow table""" + def __init__(self, msg=None): - super().__init__('ShadowIngestionError: \n{}'.format(msg)) + super().__init__("ShadowIngestionError: \n{}".format(msg)) + pass class AlyxKeyError(Exception): """Raise when KeyError encountered when accessing Alyx fields""" + def __init__(self, msg=None): - super().__init__('AlyxKeyError: \n{}'.format(msg)) + super().__init__("AlyxKeyError: \n{}".format(msg)) + pass diff --git a/ibl_pipeline/ingest/acquisition.py b/ibl_pipeline/ingest/acquisition.py index 94e44d88..53028772 100755 --- a/ibl_pipeline/ingest/acquisition.py +++ b/ibl_pipeline/ingest/acquisition.py @@ -1,13 +1,14 @@ -import datajoint as dj import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, subject, action, ShadowIngestionError +import datajoint as dj + from ibl_pipeline import acquisition +from ibl_pipeline.ingest import ShadowIngestionError, action, alyxraw from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_acquisition') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_acquisition") @schema @@ -26,49 +27,51 @@ class Session(dj.Computed): task_protocol=null: varchar(255) session_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & alyxraw.AlyxRaw.Field - & 'model="actions.session"').proj(session_uuid='uuid') + key_source = ( + alyxraw.AlyxRaw & alyxraw.AlyxRaw.Field & 'model="actions.session"' + ).proj(session_uuid="uuid") @staticmethod def create_entry(key): if not (alyxraw.AlyxRaw.Field & key): - raise ShadowIngestionError('No AlyxRaw.Field') + raise ShadowIngestionError("No AlyxRaw.Field") key_session = key.copy() - key['uuid'] = key['session_uuid'] - key_session['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["session_uuid"] + key_session["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_session): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key_session["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key_session["subject_uuid"]}' + ) - session_number = grf(key, 'number') - if session_number != 'None': - key_session['session_number'] = session_number + session_number = grf(key, "number") + if session_number != "None": + key_session["session_number"] = session_number - key_session['session_start_time'] = grf(key, 'start_time') + key_session["session_start_time"] = grf(key, "start_time") - end_time = grf(key, 'end_time') - if end_time != 'None': - key_session['session_end_time'] = end_time + end_time = grf(key, "end_time") + if end_time != "None": + key_session["session_end_time"] = end_time - location_uuid = grf(key, 'location') - if location_uuid != 'None': - key_session['session_lab'], key_session['session_location'] = \ - (reference.LabLocation & - dict(location_uuid=uuid.UUID(location_uuid))).fetch1( - 'lab_name', 'location_name') + location_uuid = grf(key, "location") + if location_uuid != "None": + key_session["session_lab"], key_session["session_location"] = ( + reference.LabLocation & dict(location_uuid=uuid.UUID(location_uuid)) + ).fetch1("lab_name", "location_name") - session_type = grf(key, 'type') - if session_type != 'None': - key_session['session_type'] = session_type + session_type = grf(key, "type") + if session_type != "None": + key_session["session_type"] = session_type - narrative = grf(key, 'narrative') - if narrative != 'None' and narrative != "": - key_session['session_narrative'] = narrative + narrative = grf(key, "narrative") + if narrative != "None" and narrative != "": + key_session["session_narrative"] = narrative - protocol = grf(key, 'task_protocol') - if protocol != 'None': - key_session['task_protocol'] = protocol + protocol = grf(key, "task_protocol") + if protocol != "None": + key_session["task_protocol"] = protocol return key_session diff --git a/ibl_pipeline/ingest/action.py b/ibl_pipeline/ingest/action.py index aba035ed..661b7c28 100755 --- a/ibl_pipeline/ingest/action.py +++ b/ibl_pipeline/ingest/action.py @@ -1,12 +1,13 @@ +import uuid + import datajoint as dj from datajoint.errors import DataJointError -import uuid -from ibl_pipeline.ingest import alyxraw, reference, subject, ShadowIngestionError -from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import ShadowIngestionError, alyxraw +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_action') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_action") @schema @@ -20,16 +21,17 @@ class ProcedureType(dj.Computed): """ key_source = (alyxraw.AlyxRaw & 'model="actions.proceduretype"').proj( - procedure_type_uuid='uuid') + procedure_type_uuid="uuid" + ) def make(self, key): key_pt = key.copy() - key['uuid'] = key['procedure_type_uuid'] - key_pt['procedure_type_name'] = grf(key, 'name') + key["uuid"] = key["procedure_type_uuid"] + key_pt["procedure_type_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_pt['procedure_type_description'] = description + description = grf(key, "description") + if description != "None": + key_pt["procedure_type_description"] = description self.insert1(key_pt) @@ -46,29 +48,31 @@ class Weighing(dj.Computed): weighing_user=null: varchar(255) weighing_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="actions.weighing"').proj( - weigh_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="actions.weighing"').proj(weigh_uuid="uuid") def make(self, key): key_weigh = key.copy() - key['uuid'] = key['weigh_uuid'] - key_weigh['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["weigh_uuid"] + key_weigh["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_weigh): - raise ShadowIngestionError('subject {} is not in the Subject table'.format( - key_weigh['subject_uuid'])) + raise ShadowIngestionError( + "subject {} is not in the Subject table".format( + key_weigh["subject_uuid"] + ) + ) - key_weigh['weighing_time'] = grf(key, 'date_time') + key_weigh["weighing_time"] = grf(key, "date_time") - weight = grf(key, 'weight') - if weight != 'None': - key_weigh['weight'] = float(weight) + weight = grf(key, "weight") + if weight != "None": + key_weigh["weight"] = float(weight) - user_uuid = grf(key, 'user') - if user_uuid != 'None': - key_weigh['weighing_user'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1('user_name') + user_uuid = grf(key, "user") + if user_uuid != "None": + key_weigh["weighing_user"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") self.insert1(key_weigh) @@ -82,13 +86,14 @@ class WaterType(dj.Computed): watertype_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "actions.watertype"').proj( - watertype_uuid='uuid') + watertype_uuid="uuid" + ) def make(self, key): key_type = key.copy() - key['uuid'] = key['watertype_uuid'] + key["uuid"] = key["watertype_uuid"] - key_type['watertype_name'] = grf(key, 'name') + key_type["watertype_name"] = grf(key, "name") self.insert1(key_type) @@ -106,38 +111,40 @@ class WaterAdministration(dj.Computed): adlib: boolean wateradministration_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & alyxraw.AlyxRaw.Field - & 'model = "actions.wateradministration"').proj( - wateradmin_uuid='uuid') + key_source = ( + alyxraw.AlyxRaw + & alyxraw.AlyxRaw.Field + & 'model = "actions.wateradministration"' + ).proj(wateradmin_uuid="uuid") def make(self, key): key_wa = key.copy() - key['uuid'] = key['wateradmin_uuid'] + key["uuid"] = key["wateradmin_uuid"] - key_wa['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key_wa["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_wa): - raise ShadowIngestionError('subject {} is not in the Subject table'.format( - key_wa['subject_uuid'])) + raise ShadowIngestionError( + "subject {} is not in the Subject table".format(key_wa["subject_uuid"]) + ) - key_wa['administration_time'] = grf(key, 'date_time') - wa = grf(key, 'water_administered') - if wa != 'None': - key_wa['water_administered'] = wa + key_wa["administration_time"] = grf(key, "date_time") + wa = grf(key, "water_administered") + if wa != "None": + key_wa["water_administered"] = wa - water_type = grf(key, 'water_type') - key_wa['watertype_name'] = \ - (WaterType & - dict(watertype_uuid=uuid.UUID(water_type))).fetch1( - 'watertype_name') + water_type = grf(key, "water_type") + key_wa["watertype_name"] = ( + WaterType & dict(watertype_uuid=uuid.UUID(water_type)) + ).fetch1("watertype_name") - user_uuid = grf(key, 'user') - if user_uuid != 'None': - key_wa['administration_user'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1('user_name') + user_uuid = grf(key, "user") + if user_uuid != "None": + key_wa["administration_user"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") - key_wa['adlib'] = grf(key, 'adlib') == 'True' + key_wa["adlib"] = grf(key, "adlib") == "True" self.insert1(key_wa) @@ -158,35 +165,36 @@ class WaterRestriction(dj.Computed): waterrestriction_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "actions.waterrestriction"').proj( - restriction_uuid='uuid') + restriction_uuid="uuid" + ) def make(self, key): key_res = key.copy() - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] - key_res['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key_res["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not (subject.Subject & key_res): - raise ShadowIngestionError('subject {} is not in the Subject table'.format( - key_res['subject_uuid'])) + raise ShadowIngestionError( + "subject {} is not in the Subject table".format(key_res["subject_uuid"]) + ) - key_res['restriction_start_time'] = grf(key, 'start_time') + key_res["restriction_start_time"] = grf(key, "start_time") - end_time = grf(key, 'end_time') - if end_time != 'None': - key_res['restriction_end_time'] = end_time + end_time = grf(key, "end_time") + if end_time != "None": + key_res["restriction_end_time"] = end_time - narrative = grf(key, 'narrative') - if narrative and narrative != 'None': - key_res['restriction_narrative'] = narrative + narrative = grf(key, "narrative") + if narrative and narrative != "None": + key_res["restriction_narrative"] = narrative - location_uuid = grf(key, 'location') - if location_uuid != 'None': - key_res['restriction_lab'], key_res['restriction_location'] = \ - (reference.LabLocation & - dict(location_uuid=uuid.UUID(location_uuid))).fetch1( - 'lab_name', 'location_name') + location_uuid = grf(key, "location") + if location_uuid != "None": + key_res["restriction_lab"], key_res["restriction_location"] = ( + reference.LabLocation & dict(location_uuid=uuid.UUID(location_uuid)) + ).fetch1("lab_name", "location_name") - key_res['reference_weight'] = grf(key, 'reference_weight') + key_res["reference_weight"] = grf(key, "reference_weight") self.insert1(key_res) @@ -229,35 +237,38 @@ class Surgery(dj.Computed): surgery_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "actions.surgery"').proj( - surgery_uuid='uuid') + surgery_uuid="uuid" + ) def make(self, key): key_surgery = key.copy() - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] - key_surgery['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key_surgery["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_surgery): - raise ShadowIngestionError('Subject {} is not in the table subject.Subject'.format( - key_surgery['subject_uuid'])) + raise ShadowIngestionError( + "Subject {} is not in the table subject.Subject".format( + key_surgery["subject_uuid"] + ) + ) - key_surgery['surgery_start_time'] = grf(key, 'start_time') + key_surgery["surgery_start_time"] = grf(key, "start_time") - end_time = grf(key, 'end_time') - if end_time != 'None': - key_surgery['surgery_end_time'] = end_time + end_time = grf(key, "end_time") + if end_time != "None": + key_surgery["surgery_end_time"] = end_time - key_surgery['surgery_outcome_type'] = grf(key, 'outcome_type') + key_surgery["surgery_outcome_type"] = grf(key, "outcome_type") - narrative = grf(key, 'narrative') - if narrative != 'None': - key_surgery['surgery_narrative'] = narrative + narrative = grf(key, "narrative") + if narrative != "None": + key_surgery["surgery_narrative"] = narrative - location_uuid = grf(key, 'location') - if location_uuid != 'None': - key_surgery['surgery_lab'], key_surgery['surgery_location'] = \ - (reference.LabLocation & - dict(location_uuid=uuid.UUID(location_uuid))).fetch1( - 'lab_name', 'location_name') + location_uuid = grf(key, "location") + if location_uuid != "None": + key_surgery["surgery_lab"], key_surgery["surgery_location"] = ( + reference.LabLocation & dict(location_uuid=uuid.UUID(location_uuid)) + ).fetch1("lab_name", "location_name") self.insert1(key_surgery) @@ -314,29 +325,32 @@ class OtherAction(dj.Computed): otheraction_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "actions.otheraction"').proj( - other_action_uuid='uuid') + other_action_uuid="uuid" + ) def make(self, key): key_other = key.copy() - key['uuid'] = key['other_action_uuid'] - key_other['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["other_action_uuid"] + key_other["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_other): - raise ShadowIngestionError('subject {} is not in the table subject.Subject'.format( - key_other['subject_uuid'])) + raise ShadowIngestionError( + "subject {} is not in the table subject.Subject".format( + key_other["subject_uuid"] + ) + ) - key_other['other_action_start_time'] = grf(key, 'start_time') + key_other["other_action_start_time"] = grf(key, "start_time") - end_time = grf(key, 'end_time') - if end_time != 'None': - key_other['other_action_end_time'] = end_time + end_time = grf(key, "end_time") + if end_time != "None": + key_other["other_action_end_time"] = end_time - location_uuid = grf(key, 'location') - if location_uuid != 'None': - key_other['other_action_lab'], key_other['other_action_location'] = \ - (reference.LabLocation & - dict(location_uuid=uuid.UUID(location_uuid))).fetch1( - 'lab_name', 'location_name') + location_uuid = grf(key, "location") + if location_uuid != "None": + key_other["other_action_lab"], key_other["other_action_location"] = ( + reference.LabLocation & dict(location_uuid=uuid.UUID(location_uuid)) + ).fetch1("lab_name", "location_name") self.insert1(key_other) @@ -373,16 +387,17 @@ class CullMethod(dj.Computed): cull_method_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="actions.cullmethod"').proj( - cull_method_uuid='uuid') + cull_method_uuid="uuid" + ) def make(self, key): key_cm = key.copy() - key['uuid'] = key['cull_method_uuid'] - key_cm['cull_method'] = grf(key, 'name') + key["uuid"] = key["cull_method_uuid"] + key_cm["cull_method"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_cm['cull_method_description'] = description + description = grf(key, "description") + if description != "None": + key_cm["cull_method_description"] = description self.insert1(key_cm) @@ -397,16 +412,17 @@ class CullReason(dj.Computed): cull_reason_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="actions.cullreason"').proj( - cull_reason_uuid='uuid') + cull_reason_uuid="uuid" + ) def make(self, key): key_cr = key.copy() - key['uuid'] = key['cull_reason_uuid'] - key_cr['cull_reason'] = grf(key, 'name') + key["uuid"] = key["cull_reason_uuid"] + key_cr["cull_reason"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_cr['cull_reason_description'] = description + description = grf(key, "description") + if description != "None": + key_cr["cull_reason_description"] = description self.insert1(key_cr) @@ -424,37 +440,42 @@ class Cull(dj.Computed): cull_description='': varchar(1024) cull_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model = "actions.cull"').proj( - cull_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model = "actions.cull"').proj(cull_uuid="uuid") def make(self, key): key_cull = key.copy() - key['uuid'] = key['cull_uuid'] + key["uuid"] = key["cull_uuid"] - key_cull['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key_cull["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(subject.Subject & key_cull): - raise ShadowIngestionError('Subject {} is not in the table subject.Subject'.format( - key_cull['subject_uuid'])) - - user_uuid = grf(key, 'user') - if user_uuid != 'None': - key_cull['cull_user'] = ( - reference.LabMember & {'user_uuid': user_uuid}).fetch1('user_name') - - cull_method_uuid = grf(key, 'cull_method') - if cull_method_uuid != 'None': - key_cull['cull_method'] = ( - CullMethod & {'cull_method_uuid': cull_method_uuid}).fetch1('cull_method') - - cull_reason_uuid = grf(key, 'cull_reason') - if cull_reason_uuid != 'None': - key_cull['cull_reason'] = ( - CullReason & {'cull_reason_uuid': cull_reason_uuid}).fetch1('cull_reason') - - description = grf(key, 'description') - if description != 'None': - key_cull['cull_description'] = description - - key_cull['cull_date'] = grf(key, 'date') + raise ShadowIngestionError( + "Subject {} is not in the table subject.Subject".format( + key_cull["subject_uuid"] + ) + ) + + user_uuid = grf(key, "user") + if user_uuid != "None": + key_cull["cull_user"] = ( + reference.LabMember & {"user_uuid": user_uuid} + ).fetch1("user_name") + + cull_method_uuid = grf(key, "cull_method") + if cull_method_uuid != "None": + key_cull["cull_method"] = ( + CullMethod & {"cull_method_uuid": cull_method_uuid} + ).fetch1("cull_method") + + cull_reason_uuid = grf(key, "cull_reason") + if cull_reason_uuid != "None": + key_cull["cull_reason"] = ( + CullReason & {"cull_reason_uuid": cull_reason_uuid} + ).fetch1("cull_reason") + + description = grf(key, "description") + if description != "None": + key_cull["cull_description"] = description + + key_cull["cull_date"] = grf(key, "date") self.insert1(key_cull) diff --git a/ibl_pipeline/ingest/alyxraw.py b/ibl_pipeline/ingest/alyxraw.py index c930d87d..495dcf74 100755 --- a/ibl_pipeline/ingest/alyxraw.py +++ b/ibl_pipeline/ingest/alyxraw.py @@ -1,46 +1,44 @@ import datajoint as dj - -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_alyxraw') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_alyxraw") @schema class UpdateAlyxRaw(dj.Manual): - definition = ''' + definition = """ uuid: uuid # pk field (uuid string repr) --- model: varchar(255) # alyx 'model' - ''' + """ class Field(dj.Part): - definition = ''' + definition = """ -> master fname: varchar(255) # field name value_idx: tinyint --- fvalue=null: varchar(40000) # field value in the position of value_idx index (fname) - ''' + """ @schema class AlyxRaw(dj.Manual): - definition = ''' + definition = """ uuid: uuid # pk field (uuid string repr) --- model: varchar(255) # alyx 'model' - ''' + """ class Field(dj.Part): - definition = ''' + definition = """ -> master fname: varchar(255) # field name value_idx: tinyint --- fvalue=null: varchar(40000) # field value in the position of value_idx index (fname) - ''' + """ @schema diff --git a/ibl_pipeline/ingest/common.py b/ibl_pipeline/ingest/common.py index 36a5df9c..9f3fe7e4 100755 --- a/ibl_pipeline/ingest/common.py +++ b/ibl_pipeline/ingest/common.py @@ -1,11 +1,11 @@ -''' +""" Pre-import all ingest modules -''' -from ibl_pipeline.ingest import alyxraw -from ibl_pipeline.ingest import reference as reference_ingest -from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import action as action_ingest +""" from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import action as action_ingest +from ibl_pipeline.ingest import alyxraw from ibl_pipeline.ingest import data as data_ingest from ibl_pipeline.ingest import ephys as ephys_ingest from ibl_pipeline.ingest import histology as histology_ingest +from ibl_pipeline.ingest import reference as reference_ingest +from ibl_pipeline.ingest import subject as subject_ingest diff --git a/ibl_pipeline/ingest/data.py b/ibl_pipeline/ingest/data.py index 4f10b06e..31127a2f 100755 --- a/ibl_pipeline/ingest/data.py +++ b/ibl_pipeline/ingest/data.py @@ -1,12 +1,13 @@ -import datajoint as dj import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, acquisition, ShadowIngestionError +import datajoint as dj + +from ibl_pipeline.ingest import ShadowIngestionError, acquisition, alyxraw from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_data') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_data") @schema @@ -21,30 +22,29 @@ class DataFormat(dj.Computed): format_description=null: varchar(255) dataformat_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="data.dataformat"').proj( - format_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="data.dataformat"').proj(format_uuid="uuid") def make(self, key): key_format = key.copy() - key['uuid'] = key['format_uuid'] + key["uuid"] = key["format_uuid"] - key_format['format_name'] = grf(key, 'name') + key_format["format_name"] = grf(key, "name") - file_extension = grf(key, 'file_extension') - if file_extension != 'None': - key_format['file_extension'] = file_extension + file_extension = grf(key, "file_extension") + if file_extension != "None": + key_format["file_extension"] = file_extension - matlab_loader_function = grf(key, 'matlab_loader_function') - if matlab_loader_function != 'None': - key_format['matlab_loader_function'] = matlab_loader_function + matlab_loader_function = grf(key, "matlab_loader_function") + if matlab_loader_function != "None": + key_format["matlab_loader_function"] = matlab_loader_function - python_loader_function = grf(key, 'python_loader_function') - if python_loader_function != 'None': - key_format['python_loader_function'] = python_loader_function + python_loader_function = grf(key, "python_loader_function") + if python_loader_function != "None": + key_format["python_loader_function"] = python_loader_function - format_description = grf(key, 'description') - if format_description != 'None': - key_format['format_description'] = format_description + format_description = grf(key, "description") + if format_description != "None": + key_format["format_description"] = format_description self.insert1(key_format) @@ -58,12 +58,13 @@ class DataRepositoryType(dj.Computed): datarepositorytype_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="data.datarepositorytype"').proj( - repotype_uuid='uuid') + repotype_uuid="uuid" + ) def make(self, key): key_repotype = key.copy() - key['uuid'] = key['repotype_uuid'] - key_repotype['repotype_name'] = grf(key, 'name') + key["uuid"] = key["repotype_uuid"] + key_repotype["repotype_name"] = grf(key, "name") self.insert1(key_repotype) @@ -83,30 +84,30 @@ class DataRepository(dj.Computed): datarepository_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="data.datarepository"').proj( - repo_uuid='uuid') + repo_uuid="uuid" + ) def make(self, key): key_repo = key.copy() - key['uuid'] = key['repo_uuid'] + key["uuid"] = key["repo_uuid"] - key_repo['repo_name'] = grf(key, 'name') + key_repo["repo_name"] = grf(key, "name") - repotype = grf(key, 'repository_type') - key_repo['repotype_name'] = \ - (DataRepositoryType & - dict(repotype_uuid=uuid.UUID(repotype))).fetch1( - 'repotype_name') - key_repo['repo_timezone'] = grf(key, 'timezone') - key_repo['repo_hostname'] = grf(key, 'hostname') - key_repo['globus_endpoint_id'] = grf(key, 'globus_endpoint_id') - key_repo['globus_path'] = grf(key, 'globus_path') + repotype = grf(key, "repository_type") + key_repo["repotype_name"] = ( + DataRepositoryType & dict(repotype_uuid=uuid.UUID(repotype)) + ).fetch1("repotype_name") + key_repo["repo_timezone"] = grf(key, "timezone") + key_repo["repo_hostname"] = grf(key, "hostname") + key_repo["globus_endpoint_id"] = grf(key, "globus_endpoint_id") + key_repo["globus_path"] = grf(key, "globus_path") - is_personal = grf(key, 'globus_is_personal') - key_repo['globus_is_personal'] = True if is_personal else False + is_personal = grf(key, "globus_is_personal") + key_repo["globus_is_personal"] = True if is_personal else False - url = grf(key, 'data_url') - if url != 'None': - key_repo['data_url'] = url + url = grf(key, "data_url") + if url != "None": + key_repo["data_url"] = url self.insert1(key_repo) @@ -133,22 +134,23 @@ class DataSetType(dj.Computed): datasettype_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="data.datasettype"').proj( - dataset_type_uuid='uuid') + dataset_type_uuid="uuid" + ) def make(self, key): key_dst = key.copy() - key['uuid'] = key['dataset_type_uuid'] + key["uuid"] = key["dataset_type_uuid"] - key_dst['dataset_type_name'] = grf(key, 'name') + key_dst["dataset_type_name"] = grf(key, "name") - user_uuid = grf(key, 'created_by') - if user_uuid != 'None': - key_dst['dataset_type_created_by'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1('user_name') + user_uuid = grf(key, "created_by") + if user_uuid != "None": + key_dst["dataset_type_created_by"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") - key_dst['filename_pattern'] = grf(key, 'filename_pattern') - key_dst['dataset_type_description'] = grf(key, 'description') + key_dst["filename_pattern"] = grf(key, "filename_pattern") + key_dst["dataset_type_description"] = grf(key, "description") self.insert1(key_dst) @@ -170,8 +172,7 @@ class DataSet(dj.Computed): md5=null: varchar(255) file_size=null: float """ - key_source = (alyxraw.AlyxRaw & 'model="data.dataset"').proj( - dataset_uuid="uuid") + key_source = (alyxraw.AlyxRaw & 'model="data.dataset"').proj(dataset_uuid="uuid") def make(self, key): self.insert1(self.create_entry(key)) @@ -183,55 +184,53 @@ def create_entry(key): to be inserted into this DataSet table """ key_ds = key.copy() - key['uuid'] = key['dataset_uuid'] + key["uuid"] = key["dataset_uuid"] - session = grf(key, 'session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - raise ShadowIngestionError('Non existing session: {}'.format(session)) + session = grf(key, "session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + raise ShadowIngestionError("Non existing session: {}".format(session)) - key_ds['subject_uuid'], key_ds['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'subject_uuid', 'session_start_time') + key_ds["subject_uuid"], key_ds["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("subject_uuid", "session_start_time") - key_ds['dataset_name'] = grf(key, 'name') + key_ds["dataset_name"] = grf(key, "name") - dt = grf(key, 'dataset_type') - key_ds['dataset_type_name'] = \ - (DataSetType & dict(dataset_type_uuid=uuid.UUID(dt))).fetch1( - 'dataset_type_name') + dt = grf(key, "dataset_type") + key_ds["dataset_type_name"] = ( + DataSetType & dict(dataset_type_uuid=uuid.UUID(dt)) + ).fetch1("dataset_type_name") - user = grf(key, 'created_by') + user = grf(key, "created_by") - if user != 'None': + if user != "None": try: - key_ds['dataset_created_by'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_ds["dataset_created_by"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") except: print(user) else: - key_ds['dataset_created_by'] = None + key_ds["dataset_created_by"] = None - format = grf(key, 'data_format') - key_ds['format_name'] = \ - (DataFormat & dict(format_uuid=uuid.UUID(format))).fetch1( - 'format_name') + format = grf(key, "data_format") + key_ds["format_name"] = ( + DataFormat & dict(format_uuid=uuid.UUID(format)) + ).fetch1("format_name") - key_ds['created_datetime'] = grf(key, 'created_datetime') + key_ds["created_datetime"] = grf(key, "created_datetime") - software = grf(key, 'generating_software') - key_ds['generating_software'] = software if software != 'None' else None + software = grf(key, "generating_software") + key_ds["generating_software"] = software if software != "None" else None - directory = grf(key, 'provenance_directory') - key_ds['provenance_directory'] = directory if directory != 'None' else None + directory = grf(key, "provenance_directory") + key_ds["provenance_directory"] = directory if directory != "None" else None - md5 = grf(key, 'md5') - key_ds['md5'] = md5 if md5 != 'None' else None + md5 = grf(key, "md5") + key_ds["md5"] = md5 if md5 != "None" else None - file_size = grf(key, 'file_size') - key_ds['file_size'] = file_size if file_size != 'None' else None + file_size = grf(key, "file_size") + key_ds["file_size"] = file_size if file_size != "None" else None return key_ds @@ -241,11 +240,17 @@ def create_session_entries(cls, session_uuid): For a session_uuid, create a list of dictionaries representing all entries for the given session to be inserted into the DataSet table """ - alyxraw_dataset_query = (alyxraw.AlyxRaw * alyxraw.AlyxRaw.Field - & 'model = "data.dataset"' - & 'fname = "session"' & {'fvalue': session_uuid}) - alyxraw_dataset_keys = (alyxraw.AlyxRaw & alyxraw_dataset_query.proj()).proj( - dataset_uuid="uuid").fetch('KEY') + alyxraw_dataset_query = ( + alyxraw.AlyxRaw * alyxraw.AlyxRaw.Field + & 'model = "data.dataset"' + & 'fname = "session"' + & {"fvalue": session_uuid} + ) + alyxraw_dataset_keys = ( + (alyxraw.AlyxRaw & alyxraw_dataset_query.proj()) + .proj(dataset_uuid="uuid") + .fetch("KEY") + ) return [cls.create_entry(key) for key in alyxraw_dataset_keys] @@ -262,14 +267,19 @@ class FileRecord(dj.Computed): relative_path: varchar(255) """ records = alyxraw.AlyxRaw & 'model="data.filerecord"' - repos = (DataRepository & 'repo_name LIKE "flatiron%"').fetch( - 'repo_uuid') - records_flatiron = alyxraw.AlyxRaw.Field & records & \ - 'fname = "data_repository"' & [{'fvalue': str(repo)} for repo in repos] - record_exists = alyxraw.AlyxRaw.Field & records & \ - 'fname = "exists"' & 'fvalue="True"' + repos = (DataRepository & 'repo_name LIKE "flatiron%"').fetch("repo_uuid") + records_flatiron = ( + alyxraw.AlyxRaw.Field + & records + & 'fname = "data_repository"' + & [{"fvalue": str(repo)} for repo in repos] + ) + record_exists = ( + alyxraw.AlyxRaw.Field & records & 'fname = "exists"' & 'fvalue="True"' + ) key_source = (alyxraw.AlyxRaw & record_exists & records_flatiron).proj( - record_uuid='uuid') + record_uuid="uuid" + ) def make(self, key): self.insert1(self.create_entry(key)) @@ -277,24 +287,25 @@ def make(self, key): @staticmethod def create_entry(key): key_fr = key.copy() - key['uuid'] = key['record_uuid'] - key_fr['exists'] = True + key["uuid"] = key["record_uuid"] + key_fr["exists"] = True - dataset = grf(key, 'dataset') + dataset = grf(key, "dataset") if not len(DataSet & dict(dataset_uuid=uuid.UUID(dataset))): - raise ShadowIngestionError('Dataset is not in the table data.DataSet: {}'.format(str(key['uuid']))) + raise ShadowIngestionError( + "Dataset is not in the table data.DataSet: {}".format(str(key["uuid"])) + ) - key_fr['subject_uuid'], key_fr['session_start_time'], \ - key_fr['dataset_name'] = \ - (DataSet & dict(dataset_uuid=uuid.UUID(dataset))).fetch1( - 'subject_uuid', 'session_start_time', 'dataset_name') + key_fr["subject_uuid"], key_fr["session_start_time"], key_fr["dataset_name"] = ( + DataSet & dict(dataset_uuid=uuid.UUID(dataset)) + ).fetch1("subject_uuid", "session_start_time", "dataset_name") - repo = grf(key, 'data_repository') - key_fr['repo_name'] = \ - (DataRepository & dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + repo = grf(key, "data_repository") + key_fr["repo_name"] = (DataRepository & dict(repo_uuid=uuid.UUID(repo))).fetch1( + "repo_name" + ) - key_fr['relative_path'] = grf(key, 'relative_path') + key_fr["relative_path"] = grf(key, "relative_path") return key_fr @classmethod @@ -303,15 +314,22 @@ def create_session_entries(cls, session_uuid): For a session_uuid, create a list of dictionaries representing all entries for the given session to be inserted into the FileRecord table """ - subject_uuid, session_start_time = (acquisition.Session - & {'session_uuid': session_uuid}).fetch1( - 'subject_uuid', 'session_start_time') - dataset_uuids = (DataSet & {'subject_uuid': subject_uuid, - 'session_start_time': session_start_time}).fetch('dataset_uuid') - session_records = (alyxraw.AlyxRaw * alyxraw.AlyxRaw.Field & 'model="data.filerecord"' - & 'fname = "dataset"' & [{'fvalue': str(u)} for u in dataset_uuids]) - - alyxraw_filerecord_keys = (cls.key_source - & session_records.proj(record_uuid='uuid')).fetch('KEY') + subject_uuid, session_start_time = ( + acquisition.Session & {"session_uuid": session_uuid} + ).fetch1("subject_uuid", "session_start_time") + dataset_uuids = ( + DataSet + & {"subject_uuid": subject_uuid, "session_start_time": session_start_time} + ).fetch("dataset_uuid") + session_records = ( + alyxraw.AlyxRaw * alyxraw.AlyxRaw.Field + & 'model="data.filerecord"' + & 'fname = "dataset"' + & [{"fvalue": str(u)} for u in dataset_uuids] + ) + + alyxraw_filerecord_keys = ( + cls.key_source & session_records.proj(record_uuid="uuid") + ).fetch("KEY") return [cls.create_entry(key) for key in alyxraw_filerecord_keys] diff --git a/ibl_pipeline/ingest/ephys.py b/ibl_pipeline/ingest/ephys.py index da3abf91..60940fa4 100755 --- a/ibl_pipeline/ingest/ephys.py +++ b/ibl_pipeline/ingest/ephys.py @@ -1,16 +1,16 @@ -import datajoint as dj -from datajoint.errors import DataJointError import json -import uuid import re +import uuid -from ibl_pipeline.ingest import alyxraw, reference, acquisition, ShadowIngestionError -from ibl_pipeline.ingest import get_raw_field as grf +import datajoint as dj +from datajoint.errors import DataJointError from ibl_pipeline import acquisition as acquisition_real +from ibl_pipeline.ingest import ShadowIngestionError, acquisition, alyxraw +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_ephys') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_ephys") @schema @@ -25,20 +25,22 @@ class ProbeModel(dj.Imported): probe_model_ts=CURRENT_TIMESTAMP : timestamp """ key_source = (alyxraw.AlyxRaw & 'model="experiments.probemodel"').proj( - probe_uuid='uuid') + probe_uuid="uuid" + ) def make(self, key): key_probe = key.copy() - key['uuid'] = key['probe_uuid'] + key["uuid"] = key["probe_uuid"] key_probe.update( - probe_name=grf(key, 'name'), - probe_model=grf(key, 'probe_model'), - probe_manufacturer=grf(key, 'probe_manufacturer')) + probe_name=grf(key, "name"), + probe_model=grf(key, "probe_model"), + probe_manufacturer=grf(key, "probe_manufacturer"), + ) - probe_description = grf(key, 'description') - if probe_description != 'None': - key_probe['probe_description'] = probe_description + probe_description = grf(key, "description") + if probe_description != "None": + key_probe["probe_description"] = probe_description self.insert1(key_probe) @@ -59,49 +61,44 @@ class ProbeInsertion(dj.Imported): probe_insertion_ts=CURRENT_TIMESTAMP : timestamp """ key_source = (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"').proj( - probe_insertion_uuid='uuid') + probe_insertion_uuid="uuid" + ) def make(self, key): key_pi = key.copy() - key['uuid'] = key['probe_insertion_uuid'] + key["uuid"] = key["probe_insertion_uuid"] - session_uuid = grf(key, 'session') + session_uuid = grf(key, "session") session_key = dict(session_uuid=session_uuid) - if (acquisition_real.Session & session_key): - subject_uuid, session_start_time = \ - (acquisition_real.Session & session_key).fetch1( - 'subject_uuid', 'session_start_time') - elif (acquisition.Session & session_key): - subject_uuid, session_start_time = \ - (acquisition.Session & session_key).fetch1( - 'subject_uuid', 'session_start_time') + if acquisition_real.Session & session_key: + subject_uuid, session_start_time = ( + acquisition_real.Session & session_key + ).fetch1("subject_uuid", "session_start_time") + elif acquisition.Session & session_key: + subject_uuid, session_start_time = ( + acquisition.Session & session_key + ).fetch1("subject_uuid", "session_start_time") else: - raise ShadowIngestionError('Non existing session: {}'.format(session_uuid)) - - key_pi.update( - subject_uuid=subject_uuid, - session_start_time=session_start_time) - - probe_uuid = grf(key, 'model') - if probe_uuid != 'None': - key_pi['probe_name'] = \ - (ProbeModel & dict(probe_uuid=probe_uuid)).fetch1( - 'probe_name') - - key_pi['probe_label'] = grf(key, 'name') - - if re.search('[Pp]robe.?0([0-3])', - key_pi['probe_label']): - key_pi['probe_idx'] = \ - re.search('[Pp]robe.?0([0-3])', - key_pi['probe_label']).group(1) - elif re.search('g([0-3])', - key_pi['probe_label']): - key_pi['probe_idx'] = \ - re.search('g([0-3])', - key_pi['probe_label']).group(1) + raise ShadowIngestionError("Non existing session: {}".format(session_uuid)) + + key_pi.update(subject_uuid=subject_uuid, session_start_time=session_start_time) + + probe_uuid = grf(key, "model") + if probe_uuid != "None": + key_pi["probe_name"] = (ProbeModel & dict(probe_uuid=probe_uuid)).fetch1( + "probe_name" + ) + + key_pi["probe_label"] = grf(key, "name") + + if re.search("[Pp]robe.?0([0-3])", key_pi["probe_label"]): + key_pi["probe_idx"] = re.search( + "[Pp]robe.?0([0-3])", key_pi["probe_label"] + ).group(1) + elif re.search("g([0-3])", key_pi["probe_label"]): + key_pi["probe_idx"] = re.search("g([0-3])", key_pi["probe_label"]).group(1) else: - key_pi['probe_idx'] = probe_mapping[key_pi['probe_label']] + key_pi["probe_idx"] = probe_mapping[key_pi["probe_label"]] self.insert1(key_pi) diff --git a/ibl_pipeline/ingest/histology.py b/ibl_pipeline/ingest/histology.py index baf0e357..add73277 100755 --- a/ibl_pipeline/ingest/histology.py +++ b/ibl_pipeline/ingest/histology.py @@ -1,18 +1,18 @@ -import datajoint as dj -from datajoint.errors import DataJointError import json -import uuid -import re import pdb +import re +import uuid -from ibl_pipeline.ingest import alyxraw, reference, acquisition, ephys, ShadowIngestionError -from ibl_pipeline.ingest import get_raw_field as grf +import datajoint as dj +from datajoint.errors import DataJointError from ibl_pipeline import acquisition as acquisition_real from ibl_pipeline import ephys as ephys_real +from ibl_pipeline.ingest import ShadowIngestionError, acquisition, alyxraw, ephys +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_histology') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_histology") # Temporary probe trajectories and channel brain location based on methods @@ -24,10 +24,10 @@ class Provenance(dj.Lookup): provenance_description : varchar(128) # type of trajectory """ contents = [ - (70, 'Ephys aligned histology track'), - (50, 'Histology track'), - (30, 'Micro-manipulator'), - (10, 'Planned'), + (70, "Ephys aligned histology track"), + (50, "Histology track"), + (30, "Micro-manipulator"), + (10, "Planned"), ] @@ -51,51 +51,54 @@ class ProbeTrajectoryTemp(dj.Imported): trajectory_ts: datetime """ - key_source = ((alyxraw.AlyxRaw - alyxraw.ProblematicData) & 'model="experiments.trajectoryestimate"').proj( - probe_trajectory_uuid='uuid') + key_source = ( + (alyxraw.AlyxRaw - alyxraw.ProblematicData) + & 'model="experiments.trajectoryestimate"' + ).proj(probe_trajectory_uuid="uuid") def make(self, key): key_traj = key.copy() - key['uuid'] = key_traj['probe_trajectory_uuid'] + key["uuid"] = key_traj["probe_trajectory_uuid"] - probe_insertion_uuid = grf(key, 'probe_insertion') + probe_insertion_uuid = grf(key, "probe_insertion") probe_insertion_key = dict(probe_insertion_uuid=probe_insertion_uuid) - if (ephys_real.ProbeInsertion & probe_insertion_key): - subject_uuid, session_start_time, probe_idx = \ - (ephys_real.ProbeInsertion & probe_insertion_key).fetch1( - 'subject_uuid', 'session_start_time', 'probe_idx') - elif (ephys.ProbeInsertion & probe_insertion_key): - subject_uuid, session_start_time, probe_idx = \ - (ephys.ProbeInsertion & probe_insertion_key).fetch1( - 'subject_uuid', 'session_start_time', 'probe_idx') + if ephys_real.ProbeInsertion & probe_insertion_key: + subject_uuid, session_start_time, probe_idx = ( + ephys_real.ProbeInsertion & probe_insertion_key + ).fetch1("subject_uuid", "session_start_time", "probe_idx") + elif ephys.ProbeInsertion & probe_insertion_key: + subject_uuid, session_start_time, probe_idx = ( + ephys.ProbeInsertion & probe_insertion_key + ).fetch1("subject_uuid", "session_start_time", "probe_idx") else: - raise ShadowIngestionError('Non existing probe insertion: {}'.format(probe_insertion_uuid)) + raise ShadowIngestionError( + "Non existing probe insertion: {}".format(probe_insertion_uuid) + ) key_traj.update( - x=grf(key, 'x'), - y=grf(key, 'y'), - z=grf(key, 'z'), - depth=grf(key, 'depth'), - theta=grf(key, 'theta'), - phi=grf(key, 'phi'), + x=grf(key, "x"), + y=grf(key, "y"), + z=grf(key, "z"), + depth=grf(key, "depth"), + theta=grf(key, "theta"), + phi=grf(key, "phi"), subject_uuid=subject_uuid, session_start_time=session_start_time, probe_idx=probe_idx, - provenance=grf(key, 'provenance'), - trajectory_ts=grf(key, 'datetime') + provenance=grf(key, "provenance"), + trajectory_ts=grf(key, "datetime"), ) - roll = grf(key, 'roll') - if roll != 'None': + roll = grf(key, "roll") + if roll != "None": key_traj.update(roll=roll) - coord_uuid = grf(key, 'coordinate_system') - if coord_uuid != 'None': - key['coordinate_system_uuid'] = \ - (reference.CoordinateSystem & - {'coordinate_system_uuid': coord_uuid}).fetch1( - 'coordinate_system_name') + coord_uuid = grf(key, "coordinate_system") + if coord_uuid != "None": + key["coordinate_system_uuid"] = ( + reference.CoordinateSystem & {"coordinate_system_uuid": coord_uuid} + ).fetch1("coordinate_system_name") self.insert1(key_traj) @@ -118,39 +121,41 @@ class ChannelBrainLocationTemp(dj.Imported): acronym : varchar(32) """ key_source = (alyxraw.AlyxRaw & 'model="experiments.channel"').proj( - channel_brain_location_uuid='uuid') + channel_brain_location_uuid="uuid" + ) @classmethod def create_entry(cls, key): key_brain_loc = key.copy() - key['uuid'] = key_brain_loc['channel_brain_location_uuid'] - - probe_trajectory_uuid = grf(key, 'trajectory_estimate') - if (ProbeTrajectoryTemp & dict(probe_trajectory_uuid=probe_trajectory_uuid)): - subject_uuid, session_start_time, probe_idx, provenance = \ - (ProbeTrajectoryTemp & dict(probe_trajectory_uuid=probe_trajectory_uuid)).fetch1( - 'subject_uuid', 'session_start_time', 'probe_idx', - 'provenance') + key["uuid"] = key_brain_loc["channel_brain_location_uuid"] + + probe_trajectory_uuid = grf(key, "trajectory_estimate") + if ProbeTrajectoryTemp & dict(probe_trajectory_uuid=probe_trajectory_uuid): + subject_uuid, session_start_time, probe_idx, provenance = ( + ProbeTrajectoryTemp & dict(probe_trajectory_uuid=probe_trajectory_uuid) + ).fetch1("subject_uuid", "session_start_time", "probe_idx", "provenance") else: - raise ShadowIngestionError('Non existing trajectory: {}'.format(probe_trajectory_uuid)) + raise ShadowIngestionError( + "Non existing trajectory: {}".format(probe_trajectory_uuid) + ) - brain_region_pk = grf(key, 'brain_region') - ontology, acronym = (reference.BrainRegion & - dict(brain_region_pk=brain_region_pk)).fetch1( - 'ontology', 'acronym') + brain_region_pk = grf(key, "brain_region") + ontology, acronym = ( + reference.BrainRegion & dict(brain_region_pk=brain_region_pk) + ).fetch1("ontology", "acronym") key_brain_loc.update( - channel_x=grf(key, 'x'), - channel_y=grf(key, 'y'), - channel_z=grf(key, 'z'), - channel_axial=grf(key, 'axial'), - channel_lateral=grf(key, 'lateral'), + channel_x=grf(key, "x"), + channel_y=grf(key, "y"), + channel_z=grf(key, "z"), + channel_axial=grf(key, "axial"), + channel_lateral=grf(key, "lateral"), subject_uuid=subject_uuid, session_start_time=session_start_time, probe_idx=probe_idx, provenance=provenance, ontology=ontology, - acronym=acronym + acronym=acronym, ) return key_brain_loc diff --git a/ibl_pipeline/ingest/ingest_utils.py b/ibl_pipeline/ingest/ingest_utils.py index 464946ad..a1eb0adb 100755 --- a/ibl_pipeline/ingest/ingest_utils.py +++ b/ibl_pipeline/ingest/ingest_utils.py @@ -1,10 +1,10 @@ -''' +""" Utility functions for ingestion -''' -import traceback -import json +""" import gzip +import json import time +import traceback def copy_table(target_schema, src_schema, table_name, fresh=False, **kwargs): @@ -15,14 +15,14 @@ def copy_table(target_schema, src_schema, table_name, fresh=False, **kwargs): target_table.insert(src_table, **kwargs) else: try: - target_table.insert(src_table - target_table.proj(), - skip_duplicates=True, **kwargs) + target_table.insert( + src_table - target_table.proj(), skip_duplicates=True, **kwargs + ) except Exception: for t in (src_table - target_table.proj()).fetch(as_dict=True): try: - if table_name == 'DataSet' and \ - not len(t['dataset_created_by']): - t.pop('dataset_created_by') + if table_name == "DataSet" and not len(t["dataset_created_by"]): + t.pop("dataset_created_by") target_table.insert1(t, skip_duplicates=True, **kwargs) except Exception: print("Error when inserting {}".format(t)) diff --git a/ibl_pipeline/ingest/job.py b/ibl_pipeline/ingest/job.py index 6c9b3587..d5075fdf 100644 --- a/ibl_pipeline/ingest/job.py +++ b/ibl_pipeline/ingest/job.py @@ -99,9 +99,12 @@ def insert_task_status(cls, job_key, task, start, end): import actions as alyx_actions +import data as alyx_data import experiments as alyx_experiments import misc as alyx_misc import subjects as alyx_subjects +from tqdm import tqdm + from ibl_pipeline import ( acquisition, action, @@ -128,9 +131,6 @@ def insert_task_status(cls, job_key, task, start, end): ingest_membership, ingest_real, ) -from tqdm import tqdm - -import data as alyx_data logger = logging.getLogger(__name__) _backtrack_days = int(os.getenv("BACKTRACK_DAYS", 10)) diff --git a/ibl_pipeline/ingest/qc.py b/ibl_pipeline/ingest/qc.py index 1d3b4a71..489d89fc 100644 --- a/ibl_pipeline/ingest/qc.py +++ b/ibl_pipeline/ingest/qc.py @@ -1,37 +1,40 @@ -import datajoint as dj import json -from ibl_pipeline.utils import str_to_dict -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, ephys +import datajoint as dj +from tqdm import tqdm + from ibl_pipeline import acquisition as acquisition_real from ibl_pipeline import ephys as ephys_real from ibl_pipeline import qc as qc_real +from ibl_pipeline.ingest import acquisition, action, alyxraw, ephys from ibl_pipeline.ingest import get_raw_field as grf -from tqdm import tqdm +from ibl_pipeline.ingest import reference, subject +from ibl_pipeline.utils import str_to_dict -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_qc') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_qc") # This function automatically get qc types from alyx -def get_extended_qc_fields_from_alyx(level='session'): - if level == 'session': - key_source = dj.U('uuid') & \ - (alyxraw.AlyxRaw.Field & - (alyxraw.AlyxRaw & 'model="actions.session"') & - 'fname="extended_qc"' & - 'fvalue!="None"') - - fname = 'extended_qc' - - elif level == 'probe': - - key_source = dj.U('uuid') & \ - (alyxraw.AlyxRaw.Field & - (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"') & - 'fname="json"' & - 'fvalue like "%extended_qc%"') - fname = 'json' +def get_extended_qc_fields_from_alyx(level="session"): + if level == "session": + key_source = dj.U("uuid") & ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="actions.session"') + & 'fname="extended_qc"' + & 'fvalue!="None"' + ) + + fname = "extended_qc" + + elif level == "probe": + + key_source = dj.U("uuid") & ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"') + & 'fname="json"' + & 'fvalue like "%extended_qc%"' + ) + fname = "json" else: raise ValueError('Incorrect level argument, has to be "session" or "probe"') @@ -40,16 +43,16 @@ def get_extended_qc_fields_from_alyx(level='session'): for key in tqdm(key_source): qc_extended = str_to_dict(grf(key, fname)) - if qc_extended != 'None': - if level == 'probe' and 'extended_qc' in qc_extended: - qc_extended = qc_extended['extended_qc'] + if qc_extended != "None": + if level == "probe" and "extended_qc" in qc_extended: + qc_extended = qc_extended["extended_qc"] eqc_fields += list(qc_extended.keys()) return set(eqc_fields) -qc_choices = qc_real.QCChoice.fetch(format='frame') +qc_choices = qc_real.QCChoice.fetch(format="frame") @schema @@ -58,11 +61,12 @@ class SessionQCIngest(dj.Computed): -> alyxraw.AlyxRaw.proj(session_uuid='uuid') """ - key_source = dj.U('session_uuid') & \ - (alyxraw.AlyxRaw.Field & - (alyxraw.AlyxRaw & 'model="actions.session"') & - 'fname="qc"' & - 'fvalue in ("10", "30", "40", "50")').proj(session_uuid='uuid') + key_source = dj.U("session_uuid") & ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="actions.session"') + & 'fname="qc"' + & 'fvalue in ("10", "30", "40", "50")' + ).proj(session_uuid="uuid") def make(self, key): """ @@ -74,20 +78,19 @@ def make(self, key): self.insert1(key) - key['uuid'] = key['session_uuid'] - qc_alyx = grf(key, 'qc') - qc_extended_alyx = str_to_dict(grf(key, 'extended_qc')) + key["uuid"] = key["session_uuid"] + qc_alyx = grf(key, "qc") + qc_extended_alyx = str_to_dict(grf(key, "extended_qc")) if len(acquisition_real.Session & key) == 1: - session_key = (acquisition_real.Session & key).fetch1('KEY') + session_key = (acquisition_real.Session & key).fetch1("KEY") else: return qc_real.SessionQC.insert1( - dict(**session_key, session_qc=int(qc_alyx)), - skip_duplicates=True + dict(**session_key, session_qc=int(qc_alyx)), skip_duplicates=True ) - qc_types = (qc_real.QCType & 'qc_level="session"').fetch('qc_type') + qc_types = (qc_real.QCType & 'qc_level="session"').fetch("qc_type") # loop through all qc types on the session level and check whether it's in the current entry for qc_type in qc_types: @@ -99,39 +102,38 @@ def make(self, key): # for behavior, the field is 0 for "NOT SET", 1 for PASS if extended_qc_label == 0: continue - elif extended_qc_label == 1 and qc_type == 'behavior': + elif extended_qc_label == 1 and qc_type == "behavior": extended_qc = 10 else: extended_qc = qc_choices[ - qc_choices['qc_label'] == extended_qc_label].index[0] + qc_choices["qc_label"] == extended_qc_label + ].index[0] qc_real.SessionExtendedQC.insert1( - dict(**session_key, - qc_type=qc_type, - session_extended_qc=extended_qc), - skip_duplicates=True + dict( + **session_key, qc_type=qc_type, session_extended_qc=extended_qc + ), + skip_duplicates=True, ) # get the entries for the part table SessionExtendedQC.Field for k, v in qc_extended_alyx.items(): # for the session qc field, it has the format of '_{qc_type}', e.g. '_task_trial_length' - if f'_{qc_type}' in k: + if f"_{qc_type}" in k: qc_field = dict( - **session_key, - qc_type=qc_type, - session_qc_fname=k) + **session_key, qc_type=qc_type, session_qc_fname=k + ) if type(v) == float: - qc_fvalue_name = 'session_qc_fvalue_float' + qc_fvalue_name = "session_qc_fvalue_float" elif v == "None": continue elif type(v) == str: - qc_fvalue_name = 'session_qc_fvalue_varchar' + qc_fvalue_name = "session_qc_fvalue_varchar" else: - qc_fvalue_name = 'session_qc_fvalue_blob' + qc_fvalue_name = "session_qc_fvalue_blob" qc_real.SessionExtendedQC.Field.insert1( - {**qc_field, - qc_fvalue_name: v}, - skip_duplicates=True) + {**qc_field, qc_fvalue_name: v}, skip_duplicates=True + ) @schema @@ -144,11 +146,12 @@ class ProbeInsertionQCIngest(dj.Computed): probe_idx : tinyint """ - key_source = dj.U('probe_insertion_uuid') & \ - (alyxraw.AlyxRaw.Field & - (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"') & - 'fname="json"' & - 'fvalue like "%qc%"').proj(probe_insertion_uuid='uuid') + key_source = dj.U("probe_insertion_uuid") & ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"') + & 'fname="json"' + & 'fvalue like "%qc%"' + ).proj(probe_insertion_uuid="uuid") def make(self, key): """ @@ -158,24 +161,24 @@ def make(self, key): + ProbeInsertionExtendedQC.Field """ - key['uuid'] = key['probe_insertion_uuid'] - json_field = str_to_dict(grf(key, 'json')) + key["uuid"] = key["probe_insertion_uuid"] + json_field = str_to_dict(grf(key, "json")) if len(ephys_real.ProbeInsertion & key) == 1: - probe_insertion_key = (ephys_real.ProbeInsertion & key).fetch1('KEY') + probe_insertion_key = (ephys_real.ProbeInsertion & key).fetch1("KEY") else: return - if 'qc' in json_field: - qc = (qc_real.QCChoice & {'qc_label': json_field['qc']}).fetch1('qc') + if "qc" in json_field: + qc = (qc_real.QCChoice & {"qc_label": json_field["qc"]}).fetch1("qc") # skip ingestion if qc is "NOT SET" # turn on skip_duplicates because there are chances to delete this table and reingest everything if qc != 0: qc_real.ProbeInsertionQC.insert1( - dict(**probe_insertion_key, insertion_qc=qc), - skip_duplicates=True) + dict(**probe_insertion_key, insertion_qc=qc), skip_duplicates=True + ) - qc_types = (qc_real.QCType & 'qc_level="probe_insertion"').fetch('qc_type') + qc_types = (qc_real.QCType & 'qc_level="probe_insertion"').fetch("qc_type") # example extended_qc field in alyx: # "extended_qc": { @@ -186,45 +189,59 @@ def make(self, key): # "alignment_resolved": false # } - if 'extended_qc' in json_field: - extended_qc_alyx = json_field['extended_qc'] + if "extended_qc" in json_field: + extended_qc_alyx = json_field["extended_qc"] for qc_type in qc_types: if qc_type in extended_qc_alyx: # Only ingest when tracing tracing exists - if qc_type == 'tracing_exists' and extended_qc_alyx[qc_type]: + if qc_type == "tracing_exists" and extended_qc_alyx[qc_type]: # if tracing exists, then set insertion_extended_qc to 10 (PASS) qc_real.ProbeInsertionExtendedQC.insert1( - dict(**probe_insertion_key, qc_type=qc_type, - insertion_extended_qc=10), - skip_duplicates=True + dict( + **probe_insertion_key, + qc_type=qc_type, + insertion_extended_qc=10, + ), + skip_duplicates=True, ) # Only ingest when alignment is resolved - if qc_type == 'alignment_resolved' and extended_qc_alyx[qc_type]: + if qc_type == "alignment_resolved" and extended_qc_alyx[qc_type]: # only ingest into current table if alignment is resolved - self.insert1(dict(**probe_insertion_key, probe_insertion_uuid=key['uuid'])) + self.insert1( + dict( + **probe_insertion_key, probe_insertion_uuid=key["uuid"] + ) + ) qc_real.ProbeInsertionExtendedQC.insert1( - dict(**probe_insertion_key, qc_type=qc_type, - insertion_extended_qc=10), - skip_duplicates=True + dict( + **probe_insertion_key, + qc_type=qc_type, + insertion_extended_qc=10, + ), + skip_duplicates=True, ) # check for alignment field - for k, v in json_field['extended_qc'].items(): - if 'alignment' in k and k != 'alignment_resolved': + for k, v in json_field["extended_qc"].items(): + if "alignment" in k and k != "alignment_resolved": if type(v) == float: - qc_fvalue_name = 'insertion_qc_fvalue_float' + qc_fvalue_name = "insertion_qc_fvalue_float" elif v == "None": pass elif type(v) == str: - qc_fvalue_name = 'insertion_qc_fvalue_str' + qc_fvalue_name = "insertion_qc_fvalue_str" else: - qc_fvalue_name = 'insertion_qc_fvalue_blob' + qc_fvalue_name = "insertion_qc_fvalue_blob" qc_real.ProbeInsertionExtendedQC.Field.insert1( - {**probe_insertion_key, - 'qc_type': qc_type, - 'insertion_qc_fname': k, - qc_fvalue_name: v}, skip_duplicates=True) + { + **probe_insertion_key, + "qc_type": qc_type, + "insertion_qc_fname": k, + qc_fvalue_name: v, + }, + skip_duplicates=True, + ) diff --git a/ibl_pipeline/ingest/reference.py b/ibl_pipeline/ingest/reference.py index 8bf6190e..b47c5a33 100755 --- a/ibl_pipeline/ingest/reference.py +++ b/ibl_pipeline/ingest/reference.py @@ -1,16 +1,15 @@ -import datajoint as dj +import os import uuid +import datajoint as dj + from ibl_pipeline.ingest import alyxraw from ibl_pipeline.ingest import get_raw_field as grf -import os - -if dj.config.get('custom', {}).get('database.mode', "") == 'public': +if dj.config.get("custom", {}).get("database.mode", "") == "public": from ibl_pipeline import public -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_reference') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_reference") @schema @@ -27,17 +26,17 @@ class Lab(dj.Computed): zscore_weight_pct: float lab_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model = "misc.lab"').proj(lab_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model = "misc.lab"').proj(lab_uuid="uuid") def make(self, key): key_lab = key.copy() - key['uuid'] = key['lab_uuid'] - key_lab['lab_name'] = grf(key, 'name') - key_lab['institution'] = grf(key, 'institution') - key_lab['address'] = grf(key, 'address') - key_lab['time_zone'] = grf(key, 'timezone') - key_lab['reference_weight_pct'] = grf(key, 'reference_weight_pct') - key_lab['zscore_weight_pct'] = grf(key, 'zscore_weight_pct') + key["uuid"] = key["lab_uuid"] + key_lab["lab_name"] = grf(key, "name") + key_lab["institution"] = grf(key, "institution") + key_lab["address"] = grf(key, "address") + key_lab["time_zone"] = grf(key, "timezone") + key_lab["reference_weight_pct"] = grf(key, "reference_weight_pct") + key_lab["zscore_weight_pct"] = grf(key, "zscore_weight_pct") self.insert1(key_lab) @@ -62,48 +61,47 @@ class LabMember(dj.Computed): is_stock_manager: boolean # stock manager status labmember_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model = "misc.labmember"').proj( - user_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model = "misc.labmember"').proj(user_uuid="uuid") def make(self, key): key_lab_member = key.copy() - key['uuid'] = key['user_uuid'] + key["uuid"] = key["user_uuid"] # check the current mode, if public, omit some fields - user_name = grf(key, 'username') - if dj.config.get('custom', {}).get('database.mode', "") != 'public': - key_lab_member['user_name'] = user_name - key_lab_member['password'] = grf(key, 'password') - key_lab_member['email'] = grf(key, 'email') - first_name = grf(key, 'first_name') - if first_name != 'None': - key_lab_member['first_name'] = first_name - - last_name = grf(key, 'last_name') - if last_name != 'None': - key_lab_member['last_name'] = last_name + user_name = grf(key, "username") + if dj.config.get("custom", {}).get("database.mode", "") != "public": + key_lab_member["user_name"] = user_name + key_lab_member["password"] = grf(key, "password") + key_lab_member["email"] = grf(key, "email") + first_name = grf(key, "first_name") + if first_name != "None": + key_lab_member["first_name"] = first_name + + last_name = grf(key, "last_name") + if last_name != "None": + key_lab_member["last_name"] = last_name else: - key_lab_member['user_name'] = (public.UserMap & - {'user_name': user_name}).fetch1( - 'pseudo_name') + key_lab_member["user_name"] = ( + public.UserMap & {"user_name": user_name} + ).fetch1("pseudo_name") - last_login = grf(key, 'last_login') - if last_login != 'None': - key_lab_member['last_login'] = last_login + last_login = grf(key, "last_login") + if last_login != "None": + key_lab_member["last_login"] = last_login - key_lab_member['date_joined'] = grf(key, 'date_joined') + key_lab_member["date_joined"] = grf(key, "date_joined") - is_active = grf(key, 'is_active') - key_lab_member['is_active'] = is_active == 'True' + is_active = grf(key, "is_active") + key_lab_member["is_active"] = is_active == "True" - is_staff = grf(key, 'is_staff') - key_lab_member['is_staff'] = is_staff == 'True' + is_staff = grf(key, "is_staff") + key_lab_member["is_staff"] = is_staff == "True" - is_superuser = grf(key, 'is_superuser') - key_lab_member['is_superuser'] = is_superuser == 'True' + is_superuser = grf(key, "is_superuser") + key_lab_member["is_superuser"] = is_superuser == "True" - is_stock_manager = grf(key, 'is_stock_manager') - key_lab_member['is_stock_manager'] = is_stock_manager == 'True' + is_stock_manager = grf(key, "is_stock_manager") + key_lab_member["is_stock_manager"] = is_stock_manager == "True" self.insert1(key_lab_member) @@ -121,32 +119,34 @@ class LabMembership(dj.Computed): labmembership_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="misc.labmembership"').proj( - lab_membership_uuid='uuid') + lab_membership_uuid="uuid" + ) def make(self, key): key_mem = key.copy() - key['uuid'] = key['lab_membership_uuid'] + key["uuid"] = key["lab_membership_uuid"] - lab_uuid = grf(key, 'lab') - key_mem['lab_name'] = \ - (Lab & dict(lab_uuid=uuid.UUID(lab_uuid))).fetch1('lab_name') + lab_uuid = grf(key, "lab") + key_mem["lab_name"] = (Lab & dict(lab_uuid=uuid.UUID(lab_uuid))).fetch1( + "lab_name" + ) - user_uuid = grf(key, 'user') - key_mem['user_name'] = \ - (LabMember & dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + user_uuid = grf(key, "user") + key_mem["user_name"] = ( + LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") - role = grf(key, 'role') - if role != 'None': - key_mem['role'] = role + role = grf(key, "role") + if role != "None": + key_mem["role"] = role - start_date = grf(key, 'start_date') - if start_date != 'None': - key_mem['mem_start_date'] = start_date + start_date = grf(key, "start_date") + if start_date != "None": + key_mem["mem_start_date"] = start_date - end_date = grf(key, 'end_date') - if end_date != 'None': - key_mem['mem_end_date'] = end_date + end_date = grf(key, "end_date") + if end_date != "None": + key_mem["mem_end_date"] = end_date self.insert1(key_mem) @@ -161,19 +161,20 @@ class LabLocation(dj.Computed): lablocation_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "misc.lablocation"').proj( - location_uuid='uuid') + location_uuid="uuid" + ) def make(self, key): key_loc = key.copy() - key['uuid'] = key['location_uuid'] - key_loc['location_name'] = grf(key, 'name') - lab_uuid = grf(key, 'lab') - if lab_uuid == 'None': - key_loc['lab_name'] = 'cortexlab' + key["uuid"] = key["location_uuid"] + key_loc["location_name"] = grf(key, "name") + lab_uuid = grf(key, "lab") + if lab_uuid == "None": + key_loc["lab_name"] = "cortexlab" else: - key_loc['lab_name'] = \ - (Lab & dict(lab_uuid=uuid.UUID(lab_uuid))).fetch1( - 'lab_name') + key_loc["lab_name"] = (Lab & dict(lab_uuid=uuid.UUID(lab_uuid))).fetch1( + "lab_name" + ) self.insert1(key_loc) @@ -188,14 +189,15 @@ class Project(dj.Computed): project_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="subjects.project"').proj( - project_uuid='uuid') + project_uuid="uuid" + ) def make(self, key): key_proj = key.copy() - key['uuid'] = key['project_uuid'] + key["uuid"] = key["project_uuid"] - key_proj['project_name'] = grf(key, 'name') - key_proj['project_description'] = grf(key, 'description') + key_proj["project_name"] = grf(key, "name") + key_proj["project_description"] = grf(key, "description") self.insert1(key_proj) @@ -217,14 +219,15 @@ class CoordinateSystem(dj.Imported): coordinate_system_description=null: varchar(2048) """ key_source = (alyxraw.AlyxRaw & 'model="experiments.coordinatesystem"').proj( - coordinate_system_uuid='uuid') + coordinate_system_uuid="uuid" + ) def make(self, key): key_coord = key.copy() - key['uuid'] = key['coordinate_system_uuid'] + key["uuid"] = key["coordinate_system_uuid"] - key_coord['coordinate_system_name'] = grf(key, 'name') - key_coord['coordinate_system_description'] = grf(key, 'description') + key_coord["coordinate_system_name"] = grf(key, "name") + key_coord["coordinate_system_description"] = grf(key, "description") self.insert1(key_coord) diff --git a/ibl_pipeline/ingest/subject.py b/ibl_pipeline/ingest/subject.py index e09b4dbc..9377fd7d 100755 --- a/ibl_pipeline/ingest/subject.py +++ b/ibl_pipeline/ingest/subject.py @@ -1,12 +1,13 @@ -import datajoint as dj import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, ShadowIngestionError +import datajoint as dj + +from ibl_pipeline.ingest import ShadowIngestionError, alyxraw from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_ingest_subject') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_subject") subjects = alyxraw.AlyxRaw & 'model="subjects.subject"' @@ -21,13 +22,14 @@ class Species(dj.Computed): species_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="subjects.species"').proj( - species_uuid='uuid') + species_uuid="uuid" + ) def make(self, key): key_species = key.copy() - key['uuid'] = key['species_uuid'] - key_species['binomial'] = grf(key, 'name') - key_species['species_nickname'] = grf(key, 'nickname') + key["uuid"] = key["species_uuid"] + key_species["binomial"] = grf(key, "name") + key_species["species_nickname"] = grf(key, "nickname") self.insert1(key_species) @@ -42,17 +44,16 @@ class Strain(dj.Computed): strain_description=null: varchar(255) # description strain_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="subjects.strain"').proj( - strain_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="subjects.strain"').proj(strain_uuid="uuid") def make(self, key): key_strain = key.copy() - key['uuid'] = key['strain_uuid'] - key_strain['strain_name'] = grf(key, 'name') + key["uuid"] = key["strain_uuid"] + key_strain["strain_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_strain['strain_description'] = description + description = grf(key, "description") + if description != "None": + key_strain["strain_description"] = description self.insert1(key_strain) @@ -67,17 +68,16 @@ class Source(dj.Computed): source_description=null: varchar(255) # description source_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="subjects.source"').proj( - source_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="subjects.source"').proj(source_uuid="uuid") def make(self, key): key_animal_source = key.copy() - key['uuid'] = key['source_uuid'] - key_animal_source['source_name'] = grf(key, 'name') + key["uuid"] = key["source_uuid"] + key_animal_source["source_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_animal_source['source_description'] = description + description = grf(key, "description") + if description != "None": + key_animal_source["source_description"] = description self.insert1(key_animal_source) @@ -93,20 +93,21 @@ class Sequence(dj.Computed): sequence_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="subjects.sequence"').proj( - sequence_uuid='uuid') + sequence_uuid="uuid" + ) def make(self, key): key_seq = key.copy() - key['uuid'] = key['sequence_uuid'] - key_seq['sequence_name'] = grf(key, 'name') + key["uuid"] = key["sequence_uuid"] + key_seq["sequence_name"] = grf(key, "name") - base_pairs = grf(key, 'base_pairs') - if base_pairs != 'None': - key_seq['base_pairs'] = base_pairs + base_pairs = grf(key, "base_pairs") + if base_pairs != "None": + key_seq["base_pairs"] = base_pairs - description = grf(key, 'description') - if description != 'None': - key_seq['sequence_description'] = description + description = grf(key, "description") + if description != "None": + key_seq["sequence_description"] = description self.insert1(key_seq) @@ -125,17 +126,16 @@ class Allele(dj.Computed): expression_data_url=null: varchar(255) # link to the expression pattern from Allen institute brain atlas allele_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj( - allele_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid="uuid") def make(self, key): key_allele = key.copy() - key['uuid'] = key['allele_uuid'] - key_allele['allele_name'] = grf(key, 'nickname') + key["uuid"] = key["allele_uuid"] + key_allele["allele_name"] = grf(key, "nickname") - standard_name = grf(key, 'name') - if standard_name != 'None': - key_allele['standard_name'] = standard_name + standard_name = grf(key, "name") + if standard_name != "None": + key_allele["standard_name"] = standard_name self.insert1(key_allele) @@ -165,34 +165,34 @@ class Line(dj.Computed): is_active: boolean # is active line_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="subjects.line"').proj( - line_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid="uuid") def make(self, key): key_line = key.copy() - key['uuid'] = key['line_uuid'] + key["uuid"] = key["line_uuid"] - species_uuid = grf(key, 'species') - key_line['binomial'] = \ - (Species & dict(species_uuid=uuid.UUID(species_uuid))).fetch1( - 'binomial') + species_uuid = grf(key, "species") + key_line["binomial"] = ( + Species & dict(species_uuid=uuid.UUID(species_uuid)) + ).fetch1("binomial") - strain_uuid = grf(key, 'strain') - if strain_uuid != 'None': - key_line['strain_name'] = (Strain & dict( - strain_uuid=uuid.UUID(strain_uuid))).fetch1('strain_name') + strain_uuid = grf(key, "strain") + if strain_uuid != "None": + key_line["strain_name"] = ( + Strain & dict(strain_uuid=uuid.UUID(strain_uuid)) + ).fetch1("strain_name") - key_line['line_name'] = grf(key, 'name') + key_line["line_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_line['line_description'] = description - key_line['target_phenotype'] = grf(key, 'target_phenotype') - key_line['line_nickname'] = grf(key, 'nickname') + description = grf(key, "description") + if description != "None": + key_line["line_description"] = description + key_line["target_phenotype"] = grf(key, "target_phenotype") + key_line["line_nickname"] = grf(key, "nickname") - active = grf(key, 'is_active') - key_line['is_active'] = active == "True" + active = grf(key, "is_active") + key_line["is_active"] = active == "True" self.insert1(key_line) @@ -225,52 +225,52 @@ class Subject(dj.Computed): subject_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = subjects.proj(subject_uuid='uuid') + key_source = subjects.proj(subject_uuid="uuid") def make(self, key): key_subject = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - nickname = grf(key, 'nickname') - if nickname != 'None': - key_subject['subject_nickname'] = nickname + nickname = grf(key, "nickname") + if nickname != "None": + key_subject["subject_nickname"] = nickname - sex = grf(key, 'sex') - if sex != 'None': - key_subject['sex'] = sex + sex = grf(key, "sex") + if sex != "None": + key_subject["sex"] = sex - strain_uuid = grf(key, 'strain') - if strain_uuid != 'None': - key_subject['subject_strain'] = \ - (Strain & dict(strain_uuid=uuid.UUID(strain_uuid))).fetch1( - 'strain_name') + strain_uuid = grf(key, "strain") + if strain_uuid != "None": + key_subject["subject_strain"] = ( + Strain & dict(strain_uuid=uuid.UUID(strain_uuid)) + ).fetch1("strain_name") - birth_date = grf(key, 'birth_date') - if birth_date != 'None': - key_subject['subject_birth_date'] = birth_date + birth_date = grf(key, "birth_date") + if birth_date != "None": + key_subject["subject_birth_date"] = birth_date - line_uuid = grf(key, 'line') - if line_uuid != 'None': - key_subject['subject_line'] = \ - (Line & dict(line_uuid=uuid.UUID(line_uuid))).fetch1( - 'line_name') + line_uuid = grf(key, "line") + if line_uuid != "None": + key_subject["subject_line"] = ( + Line & dict(line_uuid=uuid.UUID(line_uuid)) + ).fetch1("line_name") - key_subject['protocol_number'] = grf(key, 'protocol_number') + key_subject["protocol_number"] = grf(key, "protocol_number") - ear_mark = grf(key, 'ear_mark') - if ear_mark != 'None': - key_subject['ear_mark'] = ear_mark + ear_mark = grf(key, "ear_mark") + if ear_mark != "None": + key_subject["ear_mark"] = ear_mark - source_uuid = grf(key, 'source') - if source_uuid != 'None': - key_subject['subject_source'] = \ - (Source & dict(source_uuid=uuid.UUID(source_uuid))).fetch1( - 'source_name') + source_uuid = grf(key, "source") + if source_uuid != "None": + key_subject["subject_source"] = ( + Source & dict(source_uuid=uuid.UUID(source_uuid)) + ).fetch1("source_name") - description = grf(key, 'description') - if description != 'None': - key_subject['subject_description'] = description + description = grf(key, "description") + if description != "None": + key_subject["subject_description"] = description self.insert1(key_subject) @@ -283,19 +283,20 @@ class SubjectCullMethod(dj.Computed): cull_method: varchar(255) cull_method_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_cull = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="cull_method"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_cull).proj( - subject_uuid='uuid') + subjects_with_cull = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="cull_method"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_cull).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_c = key.copy() - key['uuid'] = key['subject_uuid'] - self.insert1(dict( - **key_c, cull_method=grf(key, 'cull_method'))) + key["uuid"] = key["subject_uuid"] + self.insert1(dict(**key_c, cull_method=grf(key, "cull_method"))) @schema @@ -315,43 +316,44 @@ class BreedingPair(dj.Computed): breedingpair_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="subjects.breedingpair"').proj( - bp_uuid='uuid') + bp_uuid="uuid" + ) def make(self, key): key_bp = key.copy() - key['uuid'] = key['bp_uuid'] + key["uuid"] = key["bp_uuid"] - line_uuid = grf(key, 'line') - if line_uuid != 'None': - key_bp['bp_line'] = \ - (Line & dict(line_uuid=uuid.UUID(line_uuid))).fetch1( - 'line_name') + line_uuid = grf(key, "line") + if line_uuid != "None": + key_bp["bp_line"] = (Line & dict(line_uuid=uuid.UUID(line_uuid))).fetch1( + "line_name" + ) - key_bp['bp_name'] = grf(key, 'name') + key_bp["bp_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_bp['bp_description'] = description + description = grf(key, "description") + if description != "None": + key_bp["bp_description"] = description - start_date = grf(key, 'start_date') - if start_date != 'None': - key_bp['bp_start_date'] = grf(key, 'start_date') + start_date = grf(key, "start_date") + if start_date != "None": + key_bp["bp_start_date"] = grf(key, "start_date") - end_date = grf(key, 'end_date') - if end_date != 'None': - key_bp['bp_end_date'] = end_date + end_date = grf(key, "end_date") + if end_date != "None": + key_bp["bp_end_date"] = end_date - father = grf(key, 'father') - if father != 'None': - key_bp['father'] = uuid.UUID(father) + father = grf(key, "father") + if father != "None": + key_bp["father"] = uuid.UUID(father) - mother1 = grf(key, 'mother1') - if mother1 != 'None': - key_bp['mother1'] = uuid.UUID(mother1) + mother1 = grf(key, "mother1") + if mother1 != "None": + key_bp["mother1"] = uuid.UUID(mother1) - mother2 = grf(key, 'mother2') - if mother2 != 'None': - key_bp['mother2'] = uuid.UUID(mother2) + mother2 = grf(key, "mother2") + if mother2 != "None": + key_bp["mother2"] = uuid.UUID(mother2) self.insert1(key_bp) @@ -369,34 +371,33 @@ class Litter(dj.Computed): litter_birth_date=null: date # birth date litter_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="subjects.litter"').proj( - litter_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="subjects.litter"').proj(litter_uuid="uuid") def make(self, key): key_litter = key.copy() - key['uuid'] = key['litter_uuid'] + key["uuid"] = key["litter_uuid"] - bp_uuid = grf(key, 'breeding_pair') - if bp_uuid != 'None': - key_litter['bp_name'] = \ - (BreedingPair & dict(bp_uuid=uuid.UUID(bp_uuid))).fetch1( - 'bp_name') + bp_uuid = grf(key, "breeding_pair") + if bp_uuid != "None": + key_litter["bp_name"] = ( + BreedingPair & dict(bp_uuid=uuid.UUID(bp_uuid)) + ).fetch1("bp_name") - key_litter['litter_name'] = grf(key, 'name') + key_litter["litter_name"] = grf(key, "name") - line_uuid = grf(key, 'line') - if line_uuid != 'None': - key_litter['litter_line'] = \ - (Line & dict(line_uuid=uuid.UUID(line_uuid))).fetch1( - 'line_name') + line_uuid = grf(key, "line") + if line_uuid != "None": + key_litter["litter_line"] = ( + Line & dict(line_uuid=uuid.UUID(line_uuid)) + ).fetch1("line_name") - description = grf(key, 'description') - if description != 'None': - key_litter['litter_description'] = description + description = grf(key, "description") + if description != "None": + key_litter["litter_description"] = description - birth_date = grf(key, 'birth_date') - if birth_date != 'None': - key_litter['litter_birth_date'] = birth_date + birth_date = grf(key, "birth_date") + if birth_date != "None": + key_litter["litter_birth_date"] = birth_date self.insert1(key_litter) @@ -409,21 +410,23 @@ class LitterSubject(dj.Computed): littersubject_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_litter = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="litter"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_litter).proj( - subject_uuid='uuid') + subjects_with_litter = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="litter"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_litter).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_ls = key.copy() - key['uuid'] = key['subject_uuid'] - litter = grf(key, 'litter') - key_ls['litter_name'] = \ - (Litter & dict(litter_uuid=uuid.UUID(litter))).fetch1( - 'litter_name') + key["uuid"] = key["subject_uuid"] + litter = grf(key, "litter") + key_ls["litter_name"] = (Litter & dict(litter_uuid=uuid.UUID(litter))).fetch1( + "litter_name" + ) self.insert1(key_ls) @@ -436,29 +439,30 @@ class SubjectProject(dj.Computed): subjectproject_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_projects = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="projects"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_projects).proj( - subject_uuid='uuid') + subjects_with_projects = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="projects"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_projects).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_s = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - proj_uuids = grf(key, 'projects', multiple_entries=True) + proj_uuids = grf(key, "projects", multiple_entries=True) for proj_uuid in proj_uuids: key_sp = key_s.copy() try: - key_sp['subject_project'] = \ - (reference.Project & - dict(project_uuid=uuid.UUID(proj_uuid))).fetch1( - 'project_name') + key_sp["subject_project"] = ( + reference.Project & dict(project_uuid=uuid.UUID(proj_uuid)) + ).fetch1("project_name") self.insert1(key_sp) except Exception: - print(key['subject_uuid']) + print(key["subject_uuid"]) @schema @@ -470,23 +474,25 @@ class SubjectUser(dj.Computed): subjectuser_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_user = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="responsible_user"' & 'fvalue!="None"' + subjects_with_user = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="responsible_user"' & 'fvalue!="None"' + ) - key_source = (subjects & subjects_with_user).proj( - subject_uuid='uuid') + key_source = (subjects & subjects_with_user).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_su = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - user = grf(key, 'responsible_user') - key_su['responsible_user'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + user = grf(key, "responsible_user") + key_su["responsible_user"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") self.insert1(key_su) @@ -501,14 +507,16 @@ class SubjectLab(dj.Computed): def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_sl = key.copy() - key['uuid'] = key['subject_uuid'] - lab = grf(key, 'lab') - key_sl['lab_name'] = \ - (reference.Lab & - dict(lab_uuid=uuid.UUID(lab))).fetch1('lab_name') + key["uuid"] = key["subject_uuid"] + lab = grf(key, "lab") + key_sl["lab_name"] = (reference.Lab & dict(lab_uuid=uuid.UUID(lab))).fetch1( + "lab_name" + ) self.insert1(key_sl) @@ -521,36 +529,38 @@ class Caging(dj.Computed): caging_time=null: datetime # time when changed to this cage caging_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = subjects.proj(subject_uuid='uuid') + key_source = subjects.proj(subject_uuid="uuid") def make(self, key): key_cage = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) - key_cage['cage_name'] = grf(key, 'cage') - json_content = grf(key, 'json') - if json_content != 'None': + key_cage["cage_name"] = grf(key, "cage") + json_content = grf(key, "json") + if json_content != "None": try: json_dict = json.loads(json_content) except json.decoder.JSONDecodeError: - json_content = json_content.replace("\'", "\"") + json_content = json_content.replace("'", '"') json_dict = json.loads(json_content) - history = json_dict['history'] - if 'cage' not in history: + history = json_dict["history"] + if "cage" not in history: self.insert1(key_cage, skip_duplicates=True) else: - cages = history['cage'] + cages = history["cage"] key_cage_i = key_cage.copy() for cage in cages[::-1]: - cage_time = cage['date_time'] - key_cage_i['caging_time'] = cage_time[:-6] + cage_time = cage["date_time"] + key_cage_i["caging_time"] = cage_time[:-6] self.insert1(key_cage_i, skip_duplicates=True) - if cage['value'] != 'None': - key_cage_i['cage_name'] = cage['value'] + if cage["value"] != "None": + key_cage_i["cage_name"] = cage["value"] @schema @@ -563,40 +573,41 @@ class UserHistory(dj.Computed): userhistory_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = subjects.proj(subject_uuid='uuid') + key_source = subjects.proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_user = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - user = grf(key, 'responsible_user', model='subjects.subject') - key_user['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + user = grf(key, "responsible_user", model="subjects.subject") + key_user["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") - json_content = grf(key, 'json', model='subjects.subject') - if json_content != 'None': - json_content = json_content.replace("\'", "\"") + json_content = grf(key, "json", model="subjects.subject") + if json_content != "None": + json_content = json_content.replace("'", '"') json_dict = json.loads(json_content) - history = json_dict['history'] - if 'reponsible_user' not in history: + history = json_dict["history"] + if "reponsible_user" not in history: self.insert1(key_user) else: - users = history['responsible_user'] + users = history["responsible_user"] key_user_i = key_user.copy() for user in users[::-1]: - user_change_time = user['date_time'] - key_user_i['user_change_time'] = user_change_time[:-6] + user_change_time = user["date_time"] + key_user_i["user_change_time"] = user_change_time[:-6] self.insert1(key_user_i) - if user['value'] != 'None': - user_uuid = user['value'] - key_user_i['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + if user["value"] != "None": + user_uuid = user["value"] + key_user_i["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") else: self.insert1(key_user) @@ -610,19 +621,21 @@ class Weaning(dj.Computed): weaning_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_wean = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="wean_date"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_wean).proj( - subject_uuid='uuid') + subjects_with_wean = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="wean_date"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_wean).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_weaning = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - key_weaning['wean_date'] = grf(key, 'wean_date') + key_weaning["wean_date"] = grf(key, "wean_date") self.insert1(key_weaning) @@ -634,18 +647,20 @@ class Death(dj.Computed): death_date=null: date death_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_death = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="death_date"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_death).proj( - subject_uuid='uuid') + subjects_with_death = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="death_date"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_death).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_death = key.copy() - key['uuid'] = key['subject_uuid'] - key_death['death_date'] = grf(key, 'death_date') + key["uuid"] = key["subject_uuid"] + key_death["death_date"] = grf(key, "death_date") self.insert1(key_death) @@ -658,17 +673,16 @@ class Food(dj.Computed): food_description='': varchar(255) food_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="misc.food"').proj( - food_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="misc.food"').proj(food_uuid="uuid") def make(self, key): key_food = key.copy() - key['uuid'] = key['food_uuid'] - key_food['food_name'] = grf(key, 'name') + key["uuid"] = key["food_uuid"] + key_food["food_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_food['food_description'] = description + description = grf(key, "description") + if description != "None": + key_food["food_description"] = description self.insert1(key_food) @@ -682,17 +696,16 @@ class CageType(dj.Computed): cage_type_description='': varchar(255) cage_type_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="misc.cagetype"').proj( - cage_type_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="misc.cagetype"').proj(cage_type_uuid="uuid") def make(self, key): key_cage_type = key.copy() - key['uuid'] = key['cage_type_uuid'] - key_cage_type['cage_type_name'] = grf(key, 'name') + key["uuid"] = key["cage_type_uuid"] + key_cage_type["cage_type_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_cage_type['cage_type_description'] = description + description = grf(key, "description") + if description != "None": + key_cage_type["cage_type_description"] = description self.insert1(key_cage_type) @@ -707,16 +720,17 @@ class Enrichment(dj.Computed): enrichment_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model="misc.enrichment"').proj( - enrichment_uuid='uuid') + enrichment_uuid="uuid" + ) def make(self, key): key_enrichment = key.copy() - key['uuid'] = key['enrichment_uuid'] - key_enrichment['enrichment_name'] = grf(key, 'name') + key["uuid"] = key["enrichment_uuid"] + key_enrichment["enrichment_name"] = grf(key, "name") - description = grf(key, 'description') - if description != 'None': - key_enrichment['enrichment_description'] = description + description = grf(key, "description") + if description != "None": + key_enrichment["enrichment_description"] = description self.insert1(key_enrichment) @@ -735,45 +749,42 @@ class Housing(dj.Computed): housing_description='': varchar(255) housing_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = (alyxraw.AlyxRaw & 'model="misc.housing"').proj( - housing_uuid='uuid') + key_source = (alyxraw.AlyxRaw & 'model="misc.housing"').proj(housing_uuid="uuid") def make(self, key): key_housing = key.copy() - key['uuid'] = key['housing_uuid'] - key_housing['cage_name'] = grf(key, 'cage_name') - - food_uuid = grf(key, 'food') - if food_uuid != 'None': - key_housing['food_name'] = \ - (Food & dict(food_uuid=uuid.UUID(food_uuid))).fetch1( - 'food_name') - - enrichment_uuid = grf(key, 'enrichment') - if enrichment_uuid != 'None': - key_housing['enrichment_name'] = \ - (Enrichment & - dict(enrichment_uuid=uuid.UUID(enrichment_uuid))).fetch1( - 'enrichment_name') - - cage_type_uuid = grf(key, 'cage_type') - if cage_type_uuid != 'None': - key_housing['cage_type_name'] = \ - (CageType & - dict(cage_type_uuid=uuid.UUID(cage_type_uuid))).fetch1( - 'cage_type_name') - - frequency = grf(key, 'cage_cleaning_frequency_days') - if frequency != 'None': - key_housing['cage_cleaning_frequency'] = frequency - - light_cycle = grf(key, 'light_cycle') - if light_cycle != 'None': - key_housing['light_cycle'] = light_cycle - - description = grf(key, 'description') - if description != 'None': - key_housing['housing_description'] = description + key["uuid"] = key["housing_uuid"] + key_housing["cage_name"] = grf(key, "cage_name") + + food_uuid = grf(key, "food") + if food_uuid != "None": + key_housing["food_name"] = ( + Food & dict(food_uuid=uuid.UUID(food_uuid)) + ).fetch1("food_name") + + enrichment_uuid = grf(key, "enrichment") + if enrichment_uuid != "None": + key_housing["enrichment_name"] = ( + Enrichment & dict(enrichment_uuid=uuid.UUID(enrichment_uuid)) + ).fetch1("enrichment_name") + + cage_type_uuid = grf(key, "cage_type") + if cage_type_uuid != "None": + key_housing["cage_type_name"] = ( + CageType & dict(cage_type_uuid=uuid.UUID(cage_type_uuid)) + ).fetch1("cage_type_name") + + frequency = grf(key, "cage_cleaning_frequency_days") + if frequency != "None": + key_housing["cage_cleaning_frequency"] = frequency + + light_cycle = grf(key, "light_cycle") + if light_cycle != "None": + key_housing["light_cycle"] = light_cycle + + description = grf(key, "description") + if description != "None": + key_housing["housing_description"] = description self.insert1(key_housing) @@ -790,27 +801,28 @@ class SubjectHousing(dj.Computed): subject_housing_ts=CURRENT_TIMESTAMP : timestamp """ key_source = (alyxraw.AlyxRaw & 'model="misc.housingsubject"').proj( - subject_housing_uuid='uuid') + subject_housing_uuid="uuid" + ) def make(self, key): key_subj_housing = key.copy() - key['uuid'] = key['subject_housing_uuid'] + key["uuid"] = key["subject_housing_uuid"] - key_subj_housing['housing_start_time'] = grf(key, 'start_datetime') + key_subj_housing["housing_start_time"] = grf(key, "start_datetime") - end_time = grf(key, 'end_datetime') - if end_time != 'None': - key_subj_housing['housing_end_time'] = end_time + end_time = grf(key, "end_datetime") + if end_time != "None": + key_subj_housing["housing_end_time"] = end_time - key_subj_housing['subject_uuid'] = grf(key, 'subject') + key_subj_housing["subject_uuid"] = grf(key, "subject") - housing = grf(key, 'housing') - if housing == 'None': + housing = grf(key, "housing") + if housing == "None": return - key_subj_housing['cage_name'] = \ - (Housing & dict(housing_uuid=uuid.UUID(housing))).fetch1( - 'cage_name') + key_subj_housing["cage_name"] = ( + Housing & dict(housing_uuid=uuid.UUID(housing)) + ).fetch1("cage_name") self.insert1(key_subj_housing) @@ -829,20 +841,21 @@ class GenotypeTest(dj.Computed): genotypetest_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "subjects.genotypetest"').proj( - genotype_test_uuid='uuid') + genotype_test_uuid="uuid" + ) def make(self, key): key_gt = key.copy() - key['uuid'] = key['genotype_test_uuid'] - key_gt['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["genotype_test_uuid"] + key_gt["subject_uuid"] = uuid.UUID(grf(key, "subject")) - sequence_uuid = grf(key, 'sequence') - key_gt['sequence_name'] = \ - (Sequence & dict(sequence_uuid=uuid.UUID(sequence_uuid))).fetch1( - 'sequence_name') + sequence_uuid = grf(key, "sequence") + key_gt["sequence_name"] = ( + Sequence & dict(sequence_uuid=uuid.UUID(sequence_uuid)) + ).fetch1("sequence_name") - test_result = grf(key, 'test_result') - key_gt['test_result'] = 'Present' if test_result else 'Absent' + test_result = grf(key, "test_result") + key_gt["test_result"] = "Present" if test_result else "Absent" self.insert1(key_gt) @@ -860,30 +873,31 @@ class Zygosity(dj.Computed): zygosity_ts=CURRENT_TIMESTAMP: timestamp """ key_source = (alyxraw.AlyxRaw & 'model = "subjects.zygosity"').proj( - zygosity_uuid='uuid') + zygosity_uuid="uuid" + ) def make(self, key): key_zg = key.copy() - key['uuid'] = key['zygosity_uuid'] - key_zg['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["zygosity_uuid"] + key_zg["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(Subject & key_zg): return - allele_uuid = grf(key, 'allele') - key_zg['allele_name'] = \ - (Allele & dict(allele_uuid=uuid.UUID(allele_uuid))).fetch1( - 'allele_name') + allele_uuid = grf(key, "allele") + key_zg["allele_name"] = ( + Allele & dict(allele_uuid=uuid.UUID(allele_uuid)) + ).fetch1("allele_name") - zygosity = grf(key, 'zygosity') + zygosity = grf(key, "zygosity") zygosity_types = { - '0': 'Absent', - '1': 'Heterozygous', - '2': 'Homozygous', - '3': 'Present' + "0": "Absent", + "1": "Heterozygous", + "2": "Homozygous", + "3": "Present", } - key_zg['zygosity'] = zygosity_types[zygosity] + key_zg["zygosity"] = zygosity_types[zygosity] self.insert1(key_zg) @@ -900,28 +914,30 @@ class Implant(dj.Computed): protocol_number: tinyint implant_ts=CURRENT_TIMESTAMP: timestamp """ - subjects_with_implant = alyxraw.AlyxRaw.Field & subjects & \ - 'fname="implant_weight"' & 'fvalue!="None"' - key_source = (subjects & subjects_with_implant).proj( - subject_uuid='uuid') + subjects_with_implant = ( + alyxraw.AlyxRaw.Field & subjects & 'fname="implant_weight"' & 'fvalue!="None"' + ) + key_source = (subjects & subjects_with_implant).proj(subject_uuid="uuid") def make(self, key): if not len(Subject & key): - raise ShadowIngestionError(f'Subject not found in the table subject.Subject: {key["subject_uuid"]}') + raise ShadowIngestionError( + f'Subject not found in the table subject.Subject: {key["subject_uuid"]}' + ) key_implant = key.copy() - key['uuid'] = key['subject_uuid'] + key["uuid"] = key["subject_uuid"] - key_implant['implant_weight'] = float(grf(key, 'implant_weight')) + key_implant["implant_weight"] = float(grf(key, "implant_weight")) - adverse_effects = grf(key, 'adverse_effects') - if adverse_effects != 'None': - key_implant['adverse_effects'] = adverse_effects + adverse_effects = grf(key, "adverse_effects") + if adverse_effects != "None": + key_implant["adverse_effects"] = adverse_effects - actual_severity = grf(key, 'actual_severity') - if actual_severity != 'None': - key_implant['actual_severity'] = int(actual_severity) + actual_severity = grf(key, "actual_severity") + if actual_severity != "None": + key_implant["actual_severity"] = int(actual_severity) - key_implant['protocol_number'] = int(grf(key, 'protocol_number')) + key_implant["protocol_number"] = int(grf(key, "protocol_number")) self.insert1(key_implant) diff --git a/ibl_pipeline/patch/patch.py b/ibl_pipeline/patch/patch.py index a4806c46..aa12cacb 100755 --- a/ibl_pipeline/patch/patch.py +++ b/ibl_pipeline/patch/patch.py @@ -1,67 +1,68 @@ +import datetime +import re + import datajoint as dj +from tqdm import tqdm + +import ibl_pipeline from ibl_pipeline import acquisition, behavior, ephys, histology from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.analyses import ephys as ephys_analyses +from ibl_pipeline.group_shared import wheel from ibl_pipeline.plotting import behavior as behavior_plotting from ibl_pipeline.plotting import ephys as ephys_plotting -from ibl_pipeline.group_shared import wheel from ibl_pipeline.utils.dependent_tables import Graph -import ibl_pipeline -import re -from tqdm import tqdm -import datetime - -schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_patch') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_patch") SESSION_TABLES = [ - 'ephys_plotting.Waveform', - 'ephys_plotting.AutoCorrelogram', - 'ephys_plotting.SpikeAmpTime', - 'ephys_plotting.Psth', - 'ephys_plotting.Raster', - 'ephys_plotting.DepthPeth', - 'ephys_plotting.DepthRaster', - 'ephys_plotting.DepthRasterExampleTrial', - 'ephys_analyses.NormedDepthPeth', - 'ephys_analyses.DepthPeth', - 'ephys.GoodCluster', - 'ephys.AlignedTrialSpikes', - 'histology.ClusterBrainRegion', - 'ephys.ChannelGroup', - 'ephys.DefaultCluster.Ks2Label', - 'ephys.DefaultCluster.Metrics', - 'ephys.DefaultCluster.Metric', - 'ephys.DefaultCluster', - 'ephys.CompleteClusterSession', - 'behavior_plotting.SessionPsychCurve', - 'behavior_plotting.SessionReactionTimeTrialNumber', - 'behavior_plotting.SessionReactionTimeContrast', - 'behavior_analyses.SessionTrainingStatus', - 'behavior_analyses.ReactionTimeContrastBlock', - 'behavior_analyses.ReactionTime', - 'behavior_analyses.PsychResultsBlock', - 'behavior_analyses.PsychResults', - 'wheel.MovementTimes', - 'wheel.WheelMoveSet.Move', - 'wheel.WheelMoveSet', - 'behavior.CompleteWheelSession', - 'behavior.AmbientSensorData', - 'behavior.TrialSet.ExcludedTrial', - 'behavior.TrialSet.Trial', - 'behavior.TrialSet', - 'behavior.CompleteTrialSession', + "ephys_plotting.Waveform", + "ephys_plotting.AutoCorrelogram", + "ephys_plotting.SpikeAmpTime", + "ephys_plotting.Psth", + "ephys_plotting.Raster", + "ephys_plotting.DepthPeth", + "ephys_plotting.DepthRaster", + "ephys_plotting.DepthRasterExampleTrial", + "ephys_analyses.NormedDepthPeth", + "ephys_analyses.DepthPeth", + "ephys.GoodCluster", + "ephys.AlignedTrialSpikes", + "histology.ClusterBrainRegion", + "ephys.ChannelGroup", + "ephys.DefaultCluster.Ks2Label", + "ephys.DefaultCluster.Metrics", + "ephys.DefaultCluster.Metric", + "ephys.DefaultCluster", + "ephys.CompleteClusterSession", + "behavior_plotting.SessionPsychCurve", + "behavior_plotting.SessionReactionTimeTrialNumber", + "behavior_plotting.SessionReactionTimeContrast", + "behavior_analyses.SessionTrainingStatus", + "behavior_analyses.ReactionTimeContrastBlock", + "behavior_analyses.ReactionTime", + "behavior_analyses.PsychResultsBlock", + "behavior_analyses.PsychResults", + "wheel.MovementTimes", + "wheel.WheelMoveSet.Move", + "wheel.WheelMoveSet", + "behavior.CompleteWheelSession", + "behavior.AmbientSensorData", + "behavior.TrialSet.ExcludedTrial", + "behavior.TrialSet.Trial", + "behavior.TrialSet", + "behavior.CompleteTrialSession", ] DATE_TABLES = [ - 'behavior_plotting.DatePsychCurve', - 'behavior_plotting.DateReactionTimeContrast', - 'behavior_plotting.DateReactionTimeTrialNumber', - 'behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate', - 'behavior_analyses.BehavioralSummaryByDate.ReactionTimeContrast', - 'behavior_analyses.BehavioralSummaryByDate.PsychResults', - 'behavior_analyses.BehavioralSummaryByDate', + "behavior_plotting.DatePsychCurve", + "behavior_plotting.DateReactionTimeContrast", + "behavior_plotting.DateReactionTimeTrialNumber", + "behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate", + "behavior_analyses.BehavioralSummaryByDate.ReactionTimeContrast", + "behavior_analyses.BehavioralSummaryByDate.PsychResults", + "behavior_analyses.BehavioralSummaryByDate", ] @@ -96,60 +97,74 @@ def _insert_package_tables(self, table_list, table_type): table_key = dict(full_table_name=table_obj.full_table_name) if self & table_key: - dj.Table._update(self & table_key, 'table_order', itable) + dj.Table._update(self & table_key, "table_order", itable) else: - self.insert1(dict( - **table_key, - table_class=table, - table_order=itable, - table_order_category=table_type, - table_label='auto' if issubclass(table_obj, - (dj.Imported, dj.Computed)) - else 'part', - table_parent=eval(re.match('(^.*)\..*$', table).group(1)).full_table_name - if issubclass(table_obj, dj.Part) else None)) + self.insert1( + dict( + **table_key, + table_class=table, + table_order=itable, + table_order_category=table_type, + table_label="auto" + if issubclass(table_obj, (dj.Imported, dj.Computed)) + else "part", + table_parent=eval( + re.match("(^.*)\..*$", table).group(1) + ).full_table_name + if issubclass(table_obj, dj.Part) + else None + ) + ) def _insert_virtual_tables(self): # insert virtual modules tables in order - virtuals = Graph(behavior.TrialSet()).get_table_list(virtual_only=True) + \ - Graph(ephys.DefaultCluster()).get_table_list(virtual_only=True) + \ - Graph(behavior_analyses.BehavioralSummaryByDate()).get_table_list(virtual_only=True) + virtuals = ( + Graph(behavior.TrialSet()).get_table_list(virtual_only=True) + + Graph(ephys.DefaultCluster()).get_table_list(virtual_only=True) + + Graph(behavior_analyses.BehavioralSummaryByDate()).get_table_list( + virtual_only=True + ) + ) for itable, vtable in enumerate(virtuals[::-1]): - table_key = dict(full_table_name=vtable['full_table_name']) + table_key = dict(full_table_name=vtable["full_table_name"]) if Table & table_key: - dj.Table._update(self & table_key, 'table_order', itable) + dj.Table._update(self & table_key, "table_order", itable) else: self.insert1( dict( - full_table_name=vtable['full_table_name'], - table_class=vtable['table'], - table_order_category='virtual', + full_table_name=vtable["full_table_name"], + table_class=vtable["table"], + table_order_category="virtual", table_order=itable, - table_label='virtual'), - skip_duplicates=True) + table_label="virtual", + ), + skip_duplicates=True, + ) - def insert_tables(self, table_type='All'): + def insert_tables(self, table_type="All"): - if table_type == 'session': + if table_type == "session": self._insert_package_tables(SESSION_TABLES, table_type) - elif table_type == 'date': + elif table_type == "date": self._insert_package_tables(DATE_TABLES, table_type) - elif table_type == 'virtual': + elif table_type == "virtual": self._insert_virtual_tables() - elif table_type == 'All': - self._insert_package_tables(SESSION_TABLES, 'session') - self._insert_package_tables(DATE_TABLES, 'date') + elif table_type == "All": + self._insert_package_tables(SESSION_TABLES, "session") + self._insert_package_tables(DATE_TABLES, "date") self._insert_virtual_tables() else: - ValueError('Invalid table_type. It has to be one of the following: session, date, virtual') + ValueError( + "Invalid table_type. It has to be one of the following: session, date, virtual" + ) -table_kwargs = dict(order_by='table_order desc', as_dict=True) +table_kwargs = dict(order_by="table_order desc", as_dict=True) populate_kwargs = dict( - suppress_errors=True, display_progress=True, - return_exception_objects=True) + suppress_errors=True, display_progress=True, return_exception_objects=True +) @schema @@ -161,17 +176,17 @@ class Run(dj.Manual): job_status='' : enum('Success', 'Partial Success', 'Error', '') """ - def _delete_table(self, t, key, table_type='session', save_status=True): + def _delete_table(self, t, key, table_type="session", save_status=True): key_del = key.copy() - if table_type == 'virtual': - Graph.get_virtual_module(t['full_table_name']) + if table_type == "virtual": + Graph.get_virtual_module(t["full_table_name"]) - elif table_type == 'date': - key_del['session_date'] = key_del.pop('session_start_time').date() + elif table_type == "date": + key_del["session_date"] = key_del.pop("session_start_time").date() - table_class = eval(t['table_class']) - key_table = dict(**key, full_table_name=t['full_table_name']) + table_class = eval(t["table_class"]) + key_table = dict(**key, full_table_name=t["full_table_name"]) if table_class & key: original = True @@ -180,136 +195,153 @@ def _delete_table(self, t, key, table_type='session', save_status=True): if save_status: RunStatus.TableStatus.insert1( - dict(**key_table, original=original), skip_duplicates=True) + dict(**key_table, original=original), skip_duplicates=True + ) - print('Deleting table {} ...'.format(t['full_table_name'])) - if t['full_table_name'] == '`ibl_ephys`.`__aligned_trial_spikes`': - for cluster in tqdm((ephys.DefaultCluster & key).fetch('KEY'), - position=0): + print("Deleting table {} ...".format(t["full_table_name"])) + if t["full_table_name"] == "`ibl_ephys`.`__aligned_trial_spikes`": + for cluster in tqdm((ephys.DefaultCluster & key).fetch("KEY"), position=0): (table_class & cluster).delete_quick() else: (table_class & key_del).delete_quick() if save_status: + dj.Table._update(RunStatus.TableStatus & key_table, "status", "Deleted") dj.Table._update( RunStatus.TableStatus & key_table, - 'status', 'Deleted') - dj.Table._update( - RunStatus.TableStatus & key_table, - 'delete_time', datetime.datetime.now()) + "delete_time", + datetime.datetime.now(), + ) def make(self, key): - tables_session = (Table & 'table_order_category="session"').fetch(**table_kwargs) + tables_session = (Table & 'table_order_category="session"').fetch( + **table_kwargs + ) tables_date = (Table & 'table_order_category="date"').fetch(**table_kwargs) - tables_virtual = (Table & 'table_order_category="virtual"').fetch(**table_kwargs) + tables_virtual = (Table & 'table_order_category="virtual"').fetch( + **table_kwargs + ) # start this job if not RunStatus & key: - RunStatus.insert1( - dict(**key, run_start_time=datetime.datetime.now())) + RunStatus.insert1(dict(**key, run_start_time=datetime.datetime.now())) else: dj.Table._update( - RunStatus & key, - 'run_restart_time', datetime.datetime.now()) + RunStatus & key, "run_restart_time", datetime.datetime.now() + ) # delete tables for t in tables_virtual: - self._delete_table(t, key, table_type='virtual') + self._delete_table(t, key, table_type="virtual") for t in tables_session + tables_date: - table_key = dict(**key, full_table_name=t['full_table_name']) - if (RunStatus.TableStatus & table_key & - 'status in ("Success", "Partial Success")'): + table_key = dict(**key, full_table_name=t["full_table_name"]) + if ( + RunStatus.TableStatus + & table_key + & 'status in ("Success", "Partial Success")' + ): continue - self._delete_table(t, key, table_type=t['table_order_category']) + self._delete_table(t, key, table_type=t["table_order_category"]) # repopulate tables - for t in (tables_session[::-1] + tables_date[::-1]): + for t in tables_session[::-1] + tables_date[::-1]: key_pop = key.copy() - if t['table_order_category'] == 'date': - key_pop['session_date'] = key_pop.pop('session_start_time').date() - if t['table_label'] == 'auto': - table_class = eval(t['table_class']) - table_key = dict(**key, full_table_name=t['full_table_name']) + if t["table_order_category"] == "date": + key_pop["session_date"] = key_pop.pop("session_start_time").date() + if t["table_label"] == "auto": + table_class = eval(t["table_class"]) + table_key = dict(**key, full_table_name=t["full_table_name"]) status = RunStatus.TableStatus & table_key - print('Repopulating {}'.format(t['table_class'])) - dj.Table._update(status, 'status', 'Repopulating') - dj.Table._update( - status, 'populate_start_time', datetime.datetime.now()) - - if (not (table_class.key_source - table_class.proj()) & key_pop) \ - and (not RunStatus.TableStatus & table_key & 'status="Success"'): - dj.Table._update(status, 'status', 'Error') - dj.Table._update( - status, 'populate_done_time', datetime.datetime.now()) + print("Repopulating {}".format(t["table_class"])) + dj.Table._update(status, "status", "Repopulating") + dj.Table._update(status, "populate_start_time", datetime.datetime.now()) + + if (not (table_class.key_source - table_class.proj()) & key_pop) and ( + not RunStatus.TableStatus & table_key & 'status="Success"' + ): + dj.Table._update(status, "status", "Error") dj.Table._update( - status, 'error_message', 'No tuples to populate') + status, "populate_done_time", datetime.datetime.now() + ) + dj.Table._update(status, "error_message", "No tuples to populate") else: errors = table_class.populate(key_pop, **populate_kwargs) dj.Table._update( - status, 'populate_done_time', datetime.datetime.now()) + status, "populate_done_time", datetime.datetime.now() + ) if errors: if table_class & key_pop: - dj.Table._update(status, 'status', 'Partial Success') + dj.Table._update(status, "status", "Partial Success") else: - dj.Table._update(status, 'status', 'Error') + dj.Table._update(status, "status", "Error") if len(errors) > 10: errors = errors[:10] - dj.Table._update( - status, 'error_message', str(errors)) + dj.Table._update(status, "error_message", str(errors)) else: - dj.Table._update(status, 'status', 'Success') - dj.Table._update( - status, 'error_message', '') + dj.Table._update(status, "status", "Success") + dj.Table._update(status, "error_message", "") # mark its part table to Success - for part_table in (Table & - dict(table_parent=t['full_table_name'])).fetch('KEY'): + for part_table in ( + Table & dict(table_parent=t["full_table_name"]) + ).fetch("KEY"): dj.Table._update( RunStatus.TableStatus & key & part_table, - 'status', 'Success') + "status", + "Success", + ) dj.Table._update( RunStatus.TableStatus & key & part_table, - 'error_message', '') + "error_message", + "", + ) # end this job - dj.Table._update( - RunStatus & key, - 'run_end_time', datetime.datetime.now()) - - if RunStatus.TableStatus & key & [tables_session, tables_date] & 'status in ("Success")': - job_status = 'Partial Success' - if not RunStatus.TableStatus & key & [tables_session, tables_date] & \ - 'status in ("Error", "Partial Success")': - job_status = 'Success' + dj.Table._update(RunStatus & key, "run_end_time", datetime.datetime.now()) + + if ( + RunStatus.TableStatus + & key + & [tables_session, tables_date] + & 'status in ("Success")' + ): + job_status = "Partial Success" + if ( + not RunStatus.TableStatus + & key + & [tables_session, tables_date] + & 'status in ("Error", "Partial Success")' + ): + job_status = "Success" else: - job_status = 'Error' + job_status = "Error" if self & key: - dj.Table._update(self & key, 'job_status', job_status) + dj.Table._update(self & key, "job_status", job_status) else: self.insert1(dict(**key, job_status=job_status)) - def populate(self, *restrictions, level='New', display_progress=False): + def populate(self, *restrictions, level="New", display_progress=False): # populate new jobs only - if level == 'New': + if level == "New": cond = {} # populate new jobs and error jobs only - elif level == 'Error': + elif level == "Error": cond = 'job_status in ("Success", "Partial Success")' # populate new jobs, partial success jobs and error jobs - elif level == 'Partial': + elif level == "Partial": cond = 'job_status in ("Success")' - elif level == 'All': + elif level == "All": cond = [] self.key_source = (Session - (self & cond)) & dj.AndList(restrictions) - keys = self.key_source.fetch('KEY') + keys = self.key_source.fetch("KEY") - for key in (tqdm(keys, position=0) if display_progress else keys): + for key in tqdm(keys, position=0) if display_progress else keys: self.make(key) @@ -337,17 +369,23 @@ class TableStatus(dj.Part): """ -if __name__ == '__main__': +if __name__ == "__main__": - session = acquisition.Session & {'session_uuid': 'f8d5c8b0-b931-4151-b86c-c471e2e80e5d'} - entry = (acquisition.Session*subject.Subject & session).fetch( - 'subject_uuid', 'session_start_time', - 'session_uuid', 'subject_nickname', as_dict=True) + session = acquisition.Session & { + "session_uuid": "f8d5c8b0-b931-4151-b86c-c471e2e80e5d" + } + entry = (acquisition.Session * subject.Subject & session).fetch( + "subject_uuid", + "session_start_time", + "session_uuid", + "subject_nickname", + as_dict=True, + ) Session.insert1( - dict(**entry[0], job_date=datetime.datetime.now().date()), - skip_duplicates=True) + dict(**entry[0], job_date=datetime.datetime.now().date()), skip_duplicates=True + ) - Table.insert_tables('All') + Table.insert_tables("All") Run.populate(display_progress=True) diff --git a/ibl_pipeline/plotting/behavior.py b/ibl_pipeline/plotting/behavior.py index 567adb7c..bd5ac7a0 100755 --- a/ibl_pipeline/plotting/behavior.py +++ b/ibl_pipeline/plotting/behavior.py @@ -1,7 +1,8 @@ import os + from ibl_pipeline.plotting.behavior_shared import * -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") -if mode != 'public': +if mode != "public": from ibl_pipeline.plotting.behavior_internal import * diff --git a/ibl_pipeline/plotting/behavior_internal.py b/ibl_pipeline/plotting/behavior_internal.py index a16f326a..16200811 100644 --- a/ibl_pipeline/plotting/behavior_internal.py +++ b/ibl_pipeline/plotting/behavior_internal.py @@ -1,18 +1,18 @@ -import datajoint as dj import inspect + +import datajoint as dj import numpy as np import pandas as pd -from tqdm import tqdm import plotly.graph_objs as go +from tqdm import tqdm -from ibl_pipeline.analyses import behavior +from ibl_pipeline import acquisition, action from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import reference, subject, action, acquisition, data +from ibl_pipeline import data, one, reference, subject +from ibl_pipeline.analyses import behavior from ibl_pipeline.plotting import plotting_utils_behavior as putils -from ibl_pipeline import one -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_plotting_behavior') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_plotting_behavior") @schema @@ -25,31 +25,50 @@ class WaterTypeColor(dj.Computed): def make(self, key): - original_water_types = ['Citric Acid Water 2%', 'Hydrogel', - 'Hydrogel 5% Citric Acid', - 'Water', 'Water 1% Citric Acid', - 'Water 10% Sucrose', - 'Water 15% Sucrose', 'Water 2% Citric Acid'] - original_colors = ['red', 'orange', 'blue', 'rgba(55, 128, 191, 0.7)', - 'rgba(200, 128, 191, 0.7)', - 'purple', 'rgba(50, 171, 96, 0.9)', 'red'] + original_water_types = [ + "Citric Acid Water 2%", + "Hydrogel", + "Hydrogel 5% Citric Acid", + "Water", + "Water 1% Citric Acid", + "Water 10% Sucrose", + "Water 15% Sucrose", + "Water 2% Citric Acid", + ] + original_colors = [ + "red", + "orange", + "blue", + "rgba(55, 128, 191, 0.7)", + "rgba(200, 128, 191, 0.7)", + "purple", + "rgba(50, 171, 96, 0.9)", + "red", + ] mapping = { watertype: color - for watertype, color in zip(original_water_types, original_colors)} + for watertype, color in zip(original_water_types, original_colors) + } - if key['watertype_name'] in original_water_types: + if key["watertype_name"] in original_water_types: water_type_color = dict( - **key, water_type_color=mapping[key['watertype_name']]) + **key, water_type_color=mapping[key["watertype_name"]] + ) else: water_type_color = dict( - **key, water_type_color='rgba({}, {}, {}, 0.7)'.format( - np.random.randint(255), np.random.randint(255), np.random.randint(255))) + **key, + water_type_color="rgba({}, {}, {}, 0.7)".format( + np.random.randint(255), + np.random.randint(255), + np.random.randint(255), + ) + ) self.insert1(water_type_color) -behavior_shared = dj.create_virtual_module('behavior_shared', 'ibl_plotting_behavior') +behavior_shared = dj.create_virtual_module("behavior_shared", "ibl_plotting_behavior") class WaterWeight(dj.Part): @@ -64,7 +83,8 @@ def make(self, key, d): subj = subject.Subject & key # plot for water weight water_type_names, water_type_colors = WaterTypeColor.fetch( - 'watertype_name', 'water_type_color') + "watertype_name", "water_type_color" + ) water_type_map = dict() for watertype, color in zip(water_type_names, water_type_colors): @@ -74,78 +94,81 @@ def make(self, key, d): water_weight_entry = key.copy() # get water and date water_info_query = (action.WaterAdministration & subj).proj( - 'water_administered', 'watertype_name', - water_date='DATE(administration_time)') + "water_administered", + "watertype_name", + water_date="DATE(administration_time)", + ) water_info = water_info_query.fetch(as_dict=True) water_info = pd.DataFrame(water_info) water_types = water_info.watertype_name.unique() water_info_type = water_info.pivot_table( - index='water_date', columns='watertype_name', - values='water_administered', aggfunc='sum') + index="water_date", + columns="watertype_name", + values="water_administered", + aggfunc="sum", + ) max_water_intake = np.nanmax(water_info_type.values) + 0.2 yrange_water = [0, max_water_intake] - water_info_type = water_info_type.where( - (pd.notnull(water_info_type)), None) + water_info_type = water_info_type.where((pd.notnull(water_info_type)), None) weight_info_query = (action.Weighing & subj).proj( - 'weight', weighing_date='DATE(weighing_time)') + "weight", weighing_date="DATE(weighing_time)" + ) weight_info = weight_info_query.fetch(as_dict=True) weight_info = pd.DataFrame(weight_info) weight_info = weight_info.where((pd.notnull(weight_info)), None) # get water restriction period water_restrictions = (action.WaterRestriction & subj).proj( - 'reference_weight', - res_start='DATE(restriction_start_time)', - res_end='DATE(restriction_end_time)') + "reference_weight", + res_start="DATE(restriction_start_time)", + res_end="DATE(restriction_end_time)", + ) data = [ go.Bar( - x=[t.strftime('%Y-%m-%d') - for t in water_info_type.index.tolist()], + x=[t.strftime("%Y-%m-%d") for t in water_info_type.index.tolist()], y=water_info_type[water_type].tolist(), marker=dict(color=water_type_map[water_type]), name=water_type, - yaxis='y1' + yaxis="y1", ) for water_type in water_types ] data.append( go.Scatter( - x=[t.strftime('%Y-%m-%d') - for t in weight_info['weighing_date'].tolist()], - y=weight_info['weight'].tolist(), - mode='lines+markers', - name='Weight', + x=[ + t.strftime("%Y-%m-%d") + for t in weight_info["weighing_date"].tolist() + ], + y=weight_info["weight"].tolist(), + mode="lines+markers", + name="Weight", marker=dict( - size=6, - color='black', - line=dict( - color='white', - width=1) + size=6, color="black", line=dict(color="white", width=1) ), - legendgroup='weight', - yaxis='y2' - )) + legendgroup="weight", + yaxis="y2", + ) + ) # monday marks - data = putils.create_monday_plot(data, yrange_water, d['mondays']) + data = putils.create_monday_plot(data, yrange_water, d["mondays"]) # water restriction marks and reference weight marks - for iwater, water_res in \ - enumerate(water_restrictions.fetch(as_dict=True)): + for iwater, water_res in enumerate(water_restrictions.fetch(as_dict=True)): if iwater == 0: show_res_legend = True else: show_res_legend = False - res_start = water_res['res_start'].strftime('%Y-%m-%d') + res_start = water_res["res_start"].strftime("%Y-%m-%d") - if water_res['res_end']: - res_end = water_res['res_end'].strftime('%Y-%m-%d') + if water_res["res_end"]: + res_end = water_res["res_end"].strftime("%Y-%m-%d") else: - res_end = d['last_date_str'] + res_end = d["last_date_str"] data.append( go.Scatter( x=[res_start, res_start], @@ -153,16 +176,16 @@ def make(self, key, d): mode="lines", line=dict( width=1, - color='red', + color="red", ), - name='Water restriction start', - yaxis='y1', + name="Water restriction start", + yaxis="y1", showlegend=show_res_legend, - legendgroup='restriction' + legendgroup="restriction", ) ) - if water_res['res_end']: + if water_res["res_end"]: data.append( go.Scatter( @@ -171,88 +194,69 @@ def make(self, key, d): mode="lines", line=dict( width=1, - color='darkgreen', + color="darkgreen", ), - name='Water restriction end', - yaxis='y1', + name="Water restriction end", + yaxis="y1", showlegend=show_res_legend, - legendgroup='restriction' + legendgroup="restriction", ) ) data.append( go.Scatter( x=[res_start, res_end], - y=[water_res['reference_weight']*0.85, - water_res['reference_weight']*0.85], + y=[ + water_res["reference_weight"] * 0.85, + water_res["reference_weight"] * 0.85, + ], mode="lines", - line=dict( - width=1, - color='orange', - dash='dashdot' - ), - name='85% reference weight', - yaxis='y2', + line=dict(width=1, color="orange", dash="dashdot"), + name="85% reference weight", + yaxis="y2", showlegend=show_res_legend, - legendgroup='weight_ref', - hoverinfo='y' + legendgroup="weight_ref", + hoverinfo="y", ) ) data.append( go.Scatter( x=[res_start, res_end], - y=[water_res['reference_weight']*0.75, - water_res['reference_weight']*0.75], + y=[ + water_res["reference_weight"] * 0.75, + water_res["reference_weight"] * 0.75, + ], mode="lines", - line=dict( - width=1, - color='red', - dash='dashdot' - ), - name='75% reference weight', - yaxis='y2', + line=dict(width=1, color="red", dash="dashdot"), + name="75% reference weight", + yaxis="y2", showlegend=show_res_legend, - legendgroup='weight_ref', - hoverinfo='y' + legendgroup="weight_ref", + hoverinfo="y", ) ) layout = go.Layout( - yaxis=dict( - title='Water intake (mL)', - range=yrange_water - ), + yaxis=dict(title="Water intake (mL)", range=yrange_water), yaxis2=dict( - title='Weight (g)', - overlaying='y', - side='right', + title="Weight (g)", + overlaying="y", + side="right", ), width=1000, height=500, - title=dict( - text='Water intake and weight', - x=0.3, - y=0.9 - ), + title=dict(text="Water intake and weight", x=0.3, y=0.9), xaxis=dict( - title='Date', - range=[d['first_date_str'], d['last_date_str']] + title="Date", range=[d["first_date_str"], d["last_date_str"]] ), - legend=dict( - x=1.1, - y=0.9, - orientation='v'), - barmode='stack', - template=dict( - layout=dict( - plot_bgcolor="white" - ) - ) + legend=dict(x=1.1, y=0.9, orientation="v"), + barmode="stack", + template=dict(layout=dict(plot_bgcolor="white")), ) fig = go.Figure(data=data, layout=layout) - water_weight_entry['water_weight'] = fig.to_plotly_json() - print('inserting water weight ...') + water_weight_entry["water_weight"] = fig.to_plotly_json() + print("inserting water weight ...") self.insert1(water_weight_entry) @@ -261,20 +265,29 @@ def make(self, key, d): inspect.currentframe().f_locals, master=behavior_shared.CumulativeSummary, self=WaterWeight, - CumulativeSummary=behavior_shared.CumulativeSummary) + CumulativeSummary=behavior_shared.CumulativeSummary, +) -if '0.12' in dj.__version__: +if "0.12" in dj.__version__: schema.process_table_class(WaterWeight, context=context) -elif '0.13' in dj.__version__: +elif "0.13" in dj.__version__: schema._decorate_table(WaterWeight, context=context) else: - raise NotImplementedError('Cannot declare WaterWeight table without DataJoint 0.12 or 0.13.') + raise NotImplementedError( + "Cannot declare WaterWeight table without DataJoint 0.12 or 0.13." + ) -ingested_sessions = acquisition.Session & 'task_protocol is not NULL' \ - & behavior_ingest.TrialSet -subjects_alive = (subject.Subject - subject.Death) & 'sex != "U"' \ - & action.Weighing & action.WaterAdministration & ingested_sessions +ingested_sessions = ( + acquisition.Session & "task_protocol is not NULL" & behavior_ingest.TrialSet +) +subjects_alive = ( + (subject.Subject - subject.Death) + & 'sex != "U"' + & action.Weighing + & action.WaterAdministration + & ingested_sessions +) @schema @@ -284,10 +297,15 @@ class DailyLabSummary(dj.Computed): last_session_time: datetime # last date of session """ - sessions_lab = acquisition.Session * subjects_alive * subject.SubjectLab \ + sessions_lab = ( + acquisition.Session + * subjects_alive + * subject.SubjectLab * behavior.SessionTrainingStatus - key_source = dj.U('lab_name', 'last_session_time') & reference.Lab.aggr( - sessions_lab, last_session_time='MAX(session_start_time)') + ) + key_source = dj.U("lab_name", "last_session_time") & reference.Lab.aggr( + sessions_lab, last_session_time="MAX(session_start_time)" + ) def make(self, key): @@ -296,75 +314,104 @@ def make(self, key): last_sessions = subjects.aggr( ingested_sessions * behavior.SessionTrainingStatus, - 'subject_nickname', session_start_time='max(session_start_time)') - last_sessions = last_sessions * acquisition.Session * \ - behavior.SessionTrainingStatus - - filerecord = data.FileRecord & subjects.fetch('KEY') & 'relative_path LIKE "%alf%"' + "subject_nickname", + session_start_time="max(session_start_time)", + ) + last_sessions = ( + last_sessions * acquisition.Session * behavior.SessionTrainingStatus + ) + + filerecord = ( + data.FileRecord & subjects.fetch("KEY") & 'relative_path LIKE "%alf%"' + ) last_filerecord = subjects.aggr( - filerecord, latest_session_on_flatiron='max(session_start_time)') - - summary = (last_sessions*last_filerecord).proj( - 'subject_nickname', 'task_protocol', 'training_status', - 'latest_session_on_flatiron').fetch( - as_dict=True) + filerecord, latest_session_on_flatiron="max(session_start_time)" + ) + + summary = ( + (last_sessions * last_filerecord) + .proj( + "subject_nickname", + "task_protocol", + "training_status", + "latest_session_on_flatiron", + ) + .fetch(as_dict=True) + ) for entry in summary: subj = subject.Subject & entry - protocol = entry['task_protocol'].partition('ChoiseWorld')[0] + protocol = entry["task_protocol"].partition("ChoiseWorld")[0] # --- check for data availability --- # last session_start_time in table acquisition.Session if not len(acquisition.Session & subj): - data_update_status = 'No behavioral data collected' + data_update_status = "No behavioral data collected" else: # get the latest session query last_session = subj.aggr( - acquisition.Session, - session_start_time='max(session_start_time)') + acquisition.Session, session_start_time="max(session_start_time)" + ) last_session_date = last_session.proj( - session_date='date(session_start_time)') + session_date="date(session_start_time)" + ) - last_date = last_session_date.fetch1( - 'session_date').strftime('%Y-%m-%d') + last_date = last_session_date.fetch1("session_date").strftime( + "%Y-%m-%d" + ) # existence of CompleteTrialSet tuple for latest session if not len(behavior_ingest.CompleteTrialSession & last_session): data_update_status = """ Data in the last session on {} were not uploaded or partially uploaded to FlatIron. - """.format(last_date) + """.format( + last_date + ) elif not len(behavior_ingest.TrialSet & last_session): data_update_status = """ Ingest error in TrialSet for data on {}. - """.format(last_date) + """.format( + last_date + ) elif not len(behavior.BehavioralSummaryByDate & last_session_date): data_update_status = """ Ingest error in BehavioralSummaryByDate for data on {} - """.format(last_date) - elif not len(behavior_shared.CumulativeSummary & last_session.proj(latest_session='session_date')): + """.format( + last_date + ) + elif not len( + behavior_shared.CumulativeSummary + & last_session.proj(latest_session="session_date") + ): data_update_status = """ Error in creating cumulative plots for data on {} - """.format(last_date) + """.format( + last_date + ) else: data_update_status = """ Data up to date - """.format(last_date) + """.format( + last_date + ) subject_summary = dict( **key, - subject_uuid=entry['subject_uuid'], - subject_nickname=entry['subject_nickname'], - latest_session_ingested=entry['session_start_time'], - latest_session_on_flatiron=entry['latest_session_on_flatiron'], - latest_task_protocol=entry['task_protocol'], - latest_training_status=entry['training_status'], + subject_uuid=entry["subject_uuid"], + subject_nickname=entry["subject_nickname"], + latest_session_ingested=entry["session_start_time"], + latest_session_on_flatiron=entry["latest_session_on_flatiron"], + latest_task_protocol=entry["task_protocol"], + latest_training_status=entry["training_status"], n_sessions_current_protocol=len( - ingested_sessions & subj & - 'task_protocol LIKE "{}%"'.format(protocol)), + ingested_sessions + & subj + & 'task_protocol LIKE "{}%"'.format(protocol) + ), data_update_status=data_update_status ) self.SubjectSummary.insert1(subject_summary) @@ -396,14 +443,20 @@ def detect_dead_subjects_from_alyx(cls, insert_into_death_table=False): """ dead_subj_uuids = [] - for subj in tqdm(cls.SubjectSummary.fetch('KEY')): + for subj in tqdm(cls.SubjectSummary.fetch("KEY")): - dead_subj = one.alyx.rest('subjects', 'list', id=str(subj['subject_uuid']), alive=False) + dead_subj = one.alyx.rest( + "subjects", "list", id=str(subj["subject_uuid"]), alive=False + ) if dead_subj: - dead_subj_uuids.append(subj['subject_uuid']) + dead_subj_uuids.append(subj["subject_uuid"]) if insert_into_death_table: - subject.Death.insert1(dict(subject_uuid=subj['subject_uuid'], - death_date=dead_subj[0]['death_date']), - skip_duplicates=True) + subject.Death.insert1( + dict( + subject_uuid=subj["subject_uuid"], + death_date=dead_subj[0]["death_date"], + ), + skip_duplicates=True, + ) return dead_subj_uuids diff --git a/ibl_pipeline/plotting/behavior_shared.py b/ibl_pipeline/plotting/behavior_shared.py index 28746343..8905bf45 100644 --- a/ibl_pipeline/plotting/behavior_shared.py +++ b/ibl_pipeline/plotting/behavior_shared.py @@ -8,6 +8,7 @@ import plotly import plotly.graph_objs as go import statsmodels.stats.proportion as smp + from ibl_pipeline import acquisition, action from ibl_pipeline import behavior as behavior_ingest from ibl_pipeline import data, reference, subject diff --git a/ibl_pipeline/plotting/ephys.py b/ibl_pipeline/plotting/ephys.py index 476d8ba0..02a76fdb 100755 --- a/ibl_pipeline/plotting/ephys.py +++ b/ibl_pipeline/plotting/ephys.py @@ -1,60 +1,61 @@ +import json +from os import path + +import boto3 +import colorlover as cl import datajoint as dj -from ibl_pipeline import subject, acquisition -from ibl_pipeline.analyses import ephys as ephys_analyses -from ibl_pipeline.plotting import plotting_utils_ephys as putils -from ibl_pipeline.plotting import utils -from ibl_pipeline.plotting import ephys_plotting as eplt -from ibl_pipeline.plotting.figure_model import PngFigure, GifFigure -from ibl_pipeline.plotting.utils import RedBlueColorBar import numpy as np import pandas as pd import plotly import plotly.graph_objs as go -import json -from os import path -from tqdm import tqdm -import boto3 +import seaborn as sns from brainbox import population from matplotlib.axes import Axes -import seaborn as sns -import colorlover as cl +from tqdm import tqdm +from ibl_pipeline import acquisition, subject +from ibl_pipeline.analyses import ephys as ephys_analyses +from ibl_pipeline.plotting import ephys_plotting as eplt +from ibl_pipeline.plotting import plotting_utils_ephys as putils +from ibl_pipeline.plotting import utils +from ibl_pipeline.plotting.figure_model import GifFigure, PngFigure +from ibl_pipeline.plotting.utils import RedBlueColorBar -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") -if mode == 'public': - root_path = 'public' +if mode == "public": + root_path = "public" else: - root_path = '' + root_path = "" -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_plotting_ephys') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_plotting_ephys") try: - wheel = dj.create_virtual_module('wheel', 'group_shared_wheel') + wheel = dj.create_virtual_module("wheel", "group_shared_wheel") except dj.DataJointError: from ibl_pipeline.group_shared import wheel try: - behavior = dj.create_virtual_module('behavior', 'ibl_behavior') + behavior = dj.create_virtual_module("behavior", "ibl_behavior") except dj.DataJointError: from ibl_pipeline import behavior try: - ephys = dj.create_virtual_module('ephys', 'ibl_ephys') + ephys = dj.create_virtual_module("ephys", "ibl_ephys") except dj.DataJointError: from ibl_pipeline import ephys # get external bucket -store = dj.config['stores']['plotting'] +store = dj.config["stores"]["plotting"] s3 = boto3.resource( - 's3', - aws_access_key_id=store['access_key'], - aws_secret_access_key=store['secret_key']) + "s3", + aws_access_key_id=store["access_key"], + aws_secret_access_key=store["secret_key"], +) -bucket = s3.Bucket(store['bucket']) +bucket = s3.Bucket(store["bucket"]) @schema @@ -62,14 +63,18 @@ class Sorting(dj.Lookup): definition = """ sort_by: varchar(32) """ - contents = zip(['trial_id', - 'response - stim on', - 'feedback - stim on', - 'feedback - response', - 'movement - stim on', - 'feedback - movement', - 'contrast', - 'feedback type']) + contents = zip( + [ + "trial_id", + "response - stim on", + "feedback - stim on", + "feedback - response", + "movement - stim on", + "feedback - movement", + "contrast", + "feedback type", + ] + ) @schema @@ -86,25 +91,69 @@ class ValidAlignSort(dj.Lookup): label_variable='' : varchar(64) # label variable in the plot """ contents = [ - ['stim on', 'trial_id', 'regular', 0, 'trial_id', 'trial_id', '', ''], - ['stim on', 'contrast', 'regular', 0, 'trial_signed_contrast', - 'trial_signed_contrast', '', ''], - ['stim on', 'feedback - stim on', 'difference', 0, '', - 'trial_feedback_time - trial_stim_on_time', - 'trial_feedback_time - trial_stim_on_time', 'feedback'], - ['stim on', 'movement - stim on', 'difference', 1, '', - 'movement_onset - trial_stim_on_time', - 'movement_onset - trial_stim_on_time', 'movement'], - ['movement', 'trial_id', 'regular', 1, 'trial_id', 'trial_id', '', ''], - ['movement', 'movement - stim on', 'difference', 1, '', - 'movement_onset - trial_stim_on_time', - 'trial_stim_on_time - movement_onset', 'stim on'], - ['movement', 'feedback - movement', 'difference', 1, '', - 'trial_feedback_time - movement_onset', - 'trial_feedback_time - movement_onset', 'feedback'], - ['feedback', 'trial_id', 'regular', 0, 'trial_id', 'trial_id', '', ''], - ['feedback', 'feedback type', 'regular', 0, - 'trial_feedback_type', 'trial_feedback_type, trial_id', '', ''] + ["stim on", "trial_id", "regular", 0, "trial_id", "trial_id", "", ""], + [ + "stim on", + "contrast", + "regular", + 0, + "trial_signed_contrast", + "trial_signed_contrast", + "", + "", + ], + [ + "stim on", + "feedback - stim on", + "difference", + 0, + "", + "trial_feedback_time - trial_stim_on_time", + "trial_feedback_time - trial_stim_on_time", + "feedback", + ], + [ + "stim on", + "movement - stim on", + "difference", + 1, + "", + "movement_onset - trial_stim_on_time", + "movement_onset - trial_stim_on_time", + "movement", + ], + ["movement", "trial_id", "regular", 1, "trial_id", "trial_id", "", ""], + [ + "movement", + "movement - stim on", + "difference", + 1, + "", + "movement_onset - trial_stim_on_time", + "trial_stim_on_time - movement_onset", + "stim on", + ], + [ + "movement", + "feedback - movement", + "difference", + 1, + "", + "trial_feedback_time - movement_onset", + "trial_feedback_time - movement_onset", + "feedback", + ], + ["feedback", "trial_id", "regular", 0, "trial_id", "trial_id", "", ""], + [ + "feedback", + "feedback type", + "regular", + 0, + "trial_feedback_type", + "trial_feedback_type, trial_id", + "", + "", + ], ] @@ -117,12 +166,12 @@ class RasterLayoutTemplate(dj.Lookup): """ def get_legend(trials_type, legend_group): - if trials_type == 'left': - color = 'green' - elif trials_type == 'right': - color = 'blue' - elif trials_type == 'incorrect': - color = 'red' + if trials_type == "left": + color = "green" + elif trials_type == "right": + color = "blue" + elif trials_type == "incorrect": + color = "red" else: raise NameError( f""" @@ -130,150 +179,130 @@ def get_legend(trials_type, legend_group): "left", "right", "incorrect" """ ) - if legend_group == 'spike': - marker = 'markers' + if legend_group == "spike": + marker = "markers" else: - marker = 'lines' + marker = "lines" return go.Scatter( x=[5], y=[10], mode=marker, - marker=dict( - size=6, - color=color, - opacity=0.5 - ), - name='{} time on {} trials'.format(legend_group, trials_type), - legendgroup=legend_group + marker=dict(size=6, color=color, opacity=0.5), + name="{} time on {} trials".format(legend_group, trials_type), + legendgroup=legend_group, ) - legend_left = get_legend('left', 'spike') - legend_right = get_legend('right', 'spike') - legend_incorrect = get_legend('incorrect', 'spike') + legend_left = get_legend("left", "spike") + legend_right = get_legend("right", "spike") + legend_incorrect = get_legend("incorrect", "spike") - legend_mark_left = get_legend('left', 'event') - legend_mark_right = get_legend('right', 'event') - legend_mark_incorrect = get_legend('incorrect', 'event') + legend_mark_left = get_legend("left", "event") + legend_mark_right = get_legend("right", "event") + legend_mark_incorrect = get_legend("incorrect", "event") layout = go.Layout( - images=[dict( - source='', - sizex=2, - #sizey=y_lim[1] - y_lim[0], - x=-1, - #y=y_lim[1], - xref='x', - yref='y', - sizing='stretch', - layer='below' - )], + images=[ + dict( + source="", + sizex=2, + # sizey=y_lim[1] - y_lim[0], + x=-1, + # y=y_lim[1], + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], width=580, height=370, - margin=go.layout.Margin( - l=50, - r=30, - b=40, - t=80, - pad=0 - ), - title=dict( - text='Raster, aligned to ', # add align_event here - x=0.21, - y=0.87 - ), - xaxis=dict( - title='Time (sec)', - range=[-1, 1], - showgrid=False - ), - yaxis=dict( - title='Trial idx', - showgrid=False - ), + margin=go.layout.Margin(l=50, r=30, b=40, t=80, pad=0), + title=dict(text="Raster, aligned to ", x=0.21, y=0.87), # add align_event here + xaxis=dict(title="Time (sec)", range=[-1, 1], showgrid=False), + yaxis=dict(title="Trial idx", showgrid=False), ) axis = go.Scatter( x=[-1, 1], # y=y_lim, - mode='markers', + mode="markers", marker=dict(opacity=0), - showlegend=False + showlegend=False, ) axis2 = go.Scatter( x=[-1, 1], # y=y_lim, - mode='markers', + mode="markers", marker=dict(opacity=0), showlegend=False, - yaxis='y2' + yaxis="y2", ) # template_0: sorting_var trial_id data0 = [axis] template_0 = dict( template_idx=0, - raster_data_template=go.Figure( - data=data0, layout=layout).to_plotly_json()) + raster_data_template=go.Figure(data=data0, layout=layout).to_plotly_json(), + ) # template_1: sorting_var feedback - stim on etc. - data1 = [axis, legend_left, legend_right, legend_incorrect, - legend_mark_left, legend_mark_right, legend_mark_incorrect] + data1 = [ + axis, + legend_left, + legend_right, + legend_incorrect, + legend_mark_left, + legend_mark_right, + legend_mark_incorrect, + ] template_1 = dict( template_idx=1, - raster_data_template=go.Figure( - data=data1, layout=layout).to_plotly_json()) + raster_data_template=go.Figure(data=data1, layout=layout).to_plotly_json(), + ) # template_2: sorting_var contrast data2 = [axis2] - fig = go.Figure( - data=data2, layout=layout) + fig = go.Figure(data=data2, layout=layout) fig.update_layout( yaxis2=dict( - title='Contrast', + title="Contrast", # range=y_lim, showgrid=False, - overlaying='y', - side='right', - tickmode='array', + overlaying="y", + side="right", + tickmode="array", # tickvals=tick_pos, # from Raster table # ticktext=contrasts # from Raster table - )) - template_2 = dict( - template_idx=2, - raster_data_template=fig.to_plotly_json() + ) ) + template_2 = dict(template_idx=2, raster_data_template=fig.to_plotly_json()) # template_3: sorting_var feedback type incorrect = go.Scatter( x=[-2, -1], y=[-2, -1], - fill='tozeroy', - fillcolor='rgba(218, 59, 70, 0.5)', - name='Incorrect', - mode='none' + fill="tozeroy", + fillcolor="rgba(218, 59, 70, 0.5)", + name="Incorrect", + mode="none", ) correct = go.Scatter( x=[-2, -1], y=[-2, -1], - fill='tonexty', - fillcolor='rgba(65, 124, 168, 0.5)', - name='Correct', - mode='none' + fill="tonexty", + fillcolor="rgba(65, 124, 168, 0.5)", + name="Correct", + mode="none", ) data3 = [axis, incorrect, correct] template_3 = dict( template_idx=3, - raster_data_template=go.Figure( - data=data3, layout=layout).to_plotly_json()) + raster_data_template=go.Figure(data=data3, layout=layout).to_plotly_json(), + ) - contents = [ - template_0, - template_1, - template_2, - template_3 - ] + contents = [template_0, template_1, template_2, template_3] @schema @@ -290,8 +319,12 @@ class Raster(dj.Computed): -> RasterLayoutTemplate """ - key_source = ephys.DefaultCluster * ValidAlignSort & behavior.TrialSet & \ - ephys.AlignedTrialSpikes & [{'wheel_needed': 0}, wheel.MovementTimes] + key_source = ( + ephys.DefaultCluster * ValidAlignSort + & behavior.TrialSet + & ephys.AlignedTrialSpikes + & [{"wheel_needed": 0}, wheel.MovementTimes] + ) def plot_empty(ax, x_lim=[-1, 1], y_lim=[0, 2]): ax.set_xlim(x_lim) @@ -302,37 +335,37 @@ def plot_empty(ax, x_lim=[-1, 1], y_lim=[0, 2]): def plot_regular(trials, key, ax, x_lim=[-1, 1]): relevant_field, sorting_variable = (ValidAlignSort & key).fetch1( - 'relevant_field', 'sorting_variable') + "relevant_field", "sorting_variable" + ) spk_times, field = (trials & key).fetch( - 'trial_spike_times', relevant_field, - order_by=sorting_variable) + "trial_spike_times", relevant_field, order_by=sorting_variable + ) spk_trial_ids = np.hstack( - [[trial_id] * len(spk_time) - for trial_id, spk_time in enumerate(spk_times)]) + [[trial_id] * len(spk_time) for trial_id, spk_time in enumerate(spk_times)] + ) - ax.plot(np.hstack(spk_times), spk_trial_ids, 'k.', alpha=0.5, - markeredgewidth=0) + ax.plot(np.hstack(spk_times), spk_trial_ids, "k.", alpha=0.5, markeredgewidth=0) - if key['sort_by'] != 'trial_id': + if key["sort_by"] != "trial_id": # plot different contrasts or different feedback types as background values, u_inds = np.unique(field, return_index=True) u_inds = list(u_inds) + [len(field)] - if key['sort_by'] == 'contrast': - tick_positions = np.add(u_inds[1:], u_inds[:-1])/2 + if key["sort_by"] == "contrast": + tick_positions = np.add(u_inds[1:], u_inds[:-1]) / 2 if len(values) == 1: - if values[0] == 1.: - puor = ['rgb(84, 39, 136)'] - if values[0] == -1.: - puor = ['rgb(179, 88, 6)'] + if values[0] == 1.0: + puor = ["rgb(84, 39, 136)"] + if values[0] == -1.0: + puor = ["rgb(179, 88, 6)"] else: - puor = ['rgb(247, 247, 247)'] + puor = ["rgb(247, 247, 247)"] elif len(values) == 2: - puor = ['rgb(179, 88, 6)', 'rgb(84, 39, 136)'] + puor = ["rgb(179, 88, 6)", "rgb(84, 39, 136)"] else: - puor = cl.scales[str(len(values))]['div']['PuOr'] + puor = cl.scales[str(len(values))]["div"]["PuOr"] colors = np.divide(cl.to_numeric(puor), 255) alpha = 0.8 else: @@ -340,8 +373,9 @@ def plot_regular(trials, key, ax, x_lim=[-1, 1]): alpha = 0.5 for i, ind in enumerate(u_inds[:-1]): - ax.fill_between([-1, 1], u_inds[i], u_inds[i+1]-1, - color=colors[i], alpha=alpha) + ax.fill_between( + [-1, 1], u_inds[i], u_inds[i + 1] - 1, color=colors[i], alpha=alpha + ) ax.set_xlim(x_lim[0], x_lim[1]) @@ -351,51 +385,62 @@ def plot_regular(trials, key, ax, x_lim=[-1, 1]): y_lim = 10 ax.set_ylim(-2, y_lim) - if key['sort_by'] == 'contrast': + if key["sort_by"] == "contrast": return ax, x_lim, [-2, y_lim], values, tick_positions else: return ax, x_lim, [-2, y_lim] def plot_difference(trials, key, ax, x_lim=[-1, 1]): - sorting_variable, mark_variable, label_variable = \ - (ValidAlignSort & key).fetch1( - 'sorting_variable', 'mark_variable', 'label_variable') + sorting_variable, mark_variable, label_variable = (ValidAlignSort & key).fetch1( + "sorting_variable", "mark_variable", "label_variable" + ) - trials_left = trials & 'trial_response_choice="CW"' & \ - 'trial_signed_contrast < 0' - trials_right = trials & 'trial_response_choice="CCW"' & \ - 'trial_signed_contrast > 0' + trials_left = ( + trials & 'trial_response_choice="CW"' & "trial_signed_contrast < 0" + ) + trials_right = ( + trials & 'trial_response_choice="CCW"' & "trial_signed_contrast > 0" + ) trials_incorrect = trials - trials_left.proj() - trials_right.proj() trial_groups = [ - {'trials': trials_incorrect, 'color': 'r', 'label': 'incorrect trials'}, - {'trials': trials_left, 'color': 'g', 'label': 'left trials'}, - {'trials': trials_right, 'color': 'b', 'label': 'right trials'} + {"trials": trials_incorrect, "color": "r", "label": "incorrect trials"}, + {"trials": trials_left, "color": "g", "label": "left trials"}, + {"trials": trials_right, "color": "b", "label": "right trials"}, ] base = 0 for trial_group in trial_groups: - spk_times, marking_points = \ - (trial_group['trials'].proj( - 'trial_spike_times', - sort=sorting_variable, - mark_point=mark_variable) & key).fetch( - 'trial_spike_times', 'mark_point', order_by='sort') + spk_times, marking_points = ( + trial_group["trials"].proj( + "trial_spike_times", sort=sorting_variable, mark_point=mark_variable + ) + & key + ).fetch("trial_spike_times", "mark_point", order_by="sort") if len(spk_times) and len(np.hstack(spk_times)): spk_trial_ids = np.hstack( - [[trial_id + base] * len(spk_time) - for trial_id, spk_time in enumerate(spk_times)]) - ax.plot(np.hstack(spk_times), spk_trial_ids, - '{}.'.format(trial_group['color']), - alpha=0.5, markeredgewidth=0, - label=trial_group['label']) - ax.plot(marking_points, - np.add(range(len(spk_times)), base), - trial_group['color'], - label=label_variable) + [ + [trial_id + base] * len(spk_time) + for trial_id, spk_time in enumerate(spk_times) + ] + ) + ax.plot( + np.hstack(spk_times), + spk_trial_ids, + "{}.".format(trial_group["color"]), + alpha=0.5, + markeredgewidth=0, + label=trial_group["label"], + ) + ax.plot( + marking_points, + np.add(range(len(spk_times)), base), + trial_group["color"], + label=label_variable, + ) else: spk_trial_ids = [base] base = max(spk_trial_ids) @@ -409,76 +454,83 @@ def plot_difference(trials, key, ax, x_lim=[-1, 1]): def make(self, key): cluster = ephys.DefaultCluster & key field_list = [ - 'trial_start_time', - 'trial_stim_on_time', - 'trial_response_time', - 'trial_feedback_time', - 'trial_feedback_type', - 'trial_response_choice', - 'trial_spike_times', + "trial_start_time", + "trial_stim_on_time", + "trial_response_time", + "trial_feedback_time", + "trial_feedback_type", + "trial_response_choice", + "trial_spike_times", ] field_dict = dict( - trial_duration='trial_end_time-trial_start_time', + trial_duration="trial_end_time-trial_start_time", trial_signed_contrast="""trial_stim_contrast_right - - trial_stim_contrast_left""" + trial_stim_contrast_left""", + ) + trials = ( + (behavior.TrialSet.Trial * ephys.AlignedTrialSpikes & cluster).proj( + *field_list, **field_dict + ) + & "trial_duration < 5" + & 'trial_response_choice!="No Go"' + & key ) - trials = (behavior.TrialSet.Trial * - ephys.AlignedTrialSpikes & cluster).proj( - *field_list, **field_dict - ) & 'trial_duration < 5' & 'trial_response_choice!="No Go"' & key - wheel_needed = (ValidAlignSort & key).fetch1('wheel_needed') + wheel_needed = (ValidAlignSort & key).fetch1("wheel_needed") if wheel_needed: - trials = (trials * wheel.MovementTimes).proj( - ..., 'movement_onset') - - if key['sort_by'] == 'trial_id': - key['template_idx'] = 0 - elif key['sort_by'] == 'contrast': - key['template_idx'] = 2 - elif key['sort_by'] == 'feeback type': - key['template_idx'] = 3 + trials = (trials * wheel.MovementTimes).proj(..., "movement_onset") + + if key["sort_by"] == "trial_id": + key["template_idx"] = 0 + elif key["sort_by"] == "contrast": + key["template_idx"] = 2 + elif key["sort_by"] == "feeback type": + key["template_idx"] = 3 else: - key['template_idx'] = 1 + key["template_idx"] = 1 - cond_type = (ValidAlignSort & key).fetch1('condition_type') + cond_type = (ValidAlignSort & key).fetch1("condition_type") if not len(trials): draw = Raster.plot_empty arg = dict() else: arg = dict(trials=trials, key=key) - if cond_type == 'regular': + if cond_type == "regular": draw = Raster.plot_regular else: draw = Raster.plot_difference fig = PngFigure(draw, arg, dpi=60, transparent=True) - if key['sort_by'] == 'contrast': + if key["sort_by"] == "contrast": if len(trials): - key['plot_contrasts'] = fig.other_returns[0] - key['plot_contrast_tick_pos'] = fig.other_returns[1] + key["plot_contrasts"] = fig.other_returns[0] + key["plot_contrast_tick_pos"] = fig.other_returns[1] else: - key['plot_contrasts'] = [0] - key['plot_contrast_tick_pos'] = [0] + key["plot_contrasts"] = [0] + key["plot_contrast_tick_pos"] = [0] - fig_link = path.join( - root_path, - 'raster', - str(key['subject_uuid']), - key['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(key['probe_idx']), - key['event'], - key['sort_by'], - str(key['cluster_id'])) + '.png' + fig_link = ( + path.join( + root_path, + "raster", + str(key["subject_uuid"]), + key["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(key["probe_idx"]), + key["event"], + key["sort_by"], + str(key["cluster_id"]), + ) + + ".png" + ) fig.upload_to_s3(bucket, fig_link) - key['plotting_data_link'] = fig_link - key['plot_ylim'] = fig.y_lim - key['mark_label'] = (ValidAlignSort & key).fetch1('label_variable') + key["plotting_data_link"] = fig_link + key["plot_ylim"] = fig.y_lim + key["mark_label"] = (ValidAlignSort & key).fetch1("label_variable") self.insert1(key) @@ -494,28 +546,26 @@ class PsthTemplate(dj.Lookup): left = go.Scatter( # x=psth_time, # fetched from the table Psth # y=psth_left, # fetched from the table Psth - mode='lines', - marker=dict( - size=6, - color='green'), - fill='tonexty', - fillcolor='rgba(0, 255, 0, 0.2)', - name='left trials, mean +/- s.e.m.' + mode="lines", + marker=dict(size=6, color="green"), + fill="tonexty", + fillcolor="rgba(0, 255, 0, 0.2)", + name="left trials, mean +/- s.e.m.", ) upper_left = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_left_upper), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), - fillcolor='rgba(0, 255, 0, 0.2)', + fillcolor="rgba(0, 255, 0, 0.2)", line=dict(width=0), - fill='tonexty', + fill="tonexty", showlegend=False, ) lower_left = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_left_lower), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), line=dict(width=0), showlegend=False, @@ -523,28 +573,26 @@ class PsthTemplate(dj.Lookup): right = go.Scatter( # x=psth_time, # fetched from the table Psth # y=psth_right, # fetched from the table Psth - mode='lines', - marker=dict( - size=6, - color='blue'), - fill='tonexty', - fillcolor='rgba(0, 0, 255, 0.2)', - name='right trials, mean +/- s.e.m.' + mode="lines", + marker=dict(size=6, color="blue"), + fill="tonexty", + fillcolor="rgba(0, 0, 255, 0.2)", + name="right trials, mean +/- s.e.m.", ) upper_right = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_right_upper), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), - fillcolor='rgba(0, 0, 255, 0.2)', + fillcolor="rgba(0, 0, 255, 0.2)", line=dict(width=0), - fill='tonexty', + fill="tonexty", showlegend=False, ) lower_right = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_right_lower), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), line=dict(width=0), showlegend=False, @@ -552,28 +600,26 @@ class PsthTemplate(dj.Lookup): incorrect = go.Scatter( # x=psth_time, # fetched from the table Psth # y=psth_incorrect, # fetched from the table Psth - mode='lines', - marker=dict( - size=6, - color='red'), - fillcolor='rgba(255, 0, 0, 0.2)', - fill='tonexty', - name='incorrect trials, mean +/- s.e.m.' + mode="lines", + marker=dict(size=6, color="red"), + fillcolor="rgba(255, 0, 0, 0.2)", + fill="tonexty", + name="incorrect trials, mean +/- s.e.m.", ) upper_incorrect = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_incorrect_upper), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), - fillcolor='rgba(255, 0, 0, 0.2)', + fillcolor="rgba(255, 0, 0, 0.2)", line=dict(width=0), - fill='tonexty', + fill="tonexty", showlegend=False, ) lower_incorrect = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_incorrect_lower), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), line=dict(width=0), showlegend=False, @@ -581,28 +627,26 @@ class PsthTemplate(dj.Lookup): all = go.Scatter( # x=psth_time, # fetched from the table Psth # y=psth_all, # fetched from the table Psth - mode='lines', - marker=dict( - size=6, - color='black'), - fill='tonexty', - fillcolor='rgba(0, 0, 0, 0.2)', - name='all trials, mean +/- s.e.m.' + mode="lines", + marker=dict(size=6, color="black"), + fill="tonexty", + fillcolor="rgba(0, 0, 0, 0.2)", + name="all trials, mean +/- s.e.m.", ) upper_all = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_all_upper), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), - fillcolor='rgba(0, 0, 0, 0.2)', + fillcolor="rgba(0, 0, 0, 0.2)", line=dict(width=0), - fill='tonexty', + fill="tonexty", showlegend=False, ) lower_all = go.Scatter( # x=list(psth_time), # fetched from the table Psth # y=list(psth_all_lower), # fetched from the table Psth - mode='lines', + mode="lines", marker=dict(color="#444"), line=dict(width=0), showlegend=False, @@ -611,43 +655,48 @@ class PsthTemplate(dj.Lookup): layout = go.Layout( width=700, height=370, - margin=go.layout.Margin( - l=50, - r=30, - b=40, - t=80, - pad=0 - ), + margin=go.layout.Margin(l=50, r=30, b=40, t=80, pad=0), title=dict( # text='PSTH, aligned to {} time'.format(align_event), # to be inserted x=0.2, - y=0.87 + y=0.87, ), xaxis=dict( - title='Time (sec)', + title="Time (sec)", # range=psth_x_lim, # to be filled, fetch from PsthData - showgrid=False - ), - yaxis=dict( - title='Firing rate (spks/sec)', - showgrid=False + showgrid=False, ), + yaxis=dict(title="Firing rate (spks/sec)", showgrid=False), ) contents = [ - dict(psth_template_idx=0, - psth_data_template=go.Figure( - data=[left, right, incorrect, all], - layout=layout).to_plotly_json()), - dict(psth_template_idx=1, - psth_data_template=go.Figure( - data=[lower_left, left, upper_left, - lower_right, right, upper_right, - lower_incorrect, incorrect, upper_incorrect, - lower_all, all, upper_all], - layout=layout).to_plotly_json() - ) - ] + dict( + psth_template_idx=0, + psth_data_template=go.Figure( + data=[left, right, incorrect, all], layout=layout + ).to_plotly_json(), + ), + dict( + psth_template_idx=1, + psth_data_template=go.Figure( + data=[ + lower_left, + left, + upper_left, + lower_right, + right, + upper_right, + lower_incorrect, + incorrect, + upper_incorrect, + lower_all, + all, + upper_all, + ], + layout=layout, + ).to_plotly_json(), + ), + ] @schema @@ -673,80 +722,121 @@ class Psth(dj.Computed): psth_ts=CURRENT_TIMESTAMP: timestamp -> PsthTemplate """ - key_source = ephys.DefaultCluster * (ephys.Event & 'event in ("stim on", "movement", "feedback")') & \ - behavior.TrialSet & ephys.AlignedTrialSpikes + key_source = ( + ephys.DefaultCluster + * (ephys.Event & 'event in ("stim on", "movement", "feedback")') + & behavior.TrialSet + & ephys.AlignedTrialSpikes + ) def make(self, key): - trials_all = (behavior.TrialSet.Trial * ephys.AlignedTrialSpikes & key).proj( - 'trial_start_time', 'trial_stim_on_time', - 'trial_response_time', 'trial_feedback_time', - 'trial_response_choice', 'trial_spike_times', - trial_duration='trial_end_time-trial_start_time', - trial_signed_contrast='trial_stim_contrast_right - trial_stim_contrast_left' - ) & 'trial_duration < 5' & 'trial_response_choice!="No Go"' + trials_all = ( + (behavior.TrialSet.Trial * ephys.AlignedTrialSpikes & key).proj( + "trial_start_time", + "trial_stim_on_time", + "trial_response_time", + "trial_feedback_time", + "trial_response_choice", + "trial_spike_times", + trial_duration="trial_end_time-trial_start_time", + trial_signed_contrast="trial_stim_contrast_right - trial_stim_contrast_left", + ) + & "trial_duration < 5" + & 'trial_response_choice!="No Go"' + ) x_lim = [-1, 1] if not len(trials_all): - self.insert1(dict( - **key, - psth_x_lim=','.join('{:0.2f}'.format(x) for x in x_lim), - psth_template_idx=0)) + self.insert1( + dict( + **key, + psth_x_lim=",".join("{:0.2f}".format(x) for x in x_lim), + psth_template_idx=0, + ) + ) return - trials_left = trials_all & 'trial_response_choice="CW"' \ - & 'trial_signed_contrast < 0' - trials_right = trials_all & 'trial_response_choice="CCW"' \ - & 'trial_signed_contrast > 0' - trials_incorrect = trials_all - \ - trials_right.proj() - trials_left.proj() + trials_left = ( + trials_all & 'trial_response_choice="CW"' & "trial_signed_contrast < 0" + ) + trials_right = ( + trials_all & 'trial_response_choice="CCW"' & "trial_signed_contrast > 0" + ) + trials_incorrect = trials_all - trials_right.proj() - trials_left.proj() - align_event = (ephys.Event & key).fetch1('event') + align_event = (ephys.Event & key).fetch1("event") entry = dict(**key) if len(trials_left): - _, psth_left, psth_left_upper, psth_left_lower = \ - putils.compute_psth_with_errorbar( - trials_left, 'left', align_event, as_plotly_obj=False) + ( + _, + psth_left, + psth_left_upper, + psth_left_lower, + ) = putils.compute_psth_with_errorbar( + trials_left, "left", align_event, as_plotly_obj=False + ) entry.update( - psth_left=','.join('{:0.5f}'.format(x) for x in psth_left), - psth_left_upper=','.join('{:0.5f}'.format(x) for x in psth_left_upper), - psth_left_lower=','.join('{:0.5f}'.format(x) for x in psth_left_lower)) + psth_left=",".join("{:0.5f}".format(x) for x in psth_left), + psth_left_upper=",".join("{:0.5f}".format(x) for x in psth_left_upper), + psth_left_lower=",".join("{:0.5f}".format(x) for x in psth_left_lower), + ) if len(trials_right): - _, psth_right, psth_right_upper, psth_right_lower = \ - putils.compute_psth_with_errorbar( - trials_right, 'right', align_event, as_plotly_obj=False) + ( + _, + psth_right, + psth_right_upper, + psth_right_lower, + ) = putils.compute_psth_with_errorbar( + trials_right, "right", align_event, as_plotly_obj=False + ) entry.update( - psth_right=','.join('{:0.5f}'.format(x) - for x in psth_right), - psth_right_upper=','.join('{:0.5f}'.format(x) - for x in psth_right_upper), - psth_right_lower=','.join('{:0.5f}'.format(x) - for x in psth_right_lower)) + psth_right=",".join("{:0.5f}".format(x) for x in psth_right), + psth_right_upper=",".join( + "{:0.5f}".format(x) for x in psth_right_upper + ), + psth_right_lower=",".join( + "{:0.5f}".format(x) for x in psth_right_lower + ), + ) if len(trials_incorrect): - _, psth_incorrect, psth_incorrect_upper, psth_incorrect_lower = \ - putils.compute_psth_with_errorbar( - trials_incorrect, 'incorrect', align_event, as_plotly_obj=False) + ( + _, + psth_incorrect, + psth_incorrect_upper, + psth_incorrect_lower, + ) = putils.compute_psth_with_errorbar( + trials_incorrect, "incorrect", align_event, as_plotly_obj=False + ) entry.update( - psth_incorrect=','.join('{:0.5f}'.format(x) - for x in psth_incorrect), - psth_incorrect_upper=','.join('{:0.5f}'.format(x) - for x in psth_incorrect_upper), - psth_incorrect_lower=','.join('{:0.5f}'.format(x) - for x in psth_incorrect_lower)) + psth_incorrect=",".join("{:0.5f}".format(x) for x in psth_incorrect), + psth_incorrect_upper=",".join( + "{:0.5f}".format(x) for x in psth_incorrect_upper + ), + psth_incorrect_lower=",".join( + "{:0.5f}".format(x) for x in psth_incorrect_lower + ), + ) - psth_time, psth_all, psth_all_upper, psth_all_lower = \ - putils.compute_psth_with_errorbar( - trials_all, 'all', align_event, as_plotly_obj=False) + ( + psth_time, + psth_all, + psth_all_upper, + psth_all_lower, + ) = putils.compute_psth_with_errorbar( + trials_all, "all", align_event, as_plotly_obj=False + ) entry.update( - psth_x_lim=','.join('{:0.2f}'.format(x) for x in x_lim), - psth_all=','.join('{:0.5f}'.format(x) for x in psth_all), - psth_all_upper=','.join('{:0.5f}'.format(x) for x in psth_all_upper), - psth_all_lower=','.join('{:0.5f}'.format(x) for x in psth_all_lower), - psth_time=','.join('{:0.5f}'.format(x) for x in psth_time), - psth_template_idx=1) + psth_x_lim=",".join("{:0.2f}".format(x) for x in x_lim), + psth_all=",".join("{:0.5f}".format(x) for x in psth_all), + psth_all_upper=",".join("{:0.5f}".format(x) for x in psth_all_upper), + psth_all_lower=",".join("{:0.5f}".format(x) for x in psth_all_lower), + psth_time=",".join("{:0.5f}".format(x) for x in psth_time), + psth_template_idx=1, + ) self.insert1(entry) @@ -761,7 +851,7 @@ class DepthRasterTemplate(dj.Lookup): axis = go.Scatter( # x=plot_xlim, # fetched from DepthRaster # y=plot_ylim, # fetched from DepthRaster - mode='markers', + mode="markers", marker=dict(opacity=0), showlegend=False, ) @@ -769,148 +859,136 @@ class DepthRasterTemplate(dj.Lookup): first_trial_mark = go.Scatter( # x=[first_start, first_start], # first_start fetched from DepthRaster # y=[plot_ylim[1]-20, plot_ylim[1]-80], # fetched from DepthRaster - mode='lines', - line=dict( - color='rgba(20, 40, 255, 1)', - width=1.5), - name='Start of the first trial' + mode="lines", + line=dict(color="rgba(20, 40, 255, 1)", width=1.5), + name="Start of the first trial", ) last_trial_mark = go.Scatter( # x=[last_end, last_end], # last_end fetched from DepthRaster # y=[y_lim[1]-20, y_lim[1]-80], # fetched from DepthRaster - mode='lines', - line=dict( - color='rgba(255, 20, 20, 1)', - width=1.5), - name='End of the last trial' + mode="lines", + line=dict(color="rgba(255, 20, 20, 1)", width=1.5), + name="End of the last trial", ) layout1 = go.Layout( - images=[dict( - source='', # to be replaced by the s3 link - # sizex=plot_xlim[1] - plot_xlim[0], # fetched from Driftmap - # sizey=plot_ylim[1] - plot_ylim[0], # fetched from Driftmap - # x=x_lim[0], # fetched from Driftmap - # y=y_lim[1], # fetched from Driftmap - xref='x', - yref='y', - sizing='stretch', - layer='below' - )], + images=[ + dict( + source="", # to be replaced by the s3 link + # sizex=plot_xlim[1] - plot_xlim[0], # fetched from Driftmap + # sizey=plot_ylim[1] - plot_ylim[0], # fetched from Driftmap + # x=x_lim[0], # fetched from Driftmap + # y=y_lim[1], # fetched from Driftmap + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], width=900, height=900, - margin=go.layout.Margin( - l=50, - r=30, - b=40, - t=80, - pad=0 - ), - title=dict( - text='Depth raster of the entire session', - x=0.45, - y=0.95 - ), + margin=go.layout.Margin(l=50, r=30, b=40, t=80, pad=0), + title=dict(text="Depth raster of the entire session", x=0.45, y=0.95), xaxis=dict( - title='Time (sec)', + title="Time (sec)", # range=plot_xlim, # fetched from DepthRaster - showgrid=False + showgrid=False, ), yaxis=dict( - title='Distance from the probe tip (µm)', + title="Distance from the probe tip (µm)", # range=plot_ylim, # fetched from DepthRaster - showgrid=False - )) + showgrid=False, + ), + ) trial_stim_on_mark = go.Scatter( # x=[trial_stim_on, trial_stim_on], # fetched from DepthRasterPerTrial # y=plot_ylim, # fetched from DepthRasterPerTrial - mode='lines', - line=dict( - color='rgba(20, 40, 255, 0.4)', - width=1.5), - name='Stim on' + mode="lines", + line=dict(color="rgba(20, 40, 255, 0.4)", width=1.5), + name="Stim on", ) trial_movement_mark = go.Scatter( # x=[trial_movement, trial_movement], # fetched from DepthRasterPerTrial # y=plot_ylim, # fetched from DepthRasterPerTrial - mode='lines', - line=dict( - color='rgba(200, 40, 25, 0.4)', - width=1.5), - name='Movement' + mode="lines", + line=dict(color="rgba(200, 40, 25, 0.4)", width=1.5), + name="Movement", ) - trial_feedback_mark = go.Scatter( # if null, skip this line + trial_feedback_mark = go.Scatter( # if null, skip this line # x=[trial_feedback, trial_feedback], # fetched from DepthRasterPerTrial # y=plot_ylim, # fetched from DepthRasterPerTrial - mode='lines', - line=dict( - color='rgba(60, 255, 10, 0.4)', - width=1.5), - name='Feedback' + mode="lines", + line=dict(color="rgba(60, 255, 10, 0.4)", width=1.5), + name="Feedback", ) trial_stim_off_mark = go.Scatter( # x=[trial_stim_off, trial_stim_off], # fetched from DepthRasterPerTrial # y=plot_ylim, # fetched from DepthRasterPerTrial - mode='lines', - line=dict( - color='rgba(230, 190, 20, 0.8)', - width=1.5), - name='Stim off' + mode="lines", + line=dict(color="rgba(230, 190, 20, 0.8)", width=1.5), + name="Stim off", ) layout2 = go.Layout( - images=[dict( - source='', # to be replaced by the s3 link - # sizex=plot_xlim[1] - plot_xlim[0], # fetched from DepthRasterPerTrial - # sizey=plot_ylim[1] - plot_ylim[0], # fetched from DepthRasterPerTrial - # x=x_lim[0], # fetched from DriftmapTrial - # y=y_lim[1], # fetched from Driftmap - xref='x', - yref='y', - sizing='stretch', - layer='below' - )], + images=[ + dict( + source="", # to be replaced by the s3 link + # sizex=plot_xlim[1] - plot_xlim[0], # fetched from DepthRasterPerTrial + # sizey=plot_ylim[1] - plot_ylim[0], # fetched from DepthRasterPerTrial + # x=x_lim[0], # fetched from DriftmapTrial + # y=y_lim[1], # fetched from Driftmap + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], width=1100, height=800, - margin=go.layout.Margin( - l=50, - r=30, - b=40, - t=80, - pad=0 - ), + margin=go.layout.Margin(l=50, r=30, b=40, t=80, pad=0), title=dict( # text=plot_title, # fetched from DepthRasterPerTrial x=0.45, - y=0.95 + y=0.95, ), xaxis=dict( - title='Time (sec)', + title="Time (sec)", # range=plot_xlim, # fetched from DepthRasterPerTrial - showgrid=False + showgrid=False, ), yaxis=dict( - title='Depth relative to the probe tip (µm)', + title="Depth relative to the probe tip (µm)", # range=plot_ylim, # fetched from DepthRasterPerTrial - showgrid=False - )) + showgrid=False, + ), + ) data1 = [axis, first_trial_mark, last_trial_mark] - data2 = [axis, trial_stim_on_mark, trial_movement_mark, - trial_feedback_mark, trial_stim_off_mark] + data2 = [ + axis, + trial_stim_on_mark, + trial_movement_mark, + trial_feedback_mark, + trial_stim_off_mark, + ] contents = [ - dict(depth_raster_template_idx=0, - depth_raster_template=go.Figure( - data=data1, - layout=layout1).to_plotly_json()), - dict(depth_raster_template_idx=1, - depth_raster_template=go.Figure( - data=data2, - layout=layout2).to_plotly_json())] + dict( + depth_raster_template_idx=0, + depth_raster_template=go.Figure( + data=data1, layout=layout1 + ).to_plotly_json(), + ), + dict( + depth_raster_template_idx=1, + depth_raster_template=go.Figure( + data=data2, layout=layout2 + ).to_plotly_json(), + ), + ] @schema @@ -935,38 +1013,42 @@ def make(self, key): link = path.join( root_path, - 'depthraster_session', - str(key['subject_uuid']), - key['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(key['probe_idx'])) + "depthraster_session", + str(key["subject_uuid"]), + key["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(key["probe_idx"]), + ) - fig_link_full = link + '.png' - fig_link_low = link + '_low.png' - fig_link_very_low = link + '_very_low.png' + fig_link_full = link + ".png" + fig_link_low = link + "_low.png" + fig_link_very_low = link + "_very_low.png" trials = (behavior.TrialSet.Trial & key).fetch() - key['plot_xlim'], key['plot_ylim'] = \ - putils.create_driftmap_plot( - spikes_data, - fig_dir=fig_link_full, store_type='s3') + key["plot_xlim"], key["plot_ylim"] = putils.create_driftmap_plot( + spikes_data, fig_dir=fig_link_full, store_type="s3" + ) putils.create_driftmap_plot( - spikes_data, dpi=25, fig_dir=fig_link_low, - store_type='s3') + spikes_data, dpi=25, fig_dir=fig_link_low, store_type="s3" + ) putils.create_driftmap_plot( - spikes_data, dpi=10, fig_dir=fig_link_very_low, - store_type='s3') + spikes_data, dpi=10, fig_dir=fig_link_very_low, store_type="s3" + ) if len(trials): - first_start = trials[0]['trial_start_time'] - last_end = trials[-1]['trial_end_time'] + first_start = trials[0]["trial_start_time"] + last_end = trials[-1]["trial_end_time"] else: first_start = 0 - last_end = (acquisition.Session & key).proj( - session_end_relative_to_start='session_end_time - session_start_time').fetch1( - 'session_end_relative_to_start') + last_end = ( + (acquisition.Session & key) + .proj( + session_end_relative_to_start="session_end_time - session_start_time" + ) + .fetch1("session_end_relative_to_start") + ) key.update( plotting_data_link=fig_link_full, @@ -974,7 +1056,7 @@ def make(self, key): plotting_data_link_very_low_res=fig_link_very_low, first_start=first_start, last_end=last_end, - depth_raster_template_idx=0 + depth_raster_template_idx=0, ) self.insert1(key) @@ -985,11 +1067,15 @@ class TrialType(dj.Lookup): definition = """ trial_type: varchar(32) """ - contents = zip(['Correct Left Contrast', - 'Correct Right Contrast', - 'Incorrect Left Contrast', - 'Incorrect Right Contrast', - 'Correct All']) + contents = zip( + [ + "Correct Left Contrast", + "Correct Right Contrast", + "Incorrect Left Contrast", + "Incorrect Right Contrast", + "Correct All", + ] + ) @schema @@ -1011,26 +1097,35 @@ class DepthRasterExampleTrial(dj.Computed): -> TrialType # type of trial -> DepthRasterTemplate """ - key_source = ephys.ProbeInsertion & behavior.TrialSet & \ - ephys.DefaultCluster & wheel.MovementTimes + key_source = ( + ephys.ProbeInsertion + & behavior.TrialSet + & ephys.DefaultCluster + & wheel.MovementTimes + ) def _get_trial_type(self, trial): - if trial['trial_response_choice'] == 'CW' and \ - trial['trial_feedback_type'] == 1: - return 'Correct Left Contrast' + if trial["trial_response_choice"] == "CW" and trial["trial_feedback_type"] == 1: + return "Correct Left Contrast" - elif trial['trial_response_choice'] == 'CCW' and \ - trial['trial_feedback_type'] == 1: - return 'Correct Right Contrast' + elif ( + trial["trial_response_choice"] == "CCW" + and trial["trial_feedback_type"] == 1 + ): + return "Correct Right Contrast" - elif trial['trial_response_choice'] == 'CW' and \ - trial['trial_feedback_type'] == -1: - return 'Incorrect Left Contrast' + elif ( + trial["trial_response_choice"] == "CW" + and trial["trial_feedback_type"] == -1 + ): + return "Incorrect Left Contrast" - elif trial['trial_response_choice'] == 'CCW' and \ - trial['trial_feedback_type'] == -1: - return 'Incorrect Right Contrast' + elif ( + trial["trial_response_choice"] == "CCW" + and trial["trial_feedback_type"] == -1 + ): + return "Incorrect Right Contrast" else: return None @@ -1039,107 +1134,125 @@ def _create_trial_raster(self, key, spikes_data, trial): trial_type = self._get_trial_type(trial) f = np.logical_and( - spikes_data['spikes_times'] < trial['trial_end_time'], - spikes_data['spikes_times'] > trial['trial_start_time']) + spikes_data["spikes_times"] < trial["trial_end_time"], + spikes_data["spikes_times"] > trial["trial_start_time"], + ) spikes_data_trial = dict( - spikes_depths=spikes_data['spikes_depths'][f], - spikes_times=spikes_data['spikes_times'][f], - spikes_amps=spikes_data['spikes_amps'][f], - spikes_clusters=spikes_data['spikes_clusters'][f], - clusters_depths=spikes_data['clusters_depths'] + spikes_depths=spikes_data["spikes_depths"][f], + spikes_times=spikes_data["spikes_times"][f], + spikes_amps=spikes_data["spikes_amps"][f], + spikes_clusters=spikes_data["spikes_clusters"][f], + clusters_depths=spikes_data["clusters_depths"], ) - fig_link = path.join( - root_path, - 'depthraster_session', - str(key['subject_uuid']), - key['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(key['probe_idx']), str(trial['trial_id'])) + '.png' + fig_link = ( + path.join( + root_path, + "depthraster_session", + str(key["subject_uuid"]), + key["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(key["probe_idx"]), + str(trial["trial_id"]), + ) + + ".png" + ) - key['plot_xlim'], key['plot_ylim'] = \ - putils.create_driftmap_plot( - spikes_data_trial, dpi=100, figsize=[18, 12], - fig_dir=fig_link, store_type='s3') + key["plot_xlim"], key["plot_ylim"] = putils.create_driftmap_plot( + spikes_data_trial, + dpi=100, + figsize=[18, 12], + fig_dir=fig_link, + store_type="s3", + ) - fb_time = trial['trial_feedback_time'] - movement_time = trial['movement_onset'] + fb_time = trial["trial_feedback_time"] + movement_time = trial["movement_onset"] depth_raster = dict( **key, plotting_data_link=fig_link, - trial_stim_on=trial['trial_stim_on_time'], - trial_stim_off=(fb_time if fb_time else movement_time) + - (1 if trial['trial_feedback_type'] > 0 else 2), + trial_stim_on=trial["trial_stim_on_time"], + trial_stim_off=(fb_time if fb_time else movement_time) + + (1 if trial["trial_feedback_type"] > 0 else 2), trial_feedback=fb_time, trial_movement=movement_time, - trial_id=trial['trial_id'], + trial_id=trial["trial_id"], depth_raster_template_idx=1, trial_type=trial_type, - trial_contrast=trial['trial_signed_contrast'], - plot_title='Depth Raster for a ' + trial_type + ' ' + - str(trial['trial_signed_contrast']) + trial_contrast=trial["trial_signed_contrast"], + plot_title="Depth Raster for a " + + trial_type + + " " + + str(trial["trial_signed_contrast"]), ) return depth_raster def make(self, key): - mode = 'all' + mode = "all" spikes_data = putils.prepare_spikes_data(key) # pick some example trials and generate depth raster - trials_all = (behavior.TrialSet.Trial * wheel.MovementTimes & key).proj( - 'trial_response_choice', - 'trial_feedback_type', - 'trial_stim_on_time', - 'movement_onset', - 'trial_feedback_time', - 'trial_start_time', - 'trial_end_time', - trial_duration='trial_end_time-trial_start_time', - trial_signed_contrast='trial_stim_contrast_right - trial_stim_contrast_left' - ) & 'trial_duration < 5' & 'trial_response_choice!="No Go"' + trials_all = ( + (behavior.TrialSet.Trial * wheel.MovementTimes & key).proj( + "trial_response_choice", + "trial_feedback_type", + "trial_stim_on_time", + "movement_onset", + "trial_feedback_time", + "trial_start_time", + "trial_end_time", + trial_duration="trial_end_time-trial_start_time", + trial_signed_contrast="trial_stim_contrast_right - trial_stim_contrast_left", + ) + & "trial_duration < 5" + & 'trial_response_choice!="No Go"' + ) trials_depthraster = [] - if mode == 'example': + if mode == "example": conditions = [ - {'trial_response_choice': 'CW', 'trial_feedback_type': 1}, - {'trial_response_choice': 'CCW', 'trial_feedback_type': 1}, - {'trial_response_choice': 'CW', 'trial_feedback_type': -1}, - {'trial_response_choice': 'CCW', 'trial_feedback_type': -1}, + {"trial_response_choice": "CW", "trial_feedback_type": 1}, + {"trial_response_choice": "CCW", "trial_feedback_type": 1}, + {"trial_response_choice": "CW", "trial_feedback_type": -1}, + {"trial_response_choice": "CCW", "trial_feedback_type": -1}, ] trial_num = 3 - for contrast in tqdm(dj.U('trial_signed_contrast') & trials_all, - position=0): + for contrast in tqdm( + dj.U("trial_signed_contrast") & trials_all, position=0 + ): for cond in conditions: trials_cond = (trials_all & cond & contrast).fetch() if len(trials_cond): - trials = np.random.choice(trials_cond, - size=[trial_num]) + trials = np.random.choice(trials_cond, size=[trial_num]) for trial in trials: trials_depthraster.append( - self._create_trial_raster( - key, spikes_data, trial)) + self._create_trial_raster(key, spikes_data, trial) + ) else: - for trial_key in tqdm(trials_all.fetch('KEY'), position=0): + for trial_key in tqdm(trials_all.fetch("KEY"), position=0): trial = (trials_all & trial_key).fetch1() trial_type = self._get_trial_type(trial) if trial_type: trials_depthraster.append( - self._create_trial_raster(key, spikes_data, trial)) + self._create_trial_raster(key, spikes_data, trial) + ) try: self.insert(trials_depthraster, skip_duplicates=True) except Exception: - print('Failed to insert all trials at once, \ - try inserting one by one...') + print( + "Failed to insert all trials at once, \ + try inserting one by one..." + ) for trial_dr in trials_depthraster: self.insert1(trial_dr, skip_duplicates=True) @@ -1157,31 +1270,37 @@ class DepthPethTemplate(dj.Lookup): # x=[plot_xlim[0]-0.2, plot_xlim[0]-0.1], # plot_xlim from DepthPeth # y=[plot_ylim[0]-0.2], # plot_ylim from DepthPeth # z=z_range, # z_range from DepthPeth - type='heatmap', + type="heatmap", colorbar=dict( thickness=10, - title='(Firing rate - baseline)/(baseline + 1)', - titleside='right'), + title="(Firing rate - baseline)/(baseline + 1)", + titleside="right", + ), # colorscale=color_scale # color_scale from DepthPeth - )] + ) + ] layout = go.Layout( - images=[dict(source='', # to be replaced by s3 link in Depth - # sizex=plot_xlim[1] - plot_xlim[0], # plot_xlim from DepthPeth - # sizey=plot_ylim[1] - plot_ylim[0], # plot_ylim from DepthPeth - # x=plot_xlim[0], # plot_xlim from DepthPeth - # y=plot_ylim[1], # plot_ylim from DepthPeth - xref='x', - yref='y', - sizing='stretch', - layer='below')], + images=[ + dict( + source="", # to be replaced by s3 link in Depth + # sizex=plot_xlim[1] - plot_xlim[0], # plot_xlim from DepthPeth + # sizey=plot_ylim[1] - plot_ylim[0], # plot_ylim from DepthPeth + # x=plot_xlim[0], # plot_xlim from DepthPeth + # y=plot_ylim[1], # plot_ylim from DepthPeth + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], xaxis=dict( - title='Time (s)', + title="Time (s)", showgrid=False, # range=plot_xlim # plot_xlim from DepthPeth - ), + ), yaxis=dict( - title='Depth from the probe tip (µm)', + title="Depth from the probe tip (µm)", showgrid=False, # range=plot_ylim # plot_ylim from DepthPeth ), @@ -1190,22 +1309,18 @@ class DepthPethTemplate(dj.Lookup): title=dict( # text='Depth PETH, aligned to {} time'.format(event), # event from DepthPeth x=0.5, - y=0.85 - ), - legend=dict( - x=1.2, - y=0.8, - orientation='v' + y=0.85, ), - template=dict( - layout=dict( - plot_bgcolor="white"))) + legend=dict(x=1.2, y=0.8, orientation="v"), + template=dict(layout=dict(plot_bgcolor="white")), + ) contents = [ - dict(depth_peth_template_idx=0, - depth_peth_template=go.Figure( - data=data, - layout=layout).to_plotly_json())] + dict( + depth_peth_template_idx=0, + depth_peth_template=go.Figure(data=data, layout=layout).to_plotly_json(), + ) + ] @schema @@ -1222,40 +1337,52 @@ class DepthPeth(dj.Computed): """ def make(self, key): - normed_peth, depths, time = \ - (ephys_analyses.DepthPeth * - ephys_analyses.NormedDepthPeth & key).fetch1( - 'normed_peth', 'depth_bin_centers', 'time_bin_centers') + normed_peth, depths, time = ( + ephys_analyses.DepthPeth * ephys_analyses.NormedDepthPeth & key + ).fetch1("normed_peth", "depth_bin_centers", "time_bin_centers") - peth_df = pd.DataFrame(normed_peth, columns=np.round(time, decimals=2), - index=depths.astype('int')) + peth_df = pd.DataFrame( + normed_peth, columns=np.round(time, decimals=2), index=depths.astype("int") + ) min_val = np.min(normed_peth) max_val = np.max(normed_peth) rb_cmap = RedBlueColorBar(max_val, min_val) - fig = PngFigure(eplt.depth_peth, dict(peth_df=peth_df), - dict(colors=rb_cmap.as_matplotlib(), - as_background=True, - return_lims=True)) + fig = PngFigure( + eplt.depth_peth, + dict(peth_df=peth_df), + dict(colors=rb_cmap.as_matplotlib(), as_background=True, return_lims=True), + ) - fig_link = path.join( - root_path, - 'depthpeth_session', - str(key['subject_uuid']), - key['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(key['probe_idx'])) + '_' + key['event'] + '_' + key['trial_type'] + '.png' + fig_link = ( + path.join( + root_path, + "depthpeth_session", + str(key["subject_uuid"]), + key["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(key["probe_idx"]), + ) + + "_" + + key["event"] + + "_" + + key["trial_type"] + + ".png" + ) fig.upload_to_s3(bucket, fig_link) self.insert1( - dict(**key, - plotting_data_link=fig_link, - plot_ylim=fig.y_lim, - plot_xlim=fig.x_lim, - z_range=rb_cmap.zrange, - color_scale=rb_cmap.as_plotly(), - depth_peth_template_idx=0)) + dict( + **key, + plotting_data_link=fig_link, + plot_ylim=fig.y_lim, + plot_xlim=fig.x_lim, + z_range=rb_cmap.zrange, + color_scale=rb_cmap.as_plotly(), + depth_peth_template_idx=0, + ) + ) fig.cleanup() @@ -1270,52 +1397,52 @@ class SpikeAmpTimeTemplate(dj.Lookup): axis = go.Scatter( # x=plot_ylim, # y=plot_ylim, - mode='markers', + mode="markers", marker=dict(opacity=0), showlegend=False, ) layout = go.Layout( - images=[dict(source='', # to be replaced by url - # sizex=plot_xlim[1] - plot_xlim[0], - # sizey=plot_ylim[1] - plot_ylim[0], - # x=plot_xlim[0], - # y=plot_ylim[1], - xref='x', - yref='y', - sizing='stretch', - layer='below')], + images=[ + dict( + source="", # to be replaced by url + # sizex=plot_xlim[1] - plot_xlim[0], + # sizey=plot_ylim[1] - plot_ylim[0], + # x=plot_xlim[0], + # y=plot_ylim[1], + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], xaxis=dict( - title='Time (s)', + title="Time (s)", showgrid=False, # range=plot_xlim, - ticks='outside'), + ticks="outside", + ), yaxis=dict( - title=dict(text='Spike amp (µV)', standoff=10), + title=dict(text="Spike amp (µV)", standoff=10), showgrid=False, # range=plot_ylim, - ticks='outside'), - + ticks="outside", + ), width=580, height=400, - title=dict( - text='Spike amp - time', - x=0.5, - y=0.85 - ), - legend=dict( - x=1.2, - y=0.8, - orientation='v' - ), - template=dict( - layout=dict(plot_bgcolor="white"))) + title=dict(text="Spike amp - time", x=0.5, y=0.85), + legend=dict(x=1.2, y=0.8, orientation="v"), + template=dict(layout=dict(plot_bgcolor="white")), + ) contents = [ - dict(spike_amp_time_template_idx=0, - spike_amp_time_template=go.Figure( - data=axis, - layout=layout).to_plotly_json())] + dict( + spike_amp_time_template_idx=0, + spike_amp_time_template=go.Figure( + data=axis, layout=layout + ).to_plotly_json(), + ) + ] @schema @@ -1333,38 +1460,44 @@ class SpikeAmpTime(dj.Computed): def make(self, key): entries = [] - keys, clusters_spike_times, clusters_spike_amps = \ - (ephys.DefaultCluster & key).fetch( - 'KEY', 'cluster_spikes_times', 'cluster_spikes_amps') - - for ikey, spike_times, spike_amps in tqdm(zip(keys, - clusters_spike_times, - clusters_spike_amps), - position=0): - fig = PngFigure(eplt.spike_amp_time, - data=dict(spike_times=spike_times, - spike_amps=spike_amps*1e6), - ax_kwargs=dict(s=8, - as_background=True, - return_lims=True), - dpi=100, figsize=[10, 5]) - - fig_link = path.join( - root_path, - 'raster', - str(ikey['subject_uuid']), - ikey['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(ikey['probe_idx']), - str(ikey['cluster_id'])) + '.png' + keys, clusters_spike_times, clusters_spike_amps = ( + ephys.DefaultCluster & key + ).fetch("KEY", "cluster_spikes_times", "cluster_spikes_amps") + + for ikey, spike_times, spike_amps in tqdm( + zip(keys, clusters_spike_times, clusters_spike_amps), position=0 + ): + fig = PngFigure( + eplt.spike_amp_time, + data=dict(spike_times=spike_times, spike_amps=spike_amps * 1e6), + ax_kwargs=dict(s=8, as_background=True, return_lims=True), + dpi=100, + figsize=[10, 5], + ) + + fig_link = ( + path.join( + root_path, + "raster", + str(ikey["subject_uuid"]), + ikey["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(ikey["probe_idx"]), + str(ikey["cluster_id"]), + ) + + ".png" + ) fig.upload_to_s3(bucket, fig_link) entries.append( - dict(**ikey, - plotting_data_link=fig_link, - plot_xlim=fig.x_lim, - plot_ylim=fig.y_lim, - spike_amp_time_template_idx=0).copy()) + dict( + **ikey, + plotting_data_link=fig_link, + plot_xlim=fig.x_lim, + plot_ylim=fig.y_lim, + spike_amp_time_template_idx=0, + ).copy() + ) fig.cleanup() @@ -1381,48 +1514,43 @@ class AutoCorrelogramTemplate(dj.Lookup): data = dict( # x=np.linspace(t_start, t_end, len(acg)) * 1000, # t_start, t_end, acg fetched from AutoCorrelogram # y=acg, # fetched from AutoCorrelogram - name='data', - type='scatter', - marker=dict( - color='rgba(51, 76.5, 204, 0.8)' - ), - x0=0 + name="data", + type="scatter", + marker=dict(color="rgba(51, 76.5, 204, 0.8)"), + x0=0, ) layout = dict( width=580, height=400, - title=dict( - text='Autocorrelogram', - x=0.5, - y=0.85), + title=dict(text="Autocorrelogram", x=0.5, y=0.85), xaxis=dict( - title='Lag (ms)', + title="Lag (ms)", showgrid=False, - linecolor='lightgray', - anchor='y', + linecolor="lightgray", + anchor="y", position=0, linewidth=2, zeroline=True, - zerolinecolor='lightgray', - tickcolor='lightgray', - ticks='outside', - tickwidth=2 + zerolinecolor="lightgray", + tickcolor="lightgray", + ticks="outside", + tickwidth=2, ), - yaxis=dict( - title='Spike counts', + title="Spike counts", showgrid=False, # range=plot_ylim # fetched from AutoCorrelogram ), - plot_bgcolor='rgba(0,0,0,0)' + plot_bgcolor="rgba(0,0,0,0)", ) contents = [ - dict(acg_template_idx=0, - acg_template=go.Figure( - data=data, - layout=layout).to_plotly_json())] + dict( + acg_template_idx=0, + acg_template=go.Figure(data=data, layout=layout).to_plotly_json(), + ) + ] @schema @@ -1450,27 +1578,32 @@ def _acorr(self, spike_times, bin_size=None, window_size=None): Returns an `(winsize_samples,)` array with the auto-correlogram. """ xc = population.xcorr( - spike_times, np.zeros_like(spike_times).astype('int'), - bin_size=bin_size, window_size=window_size) + spike_times, + np.zeros_like(spike_times).astype("int"), + bin_size=bin_size, + window_size=window_size, + ) return xc[0, 0, :] def make(self, key): - spike_times = (ephys.DefaultCluster & key).fetch1( - 'cluster_spikes_times') + spike_times = (ephys.DefaultCluster & key).fetch1("cluster_spikes_times") win_sz = 0.04 - entry = dict(**key, - t_start=-win_sz/2, - t_end=win_sz/2, - plot_ylim=[0, 10], - acg_template_idx=0) + entry = dict( + **key, + t_start=-win_sz / 2, + t_end=win_sz / 2, + plot_ylim=[0, 10], + acg_template_idx=0, + ) if len(spike_times): acg = self._acorr(spike_times, bin_size=0.0002, window_size=win_sz) entry.update( - acg=','.join('{:d}'.format(x) for x in acg), - plot_ylim=[0, max(acg)+10]) + acg=",".join("{:d}".format(x) for x in acg), + plot_ylim=[0, max(acg) + 10], + ) self.insert1(entry) @@ -1485,64 +1618,57 @@ class WaveformTemplate(dj.Lookup): axis = go.Scatter( # x=plot_xlim, # fetch from WaveForm # y=plot_ylim, # fetch from WaveForm - mode='markers', + mode="markers", marker=dict(opacity=0), showlegend=False, ) layout = go.Layout( - images=[dict(source='', # replace with plotting_fig_link from Waveform - # sizex=plot_xlim[1] - plot_xlim[0], - # sizey=plot_ylim[1] - plot_ylim[0], - # x=plot_xlim[0], - # y=plot_ylim[1], - xref='x', - yref='y', - sizing='stretch', - layer='below')], + images=[ + dict( + source="", # replace with plotting_fig_link from Waveform + # sizex=plot_xlim[1] - plot_xlim[0], + # sizey=plot_ylim[1] - plot_ylim[0], + # x=plot_xlim[0], + # y=plot_ylim[1], + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], width=580, height=400, - title=dict( - text='Template waveforms', - x=0.55, - y=0.85 - ), - margin=go.layout.Margin( - l=100, - r=30, - b=40, - t=80, - pad=0), - legend=dict( - x=1.2, - y=0.8, - orientation='v' - ), + title=dict(text="Template waveforms", x=0.55, y=0.85), + margin=go.layout.Margin(l=100, r=30, b=40, t=80, pad=0), + legend=dict(x=1.2, y=0.8, orientation="v"), yaxis=dict( - title=dict(text='Channel position y (µm)', standoff=10), + title=dict(text="Channel position y (µm)", standoff=10), showgrid=False, # range=plot_ylim, # from Waveform - tickcolor='gray', - ticks='outside', + tickcolor="gray", + ticks="outside", tickwidth=2, - zeroline=False + zeroline=False, ), - xaxis=dict( - title='Channel position x (µm)', + title="Channel position x (µm)", showgrid=False, # range=plot_xlim, # from Waveform - ticks='outside', - tickcolor='gray', + ticks="outside", + tickcolor="gray", tickwidth=2, - zeroline=False + zeroline=False, ), - plot_bgcolor='rgba(0,0,0,0)') + plot_bgcolor="rgba(0,0,0,0)", + ) contents = [ - dict(waveform_template_idx=0, - waveform_template=go.Figure( - data=axis, layout=layout).to_plotly_json())] + dict( + waveform_template_idx=0, + waveform_template=go.Figure(data=axis, layout=layout).to_plotly_json(), + ) + ] @schema @@ -1560,41 +1686,51 @@ class Waveform(dj.Computed): def make(self, key): entries = [] - keys, clusters_waveforms, clusters_waveforms_channels = \ - (ephys.DefaultCluster() & key).fetch( - 'KEY', 'cluster_waveforms', 'cluster_waveforms_channels') + keys, clusters_waveforms, clusters_waveforms_channels = ( + ephys.DefaultCluster() & key + ).fetch("KEY", "cluster_waveforms", "cluster_waveforms_channels") for ikey, waveforms, waveforms_channels in tqdm( - zip(keys, clusters_waveforms, clusters_waveforms_channels), - position=0): + zip(keys, clusters_waveforms, clusters_waveforms_channels), position=0 + ): # get channel locations channel_coords = (ephys.ChannelGroup() & ikey).fetch1( - 'channel_local_coordinates') + "channel_local_coordinates" + ) coords = channel_coords[waveforms_channels] fig = PngFigure( eplt.template_waveform, data=dict(waveforms=waveforms, coords=coords), ax_kwargs=dict(as_background=True, return_lims=True), - dpi=100, figsize=[5.8, 4]) + dpi=100, + figsize=[5.8, 4], + ) - fig_link = path.join( + fig_link = ( + path.join( root_path, - 'waveform', - str(ikey['subject_uuid']), - ikey['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(ikey['probe_idx']), - str(ikey['cluster_id'])) + '.png' + "waveform", + str(ikey["subject_uuid"]), + ikey["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(ikey["probe_idx"]), + str(ikey["cluster_id"]), + ) + + ".png" + ) fig.upload_to_s3(bucket, fig_link) entries.append( - dict(**ikey, - plotting_data_link=fig_link, - plot_xlim=fig.x_lim, - plot_ylim=fig.y_lim, - waveform_template_idx=0).copy()) + dict( + **ikey, + plotting_data_link=fig_link, + plot_xlim=fig.x_lim, + plot_ylim=fig.y_lim, + waveform_template_idx=0, + ).copy() + ) fig.cleanup() self.insert(entries) diff --git a/ibl_pipeline/plotting/ephys_plotting.py b/ibl_pipeline/plotting/ephys_plotting.py index e94ce3e4..cc7250f3 100755 --- a/ibl_pipeline/plotting/ephys_plotting.py +++ b/ibl_pipeline/plotting/ephys_plotting.py @@ -1,22 +1,28 @@ -''' +""" This module contains functions that generates plots. -''' +""" -import numpy as np +import colorlover as cl import matplotlib.pyplot as plt +import numpy as np import seaborn as sns from matplotlib import cm from matplotlib.colors import Normalize from scipy.interpolate import interpn -import colorlover as cl def driftmap_color( - clusters_depths, spikes_times, - spikes_amps, spikes_depths, spikes_clusters, - ax=None, axesoff=False, return_lims=False): - - ''' + clusters_depths, + spikes_times, + spikes_amps, + spikes_depths, + spikes_clusters, + ax=None, + axesoff=False, + return_lims=False, +): + + """ Plots the driftmap of a session or a trial The plot shows the spike times vs spike depths. @@ -47,23 +53,27 @@ def driftmap_color( range of x axis y_lim: list of two elements range of y axis - ''' + """ color_bins = sns.color_palette("hls", 500) new_color_bins = np.vstack( - np.transpose(np.reshape(color_bins, [5, 100, 3]), [1, 0, 2])) + np.transpose(np.reshape(color_bins, [5, 100, 3]), [1, 0, 2]) + ) # get the sorted idx of each depth, and create colors based on the idx sorted_idx = np.argsort(np.argsort(clusters_depths)) colors = np.vstack( - [np.repeat( - new_color_bins[np.mod(idx, 500), :][np.newaxis, ...], - n_spikes, axis=0) - for (idx, n_spikes) in - zip(sorted_idx, np.unique(spikes_clusters, - return_counts=True)[1])]) + [ + np.repeat( + new_color_bins[np.mod(idx, 500), :][np.newaxis, ...], n_spikes, axis=0 + ) + for (idx, n_spikes) in zip( + sorted_idx, np.unique(spikes_clusters, return_counts=True)[1] + ) + ] + ) max_amp = np.percentile(spikes_amps, 90) min_amp = np.percentile(spikes_amps, 10) @@ -71,20 +81,20 @@ def driftmap_color( opacity[opacity > 1] = 1 opacity[opacity < 0] = 0 - colorvec = np.zeros([len(opacity), 4], dtype='float16') - colorvec[:, 3] = opacity.astype('float16') - colorvec[:, 0:3] = colors.astype('float16') + colorvec = np.zeros([len(opacity), 4], dtype="float16") + colorvec[:, 3] = opacity.astype("float16") + colorvec[:, 0:3] = colors.astype("float16") - x = spikes_times.astype('float32') - y = spikes_depths.astype('float32') + x = spikes_times.astype("float32") + y = spikes_depths.astype("float32") - args = dict(color=colorvec, edgecolors='none') + args = dict(color=colorvec, edgecolors="none") if ax is None: fig = plt.Figure(dpi=200, frameon=False, figsize=[10, 10]) ax = plt.Axes(fig, [0.1, 0.1, 0.9, 0.9]) - ax.set_xlabel('Time (sec)') - ax.set_ylabel('Distance from the probe tip (µm)') + ax.set_xlabel("Time (sec)") + ax.set_ylabel("Distance from the probe tip (µm)") savefig = True args.update(s=0.1) @@ -96,11 +106,11 @@ def driftmap_color( ax.set_ylim(y_lim[0], y_lim[1]) if axesoff: - ax.axis('off') + ax.axis("off") if savefig: fig.add_axes(ax) - fig.savefig('driftmap.png') + fig.savefig("driftmap.png") if return_lims: return ax, x_lim, y_lim @@ -108,10 +118,9 @@ def driftmap_color( return ax -def depth_peth(peth_df, ax=None, colors=None, - as_background=False, return_lims=False): +def depth_peth(peth_df, ax=None, colors=None, as_background=False, return_lims=False): - ''' + """ Plots the peth of all trials for multi-unit activities across different depths. The plot shows the heatmap of peth of each time point and depth. @@ -136,7 +145,7 @@ def depth_peth(peth_df, ax=None, colors=None, range of x axis y_lim: list of two elements range of y axis - ''' + """ if colors is None: colors = sns.diverging_palette(255, 10, n=100) @@ -148,19 +157,22 @@ def depth_peth(peth_df, ax=None, colors=None, fig, ax = plt.subplots(1, 1, dpi=100, frameon=False, figsize=[6, 4]) if as_background: - ax.axis('off') + ax.axis("off") cbar = None else: - ax.set_xlabel('Time (s)') - ax.set_ylabel('Depth relative to the probe tip (µm)') - cbar = 'auto' - - ax = sns.heatmap(peth_df, - xticklabels=10, - yticklabels=5, - cmap=colors, - center=center, - ax=ax, cbar=cbar) + ax.set_xlabel("Time (s)") + ax.set_ylabel("Depth relative to the probe tip (µm)") + cbar = "auto" + + ax = sns.heatmap( + peth_df, + xticklabels=10, + yticklabels=5, + cmap=colors, + center=center, + ax=ax, + cbar=cbar, + ) ax.invert_yaxis() if return_lims: @@ -168,19 +180,19 @@ def depth_peth(peth_df, ax=None, colors=None, depths = peth_df.index.to_list() time_bin = np.mean(np.diff(time)) depth_bin = np.mean(np.diff(depths)) - x_lim = [min(time) - time_bin/2, max(time) + time_bin/2] - y_lim = [min(depths) - depth_bin/2, max(depths) + depth_bin/2] + x_lim = [min(time) - time_bin / 2, max(time) + time_bin / 2] + y_lim = [min(depths) - depth_bin / 2, max(depths) + depth_bin / 2] return ax, x_lim, y_lim else: return ax -def spike_amp_time(spike_times, spike_amps, - ax=None, s=3, - as_background=False, return_lims=False): +def spike_amp_time( + spike_times, spike_amps, ax=None, s=3, as_background=False, return_lims=False +): - ''' + """ Plots spike amps versus the time Parameters @@ -205,24 +217,27 @@ def spike_amp_time(spike_times, spike_amps, range of x axis y_lim: list of two elements range of y axis - ''' + """ if ax is None: fig, ax = plt.subplots(1, 1, dpi=100, frameon=False, figsize=[6, 4]) if as_background: - ax.axis('off') + ax.axis("off") else: - ax.set_xlabel('Time (s)') - ax.set_ylabel('Spike amplitude (µV)') + ax.set_xlabel("Time (s)") + ax.set_ylabel("Spike amplitude (µV)") x = spike_times y = spike_amps - data, x_e, y_e = np.histogram2d( - x, y, bins=[100, 100], density=True) - z = interpn((0.5*(x_e[1:] + x_e[:-1]), 0.5*(y_e[1:]+y_e[:-1])), - data, np.vstack([x, y]).T, - method="splinef2d", bounds_error=False) + data, x_e, y_e = np.histogram2d(x, y, bins=[100, 100], density=True) + z = interpn( + (0.5 * (x_e[1:] + x_e[:-1]), 0.5 * (y_e[1:] + y_e[:-1])), + data, + np.vstack([x, y]).T, + method="splinef2d", + bounds_error=False, + ) # To be sure to plot all data z[np.where(np.isnan(z))] = 0.0 @@ -249,9 +264,10 @@ def spike_amp_time(spike_times, spike_amps, return ax -def template_waveform(waveforms, coords, - ax=None, as_background=False, return_lims=False): - ''' +def template_waveform( + waveforms, coords, ax=None, as_background=False, return_lims=False +): + """ Plots template waveform for a unit in different channels Parameters @@ -274,15 +290,15 @@ def template_waveform(waveforms, coords, range of x axis y_lim: list of two elements range of y axis - ''' + """ if ax is None: fig, ax = plt.subplots(1, 1, dpi=100, frameon=False, figsize=[5.8, 4]) if as_background: - ax.axis('off') + ax.axis("off") else: - ax.set_xlabel('Channel position x (µm)') - ax.set_ylabel('Channel position y (µm)') + ax.set_xlabel("Channel position x (µm)") + ax.set_ylabel("Channel position y (µm)") x_max = np.max(coords[:, 0]) x_min = np.min(coords[:, 0]) @@ -298,8 +314,8 @@ def template_waveform(waveforms, coords, # time (in ms) * x_scale (in um/ms) + x_start(coord[0]) = position # the waveform takes 0.9 of each x interval between adjacent channels - dt = 1/30 - x_scale = (x_max - x_min) / (n_xpos - 1) * 0.9 / (dt*time_len) + dt = 1 / 30 + x_scale = (x_max - x_min) / (n_xpos - 1) * 0.9 / (dt * time_len) # y_scale adjusted with the amplitude of the waveforms # waveform voltage in (uV) * y_scale (in um/uV) + y_start (coord[1]) = position @@ -311,8 +327,9 @@ def template_waveform(waveforms, coords, time = np.arange(time_len) * dt for wf, coord in zip(waveforms_in_uV.T, coords): - ax.plot(time*x_scale + coord[0], - wf*y_scale + coord[1], color=[0.2, 0.3, 0.8]) + ax.plot( + time * x_scale + coord[0], wf * y_scale + coord[1], color=[0.2, 0.3, 0.8] + ) # plot scale bar # um corresponding to 1 ms in time @@ -323,11 +340,11 @@ def template_waveform(waveforms, coords, x0 = x_min - 6 y0 = y_min + 10 - ax.text(x0, y0-20, '1ms', fontdict=dict(family='serif')) - ax.text(x0-3, y0, '100uV', fontdict=dict(family='serif'), rotation='vertical') + ax.text(x0, y0 - 20, "1ms", fontdict=dict(family="serif")) + ax.text(x0 - 3, y0, "100uV", fontdict=dict(family="serif"), rotation="vertical") - ax.plot([x0, x0 + x_bar], [y0, y0], color='black') - ax.plot([x0, x0], [y0, y0 + y_bar], color='black') + ax.plot([x0, x0 + x_bar], [y0, y0], color="black") + ax.plot([x0, x0], [y0, y0 + y_bar], color="black") x_lim = [x_min - 10, x_max + 15] y_lim = [y_min - 20, y_max + 20] diff --git a/ibl_pipeline/plotting/figure_model.py b/ibl_pipeline/plotting/figure_model.py index 854243f0..cc89fea7 100755 --- a/ibl_pipeline/plotting/figure_model.py +++ b/ibl_pipeline/plotting/figure_model.py @@ -1,21 +1,29 @@ -import matplotlib.pyplot as plt -from matplotlib.figure import Figure -from matplotlib.axes import Axes -import seaborn as sns -import io import base64 import gc +import io + import imageio +import matplotlib.pyplot as plt +import seaborn as sns +from matplotlib.axes import Axes +from matplotlib.figure import Figure class PngFigure(Figure): - - def __init__(self, draw, data, ax_kwargs={}, - dpi=50, frameon=False, figsize=[8, 6], - transparent=False, axes_off=True): + def __init__( + self, + draw, + data, + ax_kwargs={}, + dpi=50, + frameon=False, + figsize=[8, 6], + transparent=False, + axes_off=True, + ): super().__init__(dpi=dpi, frameon=frameon, figsize=figsize) - ax = Axes(self, [0., 0., 1., 1.]) + ax = Axes(self, [0.0, 0.0, 1.0, 1.0]) if axes_off: ax.set_axis_off() @@ -32,52 +40,54 @@ def __init__(self, draw, data, ax_kwargs={}, self.add_axes(ax) self.buffer = io.BytesIO() - self.savefig(self.buffer, - transparent=transparent, dpi=dpi, - pad_inches=0, format='png') + self.savefig( + self.buffer, transparent=transparent, dpi=dpi, pad_inches=0, format="png" + ) def upload_to_s3(self, bucket, fig_link): self.buffer.seek(0) - bucket.put_object(Body=self.buffer, - ContentType='image/png', - Key=fig_link) + bucket.put_object(Body=self.buffer, ContentType="image/png", Key=fig_link) @property def encoded_string(self): self.buffer.seek(0) return base64.b64encode(self.buffer.read()) - def create_layout_template(self, with_encoded_string=True, - x_title=None, y_title=None): + def create_layout_template( + self, with_encoded_string=True, x_title=None, y_title=None + ): if with_encoded_string: - source = 'data:image/png;base64, ' + self.encoded_string.decode() + source = "data:image/png;base64, " + self.encoded_string.decode() else: - source = 'data:image/png;base64, ' + source = "data:image/png;base64, " - if not (hasattr(self, 'x_lim') and hasattr(self, 'y_lim')): - raise AttributeError('Attributes x_lim or y_lim are not defined.') + if not (hasattr(self, "x_lim") and hasattr(self, "y_lim")): + raise AttributeError("Attributes x_lim or y_lim are not defined.") return dict( - images=[dict(source=source, - sizex=self.x_lim[1] - self.x_lim[0], - sizey=self.y_lim[1] - self.y_lim[0], - x=self.x_lim[0], - y=self.y_lim[1], - xref='x', - yref='y', - sizing='stretch', - layer='below')], + images=[ + dict( + source=source, + sizex=self.x_lim[1] - self.x_lim[0], + sizey=self.y_lim[1] - self.y_lim[0], + x=self.x_lim[0], + y=self.y_lim[1], + xref="x", + yref="y", + sizing="stretch", + layer="below", + ) + ], xaxis=dict( - title=x_title, - showgrid=False, - range=self.x_lim, - ticks='outside'), + title=x_title, showgrid=False, range=self.x_lim, ticks="outside" + ), yaxis=dict( title=dict(text=y_title, standoff=10), showgrid=False, range=self.y_lim, - ticks='outside') + ticks="outside", + ), ) def cleanup(self): @@ -87,22 +97,25 @@ def cleanup(self): gc.collect() -class GifFigure(): - - def __init__(self, draw, trajectories, - duration_per_cycle=5, nframes_per_cycle=30, - figsize=[800, 700]): +class GifFigure: + def __init__( + self, + draw, + trajectories, + duration_per_cycle=5, + nframes_per_cycle=30, + figsize=[800, 700], + ): frames = draw( - trajectories, nframes_per_cycle=nframes_per_cycle, - figsize=figsize) + trajectories, nframes_per_cycle=nframes_per_cycle, figsize=figsize + ) self.buffer = io.BytesIO() imageio.mimwrite( - self.buffer, frames, 'gif', - duration=duration_per_cycle/nframes_per_cycle) + self.buffer, frames, "gif", duration=duration_per_cycle / nframes_per_cycle + ) def upload_to_s3(self, bucket, fig_link): self.buffer.seek(0) - bucket.put_object(Body=self.buffer, - Key=fig_link) + bucket.put_object(Body=self.buffer, Key=fig_link) diff --git a/ibl_pipeline/plotting/histology.py b/ibl_pipeline/plotting/histology.py index 0f8d4030..ebacd590 100644 --- a/ibl_pipeline/plotting/histology.py +++ b/ibl_pipeline/plotting/histology.py @@ -1,30 +1,29 @@ -import datajoint as dj from os import path -from ibl_pipeline import subject, acquisition, ephys, histology -from ibl_pipeline.plotting import histology_plotting as hplt -from ibl_pipeline.plotting.figure_model import PngFigure, GifFigure -import boto3 -from ibl_pipeline import one, mode +import boto3 +import datajoint as dj +from ibl_pipeline import acquisition, ephys, histology, mode, one, subject +from ibl_pipeline.plotting import histology_plotting as hplt +from ibl_pipeline.plotting.figure_model import GifFigure, PngFigure -if mode == 'public': - root_path = 'public' +if mode == "public": + root_path = "public" else: - root_path = '' + root_path = "" -schema = dj.schema(dj.config.get('database.prefix', '') + - 'ibl_plotting_histology') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_plotting_histology") # get external bucket -store = dj.config['stores']['plotting'] +store = dj.config["stores"]["plotting"] s3 = boto3.resource( - 's3', - aws_access_key_id=store['access_key'], - aws_secret_access_key=store['secret_key']) + "s3", + aws_access_key_id=store["access_key"], + aws_secret_access_key=store["secret_key"], +) -bucket = s3.Bucket(store['bucket']) +bucket = s3.Bucket(store["bucket"]) @schema @@ -38,16 +37,18 @@ class SubjectSpinningBrain(dj.Imported): key_source = subject.Subject & histology.ProbeTrajectory def make(self, key): - subject_nickname = (subject.Subject & key).fetch1('subject_nickname') - trajs = one.alyx.rest('trajectories', 'list', subject=subject_nickname, - provenance='Ephys Aligned Histology Track') + subject_nickname = (subject.Subject & key).fetch1("subject_nickname") + trajs = one.alyx.rest( + "trajectories", + "list", + subject=subject_nickname, + provenance="Ephys Aligned Histology Track", + ) - fig = GifFigure( - hplt.generate_spinning_brain_frames, trajs) + fig = GifFigure(hplt.generate_spinning_brain_frames, trajs) fig_link = path.join( - root_path, 'subject_spinning_brain', - str(key['subject_uuid']) + '.gif' + root_path, "subject_spinning_brain", str(key["subject_uuid"]) + ".gif" ) fig.upload_to_s3(bucket, fig_link) @@ -66,19 +67,23 @@ class ProbeTrajectoryCoronal(dj.Imported): def make(self, key): - eid = str((acquisition.Session & key).fetch1('session_uuid')) - probe_label = (ephys.ProbeInsertion & key).fetch1('probe_label') + eid = str((acquisition.Session & key).fetch1("session_uuid")) + probe_label = (ephys.ProbeInsertion & key).fetch1("probe_label") fig = PngFigure( hplt.probe_trajectory_coronal, dict(eid=eid, probe_label=probe_label, one=one), - dpi=100, figsize=[6, 4], axes_off=False) + dpi=100, + figsize=[6, 4], + axes_off=False, + ) fig_link = path.join( - root_path, 'probe_trajectory_coronal', - str(key['subject_uuid']), - key['session_start_time'].strftime('%Y-%m-%dT%H:%M:%S'), - str(key['probe_idx']) + '.png' + root_path, + "probe_trajectory_coronal", + str(key["subject_uuid"]), + key["session_start_time"].strftime("%Y-%m-%dT%H:%M:%S"), + str(key["probe_idx"]) + ".png", ) fig.upload_to_s3(bucket, fig_link) diff --git a/ibl_pipeline/plotting/histology_plotting.py b/ibl_pipeline/plotting/histology_plotting.py index c015e64a..b28ab9e6 100644 --- a/ibl_pipeline/plotting/histology_plotting.py +++ b/ibl_pipeline/plotting/histology_plotting.py @@ -1,10 +1,12 @@ -import numpy as np -import matplotlib.pyplot as plt import ibllib.atlas as atlas +import matplotlib.pyplot as plt +import numpy as np -def generate_spinning_brain_frames(trajectories, nframes_per_cycle=30, figsize=[800, 700]): - ''' +def generate_spinning_brain_frames( + trajectories, nframes_per_cycle=30, figsize=[800, 700] +): + """ Plots spike amps versus the time Parameters @@ -20,38 +22,45 @@ def generate_spinning_brain_frames(trajectories, nframes_per_cycle=30, figsize=[ ------------ frames: list of numpy.darray image in rgb for each frame - ''' + """ # libraries needed for spinning brain + import os import subprocess + from pyvirtualdisplay import Display - import os # create a virtual display before importing mlab display = Display(visible=0, size=(1920, 1080)) display.start() # mlab has to be imported after setting up the virtual display - from mayavi import mlab from atlaselectrophysiology import rendering + from mayavi import mlab ba_allen = atlas.AllenAtlas(25) ba_needles = atlas.NeedlesAtlas(25) fig = rendering.figure() for index, trj in enumerate(trajectories): - if trj['coordinate_system'] == 'IBL-Allen': + if trj["coordinate_system"] == "IBL-Allen": brain_atlas = ba_allen - elif trj['coordinate_system'] == 'Needles-Allen': + elif trj["coordinate_system"] == "Needles-Allen": brain_atlas = ba_needles else: brain_atlas = ba_allen ins = atlas.Insertion.from_dict(trj, brain_atlas=brain_atlas) mlapdv = brain_atlas.xyz2ccf(ins.xyz) - if trj['provenance'] == 'Ephys aligned histology track': - color = (0, 0, 1.) # Blue - mlab.plot3d(mlapdv[:, 1], mlapdv[:, 2], mlapdv[:, 0], - line_width=3, color=color, tube_radius=20) + if trj["provenance"] == "Ephys aligned histology track": + color = (0, 0, 1.0) # Blue + mlab.plot3d( + mlapdv[:, 1], + mlapdv[:, 2], + mlapdv[:, 0], + line_width=3, + color=color, + tube_radius=20, + ) frames = [] for i in range(nframes_per_cycle): mlab.view(azimuth=0, elevation=0 - i * (360 / nframes_per_cycle)) @@ -59,13 +68,12 @@ def generate_spinning_brain_frames(trajectories, nframes_per_cycle=30, figsize=[ mlab.test_plot3d() f = mlab.gcf() f.scene._lift() - frames.append(mlab.screenshot(mode='rgb', antialiased=True)) + frames.append(mlab.screenshot(mode="rgb", antialiased=True)) return frames -def probe_trajectory_coronal( - eid, probe_label, one, ax=None): +def probe_trajectory_coronal(eid, probe_label, one, ax=None): """ Generates plots of coronal sections with the channel locations @@ -84,19 +92,23 @@ def probe_trajectory_coronal( one.path_from_eid(eid) traj = one.alyx.rest( - 'trajectories', 'list', session=eid, - provenance='Ephys Aligned Histology Track', probe=probe_label)[0] + "trajectories", + "list", + session=eid, + provenance="Ephys Aligned Histology Track", + probe=probe_label, + )[0] channels = bbone.load_channel_locations(eid=eid, one=one, probe=probe_label) - picks = one.alyx.rest('insertions', 'read', id=traj['probe_insertion'])['json'] - picks = np.array(picks['xyz_picks']) / 1e6 + picks = one.alyx.rest("insertions", "read", id=traj["probe_insertion"])["json"] + picks = np.array(picks["xyz_picks"]) / 1e6 ins = atlas.Insertion.from_dict(traj) if ax is None: fig, ax = plt.subplots(1, 1, dpi=100, frameon=False) - ax = ba_allen.plot_tilted_slice(xyz=picks, axis=1, volume='image', ax=ax) + ax = ba_allen.plot_tilted_slice(xyz=picks, axis=1, volume="image", ax=ax) ax.plot(picks[:, 0] * 1e6, picks[:, 2] * 1e6) - ax.plot(channels[probe_label].x * 1e6, channels[probe_label].z * 1e6, 'g*') + ax.plot(channels[probe_label].x * 1e6, channels[probe_label].z * 1e6, "g*") return ax diff --git a/ibl_pipeline/plotting/plotting_utils_behavior.py b/ibl_pipeline/plotting/plotting_utils_behavior.py index d6a3b0bf..6e2c8722 100755 --- a/ibl_pipeline/plotting/plotting_utils_behavior.py +++ b/ibl_pipeline/plotting/plotting_utils_behavior.py @@ -1,23 +1,29 @@ -from ibl_pipeline.analyses import behavior -from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import subject, action, acquisition import datajoint as dj -mode = dj.config.get('custom', {}).get('database.mode', "") -if mode != 'public': + +from ibl_pipeline import acquisition, action +from ibl_pipeline import behavior as behavior_ingest +from ibl_pipeline import subject +from ibl_pipeline.analyses import behavior + +mode = dj.config.get("custom", {}).get("database.mode", "") +if mode != "public": from ibl_pipeline import ephys -from ibl_pipeline.utils import psychofit as psy -from uuid import UUID -import numpy as np + import datetime +from uuid import UUID + import datajoint as dj -import plotly.graph_objs as go import matplotlib.pyplot as plt +import numpy as np import pandas as pd -import seaborn as sns import plotly -from plotly import tools -import statsmodels.stats.proportion as smp +import plotly.graph_objs as go import scipy.signal as signal +import seaborn as sns +import statsmodels.stats.proportion as smp +from plotly import tools + +from ibl_pipeline.utils import psychofit as psy def get_date_range(subj, include_water_weight=True): @@ -25,12 +31,13 @@ def get_date_range(subj, include_water_weight=True): # get date range of session session_range = subj.aggr( acquisition.Session, - first_session_date='min(DATE(session_start_time))', - last_session_date='max(DATE(session_start_time))') + first_session_date="min(DATE(session_start_time))", + last_session_date="max(DATE(session_start_time))", + ) if session_range: first_session_date, last_session_date = session_range.fetch1( - 'first_session_date', 'last_session_date' + "first_session_date", "last_session_date" ) else: first_session_date = None @@ -40,12 +47,13 @@ def get_date_range(subj, include_water_weight=True): if include_water_weight: water_res_range = subj.aggr( action.WaterRestriction, - first_res_date='min(DATE(restriction_start_time))', - last_res_date='max(DATE(restriction_end_time))') + first_res_date="min(DATE(restriction_start_time))", + last_res_date="max(DATE(restriction_end_time))", + ) if water_res_range: first_water_res_date, last_water_res_date = water_res_range.fetch1( - 'first_res_date', 'last_res_date' + "first_res_date", "last_res_date" ) else: first_water_res_date = None @@ -54,14 +62,14 @@ def get_date_range(subj, include_water_weight=True): # get date range of water administration water_admin_range = subj.aggr( action.WaterAdministration, - first_admin_date='min(DATE(administration_time))', - last_admin_date='max(DATE(administration_time))') + first_admin_date="min(DATE(administration_time))", + last_admin_date="max(DATE(administration_time))", + ) if water_admin_range: - first_water_admin_date, last_water_admin_date = \ - water_admin_range.fetch1( - 'first_admin_date', 'last_admin_date' - ) + first_water_admin_date, last_water_admin_date = water_admin_range.fetch1( + "first_admin_date", "last_admin_date" + ) else: first_water_admin_date = None last_water_admin_date = None @@ -69,12 +77,13 @@ def get_date_range(subj, include_water_weight=True): # get date range of weighing weighing_range = subj.aggr( action.Weighing, - first_weighing_date='min(DATE(weighing_time))', - last_weighing_date='max(DATE(weighing_time))') + first_weighing_date="min(DATE(weighing_time))", + last_weighing_date="max(DATE(weighing_time))", + ) if weighing_range: first_weighing_date, last_weighing_date = weighing_range.fetch1( - 'first_weighing_date', 'last_weighing_date' + "first_weighing_date", "last_weighing_date" ) else: first_weighing_date = None @@ -82,14 +91,14 @@ def get_date_range(subj, include_water_weight=True): # get overall date range if include_water_weight: - first_date_array = [first_session_date, - first_water_res_date, - first_water_admin_date, - first_weighing_date] - - last_date_array = [last_session_date, - last_water_admin_date, - last_weighing_date] + first_date_array = [ + first_session_date, + first_water_res_date, + first_water_admin_date, + first_weighing_date, + ] + + last_date_array = [last_session_date, last_water_admin_date, last_weighing_date] else: first_date_array = [first_session_date] last_date_array = [last_session_date] @@ -97,36 +106,39 @@ def get_date_range(subj, include_water_weight=True): first_date_array = [x for x in first_date_array if x is not None] last_date_array = [x for x in last_date_array if x is not None] - first_date = np.min(first_date_array) \ - - datetime.timedelta(days=3) + first_date = np.min(first_date_array) - datetime.timedelta(days=3) - last_date = np.max(last_date_array) \ - + datetime.timedelta(days=3) + last_date = np.max(last_date_array) + datetime.timedelta(days=3) - first_date_str = first_date.strftime('%Y-%m-%d') - last_date_str = last_date.strftime('%Y-%m-%d') + first_date_str = first_date.strftime("%Y-%m-%d") + last_date_str = last_date.strftime("%Y-%m-%d") - date_array = [first_date + datetime.timedelta(days=day) - for day in range(0, (last_date-first_date).days)] + date_array = [ + first_date + datetime.timedelta(days=day) + for day in range(0, (last_date - first_date).days) + ] # get Mondays - mondays = [day.strftime('%Y-%m-%d') - for day in date_array if day.weekday() == 0] + mondays = [day.strftime("%Y-%m-%d") for day in date_array if day.weekday() == 0] # get dates for good enough for brainwide map - ephys_sessions = behavior.SessionTrainingStatus & subj & \ - (acquisition.Session & 'task_protocol like "%ephys%"') + ephys_sessions = ( + behavior.SessionTrainingStatus + & subj + & (acquisition.Session & 'task_protocol like "%ephys%"') + ) if len(ephys_sessions): ephys_dates, good_enough = ephys_sessions.fetch( - 'session_start_time', 'good_enough_for_brainwide_map') - ephys_dates = [day.strftime('%Y-%m-%d') for day in ephys_dates] + "session_start_time", "good_enough_for_brainwide_map" + ) + ephys_dates = [day.strftime("%Y-%m-%d") for day in ephys_dates] else: ephys_dates = None good_enough = None # check whether the animal is already 7 months - dob = subj.fetch1('subject_birth_date') + dob = subj.fetch1("subject_birth_date") if dob: seven_months_date = dob + datetime.timedelta(days=210) if seven_months_date > last_date: @@ -143,90 +155,107 @@ def get_date_range(subj, include_water_weight=True): mondays=mondays, ephys_dates=ephys_dates, good_enough=good_enough, - seven_months_date=seven_months_date) + seven_months_date=seven_months_date, + ) def get_status(subj): # get the first date when animal achieved the next stage first_trained_1a = subj.aggr( behavior.SessionTrainingStatus & 'training_status = "trained_1a"', - first_session='DATE(min(session_start_time))') + first_session="DATE(min(session_start_time))", + ) first_trained_1b = subj.aggr( behavior.SessionTrainingStatus & 'training_status = "trained_1b"', - first_session='DATE(min(session_start_time))') - first_ephysrig = subj.aggr(behavior_ingest.Settings & 'pybpod_board like "%ephys%"', - first_session='DATE(min(session_start_time))') + first_session="DATE(min(session_start_time))", + ) + first_ephysrig = subj.aggr( + behavior_ingest.Settings & 'pybpod_board like "%ephys%"', + first_session="DATE(min(session_start_time))", + ) first_ready4ephysrig = subj.aggr( behavior.SessionTrainingStatus & 'training_status = "ready4ephysrig"', - first_session='DATE(min(session_start_time))') + first_session="DATE(min(session_start_time))", + ) first_ready4delay = subj.aggr( behavior.SessionTrainingStatus & 'training_status = "ready4delay"', - first_session='DATE(min(session_start_time))') + first_session="DATE(min(session_start_time))", + ) first_ready4recording = subj.aggr( behavior.SessionTrainingStatus & 'training_status = "ready4recording"', - first_session='DATE(min(session_start_time))') - if mode != 'public': + first_session="DATE(min(session_start_time))", + ) + if mode != "public": first_ephys_session = subj.aggr( behavior.SessionTrainingStatus & ephys.ProbeInsertion, - first_session='DATE(min(session_start_time))') + first_session="DATE(min(session_start_time))", + ) else: first_ephys_session = [] result = dict() if len(first_trained_1a): - first_trained_1a_date = first_trained_1a.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_trained_1a=True, - first_trained_1a_date=first_trained_1a_date) + first_trained_1a_date = first_trained_1a.fetch1("first_session").strftime( + "%Y-%m-%d" + ) + result.update(is_trained_1a=True, first_trained_1a_date=first_trained_1a_date) else: result.update(is_trained_1a=False) if len(first_trained_1b): - first_trained_1b_date = first_trained_1b.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_trained_1b=True, - first_trained_1b_date=first_trained_1b_date) + first_trained_1b_date = first_trained_1b.fetch1("first_session").strftime( + "%Y-%m-%d" + ) + result.update(is_trained_1b=True, first_trained_1b_date=first_trained_1b_date) else: result.update(is_trained_1b=False) if len(first_ready4ephysrig): first_ready4ephysrig_date = first_ready4ephysrig.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_ready4ephysrig=True, - first_ready4ephysrig_date=first_ready4ephysrig_date) + "first_session" + ).strftime("%Y-%m-%d") + result.update( + is_ready4ephysrig=True, first_ready4ephysrig_date=first_ready4ephysrig_date + ) else: result.update(is_ready4ephysrig=False) if len(first_ephysrig): - first_ephysrig_date = first_ephysrig.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_on_ephysrig=True, - first_ephysrig_date=first_ephysrig_date) + first_ephysrig_date = first_ephysrig.fetch1("first_session").strftime( + "%Y-%m-%d" + ) + result.update(is_on_ephysrig=True, first_ephysrig_date=first_ephysrig_date) else: result.update(is_on_ephysrig=False) if len(first_ready4delay): - first_ready4delay_date = first_ready4delay.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_ready4delay=True, - first_ready4delay_date=first_ready4delay_date) + first_ready4delay_date = first_ready4delay.fetch1("first_session").strftime( + "%Y-%m-%d" + ) + result.update( + is_ready4delay=True, first_ready4delay_date=first_ready4delay_date + ) else: result.update(is_ready4delay=False) if len(first_ready4recording): first_ready4recording_date = first_ready4recording.fetch1( - 'first_session').strftime('%Y-%m-%d') - result.update(is_ready4recording=True, - first_ready4recording_date=first_ready4recording_date) + "first_session" + ).strftime("%Y-%m-%d") + result.update( + is_ready4recording=True, + first_ready4recording_date=first_ready4recording_date, + ) else: result.update(is_ready4recording=False) if len(first_ephys_session): - first_ephys_session_date = first_ephys_session.fetch1( - 'first_session').strftime('%Y-%m-%d') + first_ephys_session_date = first_ephys_session.fetch1("first_session").strftime( + "%Y-%m-%d" + ) result.update( - has_ephys_session=True, - first_ephys_session_date=first_ephys_session_date) + has_ephys_session=True, first_ephys_session_date=first_ephys_session_date + ) else: result.update(has_ephys_session=False) @@ -235,18 +264,17 @@ def get_status(subj): def get_fit_pars(sessions): fit_pars_list = [] - for session in sessions.fetch('KEY'): - prob_left, threshold, bias, lapse_low, lapse_high = \ - (sessions & session).fetch1( - 'prob_left', 'threshold', 'bias', 'lapse_low', 'lapse_high' - ) + for session in sessions.fetch("KEY"): + prob_left, threshold, bias, lapse_low, lapse_high = (sessions & session).fetch1( + "prob_left", "threshold", "bias", "lapse_low", "lapse_high" + ) fit_pars_list.append( dict( prob_left=prob_left, threshold=threshold, bias=bias, lapse_high=lapse_high, - lapse_low=lapse_low + lapse_low=lapse_low, ) ) return fit_pars_list @@ -265,8 +293,8 @@ def get_color(prob_left, opacity=0.3): else: return - curve_color = 'rgba{}'.format(color + tuple([1])) - error_color = 'rgba{}'.format(color + tuple([opacity])) + curve_color = "rgba{}".format(color + tuple([1])) + error_color = "rgba{}".format(color + tuple([opacity])) return curve_color, error_color @@ -276,62 +304,72 @@ def create_psych_curve_plot(sessions): data_errorbar = [] data_fit = [] - for session in sessions.fetch('KEY'): - contrasts, prob_right, prob_left, \ - threshold, bias, lapse_low, lapse_high, \ - n_trials, n_trials_right = \ - (sessions & session).fetch1( - 'signed_contrasts', 'prob_choose_right', 'prob_left', - 'threshold', 'bias', 'lapse_low', 'lapse_high', - 'n_trials_stim', 'n_trials_stim_right') + for session in sessions.fetch("KEY"): + ( + contrasts, + prob_right, + prob_left, + threshold, + bias, + lapse_low, + lapse_high, + n_trials, + n_trials_right, + ) = (sessions & session).fetch1( + "signed_contrasts", + "prob_choose_right", + "prob_left", + "threshold", + "bias", + "lapse_low", + "lapse_high", + "n_trials_stim", + "n_trials_stim_right", + ) pars = [bias, threshold, lapse_low, lapse_high] contrasts = contrasts * 100 contrasts_fit = np.arange(-100, 100) prob_right_fit = psy.erf_psycho_2gammas(pars, contrasts_fit) - ci = smp.proportion_confint( - n_trials_right, n_trials, - alpha=0.032, method='normal') - prob_right + ci = ( + smp.proportion_confint( + n_trials_right, n_trials, alpha=0.032, method="normal" + ) + - prob_right + ) curve_color, error_color = get_color(prob_left, 0.3) behavior_data = go.Scatter( x=contrasts.tolist(), y=prob_right.tolist(), - marker=dict( - size=6, - color=curve_color, - line=dict( - color='white', - width=1 - ) - ), - mode='markers', - name=f'p_left = {prob_left}, data with 68% CI' + marker=dict(size=6, color=curve_color, line=dict(color="white", width=1)), + mode="markers", + name=f"p_left = {prob_left}, data with 68% CI", ) behavior_errorbar = go.Scatter( x=contrasts.tolist(), y=prob_right.tolist(), error_y=dict( - type='data', + type="data", array=ci[0].tolist(), arrayminus=np.negative(ci[1]).tolist(), visible=True, - color=error_color + color=error_color, ), marker=dict( size=6, ), - mode='none', - showlegend=False + mode="none", + showlegend=False, ) behavior_fit = go.Scatter( x=contrasts_fit.tolist(), y=prob_right_fit.tolist(), - name=f'p_left = {prob_left} model fits', - marker=dict(color=curve_color) + name=f"p_left = {prob_left} model fits", + marker=dict(color=curve_color), ) data_mean.append(behavior_data) @@ -341,21 +379,10 @@ def create_psych_curve_plot(sessions): layout = go.Layout( width=630, height=350, - title=dict( - text='Psychometric Curve', - x=0.25, - y=0.85 - ), - xaxis=dict( - title='Contrast (%)'), - yaxis=dict( - title='Probability choosing right', - range=[-0.05, 1.05]), - template=dict( - layout=dict( - plot_bgcolor="white" - ) - ) + title=dict(text="Psychometric Curve", x=0.25, y=0.85), + xaxis=dict(title="Contrast (%)"), + yaxis=dict(title="Probability choosing right", range=[-0.05, 1.05]), + template=dict(layout=dict(plot_bgcolor="white")), ) data = data_errorbar @@ -370,11 +397,16 @@ def create_psych_curve_plot(sessions): def create_rt_contrast_plot(sessions): data = [] - for session in sessions.fetch('KEY'): - contrasts, prob_left, reaction_time, ci_low, ci_high = \ - (sessions & session).fetch1( - 'signed_contrasts', 'prob_left', 'reaction_time_contrast', - 'reaction_time_ci_low', 'reaction_time_ci_high') + for session in sessions.fetch("KEY"): + contrasts, prob_left, reaction_time, ci_low, ci_high = ( + sessions & session + ).fetch1( + "signed_contrasts", + "prob_left", + "reaction_time_contrast", + "reaction_time_ci_low", + "reaction_time_ci_high", + ) contrasts = contrasts * 100 error_low = reaction_time - ci_low @@ -385,33 +417,26 @@ def create_rt_contrast_plot(sessions): rt_data = go.Scatter( x=contrasts.tolist(), y=reaction_time.tolist(), - marker=dict( - size=6, - color=curve_color, - line=dict( - color='white', - width=1 - ) - ), - mode='markers+lines', - name=f'p_left = {prob_left}' + marker=dict(size=6, color=curve_color, line=dict(color="white", width=1)), + mode="markers+lines", + name=f"p_left = {prob_left}", ) rt_errorbar = go.Scatter( x=contrasts.tolist(), y=reaction_time.tolist(), error_y=dict( - type='data', + type="data", array=error_high.tolist(), arrayminus=error_low.tolist(), visible=True, - color=error_color + color=error_color, ), marker=dict( size=6, ), - mode='none', - name='median with 68% CI', + mode="none", + name="median with 68% CI", ) data.append(rt_data) @@ -420,24 +445,11 @@ def create_rt_contrast_plot(sessions): layout = go.Layout( width=630, height=350, - title=dict( - text='Reaction time - Contrast', - x=0.25, - y=0.85 - ), - xaxis=dict( - title='Contrast (%)'), - yaxis=dict( - title='Reaction time (s)'), - legend=dict( - x=1.1, - y=0.9, - orientation='v'), - template=dict( - layout=dict( - plot_bgcolor="white" - ) - ) + title=dict(text="Reaction time - Contrast", x=0.25, y=0.85), + xaxis=dict(title="Contrast (%)"), + yaxis=dict(title="Reaction time (s)"), + legend=dict(x=1.1, y=0.9, orientation="v"), + template=dict(layout=dict(plot_bgcolor="white")), ) return go.Figure(data=data, layout=layout) @@ -449,220 +461,217 @@ def create_rt_trialnum_plot(trials): # 1. There were trials where stim_on_time is not available, # but go_cue_trigger_time is; # 2. There were any trials where stim_on_time is available. - trials_go_cue_only = trials & \ - 'trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL' - trials_stim_on = trials & \ - 'trial_stim_on_time is not NULL' + trials_go_cue_only = ( + trials & "trial_stim_on_time is NULL and trial_go_cue_trigger_time is not NULL" + ) + trials_stim_on = trials & "trial_stim_on_time is not NULL" rt = [] if len(trials_go_cue_only): trials_rt_go_cue_only = trials_go_cue_only.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_go_cue_trigger_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_go_cue_trigger_time", + ) rt += trials_rt_go_cue_only.fetch(as_dict=True) if len(trials_stim_on): trials_rt_stim_on = trials.proj( - signed_contrast='trial_stim_contrast_left- \ - trial_stim_contrast_right', - rt='trial_response_time-trial_stim_on_time') + signed_contrast="trial_stim_contrast_left- \ + trial_stim_contrast_right", + rt="trial_response_time-trial_stim_on_time", + ) rt += trials_rt_stim_on.fetch(as_dict=True) rt_trials = pd.DataFrame(rt) rt_trials.index = rt_trials.index + 1 - rt_rolled = rt_trials['rt'].rolling(window=10).median() + rt_rolled = rt_trials["rt"].rolling(window=10).median() rt_rolled = rt_rolled.where((pd.notnull(rt_rolled)), None) rt_trials = rt_trials.where((pd.notnull(rt_trials)), None) data = dict( x=rt_trials.index.tolist(), - y=rt_trials['rt'].tolist(), - name='data', - type='scatter', - mode='markers', - marker=dict( - color='lightgray' - ) + y=rt_trials["rt"].tolist(), + name="data", + type="scatter", + mode="markers", + marker=dict(color="lightgray"), ) rolled = dict( x=rt_trials.index.tolist(), y=rt_rolled.values.tolist(), - name='rolled data', - type='scatter', - marker=dict( - color='black' - ) + name="rolled data", + type="scatter", + marker=dict(color="black"), ) layout = go.Layout( width=630, height=400, - title=dict( - text='Reaction time - trial number', - x=0.26, - y=0.85 - ), - xaxis=dict(title='Trial number'), + title=dict(text="Reaction time - trial number", x=0.26, y=0.85), + xaxis=dict(title="Trial number"), yaxis=dict( - title='Reaction time (s)', - type='log', + title="Reaction time (s)", + type="log", range=np.log10([0.1, 100]).tolist(), - dtick=np.log10([0.1, 1, 10, 100]).tolist()), - template=dict( - layout=dict( - plot_bgcolor="white" - ) - ) + dtick=np.log10([0.1, 1, 10, 100]).tolist(), + ), + template=dict(layout=dict(plot_bgcolor="white")), ) return go.Figure(data=[data, rolled], layout=layout) -def create_status_plot(data, yrange, status, xaxis='x1', yaxis='y1', - show_legend_external=True, public=False): +def create_status_plot( + data, + yrange, + status, + xaxis="x1", + yaxis="y1", + show_legend_external=True, + public=False, +): if public: - trained_marker_name = 'first day got trained' + trained_marker_name = "first day got trained" else: - trained_marker_name = 'first day got trained 1a' - if status['is_trained_1a']: + trained_marker_name = "first day got trained 1a" + if status["is_trained_1a"]: data.append( - go.Scatter( - x=[status['first_trained_1a_date'], - status['first_trained_1a_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(195, 90, 80, 1)'), - name=trained_marker_name, - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[status["first_trained_1a_date"], status["first_trained_1a_date"]], + y=yrange, + mode="lines", + marker=dict(color="rgba(195, 90, 80, 1)"), + name=trained_marker_name, + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_trained_1b'] and (not public): + if status["is_trained_1b"] and (not public): data.append( - go.Scatter( - x=[status['first_trained_1b_date'], - status['first_trained_1b_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(255, 153, 20, 1)'), - name='first day got trained 1b', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[status["first_trained_1b_date"], status["first_trained_1b_date"]], + y=yrange, + mode="lines", + marker=dict(color="rgba(255, 153, 20, 1)"), + name="first day got trained 1b", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_ready4ephysrig'] and (not public): + if status["is_ready4ephysrig"] and (not public): data.append( - go.Scatter( - x=[status['first_ready4ephysrig_date'], - status['first_ready4ephysrig_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(28, 20, 255, 1)'), - name='first day got ready4ephysrig', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[ + status["first_ready4ephysrig_date"], + status["first_ready4ephysrig_date"], + ], + y=yrange, + mode="lines", + marker=dict(color="rgba(28, 20, 255, 1)"), + name="first day got ready4ephysrig", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_on_ephysrig'] and (not public): + if status["is_on_ephysrig"] and (not public): data.append( go.Scatter( - x=[status['first_ephysrig_date'], - status['first_ephysrig_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(116, 15, 170, 1)'), - name='first day on ephysrig', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + x=[status["first_ephysrig_date"], status["first_ephysrig_date"]], + y=yrange, + mode="lines", + marker=dict(color="rgba(116, 15, 170, 1)"), + name="first day on ephysrig", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_ready4delay'] and (not public): + if status["is_ready4delay"] and (not public): data.append( - go.Scatter( - x=[status['first_ready4delay_date'], - status['first_ready4delay_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(117, 117, 117, 1)'), - name='first day got ready4delay', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[status["first_ready4delay_date"], status["first_ready4delay_date"]], + y=yrange, + mode="lines", + marker=dict(color="rgba(117, 117, 117, 1)"), + name="first day got ready4delay", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_ready4recording'] and (not public): + if status["is_ready4recording"] and (not public): data.append( - go.Scatter( - x=[status['first_ready4recording_date'], - status['first_ready4recording_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(20, 255, 91, 1)'), - name='first day got ready4recording', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[ + status["first_ready4recording_date"], + status["first_ready4recording_date"], + ], + y=yrange, + mode="lines", + marker=dict(color="rgba(20, 255, 91, 1)"), + name="first day got ready4recording", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['is_over_seven_months']: + if status["is_over_seven_months"]: data.append( - go.Scatter( - x=[status['seven_months_date'], - status['seven_months_date']], - y=yrange, - mode="lines", - marker=dict(color='rgba(0, 0, 0, 1)'), - name='mouse became seven months', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x' + go.Scatter( + x=[status["seven_months_date"], status["seven_months_date"]], + y=yrange, + mode="lines", + marker=dict(color="rgba(0, 0, 0, 1)"), + name="mouse became seven months", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", ) ) - if status['has_ephys_session']: + if status["has_ephys_session"]: data.append( - go.Scatter( - x=[status['first_ephys_session_date'], - status['first_ephys_session_date']], - y=yrange, - mode="lines", - line=dict( - width=2, - color='rgba(5, 142, 255, 1)', - dash='dashdot'), - name='first ephys session date', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - hoverinfo='x', - legendgroup='ephys_good_enough' + go.Scatter( + x=[ + status["first_ephys_session_date"], + status["first_ephys_session_date"], + ], + y=yrange, + mode="lines", + line=dict(width=2, color="rgba(5, 142, 255, 1)", dash="dashdot"), + name="first ephys session date", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + hoverinfo="x", + legendgroup="ephys_good_enough", ) ) return data -def create_monday_plot(data, yrange, mondays, xaxis='x1', yaxis='y1', - show_legend_external=True): +def create_monday_plot( + data, yrange, mondays, xaxis="x1", yaxis="y1", show_legend_external=True +): for imonday, monday in enumerate(mondays): if imonday == 0 and show_legend_external: @@ -675,36 +684,36 @@ def create_monday_plot(data, yrange, mondays, xaxis='x1', yaxis='y1', x=[monday, monday], y=yrange, mode="lines", - line=dict( - width=0.5, - color='gray', - dash='dot' - ), - name='Mondays', + line=dict(width=0.5, color="gray", dash="dot"), + name="Mondays", xaxis=xaxis, yaxis=yaxis, showlegend=show_legend, - legendgroup='monday', - hoverinfo='skip' + legendgroup="monday", + hoverinfo="skip", ) ) return data -def create_good_enough_brainmap_plot(data, yrange, ephys_dates, - good_enough, - xaxis='x1', yaxis='y1', - show_legend_external=True): +def create_good_enough_brainmap_plot( + data, + yrange, + ephys_dates, + good_enough, + xaxis="x1", + yaxis="y1", + show_legend_external=True, +): shown_red = 0 shown_blue = 0 - for i_good_date, (ephys_date, good) in \ - enumerate(zip(ephys_dates, good_enough)): + for i_good_date, (ephys_date, good) in enumerate(zip(ephys_dates, good_enough)): if good: - color = 'rgba(5, 142, 255, 0.3)' - legend = 'good enough for brainwide map' + color = "rgba(5, 142, 255, 0.3)" + legend = "good enough for brainwide map" if shown_blue: show_legend = False elif show_legend_external: @@ -713,8 +722,8 @@ def create_good_enough_brainmap_plot(data, yrange, ephys_dates, else: show_legend = False else: - color = 'rgba(255, 18, 18, 0.2)' - legend = 'not good enough for brainwide map' + color = "rgba(255, 18, 18, 0.2)" + legend = "not good enough for brainwide map" if shown_red: show_legend = False elif show_legend_external: @@ -728,16 +737,13 @@ def create_good_enough_brainmap_plot(data, yrange, ephys_dates, x=[ephys_date, ephys_date], y=yrange, mode="lines", - line=dict( - width=2, - color=color - ), + line=dict(width=2, color=color), name=legend, xaxis=xaxis, yaxis=yaxis, showlegend=show_legend, - legendgroup='ephys_good_enough', - hoverinfo='skip' + legendgroup="ephys_good_enough", + hoverinfo="skip", ) ) diff --git a/ibl_pipeline/plotting/plotting_utils_ephys.py b/ibl_pipeline/plotting/plotting_utils_ephys.py index 79e49fdb..36d45cfd 100755 --- a/ibl_pipeline/plotting/plotting_utils_ephys.py +++ b/ibl_pipeline/plotting/plotting_utils_ephys.py @@ -1,48 +1,48 @@ -from ibl_pipeline.analyses import behavior -from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import subject, action, acquisition, ephys -from ibl_pipeline.utils import psychofit as psy -import ibl_pipeline +import base64 +import datetime +import gc +import io +import os +import tempfile from uuid import UUID -import numpy as np + +import boto3 +import colorlover as cl import datajoint as dj -import plotly.graph_objs as go import matplotlib.pyplot as plt +import numpy as np import pandas as pd -import seaborn as sns -import colorlover as cl import plotly -from plotly import tools +import plotly.graph_objs as go +import seaborn as sns import statsmodels.stats.proportion as smp -from scipy.signal import gaussian, convolve, boxcar -import os -import boto3 -import io -import tempfile -import base64 -import gc -import datetime +from plotly import tools +from scipy.signal import boxcar, convolve, gaussian + +import ibl_pipeline +from ibl_pipeline import acquisition, action +from ibl_pipeline import behavior as behavior_ingest +from ibl_pipeline import ephys, subject +from ibl_pipeline.analyses import behavior +from ibl_pipeline.utils import psychofit as psy -def create_psth_plot(trials, align_event, - nbins, window_size, x_lim=[-1, 1], - show_plot=False): - spk_times = (trials & 'event="{}"'.format(align_event)).fetch( - 'trial_spike_times') +def create_psth_plot( + trials, align_event, nbins, window_size, x_lim=[-1, 1], show_plot=False +): + spk_times = (trials & 'event="{}"'.format(align_event)).fetch("trial_spike_times") mean_counts = np.divide( - np.histogram(np.hstack(spk_times), - range=x_lim, - bins=nbins)[0], - len(spk_times)) + np.histogram(np.hstack(spk_times), range=x_lim, bins=nbins)[0], len(spk_times) + ) time_bins = np.linspace(x_lim[0], x_lim[1], num=nbins) # convolve with a box-car filter dt = np.mean(np.diff(time_bins)) psth = np.divide( - convolve(mean_counts, boxcar(window_size), mode='same'), - window_size*dt) + convolve(mean_counts, boxcar(window_size), mode="same"), window_size * dt + ) fig = plt.figure(dpi=300, frameon=False, figsize=[10, 5]) - ax = plt.Axes(fig, [0., 0., 1., 1.]) + ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0]) ax.plot(time_bins, psth, markeredgewidth=0) ax.set_axis_off() @@ -54,13 +54,14 @@ def create_psth_plot(trials, align_event, # set the limits to be exactly what you want ax.set_xlim(x_lim[0], x_lim[1]) - ax.axvline(0, linewidth=2, alpha=0.5, color='k', label=align_event) + ax.axvline(0, linewidth=2, alpha=0.5, color="k", label=align_event) ax.legend(loc=[0.01, 0.87], prop=dict(size=14)) y_lim = ax.get_ylim() # save the figure with `pad_inches=0` to remove # any padding in the image import tempfile + temp = tempfile.NamedTemporaryFile(suffix=".png") fig.savefig(temp.name, pad_inches=0) @@ -70,25 +71,33 @@ def create_psth_plot(trials, align_event, gc.collect() import base64 + with open(temp.name, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) temp.close() return encoded_string, y_lim -def compute_psth(trials, trial_type, align_event, bin_size=0.025, - smoothing=0.025, x_lim=[-1, 1], as_dict=True): - - if trial_type == 'left': - color = 'green' - elif trial_type == 'right': - color = 'blue' - elif trial_type == 'all': - color = 'black' - elif trial_type == 'incorrect': - color = 'red' +def compute_psth( + trials, + trial_type, + align_event, + bin_size=0.025, + smoothing=0.025, + x_lim=[-1, 1], + as_dict=True, +): + + if trial_type == "left": + color = "green" + elif trial_type == "right": + color = "blue" + elif trial_type == "all": + color = "black" + elif trial_type == "incorrect": + color = "red" else: - raise NameError('Invalid type name') + raise NameError("Invalid type name") # get rid of boundary effects for smoothing n_offset = 5 * int(np.ceil(smoothing / bin_size)) @@ -96,30 +105,26 @@ def compute_psth(trials, trial_type, align_event, bin_size=0.025, n_bins_post = int(np.ceil(x_lim[1] / bin_size)) + n_offset n_bins = n_bins_pre + n_bins_post - spk_times = trials.fetch('trial_spike_times') - hist = np.histogram(np.hstack(spk_times), - range=x_lim, - bins=n_bins) + spk_times = trials.fetch("trial_spike_times") + hist = np.histogram(np.hstack(spk_times), range=x_lim, bins=n_bins) - mean_fr = np.divide(hist[0], len(spk_times)*bin_size) + mean_fr = np.divide(hist[0], len(spk_times) * bin_size) time = hist[1] - time_bins = (time[:-1] + time[1:])/2 + time_bins = (time[:-1] + time[1:]) / 2 # build gaussian kernel if smoothing > 0: w = n_bins - 1 if n_bins % 2 == 0 else n_bins window = gaussian(w, std=smoothing / bin_size) window /= np.sum(window) - psth = convolve(mean_fr, window, mode='same', method='auto') + psth = convolve(mean_fr, window, mode="same", method="auto") data = go.Scatter( x=list(time_bins), y=list(psth), - mode='lines', - marker=dict( - size=6, - color=color), - name='{} trials'.format(trial_type) + mode="lines", + marker=dict(size=6, color=color), + name="{} trials".format(trial_type), ) if as_dict: return data @@ -128,26 +133,34 @@ def compute_psth(trials, trial_type, align_event, bin_size=0.025, def compute_psth_with_errorbar( - trials, trial_type, align_event, bin_size=0.025, - smoothing=0.025, x_lim=[-1, 1], as_plotly_obj=True): - - if trial_type == 'left': - color = 'green' - err_color = 'rgba(0, 255, 0, 0.2)' - elif trial_type == 'right': - color = 'blue' - err_color = 'rgba(0, 0, 255, 0.2)' - elif trial_type == 'all': - color = 'black' - err_color = 'rgba(0, 0, 0, 0.2)' - elif trial_type == 'incorrect': - color = 'red' - err_color = 'rgba(255, 0, 0, 0.2)' + trials, + trial_type, + align_event, + bin_size=0.025, + smoothing=0.025, + x_lim=[-1, 1], + as_plotly_obj=True, +): + + if trial_type == "left": + color = "green" + err_color = "rgba(0, 255, 0, 0.2)" + elif trial_type == "right": + color = "blue" + err_color = "rgba(0, 0, 255, 0.2)" + elif trial_type == "all": + color = "black" + err_color = "rgba(0, 0, 0, 0.2)" + elif trial_type == "incorrect": + color = "red" + err_color = "rgba(255, 0, 0, 0.2)" else: - raise NameError('Invalid type name') + raise NameError("Invalid type name") # set up bins - n_offset = 5 * int(np.ceil(smoothing / bin_size)) # get rid of boundary effects for smoothing + n_offset = 5 * int( + np.ceil(smoothing / bin_size) + ) # get rid of boundary effects for smoothing n_bins_pre = int(np.ceil(np.negative(x_lim[0]) / bin_size)) + n_offset n_bins_post = int(np.ceil(x_lim[1] / bin_size)) + n_offset n_bins = n_bins_pre + n_bins_post @@ -156,38 +169,38 @@ def compute_psth_with_errorbar( bins = np.arange(-n_bins_pre, n_bins_post + 1) * bin_size # spikes times for all trials - spk_times = trials.fetch('trial_spike_times') + spk_times = trials.fetch("trial_spike_times") # trial_id for each spike, flattened - trial_ids_flat = np.hstack([[i_trial] * len(spk_time) - for i_trial, spk_time in enumerate(spk_times)]) + trial_ids_flat = np.hstack( + [[i_trial] * len(spk_time) for i_trial, spk_time in enumerate(spk_times)] + ) # flatten spk times spk_times_flat = np.hstack(spk_times) # filter out spike times that are not in this range - rel_idxs = np.bitwise_and(spk_times_flat >= bins[0], - spk_times_flat <= bins[-1]) + rel_idxs = np.bitwise_and(spk_times_flat >= bins[0], spk_times_flat <= bins[-1]) filtered_spike_times_flat = spk_times_flat[rel_idxs] filtered_trial_ids_flat = trial_ids_flat[rel_idxs] # ----- assign each spike into 2D bins, each trial and each time slot -------- # bin id of each spike - bin_id = (np.floor((filtered_spike_times_flat - np.min(bins)) / bin_size)).astype(np.int64) + bin_id = (np.floor((filtered_spike_times_flat - np.min(bins)) / bin_size)).astype( + np.int64 + ) # trial id of each spike - trial_scale, trial_id = np.unique(filtered_trial_ids_flat, - return_inverse=True) + trial_scale, trial_id = np.unique(filtered_trial_ids_flat, return_inverse=True) # assign each spike a 1d index representing a combination of trial and time bin bin_num, trial_num = [bins.size, trial_scale.size] - ind2d = np.ravel_multi_index(np.c_[trial_id, bin_id].T, - dims=[trial_num, bin_num]) + ind2d = np.ravel_multi_index(np.c_[trial_id, bin_id].T, dims=[trial_num, bin_num]) # spike counts of each trial and each bin - spike_counts = np.bincount(ind2d, - minlength=bin_num * trial_num, - weights=None).reshape(trial_num, bin_num) + spike_counts = np.bincount( + ind2d, minlength=bin_num * trial_num, weights=None + ).reshape(trial_num, bin_num) # get binned spikes as a 2D array n_trials x n_bins binned_spikes = spike_counts[:, :-1] @@ -197,17 +210,18 @@ def compute_psth_with_errorbar( w = n_bins - 1 if n_bins % 2 == 0 else n_bins window = gaussian(w, std=smoothing / bin_size) window /= np.sum(window) - binned_spikes_conv = np.zeros([trial_num, bin_num-1]) + binned_spikes_conv = np.zeros([trial_num, bin_num - 1]) for j in range(binned_spikes.shape[0]): binned_spikes_conv[j, :] = convolve( - binned_spikes[j, :], window, mode='same', method='auto') + binned_spikes[j, :], window, mode="same", method="auto" + ) binned_spikes = binned_spikes_conv mean_psth = np.mean(binned_spikes, axis=0) - sem_psth = np.std(binned_spikes, axis=0)/np.sqrt(trial_num) + sem_psth = np.std(binned_spikes, axis=0) / np.sqrt(trial_num) - mean_psth = mean_psth[n_offset:-n_offset]/bin_size - sem_psth = sem_psth[n_offset:-n_offset]/bin_size + mean_psth = mean_psth[n_offset:-n_offset] / bin_size + sem_psth = sem_psth[n_offset:-n_offset] / bin_size upper_psth = mean_psth + sem_psth lower_psth = mean_psth - sem_psth @@ -219,28 +233,26 @@ def compute_psth_with_errorbar( upper_bound = psth = go.Scatter( x=list(time_bins), y=list(upper_psth), - mode='lines', + mode="lines", marker=dict(color="#444"), fillcolor=err_color, line=dict(width=0), - fill='tonexty', + fill="tonexty", showlegend=False, ) psth = go.Scatter( x=list(time_bins), y=list(mean_psth), - mode='lines', - marker=dict( - size=6, - color=color), - fill='tonexty', + mode="lines", + marker=dict(size=6, color=color), + fill="tonexty", fillcolor=err_color, - name='{} trials, mean +/- s.e.m'.format(trial_type) + name="{} trials, mean +/- s.e.m".format(trial_type), ) lower_bound = go.Scatter( x=list(time_bins), y=list(lower_psth), - mode='lines', + mode="lines", marker=dict(color="#444"), line=dict(width=0), showlegend=False, @@ -249,13 +261,16 @@ def compute_psth_with_errorbar( if as_plotly_obj: return [lower_bound, psth, upper_bound] else: - return list(time_bins), list(mean_psth), list(mean_psth+sem_psth), list(mean_psth-sem_psth) + return ( + list(time_bins), + list(mean_psth), + list(mean_psth + sem_psth), + list(mean_psth - sem_psth), + ) -def get_spike_times(trials, sorting_var, align_event, - sorting_query=None, - mark=None): - ''' +def get_spike_times(trials, sorting_var, align_event, sorting_query=None, mark=None): + """ get spike times as a vector and values of marking points Parameters: @@ -278,26 +293,28 @@ def get_spike_times(trials, sorting_var, align_event, marking_points: values of marking points, e.g. normalized reponse time for sorting 'reponse_time - stim_on_time' - ''' + """ - if sorting_var != 'trial_id': + if sorting_var != "trial_id": trials = (trials & 'event="{}"'.format(align_event)).proj( - 'trial_id', 'trial_spike_times', - sorting_query=sorting_query, mark=mark) + "trial_id", "trial_spike_times", sorting_query=sorting_query, mark=mark + ) spk_times, marking_points = trials.fetch( - 'trial_spike_times', 'mark', order_by='sorting_query') + "trial_spike_times", "mark", order_by="sorting_query" + ) else: trials = (trials & 'event="{}"'.format(align_event)).fetch( - 'trial_spike_times', order_by='trial_id') + "trial_spike_times", order_by="trial_id" + ) marking_points = None return spk_times, marking_points -def get_spike_times_trials(trials, sorting_var, align_event, - sorting_query=None, - mark=None): - ''' +def get_spike_times_trials( + trials, sorting_var, align_event, sorting_query=None, mark=None +): + """ return spike times of different groups of trials, right, left, and incorrect @@ -309,12 +326,10 @@ def get_spike_times_trials(trials, sorting_var, align_event, align_event: the event name that the spike times aligns to sorting_query: sorting variable used in the query, e.g. 'trial_response_time - trial_stim_on_time' - ''' + """ - trials_left = trials & 'trial_response_choice="CW"' & \ - 'trial_signed_contrast < 0' - trials_right = trials & 'trial_response_choice="CCW"' & \ - 'trial_signed_contrast > 0' + trials_left = trials & 'trial_response_choice="CW"' & "trial_signed_contrast < 0" + trials_right = trials & 'trial_response_choice="CCW"' & "trial_signed_contrast > 0" trials_incorrect = trials - trials_left.proj() - trials_right.proj() @@ -322,24 +337,27 @@ def get_spike_times_trials(trials, sorting_var, align_event, sorting_var=sorting_var, align_event=align_event, sorting_query=sorting_query, - mark=mark + mark=mark, ) spk_times_left, marking_points_left = get_spike_times(trials_left, **kargs) spk_times_right, marking_points_right = get_spike_times(trials_right, **kargs) - spk_times_incorrect, marking_points_incorrect = \ - get_spike_times(trials_incorrect, **kargs) + spk_times_incorrect, marking_points_incorrect = get_spike_times( + trials_incorrect, **kargs + ) - return spk_times_left, \ - marking_points_left, \ - spk_times_right, \ - marking_points_right, \ - spk_times_incorrect, \ - marking_points_incorrect + return ( + spk_times_left, + marking_points_left, + spk_times_right, + marking_points_right, + spk_times_incorrect, + marking_points_incorrect, + ) def store_fig_external(fig, store_type, fig_dir): - if store_type == 'filepath': + if store_type == "filepath": if not os.path.exists(os.path.dirname(fig_dir)): try: os.makedirs(os.path.dirname(fig_dir)) @@ -347,22 +365,21 @@ def store_fig_external(fig, store_type, fig_dir): if exc.errno != errno.EEXIST: raise fig.savefig(fig_dir, pad_inches=0) - elif store_type == 's3': - store = dj.config['stores']['plotting'] + elif store_type == "s3": + store = dj.config["stores"]["plotting"] s3 = boto3.resource( - 's3', - aws_access_key_id=store['access_key'], - aws_secret_access_key=store['secret_key']) + "s3", + aws_access_key_id=store["access_key"], + aws_secret_access_key=store["secret_key"], + ) - bucket = s3.Bucket(store['bucket']) + bucket = s3.Bucket(store["bucket"]) # upload to s3 img_data = io.BytesIO() - fig.savefig(img_data, format='png') + fig.savefig(img_data, format="png") img_data.seek(0) - bucket.put_object(Body=img_data, - ContentType='image/png', - Key=fig_dir) + bucket.put_object(Body=img_data, ContentType="image/png", Key=fig_dir) def convert_fig_to_encoded_string(fig): @@ -378,59 +395,84 @@ def convert_fig_to_encoded_string(fig): return encoded_string -def create_raster_plot_combined(trials, align_event, - sorting_var='trial_id', - x_lim=[-1, 1], - show_plot=False, - fig_dir=None, - store_type=None): +def create_raster_plot_combined( + trials, + align_event, + sorting_var="trial_id", + x_lim=[-1, 1], + show_plot=False, + fig_dir=None, + store_type=None, +): - sorting_query, mark, label = get_sort_and_marker( - align_event, sorting_var) + sorting_query, mark, label = get_sort_and_marker(align_event, sorting_var) fig = plt.figure(dpi=150, frameon=False, figsize=[10, 5]) - ax = plt.Axes(fig, [0., 0., 1., 1.]) + ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0]) if len(trials): - if sorting_var == 'trial_id': + if sorting_var == "trial_id": spk_times, trial_ids = (trials & 'event="{}"'.format(align_event)).fetch( - 'trial_spike_times', 'trial_id', order_by='trial_id') + "trial_spike_times", "trial_id", order_by="trial_id" + ) spk_trial_ids = np.hstack( - [[trial_id] * len(spk_time) - for trial_id, spk_time in enumerate(spk_times)]) - ax.plot(np.hstack(spk_times), spk_trial_ids, 'k.', alpha=0.5, - markeredgewidth=0) - elif sorting_var == 'contrast': - spk_times, trial_contrasts = (trials & 'event="{}"'.format(align_event)).fetch( - 'trial_spike_times', 'trial_signed_contrast', - order_by='trial_signed_contrast, trial_id') + [ + [trial_id] * len(spk_time) + for trial_id, spk_time in enumerate(spk_times) + ] + ) + ax.plot( + np.hstack(spk_times), spk_trial_ids, "k.", alpha=0.5, markeredgewidth=0 + ) + elif sorting_var == "contrast": + spk_times, trial_contrasts = ( + trials & 'event="{}"'.format(align_event) + ).fetch( + "trial_spike_times", + "trial_signed_contrast", + order_by="trial_signed_contrast, trial_id", + ) spk_trial_ids = np.hstack( - [[trial_id] * len(spk_time) - for trial_id, spk_time in enumerate(spk_times)]) - ax.plot(np.hstack(spk_times), spk_trial_ids, 'k.', alpha=0.5, - markeredgewidth=0) + [ + [trial_id] * len(spk_time) + for trial_id, spk_time in enumerate(spk_times) + ] + ) + ax.plot( + np.hstack(spk_times), spk_trial_ids, "k.", alpha=0.5, markeredgewidth=0 + ) # plot different contrasts as background contrasts, u_inds = np.unique(trial_contrasts, return_index=True) u_inds = list(u_inds) + [len(trial_contrasts)] - tick_positions = np.add(u_inds[1:], u_inds[:-1])/2 + tick_positions = np.add(u_inds[1:], u_inds[:-1]) / 2 - puor = cl.scales[str(len(contrasts))]['div']['PuOr'] + puor = cl.scales[str(len(contrasts))]["div"]["PuOr"] puor = np.divide(cl.to_numeric(puor), 255) for i, ind in enumerate(u_inds[:-1]): - ax.fill_between([-1, 1], u_inds[i], u_inds[i+1]-1, color=puor[i], alpha=0.8) + ax.fill_between( + [-1, 1], u_inds[i], u_inds[i + 1] - 1, color=puor[i], alpha=0.8 + ) fig.add_axes(ax) - elif sorting_var == 'feedback type': - spk_times, trial_fb_types = (trials & 'event="{}"'.format(align_event)).fetch( - 'trial_spike_times', 'trial_feedback_type', - order_by='trial_feedback_type, trial_id') + elif sorting_var == "feedback type": + spk_times, trial_fb_types = ( + trials & 'event="{}"'.format(align_event) + ).fetch( + "trial_spike_times", + "trial_feedback_type", + order_by="trial_feedback_type, trial_id", + ) spk_trial_ids = np.hstack( - [[trial_id] * len(spk_time) - for trial_id, spk_time in enumerate(spk_times)]) - ax.plot(np.hstack(spk_times), spk_trial_ids, 'k.', alpha=0.5, - markeredgewidth=0) + [ + [trial_id] * len(spk_time) + for trial_id, spk_time in enumerate(spk_times) + ] + ) + ax.plot( + np.hstack(spk_times), spk_trial_ids, "k.", alpha=0.5, markeredgewidth=0 + ) # plot different feedback types as background fb_types, u_inds = np.unique(trial_fb_types, return_index=True) @@ -439,27 +481,45 @@ def create_raster_plot_combined(trials, align_event, colors = sns.diverging_palette(10, 240, n=len(fb_types)) for i, ind in enumerate(u_inds[:-1]): - ax.fill_between([-1, 1], u_inds[i], u_inds[i+1]-1, color=colors[i], alpha=0.5) + ax.fill_between( + [-1, 1], u_inds[i], u_inds[i + 1] - 1, color=colors[i], alpha=0.5 + ) fig.add_axes(ax) else: - spk_times_left, marking_points_left, \ - spk_times_right, marking_points_right, \ - spk_times_incorrect, marking_points_incorrect = \ - get_spike_times_trials( - trials, sorting_var, align_event, sorting_query, mark) + ( + spk_times_left, + marking_points_left, + spk_times_right, + marking_points_right, + spk_times_incorrect, + marking_points_incorrect, + ) = get_spike_times_trials( + trials, sorting_var, align_event, sorting_query, mark + ) id_gap = len(trials) * 0 if len(spk_times_incorrect): spk_times_all_incorrect = np.hstack(spk_times_incorrect) - id_incorrect = [[i] * len(spike_time) - for i, spike_time in - enumerate(spk_times_incorrect)] + id_incorrect = [ + [i] * len(spike_time) + for i, spike_time in enumerate(spk_times_incorrect) + ] id_incorrect = np.hstack(id_incorrect) - ax.plot(spk_times_all_incorrect, id_incorrect, 'r.', - alpha=0.5, markeredgewidth=0, label='incorrect trials') - ax.plot(marking_points_incorrect, - range(len(spk_times_incorrect)), 'r', label=label) + ax.plot( + spk_times_all_incorrect, + id_incorrect, + "r.", + alpha=0.5, + markeredgewidth=0, + label="incorrect trials", + ) + ax.plot( + marking_points_incorrect, + range(len(spk_times_incorrect)), + "r", + label=label, + ) else: id_incorrect = [0] @@ -468,14 +528,24 @@ def create_raster_plot_combined(trials, align_event, if len(spk_times_left): spk_times_all_left = np.hstack(spk_times_left) - id_left = [[i + max(id_incorrect) + id_gap] * len(spike_time) - for i, spike_time in - enumerate(spk_times_left)] + id_left = [ + [i + max(id_incorrect) + id_gap] * len(spike_time) + for i, spike_time in enumerate(spk_times_left) + ] id_left = np.hstack(id_left) - ax.plot(spk_times_all_left, id_left, 'g.', - alpha=0.5, markeredgewidth=0, label='left trials') - ax.plot(marking_points_left, - np.add(range(len(spk_times_left)), max(id_incorrect) + id_gap), 'g') + ax.plot( + spk_times_all_left, + id_left, + "g.", + alpha=0.5, + markeredgewidth=0, + label="left trials", + ) + ax.plot( + marking_points_left, + np.add(range(len(spk_times_left)), max(id_incorrect) + id_gap), + "g", + ) else: id_left = [max(id_incorrect)] @@ -484,14 +554,25 @@ def create_raster_plot_combined(trials, align_event, if len(spk_times_right): spk_times_all_right = np.hstack(spk_times_right) - id_right = [[i + max(id_left) + id_gap] * len(spike_time) - for i, spike_time in enumerate(spk_times_right)] + id_right = [ + [i + max(id_left) + id_gap] * len(spike_time) + for i, spike_time in enumerate(spk_times_right) + ] id_right = np.hstack(id_right) - ax.plot(spk_times_all_right, id_right, 'b.', - alpha=0.5, markeredgewidth=0, label='right trials') - ax.plot(marking_points_right, - np.add(range(len(spk_times_right)), max(id_left) + id_gap), 'b') + ax.plot( + spk_times_all_right, + id_right, + "b.", + alpha=0.5, + markeredgewidth=0, + label="right trials", + ) + ax.plot( + marking_points_right, + np.add(range(len(spk_times_right)), max(id_left) + id_gap), + "b", + ) else: id_right = [max(id_left)] @@ -507,7 +588,7 @@ def create_raster_plot_combined(trials, align_event, # set the limits ax.set_xlim(x_lim[0], x_lim[1]) - if sorting_var in ('trial_id', 'contrast', 'feedback type'): + if sorting_var in ("trial_id", "contrast", "feedback type"): if len(spk_trial_ids): y_lim = max(spk_trial_ids) * 1.02 else: @@ -526,55 +607,71 @@ def create_raster_plot_combined(trials, align_event, store_fig_external(fig, store_type, fig_dir) fig.clear() gc.collect() - if sorting_var == 'contrast': + if sorting_var == "contrast": return [0, y_lim], label, contrasts, tick_positions else: return [0, y_lim], label else: encoded_string = convert_fig_to_encoded_string(fig) - if sorting_var == 'contrast': + if sorting_var == "contrast": return encoded_string, [0, y_lim], label, contrasts, tick_positions else: return encoded_string, [0, y_lim], label color_bins = sns.color_palette("hls", 500) -new_color_bins = np.vstack( - np.transpose(np.reshape(color_bins, [5, 100, 3]), [1, 0, 2])) +new_color_bins = np.vstack(np.transpose(np.reshape(color_bins, [5, 100, 3]), [1, 0, 2])) def prepare_spikes_data(key): clusters = ephys.DefaultCluster & key - clusters_ids, clusters_spk_times, \ - clusters_spk_amps, clusters_spk_depths, clusters_depths = \ - clusters.fetch('cluster_id', - 'cluster_spikes_times', - 'cluster_spikes_amps', - 'cluster_spikes_depths', - 'cluster_depth') + ( + clusters_ids, + clusters_spk_times, + clusters_spk_amps, + clusters_spk_depths, + clusters_depths, + ) = clusters.fetch( + "cluster_id", + "cluster_spikes_times", + "cluster_spikes_amps", + "cluster_spikes_depths", + "cluster_depth", + ) spikes_depths = np.hstack(clusters_spk_depths) spikes_times = np.hstack(clusters_spk_times) spikes_amps = np.hstack(clusters_spk_amps) spikes_clusters = np.hstack( - [[cluster_id]*len(cluster_spk_depths) - for (cluster_id, cluster_spk_depths) in - zip(clusters_ids, clusters_spk_depths)]) + [ + [cluster_id] * len(cluster_spk_depths) + for (cluster_id, cluster_spk_depths) in zip( + clusters_ids, clusters_spk_depths + ) + ] + ) return dict( spikes_depths=spikes_depths, spikes_times=spikes_times, spikes_amps=spikes_amps, spikes_clusters=spikes_clusters, - clusters_depths=clusters_depths) + clusters_depths=clusters_depths, + ) def driftmap( - clusters_depths, spikes_times, - spikes_amps, spikes_depths, spikes_clusters, - ax=None, axesoff=False, return_lims=False): - - ''' + clusters_depths, + spikes_times, + spikes_amps, + spikes_depths, + spikes_clusters, + ax=None, + axesoff=False, + return_lims=False, +): + + """ Plots the driftmap of a session or a trial. The plot shows the spike times vs spike depths. @@ -603,19 +700,22 @@ def driftmap( x_lim: list of two elements y_lim: list of two elements - ''' + """ # get the sorted idx of each depth, and create colors based on the idx sorted_idx = np.argsort(np.argsort(clusters_depths)) colors = np.vstack( - [np.repeat( - new_color_bins[np.mod(idx, 500), :][np.newaxis, ...], - n_spikes, axis=0) - for (idx, n_spikes) in - zip(sorted_idx, np.unique(spikes_clusters, - return_counts=True)[1])]) + [ + np.repeat( + new_color_bins[np.mod(idx, 500), :][np.newaxis, ...], n_spikes, axis=0 + ) + for (idx, n_spikes) in zip( + sorted_idx, np.unique(spikes_clusters, return_counts=True)[1] + ) + ] + ) max_amp = np.percentile(spikes_amps, 90) min_amp = np.percentile(spikes_amps, 10) @@ -623,18 +723,18 @@ def driftmap( opacity[opacity > 1] = 1 opacity[opacity < 0] = 0 - colorvec = np.zeros([len(opacity), 4], dtype='float16') - colorvec[:, 3] = opacity.astype('float16') - colorvec[:, 0:3] = colors.astype('float16') + colorvec = np.zeros([len(opacity), 4], dtype="float16") + colorvec[:, 3] = opacity.astype("float16") + colorvec[:, 0:3] = colors.astype("float16") - x = spikes_times.astype('float32') - y = spikes_depths.astype('float32') + x = spikes_times.astype("float32") + y = spikes_depths.astype("float32") if ax is None: fig = plt.Figure(dpi=50, frameon=False, figsize=[90, 90]) - ax = plt.Axes(fig, [0., 0., 1., 1.]) + ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0]) - ax.scatter(x, y, color=colorvec, edgecolors='none') + ax.scatter(x, y, color=colorvec, edgecolors="none") x_edge = (np.nanmax(x) - np.nanmin(x)) * 0.05 x_lim = [np.nanmin(x) - x_edge, np.nanmax(x) + x_edge] y_lim = [np.nanmin(y) - 50, np.nanmax(y) + 100] @@ -642,7 +742,7 @@ def driftmap( ax.set_ylim(y_lim[0], y_lim[1]) if axesoff: - ax.axis('off') + ax.axis("off") if return_lims: return ax, x_lim, y_lim @@ -653,12 +753,12 @@ def driftmap( # class Figure -def create_driftmap_plot(spike_data, figsize=[90, 90], dpi=50, - fig_dir=None, store_type=None): +def create_driftmap_plot( + spike_data, figsize=[90, 90], dpi=50, fig_dir=None, store_type=None +): fig = plt.Figure(dpi=dpi, frameon=False, figsize=figsize) - ax = plt.Axes(fig, [0., 0., 1., 1.]) - ax, x_lim, y_lim = driftmap( - **spike_data, ax=ax, axesoff=True, return_lims=True) + ax = plt.Axes(fig, [0.0, 0.0, 1.0, 1.0]) + ax, x_lim, y_lim = driftmap(**spike_data, ax=ax, axesoff=True, return_lims=True) fig.add_axes(ax) if fig_dir: store_fig_external(fig, store_type, fig_dir) @@ -674,12 +774,12 @@ def create_driftmap_plot(spike_data, figsize=[90, 90], dpi=50, def get_legend(trials_type, legend_group): - if trials_type == 'left': - color = 'green' - elif trials_type == 'right': - color = 'blue' - elif trials_type == 'incorrect': - color = 'red' + if trials_type == "left": + color = "green" + elif trials_type == "right": + color = "blue" + elif trials_type == "incorrect": + color = "red" else: raise NameError( f""" @@ -687,20 +787,16 @@ def get_legend(trials_type, legend_group): "left", "right", "incorrect" """ ) - if legend_group == 'spike': - marker = 'markers' + if legend_group == "spike": + marker = "markers" else: - marker = 'lines' + marker = "lines" return go.Scatter( x=[5], y=[10], mode=marker, - marker=dict( - size=6, - color=color, - opacity=0.5 - ), - name='{} time on
{} trials'.format(legend_group, trials_type), - legendgroup=legend_group + marker=dict(size=6, color=color, opacity=0.5), + name="{} time on
{} trials".format(legend_group, trials_type), + legendgroup=legend_group, ) diff --git a/ibl_pipeline/plotting/utils.py b/ibl_pipeline/plotting/utils.py index dd8d2f49..75360d1d 100755 --- a/ibl_pipeline/plotting/utils.py +++ b/ibl_pipeline/plotting/utils.py @@ -1,49 +1,53 @@ -''' +""" general utility functions or classes for plotting -''' +""" import numpy as np class RedBlueColorBar: - ''' + """ Color scale blue - white - red, with white at 0 value. - ''' + """ def __init__(self, max_val, min_val, ncolors=100): - self.cmax = 255. - self.cmin = 0. + self.cmax = 255.0 + self.cmin = 0.0 self.zrange = [[min_val, max_val]] color_values = np.linspace(self.cmin, self.cmax, ncolors) if max_val <= 0: self.colors = [[i, i, self.cmax] for i in color_values] - self.mode = 'BlueWhite' + self.mode = "BlueWhite" elif min_val >= 0: self.colors = [[self.cmax, i, i] for i in color_values[::-1]] - self.mode = 'WhiteRed' + self.mode = "WhiteRed" else: - self.c0 = (-min_val)/(max_val - min_val) - ncolors_pos = int(ncolors*(1 - self.c0)) + self.c0 = (-min_val) / (max_val - min_val) + ncolors_pos = int(ncolors * (1 - self.c0)) ncolors_neg = ncolors - ncolors_pos - color_step = self.cmax/(ncolors_pos-1) - colors_pos = [[self.cmax, i, i] - for i in np.linspace(self.cmin, self.cmax, - ncolors_pos)] - colors_neg = [[self.cmax - n*color_step, - self.cmax - n*color_step, self.cmax] - for n in np.arange(ncolors_neg)] + color_step = self.cmax / (ncolors_pos - 1) + colors_pos = [ + [self.cmax, i, i] + for i in np.linspace(self.cmin, self.cmax, ncolors_pos) + ] + colors_neg = [ + [self.cmax - n * color_step, self.cmax - n * color_step, self.cmax] + for n in np.arange(ncolors_neg) + ] self.colors = (colors_pos + colors_neg)[::-1] - self.mode = 'BlueWhiteRed' + self.mode = "BlueWhiteRed" def as_matplotlib(self): - return (np.array(self.colors)/255).astype('float32').tolist() + return (np.array(self.colors) / 255).astype("float32").tolist() def as_plotly(self): - if self.mode == 'BlueWhite': - return [[0, 'blue'], [1, 'white']] - elif self.mode == 'WhiteRed': - return [[0, 'white'], [1, 'blue']] - elif self.mode == 'BlueWhiteRed': - return [[0, 'rgb({}, {}, {})'.format(*self.colors[0])], - [self.c0, 'white'], - [1, 'red']] + if self.mode == "BlueWhite": + return [[0, "blue"], [1, "white"]] + elif self.mode == "WhiteRed": + return [[0, "white"], [1, "blue"]] + elif self.mode == "BlueWhiteRed": + return [ + [0, "rgb({}, {}, {})".format(*self.colors[0])], + [self.c0, "white"], + [1, "red"], + ] diff --git a/ibl_pipeline/process/__init__.py b/ibl_pipeline/process/__init__.py index 1b40a95f..eb415073 100755 --- a/ibl_pipeline/process/__init__.py +++ b/ibl_pipeline/process/__init__.py @@ -1,79 +1,82 @@ -from ibl_pipeline.ingest import alyxraw, QueryBuffer -from ibl_pipeline.utils import is_valid_uuid import datetime import pathlib + from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, alyxraw +from ibl_pipeline.utils import is_valid_uuid + + # TODO: change /data /tmp to use dj.config -def get_file_timestamp(filepath=None, filetype='json'): +def get_file_timestamp(filepath=None, filetype="json"): if not filepath: - if filetype == 'json': - filepath = pathlib.Path('/data/alyxfull.json') - elif filetype == 'sql': - filepath = pathlib.Path('/tmp/dump.sql.gz') + if filetype == "json": + filepath = pathlib.Path("/data/alyxfull.json") + elif filetype == "sql": + filepath = pathlib.Path("/tmp/dump.sql.gz") else: - raise ValueError('Unknown filetype, has to be either json or sql') + raise ValueError("Unknown filetype, has to be either json or sql") else: filepath = pathlib.Path(filepath) return datetime.datetime.fromtimestamp(filepath.stat().st_mtime) -def get_timezone(t=None, filetype='json'): +def get_timezone(t=None, filetype="json"): if not t: if not filetype: - raise ValueError('filetype is required if t is not specified') + raise ValueError("filetype is required if t is not specified") else: t = get_file_timestamp(filetype=filetype).time() if t < datetime.time(8, 30): - timezone = 'European' + timezone = "European" elif t > datetime.time(8, 30) and t < datetime.time(10, 30): - timezone = 'EST' + timezone = "EST" elif t > datetime.time(10, 30) and t < datetime.time(16, 30): - timezone = 'PST' + timezone = "PST" else: - timezone = 'other' + timezone = "other" return timezone -def get_file_date(filepath=None, filetype='json'): +def get_file_date(filepath=None, filetype="json"): return get_file_timestamp(filepath, filetype).date() -def get_file_timezone(filepath=None, filetype='json'): +def get_file_timezone(filepath=None, filetype="json"): return get_timezone(get_file_timestamp(filepath, filetype).time()) def get_important_pks(pks, return_original_dict=False): - ''' + """ Filter out modified keys that belongs to data.filerecord and jobs.task :params modified_keys: list of pks :params optional return original_dict: boolean, if True, return the list of dictionaries with uuids to be the key :returns pks_important: list of filtered pks :returns pks_dict: list of dictionary with uuid as the key - ''' + """ pks = [pk for pk in pks if is_valid_uuid(pk)] - pks_dict = [{'uuid': pk} for pk in pks] + pks_dict = [{"uuid": pk} for pk in pks] models_ignored = '"data.dataset", "data.filerecord", "jobs.task", "actions.wateradministration", "experiments.trajectoryestimate", "experiments.channel"' if len(pks) < 1000: pks_unimportant = [ - str(pk['uuid']) - for pk in (alyxraw.AlyxRaw & - f'model in ({models_ignored})' & - pks_dict).fetch('KEY')] + str(pk["uuid"]) + for pk in ( + alyxraw.AlyxRaw & f"model in ({models_ignored})" & pks_dict + ).fetch("KEY") + ] else: - buffer = QueryBuffer( - alyxraw.AlyxRaw & f'model in ({models_ignored})') + buffer = QueryBuffer(alyxraw.AlyxRaw & f"model in ({models_ignored})") for pk in tqdm(pks_dict): buffer.add_to_queue1(pk) - buffer.flush_fetch('KEY', chunksz=200) + buffer.flush_fetch("KEY", chunksz=200) - buffer.flush_fetch('KEY') - pks_unimportant = [str(pk['uuid']) for pk in buffer.fetched_results] + buffer.flush_fetch("KEY") + pks_unimportant = [str(pk["uuid"]) for pk in buffer.fetched_results] pks_important = list(set(pks) - set(pks_unimportant)) diff --git a/ibl_pipeline/process/autoprocess.py b/ibl_pipeline/process/autoprocess.py index b4626b4f..bd23f4af 100755 --- a/ibl_pipeline/process/autoprocess.py +++ b/ibl_pipeline/process/autoprocess.py @@ -1,49 +1,56 @@ -import datajoint as dj +import datetime +import logging import pathlib +from os import path + +import datajoint as dj +from tqdm import tqdm + +from ibl_pipeline.ingest import job from ibl_pipeline.process import ( create_ingest_task, delete_update_entries, + get_file_date, + get_file_timestamp, + get_file_timezone, + get_timezone, ingest_alyx_raw, ingest_alyx_raw_postgres, ingest_membership, - ingest_shadow, ingest_real, + ingest_shadow, populate_behavior, - get_timezone, - get_file_timezone, - get_file_date, - get_file_timestamp, - update_utils + update_utils, ) -from ibl_pipeline.ingest import job -from os import path -import datetime -import logging -from tqdm import tqdm - # logger does not work without this somehow for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) -log_file = pathlib.Path(__file__).parent / 'logs/main_ingest.log' +log_file = pathlib.Path(__file__).parent / "logs/main_ingest.log" log_file.parent.mkdir(parents=True, exist_ok=True) log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', + format="%(asctime)s - %(message)s", handlers=[ # write info into both the log file and console logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + logging.StreamHandler(), + ], + level=25, +) logger = logging.getLogger(__name__) -def process_new(previous_dump=None, latest_dump=None, - job_date=datetime.date.today().strftime('%Y-%m-%d'), - timezone='other', perform_updates=True): +def process_new( + previous_dump=None, + latest_dump=None, + job_date=datetime.date.today().strftime("%Y-%m-%d"), + timezone="other", + perform_updates=True, +): job_key = dict( job_date=job_date, @@ -51,108 +58,116 @@ def process_new(previous_dump=None, latest_dump=None, ) if previous_dump is None: - previous_dump = path.join('/', 'data', 'alyxfull.json.last') + previous_dump = path.join("/", "data", "alyxfull.json.last") if latest_dump is None: - latest_dump = path.join('/', 'data', 'alyxfull.json') + latest_dump = path.join("/", "data", "alyxfull.json") if not (job.Job & job_key): - logger.log(25, 'Comparing json dumps ...') + logger.log(25, "Comparing json dumps ...") create_ingest_task.compare_json_dumps(previous_dump, latest_dump) created_pks, modified_pks, deleted_pks, modified_pks_important = ( - job.Job & job_key).fetch1( - 'created_pks', 'modified_pks', 'deleted_pks', 'modified_pks_important') + job.Job & job_key + ).fetch1("created_pks", "modified_pks", "deleted_pks", "modified_pks_important") if perform_updates: - logger.log(25, 'Deleting modified entries from alyxraw and shadow tables...') + logger.log(25, "Deleting modified entries from alyxraw and shadow tables...") start = datetime.datetime.now() delete_update_entries.delete_entries_from_alyxraw( - modified_pks, modified_pks_important) + modified_pks, modified_pks_important + ) - job.TaskStatus.insert_task_status(job_key, 'Delete alyxraw', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Delete alyxraw", start, end=datetime.datetime.now() + ) - logger.log(25, 'Deleting modified entries from membership tables...') + logger.log(25, "Deleting modified entries from membership tables...") start = datetime.datetime.now() - delete_update_entries.delete_entries_from_membership( - modified_pks_important) - job.TaskStatus.insert_task_status(job_key, 'Delete shadow membership', - start, end=datetime.datetime.now()) + delete_update_entries.delete_entries_from_membership(modified_pks_important) + job.TaskStatus.insert_task_status( + job_key, "Delete shadow membership", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting into alyxraw...') + logger.log(25, "Ingesting into alyxraw...") start = datetime.datetime.now() ingest_alyx_raw.insert_to_alyxraw( ingest_alyx_raw.get_alyx_entries( - latest_dump, new_pks=created_pks+modified_pks)) - job.TaskStatus.insert_task_status(job_key, 'Ingest alyxraw', - start, end=datetime.datetime.now()) + latest_dump, new_pks=created_pks + modified_pks + ) + ) + job.TaskStatus.insert_task_status( + job_key, "Ingest alyxraw", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting into shadow tables...') + logger.log(25, "Ingesting into shadow tables...") start = datetime.datetime.now() ingest_shadow.main(modified_sessions_pks=modified_pks_important) - job.TaskStatus.insert_task_status(job_key, 'Ingest shadow', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Ingest shadow", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting into shadow membership tables...') + logger.log(25, "Ingesting into shadow membership tables...") start = datetime.datetime.now() - ingest_membership.main(created_pks+modified_pks_important) - job.TaskStatus.insert_task_status(job_key, 'Ingest shadow membership', - start, end=datetime.datetime.now()) + ingest_membership.main(created_pks + modified_pks_important) + job.TaskStatus.insert_task_status( + job_key, "Ingest shadow membership", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting alyx real...') + logger.log(25, "Ingesting alyx real...") start = datetime.datetime.now() ingest_real.main() - job.TaskStatus.insert_task_status(job_key, 'Ingest real', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Ingest real", start, end=datetime.datetime.now() + ) if perform_updates: - logger.log(25, 'Updating fields...') + logger.log(25, "Updating fields...") start = datetime.datetime.now() - delete_update_entries.update_entries_from_real_tables( - modified_pks_important) - job.TaskStatus.insert_task_status(job_key, 'Update fields', - start, end=datetime.datetime.now()) + delete_update_entries.update_entries_from_real_tables(modified_pks_important) + job.TaskStatus.insert_task_status( + job_key, "Update fields", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting behavior...') + logger.log(25, "Ingesting behavior...") start = datetime.datetime.now() populate_behavior.main(backtrack_days=30) - job.TaskStatus.insert_task_status(job_key, 'Populate behavior', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Populate behavior", start, end=datetime.datetime.now() + ) + # TODO: change /data /tmp to use dj.config -def process_updates(pks, current_dump='/data/alyxfull.json'): - ''' +def process_updates(pks, current_dump="/data/alyxfull.json"): + """ Update the all the fields in givens a set of pks :param pks: uuids where an update is needed :param current_dump: the latest - ''' - logger.log(25, 'Deleting from alyxraw...') - delete_update_entries.delete_entries_from_alyxraw( - alyxraw_keys=pks) - logger.log(25, 'Deleting from shadow membership...') + """ + logger.log(25, "Deleting from alyxraw...") + delete_update_entries.delete_entries_from_alyxraw(alyxraw_keys=pks) + logger.log(25, "Deleting from shadow membership...") delete_update_entries.delete_entries_from_membership(pks) - logger.log(25, 'Ingesting alyxraw...') + logger.log(25, "Ingesting alyxraw...") ingest_alyx_raw.insert_to_alyxraw( - ingest_alyx_raw.get_alyx_entries( - current_dump, new_pks=pks)) + ingest_alyx_raw.get_alyx_entries(current_dump, new_pks=pks) + ) - logger.log(25, 'Ingesting into shadow tables...') - ingest_shadow.main(excluded_tables=['DataSet', 'FileRecord']) + logger.log(25, "Ingesting into shadow tables...") + ingest_shadow.main(excluded_tables=["DataSet", "FileRecord"]) - logger.log(25, 'Ingesting into shadow membership tables...') + logger.log(25, "Ingesting into shadow membership tables...") ingest_membership.main(pks) - logger.log(25, 'Ingesting alyx real...') - ingest_real.main(excluded_tables=['DataSet', 'FileRecord']) + logger.log(25, "Ingesting alyx real...") + ingest_real.main(excluded_tables=["DataSet", "FileRecord"]) - logger.log(25, 'Updating field...') + logger.log(25, "Updating field...") delete_update_entries.update_entries_from_real_tables(pks) - -# ============================== processes based on local alyx postgres instance =================================== + # ============================== processes based on local alyx postgres instance =================================== """ General flow for daily ingestion with updates @@ -193,14 +208,14 @@ def get_created_modified_deleted_pks(): # only models that need an update for table in delete_update_entries.TABLES_TO_UPDATE: - model_name = ingest_alyx_raw_postgres.get_alyx_model_name(table['alyx_model']) + model_name = ingest_alyx_raw_postgres.get_alyx_model_name(table["alyx_model"]) modified_pks.extend(update_utils.get_updated_keys(model_name)) deleted_pks.extend(update_utils.get_deleted_keys(model_name)) return created_pks, modified_pks, deleted_pks -def process_postgres(sql_dump_path='/tmp/dump.sql.gz', perform_updates=True): +def process_postgres(sql_dump_path="/tmp/dump.sql.gz", perform_updates=True): """function that process daily ingestion routine based on alyx postgres instance set up with sql dump Args: @@ -209,93 +224,116 @@ def process_postgres(sql_dump_path='/tmp/dump.sql.gz', perform_updates=True): """ # ---- Step 1: new job entry in the job.Job table ---- - job_key = dict(job_date=get_file_date(sql_dump_path), - job_timezone=get_file_timezone(sql_dump_path)) + job_key = dict( + job_date=get_file_date(sql_dump_path), + job_timezone=get_file_timezone(sql_dump_path), + ) job_entry = dict(job_key, alyx_current_time_stamp=get_file_timestamp(sql_dump_path)) # ---- Step 2: from postgres-db with the latest sql-dump, ingest into UpdateAlyxRaw ---- # this step skips `Dataset` and `FileRecord` models - logger.log(25, 'Ingesting into UpdateAlyxRaw...') + logger.log(25, "Ingesting into UpdateAlyxRaw...") ingest_alyx_raw_postgres.insert_to_update_alyxraw_postgres( - excluded_models=['Dataset', 'FileRecord'], - delete_UpdateAlyxRaw_first=True, skip_existing_alyxraw=True) + excluded_models=["Dataset", "FileRecord"], + delete_UpdateAlyxRaw_first=True, + skip_existing_alyxraw=True, + ) # ---- Step 3: compare UpdateAlyxRaw vs. AlyxRaw ---- # compare the same tables between UpdateAlyxRaw and AlyxRaw, # get the created, modified, and deleted uuids - logger.log(25, 'Getting created, modified and deleted uuids...') + logger.log(25, "Getting created, modified and deleted uuids...") start = datetime.datetime.now() created_pks, modified_pks, deleted_pks = get_created_modified_deleted_pks() job.Job.insert1( - dict(job_entry, - create_pks=created_pks, - modified_pks_important=modified_pks, - deleted_pks=deleted_pks), replace=True) - job.TaskStatus.insert_task_status(job_key, 'Get created modified deleted pks', - start, end=datetime.datetime.now()) - logger.log(25, 'Job entry created!') + dict( + job_entry, + create_pks=created_pks, + modified_pks_important=modified_pks, + deleted_pks=deleted_pks, + ), + replace=True, + ) + job.TaskStatus.insert_task_status( + job_key, "Get created modified deleted pks", start, end=datetime.datetime.now() + ) + logger.log(25, "Job entry created!") # ---- Step 4: perform updates ---- # delete from AlyxRaw, shadow tables and shadow Membership tables # those entries found in "modified_pks" and "deleted_pks" so they can be re-ingested if perform_updates: - logger.log(25, 'Deleting modified and deleted entries from alyxraw and shadow tables ...') + logger.log( + 25, + "Deleting modified and deleted entries from alyxraw and shadow tables ...", + ) start = datetime.datetime.now() delete_update_entries.delete_entries_from_alyxraw( - [], modified_pks + deleted_pks) - job.TaskStatus.insert_task_status(job_key, 'Delete alyxraw', - start, end=datetime.datetime.now()) - - logger.log(25, 'Deleting modified and deleted entries from shadow membership tables ...') + [], modified_pks + deleted_pks + ) + job.TaskStatus.insert_task_status( + job_key, "Delete alyxraw", start, end=datetime.datetime.now() + ) + + logger.log( + 25, + "Deleting modified and deleted entries from shadow membership tables ...", + ) start = datetime.datetime.now() delete_update_entries.delete_entries_from_membership(modified_pks + deleted_pks) - job.TaskStatus.insert_task_status(job_key, 'Delete shadow membership', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Delete shadow membership", start, end=datetime.datetime.now() + ) # ---- Step 5: ingestion of AlyxRaw, shadow tables and shadow membership tables ---- - logger.log(25, 'Ingesting from Postgres Alyx to AlyxRaw...') + logger.log(25, "Ingesting from Postgres Alyx to AlyxRaw...") start = datetime.datetime.now() ingest_alyx_raw_postgres.main(backtrack_days=3, skip_existing_alyxraw=True) - job.TaskStatus.insert_task_status(job_key, 'Ingest alyxraw', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Ingest alyxraw", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting into shadow tables...') + logger.log(25, "Ingesting into shadow tables...") start = datetime.datetime.now() ingest_shadow.main(modified_sessions_pks=modified_pks) - job.TaskStatus.insert_task_status(job_key, 'Ingest shadow', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Ingest shadow", start, end=datetime.datetime.now() + ) - logger.log(25, 'Ingesting into shadow membership tables...') + logger.log(25, "Ingesting into shadow membership tables...") start = datetime.datetime.now() ingest_membership.main() - job.TaskStatus.insert_task_status(job_key, 'Ingest shadow membership', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Ingest shadow membership", start, end=datetime.datetime.now() + ) # ---- Step 6: ingestion of all real tables (copy from shadow tables) ---- - logger.log(25, 'Ingesting the real tables...') + logger.log(25, "Ingesting the real tables...") start = datetime.datetime.now() - ingest_real.main(excluded_tables=['DataSet', 'FileRecord']) - job.TaskStatus.insert_task_status(job_key, 'Ingest real', - start, end=datetime.datetime.now()) + ingest_real.main(excluded_tables=["DataSet", "FileRecord"]) + job.TaskStatus.insert_task_status( + job_key, "Ingest real", start, end=datetime.datetime.now() + ) if perform_updates: - logger.log(25, 'Updating field...') + logger.log(25, "Updating field...") start = datetime.datetime.now() delete_update_entries.update_entries_from_real_tables(modified_pks) - job.TaskStatus.insert_task_status(job_key, 'Update fields', - start, end=datetime.datetime.now()) + job.TaskStatus.insert_task_status( + job_key, "Update fields", start, end=datetime.datetime.now() + ) # ---- Step 7: populate behavior tables ---- - logger.log(25, 'Populating behavior...') + logger.log(25, "Populating behavior...") start = datetime.datetime.now() populate_behavior.main(backtrack_days=30) - job.TaskStatus.insert_task_status(job_key, 'Populate behavior', - start, end=datetime.datetime.now()) - + job.TaskStatus.insert_task_status( + job_key, "Populate behavior", start, end=datetime.datetime.now() + ) """ General flow for updates only (similar to procedures in process_histology and process_qc) + create UpdateAlyxRaw from scratch @@ -309,8 +347,11 @@ def process_postgres(sql_dump_path='/tmp/dump.sql.gz', perform_updates=True): """ -if __name__ == '__main__': -# TODO: change /data /tmp to use dj.config - process_new(previous_dump='/data/alyxfull_20210617_1200.json', - latest_dump='/data/alyxfull.json', - job_date='2021-06-18', timezone='PST') +if __name__ == "__main__": + # TODO: change /data /tmp to use dj.config + process_new( + previous_dump="/data/alyxfull_20210617_1200.json", + latest_dump="/data/alyxfull.json", + job_date="2021-06-18", + timezone="PST", + ) diff --git a/ibl_pipeline/process/create_ingest_task.py b/ibl_pipeline/process/create_ingest_task.py index eb9e1f84..456bd5b0 100644 --- a/ibl_pipeline/process/create_ingest_task.py +++ b/ibl_pipeline/process/create_ingest_task.py @@ -1,27 +1,49 @@ -import os, gc, json, datetime +import datetime +import gc +import json +import os + from ibl_pipeline.ingest import job from ibl_pipeline.process import get_important_pks, get_timezone from ibl_pipeline.utils import is_valid_uuid - SESSION_FIELDS = [ - 'location', 'subject', 'lab', 'start_time', - 'end_time', 'parent_session', 'project', 'type', - 'task_protocol', 'users', 'procedures'] - -EXCLUDED_MODELS = {'auth.group', 'sessions.session', - 'authtoken.token', - 'experiments.brainregion', - 'misc.note', - 'jobs.task', - 'actions.notificationrule', - 'actions.notification' - } + "location", + "subject", + "lab", + "start_time", + "end_time", + "parent_session", + "project", + "type", + "task_protocol", + "users", + "procedures", +] + +EXCLUDED_MODELS = { + "auth.group", + "sessions.session", + "authtoken.token", + "experiments.brainregion", + "misc.note", + "jobs.task", + "actions.notificationrule", + "actions.notification", +} def get_modified_pks(data0, data1): - d0 = {_['pk']: json.dumps(_['fields'], sort_keys=True) for _ in data0 if _['model'] not in EXCLUDED_MODELS} - d1 = {_['pk']: json.dumps(_['fields'], sort_keys=True) for _ in data1 if _['model'] not in EXCLUDED_MODELS} + d0 = { + _["pk"]: json.dumps(_["fields"], sort_keys=True) + for _ in data0 + if _["model"] not in EXCLUDED_MODELS + } + d1 = { + _["pk"]: json.dumps(_["fields"], sort_keys=True) + for _ in data1 + if _["model"] not in EXCLUDED_MODELS + } d0 = {k: v for k, v in d0.items() if k in d1.keys()} d1 = {k: v for k, v in d1.items() if k in d0.keys()} @@ -30,28 +52,51 @@ def get_modified_pks(data0, data1): def get_created_deleted_pks(data0, data1): - old_pks = {_['pk'] for _ in data0 if not isinstance(_['pk'], int) and _['model'] not in EXCLUDED_MODELS} - new_pks = {_['pk'] for _ in data1 if not isinstance(_['pk'], int) and _['model'] not in EXCLUDED_MODELS} + old_pks = { + _["pk"] + for _ in data0 + if not isinstance(_["pk"], int) and _["model"] not in EXCLUDED_MODELS + } + new_pks = { + _["pk"] + for _ in data1 + if not isinstance(_["pk"], int) and _["model"] not in EXCLUDED_MODELS + } - return [pk for pk in sorted(new_pks - old_pks) if is_valid_uuid(pk)], \ - [pk for pk in sorted(old_pks - new_pks) if is_valid_uuid(pk)] + return [pk for pk in sorted(new_pks - old_pks) if is_valid_uuid(pk)], [ + pk for pk in sorted(old_pks - new_pks) if is_valid_uuid(pk) + ] def filter_modified_keys_session(data0, data1, modified_pks): - sessions0 = {_['pk']: json.dumps({key: _['fields'][key] for key in SESSION_FIELDS}, sort_keys=True) - for _ in data0 if _['model'] == 'actions.session'} - sessions1 = {_['pk']: json.dumps({key: _['fields'][key] for key in SESSION_FIELDS}, sort_keys=True) - for _ in data1 if _['model'] == 'actions.session'} + sessions0 = { + _["pk"]: json.dumps( + {key: _["fields"][key] for key in SESSION_FIELDS}, sort_keys=True + ) + for _ in data0 + if _["model"] == "actions.session" + } + sessions1 = { + _["pk"]: json.dumps( + {key: _["fields"][key] for key in SESSION_FIELDS}, sort_keys=True + ) + for _ in data1 + if _["model"] == "actions.session" + } sessions_same = dict(sessions0.items() & sessions1.items()).keys() return list(set(modified_pks) - set(sessions_same)) + # TODO: change /data /tmp to use dj.config -def compare_json_dumps(previous_dump='/data/alyxfull.json', - latest_dump='/data/alyxfull.json.last', - create_files=True, insert_to_table=True, - filter_pks_for_unused_models=True, - filter_pks_for_unused_session_fields=True): +def compare_json_dumps( + previous_dump="/data/alyxfull.json", + latest_dump="/data/alyxfull.json.last", + create_files=True, + insert_to_table=True, + filter_pks_for_unused_models=True, + filter_pks_for_unused_session_fields=True, +): """Compare two json dumps from alyx and created files with the added, deleted, modified fields. @@ -66,10 +111,10 @@ def compare_json_dumps(previous_dump='/data/alyxfull.json', """ print("Loading first JSON dump...") - with open(previous_dump, 'r') as f: + with open(previous_dump, "r") as f: data0 = json.load(f) print("Loading second JSON dump...") - with open(latest_dump, 'r') as f: + with open(latest_dump, "r") as f: data1 = json.load(f) print("Finished loading JSON dumps.") @@ -84,27 +129,31 @@ def compare_json_dumps(previous_dump='/data/alyxfull.json', print("Finished creating created_pks and deleted_pks.") if filter_pks_for_unused_session_fields: - print('Filtering modified sessions that does not have a change in fields of interest...') + print( + "Filtering modified sessions that does not have a change in fields of interest..." + ) modified_pks = filter_modified_keys_session(data0, data1, modified_pks) if filter_pks_for_unused_models: - print('Remove modified entries in tables data.filerecord and jobs.task') + print("Remove modified entries in tables data.filerecord and jobs.task") modified_pks_important = get_important_pks(modified_pks) # figure out job date and timezone latest_modified_time = datetime.datetime.fromtimestamp( - os.path.getmtime(latest_dump)) + os.path.getmtime(latest_dump) + ) d = latest_modified_time.date() t = latest_modified_time.time() previous_modified_time = datetime.datetime.fromtimestamp( - os.path.getmtime(previous_dump)) + os.path.getmtime(previous_dump) + ) timezone = get_timezone(t) # TODO: change /data /tmp to use dj.config if create_files: suffix = f'_{latest_modified_time.strftime("%Y-%m-%d")}_{timezone}' - root_dir = '/data/daily_increments/' + root_dir = "/data/daily_increments/" print(f"New objects: {len(created_pks)}") with open(f"{root_dir}created_pks_{suffix}.json", "w") as f: json.dump(created_pks, f) @@ -129,17 +178,17 @@ def compare_json_dumps(previous_dump='/data/alyxfull.json', created_pks=created_pks, modified_pks=modified_pks, deleted_pks=deleted_pks, - session_prefiltered=filter_pks_for_unused_session_fields + session_prefiltered=filter_pks_for_unused_session_fields, ) if not filter_pks_for_unused_models: modified_pks_important = None job.Job.insert1( - dict(**entry, - modified_pks_important=modified_pks_important), - skip_duplicates=True) + dict(**entry, modified_pks_important=modified_pks_important), + skip_duplicates=True, + ) -if __name__ == '__main__': +if __name__ == "__main__": compare_json_dumps(insert_to_table=False) diff --git a/ibl_pipeline/process/delete_update_entries.py b/ibl_pipeline/process/delete_update_entries.py index f1480013..83e953bd 100755 --- a/ibl_pipeline/process/delete_update_entries.py +++ b/ibl_pipeline/process/delete_update_entries.py @@ -1,31 +1,35 @@ -''' +""" This module delete the entries from alyxraw, shadow membership_tables and update real membership_tables -''' -import datajoint as dj +""" +import datetime +import logging import pathlib -from ibl_pipeline.process.ingest_membership import MEMBERSHIP_TABLES -from ibl_pipeline.common import * -from ibl_pipeline.ingest.common import * -from ibl_pipeline.ingest import job, QueryBuffer -from ibl_pipeline import mode - -from ibl_pipeline.ingest import ingest_utils -from ibl_pipeline import update from uuid import UUID + +import datajoint as dj +import django from tqdm import tqdm -from ibl_pipeline.utils import is_valid_uuid -from ibl_pipeline.process import get_important_pks -import datetime, django, logging +from ibl_pipeline import mode, update +from ibl_pipeline.common import * +from ibl_pipeline.ingest import QueryBuffer, ingest_utils, job +from ibl_pipeline.ingest.common import * +from ibl_pipeline.process import get_important_pks +from ibl_pipeline.process.ingest_membership import MEMBERSHIP_TABLES +from ibl_pipeline.utils import is_valid_uuid django.setup() +import actions + # alyx models -import subjects, actions +import subjects -log_path = pathlib.Path(__file__).parent / 'logs' +log_path = pathlib.Path(__file__).parent / "logs" log_path.mkdir(parents=True, exist_ok=True) -log_file = log_path / f'delete_update_entries{"_public" if mode == "public" else ""}.log' +log_file = ( + log_path / f'delete_update_entries{"_public" if mode == "public" else ""}.log' +) log_file.touch(exist_ok=True) # logger does not work without this somehow @@ -33,18 +37,21 @@ logging.root.removeHandler(handler) logging.basicConfig( - format='%(asctime)s - %(message)s', + format="%(asctime)s - %(message)s", handlers=[ # write info into both the log file and console logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + logging.StreamHandler(), + ], + level=25, +) logger = logging.getLogger(__name__) # ====================================== functions for deletion ================================== + def delete_entries_from_alyxraw(file_record_keys=[], alyxraw_keys=[]): """ Delete entries from alyxraw and shadow tables, excluding the membership table. @@ -57,22 +64,27 @@ def delete_entries_from_alyxraw(file_record_keys=[], alyxraw_keys=[]): """ if file_record_keys: - logger.log(25, 'Deleting alyxraw entries corresponding to file records...') + logger.log(25, "Deleting alyxraw entries corresponding to file records...") if len(file_record_keys) > 5000: - file_record_fields = alyxraw.AlyxRaw.Field & {'fname': 'exists', 'fvalue': 'false'} + file_record_fields = alyxraw.AlyxRaw.Field & { + "fname": "exists", + "fvalue": "false", + } else: - file_record_fields = (alyxraw.AlyxRaw.Field - & {'fname': 'exists', 'fvalue': 'false'} - & file_record_keys) + file_record_fields = ( + alyxraw.AlyxRaw.Field + & {"fname": "exists", "fvalue": "false"} + & file_record_keys + ) for key in tqdm(file_record_fields): (alyxraw.AlyxRaw.Field & key).delete_quick() if alyxraw_keys: - logger.log(25, 'Deleting modified entries...') + logger.log(25, "Deleting modified entries...") - pk_list = [k for k in alyxraw_keys if is_valid_uuid(k['uuid'])] + pk_list = [k for k in alyxraw_keys if is_valid_uuid(k["uuid"])] # Delete from alyxraw.AlyxRaw (except for entries related to the Session table) alyxraw_buffer = QueryBuffer(alyxraw.AlyxRaw & 'model != "actions.session"') @@ -86,8 +98,10 @@ def delete_entries_from_alyxraw(file_record_keys=[], alyxraw_keys=[]): # delete only entries in the AlyxRaw.Field, except for the "start time" field. alyxraw_field_buffer = QueryBuffer( - alyxraw.AlyxRaw.Field & 'fname!="start_time"' & - (alyxraw.AlyxRaw & 'model="actions.session"')) + alyxraw.AlyxRaw.Field + & 'fname!="start_time"' + & (alyxraw.AlyxRaw & 'model="actions.session"') + ) for pk in tqdm(pk_list): alyxraw_field_buffer.add_to_queue1(pk) @@ -96,79 +110,93 @@ def delete_entries_from_alyxraw(file_record_keys=[], alyxraw_keys=[]): def delete_entries_from_membership(pks_to_be_deleted): - ''' + """ Delete entries from shadow membership membership_tables - ''' + """ for t in MEMBERSHIP_TABLES: - ingest_mod = t['dj_parent_table'].__module__ - table_name = t['dj_parent_table'].__name__ + ingest_mod = t["dj_parent_table"].__module__ + table_name = t["dj_parent_table"].__name__ - mem_table_name = t['dj_current_table'].__name__ + mem_table_name = t["dj_current_table"].__name__ - real_table = eval(ingest_mod.replace('ibl_pipeline.ingest.', '') + '.' + table_name) + real_table = eval( + ingest_mod.replace("ibl_pipeline.ingest.", "") + "." + table_name + ) - entries_to_delete = (real_table & - [{t['dj_parent_uuid_name']:pk} - for pk in pks_to_be_deleted if is_valid_uuid(pk)]).fetch('KEY') + entries_to_delete = ( + real_table + & [ + {t["dj_parent_uuid_name"]: pk} + for pk in pks_to_be_deleted + if is_valid_uuid(pk) + ] + ).fetch("KEY") - logger.log(25, f'Deleting {len(entries_to_delete)} records from membership table {mem_table_name} ...') + logger.log( + 25, + f"Deleting {len(entries_to_delete)} records from membership table {mem_table_name} ...", + ) if entries_to_delete: with dj.config(safemode=False): - (t['dj_current_table'] & entries_to_delete).delete() + (t["dj_current_table"] & entries_to_delete).delete() + # =================================== Tables to be updated ======================== TABLES_TO_UPDATE = [ { - 'real_schema': reference, - 'shadow_schema': reference_ingest, - 'table_name': 'Project', # datajoint table name - 'members': [], - 'alyx_model': subjects.models.Project, + "real_schema": reference, + "shadow_schema": reference_ingest, + "table_name": "Project", # datajoint table name + "members": [], + "alyx_model": subjects.models.Project, }, { - 'real_schema': subject, - 'shadow_schema': subject_ingest, - 'table_name': 'Subject', - 'members': ['SubjectLab', 'SubjectUser', 'SubjectProject', 'Death'], - 'alyx_model': subjects.models.Subject + "real_schema": subject, + "shadow_schema": subject_ingest, + "table_name": "Subject", + "members": ["SubjectLab", "SubjectUser", "SubjectProject", "Death"], + "alyx_model": subjects.models.Subject, }, { - 'real_schema': action, - 'shadow_schema': action_ingest, - 'table_name': 'Weighing', - 'members': [], - 'alyx_model': actions.models.Weighing + "real_schema": action, + "shadow_schema": action_ingest, + "table_name": "Weighing", + "members": [], + "alyx_model": actions.models.Weighing, }, { - 'real_schema': action, - 'shadow_schema': action_ingest, - 'table_name': 'WaterRestriction', - 'members': [], - 'alyx_model': actions.models.WaterRestriction + "real_schema": action, + "shadow_schema": action_ingest, + "table_name": "WaterRestriction", + "members": [], + "alyx_model": actions.models.WaterRestriction, }, { - 'real_schema': action, - 'shadow_schema': action_ingest, - 'table_name': 'WaterAdministration', - 'members': [], - 'alyx_model': actions.models.WaterAdministration + "real_schema": action, + "shadow_schema": action_ingest, + "table_name": "WaterAdministration", + "members": [], + "alyx_model": actions.models.WaterAdministration, }, { - 'real_schema': acquisition, - 'shadow_schema': acquisition_ingest, - 'table_name': 'Session', - 'members': ['SessionUser', 'SessionProject'], - 'alyx_model': actions.models.Session - } + "real_schema": acquisition, + "shadow_schema": acquisition_ingest, + "table_name": "Session", + "members": ["SessionUser", "SessionProject"], + "alyx_model": actions.models.Session, + }, ] # =================================== functions for update ========================================== -def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateRecord=False): + +def update_fields( + real_schema, shadow_schema, table_name, pks, log_to_UpdateRecord=False +): """ Given a table and the primary key of real table, update the real table all the fields that have discrepancy from the shadow table @@ -179,9 +207,9 @@ def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateReco log_to_UpdateRecord : boolean, if True, log the update history in the table ibl_update.UpdateRecord """ - if '.' in table_name: + if "." in table_name: # handling part-table - master_name, part_name = table_name.split('.') + master_name, part_name = table_name.split(".") real_table = getattr(getattr(real_schema, master_name), part_name) shadow_table = getattr(getattr(shadow_schema, master_name), part_name) else: @@ -189,47 +217,50 @@ def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateReco shadow_table = getattr(shadow_schema, table_name) # don't update "_ts" fields - fields_to_update = [f for f in real_table.heading.secondary_attributes - if not f.endswith('_ts')] + fields_to_update = [ + f for f in real_table.heading.secondary_attributes if not f.endswith("_ts") + ] try: - ts_field = next(f for f in real_table.heading.names if '_ts' in f) + ts_field = next(f for f in real_table.heading.names if "_ts" in f) except StopIteration: ts_field = None log_to_UpdateRecord = False # do the updating - for key in (real_table & pks).fetch('KEY'): + for key in (real_table & pks).fetch("KEY"): pk_hash = UUID(dj.hash.key_hash(key)) if not shadow_table & key: real_record = (real_table & key).fetch1() if log_to_UpdateRecord: update_record = dict( - table=real_table.__module__ + '.' + real_table.__name__, - attribute='unknown', + table=real_table.__module__ + "." + real_table.__name__, + attribute="unknown", pk_hash=pk_hash, original_ts=real_record[ts_field], update_ts=datetime.datetime.now(), pk_dict=key, ) update.UpdateRecord.insert1(update_record) - update_record.pop('pk_dict') + update_record.pop("pk_dict") - update_error_msg = 'Record does not exist in the shadow {}'.format(key) + update_error_msg = "Record does not exist in the shadow {}".format(key) update_record_error = dict( **update_record, update_action_ts=datetime.datetime.now(), - update_error_msg=update_error_msg + update_error_msg=update_error_msg, ) update.UpdateError.insert1(update_record_error) - logger.log(25, f'Error updating entry: {update_error_msg}') + logger.log(25, f"Error updating entry: {update_error_msg}") continue # if there are more than 1 record elif len(shadow_table & key) > 1: # delete the older record - lastest_record = dj.U().aggr(shadow_table & key, session_ts='max(session_ts)').fetch() + lastest_record = ( + dj.U().aggr(shadow_table & key, session_ts="max(session_ts)").fetch() + ) with dj.config(safemode=False): ((shadow_table & key) - lastest_record).delete() @@ -241,13 +272,15 @@ def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateReco if real_record[f] != shadow_record[f]: try: (real_table & key)._update(f, shadow_record[f]) - update_narrative = f'{table_name}.{f}: {shadow_record[f]} != {real_record[f]}' + update_narrative = ( + f"{table_name}.{f}: {shadow_record[f]} != {real_record[f]}" + ) except BaseException as e: - logger.log(25, f'Error while updating record {key}: {str(e)}') + logger.log(25, f"Error while updating record {key}: {str(e)}") else: if log_to_UpdateRecord: update_record = dict( - table=real_table.__module__ + '.' + real_table.__name__, + table=real_table.__module__ + "." + real_table.__name__, attribute=f, pk_hash=pk_hash, original_ts=real_record[ts_field], @@ -255,7 +288,7 @@ def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateReco pk_dict=key, original_value=real_record[f], updated_value=shadow_record[f], - update_narrative=update_narrative + update_narrative=update_narrative, ) update.UpdateRecord.insert1(update_record) @@ -263,43 +296,50 @@ def update_fields(real_schema, shadow_schema, table_name, pks, log_to_UpdateReco def update_entries_from_real_tables(modified_pks): for table_info in TABLES_TO_UPDATE: - logger.log(25, 'Updating {}...'.format(table_info['table_name'])) - table = getattr(table_info['real_schema'], table_info['table_name']) + logger.log(25, "Updating {}...".format(table_info["table_name"])) + table = getattr(table_info["real_schema"], table_info["table_name"]) - if table_info['table_name'] == 'Subject': - uuid_field = 'subject_uuid' + if table_info["table_name"] == "Subject": + uuid_field = "subject_uuid" else: - uuid_field = next(f for f in table.heading.secondary_attributes - if '_uuid' in f and 'subject' not in f) + uuid_field = next( + f + for f in table.heading.secondary_attributes + if "_uuid" in f and "subject" not in f + ) pks_important = get_important_pks(modified_pks) query = table & [{uuid_field: pk} for pk in pks_important] if query: - update_fields(table_info['real_schema'], - table_info['shadow_schema'], - table_info['table_name'], - pks=query.fetch('KEY'), - log_to_UpdateRecord=True) - - if table_info['members']: - for member_table_name in table_info['members']: - member_table = getattr(table_info['real_schema'], member_table_name) + update_fields( + table_info["real_schema"], + table_info["shadow_schema"], + table_info["table_name"], + pks=query.fetch("KEY"), + log_to_UpdateRecord=True, + ) + + if table_info["members"]: + for member_table_name in table_info["members"]: + member_table = getattr(table_info["real_schema"], member_table_name) if member_table & query: - update_fields(table_info['real_schema'], - table_info['shadow_schema'], - member_table_name, - pks=(member_table & query).fetch('KEY'), - log_to_UpdateRecord=True) + update_fields( + table_info["real_schema"], + table_info["shadow_schema"], + member_table_name, + pks=(member_table & query).fetch("KEY"), + log_to_UpdateRecord=True, + ) -if __name__ == '__main__': +if __name__ == "__main__": with dj.config(safemode=False): - deleted_pks, modified_pks, modified_pks_important = \ - (job.Job & 'job_date="2021-05-18"' & 'job_timezone="European"').fetch1( - 'deleted_pks', 'modified_pks', 'modified_pks_important') + deleted_pks, modified_pks, modified_pks_important = ( + job.Job & 'job_date="2021-05-18"' & 'job_timezone="European"' + ).fetch1("deleted_pks", "modified_pks", "modified_pks_important") - delete_entries_from_alyxraw(deleted_pks+modified_pks, modified_pks_important) + delete_entries_from_alyxraw(deleted_pks + modified_pks, modified_pks_important) diff --git a/ibl_pipeline/process/ingest_alyx_raw.py b/ibl_pipeline/process/ingest_alyx_raw.py index 0194104d..cc291cca 100755 --- a/ibl_pipeline/process/ingest_alyx_raw.py +++ b/ibl_pipeline/process/ingest_alyx_raw.py @@ -1,156 +1,174 @@ -''' +""" This script load the json dump and insert the tuples into the alyxraw table. -''' +""" -import datajoint as dj +import collections import json import logging import math -import collections import os.path as path -from ibl_pipeline.ingest import alyxraw, QueryBuffer +import re import sys import uuid -import re -from tqdm import tqdm + +import datajoint as dj import numpy as np +from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, alyxraw logger = logging.getLogger(__name__) -def get_alyx_entries(filename=None, models=None, - exclude=None, new_pks=None): +def get_alyx_entries(filename=None, models=None, exclude=None, new_pks=None): - exclude_list = {'auth.group', 'sessions.session', - 'authtoken.token', - 'experiments.brainregion', - 'misc.note', - 'jobs.task', - 'actions.notificationrule', - 'actions.notification' - } + exclude_list = { + "auth.group", + "sessions.session", + "authtoken.token", + "experiments.brainregion", + "misc.note", + "jobs.task", + "actions.notificationrule", + "actions.notification", + } if exclude: exclude_list = exclude_list.union(set(exclude)) if not filename: - filename = path.join('/', 'data', 'alyxfull.json') + filename = path.join("/", "data", "alyxfull.json") - with open(filename, 'r') as fid: + with open(filename, "r") as fid: keys_all = json.load(fid) - print('Creating entries to insert into alyxraw...') + print("Creating entries to insert into alyxraw...") if not models: if new_pks: - return [key for key in tqdm(keys_all) if key['model'] not in exclude_list and key['pk'] in new_pks] + return [ + key + for key in tqdm(keys_all) + if key["model"] not in exclude_list and key["pk"] in new_pks + ] else: - return [key for key in keys_all if key['model'] not in exclude_list] + return [key for key in keys_all if key["model"] not in exclude_list] elif isinstance(models, str): if new_pks: - return [key for key in keys_all if key['model'] == models and key['pk'] in new_pks] + return [ + key + for key in keys_all + if key["model"] == models and key["pk"] in new_pks + ] else: - return [key for key in keys_all if key['model'] == models] + return [key for key in keys_all if key["model"] == models] elif isinstance(models, list): if new_pks: - return [key for key in keys_all if key['model'] in models and key['pk'] in new_pks] + return [ + key + for key in keys_all + if key["model"] in models and key["pk"] in new_pks + ] else: - return [key for key in keys_all if key['model'] in models] + return [key for key in keys_all if key["model"] in models] else: - raise ValueError('models should be a str, list or numpy array') + raise ValueError("models should be a str, list or numpy array") -def insert_to_alyxraw( - keys, alyxraw_module=alyxraw, - alyx_type='all'): +def insert_to_alyxraw(keys, alyxraw_module=alyxraw, alyx_type="all"): # use insert buffer to speed up the insertion process - if alyx_type in ('all', 'main'): + if alyx_type in ("all", "main"): ib_main = QueryBuffer(alyxraw_module.AlyxRaw) # insert into AlyxRaw table for key in tqdm(keys, position=0): try: - pk = uuid.UUID(key['pk']) + pk = uuid.UUID(key["pk"]) except Exception: - print('Error for key: {}'.format(key)) + print("Error for key: {}".format(key)) continue - ib_main.add_to_queue1(dict(uuid=pk, model=key['model'])) + ib_main.add_to_queue1(dict(uuid=pk, model=key["model"])) if ib_main.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw tuples.') + logger.debug("Inserted 10000 raw tuples.") if ib_main.flush_insert(skip_duplicates=True): - logger.debug('Inserted remaining raw tuples') + logger.debug("Inserted remaining raw tuples") ib_main = QueryBuffer(alyxraw_module.AlyxRaw) - if alyx_type in ('all', 'part'): + if alyx_type in ("all", "part"): ib_part = QueryBuffer(alyxraw_module.AlyxRaw.Field) # insert into the part table AlyxRaw.Field for ikey, key in tqdm(enumerate(keys), position=0): try: try: - pk = uuid.UUID(key['pk']) + pk = uuid.UUID(key["pk"]) except ValueError: - print('Error for key: {}'.format(key)) + print("Error for key: {}".format(key)) continue - key_field = dict(uuid=uuid.UUID(key['pk'])) - for field_name, field_value in key['fields'].items(): + key_field = dict(uuid=uuid.UUID(key["pk"])) + for field_name, field_value in key["fields"].items(): key_field = dict(key_field, fname=field_name) - if field_name == 'json' and field_value is not None: + if field_name == "json" and field_value is not None: - key_field['value_idx'] = 0 - key_field['fvalue'] = json.dumps(field_value) - if len(key_field['fvalue']) < 10000: + key_field["value_idx"] = 0 + key_field["fvalue"] = json.dumps(field_value) + if len(key_field["fvalue"]) < 10000: ib_part.add_to_queue1(key_field) else: continue - if field_name == 'narrative' and field_value is not None: + if field_name == "narrative" and field_value is not None: # filter out emoji emoji_pattern = re.compile( "[" - u"\U0001F600-\U0001F64F" # emoticons - u"\U0001F300-\U0001F5FF" # symbols & pictographs - u"\U0001F680-\U0001F6FF" # transport & map symbols - u"\U0001F1E0-\U0001F1FF" # flags (iOS) - u"\U00002702-\U000027B0" - u"\U000024C2-\U0001F251" - "]+", flags=re.UNICODE) - - key_field['value_idx'] = 0 - key_field['fvalue'] = emoji_pattern.sub(r'', field_value) - - elif field_value is None or field_value == '' or field_value == [] or \ - (isinstance(field_value, float) and math.isnan(field_value)): - key_field['value_idx'] = 0 - key_field['fvalue'] = 'None' + "\U0001F600-\U0001F64F" # emoticons + "\U0001F300-\U0001F5FF" # symbols & pictographs + "\U0001F680-\U0001F6FF" # transport & map symbols + "\U0001F1E0-\U0001F1FF" # flags (iOS) + "\U00002702-\U000027B0" + "\U000024C2-\U0001F251" + "]+", + flags=re.UNICODE, + ) + + key_field["value_idx"] = 0 + key_field["fvalue"] = emoji_pattern.sub(r"", field_value) + + elif ( + field_value is None + or field_value == "" + or field_value == [] + or (isinstance(field_value, float) and math.isnan(field_value)) + ): + key_field["value_idx"] = 0 + key_field["fvalue"] = "None" ib_part.add_to_queue1(key_field) - elif type(field_value) is list and \ - (type(field_value[0]) is dict or type(field_value[0]) is str): + elif type(field_value) is list and ( + type(field_value[0]) is dict or type(field_value[0]) is str + ): for value_idx, value in enumerate(field_value): - key_field['value_idx'] = value_idx - key_field['fvalue'] = str(value) + key_field["value_idx"] = value_idx + key_field["fvalue"] = str(value) ib_part.add_to_queue1(key_field) else: - key_field['value_idx'] = 0 - key_field['fvalue'] = str(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = str(field_value) ib_part.add_to_queue1(key_field) if ib_part.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw field tuples') + logger.debug("Inserted 10000 raw field tuples") except Exception: - print('Problematic entry:{}'.format(ikey)) + print("Problematic entry:{}".format(ikey)) raise if ib_part.flush_insert(skip_duplicates=True): - logger.debug('Inserted all remaining raw field tuples') + logger.debug("Inserted all remaining raw field tuples") -def insert_to_update_alyxraw( - models, filename=None, delete_tables=False): +def insert_to_update_alyxraw(models, filename=None, delete_tables=False): """Ingest data to alyxraw datajoint tables, json dump based Args: @@ -160,34 +178,34 @@ def insert_to_update_alyxraw( """ alyxraw_update = dj.create_virtual_module( - 'alyxraw', dj.config.get('database.prefix', '') + 'update_ibl_alyxraw', - create_schema=True) + "alyxraw", + dj.config.get("database.prefix", "") + "update_ibl_alyxraw", + create_schema=True, + ) if delete_tables: with dj.config(safemode=False): - print('Deleting alyxraw update...') + print("Deleting alyxraw update...") alyxraw_update.AlyxRaw.Field.delete_quick() alyxraw_update.AlyxRaw.delete_quick() insert_to_alyxraw( - get_alyx_entries( - filename=filename, - models=models), - alyxraw_module=alyxraw_update + get_alyx_entries(filename=filename, models=models), + alyxraw_module=alyxraw_update, ) -if __name__ == '__main__': +if __name__ == "__main__": if len(sys.argv) < 2: # no arguments given # if no argument given, assume a canonical file location and name - filename = path.join('/', 'data', 'alyxfull.json') + filename = path.join("/", "data", "alyxfull.json") else: filename = path.join(dir_name, sys.argv[1]) - new_pks_file = path.join('/', 'data', 'created_pks.json') + new_pks_file = path.join("/", "data", "created_pks.json") - with open(new_pks_file, 'r') as fid: + with open(new_pks_file, "r") as fid: new_pks = json.load(fid) insert_to_alyxraw(get_alyx_entries(filename, new_pks=new_pks)) diff --git a/ibl_pipeline/process/ingest_alyx_raw_postgres.py b/ibl_pipeline/process/ingest_alyx_raw_postgres.py index 353fa67a..631f8acb 100755 --- a/ibl_pipeline/process/ingest_alyx_raw_postgres.py +++ b/ibl_pipeline/process/ingest_alyx_raw_postgres.py @@ -1,34 +1,49 @@ -''' +""" This script loads the data from alyx postgres database and insert the entries into the alyxraw table. -''' -import os, json, logging, math, datetime, re, django, warnings -from ibl_pipeline.ingest import alyxraw, QueryBuffer -from tqdm import tqdm -import datajoint as dj +""" +import datetime +import json +import logging +import math +import os import pathlib +import re +import warnings + +import datajoint as dj +import django import numpy as np +from tqdm import tqdm + +from ibl_pipeline.ingest import QueryBuffer, alyxraw django.setup() -# alyx models -import misc, subjects, actions, data, experiments +import actions +import data +import experiments +# alyx models +import misc +import subjects # logger does not work without this somehow for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) -log_file = pathlib.Path(__file__).parent / 'logs/ingest_alyx_raw_postgres.log' +log_file = pathlib.Path(__file__).parent / "logs/ingest_alyx_raw_postgres.log" log_file.parent.mkdir(parents=True, exist_ok=True) log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', + format="%(asctime)s - %(message)s", handlers=[ # write info into both the log file and console logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + logging.StreamHandler(), + ], + level=25, +) logger = logging.getLogger(__name__) @@ -78,13 +93,13 @@ data.models.DataRepositoryType, data.models.DataRepository, data.models.DatasetType, - data.models.Dataset, # very big table, usually handled separately - data.models.FileRecord, # very big table, usually handled separately + data.models.Dataset, # very big table, usually handled separately + data.models.FileRecord, # very big table, usually handled separately # experiments.models experiments.models.CoordinateSystem, experiments.models.ProbeModel, experiments.models.ProbeInsertion, - experiments.models.TrajectoryEstimate + experiments.models.TrajectoryEstimate, ) @@ -97,7 +112,7 @@ def get_alyx_model_name(alyx_model): Returns: [str]: "model" field in alyxraw.AlyxRaw, e.g. misc.lab """ - return alyx_model._meta.db_table.replace('_', '.') + return alyx_model._meta.db_table.replace("_", ".") def get_field_names(alyx_model): @@ -129,7 +144,10 @@ def get_many_to_many_field_names(alyx_model): except: pass else: - if obj.__class__.__name__ == 'ManyRelatedManager' and not field_name.endswith('_set'): + if ( + obj.__class__.__name__ == "ManyRelatedManager" + and not field_name.endswith("_set") + ): many_to_many_field_names.append(field_name) return many_to_many_field_names @@ -140,15 +158,15 @@ def get_tables_with_auto_datetime(tables=None): if tables is None: tables = ALYX_MODELS_OF_INTEREST - return([t for t in tables - if 'auto_datetime' in get_field_names(t)]) + return [t for t in tables if "auto_datetime" in get_field_names(t)] def insert_alyx_entries_model( - alyx_model, - AlyxRawTable=alyxraw.AlyxRaw, - backtrack_days=None, - skip_existing_alyxraw=False): + alyx_model, + AlyxRawTable=alyxraw.AlyxRaw, + backtrack_days=None, + skip_existing_alyxraw=False, +): """Insert alyx entries into alyxraw tables for a particular alyx model Args: @@ -163,22 +181,23 @@ def insert_alyx_entries_model( field_names = get_field_names(alyx_model) many_to_many_field_names = get_many_to_many_field_names(alyx_model) - if model_name == 'actions.session': + if model_name == "actions.session": backtrack_days = backtrack_days or 30 if backtrack_days: # filtering the alyx table - get more recent entries within the backtrack_days # only applicable to alyx models having "auto_datetime" and FileRecord alyx model - date_cutoff = (datetime.datetime.now().date() - - datetime.timedelta(days=backtrack_days)).strftime('%Y-%m-%d') + date_cutoff = ( + datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days) + ).strftime("%Y-%m-%d") if alyx_model in get_tables_with_auto_datetime(): # actions.models.Session, data.models.Dataset, experiments.models.ProbeInsertion - entries = alyx_model.objects.filter( - auto_datetime__date__gte=date_cutoff) + entries = alyx_model.objects.filter(auto_datetime__date__gte=date_cutoff) elif alyx_model == data.models.FileRecord: entries = alyx_model.objects.filter( - dataset__auto_datetime__date__gte=date_cutoff, exists=True) + dataset__auto_datetime__date__gte=date_cutoff, exists=True + ) else: entries = alyx_model.objects.all() elif alyx_model == data.models.FileRecord: @@ -189,11 +208,14 @@ def insert_alyx_entries_model( # Ingest into main table if skip_existing_alyxraw: - existing_uuids = (AlyxRawTable & {'model': model_name}).fetch('uuid') - new_uuids = np.setxor1d(list(entries.values_list('id', flat=True)), - existing_uuids, assume_unique=True) + existing_uuids = (AlyxRawTable & {"model": model_name}).fetch("uuid") + new_uuids = np.setxor1d( + list(entries.values_list("id", flat=True)), + existing_uuids, + assume_unique=True, + ) else: - new_uuids = entries.values_list('id', flat=True) + new_uuids = entries.values_list("id", flat=True) # convert to dict to make use of indexing for speed new_uuids = {eid: None for eid in new_uuids} @@ -202,7 +224,7 @@ def insert_alyx_entries_model( return # using QueryBuffer, ingest into table AlyxRaw - alyxraw_buffer = QueryBuffer(AlyxRawTable & {'model': model_name}, verbose=False) + alyxraw_buffer = QueryBuffer(AlyxRawTable & {"model": model_name}, verbose=False) # using QueryBuffer, ingest into part table AlyxRaw.Field alyxraw_field_buffer = QueryBuffer(AlyxRawTable.Field, verbose=True) # cancel on-going transaction, if any @@ -213,80 +235,99 @@ def insert_alyx_entries_model( if r.id not in new_uuids: continue - alyxraw_buffer.add_to_queue1({'uuid': r.id, 'model': model_name}) + alyxraw_buffer.add_to_queue1({"uuid": r.id, "model": model_name}) # e.g. for table subjects.models.Subject, each r is a subject queryset # for one subject try: field_entries = [] for field_name in field_names: - if field_name == 'id': + if field_name == "id": continue - field_entry = {'uuid': r.id, 'fname': field_name} + field_entry = {"uuid": r.id, "fname": field_name} field_value = getattr(r, field_name) - if field_name == 'json' and field_value: + if field_name == "json" and field_value: # handles the 'json' field - store the json dump - field_entry['value_idx'] = 0 - field_entry['fvalue'] = json.dumps(field_value) - if len(field_entry['fvalue']) >= 10000: + field_entry["value_idx"] = 0 + field_entry["fvalue"] = json.dumps(field_value) + if len(field_entry["fvalue"]) >= 10000: # if the json dump is too large, store fvalue as null - field_entry.pop('fvalue') - elif field_name == 'narrative' and field_value is not None: + field_entry.pop("fvalue") + elif field_name == "narrative" and field_value is not None: # handles 'narrative' field with emoji - filter out emoji emoji_pattern = re.compile( "[" - u"\U0001F600-\U0001F64F" # emoticons - u"\U0001F300-\U0001F5FF" # symbols & pictographs - u"\U0001F680-\U0001F6FF" # transport & map symbols - u"\U0001F1E0-\U0001F1FF" # flags (iOS) - u"\U00002702-\U000027B0" - u"\U000024C2-\U0001F251" - "]+", flags=re.UNICODE) - - field_entry['value_idx'] = 0 - field_entry['fvalue'] = emoji_pattern.sub(r'', field_value) - elif (not isinstance(field_value, (float, int)) and not field_value) or \ - (isinstance(field_value, (float, int)) and math.isnan(field_value)): + "\U0001F600-\U0001F64F" # emoticons + "\U0001F300-\U0001F5FF" # symbols & pictographs + "\U0001F680-\U0001F6FF" # transport & map symbols + "\U0001F1E0-\U0001F1FF" # flags (iOS) + "\U00002702-\U000027B0" + "\U000024C2-\U0001F251" + "]+", + flags=re.UNICODE, + ) + + field_entry["value_idx"] = 0 + field_entry["fvalue"] = emoji_pattern.sub(r"", field_value) + elif ( + not isinstance(field_value, (float, int)) and not field_value + ) or ( + isinstance(field_value, (float, int)) and math.isnan(field_value) + ): # handle "falsy" field value - store as string 'None' - field_entry['value_idx'] = 0 - field_entry['fvalue'] = 'None' + field_entry["value_idx"] = 0 + field_entry["fvalue"] = "None" elif isinstance(field_value, str): - field_entry['value_idx'] = 0 - field_entry['fvalue'] = field_value - elif isinstance(field_value, (bool, float, int, - datetime.datetime, datetime.date)): - field_entry['value_idx'] = 0 - field_entry['fvalue'] = str(field_value) + field_entry["value_idx"] = 0 + field_entry["fvalue"] = field_value + elif isinstance( + field_value, (bool, float, int, datetime.datetime, datetime.date) + ): + field_entry["value_idx"] = 0 + field_entry["fvalue"] = str(field_value) elif isinstance(field_value, dict): - field_entry['value_idx'] = 0 - field_entry['fvalue'] = json.dumps(field_value, default=str) + field_entry["value_idx"] = 0 + field_entry["fvalue"] = json.dumps(field_value, default=str) else: # special handling for foreign key object - field_entry['value_idx'] = 0 - fk_id = field_name + '_id' + field_entry["value_idx"] = 0 + fk_id = field_name + "_id" if hasattr(r, fk_id): - field_entry['fvalue'] = str(getattr(r, fk_id)) + field_entry["fvalue"] = str(getattr(r, fk_id)) field_entries.append(field_entry) # ingest many to many fields into alyxraw.AlyxRaw.Field for field_name in many_to_many_field_names: many_to_many_entries = getattr(r, field_name).all() if len(many_to_many_entries) > 200: - print(f'\tmany-to-many field {field_name} with {len(many_to_many_entries)} entries - skipping...') + print( + f"\tmany-to-many field {field_name} with {len(many_to_many_entries)} entries - skipping..." + ) continue - field_entries.extend([ - dict(uuid=r.id, fname=field_name, - value_idx=obj_idx, fvalue=str(obj.id)) - for obj_idx, obj in enumerate(many_to_many_entries)]) + field_entries.extend( + [ + dict( + uuid=r.id, + fname=field_name, + value_idx=obj_idx, + fvalue=str(obj.id), + ) + for obj_idx, obj in enumerate(many_to_many_entries) + ] + ) alyxraw_field_buffer.add_to_queue(field_entries) dj.conn().ping() del field_entries # to be cleaned by garbage collector, improve memory management except Exception as e: - logger.log(25, 'Problematic entry {} of model {} with error {}'.format( - r.id, model_name, str(e))) + logger.log( + 25, + "Problematic entry {} of model {} with error {}".format( + r.id, model_name, str(e) + ), + ) if len(alyxraw_field_buffer._queue) >= 7500: with AlyxRawTable.connection.transaction: @@ -298,9 +339,12 @@ def insert_alyx_entries_model( alyxraw_field_buffer.flush_insert(skip_duplicates=True) -def insert_to_update_alyxraw_postgres(alyx_models=None, excluded_models=[], - delete_UpdateAlyxRaw_first=False, - skip_existing_alyxraw=False): +def insert_to_update_alyxraw_postgres( + alyx_models=None, + excluded_models=[], + delete_UpdateAlyxRaw_first=False, + skip_existing_alyxraw=False, +): """Ingest entries into update_ibl_alyxraw from postgres alyx instance @@ -313,28 +357,44 @@ def insert_to_update_alyxraw_postgres(alyx_models=None, excluded_models=[], if delete_UpdateAlyxRaw_first: with dj.config(safemode=False): - logger.log(25, 'Deleting update ibl alyxraw tables...') - models_res = [{'model': get_alyx_model_name(m) for m in alyx_models}] + logger.log(25, "Deleting update ibl alyxraw tables...") + models_res = [{"model": get_alyx_model_name(m) for m in alyx_models}] (alyxraw.UpdateAlyxRaw.Field & models_res).delete_quick() (alyxraw.UpdateAlyxRaw & models_res).delete_quick() for alyx_model in alyx_models: if alyx_model.__name__ in excluded_models: continue - logger.log(25, 'Ingesting alyx table {} into datajoint UpdateAlyxRaw...'.format(get_alyx_model_name(alyx_model))) - insert_alyx_entries_model(alyx_model, AlyxRawTable=alyxraw.UpdateAlyxRaw, - skip_existing_alyxraw=skip_existing_alyxraw) + logger.log( + 25, + "Ingesting alyx table {} into datajoint UpdateAlyxRaw...".format( + get_alyx_model_name(alyx_model) + ), + ) + insert_alyx_entries_model( + alyx_model, + AlyxRawTable=alyxraw.UpdateAlyxRaw, + skip_existing_alyxraw=skip_existing_alyxraw, + ) def main(backtrack_days=3, skip_existing_alyxraw=False): for alyx_model in ALYX_MODELS_OF_INTEREST: - logger.log(25, 'Ingesting alyx table {} into datajoint alyxraw...'.format(get_alyx_model_name(alyx_model))) - if get_alyx_model_name(alyx_model) == 'actions.session': + logger.log( + 25, + "Ingesting alyx table {} into datajoint alyxraw...".format( + get_alyx_model_name(alyx_model) + ), + ) + if get_alyx_model_name(alyx_model) == "actions.session": skip_existing_alyxraw = False - insert_alyx_entries_model(alyx_model, AlyxRawTable=alyxraw.AlyxRaw, - backtrack_days=backtrack_days, - skip_existing_alyxraw=skip_existing_alyxraw) + insert_alyx_entries_model( + alyx_model, + AlyxRawTable=alyxraw.AlyxRaw, + backtrack_days=backtrack_days, + skip_existing_alyxraw=skip_existing_alyxraw, + ) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/ingest_brainregion.py b/ibl_pipeline/process/ingest_brainregion.py index bb792d1c..af6e1037 100644 --- a/ibl_pipeline/process/ingest_brainregion.py +++ b/ibl_pipeline/process/ingest_brainregion.py @@ -1,18 +1,20 @@ -import datajoint as dj import json import os.path as path import sys + +import datajoint as dj +import numpy as np +import pandas as pd +from tqdm import tqdm + +from ibl_pipeline import reference from ibl_pipeline.ingest import QueryBuffer from ibl_pipeline.ingest import reference as reference_ingest -from ibl_pipeline import reference from ibl_pipeline.process.ingest_alyx_raw import get_alyx_entries -from tqdm import tqdm -import pandas as pd -import numpy as np # TODO: change /data /tmp to use dj.config -keys = get_alyx_entries(models='experiments.brainregion') -atlas = pd.read_csv('/data/allen_structure_tree.csv') +keys = get_alyx_entries(models="experiments.brainregion") +atlas = pd.read_csv("/data/allen_structure_tree.csv") def ingest_all(): @@ -20,8 +22,8 @@ def ingest_all(): ib_brainregion = QueryBuffer(reference_ingest.BrainRegion) for key in tqdm(keys, position=0): - fields = key['fields'] - graph_order = atlas[atlas['id'] == key['pk']]['graph_order'] + fields = key["fields"] + graph_order = atlas[atlas["id"] == key["pk"]]["graph_order"] if np.isnan(graph_order.to_list()[0]): graph_order = None @@ -29,33 +31,38 @@ def ingest_all(): graph_order = int(graph_order) ib_brainregion.add_to_queue1( - dict(brain_region_pk=key['pk'], - acronym=fields['acronym'], - brain_region_name=fields['name'], - parent=fields['parent'], - brain_region_level=fields['level'], - graph_order=graph_order)) + dict( + brain_region_pk=key["pk"], + acronym=fields["acronym"], + brain_region_name=fields["name"], + parent=fields["parent"], + brain_region_level=fields["level"], + graph_order=graph_order, + ) + ) if ib_brainregion.flush_insert(skip_duplicates=True, chunksz=1000): - print('Inserted 1000 raw tuples.') + print("Inserted 1000 raw tuples.") if ib_brainregion.flush_insert(skip_duplicates=True): - print('Inserted all remaining raw field tuples') + print("Inserted all remaining raw field tuples") # mapping of name in alyx and DJ tables -mapping = dict(acronym='acronym', - brain_region_name='name', - parent='parent', - brain_region_level='level', - graph_order='graph_order') +mapping = dict( + acronym="acronym", + brain_region_name="name", + parent="parent", + brain_region_level="level", + graph_order="graph_order", +) def update_shadow_field(field): for key in tqdm(keys, position=0): - fields = key['fields'] - if mapping[field] == 'graph_order': - graph_order = atlas[atlas['id'] == key['pk']]['graph_order'] + fields = key["fields"] + if mapping[field] == "graph_order": + graph_order = atlas[atlas["id"] == key["pk"]]["graph_order"] if np.isnan(graph_order.to_list()[0]): field_value = None @@ -64,26 +71,31 @@ def update_shadow_field(field): else: field_value = fields[mapping[field]] - dj.Table._update(reference_ingest.BrainRegion & - dict(brain_region_pk=key['pk']), - field, field_value) + dj.Table._update( + reference_ingest.BrainRegion & dict(brain_region_pk=key["pk"]), + field, + field_value, + ) def update_real_field(field): - entries_for_updates = \ - reference.BrainRegion.proj('brain_region_pk', field_real=field) * \ - reference_ingest.BrainRegion.proj(field_shadow=field) & \ - ['field_real != field_shadow', - 'field_real is null and field_shadow is not null', - 'field_real is not null and field_shadow is null'] + entries_for_updates = reference.BrainRegion.proj( + "brain_region_pk", field_real=field + ) * reference_ingest.BrainRegion.proj(field_shadow=field) & [ + "field_real != field_shadow", + "field_real is null and field_shadow is not null", + "field_real is not null and field_shadow is null", + ] - for key in tqdm(entries_for_updates.fetch('KEY'), position=0): + for key in tqdm(entries_for_updates.fetch("KEY"), position=0): dj.Table._update( - reference.BrainRegion & key, field, - (reference_ingest.BrainRegion & key).fetch1(field)) + reference.BrainRegion & key, + field, + (reference_ingest.BrainRegion & key).fetch1(field), + ) -if __name__ == '__main__': +if __name__ == "__main__": ingest_all() diff --git a/ibl_pipeline/process/ingest_membership.py b/ibl_pipeline/process/ingest_membership.py index d5bee818..39069c7d 100755 --- a/ibl_pipeline/process/ingest_membership.py +++ b/ibl_pipeline/process/ingest_membership.py @@ -1,166 +1,201 @@ -''' +""" This script inserts membership tuples into the membership shadow tables, \ which cannot be inserted with auto-population. -''' +""" + +import itertools +import os import datajoint as dj -from tqdm import tqdm import pymysql -import itertools -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, data, QueryBuffer +from tqdm import tqdm + +from ibl_pipeline.ingest import QueryBuffer, acquisition, action, alyxraw, data from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject from ibl_pipeline.utils import is_valid_uuid -import os - -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") MEMBERSHIP_TABLES = [ - {'dj_current_table': reference.ProjectLabMember, - 'alyx_parent_model': 'subjects.project', - 'alyx_field': 'users', - 'dj_parent_table': reference.Project, - 'dj_other_table': reference.LabMember, - 'dj_parent_fields': 'project_name', - 'dj_other_field': 'user_name', - 'dj_parent_uuid_name': 'project_uuid', - 'dj_other_uuid_name': 'user_uuid'}, - {'dj_current_table': subject.AlleleSequence, - 'alyx_parent_model': 'subjects.allele', - 'alyx_field': 'sequences', - 'dj_parent_table': subject.Allele, - 'dj_other_table': subject.Sequence, - 'dj_parent_fields': 'allele_name', - 'dj_other_field': 'sequence_name', - 'dj_parent_uuid_name': 'allele_uuid', - 'dj_other_uuid_name': 'sequence_uuid'}, - {'dj_current_table': subject.LineAllele, - 'alyx_parent_model': 'subjects.line', - 'alyx_field': 'alleles', - 'dj_parent_table': subject.Line, - 'dj_other_table': subject.Allele, - 'dj_parent_fields': 'line_name', - 'dj_other_field': 'allele_name', - 'dj_parent_uuid_name': 'line_uuid', - 'dj_other_uuid_name': 'allele_uuid'}, - {'dj_current_table': action.SurgeryProcedure, - 'alyx_parent_model': 'actions.surgery', - 'alyx_field': 'procedures', - 'dj_parent_table': action.Surgery, - 'dj_other_table': action.ProcedureType, - 'dj_parent_fields': ['subject_uuid', 'surgery_start_time'], - 'dj_other_field': 'procedure_type_name', - 'dj_parent_uuid_name': 'surgery_uuid', - 'dj_other_uuid_name': 'procedure_type_uuid'}, - {'dj_current_table': acquisition.ChildSession, - 'alyx_parent_model': 'actions.session', - 'alyx_field': 'parent_session', - 'dj_parent_table': acquisition.Session, - 'dj_other_table': acquisition.Session, - 'dj_parent_fields': ['subject_uuid', 'session_start_time'], - 'dj_other_field': 'session_start_time', - 'dj_parent_uuid_name': 'session_uuid', - 'dj_other_uuid_name': 'session_uuid', - 'renamed_other_field_name': 'parent_session_start_time'}, - {'dj_current_table': acquisition.SessionUser, - 'alyx_parent_model': 'actions.session', - 'alyx_field': 'users', - 'dj_parent_table': acquisition.Session, - 'dj_other_table': reference.LabMember, - 'dj_parent_fields': ['subject_uuid', 'session_start_time'], - 'dj_other_field': 'user_name', - 'dj_parent_uuid_name': 'session_uuid', - 'dj_other_uuid_name': 'user_uuid'}, - {'dj_current_table': acquisition.SessionProcedure, - 'alyx_parent_model': 'actions.session', - 'alyx_field': 'procedures', - 'dj_parent_table': acquisition.Session, - 'dj_other_table': action.ProcedureType, - 'dj_parent_fields': ['subject_uuid', 'session_start_time'], - 'dj_other_field': 'procedure_type_name', - 'dj_parent_uuid_name': 'session_uuid', - 'dj_other_uuid_name': 'procedure_type_uuid'}, - {'dj_current_table': acquisition.SessionProject, - 'alyx_parent_model': 'actions.session', - 'alyx_field': 'project', - 'dj_parent_table': acquisition.Session, - 'dj_other_table': reference.Project, - 'dj_parent_fields': ['subject_uuid', 'session_start_time'], - 'dj_other_field': 'project_name', - 'dj_parent_uuid_name': 'session_uuid', - 'dj_other_uuid_name': 'project_uuid', - 'renamed_other_field_name': 'session_project'}, - {'dj_current_table': data.ProjectRepository, - 'alyx_parent_model': 'subjects.project', - 'alyx_field': 'repositories', - 'dj_parent_table': reference.Project, - 'dj_other_table': data.DataRepository, - 'dj_parent_fields': 'project_name', - 'dj_other_field': 'repo_name', - 'dj_parent_uuid_name': 'project_uuid', - 'dj_other_uuid_name': 'repo_uuid'}, + { + "dj_current_table": reference.ProjectLabMember, + "alyx_parent_model": "subjects.project", + "alyx_field": "users", + "dj_parent_table": reference.Project, + "dj_other_table": reference.LabMember, + "dj_parent_fields": "project_name", + "dj_other_field": "user_name", + "dj_parent_uuid_name": "project_uuid", + "dj_other_uuid_name": "user_uuid", + }, + { + "dj_current_table": subject.AlleleSequence, + "alyx_parent_model": "subjects.allele", + "alyx_field": "sequences", + "dj_parent_table": subject.Allele, + "dj_other_table": subject.Sequence, + "dj_parent_fields": "allele_name", + "dj_other_field": "sequence_name", + "dj_parent_uuid_name": "allele_uuid", + "dj_other_uuid_name": "sequence_uuid", + }, + { + "dj_current_table": subject.LineAllele, + "alyx_parent_model": "subjects.line", + "alyx_field": "alleles", + "dj_parent_table": subject.Line, + "dj_other_table": subject.Allele, + "dj_parent_fields": "line_name", + "dj_other_field": "allele_name", + "dj_parent_uuid_name": "line_uuid", + "dj_other_uuid_name": "allele_uuid", + }, + { + "dj_current_table": action.SurgeryProcedure, + "alyx_parent_model": "actions.surgery", + "alyx_field": "procedures", + "dj_parent_table": action.Surgery, + "dj_other_table": action.ProcedureType, + "dj_parent_fields": ["subject_uuid", "surgery_start_time"], + "dj_other_field": "procedure_type_name", + "dj_parent_uuid_name": "surgery_uuid", + "dj_other_uuid_name": "procedure_type_uuid", + }, + { + "dj_current_table": acquisition.ChildSession, + "alyx_parent_model": "actions.session", + "alyx_field": "parent_session", + "dj_parent_table": acquisition.Session, + "dj_other_table": acquisition.Session, + "dj_parent_fields": ["subject_uuid", "session_start_time"], + "dj_other_field": "session_start_time", + "dj_parent_uuid_name": "session_uuid", + "dj_other_uuid_name": "session_uuid", + "renamed_other_field_name": "parent_session_start_time", + }, + { + "dj_current_table": acquisition.SessionUser, + "alyx_parent_model": "actions.session", + "alyx_field": "users", + "dj_parent_table": acquisition.Session, + "dj_other_table": reference.LabMember, + "dj_parent_fields": ["subject_uuid", "session_start_time"], + "dj_other_field": "user_name", + "dj_parent_uuid_name": "session_uuid", + "dj_other_uuid_name": "user_uuid", + }, + { + "dj_current_table": acquisition.SessionProcedure, + "alyx_parent_model": "actions.session", + "alyx_field": "procedures", + "dj_parent_table": acquisition.Session, + "dj_other_table": action.ProcedureType, + "dj_parent_fields": ["subject_uuid", "session_start_time"], + "dj_other_field": "procedure_type_name", + "dj_parent_uuid_name": "session_uuid", + "dj_other_uuid_name": "procedure_type_uuid", + }, + { + "dj_current_table": acquisition.SessionProject, + "alyx_parent_model": "actions.session", + "alyx_field": "project", + "dj_parent_table": acquisition.Session, + "dj_other_table": reference.Project, + "dj_parent_fields": ["subject_uuid", "session_start_time"], + "dj_other_field": "project_name", + "dj_parent_uuid_name": "session_uuid", + "dj_other_uuid_name": "project_uuid", + "renamed_other_field_name": "session_project", + }, + { + "dj_current_table": data.ProjectRepository, + "alyx_parent_model": "subjects.project", + "alyx_field": "repositories", + "dj_parent_table": reference.Project, + "dj_other_table": data.DataRepository, + "dj_parent_fields": "project_name", + "dj_other_field": "repo_name", + "dj_parent_uuid_name": "project_uuid", + "dj_other_uuid_name": "repo_uuid", + }, ] -if mode != 'public': - MEMBERSHIP_TABLES.extend([ - {'dj_current_table': action.WaterRestrictionUser, - 'alyx_parent_model': 'actions.waterrestriction', - 'alyx_field': 'users', - 'dj_parent_table': action.WaterRestriction, - 'dj_other_table': reference.LabMember, - 'dj_parent_fields': ['subject_uuid', 'restriction_start_time'], - 'dj_other_field': 'user_name', - 'dj_parent_uuid_name': 'restriction_uuid', - 'dj_other_uuid_name': 'user_uuid'}, - {'dj_current_table': action.WaterRestrictionProcedure, - 'alyx_parent_model': 'actions.waterrestriction', - 'alyx_field': 'procedures', - 'dj_parent_table': action.WaterRestriction, - 'dj_other_table': action.ProcedureType, - 'dj_parent_fields': ['subject_uuid', 'restriction_start_time'], - 'dj_other_field': 'procedure_type_name', - 'dj_parent_uuid_name': 'restriction_uuid', - 'dj_other_uuid_name': 'procedure_type_uuid'}, - {'dj_current_table': action.SurgeryUser, - 'alyx_parent_model': 'actions.surgery', - 'alyx_field': 'users', - 'dj_parent_table': action.Surgery, - 'dj_other_table': reference.LabMember, - 'dj_parent_fields': ['subject_uuid', 'surgery_start_time'], - 'dj_other_field': 'user_name', - 'dj_parent_uuid_name': 'surgery_uuid', - 'dj_other_uuid_name': 'user_uuid'}, - {'dj_current_table': acquisition.WaterAdministrationSession, - 'alyx_parent_model': 'actions.wateradministration', - 'alyx_field': 'session', - 'dj_parent_table': action.WaterAdministration, - 'dj_other_table': acquisition.Session, - 'dj_parent_fields': ['subject_uuid', 'administration_time'], - 'dj_other_field': 'session_start_time', - 'dj_parent_uuid_name': 'wateradmin_uuid', - 'dj_other_uuid_name': 'session_uuid'}] +if mode != "public": + MEMBERSHIP_TABLES.extend( + [ + { + "dj_current_table": action.WaterRestrictionUser, + "alyx_parent_model": "actions.waterrestriction", + "alyx_field": "users", + "dj_parent_table": action.WaterRestriction, + "dj_other_table": reference.LabMember, + "dj_parent_fields": ["subject_uuid", "restriction_start_time"], + "dj_other_field": "user_name", + "dj_parent_uuid_name": "restriction_uuid", + "dj_other_uuid_name": "user_uuid", + }, + { + "dj_current_table": action.WaterRestrictionProcedure, + "alyx_parent_model": "actions.waterrestriction", + "alyx_field": "procedures", + "dj_parent_table": action.WaterRestriction, + "dj_other_table": action.ProcedureType, + "dj_parent_fields": ["subject_uuid", "restriction_start_time"], + "dj_other_field": "procedure_type_name", + "dj_parent_uuid_name": "restriction_uuid", + "dj_other_uuid_name": "procedure_type_uuid", + }, + { + "dj_current_table": action.SurgeryUser, + "alyx_parent_model": "actions.surgery", + "alyx_field": "users", + "dj_parent_table": action.Surgery, + "dj_other_table": reference.LabMember, + "dj_parent_fields": ["subject_uuid", "surgery_start_time"], + "dj_other_field": "user_name", + "dj_parent_uuid_name": "surgery_uuid", + "dj_other_uuid_name": "user_uuid", + }, + { + "dj_current_table": acquisition.WaterAdministrationSession, + "alyx_parent_model": "actions.wateradministration", + "alyx_field": "session", + "dj_parent_table": action.WaterAdministration, + "dj_other_table": acquisition.Session, + "dj_parent_fields": ["subject_uuid", "administration_time"], + "dj_other_field": "session_start_time", + "dj_parent_uuid_name": "wateradmin_uuid", + "dj_other_uuid_name": "session_uuid", + }, + ] ) def main(new_pks=None, excluded_tables=[]): for tab_args in MEMBERSHIP_TABLES: - table_name = tab_args['dj_current_table'].__name__ + table_name = tab_args["dj_current_table"].__name__ if table_name in excluded_tables: continue - print(f'Ingesting table {table_name}...') + print(f"Ingesting table {table_name}...") ingest_membership_table(**tab_args, new_pks=new_pks) -def ingest_membership_table(dj_current_table, - alyx_parent_model, - alyx_field, - dj_parent_table, dj_other_table, - dj_parent_fields, dj_other_field, - dj_parent_uuid_name, dj_other_uuid_name, - renamed_other_field_name=None, - new_pks=None): - ''' +def ingest_membership_table( + dj_current_table, + alyx_parent_model, + alyx_field, + dj_parent_table, + dj_other_table, + dj_parent_fields, + dj_other_field, + dj_parent_uuid_name, + dj_other_uuid_name, + renamed_other_field_name=None, + new_pks=None, +): + """ Ingest shadow membership table. This function works for the pattern that an alyx parent model contain one or multiple entries of one field that have the information in the membership table. @@ -178,66 +213,79 @@ def ingest_membership_table(dj_current_table, the default is None if the field is not renamed new_pks : list of strings of valid uuids, this is the new entries to process, the default is None if all entries are inserted. - ''' + """ if new_pks: - restr = [{'uuid': pk} for pk in new_pks if is_valid_uuid(pk)] + restr = [{"uuid": pk} for pk in new_pks if is_valid_uuid(pk)] else: restr = {} - alyxraw_to_insert = alyxraw.AlyxRaw & restr & {'model': alyx_parent_model} + alyxraw_to_insert = alyxraw.AlyxRaw & restr & {"model": alyx_parent_model} if not alyxraw_to_insert: return - uuid_to_str_mysql = f"CONVERT(LOWER(CONCAT(" \ - f"SUBSTR(HEX({dj_other_uuid_name}), 1, 8), '-'," \ - f"SUBSTR(HEX({dj_other_uuid_name}), 9, 4), '-'," \ - f"SUBSTR(HEX({dj_other_uuid_name}), 13, 4), '-'," \ - f"SUBSTR(HEX({dj_other_uuid_name}), 17, 4), '-'," \ - f"SUBSTR(HEX({dj_other_uuid_name}), 21))) USING utf8)" + uuid_to_str_mysql = ( + f"CONVERT(LOWER(CONCAT(" + f"SUBSTR(HEX({dj_other_uuid_name}), 1, 8), '-'," + f"SUBSTR(HEX({dj_other_uuid_name}), 9, 4), '-'," + f"SUBSTR(HEX({dj_other_uuid_name}), 13, 4), '-'," + f"SUBSTR(HEX({dj_other_uuid_name}), 17, 4), '-'," + f"SUBSTR(HEX({dj_other_uuid_name}), 21))) USING utf8)" + ) if dj_other_uuid_name == dj_parent_uuid_name: - dj_other_uuid_name = 'other_' + dj_other_uuid_name + dj_other_uuid_name = "other_" + dj_other_uuid_name # other table - other_table_query = (dj.U(dj_other_uuid_name, renamed_other_field_name or dj_other_field) - & dj_other_table.proj( - **{dj_other_uuid_name: uuid_to_str_mysql, - renamed_other_field_name or dj_other_field: dj_other_field})) + other_table_query = dj.U( + dj_other_uuid_name, renamed_other_field_name or dj_other_field + ) & dj_other_table.proj( + **{ + dj_other_uuid_name: uuid_to_str_mysql, + renamed_other_field_name or dj_other_field: dj_other_field, + } + ) # parent-table if isinstance(dj_parent_fields, str): dj_parent_fields = [dj_parent_fields] - parent_table_query = (dj_parent_table.proj(*dj_parent_fields) - * (alyxraw.AlyxRaw.Field & alyxraw_to_insert - & {'fname': alyx_field} & 'fvalue!="None"').proj( - ..., **{dj_parent_uuid_name: 'uuid', dj_other_uuid_name: 'fvalue'})) + parent_table_query = dj_parent_table.proj(*dj_parent_fields) * ( + alyxraw.AlyxRaw.Field + & alyxraw_to_insert + & {"fname": alyx_field} + & 'fvalue!="None"' + ).proj(..., **{dj_parent_uuid_name: "uuid", dj_other_uuid_name: "fvalue"}) # join joined_tables = parent_table_query * other_table_query # insert try: - dj_current_table.insert(joined_tables, ignore_extra_fields=True, skip_duplicates=True) + dj_current_table.insert( + joined_tables, ignore_extra_fields=True, skip_duplicates=True + ) except (pymysql.err.OperationalError, dj.errors.LostConnectionError) as e: # too many records to insert all at once on server side - do this in chunks - attrs = [n for n in dj_current_table.heading.names if not n.endswith('_ts')] + attrs = [n for n in dj_current_table.heading.names if not n.endswith("_ts")] - parent_table_entries = (dj.U(*[a for a in attrs - if a in parent_table_query.heading.names]) - & parent_table_query).fetch(as_dict=True) - other_table_entries = (dj.U(*[a for a in attrs - if a in other_table_query.heading.names]) - & other_table_query).fetch(as_dict=True) + parent_table_entries = ( + dj.U(*[a for a in attrs if a in parent_table_query.heading.names]) + & parent_table_query + ).fetch(as_dict=True) + other_table_entries = ( + dj.U(*[a for a in attrs if a in other_table_query.heading.names]) + & other_table_query + ).fetch(as_dict=True) current_table_buffer = QueryBuffer(dj_current_table) for parent_entry, other_entry in itertools.product( - parent_table_entries, other_table_entries): + parent_table_entries, other_table_entries + ): current_table_buffer.add_to_queue1({**parent_entry, **other_entry}) current_table_buffer.flush_insert(skip_duplicates=True, chunksz=7500) current_table_buffer.flush_insert(skip_duplicates=True) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/ingest_real.py b/ibl_pipeline/process/ingest_real.py index 6120251c..6ccb9a08 100755 --- a/ibl_pipeline/process/ingest_real.py +++ b/ibl_pipeline/process/ingest_real.py @@ -1,124 +1,130 @@ -''' +""" This script copies tuples in the shadow tables into the real tables for alyx. -''' +""" -import datajoint as dj -from ibl_pipeline.ingest.common import * -from ibl_pipeline import reference, subject, action, acquisition, data, ephys -import traceback import datetime import os +import traceback + +import datajoint as dj import numpy as np +from ibl_pipeline import acquisition, action, data, ephys, reference, subject +from ibl_pipeline.ingest.common import * -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabMembership', - 'LabLocation', - 'Project', - 'ProjectLabMember', - 'CoordinateSystem' + "Lab", + "LabMember", + "LabMembership", + "LabLocation", + "Project", + "ProjectLabMember", + "CoordinateSystem", ) SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'SubjectUser', - 'SubjectProject', - 'SubjectLab', - 'BreedingPair', - 'Litter', - 'LitterSubject', - 'Weaning', - 'Death', - 'SubjectCullMethod', - 'Caging', - 'UserHistory', - 'GenotypeTest', - 'Zygosity', - 'Implant', - 'Food', - 'CageType', - 'Enrichment', - 'Housing', - 'SubjectHousing' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "SubjectUser", + "SubjectProject", + "SubjectLab", + "BreedingPair", + "Litter", + "LitterSubject", + "Weaning", + "Death", + "SubjectCullMethod", + "Caging", + "UserHistory", + "GenotypeTest", + "Zygosity", + "Implant", + "Food", + "CageType", + "Enrichment", + "Housing", + "SubjectHousing", ) -if mode != 'public': +if mode != "public": ACTION_TABLES = ( - 'ProcedureType', - 'Weighing', - 'WaterType', - 'WaterAdministration', - 'WaterRestriction', - 'WaterRestrictionUser', - 'WaterRestrictionProcedure', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', - 'OtherAction', - 'OtherActionUser', - 'OtherActionProcedure', - 'CullMethod', - 'CullReason', - 'Cull' + "ProcedureType", + "Weighing", + "WaterType", + "WaterAdministration", + "WaterRestriction", + "WaterRestrictionUser", + "WaterRestrictionProcedure", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", + "OtherAction", + "OtherActionUser", + "OtherActionProcedure", + "CullMethod", + "CullReason", + "Cull", ) else: ACTION_TABLES = ( - 'ProcedureType', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', + "ProcedureType", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", ) -if mode != 'public': +if mode != "public": ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', - 'WaterAdministrationSession' + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", + "WaterAdministrationSession", ) else: ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject' + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", ) DATA_TABLES = ( - 'DataFormat', - 'DataRepositoryType', - 'DataRepository', - 'ProjectRepository', - 'DataSetType', - 'DataSet', - 'FileRecord' + "DataFormat", + "DataRepositoryType", + "DataRepository", + "ProjectRepository", + "DataSetType", + "DataSet", + "FileRecord", ) -EPHYS_TABLES = ( - 'Probe', -) +EPHYS_TABLES = ("Probe",) -def copy_table(target_schema, src_schema, table_name, - fresh=False, use_uuid=True, backtrack_days=None, **kwargs): - if '.' in table_name: +def copy_table( + target_schema, + src_schema, + table_name, + fresh=False, + use_uuid=True, + backtrack_days=None, + **kwargs, +): + if "." in table_name: # handling part-table - master_name, part_name = table_name.split('.') + master_name, part_name = table_name.split(".") target_table = getattr(getattr(target_schema, master_name), part_name) src_table = getattr(getattr(src_schema, master_name), part_name) else: @@ -129,18 +135,20 @@ def copy_table(target_schema, src_schema, table_name, target_table.insert(src_table, **kwargs) else: # only ingest entries within certain number of days - if backtrack_days and 'session_start_time' in src_table.heading.attributes: - date_cutoff = \ - (datetime.datetime.now().date() - - datetime.timedelta(days=backtrack_days)).strftime('%Y-%m-%d') + if backtrack_days and "session_start_time" in src_table.heading.attributes: + date_cutoff = ( + datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days) + ).strftime("%Y-%m-%d") q_src_table = src_table & f'session_start_time > "{date_cutoff}"' else: q_src_table = src_table if use_uuid: pk = src_table.heading.primary_key - if len(pk) == 1 and 'uuid' in pk[0]: - q_insert = q_src_table - (dj.U(pk[0]) & target_table & f'{pk[0]} is not null') + if len(pk) == 1 and "uuid" in pk[0]: + q_insert = q_src_table - ( + dj.U(pk[0]) & target_table & f"{pk[0]} is not null" + ) else: q_insert = q_src_table - target_table.proj() else: @@ -148,29 +156,38 @@ def copy_table(target_schema, src_schema, table_name, # keep only records in "q_insert" HAVING entries in the parent tables for parent_table, parent_fk_info in target_table.parents( - as_objects=True, foreign_key_info=True): + as_objects=True, foreign_key_info=True + ): # skipping "nullable" foreign key - if np.all([target_table.heading.attributes[attr].nullable - for attr in parent_fk_info['attr_map']]): + if np.all( + [ + target_table.heading.attributes[attr].nullable + for attr in parent_fk_info["attr_map"] + ] + ): continue # skipping `BrainRegion` table, collations conflicts if dj.utils.to_camel_case( - parent_table.full_table_name.split('.')[-1].replace('`', '')) in ('BrainRegion'): + parent_table.full_table_name.split(".")[-1].replace("`", "") + ) in ("BrainRegion"): continue - parent_table = parent_table.proj(**parent_fk_info['attr_map']) + parent_table = parent_table.proj(**parent_fk_info["attr_map"]) q_insert &= parent_table - kwargs = {**kwargs, 'skip_duplicates': True, - 'ignore_extra_fields': True, - 'allow_direct_insert': True} + kwargs = { + **kwargs, + "skip_duplicates": True, + "ignore_extra_fields": True, + "allow_direct_insert": True, + } transferred_count = len(q_insert) try: target_table.insert(q_insert, **kwargs) except Exception: - for key in q_insert.fetch('KEY'): + for key in q_insert.fetch("KEY"): try: target_table.insert(q_insert & key, **kwargs) except Exception: @@ -187,9 +204,9 @@ def main(excluded_tables=[]): [subject, subject_ingest, SUBJECT_TABLES], [action, action_ingest, ACTION_TABLES], [acquisition, acquisition_ingest, ACQUISITION_TABLES], - [data, data_ingest, DATA_TABLES] + [data, data_ingest, DATA_TABLES], ] - if mode == 'public': + if mode == "public": backtrack_days = None else: backtrack_days = 30 @@ -202,16 +219,16 @@ def main(excluded_tables=[]): copy_table(target, source, table, backtrack_days=backtrack_days) # ephys tables - table = 'ProbeModel' + table = "ProbeModel" print(table) copy_table(ephys, ephys_ingest, table) - table = 'ProbeInsertion' + table = "ProbeInsertion" print(table) copy_table(ephys, ephys_ingest, table, allow_direct_insert=True) -if __name__ == '__main__': +if __name__ == "__main__": with dj.config(safemode=False): main() diff --git a/ibl_pipeline/process/ingest_shadow.py b/ibl_pipeline/process/ingest_shadow.py index 4fa401c7..5ed10f8d 100755 --- a/ibl_pipeline/process/ingest_shadow.py +++ b/ibl_pipeline/process/ingest_shadow.py @@ -1,17 +1,25 @@ import datajoint as dj from datajoint import DataJointError -from ibl_pipeline.ingest import \ - (alyxraw, QueryBuffer, - reference, subject, action, acquisition, data) -mode = dj.config.get('custom', {}).get('database.mode', "") -if mode != 'public': +from ibl_pipeline.ingest import ( + QueryBuffer, + acquisition, + action, + alyxraw, + data, + reference, + subject, +) + +mode = dj.config.get("custom", {}).get("database.mode", "") +if mode != "public": from ibl_pipeline.ingest import ephys, histology -from ibl_pipeline.ingest import get_raw_field as grf import uuid + from tqdm import tqdm +from ibl_pipeline.ingest import get_raw_field as grf SHADOW_TABLES = [ reference.Lab, @@ -44,51 +52,49 @@ data.DataFormat, data.DataRepositoryType, data.DataRepository, - data.DataSetType + data.DataSetType, ] -if mode != 'public': - SHADOW_TABLES.extend([ - subject.SubjectCullMethod, - action.Weighing, - action.WaterType, - action.WaterAdministration, - action.WaterRestriction, - action.Surgery, - action.CullMethod, - action.CullReason, - action.Cull, - action.OtherAction, - ]) +if mode != "public": + SHADOW_TABLES.extend( + [ + subject.SubjectCullMethod, + action.Weighing, + action.WaterType, + action.WaterAdministration, + action.WaterRestriction, + action.Surgery, + action.CullMethod, + action.CullReason, + action.Cull, + action.OtherAction, + ] + ) -if mode != 'public': - SHADOW_TABLES = SHADOW_TABLES + [ - ephys.ProbeModel, - ephys.ProbeInsertion - ] +if mode != "public": + SHADOW_TABLES = SHADOW_TABLES + [ephys.ProbeModel, ephys.ProbeInsertion] def main(excluded_tables=[], modified_sessions_pks=None): - kwargs = dict( - display_progress=True, - suppress_errors=True) + kwargs = dict(display_progress=True, suppress_errors=True) for t in SHADOW_TABLES: if t.__name__ in excluded_tables: continue - print(f'Ingesting shadow table {t.__name__}...') + print(f"Ingesting shadow table {t.__name__}...") # if a session entry is modified, replace the entry without deleting # this is to keep the session entry when uuid is not changed but start time changed # by one sec. We don't update start_time in alyxraw in this case. - if t.__name__ == 'Session' and modified_sessions_pks: + if t.__name__ == "Session" and modified_sessions_pks: modified_session_keys = [ - {'session_uuid': pk} for pk in modified_sessions_pks] + {"session_uuid": pk} for pk in modified_sessions_pks + ] sessions = acquisition.Session & modified_session_keys if sessions: modified_session_entries = [] - for key in sessions.fetch('KEY'): + for key in sessions.fetch("KEY"): try: entry = acquisition.Session.create_entry(key) modified_session_entries.append(entry) @@ -96,12 +102,14 @@ def main(excluded_tables=[], modified_sessions_pks=None): print("Error creating entry for key: {}".format(key)) if modified_session_entries: try: - t.insert(modified_session_entries, - allow_direct_insert=True, replace=True) + t.insert( + modified_session_entries, + allow_direct_insert=True, + replace=True, + ) except DataJointError: for entry in modified_session_entries: - t.insert1(entry, allow_direct_insert=True, - replace=True) + t.insert1(entry, allow_direct_insert=True, replace=True) t.populate(**kwargs) @@ -109,33 +117,40 @@ def main(excluded_tables=[], modified_sessions_pks=None): # essentially calling their respective `.make()` # but using the QueryBuffer to do batch insertion - if 'DataSet' not in excluded_tables: - print('Ingesting dataset entries...') + if "DataSet" not in excluded_tables: + print("Ingesting dataset entries...") data_set_buffer = QueryBuffer(data.DataSet) - for key in tqdm((data.DataSet.key_source - data.DataSet).fetch('KEY'), position=0): + for key in tqdm( + (data.DataSet.key_source - data.DataSet).fetch("KEY"), position=0 + ): data_set_buffer.add_to_queue1(data.DataSet.create_entry(key)) if data_set_buffer.flush_insert( - skip_duplicates=True, - allow_direct_insert=True, chunksz=100): - print('Inserted 100 dataset tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=100 + ): + print("Inserted 100 dataset tuples") if data_set_buffer.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining dataset tuples') + print("Inserted all remaining dataset tuples") - if 'FileRecord' not in excluded_tables: - print('Ingesting file record entries...') + if "FileRecord" not in excluded_tables: + print("Ingesting file record entries...") file_record_buffer = QueryBuffer(data.FileRecord) - for key in tqdm((data.FileRecord.key_source - data.FileRecord).fetch('KEY'), position=0): + for key in tqdm( + (data.FileRecord.key_source - data.FileRecord).fetch("KEY"), position=0 + ): file_record_buffer.add_to_queue1(data.FileRecord.create_entry(key)) if file_record_buffer.flush_insert( - skip_duplicates=True, allow_direct_insert=True, chunksz=1000): - print('Inserted 1000 raw field tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=1000 + ): + print("Inserted 1000 raw field tuples") - if file_record_buffer.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining file record tuples') + if file_record_buffer.flush_insert( + skip_duplicates=True, allow_direct_insert=True + ): + print("Inserted all remaining file record tuples") -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/populate_behavior.py b/ibl_pipeline/process/populate_behavior.py index 55a2753c..1e13885e 100755 --- a/ibl_pipeline/process/populate_behavior.py +++ b/ibl_pipeline/process/populate_behavior.py @@ -1,18 +1,17 @@ -''' +""" This script ingest behavioral data into tables in the ibl_behavior schema -''' +""" import datetime -from ibl_pipeline import subject, reference, action -from tqdm import tqdm -import datajoint as dj import time -from ibl_pipeline import acquisition, data, behavior +import datajoint as dj +from tqdm import tqdm + +from ibl_pipeline import acquisition, action, behavior, data, reference, subject from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.plotting import behavior as behavior_plotting - -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") BEHAVIOR_TABLES = [ behavior.CompleteWheelSession, @@ -33,92 +32,124 @@ behavior_plotting.DatePsychCurve, behavior_plotting.DateReactionTimeContrast, behavior_plotting.DateReactionTimeTrialNumber, - behavior.SessionTag + behavior.SessionTag, ] -if mode != 'public': +if mode != "public": BEHAVIOR_TABLES.append(behavior_plotting.WaterTypeColor) gkwargs = dict(suppress_errors=True, display_progress=True) -def main(backtrack_days=30, excluded_tables=None, run_duration=3600*3, sleep_duration=60*10, **kwargs): +def main( + backtrack_days=30, + excluded_tables=None, + run_duration=3600 * 3, + sleep_duration=60 * 10, + **kwargs, +): if excluded_tables is None: excluded_tables = [] start_time = time.time() - while ((time.time() - start_time < run_duration) - or (run_duration is None) - or (run_duration < 0)): + while ( + (time.time() - start_time < run_duration) + or (run_duration is None) + or (run_duration < 0) + ): # Try inserting new sessions from querying directly the live alyx db acquisition.Session.insert_with_alyx_rest(backtrack_days=1, verbose=True) - date_cutoff = (datetime.datetime.now().date() - - datetime.timedelta(days=backtrack_days)).strftime('%Y-%m-%d') + date_cutoff = ( + datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days) + ).strftime("%Y-%m-%d") # ingest those dataset and file records where exists=False when json gets dumped # only check those sessions where required datasets are missing. # populate CompleteTrialSession first with existing file records - behavior.CompleteTrialSession.populate(f'session_start_time > "{date_cutoff}"', **gkwargs) - sessions_missing = (acquisition.Session - behavior.CompleteTrialSession) & \ - f'session_start_time > "{(datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days)).strftime("%Y-%m-%d")}"' + behavior.CompleteTrialSession.populate( + f'session_start_time > "{date_cutoff}"', **gkwargs + ) + sessions_missing = ( + (acquisition.Session - behavior.CompleteTrialSession) + & f'session_start_time > "{(datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days)).strftime("%Y-%m-%d")}"' + ) - uuids = [str(u) for u in sessions_missing.fetch('session_uuid')] + uuids = [str(u) for u in sessions_missing.fetch("session_uuid")] data.DataSet.insert_with_alyx_rest( - uuids, behavior.CompleteTrialSession.required_datasets + behavior.CompleteTrialSession.other_datasets) + uuids, + behavior.CompleteTrialSession.required_datasets + + behavior.CompleteTrialSession.other_datasets, + ) for table in BEHAVIOR_TABLES: if table.__name__ in excluded_tables: continue - print(f'Populating {table.__name__}...') + print(f"Populating {table.__name__}...") - if backtrack_days and table.__name__ != 'WaterTypeColor': - if 'Date' in table.__name__: - field = 'session_date' + if backtrack_days and table.__name__ != "WaterTypeColor": + if "Date" in table.__name__: + field = "session_date" else: - field = 'session_start_time' + field = "session_start_time" restrictor = f'{field} > "{date_cutoff}"' else: restrictor = {} table.populate(restrictor, **gkwargs) - print('Populating SubjectLatestEvent...') - for key in tqdm(subject.Subject.fetch('KEY'), position=0): + print("Populating SubjectLatestEvent...") + for key in tqdm(subject.Subject.fetch("KEY"), position=0): behavior_plotting.SubjectLatestEvent.create_entry(key) - print('Processing Cumulative plots...') + print("Processing Cumulative plots...") with dj.config(safemode=False): - (behavior_plotting.CumulativeSummary - & behavior_plotting.CumulativeSummary.get_outdated_entries().fetch('KEY')).delete() + ( + behavior_plotting.CumulativeSummary + & behavior_plotting.CumulativeSummary.get_outdated_entries().fetch( + "KEY" + ) + ).delete() behavior_plotting.CumulativeSummary.populate(**gkwargs) - print('Update SubjectLatestDate...') - subject_latest_date = subject.Subject.aggr(behavior_plotting.CumulativeSummary, - latest_date='MAX(latest_date)') - behavior_plotting.SubjectLatestDate.insert(subject_latest_date, skip_duplicates=True) - - need_update = behavior_plotting.SubjectLatestDate.proj( - inserted_date='latest_date') * subject_latest_date & 'inserted_date != latest_date' - for k in need_update.fetch('KEY'): + print("Update SubjectLatestDate...") + subject_latest_date = subject.Subject.aggr( + behavior_plotting.CumulativeSummary, latest_date="MAX(latest_date)" + ) + behavior_plotting.SubjectLatestDate.insert( + subject_latest_date, skip_duplicates=True + ) + + need_update = ( + behavior_plotting.SubjectLatestDate.proj(inserted_date="latest_date") + * subject_latest_date + & "inserted_date != latest_date" + ) + for k in need_update.fetch("KEY"): (behavior_plotting.SubjectLatestDate & k)._update( - 'latest_date', (subject_latest_date & k).fetch1('latest_date')) - - if mode != 'public': - print('Processing daily summary...') - outdated_lab_summary = (behavior_plotting.DailyLabSummary - - behavior_plotting.DailyLabSummary.key_source) + "latest_date", (subject_latest_date & k).fetch1("latest_date") + ) + + if mode != "public": + print("Processing daily summary...") + outdated_lab_summary = ( + behavior_plotting.DailyLabSummary + - behavior_plotting.DailyLabSummary.key_source + ) with dj.config(safemode=False): - (behavior_plotting.DailyLabSummary & outdated_lab_summary.fetch('KEY')).delete() + ( + behavior_plotting.DailyLabSummary + & outdated_lab_summary.fetch("KEY") + ).delete() behavior_plotting.DailyLabSummary.populate(**gkwargs) time.sleep(sleep_duration) -if __name__ == '__main__': +if __name__ == "__main__": main(backtrack_days=30) diff --git a/ibl_pipeline/process/populate_ephys.py b/ibl_pipeline/process/populate_ephys.py index 38b09c56..42b2f4b7 100644 --- a/ibl_pipeline/process/populate_ephys.py +++ b/ibl_pipeline/process/populate_ephys.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -''' +""" Ingestion routine of ephys pipeline. Shan Shen, 2019-11-20 @@ -9,29 +9,27 @@ Added histology tables populate Thinh Nguyen, 2021-10-15 -''' +""" import logging -import time import pathlib +import time -from ibl_pipeline import ephys, histology -from ibl_pipeline import mode +from ibl_pipeline import ephys, histology, mode from ibl_pipeline.analyses import ephys as ephys_analyses from ibl_pipeline.plotting import ephys as ephys_plotting from ibl_pipeline.plotting import histology as histology_plotting -log_path = pathlib.Path(__file__).parent / 'logs' +log_path = pathlib.Path(__file__).parent / "logs" log_path.mkdir(parents=True, exist_ok=True) log_file = log_path / f'ephys_ingestion{"_public" if mode == "public" else ""}.log' log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler()], - level=30) + format="%(asctime)s - %(message)s", + handlers=[logging.FileHandler(log_file), logging.StreamHandler()], + level=30, +) logger = logging.getLogger(__name__) @@ -58,50 +56,58 @@ histology.ChannelBrainLocation, histology.ClusterBrainRegion, histology_plotting.SubjectSpinningBrain, - histology_plotting.ProbeTrajectoryCoronal + histology_plotting.ProbeTrajectoryCoronal, ] -if mode != 'public': - HISTOLOGY_TABLES.extend([ - histology.ClusterBrainRegionTemp, - histology.ProbeBrainRegionTemp, - histology.DepthBrainRegionTemp]) +if mode != "public": + HISTOLOGY_TABLES.extend( + [ + histology.ClusterBrainRegionTemp, + histology.ProbeBrainRegionTemp, + histology.DepthBrainRegionTemp, + ] + ) gkwargs = dict(display_progress=True, suppress_errors=True) -def main(exclude_plottings=False, run_duration=3600*3, sleep_duration=60, **kwargs): +def main(exclude_plottings=False, run_duration=3600 * 3, sleep_duration=60, **kwargs): start_time = time.time() - while ((time.time() - start_time < run_duration) - or (run_duration is None) - or (run_duration < 0)): + while ( + (time.time() - start_time < run_duration) + or (run_duration is None) + or (run_duration < 0) + ): tstart = time.time() - logger.log(30, 'Ephys populate') + logger.log(30, "Ephys populate") for table in EPHYS_TABLES: table_start_time = time.time() - if exclude_plottings and table.__module__ == 'ibl_pipeline.plotting.ephys': + if exclude_plottings and table.__module__ == "ibl_pipeline.plotting.ephys": continue - logger.log(30, 'Ingesting {}...'.format(table.__name__)) + logger.log(30, "Ingesting {}...".format(table.__name__)) table.populate(**gkwargs) - logger.log(30, 'Ingestion time of {} is {}'.format( - table.__name__, - time.time()-table_start_time)) + logger.log( + 30, + "Ingestion time of {} is {}".format( + table.__name__, time.time() - table_start_time + ), + ) - logger.log(30, 'Total ingestion time {}'.format(time.time() - tstart)) + logger.log(30, "Total ingestion time {}".format(time.time() - tstart)) - logger.log(30, 'Histology populate') + logger.log(30, "Histology populate") for table in HISTOLOGY_TABLES: - logger.log(30, f'Populating {table.__name__}...') + logger.log(30, f"Populating {table.__name__}...") table.populate(**gkwargs) time.sleep(sleep_duration) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/populate_wheel.py b/ibl_pipeline/process/populate_wheel.py index 2849efe6..f1773609 100644 --- a/ibl_pipeline/process/populate_wheel.py +++ b/ibl_pipeline/process/populate_wheel.py @@ -1,47 +1,48 @@ -import logging import datetime +import logging import pathlib import time +from ibl_pipeline import ephys, mode from ibl_pipeline.group_shared import wheel -from ibl_pipeline import mode, ephys -log_path = pathlib.Path(__file__).parent / 'logs' +log_path = pathlib.Path(__file__).parent / "logs" log_path.mkdir(parents=True, exist_ok=True) log_file = log_path / f'process_wheel{"_public" if mode == "public" else ""}.log' log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + format="%(asctime)s - %(message)s", + handlers=[logging.FileHandler(log_file), logging.StreamHandler()], + level=25, +) logger = logging.getLogger(__name__) gkwargs = dict(display_progress=True, suppress_errors=True) -def main(backtrack_days=30, run_duration=3600*3, sleep_duration=60, **kwargs): +def main(backtrack_days=30, run_duration=3600 * 3, sleep_duration=60, **kwargs): start_time = time.time() - while ((time.time() - start_time < run_duration) - or (run_duration is None) - or (run_duration < 0)): - - date_cutoff = \ - (datetime.datetime.now().date() - - datetime.timedelta(days=backtrack_days)).strftime('%Y-%m-%d') + while ( + (time.time() - start_time < run_duration) + or (run_duration is None) + or (run_duration < 0) + ): + + date_cutoff = ( + datetime.datetime.now().date() - datetime.timedelta(days=backtrack_days) + ).strftime("%Y-%m-%d") date_range = f'session_start_time > "{date_cutoff}"' - logger.log(25, 'Populating WheelMoveSet...') + logger.log(25, "Populating WheelMoveSet...") wheel.WheelMoveSet.populate(date_range, ephys.ProbeInsertion, **gkwargs) - logger.log(25, 'Populating MovementTimes...') + logger.log(25, "Populating MovementTimes...") wheel.MovementTimes.populate(date_range, ephys.ProbeInsertion, **gkwargs) time.sleep(sleep_duration) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/process_histology.py b/ibl_pipeline/process/process_histology.py index 98a6bb50..e9254df8 100644 --- a/ibl_pipeline/process/process_histology.py +++ b/ibl_pipeline/process/process_histology.py @@ -1,38 +1,48 @@ -import datajoint as dj -from ibl_pipeline.process import ingest_alyx_raw, ingest_real, ingest_alyx_raw_postgres -from ibl_pipeline.ingest.common import * -from ibl_pipeline.ingest import populate_batch, QueryBuffer -from ibl_pipeline.common import * -from ibl_pipeline.process import update_utils -from tqdm import tqdm import inspect +import logging import os import pathlib -import logging + +import actions +import data +import datajoint as dj +import experiments + # alyx models -import misc, subjects, actions, data, experiments +import misc +import subjects +from tqdm import tqdm -log_file = pathlib.Path(__file__).parent / 'logs/process_histology.log' +from ibl_pipeline.common import * +from ibl_pipeline.ingest import QueryBuffer, populate_batch +from ibl_pipeline.ingest.common import * +from ibl_pipeline.process import ( + ingest_alyx_raw, + ingest_alyx_raw_postgres, + ingest_real, + update_utils, +) + +log_file = pathlib.Path(__file__).parent / "logs/process_histology.log" log_file.parent.mkdir(parents=True, exist_ok=True) log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + format="%(asctime)s - %(message)s", + handlers=[logging.FileHandler(log_file), logging.StreamHandler()], + level=25, +) logger = logging.getLogger(__name__) -mode = dj.config.get('custom', {}).get('database.mode', "") +mode = dj.config.get("custom", {}).get("database.mode", "") ALYX_HISTOLOGY_MODELS = [ experiments.models.CoordinateSystem, experiments.models.TrajectoryEstimate, - experiments.models.Channel + experiments.models.Channel, ] HISTOLOGY_SHADOW_TABLES = [ @@ -56,7 +66,7 @@ action_ingest.ProcedureType, acquisition_ingest.Session, ephys_ingest.ProbeModel, - ephys_ingest.ProbeInsertion + ephys_ingest.ProbeInsertion, ] HISTOLOGY_TABLES_FOR_POPULATE = [ @@ -64,37 +74,43 @@ histology.ChannelBrainLocation, histology.ClusterBrainRegion, histology_plotting.SubjectSpinningBrain, - histology_plotting.ProbeTrajectoryCoronal + histology_plotting.ProbeTrajectoryCoronal, ] HISTOLOGY_TABLES_FOR_DELETE = [] -if mode != 'public': - HISTOLOGY_SHADOW_TABLES.extend([ - histology_ingest.ProbeTrajectoryTemp, - histology_ingest.ChannelBrainLocationTemp - ]) - - HISTOLOGY_TABLES_FOR_DELETE.extend([ - histology.ProbeBrainRegionTemp, - histology.ClusterBrainRegionTemp, - histology.ChannelBrainLocationTemp, - histology.ProbeTrajectoryTemp, - ]) - - HISTOLOGY_TABLES_FOR_POPULATE.extend([ - histology.ClusterBrainRegionTemp, - histology.ProbeBrainRegionTemp, - histology.DepthBrainRegionTemp - ]) +if mode != "public": + HISTOLOGY_SHADOW_TABLES.extend( + [ + histology_ingest.ProbeTrajectoryTemp, + histology_ingest.ChannelBrainLocationTemp, + ] + ) + + HISTOLOGY_TABLES_FOR_DELETE.extend( + [ + histology.ProbeBrainRegionTemp, + histology.ClusterBrainRegionTemp, + histology.ChannelBrainLocationTemp, + histology.ProbeTrajectoryTemp, + ] + ) + + HISTOLOGY_TABLES_FOR_POPULATE.extend( + [ + histology.ClusterBrainRegionTemp, + histology.ProbeBrainRegionTemp, + histology.DepthBrainRegionTemp, + ] + ) def populate_shadow_tables(): kwargs = dict(display_progress=True, suppress_errors=True) for t in HISTOLOGY_SHADOW_TABLES: - print(f'Populating {t.__name__}...') - if t.__name__ == 'ChannelBrainLocationTemp': + print(f"Populating {t.__name__}...") + if t.__name__ == "ChannelBrainLocationTemp": populate_batch(t) else: t.populate(**kwargs) @@ -105,55 +121,56 @@ def delete_histology_alyx_shadow(verbose=False): CHANNEL_TABLES = [ histology_ingest.ChannelBrainLocationTemp, alyxraw.AlyxRaw.Field, - alyxraw.AlyxRaw + alyxraw.AlyxRaw, ] - channel_loc_keys = update_utils.get_deleted_keys('experiments.channel') + channel_loc_keys = update_utils.get_deleted_keys("experiments.channel") for t in CHANNEL_TABLES: - print(f'Deleting from table {t.__name__}') + print(f"Deleting from table {t.__name__}") uuid_name = t.heading.primary_key[0] - keys = [{uuid_name: k['uuid']} for k in tqdm(channel_loc_keys)] + keys = [{uuid_name: k["uuid"]} for k in tqdm(channel_loc_keys)] table = QueryBuffer(t) for k in tqdm(keys, position=0): table.add_to_queue1(k) if table.flush_delete(chunksz=1000, quick=True) and verbose: - print(f'Deleted 1000 entries from {t.__name__}') + print(f"Deleted 1000 entries from {t.__name__}") table.flush_delete(quick=True) - traj_keys = update_utils.get_deleted_keys('experiments.trajectoryestimate') + \ - update_utils.get_updated_keys('experiments.trajectoryestimate') + traj_keys = update_utils.get_deleted_keys( + "experiments.trajectoryestimate" + ) + update_utils.get_updated_keys("experiments.trajectoryestimate") TRAJ_TABLES = [ histology_ingest.ProbeTrajectoryTemp, alyxraw.AlyxRaw.Field, - alyxraw.AlyxRaw + alyxraw.AlyxRaw, ] for t in TRAJ_TABLES: uuid_name = t.heading.primary_key[0] - keys = [{uuid_name: k['uuid']} for k in traj_keys] + keys = [{uuid_name: k["uuid"]} for k in traj_keys] table = QueryBuffer(t) for k in tqdm(keys, position=0): table.add_to_queue1(k) if table.flush_delete(chunksz=1000, quick=True) and verbose: - print(f'Deleted 1000 entries from {t.__name__}') + print(f"Deleted 1000 entries from {t.__name__}") table.flush_delete(quick=True) def delete_histology_real(): - traj_uuids = update_utils.get_deleted_keys('experiments.trajectoryestimate') + \ - update_utils.get_updated_keys('experiments.trajectoryestimate') + traj_uuids = update_utils.get_deleted_keys( + "experiments.trajectoryestimate" + ) + update_utils.get_updated_keys("experiments.trajectoryestimate") - traj_uuids_real = [ - {'probe_trajectory_uuid': k['uuid']} for k in traj_uuids] + traj_uuids_real = [{"probe_trajectory_uuid": k["uuid"]} for k in traj_uuids] - traj_keys = (histology.ProbeTrajectoryTemp & traj_uuids_real).fetch('KEY') + traj_keys = (histology.ProbeTrajectoryTemp & traj_uuids_real).fetch("KEY") for t in HISTOLOGY_TABLES_FOR_DELETE: - print(f'Deleting from table {t.__name__}') + print(f"Deleting from table {t.__name__}") (t & traj_keys).delete_quick() @@ -161,44 +178,51 @@ def copy_to_real_tables(): for shadow_table in HISTOLOGY_SHADOW_TABLES: mod = shadow_table.__module__ shadow_module = inspect.getmodule(shadow_table) - real_module = eval(mod.replace('ibl_pipeline.ingest.', '')) + real_module = eval(mod.replace("ibl_pipeline.ingest.", "")) table_name = shadow_table.__name__ - print(f'Copying table {table_name}...') + print(f"Copying table {table_name}...") ingest_real.copy_table( - real_module, shadow_module, table_name, allow_direct_insert=True) + real_module, shadow_module, table_name, allow_direct_insert=True + ) def populate_real_tables(): for t in HISTOLOGY_TABLES_FOR_POPULATE: - print(f'Populating {t.__name__}...') + print(f"Populating {t.__name__}...") t.populate(suppress_errors=True, display_progress=True) def main(): - logger.log(25, 'Histology - Ingesting from Postgres to UpdateAlyxRaw...') + logger.log(25, "Histology - Ingesting from Postgres to UpdateAlyxRaw...") ingest_alyx_raw_postgres.insert_to_update_alyxraw_postgres( alyx_models=ALYX_HISTOLOGY_MODELS, - delete_UpdateAlyxRaw_first=True, skip_existing_alyxraw=True) - - logger.log(25, 'Histology - Deleting updated/deleted entries from AlyxRaw and shadow tables...') + delete_UpdateAlyxRaw_first=True, + skip_existing_alyxraw=True, + ) + + logger.log( + 25, + "Histology - Deleting updated/deleted entries from AlyxRaw and shadow tables...", + ) delete_histology_alyx_shadow() - logger.log(25, 'Histology - Ingesting from Postgres to AlyxRaw...') + logger.log(25, "Histology - Ingesting from Postgres to AlyxRaw...") for alyx_model in ALYX_HISTOLOGY_MODELS: - ingest_alyx_raw_postgres.insert_alyx_entries_model(alyx_model, - skip_existing_alyxraw=True) + ingest_alyx_raw_postgres.insert_alyx_entries_model( + alyx_model, skip_existing_alyxraw=True + ) - logger.log(25, 'Histology - Ingesting into shadow tables...') + logger.log(25, "Histology - Ingesting into shadow tables...") populate_shadow_tables() - logger.log(25, 'Histology - Deleting updated/deleted entries from real tables...') + logger.log(25, "Histology - Deleting updated/deleted entries from real tables...") delete_histology_real() - logger.log(25, 'Histology - Ingesting the real tables...') + logger.log(25, "Histology - Ingesting the real tables...") copy_to_real_tables() - logger.log(25, 'Histology - Populate the histology tables...') + logger.log(25, "Histology - Populate the histology tables...") populate_real_tables() @@ -206,13 +230,14 @@ def process_public(): from ibl_pipeline import public for alyx_model in ALYX_HISTOLOGY_MODELS: - ingest_alyx_raw_postgres.insert_alyx_entries_model(alyx_model, - skip_existing_alyxraw=False) + ingest_alyx_raw_postgres.insert_alyx_entries_model( + alyx_model, skip_existing_alyxraw=False + ) populate_shadow_tables() copy_to_real_tables() populate_real_tables() -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/process_public.py b/ibl_pipeline/process/process_public.py index ed70d329..b721ac6c 100644 --- a/ibl_pipeline/process/process_public.py +++ b/ibl_pipeline/process/process_public.py @@ -1,35 +1,42 @@ -''' +""" This module process public data release to the public server. It should be run in the docker container set up with docker-compose-public.yml -''' +""" +import logging +import warnings from os import get_blocking +from pathlib import Path + import datajoint as dj -from ibl_pipeline.common import * +import numpy as np +from tqdm import tqdm + from ibl_pipeline import public +from ibl_pipeline.common import * from ibl_pipeline.ingest import QueryBuffer -from tqdm import tqdm from ibl_pipeline.process import ( ingest_alyx_raw, - ingest_shadow, ingest_membership, ingest_real, + ingest_shadow, populate_behavior, populate_ephys, + populate_wheel, process_histology, - populate_wheel ) -import logging, warnings -import numpy as np -from pathlib import Path # TODO: change /data /tmp to use dj.config logging.basicConfig( - format='%(asctime)s - %(message)s', + format="%(asctime)s - %(message)s", handlers=[ - logging.FileHandler("/src/IBL-pipeline/ibl_pipeline/process/logs/process_public.log"), - logging.StreamHandler()], - level=25) + logging.FileHandler( + "/src/IBL-pipeline/ibl_pipeline/process/logs/process_public.log" + ), + logging.StreamHandler(), + ], + level=25, +) # logger does not work without this somehow @@ -41,9 +48,12 @@ def get_env_data_as_dict(env_path: str) -> dict: - with open(env_path, 'r') as f: - return dict(tuple(line.replace('\n', '').split('=')) - for line in f.readlines() if not line.startswith('#') and line != '\n') + with open(env_path, "r") as f: + return dict( + tuple(line.replace("\n", "").split("=")) + for line in f.readlines() + if not line.startswith("#") and line != "\n" + ) def ingest_uuid_into_public_tables(uuid_datapath): @@ -64,110 +74,147 @@ def ingest_uuid_into_public_tables(uuid_datapath): # load credentials for internal database instance # TODO: change /data /tmp to use dj.config - internal_env = get_env_data_as_dict('/src/IBL-pipeline/.env') + internal_env = get_env_data_as_dict("/src/IBL-pipeline/.env") conn_internal = dj.conn( - internal_env['DJ_HOST'], internal_env['DJ_USER'], internal_env['DJ_PASS']) + internal_env["DJ_HOST"], internal_env["DJ_USER"], internal_env["DJ_PASS"] + ) # public schema in the internal database - public_schema_internal = dj.create_virtual_module('public_internal', 'ibl_public', connection=conn_internal) - public_schema_public = dj.create_virtual_module('public_public', 'ibl_public', connection=conn_public) + public_schema_internal = dj.create_virtual_module( + "public_internal", "ibl_public", connection=conn_internal + ) + public_schema_public = dj.create_virtual_module( + "public_public", "ibl_public", connection=conn_public + ) # internal subject schema - subject = dj.create_virtual_module('subject', 'ibl_subject', connection=conn_internal) + subject = dj.create_virtual_module( + "subject", "ibl_subject", connection=conn_internal + ) # internal acquisition schema - acquisition = dj.create_virtual_module('acquisition', 'ibl_acquisition', connection=conn_internal) + acquisition = dj.create_virtual_module( + "acquisition", "ibl_acquisition", connection=conn_internal + ) # ingest into public.PublicSubjectUuid - subject_eid_files = list(Path(uuid_datapath).glob('*subject_eids*')) + subject_eid_files = list(Path(uuid_datapath).glob("*subject_eids*")) if not subject_eid_files: - warnings.warn('subject_eids file does not exist') + warnings.warn("subject_eids file does not exist") else: for f in subject_eid_files: subject_uuids = np.load(f, allow_pickle=True) # fetch subject information from subject.Subject table in internal database - subjects_to_release = (subject.Subject * subject.SubjectLab & - [{'subject_uuid': uuid} for uuid in subject_uuids]).proj( - 'lab_name', 'subject_nickname').fetch(as_dict=True) + subjects_to_release = ( + ( + subject.Subject * subject.SubjectLab + & [{"subject_uuid": uuid} for uuid in subject_uuids] + ) + .proj("lab_name", "subject_nickname") + .fetch(as_dict=True) + ) # ingest into internal PublicSubjectUuid public_schema_internal.PublicSubject.insert( - subjects_to_release, skip_duplicates=True, ignore_extra_fields=True) + subjects_to_release, skip_duplicates=True, ignore_extra_fields=True + ) public_schema_internal.PublicSubjectUuid.insert( - subjects_to_release, skip_duplicates=True, allow_direct_insert=True) + subjects_to_release, skip_duplicates=True, allow_direct_insert=True + ) # ingest into public PublicSubjectUuid public_schema_public.PublicSubjectUuid.insert( - subjects_to_release, skip_duplicates=True, allow_direct_insert=True) + subjects_to_release, skip_duplicates=True, allow_direct_insert=True + ) # ingest into public.PublicSession - session_eid_files = list(Path(uuid_datapath).glob('*session_eids*')) + session_eid_files = list(Path(uuid_datapath).glob("*session_eids*")) if not session_eid_files: - warnings.warn('session_eids file does not exist') + warnings.warn("session_eids file does not exist") else: for f in session_eid_files: session_uuids = np.load(f, allow_pickle=True) # fetch session information from acquisition.Session table in the internal database - sessions_to_release = (acquisition.Session & - [{'session_uuid': uuid} for uuid in session_uuids]).proj( - 'session_uuid').fetch(as_dict=True) + sessions_to_release = ( + ( + acquisition.Session + & [{"session_uuid": uuid} for uuid in session_uuids] + ) + .proj("session_uuid") + .fetch(as_dict=True) + ) # ingest into internal PublicSession public_schema_internal.PublicSession.insert( - sessions_to_release, skip_duplicates=True) + sessions_to_release, skip_duplicates=True + ) # ingest into public PublicSession public_schema_public.PublicSession.insert( - sessions_to_release, skip_duplicates=True) + sessions_to_release, skip_duplicates=True + ) # ingest into public.PublicProbeInsertion - probe_insertion_eid_files = list(Path(uuid_datapath).glob('*probe_insertion_eids*')) + probe_insertion_eid_files = list(Path(uuid_datapath).glob("*probe_insertion_eids*")) if not probe_insertion_eid_files: - warnings.warn('probe_insertion_eids file does not exist') + warnings.warn("probe_insertion_eids file does not exist") else: for f in probe_insertion_eid_files: probe_insertion_uuids = np.load(f, allow_pickle=True) - probe_insertions_to_release = [{'probe_insertion_uuid': uuid} - for uuid in probe_insertion_uuids] + probe_insertions_to_release = [ + {"probe_insertion_uuid": uuid} for uuid in probe_insertion_uuids + ] # ingest into internal PublicProbeInsertion public_schema_internal.PublicProbeInsertion.insert( - probe_insertions_to_release, skip_duplicates=True) + probe_insertions_to_release, skip_duplicates=True + ) # ingest into public PublicProbeInsertion public_schema_public.PublicProbeInsertion.insert( - probe_insertions_to_release, skip_duplicates=True) + probe_insertions_to_release, skip_duplicates=True + ) def delete_non_published_records(): with dj.config(safemode=False): - logger.log(25, 'Deleting non-published probe insertions...') + logger.log(25, "Deleting non-published probe insertions...") probe_insertion_table = QueryBuffer(ephys.ProbeInsertion) for key in tqdm( - (ephys.ProbeInsertion - public.PublicProbeInsertion - ephys.DefaultCluster).fetch('KEY')): + ( + ephys.ProbeInsertion + - public.PublicProbeInsertion + - ephys.DefaultCluster + ).fetch("KEY") + ): probe_insertion_table.add_to_queue1(key) if probe_insertion_table.flush_delete(quick=False, chunksz=100): - logger.log(25, 'Deleted 100 probe insertions') + logger.log(25, "Deleted 100 probe insertions") probe_insertion_table.flush_delete(quick=False) - logger.log(25, 'Deleted the rest of the probe insertions') + logger.log(25, "Deleted the rest of the probe insertions") - logger.log(25, 'Deleting non-published sessions...') + logger.log(25, "Deleting non-published sessions...") session_table = QueryBuffer(acquisition.Session) for key in tqdm( - (acquisition.Session - public.PublicSession - behavior.TrialSet).fetch('KEY')): + (acquisition.Session - public.PublicSession - behavior.TrialSet).fetch( + "KEY" + ) + ): session_table.add_to_queue1(key) if session_table.flush_delete(quick=False, chunksz=100): - logger.log(25, 'Deleted 100 sessions') + logger.log(25, "Deleted 100 sessions") session_table.flush_delete(quick=False) - logger.log(25, 'Deleted the rest of the sessions') + logger.log(25, "Deleted the rest of the sessions") - logger.log(25, 'Deleting non-published subjects...') + logger.log(25, "Deleting non-published subjects...") subjs = subject.Subject & acquisition.Session for key in tqdm( - (subject.Subject - public.PublicSubjectUuid - subjs.proj()).fetch('KEY')): + (subject.Subject - public.PublicSubjectUuid - subjs.proj()).fetch("KEY") + ): (subject.Subject & key).delete() + # TODO: change /data /tmp to use dj.config def main(populate_only=False, populate_wheel=False, populate_ephys_histology=False): """This function process the all the steps to get data ingested into the public database, needs rewriting @@ -184,26 +231,26 @@ def main(populate_only=False, populate_wheel=False, populate_ephys_histology=Fal # logger.log(25, 'Ingesting alyxraw...') # ingest_alyx_raw.insert_to_alyxraw( # ingest_alyx_raw.get_alyx_entries()) - logger.log(25, 'Ingesting shadow tables...') + logger.log(25, "Ingesting shadow tables...") ingest_shadow.main() - logger.log(25, 'Ingesting shadow membership...') + logger.log(25, "Ingesting shadow membership...") ingest_membership.main() - logger.log(25, 'Copying to real tables...') + logger.log(25, "Copying to real tables...") ingest_real.main() - logger.log(25, 'Deleting the non published records...') + logger.log(25, "Deleting the non published records...") delete_non_published_records() - logger.log(25, 'Processing behavior...') + logger.log(25, "Processing behavior...") populate_behavior.main(backtrack_days=1000) if populate_wheel: - logger.log(25, 'Processing wheel...') + logger.log(25, "Processing wheel...") populate_wheel.main(backtrack_days=1000) if populate_ephys_histology: - logger.log(25, 'Processing ephys...') + logger.log(25, "Processing ephys...") populate_ephys.main() - logger.log(25, 'Processing histology...') + logger.log(25, "Processing histology...") process_histology.populate_real_tables() diff --git a/ibl_pipeline/process/process_qc.py b/ibl_pipeline/process/process_qc.py index 9e251774..167cca5f 100644 --- a/ibl_pipeline/process/process_qc.py +++ b/ibl_pipeline/process/process_qc.py @@ -1,55 +1,56 @@ +import logging import pathlib -from ibl_pipeline.process import update_utils, ingest_alyx_raw_postgres -from ibl_pipeline.ingest import alyxraw -from ibl_pipeline import acquisition, ephys, qc -from ibl_pipeline.ingest import qc as qc_ingest +import actions +import data +import experiments # alyx models -import misc, subjects, actions, data, experiments +import misc +import subjects -import logging +from ibl_pipeline import acquisition, ephys, qc +from ibl_pipeline.ingest import alyxraw +from ibl_pipeline.ingest import qc as qc_ingest +from ibl_pipeline.process import ingest_alyx_raw_postgres, update_utils -log_file = pathlib.Path(__file__).parent / 'logs/process_qc.log' +log_file = pathlib.Path(__file__).parent / "logs/process_qc.log" log_file.parent.mkdir(parents=True, exist_ok=True) log_file.touch(exist_ok=True) logging.basicConfig( - format='%(asctime)s - %(message)s', - handlers=[ - logging.FileHandler(log_file), - logging.StreamHandler()], - level=25) + format="%(asctime)s - %(message)s", + handlers=[logging.FileHandler(log_file), logging.StreamHandler()], + level=25, +) logger = logging.getLogger(__name__) QC_MODELS_TO_UPDATE = { - 'actions.session': - { - 'alyx_model': actions.models.Session, - 'ref_table': acquisition.Session, - 'alyx_fields': ['qc', 'extended_qc'], - 'uuid_name': 'session_uuid', - 'ingestion_tables': [qc_ingest.SessionQCIngest], - 'real_tables': [ + "actions.session": { + "alyx_model": actions.models.Session, + "ref_table": acquisition.Session, + "alyx_fields": ["qc", "extended_qc"], + "uuid_name": "session_uuid", + "ingestion_tables": [qc_ingest.SessionQCIngest], + "real_tables": [ qc.SessionExtendedQC.Field, qc.SessionExtendedQC, - qc.SessionQC + qc.SessionQC, ], # in the order of delete_quick() }, - 'experiments.probeinsertion': - { - 'alyx_model': experiments.models.ProbeInsertion, - 'ref_table': ephys.ProbeInsertion, - 'alyx_fields': ['json'], - 'uuid_name': 'probe_insertion_uuid', - 'ingestion_tables': [qc_ingest.ProbeInsertionQCIngest], - 'real_tables': [ + "experiments.probeinsertion": { + "alyx_model": experiments.models.ProbeInsertion, + "ref_table": ephys.ProbeInsertion, + "alyx_fields": ["json"], + "uuid_name": "probe_insertion_uuid", + "ingestion_tables": [qc_ingest.ProbeInsertionQCIngest], + "real_tables": [ qc.ProbeInsertionExtendedQC.Field, qc.ProbeInsertionExtendedQC, - qc.ProbeInsertionQC - ] # in the order of delete_quick() - } + qc.ProbeInsertionQC, + ], # in the order of delete_quick() + }, } @@ -62,48 +63,62 @@ def delete_qc_entries(alyx_model_name): """ model_info = QC_MODELS_TO_UPDATE[alyx_model_name] - qc_keys = update_utils.get_deleted_keys(alyx_model_name) + \ - update_utils.get_updated_keys(alyx_model_name, fields=['qc', 'extended_qc']) - - logger.log(25, f'Deleting updated entries for {alyx_model_name} from alyxraw fields...') - (alyxraw.AlyxRaw.Field & - [dict(fname=f) for f in model_info['alyx_fields']] - & qc_keys).delete_quick() - - logger.log(25, f'Deleting updated qc and extended_qc for {alyx_model_name} from shadow tables...') - uuids_dict_list = [{model_info['uuid_name']: k['uuid']} for k in qc_keys] - for ingestion_table in model_info['ingestion_tables']: + qc_keys = update_utils.get_deleted_keys( + alyx_model_name + ) + update_utils.get_updated_keys(alyx_model_name, fields=["qc", "extended_qc"]) + + logger.log( + 25, f"Deleting updated entries for {alyx_model_name} from alyxraw fields..." + ) + ( + alyxraw.AlyxRaw.Field + & [dict(fname=f) for f in model_info["alyx_fields"]] + & qc_keys + ).delete_quick() + + logger.log( + 25, + f"Deleting updated qc and extended_qc for {alyx_model_name} from shadow tables...", + ) + uuids_dict_list = [{model_info["uuid_name"]: k["uuid"]} for k in qc_keys] + for ingestion_table in model_info["ingestion_tables"]: (ingestion_table & uuids_dict_list).delete_quick() - logger.log(25, f'Deleting updated qc and extended_qc for {alyx_model_name} from real tables...') - q_real = model_info['ref_table'] & uuids_dict_list - for real_table in model_info['real_tables']: + logger.log( + 25, + f"Deleting updated qc and extended_qc for {alyx_model_name} from real tables...", + ) + q_real = model_info["ref_table"] & uuids_dict_list + for real_table in model_info["real_tables"]: (real_table & q_real).delete_quick() def main(): alyx_model_names = list(QC_MODELS_TO_UPDATE.keys()) - alyx_models = [v['alyx_model'] for v in QC_MODELS_TO_UPDATE.values()] + alyx_models = [v["alyx_model"] for v in QC_MODELS_TO_UPDATE.values()] - logger.log(25, 'QC - Ingesting into UpdateAlyxRaw...') + logger.log(25, "QC - Ingesting into UpdateAlyxRaw...") ingest_alyx_raw_postgres.insert_to_update_alyxraw_postgres( alyx_models=alyx_models, - delete_UpdateAlyxRaw_first=True, skip_existing_alyxraw=True) + delete_UpdateAlyxRaw_first=True, + skip_existing_alyxraw=True, + ) - logger.log(25, 'QC - Deleting updated/deleted entries...') + logger.log(25, "QC - Deleting updated/deleted entries...") for alyx_model_name in alyx_model_names: delete_qc_entries(alyx_model_name) - logger.log(25, 'QC - Ingesting from Postgres Alyx to AlyxRaw...') + logger.log(25, "QC - Ingesting from Postgres Alyx to AlyxRaw...") for alyx_model in alyx_models: - ingest_alyx_raw_postgres.insert_alyx_entries_model(alyx_model, - skip_existing_alyxraw=False) + ingest_alyx_raw_postgres.insert_alyx_entries_model( + alyx_model, skip_existing_alyxraw=False + ) - logger.log(25, 'QC - Calling the populate on the QC-ingestion table...') + logger.log(25, "QC - Calling the populate on the QC-ingestion table...") for alyx_model_name in alyx_model_names: - for ingestion_table in QC_MODELS_TO_UPDATE[alyx_model_name]['ingestion_tables']: + for ingestion_table in QC_MODELS_TO_UPDATE[alyx_model_name]["ingestion_tables"]: ingestion_table.populate(display_progress=True, suppress_errors=True) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/ibl_pipeline/process/update_utils.py b/ibl_pipeline/process/update_utils.py index 09a8b1d5..9585774b 100644 --- a/ibl_pipeline/process/update_utils.py +++ b/ibl_pipeline/process/update_utils.py @@ -1,5 +1,6 @@ import datajoint as dj from tqdm import tqdm + from ibl_pipeline.ingest import alyxraw @@ -13,8 +14,9 @@ def get_created_keys(model): Returns: created_pks [list]: list of created uuids, existing in update_ibl_alyxraw but not ibl_alyxraw """ - return ((alyxraw.UpdateAlyxRaw - alyxraw.AlyxRaw.proj()) & - f'model="{model}"').fetch('KEY') + return ( + (alyxraw.UpdateAlyxRaw - alyxraw.AlyxRaw.proj()) & f'model="{model}"' + ).fetch("KEY") def get_deleted_keys(model): @@ -27,8 +29,9 @@ def get_deleted_keys(model): Returns: deleted_pks [list]: list of deleted uuids, existing in the current ibl_alyxraw but not update_ibl_alyxraw """ - return ((alyxraw.AlyxRaw - alyxraw.UpdateAlyxRaw.proj()) & - f'model="{model}"').fetch('KEY') + return ( + (alyxraw.AlyxRaw - alyxraw.UpdateAlyxRaw.proj()) & f'model="{model}"' + ).fetch("KEY") def get_updated_keys(model, fields=None): @@ -43,13 +46,21 @@ def get_updated_keys(model, fields=None): modified_pks [list]: list of deleted uuids, existing in the AlyxRaw but not UpdateAlyxRaw """ fields_original = alyxraw.AlyxRaw.Field & (alyxraw.AlyxRaw & f'model="{model}"') - fields_update = alyxraw.UpdateAlyxRaw.Field & (alyxraw.UpdateAlyxRaw & f'model="{model}"') - - fields_restr = [{'fname': f} for f in fields] if fields else {} - - return (alyxraw.AlyxRaw & - (fields_update.proj(fvalue_new='fvalue') * fields_original & - 'fvalue_new != fvalue' & 'fname not in ("json")' & fields_restr)).fetch('KEY') + fields_update = alyxraw.UpdateAlyxRaw.Field & ( + alyxraw.UpdateAlyxRaw & f'model="{model}"' + ) + + fields_restr = [{"fname": f} for f in fields] if fields else {} + + return ( + alyxraw.AlyxRaw + & ( + fields_update.proj(fvalue_new="fvalue") * fields_original + & "fvalue_new != fvalue" + & 'fname not in ("json")' + & fields_restr + ) + ).fetch("KEY") def delete_from_alyxraw(keys): diff --git a/ibl_pipeline/public.py b/ibl_pipeline/public.py index 26781ad0..eb8015bf 100755 --- a/ibl_pipeline/public.py +++ b/ibl_pipeline/public.py @@ -1,13 +1,14 @@ -import datajoint as dj -import pandas as pd import datetime import re -from tqdm import tqdm from uuid import UUID +import datajoint as dj +import pandas as pd +from tqdm import tqdm + from ibl_pipeline.ingest import alyxraw -schema = dj.schema('ibl_public') +schema = dj.schema("ibl_public") @schema @@ -41,11 +42,13 @@ class PublicSubjectUuid(dj.Computed): def make(self, key): - subject = (alyxraw.AlyxRaw & 'model="subjects.subject"') & \ - (alyxraw.AlyxRaw.Field & 'fname="nickname"' & - 'fvalue="{}"'.format(key['subject_nickname'])) + subject = (alyxraw.AlyxRaw & 'model="subjects.subject"') & ( + alyxraw.AlyxRaw.Field + & 'fname="nickname"' + & 'fvalue="{}"'.format(key["subject_nickname"]) + ) - self.insert1(dict(**key, subject_uuid=subject.fetch1('uuid'))) + self.insert1(dict(**key, subject_uuid=subject.fetch1("uuid"))) @schema @@ -67,86 +70,94 @@ class PublicProbeInsertion(dj.Manual): def import_public_subjects(): # TODO : where is this file at?? - subject_lists = pd.read_csv('/data/list_of_subjects_behavior_paper.csv') + subject_lists = pd.read_csv("/data/list_of_subjects_behavior_paper.csv") lab_mapping = { - 'Angelaki': 'angelakilab', - 'angelakilab': 'angelakilab', - 'Witten': 'wittenlab', - 'wittenlab': 'wittenlab', - 'Mainen': 'mainenlab', - 'mainenlab': 'mainenlab', - 'Dan': 'danlab', - 'danlab': 'danlab', - 'Mrsic-Flogel': 'mrsicflogellab', - 'mrsicflogellab': 'mrsicflogellab', - 'Cortexlab': 'cortexlab', - 'cortexlab': 'cortexlab', - 'Churchland': 'churchlandlab', - 'churchlandlab': 'churchlandlab', - 'Zador': 'zadorlab', - 'zadorlab': 'zadorlab', - 'hoferlab': 'hoferlab' + "Angelaki": "angelakilab", + "angelakilab": "angelakilab", + "Witten": "wittenlab", + "wittenlab": "wittenlab", + "Mainen": "mainenlab", + "mainenlab": "mainenlab", + "Dan": "danlab", + "danlab": "danlab", + "Mrsic-Flogel": "mrsicflogellab", + "mrsicflogellab": "mrsicflogellab", + "Cortexlab": "cortexlab", + "cortexlab": "cortexlab", + "Churchland": "churchlandlab", + "churchlandlab": "churchlandlab", + "Zador": "zadorlab", + "zadorlab": "zadorlab", + "hoferlab": "hoferlab", } subjs = [] for i, subject in subject_lists.dropna().iterrows(): - subj = dict(lab_name=lab_mapping[subject['Lab'].replace(' ', '')], - subject_nickname=subject['Mouse ID']) + subj = dict( + lab_name=lab_mapping[subject["Lab"].replace(" ", "")], + subject_nickname=subject["Mouse ID"], + ) - if 'until' in subject['Sessions']: - text = re.search('til (\d+)/(\d+)/(\d+)', subject['Sessions']) + if "until" in subject["Sessions"]: + text = re.search("til (\d+)/(\d+)/(\d+)", subject["Sessions"]) year, month, date = text.group(3), text.group(2), text.group(1) if len(year) == 2: - year = '20' + year - subj.update(session_start_date=datetime.date(2018, 6, 1), - session_end_date=datetime.date(int(year), - int(month), - int(date))) - - elif 'Start -' in subject['Sessions']: - text = re.search('(\d+)/(\d+)/(\d+)', subject['Sessions']) + year = "20" + year + subj.update( + session_start_date=datetime.date(2018, 6, 1), + session_end_date=datetime.date(int(year), int(month), int(date)), + ) + + elif "Start -" in subject["Sessions"]: + text = re.search("(\d+)/(\d+)/(\d+)", subject["Sessions"]) year, month, date = text.group(3), text.group(2), text.group(1) if len(year) == 2: - year = '20' + year1 - subj.update(session_start_date=datetime.date(2018, 6, 1), - session_end_date=datetime.date( - int(year), int(month), int(date))) - - elif '-' in subject['Sessions']: - text = re.search('(\d+)/(\d+)/(\d+).* (\d+)/(\d+)/(\d+)', - subject['Sessions']) - year1, month1, date1, year2, month2, date2 = \ - text.group(3), text.group(2), text.group(1), \ - text.group(6), text.group(5), text.group(4) + year = "20" + year1 + subj.update( + session_start_date=datetime.date(2018, 6, 1), + session_end_date=datetime.date(int(year), int(month), int(date)), + ) + + elif "-" in subject["Sessions"]: + text = re.search( + "(\d+)/(\d+)/(\d+).* (\d+)/(\d+)/(\d+)", subject["Sessions"] + ) + year1, month1, date1, year2, month2, date2 = ( + text.group(3), + text.group(2), + text.group(1), + text.group(6), + text.group(5), + text.group(4), + ) if len(year1) == 2: - year1 = '20' + year1 + year1 = "20" + year1 if len(year2) == 2: - year2 = '20' + year2 - subj.update(session_start_date=datetime.date( - int(year1), int(month1), int(date1)), - session_end_date=datetime.date( - int(year2), int(month2), int(date2))) + year2 = "20" + year2 + subj.update( + session_start_date=datetime.date(int(year1), int(month1), int(date1)), + session_end_date=datetime.date(int(year2), int(month2), int(date2)), + ) else: - subj.update(session_start_date=datetime.date(2018, 6, 1), - session_end_date=datetime.datetime.now().date()) + subj.update( + session_start_date=datetime.date(2018, 6, 1), + session_end_date=datetime.datetime.now().date(), + ) subjs.append(dict(**subj)) PublicSubject.insert(subjs, skip_duplicates=True) PublicSubjectUuid.populate(display_progress=True) - def import_public_sessions(): # TODO : where is this file at?? - sessions = pd.read_csv('/data/sessions.csv') + sessions = pd.read_csv("/data/sessions.csv") - session_uuids = sessions['0'].values + session_uuids = sessions["0"].values - PublicSession.insert( - [{'session_uuid': uuid} for uuid in tqdm(session_uuids)] - ) + PublicSession.insert([{"session_uuid": uuid} for uuid in tqdm(session_uuids)]) if __name__ == "__main__": diff --git a/ibl_pipeline/qc.py b/ibl_pipeline/qc.py index 7636be5d..28104abc 100644 --- a/ibl_pipeline/qc.py +++ b/ibl_pipeline/qc.py @@ -1,17 +1,16 @@ import datajoint as dj -from ibl_pipeline.utils import str_to_dict -from ibl_pipeline import acquisition, ephys -from ibl_pipeline import mode, one +from ibl_pipeline import acquisition, ephys, mode, one +from ibl_pipeline.utils import str_to_dict -if mode == 'update': - schema = dj.schema('ibl_qc') +if mode == "update": + schema = dj.schema("ibl_qc") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_qc') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_qc") -if mode != 'public': - qc_ingest = dj.create_virtual_module('qc_ingest', 'ibl_ingest_qc') - alyxraw = dj.create_virtual_module('alyxraw', 'ibl_alyxraw') +if mode != "public": + qc_ingest = dj.create_virtual_module("qc_ingest", "ibl_ingest_qc") + alyxraw = dj.create_virtual_module("alyxraw", "ibl_alyxraw") @schema @@ -24,11 +23,11 @@ class QCChoice(dj.Lookup): """ contents = [ - (0, 'NOT_SET'), - (10, 'PASS'), - (30, 'WARNING'), - (40, 'FAIL'), - (50, 'CRITICAL'), + (0, "NOT_SET"), + (10, "PASS"), + (30, "WARNING"), + (40, "FAIL"), + (50, "CRITICAL"), ] @@ -37,7 +36,7 @@ class QCLevel(dj.Lookup): definition = """ qc_level : varchar(32) """ - contents = zip(['session', 'probe_insertion']) + contents = zip(["session", "probe_insertion"]) @schema @@ -51,15 +50,15 @@ class QCType(dj.Lookup): """ contents = [ - ['experimenter', 'session', 'Manual labeling of a session by user'], - ['task', 'session', 'Quality check when running the task'], - ['behavior', 'session', 'Behavior criteria'], - ['videoBody', 'session', 'Quality check for video recording of body camera'], - ['videoLeft', 'session', 'Quality check for video recording of left camera'], - ['videoRight', 'session', 'Quality check for video recording of right camera'], - ['dlc', 'session', 'Deep lab cut processing on behavioral video data'], - ['tracing_exists', 'probe_insertion', 'Histology tracing'], - ['alignment_resolved', 'probe_insertion', 'Ephys alignment with histology'] + ["experimenter", "session", "Manual labeling of a session by user"], + ["task", "session", "Quality check when running the task"], + ["behavior", "session", "Behavior criteria"], + ["videoBody", "session", "Quality check for video recording of body camera"], + ["videoLeft", "session", "Quality check for video recording of left camera"], + ["videoRight", "session", "Quality check for video recording of right camera"], + ["dlc", "session", "Deep lab cut processing on behavioral video data"], + ["tracing_exists", "probe_insertion", "Histology tracing"], + ["alignment_resolved", "probe_insertion", "Ephys alignment with histology"], ] @@ -140,12 +139,13 @@ def validate_resolved(cls, deep=False): (list): list of either the problematic key (deep=False) or problematic key with the debugging message. """ resolved = one.alyx.rest( - 'insertions', 'list', - django='json__extended_qc__alignment_resolved,True') + "insertions", "list", django="json__extended_qc__alignment_resolved,True" + ) - uuids_alyx = [r['id'] for r in resolved] - uuids = (ephys.ProbeInsertion & - (cls & 'qc_type="alignment_resolved"')).fetch('probe_insertion_uuid') + uuids_alyx = [r["id"] for r in resolved] + uuids = (ephys.ProbeInsertion & (cls & 'qc_type="alignment_resolved"')).fetch( + "probe_insertion_uuid" + ) uuids_dj = [str(uuid) for uuid in uuids] missing_uuids = list(set(uuids_alyx) - set(uuids_dj)) @@ -153,21 +153,29 @@ def validate_resolved(cls, deep=False): if deep: messages = [] for uuid in missing_uuids: - if not (alyxraw.AlyxRaw.Field & {'uuid': uuid} & 'fname="json"'): - msg = 'No json entry in alyxraw' + if not (alyxraw.AlyxRaw.Field & {"uuid": uuid} & 'fname="json"'): + msg = "No json entry in alyxraw" else: - json = str_to_dict((alyxraw.AlyxRaw.Field & {'uuid': uuid} & 'fname="json"').fetch1('fvalue')) - if 'extended_qc' in json and \ - 'alignment_resolved' in json['extended_qc'] and \ - json['extended_qc']['alignment_resolved']: - - if ephys.ProbeInsertion & {'probe_insertion_uuid': uuid}: - if qc_ingest.ProbeInsertionQCIngest & {'probe_insertion_uuid': uuid}: - msg = 'Entries exist in both ProbeInsertion and ProbeInsertionQCIngest' + json = str_to_dict( + ( + alyxraw.AlyxRaw.Field & {"uuid": uuid} & 'fname="json"' + ).fetch1("fvalue") + ) + if ( + "extended_qc" in json + and "alignment_resolved" in json["extended_qc"] + and json["extended_qc"]["alignment_resolved"] + ): + + if ephys.ProbeInsertion & {"probe_insertion_uuid": uuid}: + if qc_ingest.ProbeInsertionQCIngest & { + "probe_insertion_uuid": uuid + }: + msg = "Entries exist in both ProbeInsertion and ProbeInsertionQCIngest" else: - msg = 'Probe ingest did not run or alyx dump outdated.' + msg = "Probe ingest did not run or alyx dump outdated." else: - msg = 'Missing entry in ephys.ProbeInsertion.' + msg = "Missing entry in ephys.ProbeInsertion." messages.append((uuid, msg)) return messages else: diff --git a/ibl_pipeline/reference.py b/ibl_pipeline/reference.py index 4aef6c05..c45e047b 100755 --- a/ibl_pipeline/reference.py +++ b/ibl_pipeline/reference.py @@ -1,12 +1,12 @@ import datajoint as dj -from ibl_pipeline.ingest import reference -from ibl_pipeline import mode +from ibl_pipeline import mode +from ibl_pipeline.ingest import reference -if mode == 'update': - schema = dj.schema('ibl_reference') +if mode == "update": + schema = dj.schema("ibl_reference") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_reference') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_reference") @schema @@ -106,12 +106,12 @@ class Severity(dj.Lookup): severity_desc: varchar(32) # severity desc """ contents = ( - (0, ''), - (1, 'Sub-threshold'), - (2, 'Mild'), - (3, 'Moderate'), - (4, 'Severe'), - (5, 'Non-recovery'), + (0, ""), + (1, "Sub-threshold"), + (2, "Mild"), + (3, "Moderate"), + (4, "Severe"), + (5, "Non-recovery"), ) @@ -130,7 +130,7 @@ class Ontology(dj.Lookup): definition = """ ontology : varchar(32) """ - contents = zip(['CCF 2017']) + contents = zip(["CCF 2017"]) @schema @@ -154,14 +154,11 @@ class ParentRegion(dj.Imported): --- -> BrainRegion.proj(parent='acronym') """ - key_source = BrainRegion & \ - (reference.BrainRegion & 'parent is not NULL').proj() + key_source = BrainRegion & (reference.BrainRegion & "parent is not NULL").proj() def make(self, key): - parent_pk = (reference.BrainRegion & key).fetch1('parent') - acronym = (BrainRegion & dict(brain_region_pk=parent_pk)).fetch1( - 'acronym') + parent_pk = (reference.BrainRegion & key).fetch1("parent") + acronym = (BrainRegion & dict(brain_region_pk=parent_pk)).fetch1("acronym") - self.insert1( - dict(**key, parent=acronym)) + self.insert1(dict(**key, parent=acronym)) diff --git a/ibl_pipeline/subject.py b/ibl_pipeline/subject.py index c98a83c5..238bdcfc 100755 --- a/ibl_pipeline/subject.py +++ b/ibl_pipeline/subject.py @@ -1,6 +1,5 @@ -from ibl_pipeline.subject_shared import * from ibl_pipeline import mode +from ibl_pipeline.subject_shared import * - -if mode != 'public': +if mode != "public": from ibl_pipeline.subject_internal import * diff --git a/ibl_pipeline/subject_internal.py b/ibl_pipeline/subject_internal.py index 5c304ba9..36da9e63 100644 --- a/ibl_pipeline/subject_internal.py +++ b/ibl_pipeline/subject_internal.py @@ -1,13 +1,12 @@ import datajoint as dj -from ibl_pipeline.subject_shared import Subject from ibl_pipeline import mode +from ibl_pipeline.subject_shared import Subject - -if mode == 'update': - schema = dj.schema('ibl_subject') +if mode == "update": + schema = dj.schema("ibl_subject") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_subject') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_subject") @schema diff --git a/ibl_pipeline/subject_shared.py b/ibl_pipeline/subject_shared.py index 5d633ac6..9c19b585 100644 --- a/ibl_pipeline/subject_shared.py +++ b/ibl_pipeline/subject_shared.py @@ -1,12 +1,11 @@ import datajoint as dj -from ibl_pipeline import reference -from ibl_pipeline import mode +from ibl_pipeline import mode, reference -if mode == 'update': - schema = dj.schema('ibl_subject') +if mode == "update": + schema = dj.schema("ibl_subject") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_subject') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_subject") @schema diff --git a/ibl_pipeline/tests/tear_down_utils.py b/ibl_pipeline/tests/tear_down_utils.py index 12acb5b3..f62303d6 100644 --- a/ibl_pipeline/tests/tear_down_utils.py +++ b/ibl_pipeline/tests/tear_down_utils.py @@ -1,53 +1,58 @@ -''' +""" This module contains functions to help tear down the testing environment -''' +""" import datajoint as dj - # alyxraw schemas -alyxraw = dj.create_virtual_module('alyxraw', 'test_ibl_alyxraw') -alyxraw_update = dj.create_virtual_module('alyxraw', 'test_update_ibl_alyxraw') +alyxraw = dj.create_virtual_module("alyxraw", "test_ibl_alyxraw") +alyxraw_update = dj.create_virtual_module("alyxraw", "test_update_ibl_alyxraw") # shadow schemas -reference_shadow = dj.create_virtual_module('reference_shadow', 'test_ibl_ingest_reference') -subject_shadow = dj.create_virtual_module('subject_shadow', 'test_ibl_ingest_subject') -action_shadow = dj.create_virtual_module('action_shadow', 'test_ibl_ingest_action') -acquisition_shadow = dj.create_virtual_module('acquisition_shadow', 'test_ibl_ingest_acquisition') -data_shadow = dj.create_virtual_module('data_shadow', 'test_ibl_ingest_data') -ephys_shadow = dj.create_virtual_module('ephys_shadow', 'test_ibl_ingest_ephys') -histology_shadow = dj.create_virtual_module('histology_shadow', 'test_ibl_ingest_histology') +reference_shadow = dj.create_virtual_module( + "reference_shadow", "test_ibl_ingest_reference" +) +subject_shadow = dj.create_virtual_module("subject_shadow", "test_ibl_ingest_subject") +action_shadow = dj.create_virtual_module("action_shadow", "test_ibl_ingest_action") +acquisition_shadow = dj.create_virtual_module( + "acquisition_shadow", "test_ibl_ingest_acquisition" +) +data_shadow = dj.create_virtual_module("data_shadow", "test_ibl_ingest_data") +ephys_shadow = dj.create_virtual_module("ephys_shadow", "test_ibl_ingest_ephys") +histology_shadow = dj.create_virtual_module( + "histology_shadow", "test_ibl_ingest_histology" +) # real schemas -reference = dj.create_virtual_module('reference', 'test_ibl_reference') -subject = dj.create_virtual_module('subject', 'test_ibl_subject') -action = dj.create_virtual_module('action', 'test_ibl_action') -acquisition = dj.create_virtual_module('acquisition', 'test_ibl_acquisition') -data = dj.create_virtual_module('data', 'test_ibl_data') -behavior = dj.create_virtual_module('behavior', 'test_ibl_behavior') -ephys = dj.create_virtual_module('ephys', 'test_ibl_ephys') -histology = dj.create_virtual_module('histology', 'test_ibl_histology') -qc = dj.create_virtual_module('qc', 'test_ibl_qc') -wheel = dj.create_virtual_module('wheel', 'test_group_shared_wheel') - -behavior_analyses = dj.create_virtual_module('behavior_analyses', 'test_ibl_analyses_behavior') -ephys_analyses = dj.create_virtual_module('ephys_analyses', 'test_ibl_analyses_ephys') - -behavior_plotting = dj.create_virtual_module('behavior_plotting', 'test_ibl_plotting_behavior') -ephys_plotting = dj.create_virtual_module('ephys_plotting', 'test_ibl_plotting_ephys') -histology_plotting = dj.create_virtual_module('histology_plotting', 'test_ibl_plotting_histology') - - -ALYX_RAW_TABLES = [ - alyxraw.AlyxRaw, - alyxraw.AlyxRaw.Field -] +reference = dj.create_virtual_module("reference", "test_ibl_reference") +subject = dj.create_virtual_module("subject", "test_ibl_subject") +action = dj.create_virtual_module("action", "test_ibl_action") +acquisition = dj.create_virtual_module("acquisition", "test_ibl_acquisition") +data = dj.create_virtual_module("data", "test_ibl_data") +behavior = dj.create_virtual_module("behavior", "test_ibl_behavior") +ephys = dj.create_virtual_module("ephys", "test_ibl_ephys") +histology = dj.create_virtual_module("histology", "test_ibl_histology") +qc = dj.create_virtual_module("qc", "test_ibl_qc") +wheel = dj.create_virtual_module("wheel", "test_group_shared_wheel") +behavior_analyses = dj.create_virtual_module( + "behavior_analyses", "test_ibl_analyses_behavior" +) +ephys_analyses = dj.create_virtual_module("ephys_analyses", "test_ibl_analyses_ephys") -ALYX_RAW_UPDATE_TABLES = [ - alyxraw_update.AlyxRaw, - alyxraw_update.AlyxRaw.Field -] +behavior_plotting = dj.create_virtual_module( + "behavior_plotting", "test_ibl_plotting_behavior" +) +ephys_plotting = dj.create_virtual_module("ephys_plotting", "test_ibl_plotting_ephys") +histology_plotting = dj.create_virtual_module( + "histology_plotting", "test_ibl_plotting_histology" +) + + +ALYX_RAW_TABLES = [alyxraw.AlyxRaw, alyxraw.AlyxRaw.Field] + + +ALYX_RAW_UPDATE_TABLES = [alyxraw_update.AlyxRaw, alyxraw_update.AlyxRaw.Field] ALYX_SHADOW_TABLES = [ @@ -93,7 +98,7 @@ data_shadow.DataRepository, data_shadow.DataSetType, data_shadow.DataSet, - data_shadow.FileRecord + data_shadow.FileRecord, ] @@ -174,7 +179,7 @@ data.ProjectRepository, data.DataSetType, data.DataSet, - data.FileRecord + data.FileRecord, ] @@ -209,19 +214,12 @@ behavior_plotting.CumulativeSummary.ContrastHeatmap, behavior_plotting.CumulativeSummary.FitPars, behavior_plotting.DailyLabSummary, - behavior_plotting.DailyLabSummary.SubjectSummary + behavior_plotting.DailyLabSummary.SubjectSummary, ] -WHEEL_TABLES = [ - behavior.CompleteWheelSession, - wheel.WheelMoveSet, - wheel.MovementTimes -] +WHEEL_TABLES = [behavior.CompleteWheelSession, wheel.WheelMoveSet, wheel.MovementTimes] -EPHYS_SHADOW_TABLES = [ - ephys_shadow.ProbeModel, - ephys_shadow.ProbeInsertion -] +EPHYS_SHADOW_TABLES = [ephys_shadow.ProbeModel, ephys_shadow.ProbeInsertion] EPHYS_TABLES = [ @@ -239,14 +237,14 @@ ephys_plotting.SpikeAmpTime, ephys_plotting.AutoCorrelogram, ephys_plotting.Waveform, - ephys_plotting.DepthRasterExampleTrial + ephys_plotting.DepthRasterExampleTrial, ] HISTOLOGY_SHADOW_TABLES = [ histology_shadow.Provenance, histology_shadow.ProbeTrajectoryTemp, - histology_shadow.ChannelBrainLocationTemp + histology_shadow.ChannelBrainLocationTemp, ] @@ -259,7 +257,7 @@ histology.ChannelBrainLocation, histology.ClusterBrainRegion, histology_plotting.SubjectSpinningBrain, - histology_plotting.ProbeTrajectoryCoronal + histology_plotting.ProbeTrajectoryCoronal, ] QC_TABLES = [ @@ -275,19 +273,30 @@ def delete_tables(tables): for t in tables[::-1]: - print(f'Deleting table {t.__name__}...') + print(f"Deleting table {t.__name__}...") t.delete_quick() def delete_real_all(): - """Delete real tables in graphical order - """ - tables = ALYX_TABLES + BEHAVIOR_TABLES + WHEEL_TABLES + EPHYS_TABLES + HISTOLOGY_TABLES + QC_TABLES + """Delete real tables in graphical order""" + tables = ( + ALYX_TABLES + + BEHAVIOR_TABLES + + WHEEL_TABLES + + EPHYS_TABLES + + HISTOLOGY_TABLES + + QC_TABLES + ) delete_tables(tables) def delete_shadow(): - tables = ALYX_SHADOW_TABLES + ALYX_SHADOW_MEMBERSHIP_TABLES + EPHYS_SHADOW_TABLES + HISTOLOGY_SHADOW_TABLES + tables = ( + ALYX_SHADOW_TABLES + + ALYX_SHADOW_MEMBERSHIP_TABLES + + EPHYS_SHADOW_TABLES + + HISTOLOGY_SHADOW_TABLES + ) delete_tables(tables) diff --git a/ibl_pipeline/update.py b/ibl_pipeline/update.py index 40a94909..3eb64888 100755 --- a/ibl_pipeline/update.py +++ b/ibl_pipeline/update.py @@ -1,9 +1,9 @@ -''' +""" schema for update records -''' +""" import datajoint as dj -schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_update') +schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_update") @schema diff --git a/ibl_pipeline/utils/__init__.py b/ibl_pipeline/utils/__init__.py index d3a954f2..5ceef274 100755 --- a/ibl_pipeline/utils/__init__.py +++ b/ibl_pipeline/utils/__init__.py @@ -1,5 +1,5 @@ -from uuid import UUID import json +from uuid import UUID def is_valid_uuid(uuid): @@ -10,12 +10,7 @@ def is_valid_uuid(uuid): return False -json_replace_map = { - "\'": "\"", - 'None': '\"None\"', - 'True': 'true', - 'False': 'false' -} +json_replace_map = {"'": '"', "None": '"None"', "True": "true", "False": "false"} def str_to_dict(string): diff --git a/ibl_pipeline/utils/atlas.py b/ibl_pipeline/utils/atlas.py index 5b55147c..8135912c 100755 --- a/ibl_pipeline/utils/atlas.py +++ b/ibl_pipeline/utils/atlas.py @@ -1,25 +1,28 @@ +import json -from ibl_pipeline import reference import datajoint as dj -import json +from ibl_pipeline import reference -class BrainAtlas: +class BrainAtlas: def __init__(self): self.name_lookup = dict() - for acronym, name in zip(*reference.BrainRegion.fetch( - 'acronym', 'brain_region_name')): + for acronym, name in zip( + *reference.BrainRegion.fetch("acronym", "brain_region_name") + ): self.name_lookup.update({acronym: name}) self.atlas_dict = dict() - for level in (dj.U('brain_region_level') & - reference.BrainRegion).fetch( - 'KEY', order_by='brain_region_level'): - for acronym, name in zip(*(reference.BrainRegion & level).fetch( - 'acronym', 'brain_region_name', - order_by='graph_order')): + for level in (dj.U("brain_region_level") & reference.BrainRegion).fetch( + "KEY", order_by="brain_region_level" + ): + for acronym, name in zip( + *(reference.BrainRegion & level).fetch( + "acronym", "brain_region_name", order_by="graph_order" + ) + ): if level == 0: self.atlas_dict.update({str((acronym, name)): dict()}) else: @@ -37,13 +40,13 @@ def add_region_to_dict(self, acronym, name): def get_parents(acronym): parent_list = [] while reference.ParentRegion & dict(acronym=acronym): - acronym = (reference.ParentRegion & - dict(acronym=acronym)).fetch1('parent') + acronym = (reference.ParentRegion & dict(acronym=acronym)).fetch1("parent") parent_list.append(acronym) return parent_list[::-1] + # TODO: change /data /tmp to use dj.config - def to_json(filename='/data/atlas.json'): + def to_json(filename="/data/atlas.json"): - with open('atlas.json', 'w') as json_file: + with open("atlas.json", "w") as json_file: json.dump(self.atlas_dict, json_file) diff --git a/ibl_pipeline/utils/delete_unused_external.py b/ibl_pipeline/utils/delete_unused_external.py index 86d3dc88..25a5a19a 100755 --- a/ibl_pipeline/utils/delete_unused_external.py +++ b/ibl_pipeline/utils/delete_unused_external.py @@ -1,22 +1,22 @@ -''' +""" Code for deleting "unused()" external files inside the ibl pipeline -''' +""" import datajoint as dj -from ibl_pipeline import ephys -from ibl_pipeline.analyses import ephys as ephys_analyses from ibl_plotting.plotting import ephys as ephys_plotting +from ibl_pipeline import ephys +from ibl_pipeline.analyses import ephys as ephys_analyses schemas = (ephys, ephys_analyses, ephys_plotting) -stores = list(dj.config['stores'].keys()) +stores = list(dj.config["stores"].keys()) def delete_external(): for schema in schemas: for store in stores: - print(f'Deleting {schema.__name__}: {store}') + print(f"Deleting {schema.__name__}: {store}") schema.schema.external[store].delete(delete_external_files=True) diff --git a/ibl_pipeline/utils/dependent_tables.py b/ibl_pipeline/utils/dependent_tables.py index 4df9f173..920a3109 100755 --- a/ibl_pipeline/utils/dependent_tables.py +++ b/ibl_pipeline/utils/dependent_tables.py @@ -1,17 +1,18 @@ +import inspect +import pdb +import re + import datajoint as dj + from ibl_pipeline import acquisition, behavior, ephys, histology from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.analyses import ephys as ephys_analyses +from ibl_pipeline.group_shared import wheel from ibl_pipeline.plotting import behavior as behavior_plotting from ibl_pipeline.plotting import ephys as ephys_plotting -from ibl_pipeline.group_shared import wheel -import inspect -import re -import pdb - -class Graph(): +class Graph: def __init__(self, table): self.table = table @@ -24,7 +25,7 @@ def get_virtual_module(full_table_name, context=None): if not context: context = inspect.currentframe().f_back.f_locals - schema_name = re.match('`(.*)`\.', full_table_name).group(1) + schema_name = re.match("`(.*)`\.", full_table_name).group(1) vmod = dj.create_virtual_module(schema_name, schema_name) context[vmod.__name__] = vmod return vmod.__name__ @@ -42,17 +43,14 @@ def get_table_list(self, virtual_only=False): t = dj.table.lookup_class_name(t_db, context, depth=3) if t: - table_list.append(dict(label='package', table=t, - full_table_name=t_db)) + table_list.append(dict(label="package", table=t, full_table_name=t_db)) else: vmod_name = Graph.get_virtual_module(t_db, context) - t = dj.table.lookup_class_name( - t_db, context) - table_list.append(dict(label='virtual', table=t, - full_table_name=t_db)) + t = dj.table.lookup_class_name(t_db, context) + table_list.append(dict(label="virtual", table=t, full_table_name=t_db)) context.pop(vmod_name) if virtual_only: - return [t for t in table_list if t['label'] == 'virtual'] + return [t for t in table_list if t["label"] == "virtual"] else: return table_list diff --git a/ibl_pipeline/utils/dj_alter_table.py b/ibl_pipeline/utils/dj_alter_table.py index 078d44e5..80627c53 100755 --- a/ibl_pipeline/utils/dj_alter_table.py +++ b/ibl_pipeline/utils/dj_alter_table.py @@ -12,7 +12,9 @@ """ -def add_column(table, name, dtype, default_value=None, use_keyword_default=False, comment=None): +def add_column( + table, name, dtype, default_value=None, use_keyword_default=False, comment=None +): """ A (hacky) convenience function to add a new column into an existing table. @@ -25,23 +27,27 @@ def add_column(table, name, dtype, default_value=None, use_keyword_default=False comment (str, optional): comment for the new column """ full_table_name = table.full_table_name - if default_value is None or default_value.strip().lower() == 'null': - query = 'ALTER TABLE {} ADD {} {}'.format(full_table_name, name, dtype) + if default_value is None or default_value.strip().lower() == "null": + query = "ALTER TABLE {} ADD {} {}".format(full_table_name, name, dtype) elif use_keyword_default: # if using MySQL keyword, don't parse the string - query = 'ALTER TABLE {} ADD {} {} NOT NULL DEFAULT {}'.format(full_table_name, name, dtype, default_value) + query = "ALTER TABLE {} ADD {} {} NOT NULL DEFAULT {}".format( + full_table_name, name, dtype, default_value + ) else: - query = 'ALTER TABLE {} ADD {} {} NOT NULL DEFAULT {}'.format(full_table_name, name, dtype, repr(default_value)) + query = "ALTER TABLE {} ADD {} {} NOT NULL DEFAULT {}".format( + full_table_name, name, dtype, repr(default_value) + ) if comment is not None: query += ' COMMENT "{}"'.format(comment) print(query) table.connection.query(query) - print('Be sure to add following entry to your table definition') - definition = '{}={}: {}'.format(name, repr(default_value), dtype) + print("Be sure to add following entry to your table definition") + definition = "{}={}: {}".format(name, repr(default_value), dtype) if comment is not None: - definition += ' # {}'.format(comment) + definition += " # {}".format(comment) print(definition) table.__class__._heading = None @@ -59,20 +65,23 @@ def alter_column(table, name, dtype, default_value=None, comment=None): comment (str, optional): (new) comment for the new column """ full_table_name = table.full_table_name - if default_value is None or default_value.strip().lower() == 'null': - query = 'ALTER TABLE {} MODIFY {} {}'.format(full_table_name, name, dtype) + if default_value is None or default_value.strip().lower() == "null": + query = "ALTER TABLE {} MODIFY {} {}".format(full_table_name, name, dtype) else: - query = 'ALTER TABLE {} MODIFY {} {} NOT NULL DEFAULT {}'.format(full_table_name, name, dtype, repr(default_value)) + query = "ALTER TABLE {} MODIFY {} {} NOT NULL DEFAULT {}".format( + full_table_name, name, dtype, repr(default_value) + ) if comment is not None: query += ' COMMENT "{}"'.format(comment) table.connection.query(query) - print('Be sure to alter the column definition as follows') - definition = '{}={}: {}'.format(name, repr(default_value), dtype) + print("Be sure to alter the column definition as follows") + definition = "{}={}: {}".format(name, repr(default_value), dtype) if comment is not None: - definition += ' # {}'.format(comment) + definition += " # {}".format(comment) print(definition) table.__class__._heading = None + def drop_column(table, name): """ Convenience function to drop specified column with name from the table. @@ -84,16 +93,18 @@ def drop_column(table, name): name (str): name of the attribute to be dropped. Cannot be a primary key attribute. """ from datajoint.utils import user_choice + if name in table.primary_key: - raise ValueError('You cannot drop a primary key attribute') + raise ValueError("You cannot drop a primary key attribute") if name not in table.heading.attributes: - raise AttributeError('column {} not found in the table'.format(name)) - choice = user_choice('You are about to drop the column "{}". Proceed?'.format(name), - default='no') - if choice == 'yes': - query = 'ALTER TABLE {} DROP COLUMN {}'.format(table.full_table_name, name) + raise AttributeError("column {} not found in the table".format(name)) + choice = user_choice( + 'You are about to drop the column "{}". Proceed?'.format(name), default="no" + ) + if choice == "yes": + query = "ALTER TABLE {} DROP COLUMN {}".format(table.full_table_name, name) table.connection.query(query) table.__class__._heading = None print('Dropeed column "{}"'.format(name)) else: - print('Aborting column drop') + print("Aborting column drop") diff --git a/ibl_pipeline/utils/dj_compare_table.py b/ibl_pipeline/utils/dj_compare_table.py index e12054a6..acbbbe00 100755 --- a/ibl_pipeline/utils/dj_compare_table.py +++ b/ibl_pipeline/utils/dj_compare_table.py @@ -1,14 +1,15 @@ """ functions to compare contents in shadow tables and real tables. """ -import datajoint as dj -from ibl_pipeline import reference, subject, acquisition -from ibl_pipeline import update from uuid import UUID +import datajoint as dj + +from ibl_pipeline import acquisition, reference, subject, update + -def show(tablepairs, comment=''): - print('# {} table contents'.format(comment)) +def show(tablepairs, comment=""): + print("# {} table contents".format(comment)) for p in tablepairs: print(p) for t in tablepairs[p]: @@ -18,24 +19,21 @@ def show(tablepairs, comment=''): def push(tablenames, tablepairs): try: - print('# pushing data') + print("# pushing data") for tname in tablenames: source_tbl, dest_tbl = tablepairs[tname] dest_tbl.insert(source_tbl() - dest_tbl().proj()) except Exception as e: - print('# push error: {e}'.format(e=e)) + print("# push error: {e}".format(e=e)) def get_user(key): if len(acquisition.SessionUser & key) == 1: - user = (acquisition.SessionUser & key).fetch1( - 'user_name') + user = (acquisition.SessionUser & key).fetch1("user_name") elif len(subject.SubjectUser & key) == 1: - user = (subject.SubjectUser & key).fetch1( - 'responsible_user') + user = (subject.SubjectUser & key).fetch1("responsible_user") elif len(reference.LabMember & key) == 1: - user = (reference.LabMember & key).fetch1( - 'user_name') + user = (reference.LabMember & key).fetch1("user_name") else: user = None return user @@ -49,76 +47,75 @@ def diff(tablenames, tablepairs): shadow, real = tablepairs[t] # only detect deleted entries in the shadow table - for deleted_key in (real - shadow.proj(*real.primary_key)).fetch('KEY'): + for deleted_key in (real - shadow.proj(*real.primary_key)).fetch("KEY"): deleted_entry = (real & deleted_key).fetch1() deleted_record = dict( - table=real.__module__+'.'+real.__name__, + table=real.__module__ + "." + real.__name__, pk_hash=UUID(dj.hash.key_hash(deleted_key)), - original_ts=deleted_entry[[key for key in deleted_entry.keys() if '_ts' in key][0]], + original_ts=deleted_entry[ + [key for key in deleted_entry.keys() if "_ts" in key][0] + ], pk_dict=deleted_key, - deletion_narrative='{} only in {} - record deleted?'.format( - deleted_key, real), + deletion_narrative="{} only in {} - record deleted?".format( + deleted_key, real + ), ) user = get_user(deleted_key) if user: - email = \ - (reference.LabMember & - 'user_name="{}"'.format(user)).fetch1( - 'email' - ) - deleted_record.update( - responsible_user=user, - user_email=email + email = (reference.LabMember & 'user_name="{}"'.format(user)).fetch1( + "email" ) + deleted_record.update(responsible_user=user, user_email=email) update.DeletionRecord.insert1(deleted_record, skip_duplicates=True) ndels += 1 # detect updates in common records of shadow and real tables - common_records = (real.proj() & shadow.proj(*real.primary_key)) - kstr = ', '.join(real.primary_key) - shadow_records = (shadow & common_records).fetch( - order_by=kstr, as_dict=True) - real_records = (real & common_records.proj()).fetch( - order_by=kstr, as_dict=True) - real_keys = (real & common_records.proj()).fetch('KEY', order_by=kstr) + common_records = real.proj() & shadow.proj(*real.primary_key) + kstr = ", ".join(real.primary_key) + shadow_records = (shadow & common_records).fetch(order_by=kstr, as_dict=True) + real_records = (real & common_records.proj()).fetch(order_by=kstr, as_dict=True) + real_keys = (real & common_records.proj()).fetch("KEY", order_by=kstr) - for shadow_record, real_record, pk in \ - zip(shadow_records, real_records, real_keys): + for shadow_record, real_record, pk in zip( + shadow_records, real_records, real_keys + ): for attr in shadow_record: shadow_value = shadow_record[attr] real_value = real_record[attr] - if shadow_value != real_value and \ - (isinstance(shadow_value, str) and - '_ts' not in shadow_value): + if shadow_value != real_value and ( + isinstance(shadow_value, str) and "_ts" not in shadow_value + ): update_record = dict( - table=real.__module__+'.'+real.__name__, + table=real.__module__ + "." + real.__name__, attribute=attr, pk_hash=UUID(dj.hash.key_hash(pk)), - original_ts=real_record[[key for key in real_record.keys() if '_ts' in key][0]], - update_ts=shadow_record[[key for key in shadow_record.keys() if '_ts' in key][0]], + original_ts=real_record[ + [key for key in real_record.keys() if "_ts" in key][0] + ], + update_ts=shadow_record[ + [key for key in shadow_record.keys() if "_ts" in key][0] + ], pk_dict=pk, original_value=real_value, updated_value=shadow_value, - update_narrative='{t}.{a}: {s} != {d}'.format( - t=t, a=attr, s=shadow_value, d=real_value) + update_narrative="{t}.{a}: {s} != {d}".format( + t=t, a=attr, s=shadow_value, d=real_value + ), ) user = get_user(pk) if user: - update_record.update( - responsible_user=user, - user_email=email - ) + update_record.update(responsible_user=user, user_email=email) update.UpdateRecord.insert1(update_record, skip_duplicates=True) ndiffs += 1 - print('# {} total deleted records in table {}.'.format(ndels, t)) - print('# {} total differences in table {}.'.format(ndiffs, t)) + print("# {} total deleted records in table {}.".format(ndels, t)) + print("# {} total differences in table {}.".format(ndiffs, t)) def drop(schemas): diff --git a/ibl_pipeline/utils/dj_compare_table_archived.py b/ibl_pipeline/utils/dj_compare_table_archived.py index 05617d07..205b2261 100755 --- a/ibl_pipeline/utils/dj_compare_table_archived.py +++ b/ibl_pipeline/utils/dj_compare_table_archived.py @@ -2,20 +2,21 @@ functions to compare contents in shadow tables and real tables. """ import logging + import datajoint as dj logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) -formatter = logging.Formatter('%(asctime)s:%(name)s:%(message)s') -file_handler = logging.FileHandler('table-diff.log') +formatter = logging.Formatter("%(asctime)s:%(name)s:%(message)s") +file_handler = logging.FileHandler("table-diff.log") file_handler.setFormatter(formatter) logger.addHandler(file_handler) -def show(tablepairs, comment=''): - print('# {} table contents'.format(comment)) +def show(tablepairs, comment=""): + print("# {} table contents".format(comment)) for p in tablepairs: print(p) for t in tablepairs[p]: @@ -25,12 +26,12 @@ def show(tablepairs, comment=''): def push(tablenames, tablepairs): try: - print('# pushing data') + print("# pushing data") for tname in tablenames: source_tbl, dest_tbl = tablepairs[tname] dest_tbl.insert(source_tbl() - dest_tbl().proj()) except Exception as e: - print('# push error: {e}'.format(e=e)) + print("# push error: {e}".format(e=e)) def diff(tablenames, tablepairs): @@ -38,14 +39,14 @@ def diff(tablenames, tablepairs): for t in tablenames: a, b = tablepairs[t] - for i in ((a - b.proj()).fetch('KEY')): - logger.info('# {} only in {} - record deleted?'.format(i, a)) + for i in (a - b.proj()).fetch("KEY"): + logger.info("# {} only in {} - record deleted?".format(i, a)) - for i in ((b - a.proj()).fetch('KEY')): - logger.info('# {} only in {} - record deleted?'.format(i, b)) + for i in (b - a.proj()).fetch("KEY"): + logger.info("# {} only in {} - record deleted?".format(i, b)) - common = (a & b.proj(*a.primary_key)) - kstr = ', '.join(a.primary_key) + common = a & b.proj(*a.primary_key) + kstr = ", ".join(a.primary_key) srcrecs = (a & common.proj()).fetch(order_by=kstr, as_dict=True) dstrecs = (b & common.proj()).fetch(order_by=kstr, as_dict=True) @@ -54,14 +55,12 @@ def diff(tablenames, tablepairs): srcv = srce[attr] dstv = dste[attr] if srcv != dstv: - print('# {t}.{a}: {s} != {d}'.format( - t=t, a=attr, s=srcv, d=dstv)) + print("# {t}.{a}: {s} != {d}".format(t=t, a=attr, s=srcv, d=dstv)) ndiff += 1 - logger.info('# {} total differences.'.format(ndiff)) - + logger.info("# {} total differences.".format(ndiff)) def drop(schemas): for s in schemas: - s.schema.drop(force=True) \ No newline at end of file + s.schema.drop(force=True) diff --git a/ibl_pipeline/utils/psychofit.py b/ibl_pipeline/utils/psychofit.py index 2d896483..5a312632 100755 --- a/ibl_pipeline/utils/psychofit.py +++ b/ibl_pipeline/utils/psychofit.py @@ -1,4 +1,4 @@ -''' +""" The psychofit toolbox contains tools to fit two-alternative psychometric data. The fitting is done using maximal likelihood estimation: one assumes that the responses of the subject are given by a binomial @@ -20,19 +20,23 @@ Examples - Examples of use of psychofit toolbox Matteo Carandini, 2000-2015 -''' +""" import functools + import numpy as np import scipy.optimize from scipy.special import erf -def mle_fit_psycho(data, P_model='weibull', parstart=None, parmin=None, parmax=None, nfits=5): + +def mle_fit_psycho( + data, P_model="weibull", parstart=None, parmin=None, parmax=None, nfits=5 +): """ Maximumum likelihood fit of psychometric function. Args: - data: 3 x n matrix where first row corrsponds to stim levels (%), + data: 3 x n matrix where first row corrsponds to stim levels (%), the second to number of trials for each stim level (int), the third to proportion correct (float between 0 and 1) P_model: The psychometric function. Possibilities include 'weibull' @@ -42,23 +46,23 @@ def mle_fit_psycho(data, P_model='weibull', parstart=None, parmin=None, parmax=N using the 'erf_psycho_2gammas' model append a second gamma value. Recommended to use a value > 1. If None, some reasonable defaults are used. - parmin: Minimum parameter values. If None, some reasonable defaults + parmin: Minimum parameter values. If None, some reasonable defaults are used - parmax: Maximum parameter values. If None, some reasonable defaults + parmax: Maximum parameter values. If None, some reasonable defaults are used nfits: the number of fits Returns: pars: The parameters from the best of the fits L: The likliehood of the best fit - + Raises: TypeError: data must be a list or numpy array ValueError: data must be m by 3 matrix Examples: Below we fit a Weibull function to some data: - + >>> import numpy as np >>> import matplotlib.pyplot as plt >>> cc = np.array([-8., -6., -4., -2., 0., 2., 4., 6., 8.]) # contrasts @@ -67,7 +71,7 @@ def mle_fit_psycho(data, P_model='weibull', parstart=None, parmin=None, parmax=N >>> pars, L = mle_fit_psycho(np.vstack((cc,nn,pp)), 'erf_psycho') >>> plt.plot(cc, pp, 'bo', mfc='b') >>> plt.plot(np.arange(-8,8,0.1), erf_psycho(pars,np.arange(-8,8,0.1)), '-b') - + Information: 1999-11 FH wrote it 2000-01 MC cleaned it up @@ -81,51 +85,57 @@ def mle_fit_psycho(data, P_model='weibull', parstart=None, parmin=None, parmax=N if isinstance(data, (list, tuple)): data = np.array(data) elif not isinstance(data, np.ndarray): - raise TypeError('data must be a list or numpy array') + raise TypeError("data must be a list or numpy array") if data.shape[0] != 3: - raise ValueError('data must be m by 3 matrix') + raise ValueError("data must be m by 3 matrix") if parstart is None: - parstart = np.array([np.mean(data[0,:]), 3., .05]) + parstart = np.array([np.mean(data[0, :]), 3.0, 0.05]) if parmin is None: - parmin = np.array([np.min(data[0,:]), 0., 0.]) + parmin = np.array([np.min(data[0, :]), 0.0, 0.0]) if parmax is None: - parmax = np.array([np.max(data[0,:]), 10., .4]) + parmax = np.array([np.max(data[0, :]), 10.0, 0.4]) # find the good values in pp (conditions that were effectively run) - ii = np.isfinite(data[2,:]); + ii = np.isfinite(data[2, :]) + + likelihoods = np.zeros( + nfits, + ) + pars = np.empty((nfits, parstart.size)) - likelihoods = np.zeros(nfits,); - pars = np.empty((nfits,parstart.size)) - - f = functools.partial(neg_likelihood, data=data[:,ii], - P_model=P_model, parmin=parmin, parmax=parmax) + f = functools.partial( + neg_likelihood, data=data[:, ii], P_model=P_model, parmin=parmin, parmax=parmax + ) for ifit in range(nfits): - pars[ifit,:] = scipy.optimize.fmin(f, parstart, disp=False) - parstart = parmin + np.random.rand(parmin.size) * (parmax-parmin) - likelihoods[ifit] = - neg_likelihood(pars[ifit,:], data[:,ii], P_model, parmin, parmax) + pars[ifit, :] = scipy.optimize.fmin(f, parstart, disp=False) + parstart = parmin + np.random.rand(parmin.size) * (parmax - parmin) + likelihoods[ifit] = -neg_likelihood( + pars[ifit, :], data[:, ii], P_model, parmin, parmax + ) # the values to be output L = likelihoods.max() iBestFit = likelihoods.argmax() - return pars[iBestFit,:], L + return pars[iBestFit, :], L -def neg_likelihood(pars, data, P_model='weibull', parmin=None, parmax=None): + +def neg_likelihood(pars, data, P_model="weibull", parmin=None, parmax=None): """ Negative likelihood of a psychometric function. Args: pars: Model parameters [threshold, slope, gamma], or if using the 'erf_psycho_2gammas' model append a second gamma value. - data: 3 x n matrix where first row corrsponds to stim levels (%), + data: 3 x n matrix where first row corrsponds to stim levels (%), the second to number of trials for each stim level (int), the third to proportion correct (float between 0 and 1) P_model: The psychometric function. Possibilities include 'weibull' (DEFAULT), 'weibull50', 'erf_psycho' and 'erf_psycho_2gammas' - parmin: Minimum bound for parameters. If None, some reasonable defaults + parmin: Minimum bound for parameters. If None, some reasonable defaults are used - parmax: Maximum bound for parameters. If None, some reasonable defaults + parmax: Maximum bound for parameters. If None, some reasonable defaults are used Returns: @@ -133,13 +143,13 @@ def neg_likelihood(pars, data, P_model='weibull', parmin=None, parmax=None): - sum(nn.*(pp.*log10(P_model)+(1-pp).*log10(1-P_model))) See the the appendix of Watson, A.B. (1979). Probability summation over time. Vision Res 19, 515-522. - - Raises: - ValueError: invalid model, options are "weibull", + + Raises: + ValueError: invalid model, options are "weibull", "weibull50", "erf_psycho" and "erf_psycho_2gammas" TypeError: data must be a list or numpy array ValueError data must be m by 3 matrix - + Information: 1999-11 FH wrote it 2000-01 MC cleaned it up @@ -150,43 +160,50 @@ def neg_likelihood(pars, data, P_model='weibull', parmin=None, parmax=None): if isinstance(data, (list, tuple)): data = np.array(data) elif not isinstance(data, np.ndarray): - raise TypeError('data must be a list or numpy array') - + raise TypeError("data must be a list or numpy array") + if parmin is None: - parmin = np.array([.005, 0., 0.]) + parmin = np.array([0.005, 0.0, 0.0]) if parmax is None: - parmax = np.array([.5, 10., .25]) - + parmax = np.array([0.5, 10.0, 0.25]) + if data.shape[0] == 3: - xx = data[0,:] - nn = data[1,:] - pp = data[2,:] + xx = data[0, :] + nn = data[1, :] + pp = data[2, :] else: - raise ValueError('data must be m by 3 matrix') + raise ValueError("data must be m by 3 matrix") # here is where you effectively put the constraints. - if (any(pars < parmin)) or (any( pars > parmax)): + if (any(pars < parmin)) or (any(pars > parmax)): l = 10000000 return l - dispatcher={'weibull':weibull, - 'weibull50': weibull50, - 'erf_psycho': erf_psycho, - 'erf_psycho_2gammas': erf_psycho_2gammas} + dispatcher = { + "weibull": weibull, + "weibull50": weibull50, + "erf_psycho": erf_psycho, + "erf_psycho_2gammas": erf_psycho_2gammas, + } try: - probs = dispatcher[P_model](pars,xx) + probs = dispatcher[P_model](pars, xx) except KeyError: - raise ValueError('invalid model, options are "weibull", '+ - '"weibull50", "erf_psycho" and "erf_psycho_2gammas"') + raise ValueError( + 'invalid model, options are "weibull", ' + + '"weibull50", "erf_psycho" and "erf_psycho_2gammas"' + ) - assert (max(probs)<=1) or (min(probs) >= 0),'At least one of the probabilities is not between 0 and 1' + assert (max(probs) <= 1) or ( + min(probs) >= 0 + ), "At least one of the probabilities is not between 0 and 1" - probs[probs==0]=np.finfo(float).eps - probs[probs==1]=1-np.finfo(float).eps + probs[probs == 0] = np.finfo(float).eps + probs[probs == 1] = 1 - np.finfo(float).eps - l = - sum(nn*(pp*np.log(probs)+(1-pp)*np.log(1-probs))) + l = -sum(nn * (pp * np.log(probs) + (1 - pp) * np.log(1 - probs))) return l + def weibull(pars, xx): """ Weibull function from 0 to 1, with lapse rate. @@ -197,12 +214,12 @@ def weibull(pars, xx): Returns: A vector of length xx - - Raises: + + Raises: ValueError: pars must be a vector of length 3 ValueError: each of the three parameters must be scalar TypeError: pars must be a list or numpy array - + Information: 1999-11 FH wrote it 2000-01 MC cleaned it up @@ -212,18 +229,19 @@ def weibull(pars, xx): if isinstance(pars, (list, tuple)): pars = np.array(pars) elif not isinstance(pars, np.ndarray): - raise TypeError('pars must be a list or numpy array') + raise TypeError("pars must be a list or numpy array") if pars.shape[0] != 3: - raise ValueError('pars must be a vector of length 3') - alpha = pars[0] - beta = pars[1] - gamma = pars[2] + raise ValueError("pars must be a vector of length 3") + alpha = pars[0] + beta = pars[1] + gamma = pars[2] + + if (alpha.size != 1) or (beta.size != 1) or (gamma.size != 1): + ValueError("each of the three parameters must be scalar") + + return (1 - gamma) - (1 - 2 * gamma) * np.exp(-((xx / alpha) ** beta)) - if (alpha.size!=1) or (beta.size!=1) or (gamma.size!=1): - ValueError('each of the three parameters must be scalar') - - return (1 - gamma) - (1 - 2*gamma) * np.exp( -((xx/alpha)**beta) ) def weibull50(pars, xx): """ @@ -235,12 +253,12 @@ def weibull50(pars, xx): Returns: A vector of length xx - - Raises: + + Raises: ValueError: pars must be a vector of length 3 ValueError: each of the three parameters must be scalar TypeError: pars must be a list or numpy array - + Information: 2000-04 MC wrote it 2018-08 MW ported to Python @@ -249,18 +267,19 @@ def weibull50(pars, xx): if isinstance(pars, (list, tuple)): pars = np.array(pars) elif not isinstance(pars, np.ndarray): - raise TypeError('pars must be a list or numpy array') + raise TypeError("pars must be a list or numpy array") if pars.shape[0] != 3: - raise ValueError('pars must be a vector of length 3') - alpha = pars[0] - beta = pars[1] - gamma = pars[2] + raise ValueError("pars must be a vector of length 3") + alpha = pars[0] + beta = pars[1] + gamma = pars[2] + + if (alpha.size != 1) or (beta.size != 1) or (gamma.size != 1): + ValueError("each of the three parameters must be scalar") + + return (1 - gamma) - (0.5 - gamma) * np.exp(-((xx / alpha) ** beta)) - if (alpha.size!=1) or (beta.size!=1) or (gamma.size!=1): - ValueError('each of the three parameters must be scalar') - - return (1 - gamma) - (.5 - gamma) * np.exp( -((xx/alpha)**beta) ) def erf_psycho(pars, xx): """ @@ -272,19 +291,19 @@ def erf_psycho(pars, xx): Returns: ff: A vector of length xx - + Examples: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> xx = np.arange(-50,50) >>> ff = erf_psycho(np.array(-10., 10., 0.1),xx) >>> plt.plot(xx,ff) - - Raises: + + Raises: ValueError: pars must be a vector of length 3 ValueError: each of the three parameters must be scalar TypeError: pars must be a list or numpy array - + Information: 2000 MC wrote it 2018-08 MW ported to Python @@ -293,18 +312,19 @@ def erf_psycho(pars, xx): if isinstance(pars, (list, tuple)): pars = np.array(pars) elif not isinstance(pars, np.ndarray): - raise TypeError('pars must be a list or numpy array') + raise TypeError("pars must be a list or numpy array") if pars.shape[0] != 3: - raise ValueError('pars must be a vector of length 3') - threshold = pars[0] - slope = pars[1] - gamma = pars[2] + raise ValueError("pars must be a vector of length 3") + threshold = pars[0] + slope = pars[1] + gamma = pars[2] + + if (threshold.size != 1) or (slope.size != 1) or (gamma.size != 1): + ValueError("each of the three parameters must be scalar") - if (threshold.size!=1) or (slope.size!=1) or (gamma.size!=1): - ValueError('each of the three parameters must be scalar') + return gamma + (1 - 2 * gamma) * (erf((xx - threshold) / slope) + 1) / 2 - return gamma + (1 - 2 * gamma) * (erf( (xx-threshold)/slope ) + 1 )/2 def erf_psycho_2gammas(pars, xx): """ @@ -316,19 +336,19 @@ def erf_psycho_2gammas(pars, xx): Returns: ff: A vector of length xx - + Examples: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> xx = np.arange(-50,50) >>> ff = erf_psycho_2gammas(np.array(-10., 10., 0.2, 0.),xx) >>> plt.plot(xx,ff) - - Raises: + + Raises: ValueError: pars must be a vector of length 3 ValueError: each of the three parameters must be scalar TypeError: pars must be a list or numpy array - + Information: 2000 MC wrote it 2018-08 MW ported to Python @@ -337,16 +357,21 @@ def erf_psycho_2gammas(pars, xx): if isinstance(pars, (list, tuple)): pars = np.array(pars) elif not isinstance(pars, np.ndarray): - raise TypeError('pars must be a list or numpy array') + raise TypeError("pars must be a list or numpy array") if pars.shape[0] != 4: - raise ValueError('pars must be a vector of length 4') - threshold = pars[0] - slope = pars[1] - gamma1 = pars[2] - gamma2 = pars[3] - - if (threshold.size!=1) or (slope.size!=1) or (gamma1.size!=1) or (gamma2.size!=1): - ValueError('each of the three parameters must be scalar') - - return gamma1 + (1 - gamma1 - gamma2) * (erf( (xx-threshold)/slope ) + 1 )/2 \ No newline at end of file + raise ValueError("pars must be a vector of length 4") + threshold = pars[0] + slope = pars[1] + gamma1 = pars[2] + gamma2 = pars[3] + + if ( + (threshold.size != 1) + or (slope.size != 1) + or (gamma1.size != 1) + or (gamma2.size != 1) + ): + ValueError("each of the three parameters must be scalar") + + return gamma1 + (1 - gamma1 - gamma2) * (erf((xx - threshold) / slope) + 1) / 2 diff --git a/ingest-example.env b/ingest-example.env index 82c9953b..f9bcf8d2 100644 --- a/ingest-example.env +++ b/ingest-example.env @@ -19,4 +19,3 @@ ALYX_DB_PASSWORD=postgres ALYX_DL_USER=someuser ALYX_DL_PASSWORD=somepass ALYX_DL_DATE=1970-01-01 - diff --git a/ingest_to_detect_updates.sh b/ingest_to_detect_updates.sh index fcb4a0fb..4d0ec2e1 100644 --- a/ingest_to_detect_updates.sh +++ b/ingest_to_detect_updates.sh @@ -2,4 +2,3 @@ python drop_alyx_raw.py python ingest_alyx_raw.py "$@" python ingest_alyx_shadow_updates.py python ingest_alyx_shadow_membership_updates.py - diff --git a/notebooks/notebooks_archived/Behavioral overview snapshot.ipynb b/notebooks/notebooks_archived/Behavioral overview snapshot.ipynb index 2c316b7e..7c819230 100644 --- a/notebooks/notebooks_archived/Behavioral overview snapshot.ipynb +++ b/notebooks/notebooks_archived/Behavioral overview snapshot.ipynb @@ -2,23 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'datajoint'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mdatajoint\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mdj\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mibl_pipeline\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mreference\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubject\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maction\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0macquisition\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbehavior\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdatetime\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtimedelta\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'datajoint'" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import datajoint as dj\n", "from ibl_pipeline import reference, subject, action, acquisition, data, behavior\n", @@ -33,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -42,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -60,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -85,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -115,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -141,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -151,22 +137,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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lJSUkJWVRbNmzaLtiZu+oU2bNtW2J/EsL+ly6qmnsmDBguh8iHA4TLt27eJaVhQO//5weMDZZc2aNaSlpTXxJagqUwF4FLgI6OjHtKhGTg6wCLiwkn134MPN5Cd8tKysTB5//HEBZN68efXeNFYaJkVFRdKlSxcBpEePHvL3v/9dgxiSjOsiGTt2rJx22mkJfd8V3TtlZWWyYcMGycjIkJ/85CfVyujcubNce+21cdXZDSB46aWXpKioSMaOHSv9+/ePS4aXqlxtvXv33i01GSwWkVtFZLpYF09CGGOaYOcevCgiMyo55EVH2dSYUCjEMcccA8ChQ4dSpmekNAx27NjBP/7xD6644grWr18PwKpVqzSIoRZwrYunnnqKb7/9Nloez/ddcTJZKBSiU6dO9OrVi02bNlXZnohI3BZBJBKJphq57LLLGD58OKtXr66RB6OqJUaLi4vXxTgV8LkwTSIYm8Lvr8ByEXnUU+51lo7FupsCoWPHjgAUFSWsuxTFN7t37+af//wn48aNIzc3l6uvvppvvvkmmg/o+eefP+Kc+h7fn6q4bqBEF/upys/fu3dvVq5cWeV527dv5+DBg3HH/1911VXRzx06dKCkpITs7OyE3YdVudp27drlK2teMrvNI4CrgDOdUNElxphRwAPGmGXGmM+Bc4Cbg7qgKgIl2ezdu5dXXnmFSy65hNzcXK644goWLlzIDTfcwLx581i9ejVz584lPz+f5s2b63KqtUhNlq+taBG49OrVi5UrV7qu7CPwM5msIhXTTWRlZVFUVMSsWbMSCn11qdF4kR//UV1vfsYIRKxfLz09XX71q1/5c6wpig/2798vr732mlx++eXSrFkzAaRDhw5y4403yty5c4/wH7sThzZs2FAuPYKOESQXd6ygTZs2Akjnzp19fd+RSESysrLkF7/4xRH73LDOqkJR586dK4C8++67vuvp9edfffXVR4SpBjkZEJ8TyqoNH001XI2oFoFSUw4cOMB7771HQUEBr732Gjt37qRt27ZceeWVTJgwgdNOO63KCA9vJEdeXl5KhnemIq575A9/+APXXXcdU6dO9RWJtGfPHvbv31+lRQCwcuXK6G/qJZHUEN7Q2WuvvfYIF2JduA8blCIA6x5SRaAkwqFDh3j//fcpKChgxowZbNu2jVatWnHRRRcxYcIEzjzzTJo08ReN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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", "ax = plt.subplot(1, 1, 1)\n", @@ -186,22 +159,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", "ax = plt.subplot(1, 1, 1)\n", @@ -227,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -238,22 +198,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbYAAAEWCAYAAAAKFbKeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzsnXd4m9XZ/z9HHvIe8ciwg52ILMdJGFmEsBrKKDgO8NKmb6GE8UtbSFgvq7SsskoJu0AJBRo2lDQkhpIySyCQAUmIcbbigR0ndrziKdnS+f2h5xGyLNmPbckr53Ndz+Xo0TOObEW37nO+9/cWUkoUCoVCoRgqmPp7AAqFQqFQBBIV2BQKhUIxpFCBTaFQKBRDChXYFAqFQjGkUIFNoVAoFEMKFdgUCoVCMaRQgU2hUCgUQwoV2BQKhUIxpFCBTaFQKBRDitBgXVgI8SJwPlAhpcz28bwAngB+BjQBi6SUW7TnLgP+qB16n5RyRVf3M5lMMjIyMlDDVygUiqOCpqYmKaUcUkmOCJallhDiVKABeNlPYPsZsBRXYJsFPCGlnCWEGAZ8A0wHJPAtcKKUsqaz+0VHR8vGxsYAvwqFQqEY2gghmqSU0f09jkAStCgtpVwHVHdySC6uoCellBuABCHESOBs4CMpZbUWzD4CzgnWOBUKhUIxtOjP9DMN+MHjcam2z99+hUKhUCi6JGhrbH2BEGIxsBggPDy8n0ejUCgUioFAf2ZsZcBoj8fp2j5/+zsgpVwupZwupZweGjqoY7RCoVAoAkR/BrY1wK+Fi9lAnZSyHPgPcJYQIlEIkQicpe1TKBQKhaJLgin3fwM4HUgWQpQCdwFhAFLKvwH/xqWI3IdL7n+59ly1EOJeYLN2qT9JKTsToSgUCoVC4SZocv++Rsn9FQqFovsoub9CoVAoFAMcpbhQKBSGkU4ntqoqnHY7pvBwzElJCJP6fqwYWKjAplAoDCGdTo7s2cPmxYtpLisjMi2NGcuXEzd+vApuigGFejcqFApD2Kqq3EENoLmsjM2LF2OrqurnkSkU7VEZm0KhMITTbncHNZ3msjKcdntQ7qemPRU9Rb1LFAqFIUzh4USmtXe3i0xLwxQE1x992vPLiy7ik1NP5cuLLuLInj1IpzPg91IMPVRgUygUhjAnJTFj+XIQwvU4JYUZy5djTkoK+L3UtKeiN6jAplAoDCFMJmLGjgWt9nXMokVBE4709bSnYmihAptCoTBM25Ej7n83lZQEbc3LFB5O+LBh7fYFa9pTMfRQgU2hUBjGXv2ju13djh1Bu485KYnhZ57pfqyXFgRj2lMx9FCBTaFQGMamBbb4yZOp370bZ2trUO4jTCZaysu1B4KTXn1V1cv1E0KIF4UQFUKI7z32DRNCfCSE2Kv9TNT2CyHEk0KIfUKI7UKIEzzOuUw7fq8Q4rJgjlm9SxQKhWH0jC1l7lycdjsN+/cH5T5SSuoKCjAnJ4OU2A4f9hvUpNNJS2UlTWVltFRWKuVk4PkHcI7XvtuAT6SU44BPtMcA5wLjtG0x8Cy4AiEuI/xZwEzgLj0YBgMV2BQKhWHsNTWAK7AB1BUUBOU+LeXl2KurSb/wQgCO+Jn21MsCvrjwQlUWECSklOsA7w4rucAK7d8rgAUe+1+WLjYACUKIkcDZwEdSymopZQ3wER2DZcBQgU2hUBhGz9gSTzwRU0RE0NbZ9IA54swzCUtI8BtA9bKAlgMHAFUW0IcM1/pnAhwEhmv/TgN+8DiuVNvnb39QUM4jCoXCMPbqasLi4ggxm4mbONFvJtVb6goKwGQibtIk4rOy/AZQVRYQEEKFEN94PF4upVxu9GQppRRCDKj+ZypjUygUhrFVVxOe6Foa0QNOMHo61hUUEGOxEBoVRXxWFvV79vgUqvSlG8oQpk1KOd1jMxLUDmlTjGg/K7T9ZcBoj+PStX3+9gcFFdgUiiAwVAUN9upqd31ZfFYWbfX1NP3wQxdndZ+6ggLiJ08GIG7yZJdQxWrtcJw5KYmpDzzQbt/ku+5SZQHBZw2gKxsvA1Z77P+1po6cDdRpU5b/Ac4SQiRqopGztH1BQQU2hSLADGWfQ3tNzY+BTQs8gV5na6mspOXQIRKys133ycpy3cfHOpswmWitqwNgyn33gRDUbd+uygICiBDiDeBrYIIQolQIcSXwZ+CnQoi9wJnaY4B/A/uBfcDzwNUAUspq4F5gs7b9SdsXFNRfX6EIMLaqKjb9v/83JH0OPTO22AkTECEhHAmwMlIPYHrgjBkzhpDISL8BtPa77zCFh3PMRReRPGcOZWvWBGV69GhFSvlLKeVIKWWYlDJdSvmClLJKSjlPSjlOSnmmHqQ0NeQ1UkqLlHKKlPIbj+u8KKU8VtteCuaYVWBTKAKMo6XFrdLTGQqCBikl9poazFpgCzGbibFYAp6x1X3vqgOOmzQJABES4hKq7Nzp8/iaLVuIz87GFB5Oem4uTSUl1GzdGtAx6QzVKeahhgpsCkUAcba2svPPf+6wfygIGtoaGnDa7W7xCNCpYrGn1BUUEJ2ZSVhsrHtf3KRJPoUqDpuNuoICEo8/HoCRZ5+NKSKCstWrCTRDeYp5qKECm0LRS/Rv8fX79rHh8sspX7uWjEsvJSQ6GoCIUaOGhM+hXsPmaU4cN3kytooKWiorA3YfT+GIjj+hypEdO3Da7SSe4HJuCo2JYeRPf0rZe+8FPENWrXQGDyqwKRS9wO18sWAB/z37bKq+/ppxS5aQ/cc/MvHGGwE44dFHh4TPoe464hnYOhN29PQezWVlHQObH6FKtTblOEzL2ADScnNpra2lYt26gIxJp69r5pxOJwcPHqS4uJiDBw/iVJmhYQb3/zSFop+xVVWx6coraTl40L2vdNUq7DU1JM2Y4TqmsnLQBzXwnbHpgS1Qhdp64IrXFJE6/oQqNVu3EjlqFBHDh7v3pcydS/iwYZT2cjrSO7D0Zc2c0+kkPz+f2bNnk5mZyezZs8nPz+92cDtag+Pg/9+mUPQjTru9XVCDH7/Fxxx7rOvDeNeufhpdYNEDm9kjsIXFxRE1enTA1tl04YgeMHX8CVVqtmxxr6/pmMLCSDv/fA59/DGt9fU9GoevwFJSXc2M554jNC4OcIlagjXFXFFRQW5uLsXFxQAUFxeTm5tLRUVFF2d2/hp6EhwHIyqwKRS9oH7v3g779G/xIWYz0WPHcmT37n4YWeDRW9Z4ikcA4rKyAjYVWVdQQGRaGuGJiR2yjTgvoUpzeTktBw92CGwAaQsW4LTbKf/ggx6No6Kigvnz57cLLGedfTatycmMvuACAKTDQWh0dFCy8aKiIve9dYqLi7HZbIavUVFRQU5OTq+C42BFBTaFoodIh4Pdjz9OeGIiESNHAh0bYsZNmDCkMjZTeLhbFKMTn5VFU0lJj7MjT3ThiK9sozExEVtFBbbDhwHckn5dOOJJwtSpRI8ZQ+m77/ZoHDabjZKSknb7iouLaWxqcll7CQFA1YYNPbq+P6xWK4sXL+bUU0/t8FxGRgZms9nwtWw2Gz94iW26GxwHKyqwKRQ9pPitt6jLz2fyH//IKatWMW/dOuauXNlOKBI3YQLNpaUB+dDvb3TXEaF9qOvowg5/dWZGaa2vp7GoiPjJk31mTPf8/e/Aj+twNVu3YjKbiZ0wocM6khCC9NxcqjZupMmrptAIhYWFHfbpgcVeW0t0ZibmlBQOr1/fi1f8IwUFBVxyySWMHz+el19+mSuvvJL333+fjIwMAIQQvP3226Smphq+ZmNjY4e/VXeD42BFBTaFogfYqqvZ9cgjJM2aRVpuLhEpKUSlpRGRktJuaipu4kQA6ofAdKSn64gngVJGegpHfGVMG7TswzOwxWdnU7B7t891pLTcXAAO5OV1axxtbW3ccsstJCYmkqaJRaKioli9ejWpqam01tYSnphI8pw5VH71Va9cTr799lsuvPBCsrOzeffdd7nhhhsoLCzk2Wef5ZxzzmHDhg28/PLLSCkpLS3F1I1pz+effx4hBCO12YSMjAz3axjqqMCmUPSAXcuW0VZfz5S77+7wrdiTWC2wDYV1Nk+fSE/MqamYk5N7LSDRA2NCdjZms7lDZpE8ejThI0dypKDAXZhtHj/er8gi+phjSDzhBEpXrepW8HnsscfYvHkzTz/9NN988w2LFi2ira2N9PR0TCYT9tpawhMSSJkzB3tVlavzQDfVh1988QXnnHMO06dP57PPPuOOO+6guLiYZcuWuQORyWRixIgR/PKXvyQ5OZm3337b8GsoKirimWee4bLLLmPLli0UFRWxYcMGpkyZ0q3gOFgZ+q9QoQgwNdu2UfL224xZtIjY8eM7PTZy5EhCY2OHRGCzVVVh9hKOgGuaLC4rq9eS/7qCAiKGD8ecnExRURE2m42oqCgAhg0bxurVq0nMzqZuxw7qCgpw2u2YJ0zwKbJYtGgRDz74IA2TJlG/d6/hadI9e/Zw5513smDBAhYuXMiIESNYunQpdrvdHVhaa2sJS0ggec4cACq+/NKn+rCtra1dsHM4HKxdu5ZTTjmFU089lS1btvDggw9SXFzMn/70J5L8qCtDQ0O5+OKLycvLo7Gx0dDruOOOOzCZTPzpT39ixIgRZGRkMGLEiKMiqIEKbApFt5AOB/l33YU5JYXxS5d2ebwQwuVz2McCkmB4GtqrqwlLTPSZmcRPnkz9vn04eiFM8HQceeyxx4iPj+e7775j0qRJjBo1iuzsbBImT6axqIjKL78EIOH44xk9enS760RFRbFnzx5uv/12fn7//bRKyb25uVx66aU89dRTbNiwgZaWlnbnOJ1ODhw4wCWXXILZbOavf/2rOxM//vjjyc7OZsWKFa7fg5axRY4aRfSYMRz47387rAcuXryYr776yh3spk6dytSpUzn33HMpKiriySefpKioiNtuu404rXygMxYuXEhTUxN5BqZVt23bxmuvvcb1119Penp6l8cPRVRgUyi6QfFbb1H3/fdM/v3v23kZdkbcxInU797dZ47zbjeUCy8MmKeh026nraGBGrudWbNmdVjPis/KQra1Ub9nT4/G21hSQoPV6goUZWW88847LF68mGOPPZYlS5bw/fffs3XrVnfgK3nrLSLT0kjPyuKSSy5xXysjI4OvvvqKffv2UV1dzcq1a2nKyGC6ycSnn3zCtddey0knnURsbCwnnngiv/vd7/j73//OqlWryM7OZvPmzYSGhnL48GF30BZCsGjRIjZu3MjO77/H0dREWEICACknn0z9li2Uea0Hbtq0idNOO80d7CorK9mzZw+PPPIIVquVpUuXurNRI8ydO5dRo0bx5ptvdnnsrbfeSmJiIrfeeqvh6w85pJRDYouKipIKRTBpqaqSHxx/vFz/y19Kp9Np+Lyi11+Xa8aOlY0//BDE0f1Ic0WF/OiUU+SasWPd20ennCKbKyp6fs2DB+WasWPl/2ZkSMC9ZWRkyPLyctlQWCjXjB0ri958s1vXdTocsnbnTrl25ky5ZuxYuXb6dFm2ebM8+eST5Q/a76u2tlZGRUXJq666SjaWlblf08bf/Ea2tbbK8ePHyxNOOEEWFRXJ8vJy6XA42t2j7N//lmvGjpUVX34pS0tL5b/+9S/5+9//Xp555pkyPj6+3evxfl065eXlMiQkRN55/fVyzdixsvDVV6WUUh5Yu1auGTtWTo6MbHf+008/LWfPmiU/Xb1aFnz5pfx09Wo5e9YsWVRU1OO/wfXXXy/Dw8NlTU1Nh+ccDocsLy+Xr776qgTkI488Yvi6QKMcAJ/hgdy6zNiEEBYhhFn79+lCiGuFEAlBibIKxQBm18MP09bY2KVgxBtdGdlX05HB8DTUfSILtRoyHb0uKuqYYwiNien2OptuLGzXrmuvrmbHjTfyt4cfdk+jxcfHs3DhQqz79mGrqQFtnah60yaqd+xgWGIiN998s991pOE/+QmhsbGUrlpFWloaF1xwAQ888AAfffQR1dXVfPrppx3G5V3vNWLECM4++2w+eOcdAMK1jC1p9mwkMDUysp36MCcnh9cffRTHsmVYf/1rHMuW8fqjjxLdjSzNm4ULF2K323nXqzZPr/mbNWsWl1xyCSEhIZxyyilHhcOIP4xMRa4EHEKIY4HlwGjg9aCOSqEYYLgFI5dd1qVgxJvYceOAvgtsIiwMk5eisLeehrqD/RGHo93+1NRUzGYzwmRytZbppuTfXxBOHzGi3b7f/OY33HHDDXz7u9+B9oHdWlfHd0uWsOzuu7nooov83iPEbGbUuedS/uGHtDU1tXvOZDIxadIkd72Yjq96r0WLFtGkBWB9KjJ/3z722mycM3ZsO/VhstmM9bbb2nUCsN52GzFGfzE+mDlzJpmZmbz11lvt9uv2W3p5hMPh4OKLLz4qHEb8YSSwOaWUbcAFwFNSypuBkcEdlkIxcNAFIxHDhzPh2mu7fX5oTAxRxxzTZ7Vsh9evx2mzERrj+hgNS0jotadhfXk54PKJ1MUaoaGh7X7GZ2VxZNcupFfw6wx/xsIRMe1DwIwZMxg9cqTPIDj2mGMICwvr9D5pCxbgaGzk0Mcfd3guNTWV1atXu4Obv3qvnJwcRmjrquEJCTidTq655hr2CcGwI0dIjo11Z42ytTXgWbMQgoULF/LRRx9x2CNzttlsvbbfGmoYCWytQohfApcB72n7On8XKRRDCF0wkvX737uDRXeJmzChTyT/9ro6djz4IAlTp3Lqe67/rsf8/Oe9bpvz9ksvAfCXZ55h06ZNFBUV8d5771FdXc3VV1+NlJL4rCwczc00FBUZvq45KYkZzz3nziYj09KY9te/dgjCQgjCIiJ8BsFYHyUI3iTNmEHEyJE+Hf9NJhNTpkxhw4YNndZ7RUREcMasWQDYQkNZsWIFGzdu5JQrr0S2tVG1aZP7WOl0IryCbSA6ASxcuBCHw8HKlSvd+zZv3tzhuKPFYcQfRt7plwMnAfdLKQuFEGOAV4I7LIViYGCrqmLXsmUkzZ7NqPPP7/F14iZOpKGwEIeXzDzQ7Fq2DHtNDVPvv5/o0aMJi4vD0dzcq6C2du1atn/9NRL4yfnnu+uizj77bO69917++c9/8sorrxCnW2t1YzpSAodMJoiPJ2bWLEJvvpnq8HB86UeHZWQw9oEH3MEtMi2NSY88QrRHyxp/CJOJ9NxcKr/4wu016YleDN1VvdfsqVMB+OuLL3LzzTczZ84cLr71VkxmM4e/+sr1mqRk92OPIdvaCIuPByAsPj4gnQCmTp3KxIkT3erI7du3c+WVV2KxWNxrkkeTw4g/uny3Syl3SCmvlVK+oT0ulFI+FPyhKRT9z65ly1yCkbvu6pZgxJvYiRPB6fTZDSBQ1GzdSvEbbzB20SK3zVV4cnKPOjzrThrbtm1j0aJFjElJITwhARES0u64m2++mVNOOYUlS5ZQFRqKKTy8Ww4kFRUVnHX22TQfOsSr//kPZ8yfz9nnnONzfSg2Lo7XP/uMsFtu4bhVqwi56SaaExMNB+30BQuQDgdl773X9cE+cDqdhLS0uOri/vIXqqqquPbaawkxmxl24olUar6R+198kbLVq5lw3XWctnYtYYmJJJ98ckCazQoh+MUvfsHnn3/Ou+++y9lnn01sbCyffPIJmzdvPuocRvwR6u8JIUQ++PziBICUcmpQRqRQDBBqtm6l5O23sVx1VbcFI97ETZgAwA+bNlEXF4fZbCY1NTVgHz7Otja233GHax3wuuvc+83JydgqK7t3LU1lN3/+fLcgYfqsWYR7CS8AQkJCePnll5k2bRq/vvxy7h83rluBzWazcfiHHzBnZlKlrc35Wx9yOp1kjhnD6Tk5gGtqcMOGDTidTkO/x9hx44ibPJmy1asZu2iR4THqVFRU8J9//YuJHmrDW2+9ldNOO43kOXPYtWwZ1hdfZMef/8zIc85h3JIlCCEYdvzx1O/eHZD2Nk6nk+OOOw4pJRdccIHbHHn06NFHdSDzprPfxPlATiebQjFk8RSMGHEY6YrI9HSE2cxL990XlKaPhS+/zJGdO8m+885264Dm5GSfU2+doTvre5oQ78/PR/hZX8zMzOTpp59m/fr1FLW2Urdjh+FidLPZzGRtarGqrQ3wvz5UUVHBH/7wB/fjlpaWbvcXS8/NpXb7dhr27zd8jo7NZoPmZuo9/mbFxcVIp5NIbRpwx/33I0wmxl51FWi/g4Rp02iwWgPS4aGiooLrr7/e/VhKyU033XRUKyB94TewSSmLO9v6cpAKRV9T/Oab1BUU9Eow4kllVRVFLS0M0zKRQDZ9bD5wgN2PPUbqGWcw4qyz2j1nTkrqdmA7cOBAB2f98NZWTJ04rfzqV7/iF7/4Be9s2EBrTQ0tmoqyK1JTU7lswQIAqh2OTteH/PVI6476Ly0nB0wmnyKSrjCbzaRERdHgofrMyMggBtj5l7+498m2NrZcd517Cjhh2jQAardv7/Y9vVEKSGMYKdCeLYTYLIRoEELYhRAOIcSRvhicQtEfBEow0u6aNhu76+vJ9FDFBeoD6ft770U6nT7XAc3JybTV1xv2cFy/fj3n+3jNw8LCOhU+CCF49tlnOaIFv0Nbthi6n8lkoiQ/H4CVH3/c6fqQ2Ww2VG/WGRGpqaScfDJlq1d32+IsNTWVrMxM2iIi3PdevXo1IVLS4tXzzVPan6AJTmq/+65b9/NFIH4HRwNGJmX/CvwS2AtEAlcBTwdzUApFf7Jr2TLampq67TDSGWazmSMxMcSHhJDgIcBYvXp1t1ueeHLwk084+OGHjF+6lCgvM2BwBTagSwGJlJJHHnmE008/naioKN588812dV1xISHEeUntvUlMTOSu557DKSUrn3zS0Pjr6+sp/f57AMZNn96pItFovVlXpOXm0vTDD9R8+223zjOZTJhaWpiXk9NepOGnFk+X9ofHxxM9Zgw1AQhsgfodDHUMrTZKKfcBIVJKh5TyJeCc4A5LoegfdMHI2MsvdzuGBILU1FR+d++9AGSGh5Oens6MGTO47rrruPTSS30aC3dFW1MT399zD7HjxmG58kqfx+iBzd7JdGRtbS0XXnghN910Ezk5OXz77bdcfPHF7rquLz/8EJxOzD56sXnzk3PPpSU2lurt23nPgPpwzZo1xAEiJoaQLrIOo/VmXTHyrLMIiYzs0XRka20t8SNHtisLMCclMWP58nZlCN7S/sRp06jdtq3XRtiB+h0MdfyqIj1oEkKEA9uEEH8BylFdARRDEOlwsF0XjCxZEtBrm0wmxs6ZQyXwwu23M+6KKzAnJbFk6VKef/5593H62tvmzZtxOBzYbDa/Csq9f/0rzWVlzHnzTUx+nDfcGZufwLZlyxYuvvhiSkpKePTRR7n++uvdWeoIzdaqobDQdS0DgQ1g7KmnYv/gA6644gry8/MZ3kmd2VtvvcXsmBhiDLZX0evNekNodDQjfvpTDrz/Ptl33GG4aLqtuRmnzUa4V0G4MJmIGz+euStX4rTbMYWHY05KaqeCTJg2jdJ336WlvJzIUaN6Nf5A/A6GOkYC1KVACLAEaMTlFenfmE2hGKQUv/EGRwoKyLr99oAIRjyRTichjY1gMlH20ktsXLiQ5sJC7rn77g7HNjU1sWLFCrc3oK8s7sju3VhfeIHRF19M0owZfu/rHdj0ac+ioiL+8pe/MGfOHOx2O+vWreOGG27wOfVqr64G6PCB7o/E7GwSpMTZ0MBVV13lN0upqalh7dq1ZCYmEmmgyDqQpC9YQGtdHRWff274nNbaWgB30bUnwmQiIiWFqLQ0IlJSOkj7E487DiAg05GKrjFSoF0spWyWUh6RUt4jpbxRm5pUKIYMtqoqdj3yCMknncSo884LyvW3XnON28C3uayMzYsXEwMdxABNTU3cfPPN/PDDD4Ari5s/f75bQSmdTvLvvJPQ2Fgm3XJLp/f1DGx6fdrMmTMZM2YMt956KyeeeCLffvstJ510kt9ruAObwYxN75n2wNVX89577/Hcc8/5PG7VqlW0trYSD0T0cWBLPvlkwpOSKPVyyu8MuxbYjAZ4T2InTMAUHh4QAYmia/wGNiHE29rPfCHEdu+t74aoUAQPvdN0/t1309bYyOQ77wyYYMQTfy72IVJ2EAP48v4rKSnh/vvvp7CwkB9WrqT6m2/Iuu22LqcHQyIiCI2JwXb4MBUVFZx33nnugAlQWlra5Xqe3rIm3KAdVJzmenLGuHGcddZZ3Hjjjez24ZP55ptvMm7sWJx1dUT08dSaKTSUtJwcDn36Ka1HjIm8W7Xfg6+MrStCzGbisrICkrEFozv6UKOzjE23L/BXqK1QDGr0TtOfn38+5f/+NyGRkUinMygfFJ0p57zFAImJiR2yuMjISJ555hmOO/ZYNtx+O47MTFINliLotWylpaWUeQXXkpKSLksObN2cijQPG0bEiBHU79zJSy+9RFRUFL/61a9obW11H1NRUcGnn37Kr3QXkT7O2MBVrO202znwwQeGjrfX1QE9y9gAEqdOpS4/H6dWiN4T9PfslxddFLDu6EORzgq0y4UQIcA/VIG2Yiji3eSyraGBzYsX98hbsSvMSUlMePjhdsEt6/bbMScldTDg9SXp/vrrr9m/fz9PzJtHuMPBtV98wejRo7npppvY1UWft/DkZBrKy7nkkks6ZKNGaqDs1dWEREYSGhlp+PXGT55M3Y4djBo1iuXLl/Ptt99yzz33uJ9fuXIlDoeDc+fMAfonsMVPmUL02LGUGVRH2nuRsQEkHHecq/vBvp6v5OjvWc8+b8F6zw5mOl1jk1I6AKcQomd/SYViABOMTtP+ECYTtz3+OCkPPMCp771HSFQU5f/+t0//QH+S7uiDB0myWhn/29+yfM0aTjvtNJ544gkmTZrEKaecwssvv0yT5ufoWRtnDw9n39atFBcXs3z58m7XQNmrq7udpcRnZdGwfz9tTU1ceOGFXHHFFTz44IN8+eWXgGsactKkSaRFRwP0+VQkuIrK0xcsoGrjRpq83ge+aNUzNq3JaHfRC7V7Mx3Zl+9ZT4QQNwghCoQQ3wsh3hBCRAghxgghNgoh9gkh3tLU8wghzNrjfdrzmUEdnA+MqCIbgHwhxAtCiCf1Ldill20wAAAgAElEQVQDUyiCjSk8vMMHaiB6ZvlCSsnqvDz+sXIl8ZMmkXnJJRz44AO3lL7D2LyyONrayL/zTiLT0xm/dCnnnHMO77zzDqWlpTz00EMcOnSIyy67jFGjRnHNNdfwzjvvMHv2bDIzM1n50UdEtrWxatUqrrjiim7XQNmrqw0LR3TisrJASnfX8Mcff5zMzEwuvfRS1q1bxxdffMH5559Py8GDQP9kbADp8+cDULZmTZfH2mtqMEVEEKI5j3SX6MxMwuLjqd22rUfnQ+dT2sFCCJEGXAtMl1Jm41LJLwQeAh6TUh4L1AB6MeWVQI22/zHtuD7FSGD7F3AHsA74Vtu+CeagFIq+wJyUxDiPjti+CmsDRVVVFY2NjWRmZgJgufJKTGFh7POjGPTG+sILNOzbx5S77243JTh8+HBuueUWdu/ezWeffcZ5553HCy+8wC9+8Qu3p2CV3U5sSAhTs7MN9x3zxF5T0+3Apisjj2hO/7Gxsbz88suUlJTwk5/8BCklr732Gj8UFGAKD+/xulVviRo9mmHTp1P67rtdFk+31tX1OFsDV4aYMHVqrzwj9WJwtL9bxKhRQXvPehEKRAohQoEoXPXMPwHe0Z5fASzQ/p2rPUZ7fp4IhiKrE4wEtgQp5QrPDeifd6FCEUCEyQSaoOHkf/6TuStXBqRnli8KtcxszJgxgEuGf8zPf07pqlU0efkMetNYUsKep55i5DnnMPyMM3weI4Tg9NNP57XXXmPjxo3tnqvVTHubtOyou9h6kLFFjhpFWHw8dR5NRy0WC7GxsTi08Rw4cIDPVq0iLDk5KEpUo6Tl5tKwb587CPvDXlvbq8AGrnq2I3v20NbY2KPzhclErMXifjzj2WeD9p7VkVKWAcuAElwBrQ5XglMrpdSVMKWAnkqmAT9o57Zpxwc98npi5LdxmY99iwI8DoWiX2goKiIkMpLE447zWVgbKIqKigDcGRuAZfFiAKzLl/s9T0rJ93ffjQgNZfIf/2joXsOHD2+nqtQDm+jhh6m9psaw64iOEMItINGx2WzUaetUOhE2GyHBzzY6ZdR552EKC6PojTc6ldC31tYS1svAljBtGjid7QJ+d2mtq3PXQ8q2tkC8Z0OFEN94bIs9nxRCJOLKwsYAo4BoBritYmd1bL8UQuQBY4QQazy2z4DqvhuiQhE8GvfvJ3rMmKB+4wXfgS1q1CjSL7iAkrff7mB5pdcqFb/+OhWff86E664jcuRIQ/fyVlVGpKQAEN0DSbjDZsPR2NijqcL4rCzq9+zBqWXFvpzph0dEENHPBr5hsbEkTp9OyVtvdSqht9fW9nrK1C0g6cU6W4tH49iWwPRha5NSTvfYvL9pnQkUSikrpZStuJanTgYStKlJgHRAV7WU4XKoQns+HuhT2WZn/5u/Ah4Bdmk/9e3/gLODPzSFIvg0FBYS4xFsgkVhYSHDhg0jLi6u3f5jf/MbnK2t7HnqKXe24Gxr48iePXxxwQXk33knIiyMpNmzDdcqeasq/7FyJQCtPZCE27VzujsVCRA3eTJOu50GqxXw7UyfajYT7xXs+hpbVRX1u3d3cIXxltC31tb2WOqvY05KImr06F6ts3l+Cepud/QeUgLMFkJEaWtl84AdwGfA/2jHXAbodRNr+HGm73+AT2Vv3Z+7iV8TZK1WrRjw77WjUAxiHDYbTaWlpGnKuGBSVFTULlvTic7IIGXuXIpee42iV18lPCmJ8UuWsPuJJ9zehLK1lW9+9zvmrlzpzr66wtMoty0lhXygpZsNR8HDdaQHgS1ecyCpKyggbuLEdgHXZrMRYrOx9dxziexnQ1+n3e62DdPxltBLKQOSsYFrOrK6my1zPPEMZi2HDnV6rHQ6sVVV+TVnNoKUcqMQ4h1gC9AGbAWWA+8Dbwoh7tP2vaCd8gLwihBiH67ZvYXdumEAUC79iqOWppIScDqJ0QQdwcRfYLNVVbkk8doXWntVFd/fc487qOn0plYpNCqKkKiobnfSBg/XkR4EtpgxYwiJjGy3zuapyozTXnN/Sf3dYwoPJ8LLcd9bQu9obES2tRHey4wNXIGtpby8x9OIemALjYnpNGMLpEuJlPIuKeVEKWW2lPJSKaVNSrlfSjlTSnmslPJiKaVNO7ZFe3ys9vz+Hr3QXqACm+KoRa8hixk7Nqj3kVL6DWxOux2b1wfc5DvuwOz1Yd/bWiVzcnKnPdn8oWds3RWPAIiQEOImTmwX2Dxx17D1c8ZmTkpi5vPPI7TWP77KPnQD5LAAZGyJ06YBPe+obTt8mJCoKKIzMjoNjraqKjZefvlR6VLSZWATQuQIIVQAVAw5GrXAFt3LjK2rDtgVFRU0Nze7pf6e+Cq4Pfz118z6+987bVzZXXS/yO7iXmPr4Qd6XFYWR3bs8Jkl6NNofd2yxhu9n1rynDlEZ2b6LPtwO/sHIGOLnzwZERraYwcSW2Ul5uRkzKmpnQY2X1+a+sKlZCBgJGD9AtgrhPiLEGJisAekUPQVDYWFmJOTCYuN7fE19FYwusuHr95pvhSROr66L0+44QZitcaV89atC0h9nTk5uWeBrboaERLSY9FEfFYWbQ0NNHl0FNDRA5u5n1WR8GN9WMuhQ5iTkzv8rlsDmLGFREQQN2FCrzI2c0oKEampHQKXJ6bw8A5/t2C7lAwUjPRjuwQ4HrAC/xBCfC2EWCyE6PmngUIxAGjYv5/oXk5DVlRUcO6557pdPvQO2BUeHzh6cbavwObZfdkziJlCQzttXNldzMnJPZqCstfUEJaQ0OP7uwUkPqYjmw8eJHzYMEK6MGHuK6LS03E0N7uzVE8CmbGBa52tdvv2Hq13tRw+TIQe2Kqq/HYLMCclMeLsHwXswXTWGWgYerdKKY/gskZ5ExgJXABsEUIsDeLYFIqg0hgAqX9zczPl5eXt9hUXF7drBdNZxgZdd18OBObkZOw1Nd1umdIT1xFPYidMQISE+CxIbjl0qN+FI55EjR4N4DO7bO1Fk1FfJE6bRltDAw37u6+r8JyKREq/mbgwmXDabESMGBGwzH+wYGSNbb4QYhXwXyAMmCmlPBeYhqumTaEYdNhra7FXV/daOPL222932OfdCqaoqIjk5GRiYmJ6da/eYE5OBik7yNq7oieuI56EmM3EHHusT7uqARfY0tMB34Gtty1rvEnooYDEYbPRWluLOTnZXdje2XRkc3k5UenpQf3SNBAx8iovwuXgPEVK+bCUsgJAStnEj27OCsWgwi0c6UVgO3jwIA8++CAzZswgVlunO+aYYzq0giksLPSbrfUV4cnJAN1eZ+tJyxpv4rOyfE5Fthw8OKACW6Qe2EpLOzxnr6sjNCYGk6ac7C0xFguhMTHdFpDo06T6Ght07j7SUl5u2LFmKGEksF0NfAkghBivZXBhAFLKT4I5OIUiWOhTQL2pYbvxxhtpbm5mxYoVPP300wA8+uijHVrBFBUV+VRE9iXm3gS2XmRs4FIB2ior21lBOWw27NXV/S719yQ0KorwpCTfU5HaWmOgECYTCVOmdDtj0/9+5pQUzFqxvr/AJp1Omg8eJEIFNp+sAyK0njwfApcC/wjmoBSKYNNQWIgICXGvq3SXDz/8kDfeeIPbbruNSZMmkZubS0hICFu3bm0X1JxOJ8XFxf2esemCge4ENulwuNw2ehnY4jwcSHT0wuKBlLGBa53NX8YWKOGITsJxx3Fk1y4cLS2Gz9H/fhEpKa4vK0L4LdK2VVUhW1uJ9Co+PxowEtiENu14IfCMlPJiYHJwh6VQBJfGwkKiRo/u0dRSc3MzV199NePGjeP3v/89AHFxccycOZNPPmk/iXHo0CFsNlv/B7YeZGx2zUU+EFORQLt1Nl3qP+ACW3q6z8DWWlsbEKm/JwlTpyLb2vwWsPtCz3rDk5MxhYURPmyYX1utFk3UpKYifSOEECcBv8LlDQauDqoKxaClobCwx8KRBx54AKvVyjPPPEOERzfln/zkJ2zevJkjR46493n3YesvQmNiMJnN3QtsvXAd8SQsNpaoY45p9wHuLs4eQFOR4MrYmg8cQGqtfnTstbUBz9gSjzsO6J6ARM/O9Aw8Yvhwvxmb3udPBTbfXAf8HlglpSwQQozF5eqsUAxKpNNJY1FRjxxHdu7cyUMPPcSvfvUrzjzzzHbPzZs3D4fDweeff+7e15XUv68QQnSrlk06nT9K0U2mHtVbeRKfldVuKnIgZ2yyrY1mr6asgTJA9iQiNZWIESO6F9gOHyYsPt5d+xeRktJlxqbW2HwgpVwnpZwvpXxIe7xfSnlt8IemUASH5gMHcNps3RaOSCn53e9+R3R0NI888kiH50866SQiIiL49NNP3fv0wObdh6w/MOo+opvnbr/9dgAK7ruvx+a5OnFZWTSVlNBaXw+4FJGm8PCACjICga9aNul00lpXFzCpvyeJxx3XLWWkrbLSLRoBl2tLi5+Mrbm8HFNERMAD8mDASB1bihDiYSHEv4UQn+pbXwxOoQgGDT2U+q9YsYLPP/+chx56iOE+Mo2IiAjmzp3bbp2tsLCQ4cOHExUV1btBBwBzSoohI2RbVRWbFy9217zZKit7bZ7r7UDScugQESNG4GrvNXCI8iH5b62vD8haoy8Spk6lqaTE3UWhK2yHD7vXS8GV9dkOH+4wdQquwBY5cuSA+x0bIc9i6dBSzdc+fxiZinwNV7PRMcA9QBGw2egNFIqBRmMPpP6HDx/mpptuYs6cOVx11VV+j5s3bx75+fluSy1/rv79gVEjZKfd7naE1+mteW78ZJfeTBeQNA+w4mydyJEjwWRql7G5fSKDkLEldHOdTXcd0YlITQWt55o3zQcODOb1tU0G9/nESGBLklK+ALRKKT+XUl4B/MToDRSKgUZDYSGhMTHtpnS64pZbbqGuro6//e1v7eT83sybNw/APR05oAJbcjK26mqf3+49MYWHY/IQxUDvzXMjUlMxJye719kGWnG2jik8nIjhw9tlbPYA22l5kpCdDSaT4Y7aLZoBsk5ntWyDsTg7z2JJzbNYpgGReRbLlDyLZaq2zQUMT3sYCWyt2s9yIcR5Qojjgd7JpBSKfqShsJDoMWMMT9GsW7eOl156iRtvvJEpU6Z0euwJJ5xAfHw8n3zyCQ6Hg+Li4n5XROqYk5PB6XSrHf1Rm5+Ps6WF0Lg4IHDmuXGaA4mUcsDZaXkSNXo0zZ5TkXpgC8J6YGh0NLHjxlGzbVuXx7Y1NuJobGzXRV3/HXrbajlbW2mpqBiMNWznAX8F0oFngKe17XbgDqMXMTJneZ8QIh6XL+RTQBxwQ3dHq1AMFBr372fY9OmGjrXb7fz2t78lIyODO++8s8vjQ0JCOP300/nkk08oLy+ntbV1QGVs0HGdxhOHzUbBvfcSPXYss1esACkxhYdjTkrqtc9g/OTJHF6/HltlpducdyASlZ7O4a++cj92NxkNktAlcdo0yj/8ECllp1+23K4jHn87sx9brZaKCpBy0Ckic6zWl4CX8iyWn+dYrR2NWA3SZWCTUr6n/bMOOKOnN1IoBgKOlhaaDxwwXMP28MMPs3PnTt577z2io6MNnTNv3jxWr17NZ5+5qmIGYmDzh/X552kqKWH2yy8TFeBv+/FZWUiHg8p164D+bzDqj6jRo2k5dAiHzUaI2RzUjA1chsglb79NU3Ex0Z28VzzttHQi9L+plzKyefAXZ7+bZ7H8HMjEI07lWK0PGDnZiCpyvBDiEyHE99rjqUKIPxq5uBDiHCHEbiHEPiHEbT6ef0wIsU3b9gghaj2ec3g8t8bI/RSKrmjU5PedfYDoWK1W7rvvPi666CLOO+88w/fQ19lefPFFoP+Ls3W6CmxNpaXsfeYZRv7sZ6ScfHLA768rIw9pAX/ATkWmp4OUNGsFzvbaWhCCMG1qNtDoTv81Xayz+crYTOHhPt1Hmgd/cfYqXE2uQwGHx2YII1ORzwM3A88BSCm3CyFeB+7r7CQhRAiuudGfAqXAZiHEGiml235ASnmDx/FLcTU01WmWUh5n9IUoFEZwmx93kbFJKbn66qsJCwvjiSee6NY9Jk2axIgRI/jvf/8LuBz/BwJdBbaC++5DmExM1mzCAk3UMccQGhNDxRdfAAzcqUiPWraYMWNczVbj4hAhwTFcih03jpDISGq3bSN9/ny/x7ldR7xET+aUlA61bEPATisjx2rN7unJRibNo6SU3jJLI90KZwL7tIJuO64mpbmdHP9L4A0D11Uoeoy7hq2LjO2tt97iww8/5L777iMtLa1b9xBCcMYZrln71NRUamtrcfbSuSMQhMbGYgoP9xnYDv33vxz86CPGL10aNMGBMJmImzQJR2MjgLvtykDDu5YtWMXZOqbQUOKzs7tURrZUVoLJ1MHiLCI1tYN4pLm8nLC4OEL7sQdgL9mQZ7Fk9fRkI4HtsBDCAkgAIcT/AOWdnwJAGuDZ/6FU29cBIUQGrjo5z8LvCCHEN0KIDUKIBQbup1B0SeP+/USMGEFoJ+tltbW1XH/99Zx44olcc8013b6H0+lkwoQJAFRUVDB79mzy8/P7PbgJIQj3UcvmsNn4/p57iB47lrGXXx7UMejTkeHDhvWqfCCYRAwfjik83F3LZq+pCbp7R+K0adQVFHRaK2irrMQ8bFiHzDEiNbWDeKS5vHzQCUe8mAVszbNYCvIsli15FsvWPItli9GTjUxFXgMsByYKIcqAQlyGyIFkIfCOlNJzDjVDSlmmeVN+KoTIl1JaPU8SQiwGFgOED9D/JIqBg6Otjbrdu4kYOZL6AweISk0lJLTjf4Hbb7+dyspK3n//fUJ6MP1UUVHB888/735cXFxMbm4uGzZsYEQ/T7/5stVyC0ZWrAh6sNFb2IQnJdFSWRkQtWWgESYTkaNGtc/Ygmz9lTBtGk67nSO7dpEwdarPY2xeNWw65tRUbJWVSKfT/btsHoQ1bF70Kpkx4hW5X0p5JpACTJRSzpVSFhu4dhng2ewqXdvni4V4TUNKKcv0+wP/pf36m37McinldCnl9FAfH1AKhY6jrY2anTup37WL2q1b2bhwIXW7duFoaz+rvnHjRv72t7+xZMkSTjzxxB7dy2azUebl3FFcXIzNZuvx+AOFtxFyU2kpe599lpHnnkvK3LlBvbd0OgnRMuWGvXv58qKLeu1BGSyiRo/+MWMLggGyN7oDSWe+kf7KNCJSU1298zxsuQa56whAs5/NEIa/KkkpG6WU9d0Y2GZgnBBijBAiHFfw6qBuFEJMBBKBrz32JQohzNq/k4GTAeNNixRHNU6nk4MHD1JcXMzBgwdpa2ujbM8etv72tyAl4LKI2nL11TR5TOG0tbXxm9/8hpEjR3Lvvff2+P5ms7mD6XFGRgZmzZG9P/HO2Aruuw8hBJM1w+NgYquqYscDP6q1m8vKeu1BGSw8+7K1BqFljTeRI0diTk7u1FrL205Lx7uWra25mdaamsFYnO3JJ8DH2s/1QAnd6CoTtDkAKWUbsAT4D7ATeFtre/MnIYSn9Gch8KaU2ieOi0nAN0KI73C9mD97qikVCn84nU7y8/OZPXs2mZmZZGdnM378eBpqamjxakXSXFaGbG11P37iiSf47rvvePLJJ4nrhbQ7NTWV1atXu4NbRkYGq1evJnUAiCXMycnYq6qQTqdbMDJuyZI++RB02u20aDJ0nd56UAaLqNGjaa2pofXIEVqPHAl4k1FvhBAkdOL0L6X0OxUZ4WWrpb/PB/MaW47VOinHas3Sfo4B5gCfd3WeTlDn76SU/wb+7bXvTq/Hd/s47yugc+8ihcIHFRUV5ObmUlzsmi2vqqriyJEjRMXFEZaQ4C62BZdVlNTWJEpKSrjzzjs5//zzufDCC3s1BpPJxJQpU9iwYQM2mw2z2UxqamqnHpN9hTkpCelw0FJRQcGf/kT02LFYrriiT+5tCg8nMi2tncFybz0og4WujKz7/nsgeMXZniRMncqhjz92BVKvL1atR47gtNt9BzYvW60hUMPWgRyrdVOexfJ3o8cbCmxCiDl4VYBLKV/u9ugUiiBjs9ncQU2ntbWVqOHDSZ47l/L33wcpiUxLY8z993PLfffxf//3f1xzzTVIKXnyyScD0ubDZDL1u1DEF+Ga32P+XXfRWFzMrJde6rPAYk5KYsby5WxevJjmsrKAeVAGA72WrVYLbH3RN87dUXv79g7rnXoNW4SvqUivjG0IuI6QZ7F49vw0AScCvjuq+qDLwCaEeAWwANv4sfJbAiqwKQYc+vqWZ3DLyMjA6XRir64mdsIETnjmGURYGF9t386LL77ICy+8gMPhICEhgSNHjuB0OgdEdhVopNOJo9m1/n7o448xRURgTk1tp6YLJsJkIm78eOauXInTbg+YB2UwiNQztvx8oI8yNs1gu+a77zoGNh92WjohZjNhCQnu4OfunD0Av1h1A88X2oZrve2fRk82krFNB7K81sAUigFJamoqr7zyCqeeeirQfn0r32olec4c4rS1r2kmE8OGDXP3TqutrR0wsvxgYKuqYvfjj7sfO1ta2Lx4MXNXrmznGB9MhMnUZ/fqDeGJiYRER7sztr4IbGFxccRYLD4FJG7XET/m1REpKW5breYDBzAnJxMyAMRKPSXHar0DIM9iidQeG1ZEgrHA9j0wAmNF2QpFv2IymairqwPg9ddf54wzziA1NRVHQwMthw4RO26c+1ibzeYOajoDRZYfDJx2e0eHigEq3uhvhBBEpadTv3s30DdTkeBaZ6v84osOTv+dZWzgUkbqtlpDoDgbzXVkBTBSe1wGXJ5jtRoSERqZA0gGdggh/iOEWKNvPR6xQhFkvv76a0JCQpg/fz4jRozAZDJRv28fQLvANpBl+cFAF294MlDFGwMBfZ0N+iZjA9c6m+3wYbcARMdWWYkIC/Nr7RWRmvpjxnbw4KBeX9NYDtyeY7Wm51it6cAftH2GMBLY7sZVBf4A8IjHplAMSNavX8/xxx/frs1MgxbYYo491r1vIMvyg4Eu3tCD20AWbwwEdGWkCAkhNDa2T+6pu454T0e2aDVs/oRNEamp2A4fRjqdQSnOFkIkCCHeEULsEkLsFEKcJIQYJoT4SAixV/uZqB0rhBBPal1dtgshTujBLWNzrNaP9Ac5VuvHgOE/gpF+bJ8LIYYDM7Rdm6SUHfuQKxQDgNbWVjZt2sTixYvb7a/fuxdTRARRHhnLQJblB4PBJN4YCOiBLSw+PiBKWSPETZyIKTycmm3bGPWzn7n32yorO12bNKekIFtbaSopwdHYGIy6xCeAtVLK/9EMN6JwdbX+REr5Z60t2W3ArcC5wDhtmwU8q/3sDkV5FsvvgVe0x5cARUZPNqKK/DnwMC5bKwE8JYS4WUr5TjcHqlAEna1bt9Lc3MzJXv3E6vfuJcZi6WAgO1Bl+cFisIg3BgLuwNZH05Dgmi6Onzy5g9O/raqKyE7ep3otm97TLZAZmxAiHjgVWASgdWuxCyFygdO1w1bgihG34uri8rImONygZXsjpZTd0WlcAdyLqw5aAl9o+wxhRDzyB2CGnqUJIVJwSS9VYFMMONavXw/QMbDt20fSzJn9MSTFIEWfsg2NjOxTw+aEadMoeestnG1tmDQPXFtlJQnZ/tuT6bZatdu2Ad12HQkVQnzj8Xi5lNJzPWsMUAm8JISYBnwLXAcM9whWBwG9c6y/zi6GA1uO1VoFXN2dF+GJkb+SyWvqscrgeQpFn7N+/XoyMzMZ5TEV01pfT0t5ObEe62sKRWdIp5O2lhYA6goK+tSwOWHaNBzNzdTv3esai8OBrarKryISfrTV0i25upmxtelm8trmLdIIBU4AnpVSHg804pp2dKNlZwErCcuzWNbmWSwJHo8T8yyW942ebyRArdUUkYuEEIuA9/GyyVIoBgJSSr788kvmehW3urtmq8CmMIitqoqt11/vftyXhs2J06YBP2Zf9poacDo7DWx6xnZkxw5ESEigm7iWAqVSyo3a43dwBbpDQoiRANpPPQHqTmcXfwzPsVrd/nc5VmsNYHjh0EjbmpuB54Cp2rZcSnlrNwepUASd/fv3c+jQoQ7TkA3aN19Pqb9C0RlOu72dpyX0Xc1f1DHHEJaY6F5n0+vTOgtsoZGRhMbG4rTbiRg+vMNacm+QUh4EfhBCTNB2zcPVbWUNcJm27zJgtfbvNcCvNXXkbKCum+trAM48iyVdf5BnsRzTnZMNeUVKKf8F/KubA1Mo+pTO1tdM4eHt6pIUis7oT8NmIQSJU6dSo2Vs7uJsP64jOhHDh9NQXx+s4uylwGuaInI/cDmuxOhtIcSVQDHwc+3YfwM/A/YBTdqx3eVOYH2exfIpLtHi6cDvjJ6s1soUQ4b169cTHx/P5MmT2+2v37eP6DFj3AvxCkVX9HfNX8K0adTv3UtbQ0OnBsie6OtswSjOllJu09bfpkopF0gpa6SUVVLKeVLKcVLKM6WU1dqxUkp5jZTSIqWcIqX8pqvre5Njtb4PzMSVBb4LzMyxWj8wer76n64YMqxfv56TTjqpQx1aw759JGjrFgqFEfq75i9h2jSQktrvv//RJ7KLMg19nW2QNxh1k2O1HsIV1LqNob+SECLSY35VoRhw1NTUUFBQ0GEasq2piabSUqWIVHQbveYvKi2NiJSUPi1k93QgsR0+TEhUFKEeTjreSKeT0JgYAEJjY/tEvTmQ6fIvJYTIwdWyZq32+DjlFakYaHz99ddAx/W1hv37QUpilHBEMYgwDxtG1DHHUPPdd9g0Oy1/SKeTI3v2cOC99wAofOmlPitNGKgYmYq8G9dc53/BNdcqhBgTxDEpFN1m/fr1hISEMNOrCFv3iFQZm2KwkThtGlWbNxOdmdnpNKStqorNixfTqnW1sFdX93k7okCRZ7HEdfZ8jtV6xMh1jAS2VillnZdXmurNphhQ+DI+BpdwRISGEu3l4q9QDHQSpk2jLOW2jm0AACAASURBVC8Ph83WqWtOf5YmBIECXPHFlzmnBAzJ/o0EtgIhxP8CIUKIccC1wFdGR6lQBBOn00lZWRkbN27kkksu6dD9un7vXpciMiysH0epUHSfxOOOA6C1pqbTzKs/SxMCTY7VGpCaHCOroUuByYANeB2oA67v9AyFog9wOp3k5+czc+ZMWlpaePfdd8nPz8fpsbbQsG+fmoZUDErisrIQ2heyztbY+rs0IVjkWSzxeRbLCXkWyxx9M3qukbY1TbiMkP/Qm0EqFIFmz549nHHGGdTU1ABw+PBhcnNz2bBhAyNGjMBhs9FYUkJaTk4/j1Sh6D6msDBijz2WIzt3YoqIQDqdPpWZ/V2aEAzyLJYrgRtxmSfn42qbtoEfuwl0ihFV5EdCiASPx4lCiP/0aLQKRQAoKCjgt7/9LSeccII7qOkUFxdjs9kATRHpdCqPSMWgQ1c6NpaUAGBdvrxTpWN/liYEieuB6UBRjtV6CnAiLgN+Qxh59clSSrcZpZSyBhiaLYYVAxaHw8Hq1auZN28e2dnZ/OMf/2DBggWM9HJZyMjIwGw2A8ojUjF40ZWOjsZG4EelY1+YMA8QWnKs1maAPIslPMdqLQAM11IbCWxOIYRbiSKEyECpIhV9RE1NDcuWLePYY49lwYIF7NmzhwcffJDS0lJeffVVPvjgAzI0xWNGRgarV68mVXNgqN+3DxESQnRmZj++AoWi+wwxpWNPKNfa1uQB/8mzWFbi6jJgCKONRr8UQnyOS4J5CrC4JyNVKIxSUFDAU089xSuvvEJTUxOnnnoqDz/8MAsWLCDUw/NxypQpbNiwAZvNhtlsJjU11a2KrN+3j6iMDEK0DE6hGCwMJaVjT8ixWudr/7wjz2KZB8TjaplmCCPikbVCiBOA2dqu66WUh7s9UoWiCxwOB++99x5PPvkkn376KREREfzv//4vS5cu5ThN+uyNyWRixIgRPp9TikjFYEVXOm5evJjmsrIho3TsijyLJTrHam30KtTerP0041Lnd4lRE2QzUK0dnyWEQEq5zvBoFYpOqKmp4YUXXuDpp5+mqKiI9PR0HnzwQa666iqSu3A094V0Omk+eJDGoiJSTjnFr5pMoRioDEWlo0HeAc6lfaG2509DBdrC1dG7kwOEeAj4hXYjXZIjpZTz/Z/V90RHR8tGbaFVMfBwOp1UVFS0mzLcuXNnh+nGpUuXdphu7A66mmzj5Zdjq6ggLDGRk159lbjx44+GDwWFotsIIZqklP4dlvuYPItFACNzrNYDPb2GkcC2G5gqpTSUAvYXKrANXPRC6tzcXIqLi0lJSWHMmDFs2rTJ0HRjd2iprOTLiy7qsDYxGH3zFIq+YKAFNoA8i+X7HKs1u6fnG/lavB8Iw+DcpkLhTUVFhTuoAVRWVlJdXc3tt9/ODTfc0KPpRn8oNZlCMSTYlmexHJ9jtW7tyclGAlsTsE0I8QkewU1KeW1Pbqg4+rDZbO6gpuNwOFi8eHFAgxooNZlCMZjJs1hCc6zWNuB4YHOexWIFGtHW2HKs1hOMXMdIYFujbQqFIaTTia2qyr3oHR0VxbBhw6iurnYf41lIHUjMSUlM+/Of2XDppcDQ8c1TKI4SNgEnAL3ScBiR+6/ozQ0URxe6eGPTVVfRUl7uCizPPceck07io48/xmazdSikDiTCZKKlvByAmX//O/HZ2UeLmkyhGAoIgByr1dqrixgQj4wDHgSygAh9v5RybG9uHGiUeGRg0FJZyRcLFtBy8KB7X2RaGiE33cSB+nrmzp3boZA60Gy54QYq16/nrA0bVEBTKLpgIIlH8iyWUuBRf8/nWK1+n/PEyFTkS8BdwGPAGcDlGLPiUhyFOGy2dkENXOKNSSNHcnpODl4NawOOdDio+OILhp92mgpqCsXgIwSIwXejUcMYCWyRUspPhBBCSlkM3C2E+Ba4szc3VgxNKj77rMO+yLQ0omJjgx7UAOoKCmitqSHl1FODfi+FQhFwynOs1j/19iJGvtLahBAmYK8QYokQ4gJcEVWhaIft8GF2P/44cRMnEhobC0DEyJEc++c/M7yPrK0q1q0DIUiZO7dP7qdQKAJKQL79Ggls1wFRwLW4euJcClwWiJsrhhb5d92Fo6mJEx5/nMl/cPWlFQsXsqOmhpAeOol0l4p164ifPFmpIBWKwcm8QFzEiCpSN6BswLW+plB04MAHH1C+di0Tb76ZaIuFw5q0/7lly3h19+4+GUPrkSPUbtvGsb/5TZ/cT6FQBJYcq7W666O6xkgH7elCiFVCiC1CiO36FoibKwY30umkpbKS2oIC8u+4g/jsbMZccQX5+fnMmT+fVilJam1l165dOP10/g0klV99hXQ41PqaQnGUY2R+6DXgZiCfH02QFUc5er2a3lYDIPvee6mtq2P+/PkcrKjgQHo6yQ4Hubm5bNiwwW97mUBRuW4doTExJAbAc1KhUAxejKyxVUop10gpC6WUxfoW9JEpBjR66/r/396Zx0dVXv//fSY7CUsIIBAg7CIKKIsgoCJo+VZF3Ota5VtFrbZa/bl+pVUrFa0VbesGLlWrIgoVtYtVWhVEEBQQWWQ1gbCHsCRkn/P747kzTkISwpKZyeS8X6/7ytx7n5n5ZHIz5z7nOUto6aqVjzxCQkkJOTk5AGwsLaVjYiLZ2dmUlNRvqVFVZftnn9Fq6FB8CQn1+l6GYUQ3dZmx/UZEXgCq1oqcWW+qjKinpmLDPr+fhIQEysrK2FhWximpqXSvp/JZoRSsW0fxli20ufnmen0fwzCin7oYtnFAL1yF/2A/NsAMWyPGl5hIUuvWlOzYETyWkplJ/r59lJWV0apVKzYWFREnwhtPPlkv5bNC2f6Z63tr62uGYdTFsA1S1WPrXYnRoEjKyKDZccexY+dOUA3WhLzqzjsZMmQIM2fOZM+qVay57jra+Xz1Vj4rUHB560cfkZqVRUq7dvXyPoZhNBzqYtjmiUhvVV1R72qMBkNRbi47P/+crCuuoPsNN+BLTOSN997jg7//nblz59KuXTvatGzJGp+PgiOrZ1ojwYLL119P8ebNxKWmsnf1auuWbRiNnLr89w/B9WP7zgv1X2bh/sb6l14Cn48eN91Ek8xM9vj93HrbbVxwwQUMGzYMgLikJFI7dao3wxYIYCne7DrIVxQWsnD8eEry8url/QyjMSMicSKyWEQ+8Pa7iMgCEVkrIm+JSKJ3PMnbX+ud7xxurXWZsf1PvaswGhSl+fnkvP02mWPGBF1/DzzwAMXFxUyaNKnS2LTu3dm3dm296LBu2YYRVm4FVgLNvP1HgcmqOk1EngN+Bjzr/cxX1e4icpk37ifhFFrrjE1E4oAPQ8P8Ldzf+P6vf6WiqIiuP/sZW7duZfbs2UydOpXx48fTs2fPSmObdu9O4YYN+MvKjrqO3PcO7H9r3bIN4+gjIh2Ac4AXvH0BRgLveENeAc73Ho/19vHOj5JwVEAPoVbDpqoVwHci0ilMeowop6K4mA2vvkrr00/n+5IShgwZwplnnonf7+fiiy8+oMJIWrduaHk5hV5u29FAKyr49qGHWPX447Q8+WSSvVmjdcs2jMMiXkQWhWzjqxnzJHAXP0TGZwC7VbXc298EZHqPM4GNAN75Pd74sFEXV2Q6sFxEvgSCnTxV9YhadxsNk40zZ1K6axctL76YH40dS3a2m7yrKuPGjTugwkhTr6p/wdq1NO3W7Yjfv7yggK9uu43t//0vXf/3fznurrso3b0bf2mpS0GwbtmGcaiUq+rAmk6KyLnAdlX9SkRGhE/W4VMXwzah3lUYDQKtqGD9Cy/Qom9fEnv3Dhq1ANVVGEnzjNm+tWtpN3r0Eb3//s2bWXj99exbs4Y+v/0tna+4AoDk1q2P6HUNw6iVYcB5InI2kIxbY3sKaCEi8d6srAMQWPDOBToCm0QkHmgOhDWi66C3tqr6KbAKaOptK71jRpQSKE68PzeX4h070KNUgHjrxx9TmJ1Nt+uvJyEhgeTk5Erns6qpMBKfmkpK+/YUHGEASf7Spcy94AL25+Yy+KWXgkbNMIz6RVXvVdUOqtoZuAz4j6peCfwXuNgbdg0wy3v8Hj+0NrvYG69hlFyn6v6XAl8ClwCXAgtE5OLan2VEikBu19yLLmL2aacx96KL2Lt69REbN1Vl7ZQpNOnUiXajR/Pyyy9TXFxMy5YtAWfUZs2aVW2FkSONjNz8z38y7/LLiUtJYfjbb1sTUcOIDu4GbheRtbg1tBe94y8CGd7x24F7wi1MDmZIRWQpcJaqbvf2WwMfq2q/MOirM6mpqVpYWHjwgTFO8Y4dzLngAoq3bAkeS8nMZPiMGUfksstbuJB5l11GnwcfZGNWFiNGjOCSSy5h8uTJlJaWkpSURJs2baqtMLJ84kS+f/11zl62DImLq/N7qiprn32WVX/4A+kDBjDo2WctMMQwjjIisl9VUyOt42hSlzU2X8CoeeRRt8RuIwL4S0srGTU4Orld66ZOJbFlS1JGjODyIUPo0qULU6ZMoVmzZgd9blr37vhLStifm0tqp7oF2FaUlPDN/fezaeZMMseOpd8jjxBXz4WUDcOIDepioP4lIh+KyLUici3wd+Af9SvLOFx8iYkktGhR+aAIue+/f9juyH1r1rBt9mw6X3UV1910E9u3b+ett96qk1GDkMjIOlYgKdm1i/nXXMOmmTM59rbbOOkPfzCjZhhGnanRsIlIEoCq3gk8D/T1timqend45BmHSlJGBseMHPnD/jHH0KJfP1b9/vd8cdVVFH7//SG/5roXX8SXnMy/Cgv54IMPePzxxxkwYECdn5/mGbZ9a9YcdGzB+vXMvegidi9dSv8nn6TnL35BmHM7DcNo4NTmivwC6C8ir6nq1VibmgaB+HyU7d5NWrduDH75ZXyJiSS2bMmmGTNYPnEin5xzDr3uuIOu11xTp/Wu4m3b2PTuu6SccQZ3PvAAY8eO5Re/+MUhaUps3pyk1q0PGhm584svWPTznyPx8Zzy+uu07N//kN7HMAwDandFJorIFcBQEbmw6hYugcahU7B+PU179qRJZibJrVvji4uj06WXMuLDD2k9dCgrJk7k85/8pE6RihteeQWtqOCeDz+kXbt2vPTSS4c1g0rr1o19tbgic6ZPZ/6115J8zDGc+re/mVEzDOOwqc2w3QicCrQAxlTZzq1/acbh4C8tZf/GjaR16XLAuZS2bRk0ZQonTZ5MwYYNfDZmDGuefbbGOo5l+/bx/euv833z5izOyeHNN98MhvcfKk179KBg7VqqRuGq38+KSZNYeu+9tDrlFIa9/TZNOnQ4rPcwDMOAWlyRqjpXROYBm1R1Yhg1GUdA4caNaEUFqV27VnteROhw3nm0HjqUZQ8+yKrHH2fLP/9Jv0cfpflxx1Uam/PWW5QXFPDHTZt4+OGHGTp06GHrSuvWjfKCAoq3bSPFK7lVvn8/i2+/na0ffUTnq67i+AkT8MXXJVDXMAyjZg5WBNnPD5nlRgMgEHl4sLqMSa1aMfBPf2LgM89QvG0bc84/n1WTJ1NRUkJFeTl7srNZO3Uqcd278+MbbuCuu+46Il2hNSMBirZuZd5ll7F19myOnzCBEx54wIyaYRhHhbp8k8wWkYuAmeEui2IcOoUbNrifqansyc6uNXEaoN3o0WQMHszyhx9mzZ//zJYPP6Tr+PGs/N3vKMvPJ1GVX193nUsVOILiwoGakXmLFqGqLLn7bsoLCjh5yhSOOeOMw35dwzCMqtSl8sg+IBWoAIoAAVRV65bEFCas8ohj8V13sXn2bG7OyyM7OztY6qpPnz5B41ZRUUFJSUlwKy4upqSkhPzPP2f3889TtnNnpddMycxk8LRpNG3f/rA0qd/Pnu++Y86YMaAKIiS1asXgl16iee/eR/w7G4Zx+DTKyiOq2jQcQoyjQ/5337Fq165g5f3s7GwGDBhAs2bNKCsro7i4mPLy8hqfv+yjj9hwww2VjhXl5qJH0Ci0JC+PRTfc4IwagCoSF0eSVeU3DKMeOKhh8zqfXgl0UdXfikhHoJ2qflnv6owg6vdTkpd30L5jxTk5rCsoqHSsoqKCc889l9atW5OUlERycjJJSUmVHgd+tsjMJCUzk6Lc3ODzUzIzkYSEw9buLy2t9HoAxVu3HnGZL8MwjOqoyxrbM7iuqSOB3wIFwNPAoHrUZYQQqNi/cPx4inJzg52im/XsWcm4lezaRcXeveRXMUJZWVk89thjlRqA1kRFeTlNnnmGr3/+8+B79X/mGZpUU7W/rvgSE6s1lr7ExMN+TcMwjJqoSzTAYFW9GSgGUNV8wL6RwkhJXl7QqIFzDS4cP56SvMq9+wrWrwfgmJD1tNrayVRHXHw8zXv1YvC0aZz+n/8weNo0mvfqRdwRRCwmZWQwaMoUUjJd5/iAYbZK/YZh1Ad1+bYqE5E4QCHYtubodK406kR1rrzqKvYXeoZt3b59DBgwgLfffvugUZHVERcff9iBItUhPh/NevZk+IwZB3WlGoZhHCl1MWx/BP4GtBGRibi8tvvrVZVRCV9iIgnp6ZTl5wePVefKK1i3Dl9iIvNWreKSSy8lKysr3FJrRHy+I+oHZxiGUVcOesusqq8DdwGPAFuA81X17foWZvxAUkYGrU45Jbif6Ln2qrryCjZsIKlDB3bl53PCCSeEW6ZhGEZUUOOMTUSScfUiuwPLgOdVteY4caPeEJ+PfatWkX7SSez+9lvajR59QOAIuDW2Eq8X2/HHHx8JqYZhGBGnNlfkK0AZMAf4MXAccFs4RDVm/H4/27dvp6SkJLg+VrZrFwXr13PcXXcRl5xM/tdfH2DU/KWl7M/JIc+bxdmMzTCMxkpthq23qvYBEJEXActbq2f8fj/Lli1j7NixlaqGtNq0CYCMwYNRVVb9/vcU79hRac0qUPx4Q2Ehbdq0obWtZxmG0UipbY0tWGrCXJDhYfv27UGjBq5qyHnnncemTz4hrkkTmh9/PK2HDwdg5+efV3puICLymy1bzA1pGEajpjbD1k9E9nrbPqBv4LGI7A2XwMZESUlJ0KgFyMnJIffTT0nv35/teXnsTk0lvkULts+ZU2lcIIdt7po15oY0DKNRU6NhU9U4VW3mbU1VNT7kcVQVQI4VkpKSDgjRb5mYSEJeHi988gm9e/emS9euLNi1iy2ffEJFRUVwXMH69cS3bMmOfftsxmYYRqPGMmSjiDZt2jBr1izi4uIAVzXkvcmTAViYn0++l8c2d+dO/Lt3kz1/fvC5BevXU+51t7YZm2EYjZl6NWwi8j8i8p2IrBWRe6o5f62I7BCRJd52Xci5a0RkjbddU586owWfz0ebNm2oqKhgwoQJzJ8/n2bbtyPJyazcty84bklREQC75s0LHitYvz5YI9JmbIZhNGbqrWWxV4braeAsYBOwUETeU9UVVYa+paq3VHluS+A3wEBcKa+vvOfmE+MsW7YMgJEjR9K2bVu+W7iQpiecQGZhYXD9La+igi2qNFu8GHDFj8t27ya7RQsyMzNp4eWyGYZhNEbqc8Z2MrBWVderaikwDRhbx+eOBj5S1V2eMfsI+J960lkJ9fsp3rGD/bm5FO/Y4TpHH4WxdWXJkiUA9OvXj9L8fPauWkXb4cOZNWsWHTp0AKB58+b0PPdcCpYsoaKkJBgR+e327eaGNAyj0VOfhi0T2Biyv8k7VpWLROQbEXnH6/V2KM89qgTaw8y96CJmn3Yacy+6iL2rV1drsA5l7KGwZMkSOnXqRHp6OnkLFwLQ6pRT6NOnDwsXLqRfv3507dqVY8eOxV9Swq5Fi4IRkfM3bDDDZhhGoyfSwSPvA51VtS9uVvbKoTxZRMaLyCIRWVRbV2i/38/WrVvJzs5m69at+GswPiV5eSwYN+6g7WECY7+8/vo6jT0Uli5dyoknnghA3pdf4ktKooXXhqZt27ZcfPHFLF68GH+XLkhCAjvmzqVg/XokIYFNhYW2vmYYRqOnPg1bLtAxZL+DdyyIquapaom3+wIwoK7P9Z4/RVUHqurA+Br6hQWqeQwZMoTOnTszZMgQli1bht/vr+RK3J+by9rnnqNk+/ZKz6+uPQy4ElbFmzcfMLZ8//5qddSFoqIiVq1a9YNhW7CA9JNOIi4pKThmzJgxAPzrv/+lZf/+zrBt2IC/ZUv8WESkYRhGfRq2hUAPEekiIonAZcB7oQNEpF3I7nnASu/xh8CPRCRdRNKBH3nHDpnqqnmMHTuWXXl5lVyJ/xk5kg1/+QtxKSmVnl9Tp2dfYiLxTZsecHzeZZex+umnKdm585C1fvvtt/j9fre+tmcPe1euJGPw4Epj+vbtS8eOHXn//fdpPXw4e1esIH/xYvYkJwNw3HHHHfL7GoZhxBL1Zti8Mly34AzSSmC6qi4XkYdE5Dxv2C9FZLmILAV+CVzrPXcX8FuccVwIPOQdO2Sqq+aRnZ1NQklJJVeilpfT4sQTGTZ9OvFpaQAkt2tXY6fnpIwM0rp2RbwQ++T27el9//007dGD7554go9PPZWv77iD/MWLUdU6aV26dCkAJ554IrsWLQLVAwybiDBmzBg++ugjmp18MgCleXlk9e3LhRdcQJqn3TAMo7FSb+H+AKr6D+AfVY79OuTxvcC9NTz3JeClI9UQqOYRatw6duyIz+8/wJW4e8kSEjMy6DtxIl/feivH3Xlnte1hALSign2rV9Nh7Fh6/vKXwa7Q3caNY9+6dWT/9a9snDmT3HffpfkJJ9Dl6qtpf+65xHkzq+pYsmQJzZo1o3PnzqycNg1fYiLpnlsylDFjxvD1V18hcXEgAqrsnzuXJ59+GvX7rTO1YRhHDS+o71XgGFz61RRVfcpLy3oL6Ax8D1yqqvkiIsBTwNnAfuBaVf06nJpj/hswUM0jtFTVyJEjiU9KQqqsy6VkZiI+H8eMGoUvMZE9y5fXaCT2rFhBRVERbU47jSaZmSS3bh0c27RbN074zW846/PP6fPQQ/hLSlhy9918NHw4Kx59lP1etf6q6QJlpaVcdtlllOblsWPuXJodfzw+b0YYyogRI3j0/vv55tZbwZsNluXn892ddx5x8IphGEYVyoE7VLU3MAS4WUR6A/cAs1W1BzDb2wfX5qyHt40Hng234HqdsUUDPp+PPn36MH/+fEpKSrjnnnt44403uH3kSLS8nIT0dMry80nJzAy6HcXnI71/f3Z+8UWNr7vLC8VvOWhQjWPi09LofOWVZF1xBXkLFvD9a6+x/sUXWTd1KseMHEnrESNY++yzFG/eTEpmJhOeeop4VeZccAHFW7YQ37Qpe1evPmDWmJycTKfMTJblVo6nqSnQxTAM43BR1S3AFu/xPhFZiUu/GguM8Ia9AnwC3O0df1XdGsx8EWkhIu281wkLMW/YgGCoPMDkyZP5+wcfsHjSJDp17cqQ115DKyqCrsSAAWk1dCjfPfEEJbt2keTVYAwlb+FCmnTqxG6/n5Ls7GBTUF81MzwRodWQIbQaMoSiLVvIfvNNst94g22zZwfHFOXmkvvMM+QtWEBFYSEA5fv2sXD8eIbPmFGp9xqALymJlMzM4Boh1BzoYhiGcTQQkc7AScAC4JgQY7UV56qEmvOQw2bYYt4VWZW2bdvy6JVX0rKkhKLTTyelbdtKrsRAzlt5164A7AipxxhA/X52ffUV0q1btWkEtZHSrh29br+dYW+/fcC5XV9+GTRqAWqahaUdcwxdJk4kJdPlradkZjLo+eerDXQxDMOohfhAPrC3ja9ukIikATOA21S1Uusyb3ZWtyi5MNDoDJv6/fTKzmYbcOfrr7Nx48Zg4nZ5eXkw563P2WdTpMqaDz44wFgVrFtHWX4+z3/88QFpBNur5MHVRHxaWtAoBej/1FMHHKtpFtYyI4NH/vIXmj/wAH3eeYe0CRNoduyxFjhiGMahUh7IB/a2KVUHiEgCzqi9rqozvcPbAilb3s/Al1+d8pDrk0b3Lbjl3/+mYPVqWl95JStWraJfv3507tyZwYMH89e//pXhw4eTnZ2NH/hm/342/PvfBxirQKmrOVXWuLKzsykpKaEuJGVkMGjKlEozror0dAY9/3zlWVgN6QYAXbt14+RRozh59Gh+/9xzZtQMwzjqeFGOLwIrVfWJkFPvAYHOK9cAs0KO/1QcQ4A94Vxfg0Zm2NTvZ/Uf/0hq164MGj+e5OTkYI+znJwcxo0bR0FBQXD80qIiWouwr0oe3K5Fi4hv2ZKyKlX0k5OTyatjVKL4fDTr2ZPhM2Yw6rPPaHLffTw/cybNjj02eGz4jBk1phsAnHPOOQDs2LGDzp07H9QNahiGcRgMA64GRoa0GDsbmAScJSJrgDO9fXApXuuBtcBU4OfhFtwoDFsgrD77zTfZ99139Pj5zymrqKC4uLjSuPvuu4+OHX+YQS/1+p4Vf/NNpXG7Fi6k1cknM27cuOCxll6AyahRo5g2bVqddInPR3Lr1hQlJzPsxz8mLS0teKxqCkFV/H4/qhpsSvrqq6/WaY3PMAzjUFDVuaoqqtpXVU/0tn94JRFHqWoPVT0zUERDHTerajdV7aOqi8KtOeYNW6AK/5wLL2TZr3+NxMfTtGdPUps0qZTbBrB8+XJmzZpFoO6kr317fC1aUPrtt8Ex+zdvpmjzZjIGDUJVSUpKYsOGDSxfvpylS5fSq1cvLr/8cq644orgbPBghFYcqSvbt2/n/PPPp6KiAoCdO3ce0hqfYRhGrBLzhq0kL4+F48cHq4xoeTmLbrqJNKiUuJ2VlcWDDz5Inz59GDZsGP369WP+/Pm0Pe00dn7xRbAsViB/LWPQIDZv3kz79u3p3Lkzbdu2pWfPnsyZM4eHHnqI6dOn07dvX2aHhPTXRGgPtjr/XjWUCqvrGp9hGEasEvOGzV9aWinXC34IoQ8kbn///ffMnz+fPn36EB8fT48ePdi6dStt27al9bBhlOblDhB0TQAAEo9JREFUsW/1asAZtvi0NJr16kVubi6ZVaIY4+PjmTBhAl988QWpqamceeaZ/OpXv6LIc2tWx9KlS2nfvj1t2rSp8+8VKBUWSlZWFkkhnQAMwzAaIzFv2HyJiTWG0AcSt7Oysmjbtm0wuTorK4tt27ZRXFxMq6FDAdjp5bPlLVpEev/+SFxctYYtwKBBg/j666+55ZZbePLJJxk4cCCLFy+uduySJUsOabYGB5YKy8rKYtasWYdkHA3DMGKRmDds1YXV1xZCD9CpUycANm7cSJP27UnNymLnvHmU5udTsGZNcH2tNsMG0KRJE/70pz/xr3/9i/z8fAYPHsykSZOC62LgXIorVqw4pPU1qFwqLHTGWV3lE8MwjMZEzJfUCg2r95eWHlA6qzoChi0nJ4cePXrQatgwNs2axc4FCwBXH3LPnj0UFRXRvn37g2oYPXo0y5Yt48Ybb+Tee+/lgw8+4LXXXqNLly6sWLGC8vLyQzZsULlUmGEYhuFoFLf3dQ2hDxBw7wWCM1oNHUpFYSHrX3gBX2IiLfr2Jddbt6ttxhZKRkYG06dPD4bl9+3blxdffJFPP/0UgPbt21uovmEYxlGgURi2QyUzMxMRIScnB4CMk08GEfIXL6bZccfhS0g4ZMMGrhjy1VdfzTfffMOAAQO47rrruOOOOwC48sorLQ/NMAzjKGCGrRoSExNp164dOTk5weTuQO+2gnXr2Lt6NaVeWP2hGLYAWVlZvPHGG6SnpwcNWU5OjuWhGYZhHAXMsNVAoOt2IA9Oy8oAKC8oYOH48fTq0AGgTmts1VFWVnZAArfloRmGYRw5ZthqoFOnTuTk5NSYB5cUF0dGRgbJycmH9fqWh2YYhlE/mGGrgYBhqykPLm/v3sOerYHloRmGYdQXZthqICsri9LSUgqg2jy4J6dOPaz1tQCWh2YYhlE/xHwe2+ESyGVbv2EDgwYOPCAP7sN//zvYNuZwsTw0wzCMo49ND2ogYNiys7MPyIMrr6hg27ZtRzRjMwzDMOoHM2w1EFj7CuSyhbJ161ZU1QybYRhGFGKGrQaaN29O06ZNqzVsh5OcbRiGYYQHM2w1ICJ06tTpgJ5nAJu93m5HEhVpGIZh1A9m2GohKyvLZmyGYRgNDDNstRDIZatKbm4uCQkJtGrVKgKqDMMwjNoww1YLnTp1Ii8vj8LCwkrHc3Nzad++veWcGYZhRCH2zVwLNUVGHqzBqGEYhhE5zLDVQmguWyibN282w2YYhhGliKpGWsNRQUT8QFE1p+KB8jDLqQvRqCsaNYHpOlRMV92JRk0QXl0pqhpTk5yYMWw1ISKLVHVgpHVUJRp1RaMmMF2HiumqO9GoCaJXV0Mhpqy0YRiGYZhhMwzDMGKKxmDYpkRaQA1Eo65o1ASm61AxXXUnGjVB9OpqEMT8GpthGIbRuGgMMzbDMAyjEdHoDJuISKQ1GIZhGPVHozNsqqpm3Bom9ndr+FT9G9rf1KgPGo1hE5HrRGSliPTQKFpYFJGTvC015FhU/LOLSFykNVShiYikikhniKrPqYOItAjZjxZdCeJocfDRYSMRIKAp8L8YDZ+ZiCSLSNRWNo9mbdFGowge8f5p5gA7gTXAg6paICI+VfVHWFsO8CXwN2CJqi73jkdMm4j0VdVvAjoAIv05eVpeBpoBW4DfqGpehCUBICKfA0+o6oxIawlFRB4Bjsdd8++q6pwIS0JEHgPaAJuBVOA1VV0UWVUOEXkJ+FRVX4m0llBE5F6gI9AS+Bh4CXdPEPtf3odJY5mx/RZYDlwL9AYehOj4sgaeBtoDZwLjReQMEZkEdImEGBH5GbBQRKaLSC9V9auqX0TiI6Gniq5M4G6gCfBTEblURP5XRI6JoK4rgD0Bo+b9/a4WkWtFpE0EdY0DBuCu9Z3ARBGJaIFTEbkO6A88DHziPX5MRP5PRJpEWNtg4ISAURORHiIyUkTOjbCuocAFwPvAdGAYcIwZtdqJecMmIhnAYOB+Vd0N/AroLyK/8VwPEmE3yAvA34FJwHzcP/0NQOsIuZCuAW4EFgHTReQxEUlT1XIAEekVAU0AA4GnVHUtsAMYA5yBu1EZFyFNAP8P+CeAiNyHu77OBE4AfhpBXTcCD6nqV6r6CLACGBE4KSLHRUBTFvCsqq5V1X8D7+FmIC1xf8dIch/Oq4OInAf8CbgOuFJEHo6gW/4O4ElV/SfwAVAK3Bk4KSIRuQGOdmLesHncrao7RCRRVVcD/wf0Ak5Xj3ALEhGfZ1B3AcnAFar6Js5N80/gVuDEcGsCJgOfqOpjwBWenrkicqGI/BK4OpyaQvgaeMmbzf4SOF9Vb8K5cE8VkWPDLcj7svsbcK6IPAlcBvxUVa/BfQmdLiIdI6ArGXgRyA35Qv4MuNQ7/0vgknDrwnlNHhORq0SkuadhHrAU+H8ikhQBTYhIU2Ad0ExEbgYeAx7C3TA9ifOepEdAVyrO2H4LoKqluMTtvt75c/C8T0YVVLVRbriLdgdwVQQ1+EIe/xr4M/CGt38WkBAFn1M8cDrwKeDHuWsipeU84H9xawyDQo4vBjpFUFd3YCrw6yrHvwY6RFBXYsjjdOBdYJD3efWOkKbLccZsFs6LApAAzAVaROqz8nSMAF4BnqlyfD7QP4K6UkIeJwBv4ma/HwLnRPIzi9Ytousm9Y2IJKlqSZVjoo6XRUSBTRHQdScuCKJMRGaq6rdABe4O9hQAVf0oVG8YNJ0EnAosALYCW1W1RJ0L8lMRyQaWeVrDRoiuL4EFqrpNRLYCN4tIAe4L+wtVzantdepBV4qqFgGoc49eH7pOJCLPAf9V1bBeXyLSBzjNe+8V3jGfquaLyGLgH8DkwLkwajod+I86r8Sb3oxtrzfkz8BSdUsFYUVETgB6ABuAbFW9pkqE8i3AFlX9OtzaQij1tPhUtUxEFuFmvzNV9e8R1BW1xKwr0jMem0Tk0mrOBX7vd1T1kzDruhkYhVvQTwDOB1DVibi76PUikhgYHyajdg7wGm7m8QhwO3BhINjAW6esIMS3Hw6q6PodcL+IXA6sxt3xl+DWAm8Ls65TgOdE5IIq67NF3vmuuDW2+8OsaxTOBXkiME9EHvBOBa73ZbhrbnIENQUCt/aoqnrXWAJuLSmseH+nV3BBZb8A7hGR/8MFKeG5ka8D7g2zrg4iMkNEzgBQ1YqQ7yxwMzVwQXFGNcRkuL+IJOCirhbgooh2AxNU9cuQMemqmh9mXUnAQpz7YKOIHI/7p79bVT/1xqSpakGYdb0KzFLVGd6d9E9wn9taVf2tNybem71Fg67l6tYAI4KILMfdMW/ENYN8V1W/qDImVVULw6xrDi7t4G8i0gMXiHRtYGbpjWmjqtsjqGkicE0VTQmqWhYuTSHv+0dgl6o+4Bm5Y4EhQApuVrtFXN7rmjDregfogLuZXI/77vq+ypiw62pIxOqMLR2Yoqq3q+pg3PrQNBF5HoKL5zdHQFc3T0uBiMSpy1n7Dy6KLuD2uCycgrwZx0rgchHp4N1JT8HNkE4TkWe8L55wG7XadP1IRJ6WCKQgiAvh/8DT8QGwBxgnIveJSIq4cP8LI2DUTgDWeQYkDudaS8ZFuSIiZ4nI8DAbteo0JVXRdFokjJrHAqCz5+5fry7y8C2gOZ53IgJGLR0XUHYNcCFuWeB9EQncYGaIyPVm1A5CpBf56mvDBT0kh+y3BZ7DrantAzp7xyXMupIICQrB3SG+irtLXAZ0jMBnlQo8DtwCnIS3WI1zEb0LNI3Q3zBadSWFPM7EfQE9DDwLlAFnR+izGlhF29nAW97jZcBZUabpm3Brqkbf27hgpNNDjifi3H1dInV9hV7buHzEabgAm23ALZH6zBrKFpOuyFC8O3+fqlZ4+/OAOap6tzdrqginFg35wD1tzXDuyN7A66o6UcJYdSSgSURGABfhvpi/AwpwrpmhqnpmOLQ0BF3V4c1GUoCZONdWWGfdNeG55KfgXPGpqjo+wpKiRlPI9ZWJC9o6ARfMMhNX5WOCqoY9t662YDER+TMwXFXDmgbUEIn1qMjAxRsPVIhIe1yiamAxOKxWPXDBhly8Saq6R0RW4xKOfxduXQFNqvqJF231E1zC7Jm4NaSI5K1Fq64AIddWnLrF/TJcKP2AKNEVry6CLh2Xj9jNNP1AyPWVKyJ/wVVB6Qs8D8wGImJwq35HVDF0fYC7IqGrwRHpKWN9bXjuPtwi7PN47hCgpffTFyW6ArPmQd7P+DBqCbx3aL7Tj4Am4dbSwHTFB/Zx5Y6Svf3OUaTrQu/xqbik8UavqRptoUsClwNx3uO4aPg7hujK8B4Pj9Rn1tC2mHFF1jSFF5HpwCKNUBRdtOryNCTi/rkLvf2ngOaqem2kNDUwXU/gbpSurc2FFEldkdATrZpqQkRuwK31XRxpLaGIyPXA6GjT1RCImajIwJeKiPQXkZtFZLi3hrUiYDy8/UavS0QGeg8fwnNtiEtKTQnZD/u10QB1pfGDayjs11ZddEXRtRUxTVURVzz7CxFp5x06A1c6KyLXVy26RoXoirYWUlFNTMzYAsEWInIBLmlxNnAu8BFwn6ruCmdARjTrEpdL9ytcuoMAvdS18EnFuWt3hUuL6YotXdGoqSbE1Rz9XlWfE5FkVS2O5Kw72nU1NGJixhZiGM4CblfVW3HVKhJwFeqTwm3UolWXujJZk3AtMAqAt0TkDFUt9AztryUCxWhNV8PXFY2aamE6cImITFDVYghPlZ86EK26GhQxYdgAROQSXFTTseKqd6iq/gwXJt7VdP3gzhBXCf8zVe2FaxsyVUSmiEtg76NV6muaLtPVEDVVozFLRC4R1+plI3Ax0FeqKbtnuho2MWPYcBfEelzO0ygRGSgiPwayVHWl6XI157yHz+DuqFHVybhQ583AWuD6cGoyXbGhKxo1VUMP3DrfPbiiCC95xyeLq4caKaJVV4OlQa+xBXzP4pI+09RVMD8PV9C0FbAEeFlVPwvnWlY06gpZ77sRFwF2kXeXLapaLmFOVjddsaMrGjWFaAvkGQbXqbz/y0RcKH06UKGqT5iu2KHBJmiHXBj9gAeAbSLSVVV/JCIf4/qtXQKcJSLbVXVVY9ZVxXhu9n4G2mCMwiUXTwqHFtMVW7qiUVOAEIM6VVyhhkHAX1T197ju9REhWnXFCg3WFRlyYUzCtZ7YiGscCtBGVZ/GtZw4jjB2oo5GXSJysoiME5E7cN0FVESG4Lpjg4vYDHtRVdPV8HVFo6YQbYF1v1/hZkD3424sLxKRd8R1zjZdMUiDnLGJSBpQCLTDNQF8V0TuxRkMcE0o56nq33ALsY1Wl4jcj2s8uRxXwuhqXOPCVrjZZC9gparOCIce0xU7uqJRUyie5yQBV4j5dXVNXzeJyOnA00BrXEF00xVraBSUPzmUDVcN/1Gc8YjHFRBeATzine8NrAKaNXZduI4G66lcKbwv8A6u0emVuIXrcH9WpquB64pGTVX0nRLy+EpgWpXz84FRpis2t4boinwIyFHVLep6hD2Ca0XTR1w/sz8AT6vqXglvtn406roQmK2q+0QkzVuo/kZdiZ5ZwHZ1fZ3CfXdouhq+rmjUBICInArcKCK/EtfM9x2gUES2ichEEXnO0zfbdMUmDcqwiZfXoapPi4hPREYCv8c14+uOm9pPVNU/eePCEokVrbqAz4FW4qqqF6iqhvjvVwJnhkZlhRHT1fB1RaOmAGtw/dTaADcC56nLHR2N65zxd+Am0xW7NCjDhguFDURdXYu7OPKAqcA/gKdUdS6EvR5d1Ony3mcN7m/8jLhuxqhq4A56OLA53F88pqvh64pGTSHa4lV1q6q+gbu5XAycKCITcUsEv1HV91U113TFLg0qj01EWgJ/xPXlOhm4FXjPc4dMxdVYm2i6KmnLwhnaNFzL+YW4vk5jVHVoJDSZrtjQFW2aROREXJ3KFUAFzmB8gwvU8gOn4xKgHwvzjUBU6oplGpRhAxCRjrhSVAmq+rF3rAkwD7hYVddGwgUSrbo8Hem4epWDcHfT03BljxaHW4vpii1d0aRJRMbhgrZ2AAEX325cak0SLnLzOVX9o+mKbRqcYauKiLTAlfHJVdU7JQJV/BuSLsOIZUSkOS7BuT1wjaqu9Y6nq2q+6WocNGjDJq53Undcd+Xn1VU6iHiLh2jVZRiNBRE5CRd1uBgYr1HSMidadcUaDdqwBZAfatVFlfGIVl2G0Rjwglx+glu/utYL3Ig40aorlogJw2YYhlET4nrANVXVnZHWEkq06ooFzLAZhmEYMUVDy2MzDMMwjFoxw2YYhmHEFGbYDMMwjJjCDJthGIYRU5hhMwzDMGIKM2yGYRhGTPH/AW5YHHIKAe2aAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", "ax = plt.subplot(1, 1, 1)\n", @@ -284,22 +231,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig = plt.figure()\n", "ax = plt.subplot(1, 1, 1)\n", @@ -318,22 +252,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, axes = plt.subplots(ncols=1, nrows=4, constrained_layout=False, figsize=(3, 6))\n", "pars = behav.groupby(['session_start_time', 'probabilityLeft']).apply(fit_psychfunc).reset_index()\n", @@ -369,22 +290,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, axes = plt.subplots(ncols=3, nrows=4, constrained_layout=False, figsize=(8, 8))\n", "didx = 0\n", diff --git a/notebooks/notebooks_archived/citricacid_performance.ipynb b/notebooks/notebooks_archived/citricacid_performance.ipynb index f3878b06..a32987f0 100644 --- a/notebooks/notebooks_archived/citricacid_performance.ipynb +++ b/notebooks/notebooks_archived/citricacid_performance.ipynb @@ -2,23 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting anneurai@datajoint.internationalbrainlab.org:3306\n", - "['IBL_1' 'IBL_10' 'IBL_11' 'IBL_12' 'IBL_13' 'IBL_14' 'IBL_15' 'IBL_16'\n", - " 'IBL_17' 'IBL_18' 'IBL_19' 'IBL_2' 'IBL_20' 'IBL_21' 'IBL_22' 'IBL_23'\n", - " 'IBL_24' 'IBL_25' 'IBL_26' 'IBL_27' 'IBL_28' 'IBL_29' 'IBL_3' 'IBL_30'\n", - " 'IBL_31' 'IBL_32' 'IBL_33' 'IBL_34' 'IBL_35' 'IBL_36' 'IBL_37' 'IBL_38'\n", - " 'IBL_39' 'IBL_4' 'IBL_40' 'IBL_41' 'IBL_42' 'IBL_43' 'IBL_44' 'IBL_45'\n", - " 'IBL_46' 'IBL_47' 'IBL_5' 'IBL_6' 'IBL_7' 'IBL_8' 'IBL_9']\n" - ] - } - ], + "outputs": [], "source": [ "import time, re, datetime, os, glob\n", "from datetime import timedelta\n", @@ -49,760 +35,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_10\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_11\n", - "IBL_12\n", - "IBL_13\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_14\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_15\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_16\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_17\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_18\n", - "IBL_19\n", - "IBL_2\n", - "IBL_20\n", - "IBL_21\n", - "IBL_22\n", - "IBL_23\n", - "IBL_24\n", - "IBL_25\n", - "IBL_26\n", - "IBL_27\n", - "IBL_28\n", - "IBL_29\n", - "IBL_3\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_30\n", - "IBL_31\n", - "IBL_32\n", - "IBL_33\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_34\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_35\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_36\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_37\n", - "IBL_38\n", - "IBL_39\n", - "IBL_4\n", - "IBL_40\n", - "IBL_41\n", - "IBL_42\n", - "IBL_43\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_44\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_45\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_46\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_47\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:20: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:23: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:49: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:50: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:51: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:52: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "IBL_5\n", - "IBL_6\n", - "IBL_7\n", - "IBL_8\n", - "IBL_9\n" - ] - } - ], + "outputs": [], "source": [ "for mousename in subjects['subject_nickname']:\n", " \n", @@ -868,40 +103,9 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABEAAAAFwCAYAAAC4vQ5FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3XlcVPX+x/HXDIssgoIiruCCK4qYW2hmColLiRualuQSXq9Wrpmk9WtVr1rd7tWuaaVZpialYqSkaC6YWqaiiRuKSyqrG/sy8/tjYnAEhQGGw8Dn+XjwuJzv+Z7Tm3u9+eUz30Wl1Wq1CCGEEEIIIYQQQlRhaqUDCCGEEEIIIYQQQpiaFECEEEIIIYQQQghR5UkBRAghhBBCCCGEEFWeFECEEEIIIYQQQghR5UkBRAghhBBCCCGEEFWeFECEEEIIIYQQQghR5UkBRAghhBBCCCGEEFWeFECEEEIIIYQQQghR5UkBRAghhBBCCCGEEFWepdIByio6OprNmzdz+PBhrl+/Tu3atenUqRPTp0/H3d292Ofj4+NZsGABUVFRaDQaHn/8cUJCQmjSpEkFpBdCCCGEuTFm7PHHH3+wZMkSTp8+Tc2aNRkwYACzZs3C1tbWoF92djaffPIJW7du5e7du7Rp04YZM2bg4+NTkT+aEEIIUaWptFqtVukQZfHqq6/yxx9/0L9/f1q3bk1iYiLr1q0jPT2d0NBQWrRo8dBn09LSGDZsGGlpaYwbNw5LS0vWrFmDSqViy5Yt1KpVqwJ/EiGEEEKYg5KOPWJiYhg1ahQeHh4EBgZy8+ZNvvzyS3r27MmKFSsM3jlz5kx+/vlngoKCcHd3Z/PmzZw6dYqvv/6aTp06KfFjCiGEEFWO2RdA/vjjD9q3b4+1tbW+LS4ujmeffZZBgwaxaNGihz67atUqPvzwQ3744QfatWsHQGxsLM8++yz/+Mc/mDZtmsnzCyGEEMK8lHTsERwczNmzZ9m+fTv29vYAbNq0ifnz57NmzRr97I7o6GgCAwMJCQlh3LhxAGRlZfHMM89Qr1491q1bV7E/oBBCCFFFmf0eII899pjBAASgadOmtGzZktjY2Ec+GxERgbe3t774AdCiRQt8fHzYvn27SfIKIYQQwryVZOyRmprKwYMHGTJkiL74ARAQEICdnZ3BOGPHjh1YWVkRGBiob6tRowYjRozg6NGjJCQkmPgnEkIIIaoHsy+AFEWr1ZKUlISTk9ND+2g0Gs6ePUv79u0L3evQoQNxcXFkZGSYMqYQQgghqogHxx5nz54lNze30DjD2tqatm3bEhMTo2+LiYmhWbNmBoUSAC8vL7RarUFfIYQQQpSe2W+CWpSwsDDi4+OZMWPGQ/vcvn2b7OxsXFxcCt1zcXFBq9WSmJiIm5tboftdunR55D8/NTWVBg0asGfPHuPDCyGEEMLsPDj2SExMBHjoOOP48eP668TERFxdXYvsBzx0BoiMR4QQQgjjVLkCSGxsLO+++y6dO3cmICDgof2ysrIACk1hBd20U4DMzMxSZdBqtdy7d69UzwpR7V3YBd8MN2x7+j3oPhlW9oaE07q2Go4QvBvqtqz4jEIIcZ+ixh75Y4iHjTPuH2NkZmZiZWVVZD8oGLMYS8YjQhjp66EQu/vvCxU8tw7aDFI0khCifFWpAkhiYiL/+Mc/qFWrFp988glq9cNX+OQPKrKzswvdyx9o2NjYFPns77///sgcxX0iI4R4hOZ9ofUgOBuuu67fATq/CLGRBcUPgKy7cHQN+H+gSEwhhICHjz3yxxAPG2fcP8awsbEhJyenyH5QMGZ5kIxHhChnz30Lx9dByiVoOxjcuiudSAhRzqpMAeTevXsEBwdz79491q9fX+SU0/vVrl0ba2tr/RTV+yUmJqJSqYp9hxDCBNRqGP0tXD8OOenQ5HFdm6qIgmZRbUIIUUEeNfbI//5h44x69eoZ9C1qmUv+s/f3FUKYkJUtdH1J6RRCCBOqEr89ZGVlMXnyZOLi4vjss89o3rx5sc+o1WpatWrFqVOnCt2Ljo7G3d0dW1tbU8QVQpREQ29dAeSLp2FZN0g6Dw28C+7bOkGX8crlE0JUa8WNPVq1aoWlpWWhcUZ2djYxMTG0bdtW39amTRsuXbpEWlqaQd8TJ07o7wshhBCi7My+AJKXl8f06dM5fvw4n3zyCd7e3kX2u379eqFjcf39/Tl+/DinTxdMq7948SKHDh2if//+Js0thCjG3euwfjT89TsknYWf50GPV2HIChiwGKYcBufii51CCFHeSjL2cHBwwMfHh61btxoUNrZu3Up6errBOKN///7k5OSwadMmfVt2djY//PADjz32WJEbpAohhBDCeGa/BGbRokXs3r2bPn36cPv2bbZu3aq/Z29vj5+fHwCvv/46R44c4ezZs/r7Y8aMYdOmTUyaNInx48djYWHBmjVrcHFxYdy4cRX9owgh7ndpP+Q9sHY+bh88+4kyeYQQivH392f48OEMHTq0UixPLenYY8aMGTz33HOMHTuWwMBAbt68yerVq3nyySfp0aOH/pmOHTvSv39/li5dqj+BbvPmzVy/fp2FCxdW+M8nhBBCVFUqrVarVTpEWYwdO5YjR44Uea9Ro0bs3r3boN/9BRCAmzdvsmDBAqKiotBoNHTv3p158+bRpEmTUmfK33SsuM3JhBCPcPMUrOhp2DZwKXQLViaPEEIxgwYNIjY2FktLS5588kkCAwPp3bv3Izc7N6WSjj1ANxZYunQpp0+fpmbNmgwcOJCZM2diZ2dn8FxWVhb//ve/2bZtG3fu3KF169bMnDnToFBiLBmPCFGObpwAixpQT5akCWHOzL4AUhnJgEOIcrL/Q9i3FHIzwXOobvmLZeEjJYUQVd/x48cJDQ1l+/btpKenU7duXYYNG8bw4cNxc3NTOl6lJOMRIcpBdjp8MxyuHNRdtwuAEWt0G7QLIcyOFEBMQAYcQpSj7HTdUhjb2konEUJUAhkZGfz000+EhoZy7NgxVCoVXbt2JTAwEH9/f6ytpUiaT8YjQpSDI6vgp9mGbWM2Qat+yuQRQpSJlC6FEJWbtZ0UP4QQera2tgwfPpz169ezfft2Bg4cyJEjR5gzZw69evXigw8+4Pr160rHFEJUFXf/KqLtWsXnEEKUCymACCGEEMKs5OXlsXPnThYtWsT27dtRqVR0796djh07sm7dOgYOHMiuXbuUjimEqAraDQGVRcG1dU1oNUC5PEKIMjH7U2CEENXU2e3wyyLIToOuL8Hjk5VOJIQwsdjYWEJDQwkLCyM5OZk6deowYcIERo4cqd8H5PLly0yfPp0lS5boT2MRQohSa+gNYzfDb6vA0gZ8XgbHBkqnEkKUkhRAhBDm51YcbHwBNLm66x2vg5M7tB5QuN+5n8G5OXj4gkpV0UmFEOVg06ZNfP/995w4cQKAHj16MHLkSHx9fbG0NBzKuLu7M3bsWObPn69EVCFEVdS8t+5LCGH2pAAihDA/l/YXFD/yXYg0LIBc2g/fDNNtoArQ6QUIWF5xGYUQ5ebNN9+kbt26TJo0icDAQBo3bvzI/h4eHgQEBFRQOiGEEEKYCymACCHMT/32xbdFfVJQ/AA4tg6eegNqNTJtNiFEuVu2bBl9+vTBwsKi+M6Al5cXXl5eJk4lqqqcPA3vbPuTH/74i7o1azBvUFv8PesrHUuYs6u/wY8zIOkctPKHwf+VDd6FUIhsgiqEqJzOhMOut3VLWB7UsBP0nQ9WdrqNyTqOAe/nDfvkZT3wkBY0OaZKK4QwIT8/vxIXP4Qoq68OxvHNoSukZ+dxJSWdV9YfIzn1wb9ThCihvFz4bizEn9SNTWLCIPIdpVMJUW3JDBAhROWz+33Yt+Tvi4/B9/+g10zDPk++ptuILC8HbBwLv6P7ZIg7AFqN7rr1QLCrA7lZYFnDpPGFEKZx8uRJoqOjuXPnDhqNxuCeSqVi6tSpCiUTVcnvcbcMrrNzNUT/dYc+resplEiYtduX4d4Nw7Yrh5XJIiqd9Jx0LNQW1LCQsWlFkQKIEKLyOfS/B64/LVwAAbCy1X0Vpc0gmLgLzvwItd10xZBFbrpZI0/NhR6vlH9uIYRJZGZm8vLLLxMVFYVWq0WlUqHVagH030sBRJSXzu5O7Pjzpv7a2lJNh0a1FEwkzFptd3BoYFgEadJNuTyiUsjR5PD2wbcJvxiOtYU1kztOZkL7CUrHqhZkCYwQovJRP1CbtbAu3Xsadwa//9NtmHoqVDcbJDsVfp4PCTFlzymEqBDLly8nKiqKyZMns3btWrRaLYsWLWLVqlV06dKFDh06EB4ernRMUUWM69mUMd3dsLFS09jJlv88503dmvLprCglC0sI/ArqeerGN22e0Y1NRLW25cIWwmLDyNPmkZGbwcdHP+ZMyhmlY1ULUgARQlQ+T772wPXssr3v5smStQkhKqWIiAj69+/PtGnTaNmyJQCurq706tWL1atXk5OTw+bNmxVOKaoKKws1C4Z24Mx7Azjwel/6t2+gdCRh7ty6w5SD8FYyPLcObJ2UTiQUdjblbInaRPkzugDi7+/PypUrSUxMNEUeIYSAHi/rlq/4L4RJv0CXMk4JbNHH8NrCGpo+UbZ3CiEqzI0bN+jatSuAfjPUnBzdpsaWlpYMGjRIZoAIIYQwGz4NfAyuLdWWdK3fVaE01YvRBRBLS0s++ugj+vTpw5QpU9izZ0+hjciEEKLMmnQFnym6E1/KynMoPP0eODeHBt4wah04Niz7e4UQFcLe3p68vDz992q1moSEBP19BwcHkpKSlIonhBBCGMXX3ZfXuryGu6M7bZ3b8vFTH9OwpoxNK4LRm6CGh4dz/PhxQkND2b59O3v27KFu3boMGzaM4cOH4+bmZoqcQghRNj1f1X0JIcyOm5sbcXFxgG4GiIeHBxEREYwYMQKtVsvOnTtp0ECWKQghhDAfQZ5BBHkGKR2j2inVHiDe3t68//77HDhwgPfff5/GjRvz2Wef4e/vT1BQENu2bSM7O7u8swohhBCiGvLx8SEiIkI/C2TUqFHs378fPz8/+vXrx8GDBxk+fLjCKYUQQghR2am0+efIldGlS5dYtmwZ4eHhqFQqHB0dGTx4MOPHj6dhw+o1nadLly4A/P777wonEcLMpSWBrTOoZb9mIaqztLQ04uPjcXNzw9JSN3l19erVhIWFoVar8ff3Jzg4GJVKpXDSykXGI0IIIYShMhdA8vLy2L17N6Ghoezfvx+tVkv37t2xtrbmwIEDWFtbs3TpUvz8/Morc6UnAw4hyijxLHwXBIlnoLY7DP9CtyeIEEKIEpPxiBBCCGHI6D1A8sXGxhIaGkpYWBjJycnUqVOHCRMmMHLkSP0+IJcvX2b69OksWbKkWhVAhBBlFD5LV/wAuH0ZtvwTXpEBvBBCCCGEEKL0jC6AbNq0ie+//54TJ04A0KNHD0aOHImvr69+Wmo+d3d3xo4dy/z588snrRCierh50vA6+TzkZoFlDWXyCCGEEEIIIcye0QWQN998k7p16zJp0iQCAwNp3LjxI/t7eHgQEBBQ6oBCiGrIwxdOfV9wXccDjn2jO87Wzlm5XEKIChEUZPyu+CqViq+++soEaYQQQghRVRhdAFm2bBl9+vTBwsKiRP29vLzw8vIyOpgwL1qtVjafE+Vn0IdgYQ2X9kHmXUi+AOEzYe+/YNJecJTjLoWoyq5du1aoLSMjg1u3bgHg6OgIwN27dwFwcnLCzs6u4gIKIYQQwiwZXQCRvTzE/Xacusl7P54m4V4mgzs24oOh7bGxKllxTIiHsnWCoSvgZCh8P7GgPTVeNxOk92vKZRNCmNzu3bsNrq9evUpQUBBBQUEEBwfj4uICQGJiIitXriQyMpI1a9YokFQIIYQQ5qTUm6CePHmS6Oho7ty5g0ajMbinUqmYOnVqmcOVVEJCAmvXruXEiROcOnWK9PR01q5dS/fu3Yt9du7cuWzevLlQe8eOHfnuu+9MEbfKSEnLZtqGY2Tl6v73//6PazSra8fLfVsqnExUGSdDC7dpcis+hxBCUQsWLKBTp0688cYbBu0uLi7MmzePpKQkFi5cyKefflphmUo69ujbty9//fVXoeeDg4OZPXu2Qdvdu3dZsmQJO3fuJDMzEy8vL0JCQmjbtq1JfxYhhBCiujC6AJKZmcnLL79MVFSUftlD/km6+d9XdAHk0qVLrFq1Cnd3d1q3bs2xY8eMet7W1pZ33nnHoM3ZWfYZKM7p63f1xY98x67cLvX7LiensXjHWWITU+nnWZ9X+3pgaaEua0xhru5cg/MRhm0W1tDpeWXyCCEUc+TIkULFgvt169aNDz/8sAITGTf28PT05MUXXzRoa9WqlcG1RqNh0qRJnDt3jgkTJuDk5MS3337L2LFj+eGHH/Qn7AkhhBCi9IwugCxfvpyoqCgmT56Mj48PQUFBLFq0iDp16rBy5UoyMzP517/+ZYqsD+Xp6cmhQ4dwcnJi165dRhdfLC0tZaPWUujQqBa2VhZk5OTp27o2c+bE1dvEJqbyhEdd6jnalOhdWq2W8Wt+42JiGgBnbt7DQqVimp/MJqm20hJBa1hgo3E3qC2/BAhR3ahUKmJjYx96/8KFCxWYRseYsUf9+vWLHWfs2LGDY8eOsXz5cv1y4wEDBuDv78+yZctYvHhxueYXQgghqiOjP16PiIigf//+TJs2jZYtdb+curq60qtXL1avXk1OTk6RS0pMqWbNmjg5OZXpHXl5eaSmppZTouqhlp0Vnz7/GC1c7HGoYckLj7txKy2bgOVRzPzuBE8u2cPhi8kletfFpDR98SPfrph4U8QW5qJ+R3B5YNr3Y8afDCGEMH89e/Zkw4YNbNmyRT/rFHTF882bN7Nx40Z69uxZoZmMHXtkZ2eTkZHx0PsRERHUq1cPX19ffZuzszMDBgxg165d5OTklCmvKJ3DF5OZE3qChT/FcPNOptJxhBBClJHRM0Bu3LjBuHHjAPQnweT/pWxpacmgQYNYv349s2bNKr+UJpaWlkbnzp3JyMigdu3aDBkyhJkzZ1KjRo0i+3fp0uWR77t37x4ODg6miFrp9GlTj/i7mazYG0vEn/Ek3svS38vM0bBszwW6N69T7HvqO9pgb21BWnbBbBKPejVNklmYCbUagrbCwf/A7cvgOQzaDyvdu1IuQvhsuHECajWGjFugtoRes2RJTTVz+e5laljUoL59faWjCCOEhIRw8uRJQkJCWLp0KU2bNgUgLi6O5ORkGjRoQEhIiLIhHyEqKgpvb2/y8vJo0qQJwcHBjBo1yqBPTEwMnp6ehU5U69ChAxs3buTKlSu0aNHC4J6MR0zryKUURq86hObvmtuP0TeInNVbNnsXQggzZnQBxN7enry8PP33arWahIQE/X0HBweSkpLKL6GJubi48NJLL9G2bVs0Gg179uxhzZo1xMbG8vnnnysdr9L748ot5v5w8qH372WWbMNK+xqWfDC0A29uOcW9rFza1HdgVr9WxT8oqh6NBs7tgOTz0NIf/D8o+zs3jYcbx3Xfp9/376etU8G1HTTsVPZ/hqjUMnMzmb5nOlHXo1ChYmjLobzt87Yc320m6tevz9atW1m1ahWRkZFER0cD0KRJE4YNG8ZLL72kPxq3smnVqhVdunShadOm3Lp1i++++4633nqLO3fuMGnSJH2/xMREHn/88ULP16tXD9BtuvpgAUSYVujRq/riB8BftzM4GJtE3zauyoUSQghRJkYXQNzc3IiLiwN0M0A8PDyIiIhgxIgRaLVadu7cSYMGDco7p8k8OFPlmWeewdXVlS+++IKoqKgip9T+/vvvj3xncZ/IVCW/xj56icvz3Uu+X8OQTo3o5+lK0r1s3OrYlTWaMFfbXtEddQsQ+S48tx5a9Sv9+zLvFhQ/CtHCpf1SAKkGwmLDiLoeBYAWLT+c/4EBzQbweIPCv3CKysnBwYGZM2cyc+ZMpaMYZcWKFQbXw4YNY8yYMXz66aeMHj1aP0MjMzMTa2vrQs/nt2VmFl5+IeMR03KyL/y/h5Nd4TYhhBDmw+g9QHx8fIiIiNDPAhk1ahT79+/Hz8+Pfv36cfDgQYYPH17uQSvShAkTAPj1118VTlL5tW9U66H3hnZqRGCXJka9z87aUoof1dntawXFD9AdeXvwP2V7Zw0HcH7Ep6YNvcv2fmEWrt67WqI2IUzNwsKCF198kYyMDIOTY2xsbMjOzi7UP7/NxqZkm4qL8jO+RzMa1bbVXw/yakAnt7LtOSeqIK0WrhyGq78V3zc9Bc7vhHuyz50QSjF6BsikSZMICAjQb0L2/PPPk52dTVhYGGq1mhkzZhAcHFzuQStS3bp1sbKy4s6dO0pHqfR6t3Jhap8WfHHgEnkaLZZqFVm5GgZ0aMDCYR2UjifMyb2bsGZg4fYHT4IxlkoFw1bB5kmQfAFqukLGbd0eID1egWZPlu39wiz4uvny1Z9foUX3d5eNhQ29GvVSOJV4mC1btgAQEBCASqXSXxdnyJAhpoxVburX1+1Bc/84w8XFxWBJcb78tvylMKJo2bkaNh+7xrn4VPq2qUdPj7plfmf9WjZEzurNr7HJ1LazkuKHKCwnA9YOgauHdNdNe8ELP4BlETOFzv0M3wVBbgaorWDoCugwomLzCiFKtwdI8+bNDdrGjx/P+PHjyy2U0m7evElOTg7Ozs5KRzELr/m3YZqvbr8OC7WKnDyNbBAmjHfof7rNTg2owMe4Y62L1LgzvHIUstPA2h5ys3WFEQursr9bmAXvet78u8+/2XBmAzUsazCh/QTZCLUSmzt3LiqVioEDB2Jtba2/vv8EmAepVCqzKYBcvaqbfXT/OKNNmzYcO3YMrVZrsDdNdHQ0dnZ2uLnJEeCPMvO74/wYfQOALw5cYskIL6NnoRbFxsqCPm2k+CQe4mRoQfEDIG4/nN4KXoGF++58S1f8ANDkQMQ8KYAIoQCjCyDm7MqVKwD6QURWVhY5OTnUrGl42sinn34KwBNPPFGxAc2YtWXBaioLtRQ/RCmkFv7kk/4Loc2g8vtnWNvr/rOoT2ZEldfXrS993foqHUOUwNq1a4GC/S/yr83N7du3cXR0RK0u+DsyKyuLL774Ant7e7y9C5bg9e/fn4iICCIjI/Hz8wMgJSWFHTt24Ovri5WVFGwfJik1i/CTNwza1v56uVwKIEI8UmoRS1mKaiuqPT0JNHkg42YhKlSVKYDkFy1iY2MB2Lp1K0ePHsXR0ZEXXngBQH987+7duwHdjutDhw7lmWeeoXnz5vpTYH799VcGDhxI165dK/4HEaK68hoJJ9bD30sUcGgInccpmUgIoZBu3brpv8/MzOT69es0a9aMjh07KpiqsOLGHrt372bFihX4+/vTqFEjbt++zebNm4mLi+Ptt9/G3t5e/y5/f3+8vb2ZM2cOEyZMwMnJifXr16PRaHjllVcU+fnMhZWFGku1ipy8ghlCtjITVVQEz6Gwb2nBzA4re2g3uOi+HUfDoeUF1x0CpfghhAJU2kfNJwWCgoKMf6lKxVdffVXqUKXRunXrItsbNWqkL3j07av75C//+u7du7z33nucOHGChIQENBoNTZs2ZejQoQQFBWFhUbp/KeXvul7c7uxCiAdciITj34JdHejxMtQuxynfGbfh1iVwbS9LX4QwIxqNBi8vL+bNm8fo0aOVjmOguLHHqVOnWLZsGadPnyYlJQVra2s8PT2ZMGECffr0KfTcnTt3WLx4Mbt27SIrK4sOHTowd+5cPD09S5WvOo1HFv4Uw2f7LgJgZaHi8xe70ruVi8KpRLVw/RgcWaVbWtt9MtR/yB54ebnw2+dw+QA06gyPTwHLGhWbVQhRfAEkv2hwv4yMDG7dugWAo6MjoCsmADg5OWFnZ0dkZGR5ZzUb1WnAIYRZOBkKYa9ATjo4NIDnNz18gCKEqHSefvppRo4cafabrFe06jYe+T0uhXPxqfRqWZcmzsWfKPdbXApHLqXQqUltepTDpqlCCCEqv2KXwOTPlsh39epVgoKCCAoKIjg4GBcXXXU9MTGRlStXEhkZyZo1a0wSVgghjJabBT/N1hU/AO7d0G1ENnazsrmEECU2ZMgQwsLCePHFF/X7ggjxoC5NnenStGQb2K+JusTb207rr1/zb83UPh6miiaEEKKSMHoPkAULFtCpUyfeeOMNg3YXFxfmzZtHUlISCxcu1K+LFUIIRWXdg4xbhm234hSJIpSXlJHEn0l/4lnXk7q28omvuXjsscfYuXMnAQEBjBkzBnd3d2xtbQv1k727REn9b2+swfWKvbFMeaqFwQk8Qgghqh6jCyBHjhxh9uzZD73frVs3PvzwwzKFEkKIcmNfF9x7wuWogrZ25nFUpihfOy/v5PV9r5OjycFSbcm/ev2Lfk37KR1LlMD48eP133/wwQeFfknNPzo2JiamoqOJquKRC8KFEEJUFUYXQFQqlX6386JcuHChTIGEEKLcjVwLvyyC+D/Bwxd6Tlc6kVDAh79/SI4mB4BcTS4fHf1ICiBmYuHChUpHEFXMpCdb8N6PBUtggp9sLrM/hBCiGjC6ANKzZ082bNhA+/btCQgI0P9lodVq2bJlCxs3bsTX17fcgwohRKnZ14VBS5VOIRSWkplicJ2ckaxQEmGsoUOHKh1BVDETn2iGZ0NHjlxKwbtJbZ6UE2OEECaWlpPGL1d/wc7SjicaP4GVWk4lVILRBZCQkBBOnjxJSEgIS5cupWnTpgDExcWRnJxMgwYNCAkJKe+cQgghxEPFp8Wz9vRakjKSGNxiMD0b9SzUZ3CLwWw8u1F/HeARUJERhRCVzOPN6/B48zpKxxBCVAOJ6YmMDh9NfHo8AN4u3qzuvxpLtdG/josyMvq/8fr167N161ZWrVpFZGQk0dHRADRp0oRhw4bx0ksv6Y/GFUIIIUwtJy+HcTvGcS31GgDbL23nU79PeaLREwb9Xu/2OjWtanL21ll6NOzBc22eUyKuKKHo6Gjc3NyoXbu20lGEEMI0UhPg7l9Q3wvUFkqnESYUei5UX/wAOJ54nAN/HeCpJk8pF6qaKlXJycHBgZkzZzJz5szyziOEEOVPq4WzP0H8ad0eII3mmS5PAAAgAElEQVQeUzqRKEdHE47qix8AWrSExYYZFECy87J5dc+rRP2l2wzX3sqeMW3GVHhWUXKjRo1i8eLFPPvsswCkpaXx1ltv8c9//hMPDzmuVAhh5g7+F3a9DZpccG4OYzeDU1OlUwkTycjNKFGbMD210gGEEMLkfpoNG8bAnvdhVR/Y8ALkZCqdSpQTZxvnQm11bAyntYdfDNcXPwAi4iLYd22fybOJ0tNqDY/lyM7OJjw8nMTERIUSCSFEOUlNhF3v6IofACkXYe9iZTMJkxriMQRby4Lj2xvYN6B3494KJqq+ip0BsmXLFgD9hqf518UZMkSOmRRCVAIZt+HoGsO2M9sg4g145iNFIony1cqpFcNaDuOH8z8AukFFULsggz7X064Xeq6oNiGEEMLk7l2Hv08l07t9RZksokI0r92cDc9sYOuFrdhZ2jG81XDsrOyUjlUtFVsAmTt3LiqVioEDB2Jtba2/fvCTmfupVCopgAghKgeVSrcE5kGnt0gBpAp5p8c7jGkzhuSMZLrU74K1hbXBfT83Pz6P/pxcre7TthoWNeSTFyGEEMpw7QB1WkLy+YI2T/ndqaprXqs5MzrPUDpGtVdsAWTt2rUAWFtbG1wLIYRZsKkFXSbAb6sM22u7K5NHmExr59aPvLfcbznrY9ZjobbgRc8XaezQuALTCSGEEH9Tq3V7fuxbDLfioN0Q6DpR6VRCVAvFFkC6deum/z4zM5Pr16/TrFkzOnbsaNJgQghRbgYuAVsniPo35GWDXR3ov0jpVKKC9WjYgx4NeygdQxhh7969JCUlAZCRkYFKpWLHjh2cOXOmUF+VSsW4ceMqOKEQolrJzYJzO3T/2XoA1HAo/btqN4HB/y2/bEKIElFpH7WW5QEajQYvLy/mzZvH6NGjTZnLrHXp0gWA33//XeEkQggDWfcg7iDE7oL0ZPAaBa38lU4lFJajyeHbmG85nnAc73rejGk7Biu1ldKxqr02bdoY1V+lUhETE2OiNOZJxiNClKPcLPjiabhxQnddyw0m7QH7usrmEkIYxahjcNVqNQ0aNCA1NdVUeYQQomRungQrO6jTouTPWNrAjjm66aYAp76HMd9JEaSa+9eRf7Hx7EYAdl3ZxeW7l3nL5y2FUwlZciuEqFTOhBcUPwDuXIFjX8MTsqeDEObEqAII6E53CQsL48UXX9TvCyKEEBUm6x58MxyuHtZdez8PQz4t2bOXDxYUP/KdWC8FkGouLDbM4Hpb7DYpgFQC9y/BFUIIxeVmFm7Lyaj4HEKIMlEb+8Bjjz2GhYUFAQEBfP311+zbt4/ffvut0JcQQpjE0a8Kih8Ax9dBXFTJnq3pWrI2Ua3UsaljeG1b5yE9RWWRmppKSEgIsbGxSkcRQlQXbQaBY6OC6xqO0FG2BBDC3Bg9A2T8+PH67z/44ANUKpXBfa1WK+twhRCmc+dq4bbbV4CexT9brw10mQi/f6G7ruUGPV4p13jC/MzuOps5e+eQrcnGSm3F7C6zlY4kipGZmcmWLVsYPHgwLVoYsQxOCCFKy6YWBO+BY2shJxM6PQ/OzZROJYQwktEFkIULF5oihxBClEy7IXD4M+Dv/ZtrOELLp0v+/DMfQdeXIDUe3HuCpSzlq+583Xz5ecTPnE4+Tbs67WQGiJkwYg93IYQoHw6u8ORrSqcQQpSB0QWQoUOHmiKHEEKUjLsPjNkIv38J1vbQc5rxO7C7ttN9CfG3OrZ16NW4l9IxhBEenIEqhBBCCFEcowsgQgihuFb+snGpENWczAARQgghhLFKtAlqdHQ0t2/fNnUWIYQQQohiOTs7ExkZSefOnZWOIoQQQggzUqICyKhRo9i/f7/+Oi0tjVmzZnHhwgWTBTNGQkICS5cuZezYsXTq1InWrVtz+PDh4h/8W2xsLBMnTqRTp05069aN119/nZSUFBMmFkIIIURpqdVqGjVqhLW1cnv4GDP2iIyMZOjQoXTo0IGnnnqKZcuWkZubW6jf3bt3efPNN3n88cfx9vYmKChINpUXQgghylGJCiAPTjPNzs4mPDycxMREk4Qy1qVLl1i1ahXx8fG0bt3aqGdv3rzJ888/z9WrV5kxYwYTJkxgz549TJw4kZycHBMlFkKU2NUjsPsDOPUDaDRKpxFCKMDf35+VK1dWmnEHlHzssXfvXqZOnUqtWrV488038fPzY/ny5YU2lddoNEyaNInw8HBeeOEFXnvtNZKTkxk7dixXrlwx9Y8jhBBCVAtVYg8QT09PDh06hJOTE7t27WLq1KklfnbFihVkZWXx9ddf4+rqCoCXlxfjx49n69atjBgxwlSxhRDF2f8xRL5dcO38HgRthdpuikUS5is1O5Wa1jWVjiFKwdLSko8++oj//Oc/PPnkkwQGBtK7d2/U6hJ9jmMSJR17LF68mHbt2vHFF19gYWEBgL29PStXrmTs2LE0bdoUgB07dnDs2DGWL1+On58fAAMGDMDf359ly5axePHiCvm5RMnk5Gn4dE8sv5xLoFU9B2b1a0U9RxulYwkhhCiGciOHclSzZk2cnJxK9ezPP/9M37599cUPgB49etC0aVO2b99eXhGFEMbKToc97xu2pVyEr4eBbH4ojHA6+TTPbn4Wn/U+BG4L5NKdS0pHEkYKDw9nw4YNDBkyhMOHDzNlyhR69+7Nxx9/rNjsiJKMPS5cuMCFCxcYNWqUvvgBMGbMGDQaDT///LO+LSIignr16uHr66tvc3Z2ZsCAAezatUtmpVYyH+08x8e7znHsym02/n6Vf3xzVOlIQgghSqBKzAAprfj4eJKTk2nfvn2he15eXkRFRRX5XJcuXR753nv37uHg4FAuGYWotq78CprCa+RJPg9J58GlVcVnEmZpftR84u7GAXAm5Qzv/vouq/uvVjaUMJq3tzfe3t7MmzePn376idDQUD777DNWrlxJ165dCQwMxN/fX9F9QR50+vRpgELjDFdXV+rXr6+/DxATE4Onp2eh4307dOjAxo0buXLlCi1atDC4J+MR5UT8edPg+tiV2yTczZRZIEIIUcmVuACyd+9ekpKSAMjIyEClUrFjxw7OnDlTqK9KpWLcuHHlFtJUEhISAHBxcSl0z8XFheTkZPLy8gw+tRHGuX47AxsrC5ztK8+AVJgJ52YPuaGCS3ulACJKJEeTw/lb5w3azqQU/ntLmA9bW1uGDx/O8OHDuXTpEsuWLSM8PJzffvuN999/n8GDBzN+/HgaNmyodFT9niUPG2fkj0Py+z7++OOF+tWrVw/QjVkeLICI0ou/m8k72/7kxNU7dG/uzFvPtKO2XcnHKu7OdlxMTNNf17azopadlSmiCiGEKEclLoD8+OOP/PjjjwZtGzduLLKvuRRAsrKyAIr8tKhGjRoAZGZmYm9vb3Dv999/f+R7i/tEpjrIyM7jn+uO8svZRCzVKib2akbIgLYGfSIiIpg0aRIAK1euxN/fX4moorJybg5PvQG/LALu3/xUCz/NBtf2RJy5K3+GxCNZqa3o7NqZo/EF09O7N+iuYCJRHvLy8ti9ezehoaHs378flUpF9+7dsba2Zt26dWzatImlS5fq99JQSmZmJvDwcUZGRoZB36L65bflv+t+Mh4pvWkbjnHoou7Evx/++IusXA3LxzxW4udDBrblXHwqf93OwN7agncD2lPDUj4wE0KIyq5EBZC1a9eaOoci8osc2dnZhe7lF0dsbGQqY2l8e+QKv5zVffKVq9Hy2d6LDOrQAK/GtQHdyUJTpkzRr92eOnUq58+fLzT1V1RzT70OXSZA1H/g1/8Y3NJe2MWUKWvkz5Ao1qJei/jg0AecTDpJl/pdeKP7G0pHEqUUGxtLaGgoYWFhJCcnU6dOHSZMmMDIkSNxc9Ntjnz58mWmT5/OkiVLFC+A5I8hHjbOuH+MYWNjU2S//DYZj5Sf7FyNvviRb985404YauXqwL45fTifcI/GTnbUrFGtV5ULIYTZKNG/rbt162bqHIrIn1Za1LF6iYmJ1KlTR5a/lNLFxNQi2tL0BZCcnBwuXryovxcbG0tOTk6lWrstKomaLuDRt1ABJKdOG/kzJEqkvn19/uv7X6VjiDLYtGkT33//PSdOnAB0m5WPHDkSX19fLC0NhzLu7u6MHTuW+fPnKxHVQP7Sl8TERP2YI19iYiKdOnUy6Hv/kph8+W0PPi9Kz9pSjUe9mlxIKBirtG3gaPR7LNQq2tQ3/jkhhBDKKfMpMKmpqYSEhBAbG1seeSqUq6srzs7OnDp1qtC96Oho2rZtW8RToiT82rkaXNtaWdDTo65CaYTZa9EHerwKFjVAbQVdJkKbZwv3O7oGstMKtwshzNqbb77JtWvXmDRpEjt37uSLL77A39+/UPEjn4eHBwEBARWcsrD8ccSD44z4+Hhu3rxpMM5o06YNf/75J9oHTrmKjo7Gzs5OP8NFlI8lI7xo4mwLQMt6NflgSOEN8YUQQlQ9ZZ6vl5mZyZYtWxg8eHCl35wrf6r8/YOIfv36ERYWRnx8vP4o3F9//ZW4uDheeuklRXJWBX1a12NpYEe+PXyZmjZWvNLXAxeHGkrHEuas33vw1FzQaqCGAxQxVZyfZsOpjfDSLpClMEJUGcuWLaNPnz4lnpXp5eWFl5eXiVMVr2XLljRv3pyNGzcyYsQIff7169ejVqvp16+fvm///v2JiIggMjJSv3QnJSWFHTt24Ovri5WVbLBZnjq5ObF3dh9S0rOpW1PGJ0IIUV2Uy4LFBz+tUMKnn34KoJ+JsnXrVo4ePYqjoyMvvPACgH5j1t27d+ufmzx5Mjt27CAoKIgXXniB9PR0vvjiC9q0aVMpPj0yZyM6N2ZE58ZKxxBVibV98X3++h2uHga3wqcpCCHMk9J7eTxMScYec+bM4Z///CcTJ05k4MCBnDt3jnXr1jFq1CiaNSs47crf3x9vb2/mzJnDhAkTcHJyYv369Wg0Gl555ZWK/+GqAbVaJcUPIYSoZlTaMlYvkpKS6NWrF19++SU+Pj7llctorVu3LrK9UaNG+oJH3759AcMCCMD58+dZtGgRR48excrKiqeeeoqQkBCcnZ1LlSV/1/XidmevzrKzs/Wb0ObLysqS/RtEiRX5Z2i+A9YWKnhpNzTuDLlZumUxN6OheR/oMEKZsEKIcnHy5Emio6O5c+cOGo3G4J5KpWLq1KkVmqckYw+AXbt2sWzZMmJjY3F2dmb48OFMmTKl0BKeO3fusHjxYnbt2kVWVhYdOnRg7ty5eHp6liqfjEeEEEIIQ+VSAHniiSdYvXq1ogWQykQGHMWTAogoq4cWQFr2haAtuobvX4KTmwo6PP0u9JxWgSmFEOUhMzOTl19+maioKLRaLSqVSj/7NP97lUpFTEyMwkkrFxmPCFFJ3L2u+0/HhsrmEEKUfRNUZ2dnIiMj6dy5c3nkEUKI0hv+BTz/d8Ej8y6c+t7w/tE1FR5JVA4pmSl8d/Y7dlzaQXZeEfvHiEpt+fLlREVFMXnyZNauXYtWq2XRokWsWrWKLl260KFDB8LDw5WOKYQQhjR58H0wfNRO9/XDJF2bEEIxZS6AqNVqGjVqJJ/cCyGU1y4ALP7eKNDCGqzsDO/b1K74TEJxV+9dJWBLAO8deo/X9r3GhIgJ5MkA1KxERETQv39/pk2bRsuWLQHdSW69evVi9erV5OTksHnzZoVTCiGqnPO7YOMLsHUqJJ4z/vmYbXDyO0Cr+4reCGekWCuEkowugPj7+7Ny5UoSExNNkUcIIcqHlQ08FVJwbWENfeYpl0dUqJTMFA7fOExqdirfnf2O21m39fdOJJ7g8I3DRr/zTMoZTiUVPjZdmN6NGzfo2rUrgP4klZycHAAsLS0ZNGiQzAARQpSvuAOwboSuiHHsG/jSHzLvGPZJiIFVvvCOM6wNKFjqki/5QuH3FtUmhKgwRp8CY2lpyUcffcR//vMfnnzySQIDA+nduzdqdZknkwghRPnq8TK0fBpungT3nuDYQOlEogL8dPEn5kfNJ0eTg72VPY83KHwiUI4mp8Tvy9XkMm3PNPZd2wfAY/Ue47OnP8PG0qbcMotHs7e3Jy8vT/+9Wq0mISFBf9/BwYGkpCSl4gkhqqJT36ObufG3jBS4EAnthxW0fR8M8Sd131/8BX6cCWM2FNxv1R/2LADt37MOVRa6NiGEYoyuWoSHh7NhwwaGDBnC4cOHmTJlCr179+bjjz/mypUrpsgohBCl59Jad/qLFD+qBY1Ww+LfFusLHGk5aVy6cwlbS1t9nxa1WtCjYY8Sv/OXq7/oix8AfyT8wY8Xfyy/0KJYbm5uxMXFAboZIB4eHkRERACg1WrZuXMnDRrI/8eFEOXIoYgNSx0bFXyfnV5Q/Mh39YHZhfXbw+j10OxJ3dfoDeDarvyzCiFKrFTTNry9vXn//fc5cOAA77//Po0bN+azzz7D39+foKAgtm3bRna2bDInhBCiYuVocriVdcug7W72XUKfDWWK9xTmdpvL1wO/xip/r5gSiE+PL9SWkJ5QRE9hKj4+PkREROhngYwaNYr9+/fj5+dHv379OHjwIMOHD1c4pRCiSun2Erh2KLjuOBrcuhdcW9sZ3gdwKzzjkFb+8OI23VerfqbJKoQosTIfg5vv0qVLLFu2jPDwcFQqFY6OjgwePJjx48fTsGH1OvJJjp0rnhyDK8pK/gyJh5n5y0x2Xt6pv36x3YvM7jq71O+7kXqDgK0BZORmAGCltuK7Z77Dw8mjzFlFyaSlpREfH4+bmxuWlrrVu6tXryYsLAy1Wo2/vz/BwcGoVCqFk1YuMh4Roow0GvjrKNg46maUPijhDIS9DNeP62Z4BCyXGadCVHJlLoDk5eWxe/duQkND2b9/P1qtlu7du2Ntbc2BAwewtrZm6dKl+Pn5lVfmSq+6DjjyNFqW/nyWrcf+wrWWDW8MbEvXps5F9pVfXkVZyZ8h8TDpOems/nM1p5NP061+N55v+zyWaqO3vDJwOvk035z+hlxNLqPbjqZTvU7llFYI06mu4xEhKkReLiSdA6emutkgQgizUOoCSGxsLKGhoYSFhZGcnEydOnUYOnQoI0eOxM3NDYDLly8zffp00tPT9Wt1q4PqOuD4fP9F3g+P0V872FhyKMQX+xqFf/GQX15FWcmfISGEeLTqOh4RwuRunID1o+HuX1CjFgxdAW0GKp1KCFECRn8ktmnTJr7//ntOnDgBQI8ePRg5ciS+vr76aan53N3dGTt2LPPnzy+ftKJSi7pguAP/vcxcvj50mcm9WyiUSFRVp06d4sMPPyzUPnnyZGbOnEn79u0VSCXMUUREBJMmTQJg5cqV+Pv7l/jZ/df2E3oulJrWNRnnOY6WTi1NFbPaCQoKMvoZlUrFV199ZYI0oqrZcyaBb49cwcHGksm9W9DK1UHpSMLc7HhDV/wAyLoDP87Q7fWhtlA2lxCiWEbPAGnTpg1169Zl+PDhBAYG0rhx40f2j46OZv369SxcuLBMQc1Jdf3EZWnEWZbtKXy2eR17a1KzchnRuTHvDPbE0kItn96LUlu9ejXBwcH6zRAfZGFhwapVqxg/fnwFJxPmRqvV4uHhwcWLFwFo0aIF58+fL9E+EkfjjzJ+x3i0fx+R6GjtyE/DfqJWjVomzVxd9O3bt1BbRkYGt27pNrh1dHQE4O7duwA4OTlhZ2dHZGRkxYU0A9V1PPIohy4mM3rVIfJHv7Vsrdj3Wh9q2ZV8Y2Qh+LAt3Ltu2Db3qm6vECFEpWb0DJBly5bRp08fLCxKVuH08vLCy8vL6GDC/Ex+qgV7zibw5/W7Bu3JaboTgdYdvoJHvZqM79lMiXiiCggLC2PixIk8qm6bl5fHxIkTqVu3Ls8++2wFphPmJicnR1/8AN3SzpycnBIVYndc2qEvfoDupJkDfx1gUPNBJsla3ezevdvg+urVqwQFBREUFERwcDAuLi4AJCYmsnLlSiIjI1mzZo0CSYW5+TH6Ovf/FXInI4e95xMZ3LF6bdgvyqjtM3BkZcF1syel+CGEmTD6GFw/P78SFz9E9VKzhiXzBrZ9ZJ9jV25XUBpR1Wg0GmbNmvXI4kc+rVbLrJkz0Gg0FZBMVEeu9q6F2urb11cgSfWwYMECOnXqxBtvvKEvfgC4uLgwb948OnbsWK1mmorSa1DLtlBbw1o2CiQRZu3p96DXLGjUGTqPhxFrlE4khCihUm+Lf/LkSaKjo7lz506hXzJUKhVTp04tczhhfh5v7kyPFnU4GJsMgAq4/9fVrk2dFMklzN+uXbu4cKHwEquHOX8hlt1v9cPv/7aBVeEBrxBlMar1KHZd3sWfyX8CMLjFYDq7dlY4VdV15MgRZs9++FHG3bp1K3JfICEe9MLj7mw/dYNTf+lmqwZ2bkyXh5xYJ8RDWdmA71u6LyGEWTG6AJKZmcnLL79MVFQUWq0WlUql/0Q2/3spgFRfU9Yd0xc/attaMfPpVnwRdYmU1GxGdGnMmO7ugG6quRDGeHBKfElE/rIfvwGroOerJkgkqjMHawfWD1rP6eTT2FnZ0ayWLO0zJZVK9ci/N4wpjorqrZatFdtefoLoa3dwsLGkuUvNMm2GLIQQwrwYvQRm+fLlREVFMXnyZNauXYtWq2XRokWsWrWKLl260KFDB8LDw02RVVRy0ddus+PPm/rr2xk5xCamsve1Ppx8x5//e9aTs2diGDhwIO3atSv0vK+vL4cPH67IyMKM3Lt3z/hnsrUQr/uEnoxb8P1LsMQDvh4GKRcf/bCostJz0jmbcpacvJwyvUelUuFZ11OKHxWgZ8+ebNiwgS1bthgsg9NqtWzevJmNGzfSs2dPBRMKc6JSqejYpDbNXWqi1WqZMmUKV65c4cqVK0ydOrVESy2FEEKYJ6NngERERNC/f3+mTZum343d1dUVHx8ffHx8GDFiBJs3b2bWrFnlHlZUbqmZuYXa7t3XdujQIfz9/fW79j/owIED9O7dmx9++IGBA+UsdWHI2dn4KcrOtirw8NVd/DQHTm7SfR8bCZvGwz/2lmNCYQ72XdvH3H1zuZdzD2crmfZuLkJCQjh58iQhISEsXbqUpk2bAhAXF0dycjINGjQgJCRE2ZDCLJVlM2QhhBDmx+gZIDdu3KBr164A+s1Qc3J0n6JZWloyaNAgmQFSTXVr5oxHvZr6awu1ilFdmwBw69YtBg8e/NDiR76srCwCAwO5fPmySbMK8/PMM88Y/0w/X/Aaqbu49ECx48ZxyLxTDsmEudBqtbz767vcy9HNJkrKSCrU58C1A7yy+xXm7JvDmZQzFR1RPET9+vXZunUrwcHB1KpVi+joaKKjo6lVqxbBwcFs2bKF+vVlE1ohhBBCPJrRM0Ds7e3Jy8vTf69Wq0lISNDfd3BwICmp8KBSVH2WFmq++4cP3xy6THJqFkM6NaKTm27T0y+//JLExMQSvSc9PZ1ly5axZMkSU8YVZqZbt2507tyZo0ePlqh/l4Zquo1fUNBgXw9S4wuunZtBDTmyrjrJyssiIT3hkX1e3fMqKksVAPuv7Sd8WDjONjJTpDJwcHBg5syZzJw5U+koQgghhDBTRs8AcXNzIy4uDtDNAPHw8CAiIgLQfbq2c+dOGjRoUK4hhflwtrfmVd+WvBPQXl/8APj888+Nes+XX35Jbm7hJTWi+lKpVCxfvhwbm+KPK7SxhGX/9yo09NY13L5asBdIvlYDQaUyQVJRWdlY2vBEoyce2Ud737lVqTmpHPjrgKljCSGEMGe3r8Ivi2DvYrh7Xek0QohiGF0A8fHxISIiQj8LZNSoUezfvx8/Pz/69evHwYMHGT58eLkHFeYrNzeXM2eMm0qekpLCzZu6DVWTUrO4l5HDv3acwf/jfUz99g+upqSbIqqo5Lp3786PP/5I7dq1H9qndu3a/Bi+g+6TPi5ovH4MMDyum7SSzUgSVcvCXgsZ3WY0Xi5eTGw/sdj+DeyloC+EENWOJk9X1PhfT9jwPCSeK7rf3Rvw2ZPwy0LY84Hu+1QZXwhRmRm9BGbSpEkEBATod8h+/vnnyc7OJiwsDLVazYwZMwgODi73oMJ8aTSa4jsV4VZaJq9/foioC8lYW6jJztO952z8PWITUtkx/cnyjCnMhK+vLxcuXOCzzz5j3rx5BvcWLFjApEmTqFOnjuFDjbuC2go095364e5TAWlFZVOrRi3e6P4GANnZ2czCcMNur7penLp9CoDBLQbTtX7XCs8oinbs2DG++eYbLl++zO3btwud1KFSqdi1a5dC6URVdzk5jSOXUujYpDatXB2UjiNMLeoTXVEDIP4U3IyGV4+D2sKw36lQyEgpuE5LhD9/gO7/qLisQgijlGoPkObNmxu0jR8/nvHjx5dbKGNlZ2fzySefsHXrVu7evUubNm2YMWMGPj6P/gXnv//9L8uWLSvUXrduXaKiokwVt9qxtramYcOGXL9e8mmBNjY2bD6TStSFZAB98SPfmZv3uHYrncZOduWaVZiHOnXqMHv27EIFkFmzZhW9c79jAxjxJex6G9KT4bGx8Ni4CskqzMtXA77iYupFbC1tcXd0VzqO+NuWLVsICQnB0tKSpk2bmtVS28OHDxMUFFTkvZ9++okWLVror//44w+WLFnC6dOnqVmzJgMGDGDWrFnY2tpWVFxRhG0nrjNtwzE0f9fc3g3wJMinqaKZhImd22F4ffsKJJyG+h0M2y2LWJZbVJsQotIwugBSGc2dO5eff/6ZoKAg3N3d2bx5M8HBwXz99dd06tSp2Offffddg30FSrLHgDDO6Odf4MMli0vef/RoLqZkP/R+bTsr6tasUR7RRHXRbrDuS4hitHFuo3QE8YD//e9/NGvWjNWrV+Pq6qp0nFJ58cUX8fT0NGi7/2eJiYlh3LhxeHh4MHfuXG7evMmXX37JtWvXWLFiRUXHFff5eOc5ffED4KOd53ihuztqtewjVWXVbQVXDz5Ps2UAACAASURBVBdcW9jAr5/C+Z+hTgvovwgaPQYdAuHwCki+8PdzraH9MGUyCyFKpNgCyMM+tXgUlUrFV199VapAxoqOjiY8PJyQkBDGjRsHwJAhQ3jmmWdYunQp69atK/YdAwYMwNFRToMwpQwPX7D4GPJyiu2rUql45ZVXOJFem1/OFqyjVKtAo4VatlYsHNoBGyuLR7xFCCFEVXH9+nXmzJljtsUP0J1k5efn99D7H330EbVr1+brr7/G3t4egMaNGzN//nx+/fXXYme1CtNJzTLclD09Ow+NVosaKYBUWX3mwc2TcOM4WDvols2e+FZ3Lz0JNoyB6SfBtjb8Yx+c+Um3sXrrgWAts5OFqMyKLYBcu3atUFtGRga3bt0C0BcO7t69C4CTkxN2dhX3f/wdO3ZgZWVFYGCgvq1GjRqMGDGCjz/+mISEBOrVq/fId2i1WlJTU7G3t0clp0KYRMxda+oOnE7StqWA9pF9P/roIzp16kRHjZY7GblsPfEXDWrZMMe/Dc721rg41JDihxBCVCP169cnO/vhswLNRWpqKjY2NlhaWhZqP3jwIBMnTtQXPwACAgJYsGAB27dvlwKIgl543J2PdhZsgjm6axMsLYw+R0CYE8cG8I+9cOsy2NeFNc8Y3r93A5LOg2s7sLYHr8Ci3yOEqHSKLYDs3r3b4Prq1asEBQURFBREcHAwLi4uACQmJrJy5UoiIyNZs2aNScIWJSYmhmbNmhkMGAC8vLzQarXExMQUWwB56qmnSE9Px97eHn9/f15//fVHnjIhjNe+US0utuuNytqGlJ9XkHev8A7ZKltH3npvAdOnTwVArVYxza8l0/xaVnRcIYQQlchzzz3Htm3bGDduHBYW5lkAf+2110hPT8fS0pLu3f+fvfuOiuraHjj+naErSBMEpQkW7AUb9hJj7zXGkphYEvOS6DOJJia/FJ++GPNSLC8xzxobUUFjihqJxgR7xYINFVRUUKSXAWZ+f0wcHGeoAkPZn7Vcy3vuvcMmGeHMvufs3Z533nmHhg0bAnDp0iWys7Np2rSp3j2WlpY0atSIiIgIU4Qs/vZ6r/r4ulTn8LUHNPdwYGRrD1OHJMqK49+1oGq3gpiTuePWDuDoY5KQhBBPp8g1QBYsWECrVq1499139cZdXFx47733uH//PgsXLmT58uUlFmR+4uLijC6JfZSYiY2NzfPeGjVqMGHCBFq0aIGFhQWHDx8mKCiICxcusGXLFuPFFIE2bdrkG1NycjJ2dlIh/HHzBjQiNjmDw7THv01X+tjeZN4/Jutd4zHtfxyzcOPItQe093XO45WEEEJUNU2aNGHPnj2MGjWKcePG4eHhYTQR0rZt+evaY2FhQZ8+fejatSuOjo5cunSJVatWMW7cOLZu3UrdunWJi9M+FHg0d3mci4sLp0+fNvraMh8pOwOb12Zg89qmDkOYSs95kBAFV/dCDQ8Y9KVsdRGigipyAuTo0aPMnj07z/Pt2rXj888/f6qgiiIjIwMLCwuDcSsrbYHMzMzMPO+dNGmS3nHfvn2pX78+H3/8Mdu3b2f06NElG2wV5lrDms1TA0lX5WBtoSQrK8sgAaIwt+B8TBJjvzvM8nGt6des4lT5F0KY3g+XfmDr5a3YWdoxvcV0aWFbiTyq8QUwb948g+2qGo0GhUJRLldKtG7dmtatW+uOe/XqRc+ePRkxYgRLly7l888/JyMjA8DogxcrKyvdeSGEiVRzgvHbICtd2+VFtsyLUhKfEc/nxz/n3P1zBNQKYGbATOwsJZFdkoqcAFEoFERGRuZ5/urVq08VUFFZW1uTlWVYWPNR4uNRIqSwnnvuOT777DMOHTqUZwLk+PHj+b5GQU9kqjIby4KXLms0sO5QlCRAhBCFFhoVyieHP9Edh8eF8+uIX6lpU9OEUYmSsnDhQlOHUKL8/f0JDAzk8OHDQG73OWN1TjIzM/PsTifzESHKmIW0pBal690/3yUsJgyAa4nXSMlKYVHXwnfSFAUrcgKkU6dObN68maZNmzJkyBDdUxiNRsP27dsJCgqiV69eJR5oXlxcXIxuc3m0nLSg+h9PUiqV1KpVi8TExBKJTxRPtUIkSoQQ4pEDtw/oHWfkZHDs7jH61e1noohESRo2bJipQyhx7u7uugTI4/XUnhQXF1fkuYx4OkeuPaCLvzyEEUKUrWx1ti758cift/40UTSVV5FLWM+dOxdXV1fmzp1Lly5dGD9+POPHj6dLly68++67unNlxd/fn+vXr5Oamqo3fubMGd35osjKyuLOnTs4OjqWWIyiaKwtlLzS3c/UYQhTiL8GcZcLvk6IJ/ja+xqM1aleh3P3z5GWlWaCiITI382bN3VzjQYNGmBubs65c+f0rlGpVERERNCoUSNThFhlTVh5hMYf7OLF1Ue5k5hu6nCEEFWEudIcnxo+emO+DobzG/F0ipwAcXNzY8eOHUyZMgV7e3vCw8MJDw/H3t6eKVOmsH37dtzc3EojVqP69u1LVlYWW7Zs0Y2pVCqCg4Np3bq1rkBqTEyMwdad+Ph4g9dbuXIlmZmZdOnSpXQDFwbWv9SeT0c0Y//sHrTxcTJ1OKIsqdWw7WX4uhUsawvfD4cs2fMuCm9MwzF09+wOgKXSkiF+Q3gl9BWe+/k5em3pxV+3/yrU6+w8trMUoxRPIy0tja+//ppBgwbRqlUrWrVqxaBBg1iyZAlpaeU3yWVsrnH8+HGOHDlC586dAbCzsyMwMJAdO3boPdDZsWMHaWlp9O3bt8ziFaAB0lQ57LsUx9tbw00djhCiCvmw44e42mhX/dWxrcO89vNMHFHlo9BoNBpTB/G03njjDUJDQ5k0aRJeXl6EhIRw7tw51q5dS0BAAAATJkzg6NGjXLp0SXdfixYt6N+/Pw0aNMDS0pIjR46we/duAgICWLduHebmRd4hBOTuuS1ob25VplKpDOqzXL3zED83aT9cJV3eAxtH6Y8N/BLavJjnLcbeQ5mZmXl2bxJVw/30+1ibWTNx10SuPLyiG/e08+SX4b/ojo8cOcLs2bP56y/DxEjLLi3Z+O1GeepejiQkJPD8888TGRmJk5MTPj4+ANy4cYP4+Hj8/PzYsGFDuWxhP3HiRGxsbGjVqhWOjo5cuXKFoKAg7Ozs2Lp1K7VrazuLnD9/nrFjx1K/fn1GjRrF3bt3Wb16Ne3bt+e7774r1teW+UjBjP0u8ZodgsJMW2DfwkzBlX/1N0VooqLIVoHSHJRFfq4shFHZ6mzupd3Dvbo7SoW8r0pa8T7hlzOLFi3iyy+/ZMeOHSQmJtKwYUNWrFihS37kZdCgQZw8eZJdu3aRlZVFnTp1ePXVV5k2bVqxkx+i+F5cfZR97/TGTCmVtauchCjDsTOb8k2ACGHMo6KnMSkxeuMxKTG6TiG//vorw4YNy7NL2Ok/T9OhQwf27NlD+/btSz1mUbCvv/6aa9eu8f777zN27FhdC9ycnByCgoKYP38+S5cuZd688vek7JlnnmHnzp2sXr2alJQUnJycGDhwIP/4xz90yQ/QtvpdvXo1ixcvZuHChdja2jJ69GhmzZplwuhFc4/yl1QT5UR2Jux8A85uARtH6P0JtHzO1FGJSsBcaU4d2zqmDqPSqhQrQMobeeJSsLyeuOx8o7tMNqqimDOwoqv+WI06MOuC8evValTrR2M1aZvesKwAEY98EPYBIVdDdMd9ffryWbfPiIqKonHjxoXaMuHq6srFixelJlQ50L17d7p27crHH39s9Pz777/Pn3/+yf79+8s2sHJO5iMFMzYf6fv5XiJiM2hapwZfjmlFPVdbE0UnyrWwr+C3D3KPlebwRjjYywdXIcqzYi1zOHXqFOvXrycqKoqEhASezKEoFAr27t1bIgGKqsNcqcDdXtqLVUmu/mBpB6rk3LGaDfK+/to+uLKn9OMSFda77d+lpk1NTsaepHnN5kxvMR2ApUuXFrpeRGxsLGvWrGHmzJmlGaoohPv37+e7Jalx48aEhITkeV5ULcEnb7Eq7DrmSgU+ztU5H5OEm701b/fxp5mHfYH373itCxqlGVbm0pFO5OP2Sf1jdTbcPSsJECHKuSInQLZv387cuXMxNzfHx8cHd3dpEyZKxqzeDXCxsyr4QlH5mFvBwP/Aj69DdjrYukHnN+Hk99qJhG8PUDy2NSr1PhZK8HVUcO2hNgHr5+6IhYWFib4BUd5Ym1vzeuvX9cays7NZtWpVkV7nu+++kwRIOVCzZk0iIiLyPB8REUHNmjXLMCJRXh259oBZP5zRHZ++mQjAldgUzscc5eCcnlhbFJzYkOSHKJBPZ7iwPffY3Bo82pguHlFuxKbF8tftv/C086StW1tThyOeUOQEyH//+1/q1q3L6tWrdR1WhCgJU7pK69sqrfloqN8b4q+DRgPrhuSuCGk6EkauzL22wbMoqtdkef8cpv2UDgoFyxbPR6GQ+jEib3fu3DHakSM/ERER5OTk6GpOCNPo0aMHQUFBNG7cmNGjR6P8u9igWq1my5YtbNu2jTFjxpg4SlEe7L8cl+e5+FQVZ24m0N7XuQwjEpVWm5cg8Sac3gTVXeCZD6F6PonY0xvh8i5w8YfA18C6RllFKsrQ6djTTNkzhYwcbTfDUQ1G8UHgBwXcJcpSkWuANGvWjLfffpsJEyaUVkwVnuy5LZh08BD52vaytqjY42YcA5fHtsU8iIQj34AqDQImgWe7so1RVDhRUVG67iFFoVKpZHWRiT18+JCxY8cSHR2Nk5MTdevWBeD69evEx8fj5eXF5s2bpV7LE6rafCQxLYtJq49y+maC0fMWZgrC5vTE1c5aNybzEVEoSXcg+Q64twBlMRLih5bB7ndzj+t2g0k/llx8otx4LfQ1/rj1h+5YgYLfRv5GreqycKC8KPIKEDc3N1QqVWnEIoSefRdjCb+VSKCfM+3qOpk6HFGWstKNjD1Rt8HZD/p/VjbxiEqhVq1aWFtbk5GRUeh7ateuLcmPcsDR0ZFt27bx3XffsXfvXs6ePQuAp6cnI0eOZMqUKdjaSqHKqu6Tny8YJD/ca1hzJykDWytz3u3fSC/5IUShHFgM+xaAJgec/GDiDnDwLNprnNmkf3z9D0iKgRq1jV8vKqyMbP05hgYNmTnGu84J0yhyAmTs2LHs3LmTF154QZYEi1KzaNdFlu+PBOCLvTB/aFPGd/A2cVSizLSZDJd+AY1ae+zZHmq3NLzu3nntxCT5jraOSHamtl5I55lgLk/vhD5ra2vGjBnD2rVrC33PpEmTSjEiURS2trbMnDlTarKIPB29brjFbcdrnUABNawtClX7Qwg9STG5yQ+A+Ej483MY9GXRXqe6i/6xuQ1Y2ZVMjKJcGes/lqN3j6JBu8miU+1OeNXwMnFU4nFFToA0adKEPXv2MGrUKMaNG4eHh4fRREjbtlLwRRRPVo6a1WE39MZWHLgmCZCqpF4veGkvnA8Gew9oZWTLXWYyrBkI6U9MeKMPQWYS9PlX2cQqKpTXX3+ddevWGXQvM8bKyorp06eXQVRCiJLQwtOB6Pjc1YJ1HGyoaWuFUin1oUQxJcXkJj8eSYgu+uv0mAe3T0BGIiiU0PM9SYBUUs94P8PqvqsJjQ7Fy86LofWGFuq+3bt3M3XqVABWrFhBnz59SjPMKq3ICZAXXnhB9/d58+YZFB3UaDQoFIp8q7WLqik1M5tNR6O5GZ9Grwb5FyB7spal1Las5K78pi0MVrMhtJ4IFtbgEaD9k5cbfxkmPx65sEMSIMKo1q1b8/nnnzNr1qx8r1MoFKxatQovL3lqYyoTJ04s0vUKhaJIq3tE5fP+wEY8TFXx19X71HO15dMRzSX5IZ6Oe0twrAsPr+eONRlmcFmBH149AmDmeYg+DDXrg6NPKQYtTC2gVgABtfKZwz5Bo9Hw6quvEh2tTa7NmDGDK1euSHH/UlLkBMjChQtLIw5RyZyMfshnuy4Rm5zBsFZ1mNGjHi+uOaZbnro27Gqe91qYKXm5c12+/j33mjFtPFGrNTKRqYxOroMf/5F7fP0PGLuh4PvymzzIxELkY+bMmTg6OjJ79mwePHhgcN7Dw4Ply5czaNAgE0QnHjl69Cjm5uaFrsEiE0XhamfN+pfbk52jxtxMaepwRGVgZq6t+XHgM0i8BU2HQ2v9VamF/vBqZaftdifEE7Kysrh27ZruODIykqysLCnGXEqK3AVGFKyqVV1/UmpmNoELQ0nKyNaNvdGrHl+F5iY0NDlZRC/Wz6A/WXX9p/AY1oTd4MKdJNJUOXg5VePbCQE0cpe2YZXKt93gzmn9sUFfQYvntHU98vPb/8HBJdrlqQqltmaIrRuMCzJeM0SIxyQnJ1Ojhv7Pk6CgIIYPH465eZGfD4gS1rRpUwC6devG8OHD6dGjh679rSicqjQfyczOYe+FWFQ5OfRu7IatVeH+DUsXGPG05D0knpa8h8qWzPBEiTsVnaCX/AA4GZ2AQgG6dJvSnBqudUiKvQ2An5+f3lO+CzFJvLM1nFRV7r7L6Pg0PvzxPEHTAkv9exBlyNge2J1vwIk1MHlP/sVMe38E7adD+kNtrZD4a+DaWAqgikJ5crIBMHToUEl+lBMHDhxg+/bthISE8Nprr+Hs7MyQIUMYMWIEvr6+pg5PlCMZWTkMX36QC3eSAKjjcJkfX+uEs20BSfRiSEzLYsWfkUTGpvJM41qMDPAo8a8hhBCi9BTrUUpaWhpff/01gwYNolWrVrRq1YpBgwaxZMkS0tLSCn4BUanVc7XF7ImtKi09HXiuXe5eejtrCz79/Gu8vb3x9vZm2bJleksF//fXNb3kxyNXY1NKL3BhGt3eBnMjbQljTmnrghSkhjvUagzWNbSrPiT5IUSl4OTkxOTJk9m5cydBQUH07NmTH374gQEDBjBmzBi2bNlCamqqqcMU5cCeC/d0yQ+A2wnpbDlxq1S+1pR1x1m2L5Jd5+8ye8sZVoddL/gmUTXduwCxF00dhRDiCUV+zJWQkMDzzz9PZGQkTk5ONGrUCIAbN26wbNkydu3axYYNG3BwcCjxYEXF4GZvzUeDm/DvXy+SkplN1wYuTO3qi521BcNb1SE6Po1uDVxwtrVi+vjhRl8jM0ttdDwlM5tztxNpWse+NL8FUZbqdoXXT8NPM+Hyr/rnnuilXmzJdyH8BzCzgOZjoJpTybyuqHQ0Gg37ovdxIf4C7dza0dZNOpqVB82bN6d58+a899577N69m+DgYD744AMWLFjAhx9+yJAhQ0wdojChjCzDBybGxp7WrYdpHL2hX3w7+ORtXuxUt8S/lijHUuIgPEhbob/5GLAwsjV74xi48bv27w36wZj12noiQgiTK/K/xK+//ppr167x/vvvM3bsWF0L3JycHIKCgpg/fz5Lly5l3rx5JR6sqDjGd/BmZIAHqZnZektQ2/g40can4A+fz3fwYtf5u+So9UvUZGarWbT7EusmtyvxmIUJ1XDXdm258ReokrVjlrZw+L9w7zx0nwMWNgW/TmYKWFbXbxuUdAe+7QKpcdrjw8th+l9gLUk0YejLk1+y/vJ6AL458w3vd3if0Q1Hmzgq8YiVlRWDBw+mTp06KJVKDh48yM2bN00dljCxPk3c+OK3y9xJ1CbN7azNGdG65Lem1LCxwMpcSWZ27kMaV7uS32YjyrHU+9o5RfId7fHBpfDSPsPrIkPB7O+5yOVf4eJOo91jhBBlr8hbYH7//XdGjRrF888/r0t+AJiZmTFu3DhGjBjB3r17SzRIUTFZW5gVe/+tt3N16rvaGj0Xk5D+NGGJ8srZD6b9AV3fgpoNQJUCMSch7Ev49e38702KgVV9YWEd+KoFXP8z99yZTbnJD4CEaLjwY+l8D6LCC7oUpHe85vwa0wQiDMTGxrJixQr69u3L+PHjiYyMZNq0aYwYMcLUoQkTs7exYMdrnXirT0Ne71mPn//RBU+naiX+dWpYWzCrdwMe7fJ1qGbBzN4NSvzriHLs7Jbc5AdAcgycDyn4vsTS2ZIlhCi6Iq8AuX//vm7bizGNGzcmJKQQPwiEyMfHO89z8W6y0XMDm7uXcTSizDj7Qbd34MBi/fELP8LgJXnft/s9iD6k/XtCFGwcDeODwTsQlGaG1xsbEwJQKvSfC5gp5L1iSllZWYSGhhIcHExYWBhKpZKePXsyd+5cunTpIl1hhI6rnTUzetQr9a8zrZsf/Zu5c/1+Km18HKlmKdsaqhRjvxMURn4OKSyAvxsCmFmB/4BSDUsIUXhF/qlds2ZNIiIi8jwfERFBzZo1nyooIc7dTjIYa1/XiWebuPFiR5+yD0iUnexMsHPTf8LiVEDHhyfb6Galwep+MOlHbTvdw99on9IAONeDRoNLNmZRaYxvNJ6VESt1xy81e8mE0VRt8+fPZ+fOnSQlJdGgQQPeeecdBg8eLDXGxFNTqzVExafhbm9drG4Ank7VSmWFiagAmo2Eg0sgMVp77OD999aW6frXjd8Gp/6nTY50mFHwPEYIUWaKnADp0aMHQUFBNG7cmNGjR+uevqjVarZs2cK2bdsYM2ZMiQcqKqfY5Az2XojF1c6KHv6uuu4xHf2c9Sq4+7vZSfvbquDk9/DrO5CVqp00aNRQ3QX6fZr/fXW7aVvg6tHAibUwciW8EqZdompmoZ2oWBnfXiXEqy1fJdAzkAsPtEVQm9RsYuqQqqz169djbW3NgAEDaNKkCTk5OfmuMFUoFLzwwgtlF6CokCLjUnh57XGu30/F3saCfw3xN3VIoiKp5gTT/9TOKRQK7ZxCaaRGmU9HaNC9zMMTQhRModFoNAVfluvhw4eMHTuW6OhonJycqFtXW/n6+vXrxMfH4+XlxebNm3F0dCyVgCuCNm3aAHD8+HETR1K+7Y24x/TvT5D9d6HTZxq58r9J2o4LSRlZfLjjPAeuxNHIvQYfDW6Cr4t8aK3U0h/C5/76nV/8B8HIVQW3ts1Mhm1TDLvIBLwIg74s+VhFpaBSqbCy0q9TlJmZiaWltFIuD/z9i/bBVKFQ5LtCtSqS+Yihl9YcI/RirO7Y0UrB6Y/1tyfIzwFRFPK7RDwteQ+VrSKvAHF0dGTbtm1899137N27l7NnzwLg6enJyJEjmTJlCra28kFV5C8lM5sZG07qkh8AeyNidS1ua1hb8J8xLU0YoShzCTcN296m3S84+QFgZQdtJsONP7XFUwGqOUPgayUfpxCiTKxbt87UIYgKJF2Vw7zt5/j13B08Havx4eAmBPo5G1wXGZeidxyfpiqrEIUQQpQDxarcZGtry8yZM5k5c2ZJxyOqiL+uxOm1kXtElWM4JqqIWk20e2kTonLHGvYzfm3SHQgPAqU5tBir3S6zZZK29scj7aZAzdIviCeEKB3t2km7c1F4S36/wraT2q2zl+4lM339CY682wtrC23RyszsHHacjsGxuiU3HuT+rmhex55ok0QshBDCFKR0tTAJFztrgzG3Gta08sy/uF12jprMbDXVreStW+kozbSdW0I/goc3oPEQCPyH4XVJd+CbztrVIQCH/6utEfJ48gMg5rThvUIIISqlYzfi9Y4T07O4fC+Z5h7aecWUdSc4cFnbEl2BtpBpgLcjb/asy0/yPE8IUc7suLqDUY1HmTqMSqlQnyInTpxYpBdVKBSsXbu2WAEVh0ql4quvvmLHjh0kJSXh7+/PzJkzCQwsuGjmvXv3WLBgAWFhYajVajp06MDcuXPx9PQsg8irrgBvR4a3rkPwydsAuNhasvWVQBQKRZ73bDl+k3/9EkFiehbPNq7FF2NaSvu5yqZmPRjzff7XhAflJj8Akm5pV42YW+tvofFoUzoxCiFEKXma+UxV19rLkWM3HuqO7azNqeeq3ZJ95V6yLvkBoAEa1LLlizEtUalkC4wQovz58NCHONk60curl6lDqXQK9enx6NGjmJubY2FhUagXze9DbGmYM2cOe/bsYeLEiXh7exMSEsKUKVP4/vvvadWqVZ73paamMnHiRFJTU5k+fTrm5uasWbOGiRMnsn37duzt7cvwu6h6/jO6JdO6+pGYnkWAt6OuA4wxsUkZzA0+q6sZsvv8Pb794xozezcoq3BFeaE08mPr4s/Q/hU4vw2S70Kz0dDx9bKPTQghnkJx5zMCXu9Vn5jEDH49ewdPp2p8NLiJ7iGJsfmFubI4DXCFEKJoklRJBF0M4k7qHfr49KG9e/tC3/t79O+SACkFhUqAmJtrL+vYsSPDhw+nR48euva3phYeHs7PP//M3Llzde3vhg4dysCBA1m8eDEbNmzI896NGzcSFRVFcHAwjRs3BqBLly4MGjSINWvW8MYbb5TFt1ClNXSzK9R1l+4l6xVMBTgfk1QaIYnyrsVY7baXpNw2yUSFaf/YucOQZdB8tOniE0KIYnia+YyA6lbmLHmuFTxnmCjydbGlfzM3fjl7FwArcyUvd6lb1iGKiuL2SfjtA+3q0ibDoOcHYCYrjkXRaTQapu2ZxrkH5wDYenkrX/X4ih5ePQp1v5edV2mGV2UVKotx4MABZs2aRXR0NK+99hpdu3bls88+49q1a6UdX4F27dqFhYUFo0bl7pGysrJi5MiRnDhxgtjY2Dzv3b17Ny1bttQlPwD8/PwIDAzk119/zfM+UfZaeDpg+0Tdj871DKu7iyqgek14JQye/cTwXPIdCJ4q9T+EEBXO08xnRMGWPNeaFRMC+GBgY/bO6kYbHycu3U1m7cHrpg5NlCfZmbBxtLarXEI0hH0FB782dVSigoqIj9AlPwA0aNh2ZZvuOCopig0RGzgUc8jg3lYurRjXaFyZxFnVFCqd6eTkxOTJk5k8eTLh4eFs3bqVH374gVWrVtG8eXNGjhxJ//79qV69emnHayAiIoK6desafO3mzZuj0WiIiIjA1dXV4D61Ws2lS5cYM2aMwblmzZoRFhZGeno6NjY2TxXfrVu3Cr5IiOdEfgAAIABJREFUFMrC/t58c/AO99OyeLaBIz29zOW/bxWmcOtNbbNPUOQ8uX9bQ+Kp7SSra5okLlFxGNv7f+vWLSwtC9F6uQry8PAwdQiVWnHnM4Ulvy+hsT00treAtHhWn47k4z3RqHOyDK6TnwNVl2VsOK6pcXpjGRd+5X7dvFeWyu8SkZeUtBSDMbNsM27dusXxB8f58MyH5GhyUBvpjPlx049JjE0kkcSyCLVCedr5SJHXczVv3pzmzZvz3nvvsXv3boKDg/nggw9YsGABH374IUOGDHmqgIoqLi6OWrVqGYy7uLgA5PnEJCEhAZVKpbvuyXs1Gg1xcXF4eRkuPWrTJv/iisnJydjZabd29Ool+7ZKww9//xFV24ymlrzezHDiYX7wSyz/+Iqvz9myJbKaCSITFYFGozEY69u3b5nXsaooLl26ZOoQKrXizGdkPlJ8ql5vo6nhZvSc/ByoumpYqDkwFGwe+4S0ed85Fv4n738/8rtE5MesnxlmrbTtuDXpGnZ/sptdcbswf94cpXfemzHkPZS3p52PFHtDm5WVFYMHD6ZOnToolUoOHjzIzZs3nyqY4sjIyDBanNXKygqAzMxMo/c9GjeWnX10b0ZGhsE5IUT5seycLXtvWTK7RQodaqlQABZmUN1CQ3ULDfPbJXHmvgWXEwtXwFkIIUyluPMZUUxKM1NHIMqhpCwl7x21Z17rJJysNfx1x5Ll521NHZaowHJ+zUF9Ro3CXoH6mhoe/SiXH0EmU6wESGxsLNu3byc4OJioqChcXV2ZNm0aI0aMKOn4CmRtbU1WluHyxUcThUcThyc9Gje2bO3RvdbW1kbvPX78eL4xPf5EJjQ0NN9rhRAlIy4rFfujX2ARsUlvfN2/XiO1kRRFFYZUKhV+fn56Y7t27ZJlyxVQo0aNqFWrFm+++SZDhw41dTjFUpz5jMxHim9b+H2+OHDb6DljPwcS07OpYW0mT2SriDR1FulZafhY2RNcwLXyu0QUxx/3/uDTc5+iwXAFEcCOn3dgbmGOjfnTlWMQhgqdAMnKyiI0NJTg4GDCwsJQKpX07NmTuXPn0qVLF5N1hXFxcTG6LDQuTrt/L6/9sg4ODlhaWuque/JehUJhdHtMUVW1PdNXY5M5H5NE+7rOuNkbTyABnL6ZwO2H6XSuXxN7G3k6L0pIWh94IgHi2OxZHN2q1r9DUTjGEuAeHh6kqFM4eucoPvY++Dv5myAyUVTu7u6kpaUxZ84c1q5dS0hIiKlDKrLizmcKq6rNRwryhocHAfU9+ONiDPMW65/z8PDQfXiNjEthxoaTXLybjJdTNb4c25LWXo4miFiUV3n9LpEEiMjP8x7P08SzCX/c+gMPGw9GMlLv/Piw8aiVaobUG8L7Hd7HTFatlZhCJUDmz5/Pzp07SUpKokGDBrzzzjsMHjwYBweH0o6vQP7+/nz//fekpqbqFQ47c+aM7rwxSqWSBg0acO7cOYNz4eHheHt7P3UB1Kpm5V/X+eSnCwBYmin5dkIAPfwNJ2zztp9l/eFoAOxtLAia1gF/txplGquopBoPhS6z4eh3YGEN3eeAW1NTRyUqkDOxZ5jxxwzSs9MBmNJsCq+3ft3EUYmC/P777wBcvHiRsLAwE0dTPMWdz4ji61y/Ju28azAvn2s+2HGOi3eTAYiOT2P2D2f4fXb3MolPCFG5tXRtSUvXlkaTaBk5GSgVSrZd2UZArQAG+Q0yQYSVU6ESIOvXr8fa2poBAwbQpEkTcnJy8n26olAodD3sS1vfvn1ZtWoVW7Zs0X1NlUpFcHAwrVu31hUUi4mJIT09XW+JWp8+ffjPf/7DhQsXdK1wr127xuHDh5kyZUqZxF9ZZGbn8MVvl3XHqhw1n+2+xO7zd9l/KY4GbnZ8OKgxFmZKNhyJ1l2XmJ7Ff/dH8tXYVqYIW1Q2CgX0el/7R4hiWBG+Qpf8AFh9fjUTG0/Ewdr0CX9RMH9//wqbKCjsfEaUrQsxSXrH1+6nkpGVg7WFPI0Vf4u7XPA1QjyFS/GXJAFSggq9BSYjI4OffvqJn376qcBryzIB0qJFC/r27cvixYt1XVtCQkKIiYlh4cKFuuveeecdjh49qlc1dty4cWzZsoWpU6fy4osvYmZmxpo1a3BxcSmz+CuL7BwNaapsvbHo+DQu3NFOHO4mZTDt+xN8ObYlTxbLTkw33PMshBClzcLCAl9fX65duwaAn58fqepUvWuy1dmkZ6fjgCRAypvs7GxCQ0NJTEykR48eJbJt1ZQKO58RZatzfRd2nonRHVe3NCNdJQkQ8TeNBn6YaOooRCUXWDvQ1CFUKoVKgKxbt66043gqixYt4ssvv2THjh0kJibSsGFDVqxYQUBAQL732dra8v3337NgwQKWL1+OWq2mffv2vPfeezg6yv7OoqhuZc6QlnUIOZVbUMzCTL9Q2JXYFP79y0W8nasR9SBNNz62rWGrYSFKjToHjnwLkaFQqyl0mQXW9qaOSpiAQqFg+fLlTJs2DYBly5aR5pvG2YNnddd0qt0Jd1t3U4Uo/rZo0SKOHDnCtm3bAG3byRdffJHjx4+j0WhwcHDghx9+MNq6viIp7nxGlJ7pXX31EiCpqhxW/HmNd/pWzJVGooQl3oL4q6aOQlRC/o7+qBQqnm/0PJ3qdDJ1OJWKQmOsebV4Ko+qrhdUnb2yUWWr2XQ0mvMxiXSu78Kuc3f45exdo9eOaF0HS3MlA5rVpnP9muSoNZyMfohjNQvqudqVceSiSvl9Phz4LPe43jMwfpvp4hGl4tz9cygUCpo4Nynyvftv7mf/zf341PBhdMPRVLOoVgoRiqIYNGgQHTt2ZO7cuYC2o8mMGTN4+eWXadSoEZ988gnPPPMM8+fPN3Gk5UtVnY8UhUqlMuiwk5mZqStg+eeVOCasPKp3vm8TN76ZIEkpAeRkofqsMVZz9ZMgj7+HhChIQT+HRMkqVhtcIYyxNFcyqaOP7riNtyMxCRmcvplgcK1aAwuHNwcgLjmTkf8NIypeu+9+SEt3vhrbukxiFlXQ2S36x1f3Qlo8VHMyTTyiRGXmZDLtt2mcuHcC0K7gWNJrCRbKwneb6u7Zne6e3UspQlEcd+/exdvbW3e8b98+PDw8mD17NgBXrlxh586dpgpPVGAxMTH5nm/j7YRzdUsepOYWKezTVOqxiL+ZWcCQZTC3j6kjEUIUkml614oqobaDDdtndGLLdMN9a4+3yF2+76ou+QGw4/QdDlw2bE8sRImo8UQrSGsHsLQ1TSyixP1y7Rdd8gMgLCaM0OhQE0YkSkJWVhbm5rnPbI4cOULHjh11x56enkbb2guRl+vXrzN69Gi94viP9O/fnxMntD9HbCzNWP9ye/o2caO1lwPzhzZlWCtpKSwe49fd1BEIIYpAEiCi1LX1cWJSYO6Tu/qutrzUua7u+JSRFSI/hef/REaIYuv9Edj8XePHzBL6LABzWWJYWcSmxRqMxaXJB+OKzs3NjVOnTgHa1R43b96kbdu2uvMPHjygWjXZqiQKdjM+jS+CfiOgbVu2bNmCWq02uCY0NJTOnTuza9cuABq51+CbCQEEv9qJ8R28Da4XQghRccgWGFEmPhrSlBc71SU+TUVLDweUytwCqQHeDgbbZBrUkjogopR4tIGZFyDmFNRsALYVu3OE0NfbpzcrwlegUmuXq9uY29DLq5eJoxJPa8CAASxbtoz4+HiuXLmCra0t3bp1052PiIio8AVQRen7OfwOr607yM0Vr5CT/CDfazMyMhg5ciTnzp3Dx8enbAIUQghR6mQFiCgzPjWr09rLUS/5ATCzd0PcauRuialtb82oAM+yDk9UJZbVwKeTJD8qIV97X1b1XUX/uv0Z5DuI1X1XU9u2tqnDEk9p2rRpDB8+nNOnT6NQKPj000+pUaMGAMnJyfz+++8EBkqbQJG/xXsukXRuHznJhVsVlpqaypIlS0o5KiGEEGVJusCUAqm6XnRpqmx2n7+LWg19mrphayWLk4QQQmifxO/atYu6devSokULg/NqtZrU1FSsra2xsCh8sduqQOYj+trM/42zS19BdS+y0Pc4ODgQGxsr7y2RJ+ngIZ6WvIfKlqwAEeVCNUtzhrXyYESAhyQ/hBBC6FhaWjJv3jwuXLhg9LxSqcTOzk4+oIoCPdfWE1XcjSLdk5CQwM2bN0snICGEEGVOEiDCpOKSMzlwOY6ENFXBFwshhKhylEol7u7upKSkmDoUUcG9+Ux9FBrDoqcFyc7OLoVoRKWRk2XqCIQQRVDiCZBGjRrRvXt3tm/fXtIvLSqZH8/E0OnfvzNx1VECF/7OH9L6VgghhBFDhw7lxx9/RKWSZLkoPjMzsyIXyzU3N6d2bakjJPJxfLXhWOLtso9DCFEoJZ4AcXd3JyMjgzlz5jBs2LCSfnlRSWg0Gub/dAFVjvZJTHpWDgt/iTBxVEIIIcqj1q1bY2ZmxpAhQ/j+++85cOAAx44dM/gjREEmTJhQpOuHDx+Ora1tKUUjKoVbRn72xJwu+ziEEIVS4sUWfv/9dwAuXrxIWFhYSb+8qCRy1BriU/Wf5MUmZ5ooGiGEEOXZiy++qPv7v/71LxQK/W5iGo0GhUJBRIQk0kX+pk6dymeffUZmZuHmHK+//nopRyQqPK8OwDr9MY8Ak4QihChYqVWb9Pf3x9/fv7ReXpRjZ28lsvFoNFbmSiZ19KFuzeoG15ibKRnUojYhp3KXCLrbW3MzPg1Pp2plGa4QQohybuHChaYOQVQSnp6erFy5kgkTJlBQI8QPP/yQTp06lVFkosIKeAF4VX/MTLp3CFFeSbsNUWJW/nWd7w5Eci8pk0dTiu2nbxM6qxvOtlYG1y8c3ozqVmZsOByNBjgfk8SI/x7k99ndpRNMVXNsJRxcAgoldJ4JrYu2RFkIUbnJllpRkp5//nmqVavGq6++yt27dw3O29rasmDBAl577TUTRCcqHKWZ4djG0fDqgbKPRQhRoGJ9yrx+/TpXr17lwYMHKBQKnJycqF+/Pj4+PiUcnqgo9l2K5ZOfDFsUJqRl8duFe4xtZ1h0zNrCDHOlksefv8QmZ/Lr2TuMauNZitGKcuVGGPw8K/f4x9egVmOoU8DyUY0Gru6Fe+fBrye4Ny/dOIUQ5YJKpeLhw4c4OjpiaSlPWUXxDBs2jAEDBrBlyxbGjx+vdy4qKgonJycTRSYqhTun4e45cGtqeC7+Glz8GWrUgUaDwExaeAtRlgqdAImMjGTTpk3s3r2b+/fvA+iWDj7ai+vs7Ey/fv0YO3Ysfn5+pRCuKK8ORT7I85xj9bwnqJnZOQZjJ6IeSgKkKrnxp+HY9QMFJ0B2vwuHl2v/vvdDGLkKmg6HnGwwkxVEQlQ258+f59NPP+XkyZPk5OSwatUqAgMDefDgAbNmzWLatGl07NjR1GGKCsTS0pJRo0YZJECk6Kl4ekqwcTQcvnkM1g6E7AztcYO+MC6obEMTooor8FNCdHQ0ixcv5rfffsPa2pqAgADGjBmDl5cXDg4OaDQaEhMTiY6O5vTp02zdupX169fTu3dv3nrrLTw95YNsVdC0jr3R8UBfZ3r5u+Z5X7M69mzi5hOj+e/JFZWMe8vCjT0uIwmOfvfYgAYOLIKjKyD6ELg1g2HfQq0mJRqqEMI0IiIieP7553F0dGTIkCEEBwfrzjk7O5OZmUlISIgkQIQQZUqtVhMaGmowvsusNwPt3A3bbR5elpv8ALi8C+5d0K58FUKUiQITIP3796dBgwYsXLiQZ599lmrV8i9QmZaWxu7du1m3bh39+/fn7NmzJRasKH9y1Bq2n7rNuduJPNPIlQNX7mNhpqCRmx2udtaMaeuJuVne3Zb7N3Nnwc8RpKhyV4IoFEoW/BLBoOa1aeZhPLEiKpGGfaHTm3DkW1AoIPA18OtRiBufSJQl3ATV3x0g7p6F4KnwinSiEqIy+Oqrr3B1dSUkJITMzEy2bdumd75Dhw78+uuvJopOCFEVXb9+nREjRnDq1CmDc0M+2kqTrc3Ztm0bDRs2zD2hURu+kLExIUSpKTAB8tVXX9GrV69Cv2C1atUYNmwYw4YNY+/evU8VnCj/5m0/x6aj0brj9/r7cy4miR2nYwD45dxd/j28ma4GyP2UTKpbmmNjqS0Y5VDNkk1TA1m27yqJ6SpuJ2ToXm/VX9dZ/3J7Ovg6l/F3Jcpc74+gx3vaBEhh9sJa19BWXT/2v9wxzRPbqe6dg6wMsLDW1gtJvgPVXWV7jBAV0IkTJ5g6dSrVq1dHpVIZnK9duzaxsbEmiEwIURXdunWLLl26cPv27TyvOX/+PF26dOHQnu34tfx7dVr7V+DSr5Dz988x3x7G64QIIUpNgZ8EipL8eNIzzzxT7HtF+ZeuymHLcf3tK+sOR3ErPl1vbPn+SAY0d2fGxlMcuBxHdUsz3u7rz6SOPgA087DnmwkBnIh6yIj/HtTdl63WsOFItCRAqgrzIhYz7PcZ+HbXLh316wl/fQGXfs49XydAm/yIvQhB4+HBFbCrDSO+A5/OJRm5EKKUZWZmYmdnl+f5lJSUMoxGCFHV/eMf/8g3+fFIXFwc04Z3Ze/stjBmPXgHwvS/IOJHqOGhrV0mhChTee9NEKIAWTlq1Br9bQhWZoatwO4mZbDij0gOXI4DIFWVw8c/XSAmQT9RYmNheK+NhbxFRR6USm319O7vgGdbGPiFtpiYpS34dIHhf9cI+WW2NvkBkBwDO2ZoV4QIISoMLy8vzp8/n+f5w4cPU69evTKMSAhRVd24cYMdO3YU+vrQ6zlEnD8Lu+ZqB1waQte3oOVzYG5VSlEKIfJS5LXgEydOzPe8QqHA2toad3d3OnfuTK9evXRdYkTlEnrxHuonPke28nLgVkIaGVm5+xlV2Wou3E3Wuy5HreFqbAq1HWx0Y41r16BPk1rsPn8PADtrc17q7Ft634CoXOxqGa+kHhuhf/zwBmSlg2X+9YyEEOXHwIEDWb58Of369aNRo0ZAbge6VatW8eeff/Lee++ZMkQhRBWxdetWXSfMwtp8LouP6kUUfKEQotQVOQFy69YtMjIyiI+PB6BGjRoAJCUlAeDk5IRareaPP/4gKCiI1q1b89133xVYPFVUPKmZhi1sr91P1Ut+ALTzceKZRrUIjcjdn13D2pzW3obtwf77fAB/Xr3PvcQMejVyxdlWMuPiKdXvDWc25R57d5LkhxAVzOTJkwkLC+Oll17C19cXhULBwoULiY+P5/79+3Ts2JFx48aZOkwhRBUQExNT5HvupGigvpQGEKI8KPL+gnXr1mFtbc1LL73EwYMHOXr0KEePHuXgwYNMnjwZGxsbtm3bxuHDh3nhhRc4ceIEy5YtK43YhYn1a+pGTdvcug3VLMw4EfVQ75qGtexYMq4VY9t68nbfhtR3taWjnzNrJrfD1sow/6ZUKujWwIXRbT0l+SFKRr9FEPAiOPlCk+EwYqWpIxJCFJGlpSWrV6/mnXfewcrKCisrK27cuIGjoyNvvfUW3377LUqlbJkUQpQ+a2vrIt9jVbsJPDu/FKIRlUFOjuFD5V27dqFWS4eg0qDQFHEN14wZM7CxsWHx4sVGz//zn/8kMzOTpUuXAjB9+nQiIyP57bffnj7aPCQlJfHZZ5/x22+/kZGRQfPmzZk7d65umWx+5syZQ0hIiMF4ixYt+OGHH4oVT5s2bQA4fvx4se6vSG4npLP5aDTZag217a15f4f+Hu2RAR4sHtWi0K+XkpnNsevx1K1ZHZ+a1Us6XCFEJZasSuZU7Cnq2tfF087T1OEIQXBwMHPnzjV6Ljw8HCsr/UR/aGgoS5cu5erVqzg7OzNy5EimT5+OuXnxuldVpflIcalUKoP/D5mZmVhaFrEwt6gytm/fzrBhw4p0z7p165gwYUIpRSQqspCQEN544w1u3rxpcM7Pz4+lS5fSt29fE0RWeRX5N+rhw4d566238jzfpk0bPv/8c91xYGAgYWFhxYuuENRqNVOnTuXy5ctMnjwZR0dHNm7cyIQJEwgODsbLy6vA17CxseGjjz7SG3NyciqtkCuVOg42/PNZbX/zpIwsFu+5TGJ6lu58/2ZuRu/768p99kbcw8/VltFtPLAyN+PsrUTGrzxCYnoWCgXMfrYhM3pIUTshRMHOxJ1h+m/TSclKQYGCf7b5J5OaTDJ1WEIAMHPmTNzd3fXGLCz0W37/8ccfzJgxgw4dOvD+++9z+fJlli1bxsOHD3n//ffLMtxKLTUzm01Ho7mTmEH/Zu40c5eHLaJoBgwYQG1XJ2Ji4wt1vZOTEyNHjizlqERFtHr1aiZPnpzn+cjISAYMGMDmzZsZNWpUGUZWuRXrkcK1a9fyPff4ohKlUlmspWKFtWvXLk6dOsWyZct0bXf79etHnz59WLp0KYsWLSrwNczNzRkyZEipxVhV1LC2YPPUDizbd5WEtCzGtPWkp38tg+uCT95i1g9ndMd/XYnj2wltWLT7oi55otHAV6FXGN/eG/tqFgavIYQQj1t6aikpWdpWqBo0LD21lFENRlHNQuq9VCYqlYojR47onpR5enrSrl07gyf45U23bt0KXJW6aNEiGjduzMqVKzH7u6Na9erVWbFiBRMmTMDHx6cMIq38Jq46qtuuuzrsOt+OM75Kde+Feyzff5WsHA2TO/swrJVHWYYpyjELCws+mPUK0+f8q1DXz507Fxsbm4IvFFXKxYsXmTp1aoHXqdVqJk6cSLt27fD29i6DyCq/Im+Y7dixI5s2beLnn382OPfTTz+xefNmOnXqpBu7cOECderUeboo87F7925cXV3p1auXbszJyYl+/fqxd+9esrKy8rk7V05ODikpKaUVZqWl0Wj468p9thy/yYOUTFztrOjWwIXp3fwY2Nzd6D3rDkXpHe8+f4/XN53izyv39cZV2WqSMgr3/08IUbXFZ+g/icvIySA1K9VE0YjSsH37drp06cLUqVP5+OOP+fjjj5k6dSpdu3YlODjY1OEVKCUlJc/93FevXuXq1auMGTNGl/wAGDduHGq1mj179pRVmJXauduJerXK1BrYeNRw2fnV2BSmrT/ByegEzt5OZGbQGY7dKNzTflE1TH37E94Z1b7A62bMmME///nPMohIVDRLliwhOzu7UNdmZGTwzTfflHJEVUeRV4DMmTOH8PBwZs+ezaeffqrLREVFRREXF4eLiwvvvPMOoN1Defv2bYYOHVqyUT8mIiKCJk2aGLTabdasGUFBQURHR+Pn55fva6SmphIQEEB6ejoODg4MHTqUWbNm5flE6dGe2rwkJydjZ2dXtG+kgvrHplP8FH4HgOqWZmTnaMjM0U7wujd0Yc2L7QzuqWZppnesVMCPZwwrarev64Snkzy9FUIUbLDfYBYfz61N1bF2R1yquZgwIlGSfvnlF+bMmUPt2rV56aWXdL/Xr169yubNm3nvvfewtramf//+Jo7UuHHjxpGWloaVlRXdu3fXfS+PXLhwAYCmTZvq3VerVi3c3Nx0558k85GieXL+kddY2NU4ctT6JfL2XYylrY92e/SJqIdsPBKNjaWSyZ3q4utiWzoBi3JLoVDw7x8O02btNyz6chnHTp/TO9+iRQveeustxo0bZ/AZRYjs7Gy+//77It2zevVqFixYIO+nElDkBEidOnXYsWMHK1asYP/+/Zw5c0Y3PnDgQKZMmYKjo7a9qZWVFevWrSvZiJ8QFxdHhw4dDMZdXV0BiI2NzTcB4uLiwssvv0yjRo1Qq9Xs27ePNWvWEBkZyf/+979Si7syuHwvWZf8AEhV6Vcw3n8pjqPXH9CurrPe+Gs96nE86iGqbG2ipKWnAyejEwxef1QbWW4q8nD4v3BwKSiU0GUWtHnR1BEJE5vUZBKO1o4cuHUAPwc/JjaeaOqQRAn65ptv8PX15YcffsDWNvfDZq9evRg3bhyjRo3im2++KXcJEBsbG4YPH0779u2pXr06Z86cYe3atZw5c4aQkBBdvbG4uDhAOyd5kouLC7GxsQbjouh8XWwZ1qoOIaduA2BrZc7Lneuy/Inr6rsaJo0a1NKOnY9JZOyKQ2TlaBMkP4XfYd8/u+NYXYqmVkUjJ01n8HOTDR6aHjlypNxvzROmExcXR3JycpHuuXfvHmlpaVSvLnWLnlaxaoA4ODjw9ttv8/bbb5doMGq1utBbVh79UMnIyDBaqfvRWEZGRr6v8+SytIEDB1KrVi1WrlxJWFiY3naeRwqqpl7QE5nKIl1l2LLpSX9cijNIgHSsV5P9s7vz55U46rnaYqZUMnSZYaHcX8/epYOvMz+H38GhmgWDW9TBxsiTGlHFXNsPu+bkHv/0Jrg1B48Ak4UkyofBfoMZ7DfY1GGIUnD9+nXeeOMNveTHI3Z2dgwfPlzXfa60FGeO0q9fP/r166cb7927N23btmXq1KmsXbuWmTNnArlzFWPzGSsrK9LT041+HZmPFN1/RrdgVIAHtxPS6eHvSg1Lw6epHevV5KXOdVl36AY5ag1DW9XRbev98XSMLvkBkJCWxd6Ie4xqI52nRC55Si/yU9y27dLuvWQUr69aKTl27BgTJxbuqd2hQ4dwcnLC2toalUplcP7RWHEKsE6ePJmVK1dy6NAhowkQodXcw54Wng6cualdvaEAnuyp3NzTwei9tR1sGNM2t0PP/w1qzEc79Zf4Wpgr6fPFAd3Kkg1Hogl5tRNmSvmlUqXdMNJVKipMEiBCVGLGVkY8TqFQULNmzVKNoThzFGO6deuGr68vhw4d0iVAHs1VjM1nMjMzS7WYfFWjUCjoWC/3vWLsvznA+wMb83qv+qjVGr3VHc62hkmqmrbypF8IUXg1a9bE2dmZBw8eFPoeb29vKaZbQgpMgBw6dIjAwMBivfjBgwfp2LFjoa/39fVl4cKFhbr20VOgvJaGPhp7tBWmKGrWrImFhQWJiYlFvrcqUSgUrH+pHUEq7iC1AAAgAElEQVTHbnI3MYOejVyZF3KOa/e1hQc7+jnTy79w//1f7FSXm/HprAq7DoCrnRU25kq9bTXhtxLZeCSKCYE+Jf69iAqkjpFER53WZR+HEKLMDBs2jODgYJ577jmD5b8pKSkEBwczfPjwUo2hOHOUvLi7u3P79m3d8aMET1xcnMG8JS4ujlatWhUxWlES7G0Mu9CNaetF8MnbXLyrXb7eo6EL3RpIvSEhROGZmZkxefJkPvvss0Lf8/LLL5diRFVLgQmQl19+mYCAAF588UW6du2qV53cmKysLPbv38/atWs5ffo0586dy/f6x7m4uBR5AuPv78+pU6fQaDR6y83Cw8OpVq0aXl5e+dxt3N27d8nKysrz6Y3IZWdtwctdfHXHv83qxtHr8VhZKGnt5Vik1/pgUGPGtvMkJiGdDr7OLPwlwuCa93ec59ztJD4d2fypYxcVVMO+0OWfcPgbUJpBp9fBp7OpoxJClKBjx47pHbdp04Z9+/YxaNAgxo0bh6+v9vdOZGQkmzZtwtHRkYCA0l0FVpw5Sl5u3ryJs3Pu9tBHLXLPnTtHkyZNdOP37t3j7t27BbbQFYWn0WjYfvo2J6MSaOPjSN9GRVs5ZG9jwc+vd+HI9QdUszSnZR4rXYUQIj8zZsxg2bJlpKWlFXitvb09U6ZMKYOoqoYCEyAhISH8+9//5pVXXsHJyYnAwECaN2+Ol5cX9vb2aDQaEhMTiYqK4vTp0xw+fJikpCQ6derE9u3bS/0b6Nu3L7t37yY0NJRnnnkGgPj4eHbt2kWvXr2wsMjN3kdHRwPokiKZmZlkZWUZPKlZvlxbDqtzZ/lQVVRmSgWBfs4FX5iHBrXsdIXGJgR6s+3kbVIy9VtEBR2/yeTOdWnoJpXtq6xeH0CP9wAFFLQfMisDQj+Cy7vBxR/6zAcn3/zvEUKY1IQJEwz20Gs02k2Wixcv1p17NBYTE8PkyZOJiDBMnJtSfHy8wcOUnTt3Eh0dzZAhQ3Rj9evXx9fXl6CgIEaOHKl72LRp0yaUSiXPPvtsmcZdmf3714t8e+AaAN8fjmJ656I/KDNTKujoV7pbroQQlZu3tzebN29m5MiReW7FA20x7W3btlGrVq0yjK5yU2gezR4KcOrUKTZu3EhoaChpaWlGJya2trb07t2b5557jubNy+YJfU5ODuPGjePKlStMnjwZR0dHNm3axJ07dwgODta16QXo2bMnAL///jsAt27dYtiwYQwcOBBfX19dF5hDhw7Rv39/vvjii2LF9KjoWEHFyUTBYhLSeXntcS7cSdIb3zilvUw+ROHsfg8OPVYc0aURzDhsuniEEAUKCQkp1n3Dhg0r4UiezrPPPkuTJk1o3Lgxtra2hIeHs337dry8vNi6datei9p9+/bxyiuv0KFDB/r378/ly5fZsGEDY8aM4cMPPyzW15f5iKHGH+wi7bHttXYWcG7+QL1rMjMzjRakFcIYlUpl0PFF3kOisMLCwnjzzTeN/pzu3LkzX3zxhRS0LmGFToA8kpOTw/nz57l69Srx8fEoFAqcnJyoX78+jRs3Nkl12sTERBYtWsTevXvJzMykWbNmzJkzR28ZKRgmQJKSkvjkk084c+YMsbGxqNVqfHx8GDZsGBMnTixwu09eZMJRsvZfiuXFNcd49E71ca7G3lndMDeTSsiiEJa2g/uX9MfePAcOUrFfCFG6vvjiC/bv38/t27fJyMjA1dWVnj178tprr+HgYLh1Yu/evSxdupTIyEicnJwYMWIEr776KubmxatZL/MRQ23m7+V+Sqbu2K26GUc+6Kd3jXx4FUUhCRDxtIy9h44dOyaJj1JS5ASIKJhMOEren1fiCDl5G5caVrzUqS6uNaQiviikHybBhce241VzhlkRYC5V+4UQlZvMRwxtPhrN3JCzaDSgUMCCIY0YF+ind82jD687Tt/m8z2XSc3M5vkO3szq3cBEUYvyTBIg4mnJe6hslas2uELkpUt9F7rUlyrrohie/QTiI+HuWajuAoOXSPJDiApo586dbNiwgaioKBISEgzOKxQKLly4YOROIXKNbedFgLcjp24mEODtiKe98Q8Y1++nMjPoNOq/HxN+HXqFeq62DG5RuwyjFUIIUdIkASKEqNwcvGD6X5B0R7v6w1yy6UJUNMuXL2fJkiU4OzvTqlUr7O3tTR2SqMDq17Kj/t8F1/MqPnjsRrwu+fHI0esPJAEihBAVnCRAhBBVQw13U0cghCimjRs30q5dO/73v//pdXcTorS0MtLetqWnowkiEZVCThZc/wMsqoFXoHb/lRDCJCQBIoQQQohyLTU1lX79+knyQ5SZ+rXsmD+0Kf/57TJpqmyea+fF8FZ1TB2WKE/UOXB6A9w4lv916Q9hVV+Iu6g99u0O44NBWbxmC0KIpyMJECGEEEKUa40aNeLOnTumDkNUMeM7ePN8ey80GlAq5Ym9eMKvb8Ox/0FOAf0kTq7LTX4AXNsPV36Dhn1LNTwhhHHSR1SUiugHaXx/OIpDkQ9MHYoQQogK7s0332Tz5s1S5FSUOYVCIckPYSgnW5vYKIy0eCNjMj8WwlSKvAJk7ty5jB07lhYtWhg9Hx4ezqZNm1i4cOFTBycqpj8ux/Hy2mNk/Z0Rn9ypLh8MamziqP6fvTsPi7JqHzj+nWGVxQ1xQ0VQQQMVURHMJZXcCbVcIsXtzTatfF1y6802bfe11Mrfm5p75r6mpmWGYhAqIaapiSKCKIKAss7z+4MYHQFhYIZhuT/XxSXnPNs9OA6393Oec0S1oijw+0r460eo3wYefw2sa5o6KiFEKfn4+PD+++8zYsQIvLy8cHJyQq3WvYejUqlYsGCBiSIUQlQrKjVY2sK9wifR1dFuBIQug9x/9rVxAPcBxo1PCFEkvQsg27Zto2vXrkUWQGJjY9m+fbsUQKqxZT9d0BY/AFYfv8yrfVpS20ZW3xDl5NfP4NA7ed+f2wNxETBmm2ljEkKU2unTp5k1axY5OTmEh4cTHh5eYB8pgAghyo1aDb3mwt7pxe/bwAMm7IeIb/MmQfV5HmzqGj9GIUShDD4HyN27dzE3l6lFqrOMHI1OO1dRyMrVFLG3EEZw+jvd9sXDkJYIdo6miUcIUSbvv/8+FhYWLFu2jE6dOlGzpozoEkKYmM/z0Lw7xITBe8GP3tfJO+9LCGFyJapUxMXFce3aNW370qVLhIUVnPE4JSWFDRs24OzsbLgIRaUzvmtzXv/ulLY9sG0j6ttbmzAiUWndugg/L4TkK+AxFLq8WLKl4+wbwM1z99uW9mBlZ7w4hRBGde7cOSZPnkzv3r1NHYoQQtxXvzXUdgWKKYAIISqMEhVAtm7dypIlS1CpVKhUKr766iu++uqrAvspioJarZYhqNXckA5ONKxlzeE/b9Cyvh1DZdk4URq5ObBmSF7xA+DqCVCb591xKU6ft2DtMMhIAZUZ+L8FFjWMG68QwmgcHBxkCVwhhBBClFmJCiD+/v44OTmhKApz5sxhxIgRdOjQQWcflUqFjY0Nbdu2pVGjRkYJVlQevq4O+Lo6FLn9wo00Nv52BTO1iue6ONPMwaYcoxOVQvzp+8WPfGd3lqwA0qQTTD0DsWFQzx1qSRFOiMps2LBh7Ny5k9GjR8tjtkIIIYQotRJlEa1bt6Z169ZA3uMwffv2xc3NzaiBiarratJdhiwNIS0zB4Dvwq9ycGpPHO2tTByZqFBqNQO1BWiy7/fVdS358Vb20EKGywtRFXTs2JGff/6ZESNGEBQURJMmTTAzMyuwX+fOnU0QnRBCCCEqC71vo0yePNkYcYhqZOfpOG3xAyD5bjb7oq4T7NfcdEGJisfOEfq+Bwf/A7mZUP8x6PmGqaMSQpjA+PHjtd/PmzcP1UNzASmKgkql4uzZs+UdmhBCCCEqkVKNIz158iRr164lJiaG5ORkFEXR2a5Sqfjxxx8NEqCoempaF3zb2RfSJwS+L0K7EZB2AxzdSzYBqhCiylm4cKGpQxBCVAd34uDX/8Kda+A5DDyfNnVEQggD0/t/ndu3b2f27NmYm5vTvHlzme9D6G1IByfWhMZwPiENgHZNajHAU95Hogg2dfO+hBDV1tChQ00dghCiqtPkwrcBcOtCXvvP3aDRQLvhpo1LCGFQehdAvvzyS1xcXFi5ciUNGjQwRkyiirmVlsmWiFhyNArDOjShYS1rdk/pzi/nEzFTq+jeqh7mZmpThymEqELuZt9l58Wd3M64TX+X/rjUcjF1SEIIISqyuJP3ix/5/tgkBRAhqhi9CyBxcXHMnDlTih+iRFLuZhPwxa/EpWQA8L+jf7Pvte40qGmN/2PyHhJCGF6uJpdxP4zjbFLefBDfRH3D6gGreczhMRNHJoQQosKyawCogAce7bdvaKpohBBGoncBpGHDhmRlZRkjFlEF7Y26ri1+ACSlZ7E14hovPdHChFGJaudeMlz6GWo3AydvU0cjjOz3hN+1xQ+AzNxMNp3bxPyu800XlCiT4ODgYvdRqVR8++235RCNEKJKqt0Uuk2FXxcBCtRqCt2nmToqIYSB6V0AGTVqFLt27WLcuHGFLkEnxIPM1QUnrbQwk4ksRTmK/wNWDYKMlLy2zwsw8CPTxiSMylxd8FdbYX2i8oiNjS3Ql5ubS2JiIhqNhjp16lCjRg0TRCaEqFL83wLvMXmToTbxAXNLU0ckhDCwYjPCsLAwnbanpycHDhxg+PDhBAUF0aRJk0ILIZ07dzZclKLSGti2EV8ducjFxHQAnGrXYJh3ExNHJaqVo5/eL34A/LYcHn8Vasn7sKrqUL8DnRt2Jiw+7/eXvYU9Qa2DTByVKIvDhw8X2p+VlcXKlSvZunUra9asKeeohBBVUl3XvC8hRJWkUh5ew/YhrVu3RvXQ0pMPHlLYNpVKxdmzZ6muOnXqBEB4eLiJI6kY0jNz2BcVT65GQ3/PRtSqYWHqkER1smYoXHzoP08vHYMGHqaJR5SL7NxsDl89zO2M2/Rp1gdHG0dThySMaMaMGeTm5vLZZ5+ZOpQKRfKR4mVlZWFlZaXTl5mZiaWl3PkXJSPvIVFW8h4qX8WOAFm4cGF5xFFqly5dYuPGjURGRhIdHU1mZiaHDh2iSZOS392NiIjg448/Jjo6Gjs7OwYMGMC0adNkOK2B2FqZ80xHudsujOxKKJz4GtRm4PsSOHXM6/cO1i2ANOksxY9qwMLMgn7N+xn1Gnsu7eGHv3+goW1DJradSENbmSzPVDp27FiuxQ99c4/vv/+eFStWEBsbS+PGjQkODua5554rsF9CQgILFiwgJCQEjUaDr68vs2fPpmnTpsZ+SUIIIUS1UGwBZOjQoeURR6mdOnWKNWvW0KJFC1q0aEF0dLRex589e5Zx48bRsmVLZs2aRXx8vDZJ+eqrr4wUtRDCoBLPwbcBkPvPBM1nd8MrJ6COM3gMBSt7OLM9r+0zybSxiiph18VdzPl1jrYdej2U7YHbMVPL3FimEBsbS3Z2drldT5/cY+PGjbz11lv079+f8ePHEx4ezjvvvENmZiYTJkzQ7peenk5wcDDp6em8+OKLmJubs2rVKoKDg9m+fTu1atUqj5dWpdzJyGbWlkgORifgUs+W94a0xcelrqnDEpXJzQuQfiNvPhAzmUtKiKqg0v9L7t27N2FhYdjZ2bFq1Sq9CyCfffYZtWvXZs2aNdja2gLQpEkT5s2bx/Hjx/Hz8zNG2EIIQ4reeb/4AZBzD/7cDX6v5LVb+ud9CWEge/7eo9O+fOcyZ26doZ1jOxNFVLXFxcUV2p+SksKxY8dYs2YNPj4+5RZPSXOPjIwMFi1aRJ8+fVi8eDEAI0aMQKPRsGTJEoYPH469vT0A69evJyYmhq1bt/LYY3lLNnfv3p2AgABWrVrFa6+9Vj4vrgr5dP859v4RD8D5hDReXvc7x2b1wdJcbeLIRKWw7w048c/N0LotYNxuqNnYsNdIOANRW/OW2/UKAktbw55fCFFApS+A1K5du9THpqWlcezYMSZOnKgtfgAEBgayYMEC9u3bJwUQISqDmo0K9mWmlX8cotpoYNNAp61WqalvU99E0VR9vXv3LjDnWD5FUXBxcWHevHnlFk9Jc48TJ06QnJxMUJDuJLzPPfccu3bt4pdffmHQoEEA7N+/Hy8vL23xA6BFixb4+fmxb98+KYCUQsSVZJ32zbQsYm6l06qB/SOPS8vMoa48e1+9JZ67X/wASLoIx5ZA/wWGu0bM8bzRq5p/Rq9FboKJB6CIzzohhGHoXQAJDg5+5HaVSoW1tTWNGjWiW7du9OnTp8ikxdTOnTtHTk4Onp6eOv2Wlpa0adOmWk/kKkSl4vkMhH4FCX/c7zv6Wd78H4UVR4Qoo+fbPs+J6ye4lnYNFSqeb/u8zAFiRK+88kqhuUTt2rVp3rw5Xbt2Ra2ueHf180eGPJxneHh4oFariY6OZtCgQWg0Gs6dO8fIkSMLnKNt27aEhIRw7949mZtMTx2d6/DHtfurgNWzs8LZofg77G/vPMPi52Q1w2rtTiGjzlILH4lWamH/u1/8AIj9Da79Dk06GfY6QggdehdAYmNjycjIICkpCYCaNWsCcOfOHQDq1q2LRqPhyJEjfPfdd3h7e/N///d/2NjYGDBsw0hMTATA0bHg6gCOjo6cOnWq0OPyZ1UvSmpqqnZIqxCiHFhYg7OfbgEkNwMivoUnZpkuLlFlNbFvwq6hu/gj8Q8a2DbAyc7J1CFVaVOmTDF1CKWSmJiIpaVlgREj+X03btwAIDk5maysrCLzEUVRSExMpFmzZjrbJB95tGl93UhMy+RgdAKu9Wx5d4hngcdfcjUFF0P88WxCeYUoKirnrlCzCdyJvd/XdoRhr2FWyCgjM1kpUQhj07sAsnr1aoKDg5k4cSITJ06kbt28yaSSkpL43//+x/79+1m9ejW2trZ8/fXXrFy5kqVLlzJjxoxiz63RaEo8idnDSwWVRkZGBkChSwxZWVlptwshylFqPOydDlfDoFkXGPAx2Dco/jiHlgX7jn4CrQdDQ8+C24QoIwu1Bd4NvE0dhigjY+YeGRkZWFgU/h8aKysrMjMzAbR/FpWP5J9L6Mfe2oKlQY/+N2qmLjiyyKWezMNQ7Zlbwfi9ELIY0hKg/ShoPdCw1/B7Gc7ugqzUvLZbf2jU3rDXEEIUoHcBZOHChXh7excoaNStW5eZM2eSkJDAwoULWbJkCW+88QZ///03Bw4cKFEBJCwsrNhHbPIdP35cW3wpLWtrayBv7eWHZWZmarc/LDw8/JHnLe6OjBDiEba/DBcP5X0fvQOy78Fz3xd/nHcwRKx5aBRINkRuhIbvGSdWIUS5OXnyJGvXriUmJobk5GQURffOvUql4scff9T7vMbMPaytrQvNMSAvz8gvbuT/WVQ+kn+uh0k+op/MnFx+iIon5V42/T0bUt++8DzvrQBZKl2Qt3LcYCMur92wLUwOg3N7wL4xuBl36XYhRB69CyChoaGPLGZ06tSJTz/9VNv28/MjJCSkROd2dXVl4cKFJdrXzs6uRPs9Sv5Q0/xHYR6UmJhI/foyoZ0Q5e7Sz49uF8WiBvT5D6wfrttfo44hohJCmND27duZPXs25ubmNG/enEaNDDe3jzFzD0dHR7Kzs0lOTtZ5DCYrK4vk5GRtnlG7dm0sLS2LzEdUKlWhj8eIksvVKIxaHsrJfyZG/fTAeba/8jhONQuO0GnftPQT7Auhl5qNoPO/TB2FENVKqVaBuXTp0iO3PXhXRq1WFzmS4mGOjo4MGzasNCGVipubG+bm5kRFRdG3b19tf1ZWFmfPniUgIKDcYhFC/KNRO4g7eb/dUI9lRVv2Adcn7hdN6rYA73GGi00IYRJffvklLi4urFy5kgYNSvBInB6MmXu0adMGgKioKLp166btj4qKQqPRaLer1Wrc3NyIiooqcI7IyEicnZ1lAtQyOnbxprb4AZByL5u1oTHMG9QGV1dXbW7bokWLIh9bEqLE1o2AK0egvgcEfgGNO5g6IiHEP/SeMr1r165s2LCBPXv2FNi2e/duNm7cyOOPP67ti46OxsmpYkwOd/HiReLi7s/gbG9vj5+fHzt27CA9PV3bv2PHDu7evUv//v1NEaYQ1dtTS8Cxdd73jm3gqS9KfqzaDMZsh7G7IWgTvBwKtg7GiVMIUW7i4uJ49tlnDV78MDZfX19q167N+vXrdfo3bNiAjY0NPXr00Pb169ePU6dOaVeOgbybSqGhoZKPGEBOIZOd5uRqUKlULFu2DGdnZ5ydnVm6dGmFXb1QVCKXDoOiyXss9/vxoBR8/wkhTEPvESCzZs0iMjKS6dOn8+GHH+Ls7AxATEwMiYmJODo68sYbbwB5z61eu3aNIUOGGDbqB6SmprJmzRoA7aot69atw97ensaNG+tce+DAgfj4+Gj3B5g6dSqjRo1izJgxDB8+nPj4eFauXEmPHj3o2rWr0eIWQhShoSe8cgLuJUONUgxDVqnApbvh4xJCmEzDhg2LnEvDFEqae1hbW/Pqq6/yzjvv8Nprr9GtWzfCw8PZuXMn06dP166kBxAUFMT333/PpEmTGD9+PGZmZqxatQpHR0fGjRtX7q+xqunWsh6tG9rzZ3zehJM2lmYEdcnLYfv168fly5dNGJ2o0m7/Dek3wU4eYxOQlZtFenY6dazlEW1TUSkPzyJWAsnJySxfvpyff/6Z2Ni85aGcnJzo1asXzz//PHXqlN9faGxsLH369Cl028PFDnd39wJ9kDeJ2CeffEJ0dDR2dnYMHDiQf//736Veujd/0rHiJicTQgghRPG++eYbdu3axZYtWzAzMzN1OHrlHgCbNm1ixYoVxMbG0qhRI8aMGVPoxKvx8fEsWLCAkJAQNBoNXbp0Ye7cuTRt2rRUcUo+oistM4dtEbGk3MvmqfZONHMoXZ4nxIOysrIKrBCVOc8eS7N/RhI5tMqb7FRGFlV7Oy7s4MOwD0nNSqVLoy582vNTalnVKvw9lJlZ6MpgouxKVQARjyYJhxAmdPq7vFVkGniAz6S8yVGFEJVaaGgoixYtIjs7m6CgIJo0aVJoIaRz584miK7iknxECOMr9D+va0ZiefknaOAJAf/NW/FFVGu3M27T5/s+ZGvuL7s+9rGxTO88XQog5axUk6AKIUSFFLIYDv7nfjs2DEauNV08QgiDePARkHnz5hWYo0FRFFQqFWfPni3nyIQQohAjVoP851U84PKdyzrFD4C/kv8yUTTVW7EFkO3btwMQGBiISqXStotjzHk/hBCiUBG6w845uxvu3ZalcIWo5Eq6TK0QQghREbWp24Y6VnW4nXlb29e1scw3aQrFFkBmzZqFSqVi4MCBWFpaatuPenJGpVJJAUQIUTo5WfDrZ3B6I2hyoM1geGIOWNcs/libunDrgbalLZiXbBluUXXcuneL5ZHL+Tvlb3o27UlQ6yBUKhUaRYNapffiZ6ICGDp0qKlDEEIIIUrs4ZzD2tyaL/2/ZNHvi7iefp3+Lv0Z3Wa0CSOsvootgKxevRpA+wxSflsIIYziwDz47ev77dAvIekyBG0s/thec2H9SMi5B6jy2jIHSLUz5fAU/rj5BwDHrx/nz1t/EpYQRnx6PH2a9eHdx9/FxkImPxRCCFF2FhYWuLq6cunSJQBatGiBhYWFiaMSprLr4i4++/0z7mTe4amWTzGnyxws1HnvB496Hvyv3/9MHKEotgDi4+PzyLYQQhhU1JaCfed/gKz0vBEdj+LaE6ZGQcyxvElQHVoYJ0ZRYV1Lu6YtfuTbeXEnGjQAHIg5gJOdE//u9G9ThCeEEKKKUalULFu2jBdeeAGApUuXFpinSFQPcWlxvBnyJrlKLgCbz2+mZe2WPNfmORNHJh5UpklQs7KyuH37NnXq1JFZaoUQhlGrCdy9qdtn61jyR1ls68FjTxk+LlEp1LaqTQ3zGtzLuaftyy9+5Iu8GVneYQkhhKjC+vXrx+XLl00dhjCxM7fOaIsf+R6+KWNI2bnZLD21lCOxR3Ct5cq/O/0bJzsno12vqijVw9BnzpwhODgYb29vnnjiCX7//XcAbt26xdixYzl27JhBgxRCVCP9FuiO9DCzhAEfgrrgkpdCPMzWwpZpHadhrs6r7zvWcMTOwk5nn44NOpoiNCGEEOI+jQYu/Ah/bIbMVFNHIwygvWN7bf6Rz5g5x9JTS/km6hsuJF/gQMwBphyeYrRrVSV6jwA5e/Yszz33HHXq1CEwMJCtW7dqtzk4OJCZmcm2bdvo2lVmtRVClELzx2H6XxAbDrnZ0KSjrOIi9DKy9Uj8nf25mnoVDwcPTiWe4sPfPuRa2jX6Nu/L822fN3WIQgghqjNFgXVPw8XDeW27hvCvH6F2U9PGJcqkvk19Pu7xMYsjFnM78zZDWw7l6VZPG+16R2KP6LT/uv0X19KuySiQYuhdAFm8eDH169dn27ZtZGZmsmWL7vP6vr6+7Nu3z2ABCiGqIUvbvPk8hCglhxoOONRwAKBzw85sfmqziSMSQggh/nH51/vFD4C0ePhtOfR913QxCYPwd/bH39m/XK7lUsuFC8kXtO2aljWpV6NeuVy7MtP7EZjff/+d4cOHY2trW+gEP40bN+bGjRsGCU4IIQzmeiQc/QzO/ZB350UIIYQQwhSy0gvpSyv/OESlNrXjVFrWbgnkFT/md52PlZmViaOq+PQeAZKZmYm9vX2R29PS5B+vEKKCObMdNo8H5Z/JMDs/D4M+MW1MQogibd++vVTHDRkyxMCRCCGEEbToBXVdISlv6VzMLME72LQxiUqnqX1TtgVuIzY1FkcbRyl+lJDeBZBmzZpx5syZIreHhobSsmXLMgUlhBAGFbL4fvED4PeV0G4kZKaAczewKOEKM0KIcjFr1ixUKhWKHqO1VCqVFECEEJWDuRVMPAjhK+HebWg/Chq1M3VUopJqYt/E1CFUKnoXQMmiTisAACAASURBVAYPHsyyZcsYMGAAbdq0AdA+CrNixQqOHj3K3LlzDRulEEKUyUP/idLkwjf/PJ9p3wjG7827EyOEqBBWr15t6hCEEMK4bOtBzxmmjkKIakfvAsiECRMICQlh4sSJuLq6olKpWLhwIUlJSdy8eZOuXbsSFBRkjFiFEFVdWmLeaAyroh+zK5WuU2DzRO4XQh4oiKReh18XwVNfGPaaQohS8/HxMXUIQgiRJ+1G3uTslramjkQIYQB6T4JqaWnJypUreeONN7CyssLKyorLly9Tp04dZsyYwddff41arfdphRDVWfY92BAEn7SEj1vCLwaen8PzaXj+MPSaC33mF9yelmjY6wkhhBCicstMg7XPwCet8nKTY3KjRBiHhYUFrq73RyK3aNECCwsLE0ZUtek9AgTA3NyccePGMW7cOAOHI4SolsK+gXN78r7PyYDD70LrQVC/jeGu4eSd96XJhdPr4eb5+9u8njXcdYQQRvPHH38QGRlJSkoKGo1GZ5tKpeKVV14xUWRCiCrnxJdw4WDe99l34cCbebmJPDIrDEylUrFs2TJeeOEFAJYuXVroaqvCMPQugAwaNAg/Pz98fX3x8fGhZs2axohLCFGd3DhbSF+0YQsg+dRmMHY3HF8Cd66B5zPQeqDhryOEMJiMjAwmT55MSEgIiqLoTJCa/70UQIQQBlUgN1Eg8ZwUQIRR9OvXj8uXL5s6jGpB7wKIjY0NGzZsYO3atajValq3bk2XLl3w9fWlc+fO2NjYGCNOIURV1upJOLX2ftu8BjTvYbzr2TeAvu8a7/xCCINaunQpISEhvPjii/j5+REcHMwHH3yAg4MDy5cvJyMjgw8//NDUYQohqpJWfSFqy/22pT008zNdPEIIg1Ap+qwx94+0tDR+++03Tpw4wYkTJzh37hyKomBubo6npyd+fn689tprxoi3UujUqRMA4eHhJo5EiErkxHKI+Basa8MTs8Clu6kjEkJUEH379sXDw4NFixZx+/Zt/Pz8WLlyJX5+fuTk5PDMM8/QvXt3pk2bZupQKxTJR4TQU/otOPIBJJyBln1AbQGnN+St2NJrLjTzNXWEQogyKtUcIHZ2dvTu3ZvevXsDkJyczC+//MLy5cs5deoUp0+frtYFECFEKXSZlPclhBAPuX79unbeMTMzMwCys7OBvHnJBg0axIYNG6QAIoQom03BEPNr3vcxIdBtKrx83DjXSr4K8X9A0y5g62CcawghCihVAQRAo9Hwxx9/EBoayvHjxzl58iSZmZnUq1cPX1+pjgohhBDCMGxtbcnNzdV+r1aruXHjhna7vb09N2/eNFV4QoiqIP3W/eJHvjPbwX++4a/1+7ew+3VQNHmP/Y5alzfiRAhhdHoXQL799ltCQ0MJCwsjLS2NWrVq0blzZ2bOnImvry8tWrQwRpxCCFG4lFioURcsZf4hIaqqZs2aaSeHMzMzo2XLluzfv59nnnkGRVE4ePAgjRo1Mm2QQojKzcoeatSBe7fv99VxNvx1cnPgx7fyih8AOffg0NtSAKmCFEUhLj2O+jb1sVDLsrYVhd4FkIULF2JmZsbgwYMJDg7mscceM+kyPZcuXWLjxo1ERkYSHR1NZmYmhw4dokmTJiU6fsyYMfz2228F+gcOHMiiRYsMHa4QwlDSEmHjsxAbljcxWf+F4D3G1FEJIYzAz8+PLVu2MGfOHMzMzBg5ciTvvvsu/v7+qFQqYmNjmTp1arnFo0/u4e7uXug55s+fz7PP6i7BnZCQwIIFCwgJCUGj0eDr68vs2bNp2rSpUV6HEOIB5pYw4GPYOSWvKGHXEJ40woTpuVmQkaLbl37L8NcRJnUx+SKv/fQaMXdiqGtdl4XdF9K1cVdThyUoRQHk8ccfJyIigh07dhASEqJdAcbX19ckv6BPnTrFmjVraNGiBS1atCA6OlrvczRu3JjXX39dp8/JyclQIQohjOHIB3nFD4CsVNgzDVoPApu6po1LCGFwkyZNIjAwULv07XPPPUdWVhY7d+5ErVYzdepUnn/++XKLR9/co1u3bjz11FM6fe3bt9dpp6enExwcTHp6Oi+++CLm5uasWrWK4OBgtm/fTq1atQz+OoQQD2k3PG9luqRL0MAzryhiaJY24DFUd4UZryDDX0eY1Ae/fUDMnRgAkjKSeOvYW+x/ej9qldrEkQm9CyDffPMN2dnZnD59muPHj3PixAneeecdcnJyaNSoEb6+vvj5+REQEGCMeAvo3bs3YWFh2NnZsWrVqlIVQGrWrElgYKARohNCGE3iOd12bibc/lsKIEJUQba2tri6uur0jR8/nvHjx5skHn1zD1dX12LzjPXr1xMTE8PWrVt57LHHAOjevTsBAQGsWrVKJpcXorzUqA1O3sa9RuAyaNgOrp8G157gPda41xPl7lLyJZ12fHo86dnp2FvaP/I4RVH44uQXbPlrC/aW9rza4VX6Nu9rzFCrnVKVoCwsLOjUqRNTpkxh7dq1hIWF8emnn1KjRg22bdvGzJkzDR1nkWrXro2dnV2Zz5OTk0N6eroBIhJClItWD/0ysG+cl0wIIYSRlSb3yMjIIDMzs8jt+/fvx8vLS1v8AGjRogV+fn7s27ev1LEKIcrowo/w8wdw6YjhzmlhDd1eh+EroeM4MOF0AsI4ujfprtP2ru9dbPEDYMfFHfzfH/9HUkYSMXdieOOXN4hPjzdWmNVSqVeByczMJDw8nNDQUEJDQ4mOjiY3Nxe1Wk3r1q0NGaPRXbx4ES8vL7Kzs3F0dGT06NFMmjQJtVqGKAlRYflNhpwMOLMNajeDPm+BmUwwJURVsH37dgACAwNRqVTadnGGDBlizLBKbfPmzaxZswZFUXBzc+PVV1/lySef1G7XaDScO3eOkSNHFji2bdu2hISEcO/ePWrUqFGeYQshjnwEP71/v933feg62XTxiEpjZueZWJlZEXo9lNZ1WzOtU8mWaf894Xeddo6Sw8kbJxngMsAYYVZLehdAlixZQmhoKKdPnyYnJwdFUWjZsiXPPvssvr6++Pj4ULNmTWPEahRNmzalS5cuuLu7k5aWxu7du1m0aBFxcXG88847hR7TqVOnR54zNTUVe/viK3xCiDJQq6HnzLwvIUSVMmvWLFQqFQMHDsTS0lLbzp8DpDAqlapCFkA6dOjAwIEDadKkCdevX2f16tVMnjyZTz/9lMGDBwOQnJxMVlYWjo6OBY53dHREURQSExNp1qyZzjbJR4QwIkWBY1/o9h37XAogokRsLGyY3WW23se1rdeW7RfuF/1VqPB08DRkaNVeqQogTZs2ZciQIdrJTx0cHAwSjEajITs7u0T7WllZGeSaCxYs0GkPHTqU1157jU2bNjFu3LgCzxwLIYQQwrhWr14NgKWlpU7bGIyde2zcuFGnPXToUAYPHszHH3/MoEGDUKlU2kdj8l9vYdfMyMjQ+9pCiDJQqYCHHk0pzQSWigKR38HVE9DMD9oOl0deRJGGtRrGuaRzbLuwDXtLe17zfo2mNWUlMEPSuwBy+PBhGjdubIxYCAsLIzg4uET7Hj9+nLp1jTPZ4YQJE/jhhx84ceJEoQWQ8PDwRx5f3B0ZIYQQQhTNx8dH+31GRgZxcXG4uLgUWDnFEMo797CxsWHUqFF8+umnXLp0iRYtWmiLHFlZWQX2zy+OWFtbF9gm+YgQRtbtdTj09gPtUiy3ffDN+yNJwlfAjWjwn2+I6EQVZK42502/N5nTZQ5qlRqVFMsMTu8CiLGKH5A3S/rChQtLtK8hJj4tSsOGDQFISUkpZk8hhBBCGJOlpSXz5s1j7ty5RimAmCL3aNSoEXA/z6hduzaWlpYkJiYW2DcxMRGVSlXo4zFCCCPr/m9o0hliw8C5KzTz1f8cYSsKtv3nGyI6UYWZqc1MHUKVVepJUI3B0dGRYcOGmToMrl69CmC0ESZCCCGEKBm1Wk2jRo1IS0szyvlNkXs8nGeo1Wrc3NyIiooqsG9kZCTOzs4yAaoQpuLSPe+rpFLjIeRzuBMLns+AlR1kP7DSpJXMyyOEKVWrZU4uXrxIXFyctp2WllZguGlubi5ff/01arUaPz+/8g5RCCGEEA8ZMmQIO3fuLPQRkYosKSmpQN/t27dZv349TZo0oXnz5tr+fv36cerUKaKjo7V9ly5dIjQ0lP79+5dHuEKIstLkwrcBELoUonfApjHgPhDtXCIqNfSea9IQhajuKtQIkNJITU1lzZo1AJw6dQqAdevWYW9vT+PGjXVmhB84cCA+Pj7a/c+cOcO0adMYPHgwzZo14+7du+zbt4+oqCief/55mjaVCWeEEEIIU/P29ubgwYMEBgYSFBRU5IiIzp07l0s8Jc091q1bx6FDh3jiiSdo3LgxCQkJfPfddyQlJbF06VKdcwYFBfH9998zadIkxo8fj5mZGatWrcLR0ZFx48aVy+sSQpTRtQi4eV63L/U6TA7Le4ymiQ/Ua2ma2IQQQBUogKSkpLB48WKdvhUr8p618/HxeeSSeI0bN8bb25sDBw5w8+ZN1Go1rVq14oMPPmDo0KFGjVsIIYQQJTN+/Hjt9++//36BSeEURUGlUnH27NlyiaekuUeHDh2IiIjg+++/JyUlBRsbG7y8vHjhhRfo2LGjzvF2dnasWbOGBQsWsGzZMjQaDV26dGHu3LnUqVOnXF6XEKKM7BzJG+3xwJLddvWhXqu8LyEecC3tGktPLuVq6lX8nf0Z89gY1KVZaUjoRaUoilL8bvrJysoqdCm36iJ/1vXiZmcXQgghRPG2bt1aopnw5eaFLslHhDCBA/Pur/pS0wnG7YG6LqaNSVQ4GkVD4PZALt+5rO2b3mk6Yz3Gmi6oasKgI0CioqLYvHkz+/bt48SJE4Y8tRBCCCGqqYowQboQQpRI3/fAeyzcuQbN/MDcytQRiQroQvIFneIHwI8xP0oBpByUeYxNcnIyq1evJjAwkOHDh7Nx40bu3LljiNiEEEIIIZg9ezanT58ucntkZCSzZ88ux4iEEOIR6rUC1yek+CGK1MCmAVZmuu+PZjWbmSia6qXUBZCjR4/y+uuv06NHDxYsWEBsbCxDhw5l8ODBhoxPCCGEENXctm3buHLlSpHbY2Nj2b59ezlGJIQQQpReLatazOg0Q1sEaV6zOS97vWziqKoHvR6BiY2NZcuWLWzfvp34+HjtUrFDhgzhySefxMrKiuXLl7Nnzx5jxSuEEEIIoePu3buYm1f6ed2FEFVBTiYcXwJXw6CZL/i+DObVd25EUbSRrUfS36U/N+7eoGXtliWa60qUXYmyhZ07d7JlyxbCwsLQaDS0atWKGTNmEBAQgKOjo7FjFEIIIUQ1ExcXx7Vr17TtS5cuERYWVmC/lJQUNmzYgLOzc3mGJ4QQhdvzbzi5Nu/78/sgOQYGLzJtTKLCqmVVi1pWtUwdRrVSogLIzJkzsbKyIjg4mMDAQNq0aWPsuIQQQghRjW3dupUlS5agUqlQqVR89dVXfPXVVwX2UxQFtVrNggULTBClEEI8JHJTwbYUQISeUrNS2XlxJ2lZaQx0HUhT+6amDqnKKFEBxNLSkszMTA4fPoy9vT01a9bEycnJ2LEJIYQQopry9/fHyckJRVGYM2cOI0aMoEOHDjr7qFQqbGxsaNu2LY0aNTJRpEKIKuNKKBz9FLLuQucJ4Pm0/uewawgpD8xZZN/QcPGJaiE7N5sxe8dwMeUiACvPrGT9oPW41nI1cWRVQ4kKIL/++qv2MZgvvviCJUuW0KlTJwIDA+nfvz92dnbGjlMIIYQQ1Ujr1q1p3bo1kPc4TN++fXFzczNxVEKIKuvOdVg9BHLu5bVjfgVbR3Dpod95+i+ELRMhJwPMa0A/GZ1W3d28d5PwhHDc6riVqIjx67VftcUPgPTsdLac38KMzjOMGWa1UaICSM2aNRk9ejSjR4/mzJkzbN68mT179jBv3jzee+89+vTpQ2BgIN26dTN2vEIIIYSoZiZPnmzqEIQQVd3FQ/eLH/n+3KN/AaTNYJgaDfGR0Kg92NQ1XIyi0jked5wph6eQmZsJwPRO0xnrMfaRx5ipzUrUJ0pH7ynTPTw88PDwYPbs2ezfv5/Nmzezd+9e9u7di4ODA/Xr1zdGnEIIIYQQQghhHHVblKyvJGwdoEWvssUjqoSlp5Zqix/57ZHuI7E2ty7ymK6Nu+Lp4EnUrSgAalvVZoTbCKPHWl2Ues04S0tLAgICCAgI0FkeNzo6WpbwEUIIIYQQQlQezn7gMwnC/geKBlr0Ae8xpo5KVHIpmSk67YycDDJzMx9ZADFXm7NqwCp+jPmRtKw0/J39cajhYOxQqw2VoiiKoU6mKApHjx5ly5YtLF682FCnrXQ6deoEQHh4uIkjEUIIIUR1JfmIEKWQGg/Z96Cui6kjEVXAt2e+5ZPwT7Ttvs59+fSJT00YkSj1CJDCqFQqevToQY8eej4rJ0Qh1hy/zOJDF8jKyWX84y5MfVImvxNCCCGEEEYkq7YIAxrrMZb6NvUJuRaCWx03RrYeaeqQqj2DFkCEMJSoaym8ueOMtr340F881rgm/Tzkl5IQQoiCsrKysLS0NHUYQgghhI4BLgMY4DLA1GGIf6hNHYAQhfk95naBvohC+oQQQlRvUVFRzJ8/n+7du5s6FCGEEKLErqVd441f3mDU7lF8ffprcjW5pg6pWpARIKJC6uhcp0CfdyF9Qgghqp/k5GR27tzJli1bOH/+PIqiyATsQgghKg1FUXj5x5e5lHIJgDO38ka+v9D+BVOGVS1IAURUSJ5OtXg30ENnDhB5/EUIIaq3/InWDx8+TFZWFra2tgwdOpSsrCz27Nlj6vCEEEKIErl857K2+JHvp6s/SQGkHEgBRFRYY/yaM8avuanDEEIIYUKxsbFs2bKF7du3Ex8fj1qtxs/PjyFDhvDkk09iZWXF8uXLpQAihBCi0qhvU58a5jW4l3NP2+dc09mEEVUfUgARQgghRIWT/4hLWFgYGo2GVq1aMWPGDAICAnB0dDR1eEIIIUSp2VrYMrfLXN4/8T73cu7hWsuVKR2mmDqsakEKIEIIIYSocGbOnImVlRXBwcEEBgbSpk0bU4ckhBBCGExgy0D8nf25cfcGzWs2l7msyomsAiOEEEKICsfS0pLMzEwOHz7M4cOHuXbtmqlDEkIIIQzK1sIWl1ouehU/om5G8fTOp2m/uj2vHHqFpIwkI0ZY9UgBRAghhBAVzq+//sq8efOwtbXliy++wN/fnzFjxrB582bS0tJMHZ4QQghR7jSKhulHpnP+9nk0ioZfYn/h47CPTR1WpSIFECGEEEJUODVr1mT06NFs27aNLVu2MGrUKM6dO8e8efPo1q0b06ZN45dffkGj0Zg6VCGEEKJcJN5N5Fqa7ojI04mnTRRN5VTp5wA5fvw4O3fuJCIigvj4eBwdHfHz8+PVV18t8SRpFy9eZMGCBURERGBhYUGvXr144403qFu3rpGjF0IIIURxPDw88PDwYPbs2ezfv5/Nmzezd+9e9u7di4ODA/Xr1y/XePTNPQ4dOsSSJUu4cOECDg4OPPPMM7z44ouYm+umYXfu3OHjjz/m4MGDZGRk0K5dO2bPni3znwghhADA0caRJnZNiE2L1fZ1qN/BhBFVPipFURRTB1EWw4YNIyUlhf79+9O8eXOuXr3K2rVrsbGxYceOHTg4ODzy+Pj4eIYMGaK903T37l1WrFiBk5MTmzZtwsLCQu+YOnXqBEB4eHipXpMQQgghHu3B5XGvX7+OSqXi7Nmz5XJtfXKPI0eO8MILL+Dr68vAgQM5f/4869atIygoiDfffFO7n0ajISgoiPPnzzNhwgTq1KnD+vXrSUhIYOvWrTRr1kzvOCUfEcIIcnPg95UQGwbN/MB7LKhlUL0oP9G3onnn+DtcSL5AN6duzPebT23r2qYOq9Ko9AWQsLAwOnbsiPqBD56wsDBGjx7N5MmTmTLl0csJzZ8/nx07dvDDDz/QoEEDAI4dO8b48eN5//33eeaZZ/SOSRIOIYQQonwoisLRo0fZsmULixcvLpdr6pN7DBo0CCsrK77//nvMzMwAWLRoEcuXL2ffvn00b94cgL179zJ16lSWLl2Kv78/AElJSfTr149evXrx0Ucf6R2n5CNCGMGeaRD2v/ttv8nQ733TxSOE0EulL1d27txZJwHJ76tduzYXL14s9vgDBw7Qu3dvbfEDoGvXrjRv3px9+/YZPF4hhBBCGI5KpaJHjx7lVvyAkuceFy5c4MKFC4wcOVJb/AAICgpCo9Fw4MABbd/+/fupX78+ffr00fbVrVuXAQMG8OOPP5KdnW3EVySEKLGTax9qrzFNHEKIUqn0c4AUJj09nfT0dOrUqfPI/RISErh16xaenp4FtrVr146QkJBCj8u/o1KU1NRU7O3tSx6wEEIIISq1wnKP6OhogAJ5RoMGDWjYsKF2O8DZs2fx8PAosBRi27Zt+e6777hy5QotWrTQ2Sb5iBAmUKMOpF5/oC1zBgpRmVTJAsi3335LdnY2AwYMeOR+N27cACh0wjJHR0du3bpFbm6uzl2bklCpVJJwCCGEENVIYblHYmIiUHSekZ+H5O/r6+tbYL/8CV5v3LhRoABSHMlHhDCCaX+aOgIhRBlUqAKIRqMp8RBPKyurQvvDwsJYunQpgwcPxsfH55HnyMzMBMDS0rLI82dkZGBra6uzTZ6lNZxevXqRmppq6jCEENWcvb09P/30k6nDECZgzNwjIyMDKDrPuHfvns6+he2X35d/rgdJPmI4ko8IISoCyUeMr0IVQMLCwggODi7RvsePHy+wTO3FixeZPHky7u7uvPvuu8WeIz+RycrKKrAtvzhibW1donhE6Vy/fh1FUeQOlSi1/IRV3kOitFJTU0lLSzN1GMJEjJl75OcQReUZD+YY1tbWhe6X3yf5iHFJPiLKSvIRUVaSj5SPClUAcXV1ZeHChSXa187OTqd9/fp1Jk6ciL29PcuXL8fGxqbYc+QPK80fovqgxMREHBwc9H78Regn/+9R7mKJ0pJVDkRZFTePgqjajJl75D/6kpiYqM058iUmJtKhQwedfR98JCZfft/DxwvDknxElJXkI6KsJB8pHxWqAOLo6MiwYcP0Pu727dtMmDCBrKwsvv32W+rVq1ei4xo0aEDdunWJiooqsC0yMpI2bdroHYsQQgghKg9j5h75eURUVBQeHh7a/oSEBOLj43XyjNatW3Py5EkURdGZCDUyMhIbGxuaNWumd4xCCCGE0FXpl8G9e/cukyZNIiEhgeXLl+Ps7FzkvleuXOHKlSs6fX379uXw4cMkJCRo+44fP87ly5fp37+/0eIWQgghROVU0tyjVatWuLq68t1335Gbm6vt37BhA2q1mr59+2r7+vfvz40bNzh06JC2LykpiR9++IE+ffpgYWFhvBckhBBCVBMVagRIaUyfPp3IyEiefvppLl68yMWLF7Xb6tWrx+OPP65tjxs3DoDDhw9r+1588UV++OEHgoODGT16NHfv3uWbb76hdevWBAYGltvrEEIIIUTloE/uMXPmTF566SUmTpzIwIEDOX/+POvWrWPkyJG4uLho9+vXrx9eXl7MnDmTCRMmUKdOHTZs2IBGo2HKlCnl+vqEEEKIqqrSF0D+/DNvKaotW7awZcsWnW0+Pj46SUhhGjVqxNq1a/nggw/49NNPsbCw4IknnmD27NmFzsYuhBBCiOpNn9yjV69eLFmyhCVLlvDuu+9St25dXnrpJV5++WWd48zMzFi+fDkfffQRa9asITMzk7Zt2/Lhhx8+cnSrEEIIIUpOpSiKYuogRPUlE0aJspL3kCgreQ8JIeRzQJSVvIdEWcl7qHxU+jlAhBBCCCGEEEIIIYojBRAhhBBCCCGEEEJUefIIjBBCCCGEEEIIIao8GQEihBBCCCGEEEKIKk8KIEIIIYQQQgghhKjypAAihBBCCCGEEEKIKk8KIEKIEtu6dSvu7u7ExsaaOpRHqixxCiGEEEJ/leX3fGWJU4jqRAog4pH27t2Lu7s7hw8fLrDN398fd3d3oqOjdfqzsrJo164dr732ml7X+uqrrzh06FCZ4q1u8n+xnj17ttDtgYGBjBkzppyjqjzyf36FfWVmZmr3UxSF//73v3Tr1o1u3brx+eef8/D80enp6XTr1o3du3frFUNqaiqff/45AQEBeHl50b59e5566ikWLVpEUlJSocdMmjQJd3d3li5dqv+LLqPy/EyA8v9ciIuL4/PPP+fpp5+mU6dO+Pr6MnbsWE6cOFFg39DQUAICAvD29mbSpEkkJCQU2Oett95i0qRJesWgKAp79+5lwoQJdOnSBU9PT3r27Mn06dOJiIgo9Jjdu3fj7u5O//799bqWEJWF5CMVm+QjZSP5iP4kH7lP8hH9SAFEPFLHjh0BOHnypE5/YmIiV69exdzcvMC26OhoMjMztceW1Ndff13oh5gQxjZ16lQ++ugjnS8LCwvt9h07dvDNN98watQoRo0axfLly9m1a5fOOZYtW4azszODBw8u8XVjYmIIDAzk66+/xt3dnRkzZjBnzhy8vb1Zv359ob+okpKSCAkJwcnJiT179pT+RZdSeX4mQPl/Lhw4cIAVK1bg4uLC1KlTefHFF0lJSSE4OFgnmUxOTmbKlCk0a9aM6dOnc+XKFebOnatzrj///JPt27czZ86cEl8/NzeX6dOnM3XqVO7cucPEiROZP38+w4cP59y5czz77LNcunSpwHG7du3CycmJv//+m6ioqNL/AISooCQfEdWB5CMlJ/lIHslH9Gdu6gBExdagQQOcnJwKVPkiIiKwsrKiZ8+eRERE8Nxzz+lsA0r14WJod+/excbGxtRhVCuKopCZmYm1tbWpQymxnj170qZNmyK3//zzzwQEBDB58mQArl27xs8//8xTTz0F5CUOa9euZePGjSW+jPQFMwAAIABJREFUZk5ODpMnT+b27dusW7cOLy8vne1Tp05l9erVBY7bt28f5ubmvP322/zrX/8iOjqaxx57rMTXLavK/pkAj/5c6Nq1K4GBgdSpU0fb9+yzz/LUU0+xePFibUIZERFBbm4uixYtwtLSEhcXFyZOnEhWVhaWlpYAvPfee4wePZrmzZuXOLbly5eze/duJk2axLRp03S2vfLKK6xfvx6VSqXTf/v2bUJCQnj33XdZsmQJu3fvxtPTs8TXFKIyqOyfPZKPlD/JR0pG8hHTkXzENGQEiCiWt7c3f/zxB1lZWdq+iIgIPDw86Ny5c4EPnpMnT2JjY0Pr1q2BvH9Ao0aNwsfHh3bt2jFs2DAOHjyo3T8nJwd3d3fu3r3L5s2btUP+HqxeXrt2jRkzZuDr60vbtm156qmn2Lt3r851v//+e9zd3YmIiGDevHl06dKFIUOGGONHUimlp6fj5eXFe++9V2Db5cuXcXd3Z926ddq+v/76i+DgYNq1a0ePHj1YtmwZGo2mwLG9e/fm5Zdf5siRIwwdOpS2bdtq/25ycnJYsmQJffr0wdPTE39/f5YuXUpubq7OOTIyMnjvvffo0qULHTp04MUXXyQhIQF3d3e++OILnX2vX7/OzJkz8fPzw9PTk4CAAL2HeRYmLS2t0NeXH1/NmjW17Vq1anHv3j1te8GCBQQGBj4yaXnY/v37OX/+PC+99FKBZCP/GlOmTCnQv2vXLnr27Em3bt1o3LhxgTs/5aGsnwlQcT8X3NzcdJINACsrK7p3786VK1fIzs4G8t4T1tbW2uSiVq1a5Obman8me/bs4fLly7z00ksl+plCXiL0zTff4ObmxtSpUwtsV6lUPPfcc7i4uOj079u3D5VKhb+/PwMHDmTPnj1FvpeFqMwkH6kaJB95NMlHSk7yEclHSkMKIKJY3t7eZGZm6jxHFxERQYcOHejQoQNxcXHEx8frbPPy8sLMzAyA1atX89hjj/Haa6/x73//G5VKxeTJk/nll18AMDMz46OPPsLS0hIfHx/tkL/hw4cDkJCQwMiRIzl58iTjxo1j1qxZ1KtXj6lTp7Jjx44C8b755pvExcXx6quvMnr0aGP+aCqMO3fukJSUVODrwQ8dW1tb/P39+eGHHwr8wt+1axcWFhYMHDgQyBs+GBwczLlz55g0aRJjx45lx44dhd4BALh48SIzZ86kR48ezJ07F1dXVwDmzZvHF198Qfv27Zk9ezZt27bl888/56233tI5ftasWaxZs4ZevXoxffp0rK2tCx1ueePGDUaMGEF4eDjBwcHMmTOH+vXrM23aNLZu3Vrqn19QUBAdO3bEy8uLV199lbi4OJ3t+UlUZGQkkZGR7N69m7Zt2wJw5MgRTp48yeuvv67XNfOHUebftSmJ2NhYTp06xcCBA1GpVPTv398kv1zK+pkAle9z4ebNm9jb22uHInt4eGjvlsXGxrJ8+XJcXFyws7Pj3r17fPzxx0yfPh07O7sSXyMsLIzU1FQCAgJQq0v+63n37t10794de3t7Bg0axI0bNwp9RliIyk7ykYpP8hHJR8qT5COSj5SKIkQxzp49q7i5uSnffPONoiiKcu/ePcXDw0M5ePCgkpWVpbRr107Zs2ePoiiKEhMTo7i5uSlffPGF9vh79+7pnC8zM1MZMGCAMmHCBJ1+Ly8vZc6cOQWuP3PmTKVXr17KnTt3dPrHjx+v9OjRQ9FoNIqiKMqmTZsUNzc3ZezYsUpubm7ZX3glsGXLFsXNze2RX6NHj9bu/8svvyhubm7Kr7/+qnOeJ598UnnhhRe07ffff19xd3dXoqKitH23bt1SOnbsqLi5uSlXr17V9vfq1Utxc3NTjh07pnPO/PfNf/7zH53+N998U3Fzc1POnj2rKIqiREVFKW5ubsoHH3ygs9+sWbMUNzc35fPPP9f2zZ49W+nRo4eSkpKis+/EiROVxx9/XPv3nv9zeTDOwuzdu1eZNWuWsm3bNuXAgQPKxx9/rHh6eio9evRQbt26pd0vNTVVGTFihPZnOmLECCU1NVXJyspS+vXrp6xevfqR1ynMkCFDlI4dO+p1zJdffql4eXlp/01FRkYqbm5uyvHjx/W+flmU9TMh/5gHVeTPhUuXLimenp7K3LlzdfqXLVumuLu7K25ubkqnTp20fw+LFi1SRowYoY2hpFasWKG4ubkphw8fLvExsbGxiru7u7Jr1y5tX//+/ZXZs2frdW0hKgPJRyouyUfySD4i+Ug+yUcqbj4iI0BEsdzc3LC3t9cOI4uMjCQ7O5sOHTpgYWGBp6endlthz9blP3upKAopKSmkpaXRsWNHzpw5U+y1NRoNBw8epHfv3mRnZ+vcTejevTvx8fFcuXJF55gRI0boVa2sCt5++21WrlxZ4KtZs2Y6+3Xt2hVHR0edYYqRkZHExMToVP6PHDmCt7c3Hh4e2r66desSEBBQ6PWbN2+On5+fTt+RI0cAGD9+vE7/uHHjALSV9aNHjwJ5dz0e9HBVXFEU7XshJyenwHshMTGRv//+u/AfUBEGDBjAwoULGTJkCE8++STTp09nyZIlxMfH8+2332r3s7OzY/369ezatYudO3eyfv167OzsWL16NRYWFgQFBXHhwgXGjBlD9+7dmT59OmlpaY+8dlpaGra2tnrFu3v3bnr37q39N9W2bVucnZ0NMuRWH2X9TIDK87lw9+5dXn31VWxtbQvcVXvppZc4cuQImzZt4qeffsLX15fY2FhWrVrF3LlzycrK4u2336Znz54MHz6cU6dOPfJa+e8Zfd4Xe/bswdraml69emn7Bg4cyMGDB3WGBAtRFUg+UvFJPiL5SHmSfCSP5CP6kUlQRbHUajVeXl46HyDOzs44ODgA0KFDB44dO6bdZmZmRrt27bTHHzp0iK+++oo///xT5x/Ag7NaFyUxMZH09HTWrFnDmjVrCt0nKSkJZ2dnbbtJkyb6v8hKrn379oU+7/nwxEpmZmYEBASwadMm3n77baysrNi5cyd2dnb07t1bu19cXBze3t4Fzvfws375CvuZX7t2DXNz8wJJj7OzM+bm5ly7dk17LXNzc5ycnArs96CkpCTu3LnD+vXrWb9+faFx3L59u9B+ffTs2RNXV1eOHz+u89yjmZkZbm5u2nZiYiLLli1jyZIlaDQaXnjhBXr16sXMmTP54IMPePfdd/nwww+LvI6dnR1Xr14tcVx//vknf/31FyNHjiQmJkbb36VLF3744Qf+85//aJ//NLayfiZA5fhcyMnJ4fXXXycmJoYVK1ZQr169Avs0aNCABg0aaNsffPABAwYMoF27dnzyySeEh4ezePFiQkJCmDRpEocPHy5yGGp+f3p6eolj3LVrF15eXty8eZObN28CeYnonTt3+Pnnn+nbt68+L1mICk3ykYpP8pE8ko9IPpJP8pGKl49IAUSUSMeOHTl69CgxMTHaZ+vyeXl5sWLFCtLT0zl58iStW7fWVgxDQ0N55ZVX8PHxYf78+dSrVw8LCwu+//579u/fX+x1lX/WNn/mmWcYNGhQofu0bNlSp12ZZvs2hcDAQFasWMFPP/3Ek08+yb59++jbt2+Zfm5WVlYGjLBw+c+VDhs2rMg7P61atTLItRo1aqRNiIry2Wef8fjjj+Pn50d4eDiJiYnMmDEDKysrpkyZwr/+9S8WLlxYZJXf1dWV6Oho4uPjadiwYbEx5d8lK2zSOMi7g+Xv71/seQyltJ8JUDk+FxRFYe7cuRw9epT//ve/dOrUqdhjjh8/zvHjx7WvYc+ePbz++ut4eXnRvn17vvvuO44cOVJkzPnPqv/11186d1CKcu7cOc6fPw9QaGKxe/fuCpVwCGEIko9UHZKPFE/ykeJJPlKQ5COPJgUQUSL51ffw8P9v797joirzP4B/gOEWZCw3FUTBbAaWuwiDt9DEa0oqrBBqKkJmaq7aspYumuYlL9iu4Ms11MzEBS0xMYQFMzC5aEDgZrwCRcRVjFBZHUEGz+8PfnNiHIgBLyh+3q+Xf/A8zznnmWeOZ76v53bOoLCwEIsXL1bLa2xsxMmTJ1FaWqo2VTAtLQ3GxsaIi4tT6w1OTEzU6rqWlpYwNjYG0DRdkh6co6MjZDIZjhw5AhMTE1RXV2tsfGVjY6PWq6/Snimdtra2UCqVqKioUHvtVkVFBZRKpTjCYmNjA6VSicuXL8POzk4sd//1zc3NYWJiAkEQHvm9cOnSJXH0oCVFRUVISUkRp3peu3YN3bp1EwMva2trcSpkS730ADBs2DAkJyfjq6++anGDteYEQcDRo0cxZMgQcdOt5jZv3oyvvvrqsQYcHX0mAE/Hc2HdunVISkpCVFQURo8e3WZ5pVKJNWvWYN68eeJ3fu3aNVhbWwNo2jHdysoKVVVVrZ5jwIABMDU1RXJyMiIiIjReL3e/I0eOwNjYGOvXr9fI+/bbb3H06FHcunWrXRufET3pGI90HYxH2sZ4pG2MR9QxHmnbs7UwkTrMzc1N7BG9efOmWu+qubk5evfujd27d+PevXtqUxV1dXWho6Mj9pACTQ9z1Y7TzT333HP43//+p5YmkUgwYsQIJCcno7y8XOOYmpqah/Dpnj0TJ05EZmYm4uPjYW1tDblcrpavend68/WPNTU17XrFmZ+fHwCorV0FIO7crsofMmQIAGhMI/3888/V/tbT08PIkSPx9ddf4/z58xrX68i90NIxR44cQUVFhViv+wmCgNWrVyMsLEycxmhhYYHr16/jxo0bAIDz589DIpFovL6suTFjxuCll17C9u3bUVRUpJFfW1uLmJgYAE0/6leuXEFgYCDGjBmj8c/f3x8nTpxoc53vw9TRZwLw5D8X/vnPf2LPnj2YN28epk6dqtUx8fHxUCqVmD59uphmYWEh3qt3795FZWVlqwEo0LTWdtasWSgpKcHHH3+skS8IAvbv348LFy6IQaivr2+L98SMGTNQX1+v1QgW0dOE8UjXwnik9WMYj2iH8Yg6xiNt4wwQ0oqxsTGcnJxQUFCA559/XmNqn6enp/iqp+abCw0bNgx79+5FeHg4Xn31VVRXV2Pfvn2wt7dHaWmp2jmcnZ1x8uRJfPrpp7CysoKdnR3c3NwQGRmJ06dPY/LkyQgODoaDgwNqampQVFSEn3/+We1d3aSd8ePHY9OmTTh+/DjCwsI0pkWGh4fj8OHDCAsLw/Tp02FsbIzExETY2NigpKREq2s4Ojpi0qRJiI+PR21tLfr374/8/HwkJycjKCgIMpkMAODi4oLRo0dj165duH79OlxdXXH69Gnxh6R5r/OSJUuQm5uLwMBABAcHo2/fvrh+/TqKi4vx448/tviD9XtCQkLg7OyMP/7xjzA1NUVRURGSkpJgb2+PGTNmtHjMoUOHUF1djYiICDHN09MTFhYWWLhwIUaNGoWdO3di5MiRaq9Zu5++vj62bt2KsLAwhIaGYuzYsfD09IREIkFJSQmSk5PRu3dvzJ8/X3wt4NChQ1s81/Dhw7Fr1y6kpaVh8uTJ7WqDjuroMwF4sp8Lx44dQ3R0NBwcHNCnTx+NV9iNGjVKHO1RqampwdatW7F582a1NcOjR49GTEwMlEolzpw5g4aGBrz88su/e/25c+eirKwM27dvR3Z2Nvz9/WFhYYGqqiqkpaXhp59+QkpKCr7//nv897//xVtvvdXieRwdHdGzZ08cOXIEgYGBHWoLoicR45GuhfFIE8YjHcd45DeMR7TDDhDSWv/+/VFUVAR3d3eNHygPDw8cPnwYdnZ24hQroKk3ffXq1YiLi8OaNWtgZ2eHv/71r7hw4YLGg2Xp0qWIiorCli1bUFdXh6CgILi5uaF79+44ePAgYmJicPToUdTU1OAPf/gDZDIZFi5c+Fg+e1djbW2NgQMH4uTJky2+993a2hqfffYZPvzwQ+zYsQNmZmYICQmBtbU1li1bpvV1PvzwQ/Tq1QtffvklUlNTYW1tjXfeeUfjIfnRRx/B0tISR48eRWpqKgYNGoQtW7ZgzJgxalMSra2tceDAAcTExCAlJQW//vorzMzMOnwvjB07FidOnEBWVhbq6upgbW2NqVOnYv78+Xj++ec1yt+6dQvR0dF4//331X50DAwMEBsbixUrVmDz5s3w8fFBVFRUm9d3cHBAUlISdu/ejfT0dKSlpUEQBNjb22Pq1KmYPn06GhoakJqaiv79+7dYJ6Dp/+YLL7yA5OTkxxZwqK7b3mcC8GQ/F86dOwegaXp1ZGSkRr5cLtcIOD7++GN4eXlpBBN//vOfcePGDcTExMDKygoxMTEwMzP73evr6ekhOjoa/v7+OHDgAOLi4nD79m1YWlrCx8cHq1atgoODAz799FMATcFba4YNG4aEhAS1qa9EXQHjka6D8UgTxiMPhvFIE8Yj2tERms/5IaJnxltvvYXKysrH/soybZ07dw4TJ07Exo0bWwyKiIiI6OnHeISIHifuAUL0DLp69SqysrKemB/yuro6jbQ9e/ZAV1cX3t7enVAjIiIietQYjxDR48YlMETPkEuXLiE/Px8JCQkwMDBAUFBQZ1cJQNMmTz/99BPkcjl0dXWRlZWFzMxMBAcHo2fPnp1dPSIiInqIGI8QUWdhBwjRM+T06dN47733YGtriw0bNsDc3LyzqwSgaYOq7OxsbNu2DQqFAj179sSCBQta3VCJiIiInl6MR4ios3APECIiIiIiIiLq8rgHCBERERERERF1eewAISIiIiIiIqIujx0gRERERERERNTlsQOEqAs4cOAAZDIZzpw509lV0aBUKiGTybBs2bLOrsozjd8DERE9aoxHqC38HqizsQOEqA2ZmZmQyWTYsmWLRl5hYSFkMhlcXFxw584djfzZs2fD0dERNTU1j6OqpKXs7Gxs3boVt27d6uyqEBERaYXxSNfDeITo8WMHCFEbvLy8IJFIkJeXp5GXm5sLiUSChoYGFBQUqOUplUrk5+fjpZdeemJe70ZNcnJyEBMT80wFHBKJBEVFRfjggw86uypERNQBjEe6HsYjRI8fO0CI2mBiYgJXV1cUFxdrjKrk5eVh0KBBsLKyQm5urlpecXExFAoF5HL546wudbLGxsYWR9/a8jiCH0NDQ0gkkkd+HSIievgYj1B7MB4hahk7QIi0IJfL0dDQgPz8fDFNNaLi7e0Nb29vjYBDNUJzf8BRVVWFqKgo+Pn5wcXFBUOHDkVUVFSL01Jra2uxYcMG+Pv7w8XFBb6+vliyZAkuXbqkVb1jYmIgk8mwdu1aCIIgpmdlZWHWrFnw8vKCq6srAgICkJCQoHH8yy+/jJkzZ6K0tBTh4eHw9PSEl5cXFi5ciF9//VWjfElJCcLCwuDh4QG5XI7IyEitp9tWVFRAJpMhNjZWLX3GjBmQyWTYu3evWvrkyZMxYcIE8e+ysjKsWLEC48aNg6enJ9zd3TF58mQcPHhQ7bh3330X27dvBwD4+flBJpNBJpNh27ZtYhlt21211lk1gjNixAi4uroiLS2t1c958eJF8XrJycmYNGkSXF1dsW7dOrFMe+6Rc+fOYebMmXB3d4dcLsfSpUtRXV2tsb62pTW3zdNOnTqFKVOmwN3dHX5+foiLiwMA3LhxA++99x58fX3h7u6OuXPn4pdfftGox4Peq0RE1DbGI4xHGI8wHqEHw643Ii3I5XJs374deXl5GDx4MIDfRlR8fHxgamqKtWvXQqFQ4LnnngPQFHDo6OjA29tbPM+lS5fw+uuvo7GxEUFBQbCzs0N5eTn279+P3NxcfPHFFzA1NQUA3Lx5EyEhIaiqqkJgYCD69euHa9euIT4+HqdOncKXX36Jnj17tljfxsZGrFy5EgcOHEBkZCRmz54t5sXHx2PVqlXw9PTE22+/DSMjI5w8eRJRUVGorKzEkiVL1M515coVvPHGGxg9ejT8/f3x448/IjExEQqFAp988olY7uLFi5g2bRqUSiWmTZuG7t274/jx45gzZ45Wbdy7d2/Y2NggJycH8+bNAwDU19ejoKAAurq6yMnJwfTp08W2OXfuHKZOnSoen52djfz8fLzyyivo1asXFAoFvv76ayxbtgw3btxAeHg4ACA0NBQKhQIZGRlYvnw5unXrBgBwcnLqcLuvW7cO9+7dQ3BwMExMTGBvb9/m501NTcXVq1cREhKC119/Xfze23OPlJWViW0wY8YMWFtb45tvvsGbb76pVZurnD17Funp6QgODsZrr72GlJQUbNy4EUZGRkhMTIS9vT0WLFiA8vJy7Nu3D0uXLsXOnTvF4x/kXiUiIu0xHmE8wniE8Qg9IIGI2nTnzh3B2dlZCA4OFtO2b98ueHh4CA0NDUJpaakglUqFrKwsQRAEoaGhQfDw8BACAgLUzhMRESEMGjRIuHr1qlp6YWGh4OjoKMTGxoppK1euFNzc3ISSkhK1shUVFYKHh4fw/vvvi2mJiYmCVCoVTp8+LSgUCmHOnDmCs7OzcPjwYbVjr1y5Ijg7Owt/+ctfND7jypUrBScnJ6GyslJMGzp0qCCVSoXU1FS1sn/7298EqVQqlJeXi2nvvPOOWAeVxsZGYc6cOYJUKlWrb2uWLl0quLi4CHV1dYIgCMKpU6cEqVQqvPvuu8KAAQOExsZGQRAEIS0tTZBKpcK///1v8djbt29rnE+pVAohISGCt7e3oFQqxfTo6GhBKpUKV65cabEd2tvuY8eOFe7cudPm5xMEQSgvLxekUqng7OwsnD9/XiO/PffIvHnzBKlUKhQWFopp9+7dE+bPn6/R5g0NDa2mOTo6CsXFxWJ6fX294OvrK8hkMmHt2rVq9Vi9erUglUqFixcvimntaTMiIuo4xiOMRxiPNGE8Qh3FJTBEWjAyMoK7uzvOnj0LhUIBoGlEpX///pBIJHjxxRdhYWEhTjNtab3t9evXkZmZiREjRkBfXx81NTXiPzs7O/Tq1QvfffcdAODevXtITk6Gj48PLC0t1cqq1gCryjZ348YNzJw5E3l5edixYwcCAgLU8o8dO4aGhgYEBgaqnbOmpgbDhw9HY2MjsrOz1Y6xsbHBqFGj1NJ8fX0BNI2yAE1TF0+cOAEPDw8MGDBALKerqyuOdGhDLpfj7t274tTenJwcWFlZYdq0aaitrcXZs2cBNG32pqenBx8fH/FY1UgX0DRSc/36ddy8eRNDhgzBzZs3UV5e3ub1O9ruoaGhMDIy0vpzAsArr7wCBwcHtbT23CNKpRKZmZni9FoVHR0dzJo1q1118fLygouLi/i3gYEBXF1dIQiCOMrVvCwAsT072mZERNR+jEcYjzAe+a0swHiE2o9LYIi0JJfLcebMGXz//fcYOHAg8vPz1aZTDhgwQFx3qwo8mv8gXrhwAYIgICEhocX1rUDTDzQA/PLLL6itrUVmZiYGDhzYYll9fX2NtMjISNy5cwf79++Hh4eHRn5ZWRkA4I033mj1c96/lrZXr14aZczMzAA0BTgAUF1djbq6OvTt21ej7Isvvtjqte6n+qw5OTkYOHAgcnNz4evrCxcXF5iamiInJwdubm7IycmBk5OTOF0UaNq0a+vWrTh27BiuXr2qce6bN2+2ef2Otrs2U0y1OaY990h1dTXq6+s1ghYALab9Hjs7O420bt26QVdXFzY2NmrpL7zwAoDfvvuOthkREXUM45HfMB5Rx3iE8Qi1jR0gRFqSy+WIjY1FXl4eTE1NoVAo1NbT+vj4YN26dbh9+zby8vKgq6urli/8/6ZfkyZN0hgJUbm/137IkCFq62Wb09HR0Uh79dVXcfDgQcTGxiImJgaGhoZq+ao6bNq0CRYWFi2et3fv3mp/6+nptViu+fkelu7du8Pe3h45OTm4desWiouLERQUBD09PXh7eyMnJweBgYH4+eefNUZyFi1ahKysLISEhMDLywtmZmbQ09PD8ePHsXfvXty7d0/rerS33ds72tLaMR25Rx4GVRBzPx0dnVbz7v/u29tmRETUMYxHNDEeacJ4hPEItY0dIERa8vT0hKGhIXJzc2FqagojIyO4urqK+d7e3lAqlcjLy0N+fj6cnJzE3mkA6NOnD3R0dNDQ0IBBgwb97rUsLCxgYmKC27dvt1m2uddeew3e3t5YunQp5s6di23btqn9QPXp0wcAYG5u3q7ztsXS0hJGRkY4f/68Rp5qlEdbvr6+OHjwIL799lsolUqxF9/X1xdbtmxBVlaW+LeKaqpmYGAgVq5cqXY+VfnmWvsB7Gi7PyztuUcsLS1haGiICxcuaOS1lPaodHabERE9axiPtI7xyMPBeIS6Mu4BQqQlAwMDeHh44D//+Q+++eYbeHh4wMDAQMyXSqUwMzPDzp07xd3Ym7O0tMTgwYORmpqKoqIijfMLgiC+VkwikWD8+PEoKChAenp6i/Vp6bVvABAQEIBNmzYhNzcXb775prhGGADGjRsHfX19/OMf/0B9fb3GsbW1tbh7927bjXEfiUQCPz8/FBYW4syZM2qfSfX6Mm35+vpCqVQiNjYWdnZ2sLW1FdPr6urwySefQF9fX21tr2pU6P5RgKqqKnzxxRca11Ctz1VNm2z+OTra7g9De++RoUOHoqCgAD/88INamd27dz+yOt6vs9uMiOhZw3ikdYxHHg7GI9SVcQYIUTvI5XLk5uaioKAACxYsUMvT0dHBgAEDxIdu8w3HVFatWoXQ0FCEhoZi4sSJcHJyQmNjIyorK5Geno6goCC8/fbbAJreD6+6ztixY+Hu7g6JRILLly8jMzMT7u7uWLNmTYv1HDduHCQSCRYvXoyIiAjs2LEDJiYmsLW1RVRUlPh++oCAANjY2KCmpgYlJSXIyMhAamoqevTo0e62Wbx4Mb777jtERESIr53LyMjQ+FFvi1wuh46ODsrKyvCnP/1JTJfJZDA3N0dpaSm8vLxgbGws5nXr1g0DBw5EUlISDAwM4OLigsuXL+Nf//oX7OxCJlXcAAACfElEQVTsNNbbqtYjb9y4EePHj4eBgQFkMhn69ev3QO3+MLTnHlm0aBFOnTqFWbNmYdq0aeJr51Rt/rimenZ2mxERPWsYj7SO8cjDwXiEuip2gBC1Q/Mg4v4RFaBp2ml6ejr09PTURgRUbG1tcejQIezYsQPHjx9HUlISjI2N0aNHD/j7+2P06NFi2W7duiEhIQG7du3CsWPHxPP26NED3t7eCAoK+t26jho1Cn//+9+xcOFCzJ49G3FxcTA1NcWUKVPQt29f7Nq1C/v378etW7dgZmaGvn37YtGiRTA3N+9Q29jb22Pfvn1Yv349PvvsMxgaGsLPzw8fffQRhg4dqvV5zM3NIZVKUVJSojatVEdHB3K5HCkpKWrpKtHR0di4cSMyMjJw6NAh9OnTB0uWLAEALF++XK2sj48PFi9ejISEBCxfvhxKpRILFy5Ev379HrjdH1R77pF+/frh888/x4YNG7Bnzx4YGRlh+PDhWLFiBUaOHPlI1ue2pLPbjIjoWcN4pHWMRx4OxiPUVekID3vXICIi6lQ//PADpkyZgsjIyFY3AiMiIiJ6lBiP0JOIe4AQET3F6urq1P5uvs558ODBnVElIiIiesYwHqGnBZfAEBE9xSZMmIDBgwdDKpVCoVAgIyMD+fn5mDBhAhwdHTu7ekRERPQMYDxCTwsugSEieoqtX78eJ06cQFVVFZRKJezs7BAQEIDw8HBIJOzjJiIiokeP8Qg9LdgBQkRERERERERdHvcAISIiIiIiIqIujx0gRERERERERNTlsQOEiIiIiIiIiLo8doAQERERERERUZfHDhAiIiIiIiIi6vLYAUJEREREREREXd7/ARHlte6J/SXAAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "## NOW PLOT WITH SEABORN\n", "sns.set_style(\"ticks\")\n", diff --git a/notebooks/notebooks_archived/erd_behavior_ephys.ipynb b/notebooks/notebooks_archived/erd_behavior_ephys.ipynb index 22ab604a..2a88e5e8 100644 --- a/notebooks/notebooks_archived/erd_behavior_ephys.ipynb +++ b/notebooks/notebooks_archived/erd_behavior_ephys.ipynb @@ -2,19 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "from ibl_pipeline import reference, subject, action, acquisition, ephys, behavior\n", @@ -24,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -33,162 +23,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -197,487 +41,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "251\n", - "\n", - "251\n", - "\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "251->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "257\n", - "\n", - "257\n", - "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "257->subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "255\n", - "\n", - "255\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "255->subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "250\n", - "\n", - "250\n", - "\n", - "\n", - "\n", - "250->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "252\n", - "\n", - "252\n", - "\n", - "\n", - "\n", - "252->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "253\n", - "\n", - "253\n", - "\n", - "\n", - "\n", - "253->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "256\n", - "\n", - "256\n", - "\n", - "\n", - "\n", - "256->subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->257\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->251\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->252\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->253\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->255\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->250\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->256\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f = dj.Di(subject) - subject.SubjectProject - subject.SubjectUser - subject.SubjectCullMethod - subject.SubjectLab - \\\n", " subject.UserHistory - subject.Implant\n", @@ -686,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -695,25 +61,16 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/datajoint/connection.py:212: UserWarning: MySQL server has gone away. Reconnecting to the server.\n", - " warnings.warn(\"MySQL server has gone away. Reconnecting to the server.\")\n" - ] - } - ], + "outputs": [], "source": [ "action_virtual = dj.create_virtual_module('action_virtual', 'ibl_action')" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -723,247 +80,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "`ibl_action`.`__water_type`\n", - "\n", - "`ibl_action`.`__water_type`\n", - "\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryUser\n", - "\n", - "\n", - "action.SurgeryUser\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryUser\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterRestrictionUser\n", - "\n", - "\n", - "action.WaterRestrictionUser\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterRestriction->action.WaterRestrictionUser\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterRestrictionProcedure\n", - "\n", - "\n", - "action.WaterRestrictionProcedure\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterRestriction->action.WaterRestrictionProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.WaterRestrictionProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -972,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -981,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -990,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -999,395 +125,9 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "behavior.Settings\n", - "\n", - "\n", - "behavior.Settings\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.CompleteTrialSession\n", - "\n", - "\n", - "behavior.CompleteTrialSession\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Settings\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.CompleteTrialSession\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.AmbientSensorData\n", - "\n", - "\n", - "behavior.AmbientSensorData\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial->behavior.AmbientSensorData\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet->behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet->behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dj.Di(behavior) - 1 - dj.Di(behavior.CompleteWheelMoveSession) - dj.Di(behavior.CompleteWheelSession) - dj.Di(behavior.SparseNoise) - \\\n", "dj.Di(behavior.SpontaneousTimeSet) - dj.Di(behavior.PassiveTrialSet) - dj.Di(behavior.Wheel)" @@ -1395,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1405,194 +145,16 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1601,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1612,240 +174,16 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.ReactionTime\n", - "\n", - "\n", - "behavior_analyses.ReactionTime\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.PsychResults\n", - "\n", - "\n", - "behavior_analyses.PsychResults\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.PsychResults->behavior_analyses.ReactionTime\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.SessionTrainingStatus\n", - "\n", - "\n", - "behavior_analyses.SessionTrainingStatus\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.PsychResults->behavior_analyses.SessionTrainingStatus\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.TrainingStatus\n", - "\n", - "\n", - "behavior_analyses.TrainingStatus\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.TrainingStatus->behavior_analyses.SessionTrainingStatus\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate->behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate.PsychResults\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate.PsychResults\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "behavior_analyses.BehavioralSummaryByDate->behavior_analyses.BehavioralSummaryByDate.PsychResults\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->behavior_analyses.BehavioralSummaryByDate\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior_analyses.PsychResults\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "f" ] }, { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1854,7 +192,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1865,280 +203,16 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "\n", - "ephys.TrialSpikes\n", - "\n", - "\n", - "ephys.TrialSpikes\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe\n", - "\n", - "\n", - "ephys.Probe\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelGroup\n", - "\n", - "\n", - "ephys.ChannelGroup\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe->ephys.ChannelGroup\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion\n", - "\n", - "\n", - "ephys.ProbeInsertion\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe->ephys.ProbeInsertion\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe.Channel\n", - "\n", - "\n", - "ephys.Probe.Channel\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe->ephys.Probe.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelGroup.Channel\n", - "\n", - "\n", - "ephys.ChannelGroup.Channel\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelGroup->ephys.ChannelGroup.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelBrainLocation\n", - "\n", - "\n", - "ephys.ChannelBrainLocation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion->ephys.ChannelBrainLocation\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertionLocation\n", - "\n", - "\n", - "ephys.ProbeInsertionLocation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion->ephys.ProbeInsertionLocation\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Cluster\n", - "\n", - "\n", - "ephys.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion->ephys.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeInsertion->ephys.LFP\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Ephys->ephys.ProbeInsertion\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Probe.Channel->ephys.ChannelGroup.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Cluster->ephys.TrialSpikes\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelGroup.Channel->ephys.ChannelBrainLocation\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ChannelGroup.Channel->ephys.Cluster\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ephys_di" ] }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2147,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2156,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/AmbientSensorData.ipynb b/notebooks/notebooks_plotting/AmbientSensorData.ipynb index e02f8da6..33dcae83 100644 --- a/notebooks/notebooks_plotting/AmbientSensorData.ipynb +++ b/notebooks/notebooks_plotting/AmbientSensorData.ipynb @@ -2,192 +2,18 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "from ibl_pipeline import behavior, acquisition" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "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", - "

subject_uuid

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

session_start_time

\n", - " start time\n", - "
\n", - "

trial_id

\n", - " trial identification number\n", - "
\n", - "

temperature_c

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

air_pressure_mb

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

relative_humidity

\n", - " \n", - "
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16128.171027.2343.3965
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16228.741012.3743.1055
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16328.771012.3343.0283
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16428.781012.3243.0283
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16528.81012.3143.0312
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16628.811012.3443.042
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16728.821012.343.0215
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16828.831012.3343.0342
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:16928.841012.3643.0352
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:161028.841012.3443.0352
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:161128.841012.3643.0449
00c60db3-74c3-4ee2-9df9-2c84acf84e922019-02-21 00:04:161228.871012.3143.0371
\n", - "

...

\n", - "

Total: 2748570

\n", - " " - ], - "text/plain": [ - "*subject_uuid *session_start *trial_id temperature_c air_pressure_m relative_humid\n", - "+------------+ +------------+ +----------+ +------------+ +------------+ +------------+\n", - "00c60db3-74c3- 2019-02-21 00: 1 28.17 1027.23 43.3965 \n", - "00c60db3-74c3- 2019-02-21 00: 2 28.74 1012.37 43.1055 \n", - "00c60db3-74c3- 2019-02-21 00: 3 28.77 1012.33 43.0283 \n", - "00c60db3-74c3- 2019-02-21 00: 4 28.78 1012.32 43.0283 \n", - "00c60db3-74c3- 2019-02-21 00: 5 28.8 1012.31 43.0312 \n", - "00c60db3-74c3- 2019-02-21 00: 6 28.81 1012.34 43.042 \n", - "00c60db3-74c3- 2019-02-21 00: 7 28.82 1012.3 43.0215 \n", - "00c60db3-74c3- 2019-02-21 00: 8 28.83 1012.33 43.0342 \n", - "00c60db3-74c3- 2019-02-21 00: 9 28.84 1012.36 43.0352 \n", - "00c60db3-74c3- 2019-02-21 00: 10 28.84 1012.34 43.0352 \n", - "00c60db3-74c3- 2019-02-21 00: 11 28.84 1012.36 43.0449 \n", - "00c60db3-74c3- 2019-02-21 00: 12 28.87 1012.31 43.0371 \n", - " ...\n", - " (Total: 2748570)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "behavior.AmbientSensorData()" ] diff --git a/notebooks/notebooks_plotting/ContrastHeatmap.ipynb b/notebooks/notebooks_plotting/ContrastHeatmap.ipynb index 483a670d..750c91fe 100644 --- a/notebooks/notebooks_plotting/ContrastHeatmap.ipynb +++ b/notebooks/notebooks_plotting/ContrastHeatmap.ipynb @@ -2,42 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior\n", "from ibl_pipeline import behavior as behavior_ingest\n", @@ -60,131 +27,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

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

subject_ts

\n", - " \n", - "
05e97eea-64e2-4e52-a78a-5b78875b4fa3KS004F2018-12-04NoneC57BL/6JNone3None2019-08-06 21:30:42
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri subject_ts \n", - "+------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "05e97eea-64e2- KS004 F 2018-12-04 None C57BL/6J None 3 None 2019-08-06 21:\n", - " (Total: 1)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & 'subject_nickname=\"KS004\"'" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -224,3808 +76,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "colorbar": { - "thickness": 10, - "title": { - "side": "right", - "text": "Rightward Choice (%)" - } - }, - "colorscale": [ - [ - 0, - "rgb(127,59,8)" - ], - [ - 0.1, - "rgb(179,88,6)" - ], - [ - 0.2, - "rgb(224,130,20)" - ], - [ - 0.3, - "rgb(253,184,99)" - ], - [ - 0.4, - "rgb(254,224,182)" - ], - [ - 0.5, - "rgb(247,247,247)" - ], - [ - 0.6, - "rgb(216,218,235)" - ], - [ - 0.7, - "rgb(178,171,210)" - ], - [ - 0.8, - "rgb(128,115,172)" - ], - [ - 0.9, - "rgb(84,39,136)" - ], - [ - 1, - "rgb(45,0,75)" - ] - ], - "type": "heatmap", - "x": [ - "2019-02-11", - "2019-02-12", - "2019-02-13", - "2019-02-14", - "2019-02-15", - "2019-02-16", - "2019-02-17", - "2019-02-18", - "2019-02-19", - "2019-02-20", - "2019-02-21", - "2019-02-22", - "2019-02-23", - "2019-02-24", - "2019-02-25", - "2019-02-26", - "2019-02-27", - "2019-02-28", - "2019-03-01", - "2019-03-02", - "2019-03-03", - "2019-03-04", - "2019-03-05", - "2019-03-06", - "2019-03-07", - "2019-03-08", - "2019-03-09", - "2019-03-10", - "2019-03-11", - "2019-03-12", - "2019-03-13", - "2019-03-14", - "2019-03-15", - "2019-03-16", - "2019-03-17", - "2019-03-18", - "2019-03-19", - "2019-03-20", - "2019-03-21", - "2019-03-22", - "2019-03-23", - "2019-03-24", - "2019-03-25", - "2019-03-26", - "2019-03-27", - "2019-03-28", - "2019-03-29", - "2019-03-30", - "2019-03-31", - "2019-04-01", - "2019-04-02", - "2019-04-03", - "2019-04-04", - "2019-04-05", - "2019-04-06", - "2019-04-07", - "2019-04-08", - "2019-04-09", - "2019-04-10", - "2019-04-11", - "2019-04-12", - "2019-04-13", - "2019-04-14", - "2019-04-15", - "2019-04-16", - "2019-04-17", - "2019-04-18", - "2019-04-19", - "2019-04-20", - "2019-04-21", - "2019-04-22", - "2019-04-23", - "2019-04-24", - "2019-04-25", - "2019-04-26", - "2019-04-27", - "2019-04-28", - "2019-04-29", - "2019-04-30", - "2019-05-01", - "2019-05-02", - "2019-05-03", - "2019-05-04", - "2019-05-05", - "2019-05-06", - "2019-05-07", - "2019-05-08", - "2019-05-09", - "2019-05-10", - "2019-05-11", - "2019-05-12", - "2019-05-13", - "2019-05-14", - "2019-05-15", - "2019-05-16", - "2019-05-17", - "2019-05-18", - "2019-05-19", - "2019-05-20", - "2019-05-21", - "2019-05-22", - "2019-05-23", - "2019-05-24", - "2019-05-25", - "2019-05-26", - "2019-05-27", - "2019-05-28", - "2019-05-29", - "2019-05-30", - "2019-05-31", - "2019-06-01", - "2019-06-02", - "2019-06-03", - "2019-06-04", - "2019-06-05", - "2019-06-06", - "2019-06-07", - "2019-06-08", - "2019-06-09", - "2019-06-10", - "2019-06-11", - "2019-06-12", - "2019-06-13", - "2019-06-14", - "2019-06-15", - "2019-06-16", - "2019-06-17", - "2019-06-18", - "2019-06-19", - "2019-06-20", - "2019-06-21", - "2019-06-22", - "2019-06-23", - "2019-06-24", - "2019-06-25", - "2019-06-26", - "2019-06-27", - "2019-06-28", - "2019-06-29", - "2019-06-30", - "2019-07-01", - "2019-07-02", - "2019-07-03", - "2019-07-04", - "2019-07-05", - "2019-07-06", - "2019-07-07", - "2019-07-08", - "2019-07-09", - "2019-07-10", - "2019-07-11", - "2019-07-12", - "2019-07-13", - "2019-07-14", - "2019-07-15", - "2019-07-16", - "2019-07-17", - "2019-07-18", - "2019-07-19", - "2019-07-20", - "2019-07-21", - "2019-07-22", - "2019-07-23", - "2019-07-24", - "2019-07-25", - "2019-07-26", - "2019-07-27", - "2019-07-28", - "2019-07-29", - "2019-07-30", - "2019-07-31", - "2019-08-01", - "2019-08-02", - "2019-08-03", - "2019-08-04", - "2019-08-05", - "2019-08-06", - "2019-08-07", - "2019-08-08", - "2019-08-09", - "2019-08-10", - "2019-08-11", - "2019-08-12", - "2019-08-13", - "2019-08-14", - "2019-08-15", - "2019-08-16", - "2019-08-17", - "2019-08-18", - "2019-08-19", - "2019-08-20", - "2019-08-21", - "2019-08-22", - "2019-08-23", - "2019-08-24", - "2019-08-25", - "2019-08-26", - "2019-08-27", - "2019-08-28", - "2019-08-29", - "2019-08-30", - "2019-08-31", - "2019-09-01", - "2019-09-02", - "2019-09-03", - "2019-09-04", - "2019-09-05", - "2019-09-06", - "2019-09-07", - "2019-09-08", - "2019-09-09", - "2019-09-10", - "2019-09-11", - "2019-09-12", - "2019-09-13", - "2019-09-14", - "2019-09-15", - "2019-09-16", - "2019-09-17", - "2019-09-18", - "2019-09-19", - "2019-09-20", - "2019-09-21", - "2019-09-22", - "2019-09-23", - "2019-09-24", - "2019-09-25", - "2019-09-26", - "2019-09-27", - "2019-09-28", - "2019-09-29", - "2019-09-30", - "2019-10-01" - ], - "xgap": 1, - "y": [ - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 0 - ], - "ygap": 1, - "z": [ - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.38095238095238093, - null, - null, - 0.59375, - 0.46835443037974683, - 0.6538461538461539, - 0.6981132075471698, - 0.6388888888888888, - null, - null, - 0.635036496350365, - 0.5876288659793815, - 0.9591836734693877, - 0.775, - 0.9807692307692307, - 0.9491525423728814, - 0.9240506329113924, - 0.9083333333333333, - 0.9230769230769231, - 0.8863636363636364, - 0.8586956521739131, - 0.717948717948718, - null, - null, - 0.97, - 0.828125, - 0.8717948717948718, - null, - 0.9558823529411765, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.9423076923076923, - null, - null, - 0.8947368421052632, - 0.8604651162790697, - 0.9482758620689655, - 0.9347826086956522, - 0.95, - null, - null, - null, - 0.92, - 0.9454545454545454, - 0.41379310344827586, - 0.9565217391304348, - null, - null, - 0.7333333333333333, - 0.9107142857142857, - null, - 0.8615384615384616, - 0.7717391304347826, - null, - null, - 0.8478260869565217, - 0.9, - null, - 0.9420289855072463, - 0.9069767441860465, - null, - null, - null, - 0.9333333333333333, - 0.9577464788732394, - 0.9487179487179487, - 0.9787234042553191, - null, - null, - 0.625, - 0.8627450980392157, - 0.9705882352941176, - 0.9782608695652174, - 0.7619047619047619, - null, - null, - 0.88, - 0.9298245614035088, - 0.9787234042553191, - 1, - 1, - null, - null, - 0.94, - 1, - 0.8888888888888888, - 1, - 1, - null, - null, - 1, - 0.8571428571428571, - 0.9333333333333333, - 1, - 1, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.9629629629629629, - 1, - 1, - 1, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 1, - null, - null, - 1, - null, - null, - 1, - null, - null, - null, - 1, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.8571428571428571, - 1, - 1, - 1, - null, - null, - 1, - null, - 1, - null, - 1, - null, - 1, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.25862068965517243, - null, - null, - 0.5862068965517241, - 0.4177215189873418, - 0.6086956521739131, - 0.5476190476190477, - 0.6226415094339622, - null, - null, - 0.630057803468208, - 0.6312056737588653, - 0.9090909090909091, - 0.7222222222222222, - 0.9245283018867925, - 0.9523809523809523, - 0.9012345679012346, - 0.8518518518518519, - 0.8586956521739131, - 0.8543689320388349, - 0.7160493827160493, - 0.5178571428571429, - null, - null, - 0.896551724137931, - 0.7258064516129032, - 0.8166666666666667, - null, - 0.9027777777777778, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.8837209302325582, - null, - null, - 0.8068181818181818, - 0.8705882352941177, - 0.7567567567567568, - 0.7647058823529411, - 0.8395061728395061, - null, - null, - null, - 0.8805970149253731, - 0.9272727272727272, - 0.5148514851485149, - 0.8840579710144928, - null, - null, - 0.4878048780487805, - 0.717391304347826, - null, - 0.783625730994152, - 0.711340206185567, - null, - null, - 0.9642857142857143, - 0.9090909090909091, - null, - 0.8701298701298701, - 0.7704918032786885, - null, - null, - null, - 0.7872340425531915, - 0.9516129032258065, - 0.9534883720930233, - 0.9444444444444444, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.5, - 0.42, - 0.6721311475409836, - null, - 0.8253968253968254, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.8181818181818182, - null, - null, - 0.8311688311688312, - 0.7065217391304348, - 0.7794117647058824, - 0.6853932584269663, - 0.8227848101265823, - null, - null, - null, - 0.7954545454545454, - 0.8591549295774648, - 0.4533333333333333, - 0.8783783783783784, - null, - null, - 0.6909090909090909, - 0.5760869565217391, - null, - null, - 0.5444444444444444, - null, - null, - 0.8032786885245902, - 0.6666666666666666, - null, - 0.7402597402597403, - 0.6875, - null, - null, - null, - 0.7288135593220338, - 0.7627118644067796, - 0.9152542372881356, - 0.7872340425531915, - null, - null, - 0.7692307692307693, - 0.7592592592592593, - 0.7435897435897436, - 0.7297297297297297, - 0.8545454545454545, - null, - null, - 0.90625, - 0.85, - 0.8571428571428571, - 1, - 0.8444444444444444, - null, - null, - 0.7777777777777778, - 0.8666666666666667, - 1, - 0.8571428571428571, - 1, - null, - null, - 0.5555555555555556, - 0.8181818181818182, - 0.9411764705882353, - 0.875, - 0.75, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.896551724137931, - 0.95, - 0.8958333333333334, - 1, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.75, - null, - null, - 0.8333333333333334, - null, - null, - 0.75, - null, - null, - null, - 0.5, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 1, - 1, - 1, - 1, - null, - null, - 1, - null, - 1, - null, - 0.8, - null, - 0.7, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.3333333333333333, - 0.7037037037037037, - 0.5945945945945946, - null, - null, - 0.6363636363636364, - 0.6470588235294118, - 0.5128205128205128, - 0.4727272727272727, - 0.6410256410256411, - null, - null, - 0.5714285714285714, - 0.6, - 0.6666666666666666, - 0.8529411764705882, - 0.6, - null, - null, - 0.5641025641025641, - 0.7777777777777778, - 0.6153846153846154, - 0.9230769230769231, - 1, - null, - null, - 0.8823529411764706, - 0.9375, - 0.8888888888888888, - 0.8666666666666667, - 0.8, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.9714285714285714, - 0.9302325581395349, - 0.7777777777777778, - 0.8571428571428571, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.6, - null, - null, - 0.35294117647058826, - null, - null, - 0.75, - null, - null, - null, - 0.8, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.875, - 0.8333333333333334, - 1, - 1, - null, - null, - 0.875, - null, - 0.9, - null, - 0.8, - null, - 0.4, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.16, - 0.3469387755102041, - null, - null, - 0.15, - 0.48148148148148145, - 0.22916666666666666, - 0.23404255319148937, - 0.288135593220339, - null, - null, - 0.17857142857142858, - 0.4090909090909091, - 0.38636363636363635, - 0.4594594594594595, - 0.6060606060606061, - null, - null, - 0.2765957446808511, - 0.6875, - 0.2727272727272727, - 0.4444444444444444, - 0.8888888888888888, - null, - null, - 0.375, - 0.3333333333333333, - 0.2222222222222222, - 0.5, - 0.5, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.875, - 0.6363636363636364, - 0.5223880597014925, - 0.75, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.2222222222222222, - null, - null, - 0.2727272727272727, - null, - null, - 0.35714285714285715, - null, - null, - null, - 0.375, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.5833333333333334, - 0.7272727272727273, - 0.875, - 0.7777777777777778, - null, - null, - 0.6666666666666666, - null, - 0.5, - null, - 0.3, - null, - 0.5, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - 0.15254237288135594, - null, - null, - 0.23529411764705882, - 0.3076923076923077, - 0.14705882352941177, - 0.09523809523809523, - 0.14634146341463414, - null, - null, - 0.19444444444444445, - 0.21153846153846154, - 0.15789473684210525, - 0.24, - 0.17857142857142858, - null, - null, - 0.19148936170212766, - 0.4666666666666667, - 0.1, - 0.38461538461538464, - 0.3, - null, - null, - 0.18181818181818182, - 0.14285714285714285, - 0, - 0.2, - 0.1111111111111111, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.725, - 0.5964912280701754, - 0.37037037037037035, - 0.2857142857142857, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.125, - null, - null, - 0, - null, - null, - 0.2, - null, - null, - null, - 0.21428571428571427, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.3333333333333333, - 0.35294117647058826, - 0.5882352941176471, - 0.6666666666666666, - null, - null, - 0.42857142857142855, - null, - 0.3, - null, - 0.4, - null, - 0.1, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.08, - 0.07547169811320754, - null, - null, - 0.10526315789473684, - 0.2903225806451613, - 0.1509433962264151, - 0.06451612903225806, - 0.17647058823529413, - null, - null, - 0.16, - 0.1875, - 0.1702127659574468, - 0.3225806451612903, - 0.1702127659574468, - null, - null, - 0.027777777777777776, - 0.4, - 0.4166666666666667, - 0.125, - 0.4, - null, - null, - 0.2727272727272727, - 0.125, - 0.07142857142857142, - 0.25, - 0.15384615384615385, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.75, - 0.4186046511627907, - 0.2653061224489796, - 0.4, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.21428571428571427, - null, - null, - 0.25, - null, - null, - 0.25, - null, - null, - null, - 0, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - 0.29411764705882354, - 0.5384615384615384, - 0.3333333333333333, - null, - null, - 0.3333333333333333, - null, - 0.2, - null, - 0, - null, - 0, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - 0.2692307692307692, - 0.14814814814814814, - null, - null, - 0, - 0.28888888888888886, - 0.3488372093023256, - 0.11538461538461539, - 0.06896551724137931, - null, - null, - 0.25806451612903225, - 0.24390243902439024, - 0.2222222222222222, - 0.3488372093023256, - 0.11627906976744186, - null, - null, - 0.09090909090909091, - 0.3333333333333333, - 0.125, - 0.5, - 0.45454545454545453, - null, - null, - 0, - 0.4166666666666667, - 0.16666666666666666, - 0.2, - 0.3333333333333333, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.76, - 0.509090909090909, - 0.2653061224489796, - 0.1, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.09090909090909091, - null, - null, - 0.0625, - null, - null, - 0, - null, - null, - null, - 0.13333333333333333, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.3333333333333333, - 0.1111111111111111, - 0.375, - 0.45454545454545453, - null, - null, - 0, - null, - 0.2, - null, - 0.1, - null, - 0, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.4666666666666667, - 0.03278688524590164, - 0.08064516129032258, - null, - 0.5, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.5692307692307692, - null, - null, - 0.35526315789473684, - 0.3826086956521739, - 0.40298507462686567, - 0.20253164556962025, - 0.6463414634146342, - null, - null, - null, - 0.45918367346938777, - 0.3235294117647059, - 0.1388888888888889, - 0.4268292682926829, - null, - null, - 0.21153846153846154, - 0.2619047619047619, - null, - null, - 0.11956521739130435, - null, - null, - 0.3333333333333333, - 0.2153846153846154, - null, - 0.2987012987012987, - 0.041666666666666664, - null, - null, - null, - 0.18333333333333332, - 0.16393442622950818, - 0.2978723404255319, - 0.1111111111111111, - null, - null, - 0.15, - 0.31666666666666665, - 0.12903225806451613, - 0.175, - 0.022222222222222223, - null, - null, - 0.07142857142857142, - 0.13953488372093023, - 0.22916666666666666, - 0.21875, - 0.18604651162790697, - null, - null, - 0.10344827586206896, - 0.6153846153846154, - 0.2727272727272727, - 0.2222222222222222, - 0.4444444444444444, - null, - null, - 0.3333333333333333, - 0, - 0, - 0.3157894736842105, - 0, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.6666666666666666, - 0.4107142857142857, - 0.4, - 0, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - null, - null, - 0, - null, - null, - 0.1111111111111111, - null, - null, - null, - 0, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.125, - 0, - 0, - 0.14285714285714285, - null, - null, - 0.36363636363636365, - null, - 0, - null, - 0.1, - null, - 0, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.3076923076923077, - null, - null, - 0.5238095238095238, - 0.40350877192982454, - 0.5238095238095238, - 0.47297297297297297, - 0.7333333333333333, - null, - null, - 0.5740740740740741, - 0.4632352941176471, - 0.6694214876033058, - 0.4298245614035088, - 0.7222222222222222, - 0.6013513513513513, - 0.41007194244604317, - 0.4351145038167939, - 0.35251798561151076, - 0.22033898305084745, - 0.23636363636363636, - 0.2413793103448276, - null, - null, - 0.2708333333333333, - 0.05128205128205128, - 0.1568627450980392, - null, - 0.3561643835616438, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.6530612244897959, - null, - null, - 0.33707865168539325, - 0.3983050847457627, - 0.38571428571428573, - 0.2375, - 0.6742424242424242, - null, - null, - null, - 0.47058823529411764, - 0.29310344827586204, - 0.10666666666666667, - 0.47058823529411764, - null, - null, - 0.2976190476190476, - 0.2808988764044944, - null, - 0.3932038834951456, - 0.18478260869565216, - null, - null, - 0.3037974683544304, - 0.1935483870967742, - null, - 0.1917808219178082, - 0.1590909090909091, - null, - null, - null, - 0.19696969696969696, - 0.2727272727272727, - 0.32, - 0.06666666666666667, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null - ], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.5277777777777778, - null, - null, - 0.6071428571428571, - 0.4024390243902439, - 0.6136363636363636, - 0.5254237288135594, - 0.6666666666666666, - null, - null, - 0.48554913294797686, - 0.375, - 0.5871559633027523, - 0.4537037037037037, - 0.76875, - 0.5943396226415094, - 0.4444444444444444, - 0.5414364640883977, - 0.28125, - 0.29473684210526313, - 0.4214876033057851, - 0.25316455696202533, - null, - null, - 0.29411764705882354, - 0.023255813953488372, - 0.16666666666666666, - null, - 0.3424657534246575, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.6333333333333333, - null, - null, - 0.45871559633027525, - 0.36082474226804123, - 0.29850746268656714, - 0.17777777777777778, - 0.7297297297297297, - null, - null, - null, - 0.36283185840707965, - 0.375, - 0.10526315789473684, - 0.425, - null, - null, - 0.171875, - 0.323943661971831, - null, - 0.35802469135802467, - 0.14606741573033707, - null, - null, - 0.45588235294117646, - 0.21311475409836064, - null, - 0.3246753246753247, - 0.041666666666666664, - null, - null, - null, - 0.1864406779661017, - 0.17857142857142858, - 0.14, - 0.06451612903225806, - null, - null, - 0.225, - 0.125, - 0.3, - 0.06666666666666667, - 0.16666666666666666, - null, - null, - 0, - 0.13636363636363635, - 0.02631578947368421, - 0.31666666666666665, - 0.14285714285714285, - null, - null, - 0.06521739130434782, - 0, - 0.1, - 0.18181818181818182, - 0.6363636363636364, - null, - null, - 0.3076923076923077, - 0.3333333333333333, - 0.14285714285714285, - 0.2, - 0.2222222222222222, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.7792207792207793, - 0.5, - 0.08695652173913043, - 0.16666666666666666, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - null, - null, - 0, - null, - null, - 0.1, - null, - null, - null, - 0, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0, - 0, - 0.1, - 0, - null, - null, - 0.07692307692307693, - null, - 0.1, - null, - 0.1, - null, - 0, - null, - null - ] - ], - "zmax": 1, - "zmin": 0 - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-02-11", - "2019-02-11" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-02-18", - "2019-02-18" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-02-25", - "2019-02-25" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-03-04", - "2019-03-04" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-03-11", - "2019-03-11" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-03-18", - "2019-03-18" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-03-25", - "2019-03-25" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-04-01", - "2019-04-01" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-04-08", - "2019-04-08" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-04-15", - "2019-04-15" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-04-22", - "2019-04-22" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-04-29", - "2019-04-29" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-05-06", - "2019-05-06" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-05-13", - "2019-05-13" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-05-20", - "2019-05-20" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-05-27", - "2019-05-27" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-06-03", - "2019-06-03" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-06-10", - "2019-06-10" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-06-17", - "2019-06-17" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-06-24", - "2019-06-24" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-07-01", - "2019-07-01" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-07-08", - "2019-07-08" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-07-15", - "2019-07-15" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-07-22", - "2019-07-22" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-07-29", - "2019-07-29" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-05", - "2019-08-05" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-12", - "2019-08-12" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-19", - "2019-08-19" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-26", - "2019-08-26" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-02", - "2019-09-02" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-09", - "2019-09-09" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-16", - "2019-09-16" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-23", - "2019-09-23" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-30", - "2019-09-30" - ], - "xaxis": "x", - "y": [ - -100, - 100 - ], - "yaxis": "y" - } - ], - "layout": { - "height": 400, - "legend": { - "orientation": "v", - "x": 1.2, - "y": 0.8 - }, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Contrast heatmap", - "x": 0.3, - "y": 0.85 - }, - "width": 700, - "xaxis": { - "showgrid": false, - "title": { - "text": "Date" - } - }, - "yaxis": { - "range": [ - 0, - 11 - ], - "tickmode": "array", - "ticktext": [ - "-100.0", - "-50.0", - "-25.0", - "-12.0", - "-6.0", - "0.0", - "6.0", - "12.0", - "25.0", - "50.0", - "100.0" - ], - "tickvals": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10 - ], - "title": { - "text": "Contrast (%)" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "data = [dict(\n", " x=[t.strftime('%Y-%m-%d') \n", @@ -4086,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4098,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4107,48 +160,18 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['rgb(179,88,6)',\n", - " 'rgb(224,130,20)',\n", - " 'rgb(253,184,99)',\n", - " 'rgb(254,224,182)',\n", - " 'rgb(247,247,247)',\n", - " 'rgb(216,218,235)',\n", - " 'rgb(178,171,210)',\n", - " 'rgb(128,115,172)',\n", - " 'rgb(84,39,136)']" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "puor = cl.scales['9']['div']['PuOr']; puor" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['hsl(34, 86%, 60%)', 'hsl(0, 0%, 97%)', 'hsl(252, 31%, 66%)']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cl.to_hsl(puor)" ] diff --git a/notebooks/notebooks_plotting/DatePsychCurve.ipynb b/notebooks/notebooks_plotting/DatePsychCurve.ipynb index 07e3c597..df1d9279 100644 --- a/notebooks/notebooks_plotting/DatePsychCurve.ipynb +++ b/notebooks/notebooks_plotting/DatePsychCurve.ipynb @@ -2,41 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior\n", @@ -57,1617 +25,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/datajoint/connection.py:169: UserWarning:\n", - "\n", - "Mysql server has gone away. Reconnecting to the server.\n", - "\n" - ] - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "error_y": { - "array": [ - 0, - 0, - -0.1522446490345101, - -0.11620692083460094, - -0.16471669834204106, - -0.14423690099052788, - -0.16980064468434541, - 0, - 0 - ], - "arrayminus": [ - 0, - 0, - -0.15224464903451007, - -0.11620692083460094, - -0.16471669834204106, - -0.14423690099052788, - -0.16980064468434541, - 0, - 0 - ], - "color": "rgba(0.133, 0.133, 0.133, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.25, - 0.23076923076923078, - 0.4444444444444444, - 0.36363636363636365, - 0.7142857142857143, - 1, - 1 - ] - }, - { - "error_y": { - "array": [ - 0, - -0.030451217394133895, - -0.055078062190654614, - -0.06982424871892606, - -0.08171239136112862, - -0.12035996313050168, - -0.12735048351325906, - 0, - 0 - ], - "arrayminus": [ - 0, - -0.030451217394133888, - -0.055078062190654614, - -0.06982424871892606, - -0.08171239136112862, - -0.12035996313050168, - -0.12735048351325906, - 0, - 0 - ], - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.05454545454545454, - 0.23728813559322035, - 0.40816326530612246, - 0.5833333333333334, - 0.625, - 0.6428571428571429, - 1, - 1 - ] - }, - { - "error_y": { - "array": [ - 0, - -0.11564679986498363, - -0.15723759740262688, - -0.08619803529280567, - -0.0817746364070534, - -0.061631345107651336, - -0.020932375834358696, - 0, - 0 - ], - "arrayminus": [ - 0, - -0.11564679986498366, - -0.15723759740262688, - -0.08619803529280567, - -0.0817746364070534, - -0.061631345107651336, - -0.020932375834358696, - 0, - 0 - ], - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.18181818181818182, - 0.5, - 0.9090909090909091, - 0.8181818181818182, - 0.7777777777777778, - 0.9787234042553191, - 1, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1.0)" - }, - "name": "p_left = 0.5 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.14871e-05, - 5.148710000005551e-05, - 5.1487100000166524e-05, - 5.1487100000444066e-05, - 5.1487100001110166e-05, - 5.148710000283092e-05, - 5.148710000710506e-05, - 5.148710001731858e-05, - 5.148710004190876e-05, - 5.148710010002594e-05, - 5.148710023557719e-05, - 5.148710054747829e-05, - 5.148710125587513e-05, - 5.1487102843523326e-05, - 5.148710635481142e-05, - 5.148711401773128e-05, - 5.148713052023579e-05, - 5.148716558982027e-05, - 5.148723913220267e-05, - 5.148739131668088e-05, - 5.1487702079082496e-05, - 5.148832827823909e-05, - 5.148957342966708e-05, - 5.149201662158007e-05, - 5.149674724885817e-05, - 5.1505785941648665e-05, - 5.152282785127366e-05, - 5.155453496017167e-05, - 5.1612748067837364e-05, - 5.171821363310492e-05, - 5.190676355215905e-05, - 5.223939843114114e-05, - 5.281847367163163e-05, - 5.381325582621284e-05, - 5.549960210755142e-05, - 5.832052568651565e-05, - 6.297704785773204e-05, - 7.056208699522571e-05, - 8.275422241290197e-05, - 0.00010209293389813513, - 0.0001323621447998328, - 0.00017911417522482154, - 0.00025037086945222905, - 0.00035754172154909886, - 0.0005165989900453897, - 0.0007495454863251326, - 0.0010862001808445913, - 0.0015663082441106676, - 0.0022419541671934396, - 0.0031802183972048114, - 0.004465969780993039, - 0.006204629870257659, - 0.008524684527102859, - 0.01157965907687044, - 0.01554922325900313, - 0.020639060716709713, - 0.02707913466914598, - 0.035120016007007655, - 0.04502701939193353, - 0.05707202013137238, - 0.0715229972586108, - 0.08863155740249337, - 0.10861892381432303, - 0.13166110327152603, - 0.15787414409132716, - 0.1873005433077653, - 0.21989792456464982, - 0.2555310710256541, - 0.2939682500146915, - 0.33488251109981304, - 0.3778582934709659, - 0.4224032710975076, - 0.46796493465141026, - 0.5139510023847904, - 0.5597524127058664, - 0.6047674176143036, - 0.6484251954878918, - 0.6902074457418479, - 0.7296666114468219, - 0.7664396777185501, - 0.8002568790255881, - 0.8309450745793426, - 0.8584259721959082, - 0.8827097553054325, - 0.9038849613802499, - 0.9221056511414966, - 0.9375769882141242, - 0.9505403233230932, - 0.9612587615986998, - 0.9700040097382817, - 0.9770450790986316, - 0.9826391886454484, - 0.9870249921213685, - 0.9904180652715971, - 0.9930084431941061, - 0.9949598997503761, - 0.9964106093749253, - 0.9974748208619236, - 0.9982451941839692, - 0.9987954952662655, - 0.9991834002290901, - 0.9994532214722337, - 0.9996384265001328, - 0.9997638720426448, - 0.9998477182687314, - 0.999903019859815, - 0.9999390128187432, - 0.9999621293831195, - 0.9999767799637589, - 0.9999859424258711, - 0.9999915969407187, - 0.9999950404741534, - 0.9999971098484649, - 0.9999983370039505, - 0.9999990551055896, - 0.9999994697712045, - 0.999999706056071, - 0.9999998389176964, - 0.999999912638317, - 0.9999999530032436, - 0.9999999748127134, - 0.9999999864408949, - 0.9999999925588212, - 0.9999999957351279, - 0.999999997362423, - 0.9999999981851126, - 0.9999999985955352, - 0.9999999987975824, - 0.9999999988957343, - 0.9999999989427856, - 0.9999999989650429, - 0.9999999989754322, - 0.999999998980218, - 0.9999999989823932, - 0.999999998983369, - 0.9999999989838009, - 0.9999999989839894, - 0.9999999989840708, - 0.9999999989841053, - 0.9999999989841198, - 0.9999999989841258, - 0.9999999989841284, - 0.9999999989841293, - 0.9999999989841297, - 0.9999999989841298, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413, - 0.99999999898413 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)" - }, - "name": "p_left = 0.8 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 2.469223106871187e-10, - 2.4694418208069666e-10, - 2.4698242926388254e-10, - 2.4704887611188464e-10, - 2.4716378419489587e-10, - 2.473614038932146e-10, - 2.4769918924834655e-10, - 2.482735631299489e-10, - 2.4924445316466665e-10, - 2.5087659203263534e-10, - 2.53604687559005e-10, - 2.581391714570014e-10, - 2.656335654488335e-10, - 2.779503241688532e-10, - 2.980785010652833e-10, - 3.307870036276932e-10, - 3.836395037646289e-10, - 4.685610735131503e-10, - 6.042420399309649e-10, - 8.198021651657044e-10, - 1.1603403737974581e-09, - 1.6952886259848386e-09, - 2.530903092222112e-09, - 3.828824473280767e-09, - 5.8334770276918354e-09, - 8.912253316153698e-09, - 1.361406736383169e-08, - 2.0754113859989333e-08, - 3.1535756435197674e-08, - 4.772464765747754e-08, - 7.189581188639561e-08, - 1.0778191690670518e-07, - 1.6076086944770296e-07, - 2.3853384253948997e-07, - 3.5206166958605787e-07, - 5.168491600742075e-07, - 7.546943896191269e-07, - 1.096054634522998e-06, - 1.5832237285405396e-06, - 2.274568699030637e-06, - 3.2501381182378905e-06, - 4.619032183114419e-06, - 6.529016472440441e-06, - 9.178968681574189e-06, - 1.2834870979385407e-05, - 1.785019981009563e-05, - 2.4691718815512248e-05, - 3.3971846586996595e-05, - 4.6488945008279365e-05, - 6.327704981927797e-05, - 8.566673414545977e-05, - 0.00011535894684242323, - 0.00015451378646360139, - 0.00020585624135346418, - 0.0002728009268195138, - 0.0003595977590334565, - 0.00047150029784528085, - 0.0006149581417380514, - 0.0007978342427830351, - 0.0010296473048919264, - 0.0013218385163327787, - 0.0016880607354193048, - 0.002144486893754719, - 0.0027101328135915306, - 0.003407187878433448, - 0.004261345089416883, - 0.0053021200432018965, - 0.006563146358312598, - 0.008082433153380957, - 0.009902568457231017, - 0.012070851036046801, - 0.014639332195157345, - 0.017664748793166634, - 0.021208329129830467, - 0.02533545465713447, - 0.03011516271147343, - 0.035619478734416246, - 0.041922570755789486, - 0.04909972421739191, - 0.057226141419867226, - 0.06637557681647871, - 0.07661882682932189, - 0.08802210053997127, - 0.10064530517116146, - 0.11454028735509161, - 0.12974907738378066, - 0.14630218856528715, - 0.16421702709865998, - 0.18349646921107998, - 0.2041276614259418, - 0.22608109659734493, - 0.24931001271205833, - 0.2737501535042089, - 0.29931991985734735, - 0.32592092911359155, - 0.353438986213345, - 0.38174545658841713, - 0.41069901653079466, - 0.44014774299973586, - 0.4699314921534094, - 0.49988450490491293, - 0.5298381690424713, - 0.5596238613536766, - 0.58907579005878, - 0.618033757845909, - 0.6463457689122885, - 0.673870409493619, - 0.7004789401048173, - 0.7260570486864935, - 0.7505062265172204, - 0.7737447425053174, - 0.7957082056735216, - 0.8163497196545139, - 0.8356396462198218, - 0.8535650067317372, - 0.8701285604936478, - 0.8853476069472423, - 0.8992525643178025, - 0.9118853805605704, - 0.9232978333535973, - 0.9335497745680527, - 0.9427073713718567, - 0.9508413912053925, - 0.9580255716765184, - 0.9643351093483812, - 0.9698452938311888, - 0.9746303059121673, - 0.9787621910032375, - 0.9823100122398493, - 0.9853391813538126, - 0.9879109601310005, - 0.9900821209506334, - 0.9919047516252817, - 0.9934261875045884, - 0.9946890525105935, - 0.9957313903426398, - 0.9965868674044297, - 0.9972850299293602, - 0.9978515991718989, - 0.9983087902542536, - 0.9986756421799959, - 0.9989683485348205, - 0.9992005803918547, - 0.9993837948464601, - 0.9995275243642293, - 0.9996396436952804, - 0.9997266124641637, - 0.9997936926784798, - 0.9998451413132895, - 0.9998843788344969, - 0.999914135041131, - 0.9999365739565955, - 0.9999533997074109, - 0.9999659454200855, - 0.9999752471669089, - 0.9999821049222269, - 0.9999871323721072, - 0.9999907972693873, - 0.9999934538570808, - 0.9999953687072556, - 0.9999967411484126, - 0.9999977192882791, - 0.999998412484966, - 0.9999989009801525, - 0.9999992432844804, - 0.9999994817978803, - 0.9999996470554899, - 0.9999997609121504, - 0.9999998389137853, - 0.9999998920508134, - 0.9999999280455589, - 0.9999999522909526, - 0.9999999685302661, - 0.9999999793459597, - 0.999999986508868, - 0.9999999912259417, - 0.9999999943148447, - 0.9999999963261783, - 0.999999997628482, - 0.9999999984669543, - 0.9999999990037555, - 0.9999999993454881, - 0.9999999995618136, - 0.9999999996979824, - 0.999999999783213, - 0.99999999983626, - 0.9999999998690903, - 0.9999999998892943, - 0.9999999999016582, - 0.9999999999091814, - 0.9999999999137337, - 0.9999999999164725, - 0.9999999999181111, - 0.9999999999190858, - 0.9999999999196626, - 0.9999999999200018, - 0.9999999999202003, - 0.9999999999203156, - 0.9999999999203824, - 0.9999999999204208 - ] - }, - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)" - }, - "name": "p_left = 0.2 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.0705964, - 0.07059640000000006, - 0.0705964000000001, - 0.07059640000000021, - 0.07059640000000057, - 0.07059640000000139, - 0.07059640000000346, - 0.07059640000000857, - 0.0705964000000207, - 0.07059640000004953, - 0.07059640000011702, - 0.07059640000027283, - 0.07059640000062799, - 0.07059640000142699, - 0.07059640000320115, - 0.0705964000070894, - 0.07059640001549997, - 0.07059640003345578, - 0.07059640007129123, - 0.07059640014997845, - 0.07059640031149707, - 0.07059640063872688, - 0.07059640129305479, - 0.07059640258442365, - 0.07059640509988367, - 0.0705964099360007, - 0.07059641911274163, - 0.07059643629943876, - 0.07059646806881323, - 0.07059652602999046, - 0.0705966304005546, - 0.07059681589511012, - 0.07059714127942293, - 0.07059770462432371, - 0.07059866726551395, - 0.07060029081987558, - 0.07060299341851584, - 0.07060743368057375, - 0.07061463393733876, - 0.07062615784321655, - 0.07064436171474733, - 0.07067274352980926, - 0.07071641812796424, - 0.07078275118630056, - 0.07088218714826905, - 0.07102930632841122, - 0.07124414253422236, - 0.07155378321657686, - 0.07199425787271788, - 0.07261269592637938, - 0.07346970191567628, - 0.07464185378618084, - 0.07622418097612257, - 0.07833242596755803, - 0.08110484100924144, - 0.0847032274420293, - 0.08931289644472522, - 0.09514122562521149, - 0.10241451378206129, - 0.11137290260699054, - 0.1222632420686268, - 0.13532992408160066, - 0.15080388960937507, - 0.16889021444636892, - 0.18975488004325508, - 0.21351151540941532, - 0.240209030315453, - 0.2698211261939858, - 0.30223865163610864, - 0.33726565457922786, - 0.3746197740084916, - 0.4139373226983092, - 0.45478306284838954, - 0.4966643011446535, - 0.5390485669708984, - 0.5813838261436506, - 0.6231199572588505, - 0.6637301041486846, - 0.7027305291322817, - 0.7396977264123373, - 0.7742817976349344, - 0.8062154147797587, - 0.8353180634400349, - 0.8614956330208395, - 0.8847357619032687, - 0.9050996238444643, - 0.9227110350355942, - 0.9377438589424945, - 0.9504086894508089, - 0.960939713178131, - 0.9695825078661624, - 0.9765833485661836, - 0.9821803908452238, - 0.986596902390483, - 0.9900365388317038, - 0.9926805184292617, - 0.9946864496705812, - 0.996188506511207, - 0.9972986243274923, - 0.9981083989373412, - 0.9986914030432833, - 0.9991056806356857, - 0.9993962324847057, - 0.9995973584818347, - 0.9997347706337048, - 0.9998274310894477, - 0.9998891013922301, - 0.9999296121235857, - 0.9999558770650772, - 0.9999726842562153, - 0.999983299407409, - 0.9999899165359281, - 0.9999939877626779, - 0.9999964600181431, - 0.9999979417640231, - 0.999998818293318, - 0.9999993300593574, - 0.9999996249688867, - 0.9999997927018659, - 0.9999998868605592, - 0.9999999390298204, - 0.9999999675584723, - 0.9999999829563231, - 0.9999999911589176, - 0.9999999954716715, - 0.9999999977097246, - 0.9999999988560246, - 0.9999999994355049, - 0.9999999997246335, - 0.9999999998670158, - 0.9999999999362201, - 0.9999999999694189, - 0.9999999999851378, - 0.9999999999924836, - 0.9999999999958717, - 0.9999999999974141, - 0.9999999999981071, - 0.9999999999984145, - 0.999999999998549, - 0.9999999999986071, - 0.9999999999986319, - 0.9999999999986424, - 0.9999999999986467, - 0.9999999999986484, - 0.9999999999986492, - 0.9999999999986494, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496, - 0.9999999999986496 - ] - }, - { - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.5, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.25, - 0.23076923076923078, - 0.4444444444444444, - 0.36363636363636365, - 0.7142857142857143, - 1, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.8, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.05454545454545454, - 0.23728813559322035, - 0.40816326530612246, - 0.5833333333333334, - 0.625, - 0.6428571428571429, - 1, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.2, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.18181818181818182, - 0.5, - 0.9090909090909091, - 0.8181818181818182, - 0.7777777777777778, - 0.9787234042553191, - 1, - 1 - ] - } - ], - "layout": { - "height": 350, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Psychometric Curve", - "x": 0.25, - "y": 0.85 - }, - "width": 630, - "xaxis": { - "title": { - "text": "Contrast (%)" - } - }, - "yaxis": { - "range": [ - -0.05, - 1.05 - ], - "title": { - "text": "Probability choosing right" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "subj_uuid = (subject.Subject & 'subject_nickname=\"IBL_13\"').fetch1('subject_uuid')\n", "key = {'subject_uuid': subj_uuid,\n", @@ -1767,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/DateReactionTimeContrast.ipynb b/notebooks/notebooks_plotting/DateReactionTimeContrast.ipynb index bb3aa67d..0548763d 100644 --- a/notebooks/notebooks_plotting/DateReactionTimeContrast.ipynb +++ b/notebooks/notebooks_plotting/DateReactionTimeContrast.ipynb @@ -2,34 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior\n", @@ -51,388 +26,9 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/datajoint/connection.py:151: UserWarning:\n", - "\n", - "Mysql server has gone away. Reconnecting to the server.\n", - "\n" - ] - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "responsive": true, - "showLink": false - }, - "data": [ - { - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "p_left = 0.5", - "type": "scatter", - "uid": "36e8ad0d-56d0-451c-894f-5dc918fe889b", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.30415000000001413, - 0.28709999999999525, - 0.4508999999999901, - 0.614200000000011, - 0.4179499999999816, - 0.3319500000000013, - 0.5697000000000116, - 0.25039999999998486, - 0.2541999999999973 - ] - }, - { - "error_y": { - "array": [ - 0.04384999999999195, - 0.023000000000010346, - 0.008000000000009777, - 0.4321000000000481, - 0.10550000000000104, - 0.05535000000000423, - 0.05189999999998918, - 0.032399999999995543, - 0 - ], - "arrayminus": [ - 0.03585000000000349, - 0.03294999999998538, - 0.12579999999999814, - 0.2131000000000256, - 0.13974999999995497, - 0.05285000000000162, - 0.1945000000000121, - 0.019300000000015416, - 0.0341999999999949 - ], - "color": "rgba(0.133, 0.133, 0.133, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "name": "median with 68% CI", - "type": "scatter", - "uid": "4883e498-0f0e-4c68-a95f-fb644456e22a", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.30415000000001413, - 0.28709999999999525, - 0.4508999999999901, - 0.614200000000011, - 0.4179499999999816, - 0.3319500000000013, - 0.5697000000000116, - 0.25039999999998486, - 0.2541999999999973 - ] - }, - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "p_left = 0.2", - "type": "scatter", - "uid": "9a8531fc-e72d-4e78-ab38-c3d5b317be46", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.31929999999999836, - 0.3407999999999447, - 0.331299999999942, - 0.434599999999989, - 0.3734000000000606, - 0.42714999999998327, - 0.8816000000001623, - 0.23730000000000473, - 0.23440000000005057 - ] - }, - { - "error_y": { - "array": [ - 0.028999999999996362, - 0.009000000000014552, - 0.030700000000024374, - 0.016200000000083037, - 0.06889999999992824, - 0.143950000000018, - 0, - 0, - 0 - ], - "arrayminus": [ - 0.08935000000002447, - 0.04529999999999745, - 0.07779999999991105, - 0.04144999999996912, - 0.08950000000015734, - 0.14639999999997144, - 0.5720000000001164, - 0.018100000000004002, - 0.148900000000026 - ], - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "name": "median with 68% CI", - "type": "scatter", - "uid": "8d40e701-a2df-4011-aa21-a52a9fa379dd", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.31929999999999836, - 0.3407999999999447, - 0.331299999999942, - 0.434599999999989, - 0.3734000000000606, - 0.42714999999998327, - 0.8816000000001623, - 0.23730000000000473, - 0.23440000000005057 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "p_left = 0.8", - "type": "scatter", - "uid": "2bacac11-473a-408f-8e7f-83137f15039c", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.2609499999999798, - 0.31224999999994907, - 0.7545000000000073, - 0.245900000000006, - 0.3403999999999314, - 0.26310000000000855, - 0.3064999999999145, - 0.23050000000000637, - 0.21970000000004575 - ] - }, - { - "error_y": { - "array": [ - 0.006050000000016098, - 0.01140000000003738, - 0, - 0.030200000000036198, - 0.044750000000135515, - 0.011999999999943611, - 0.01160000000004402, - 0.010699999999928878, - 0.006199999999978445 - ], - "arrayminus": [ - 0.022449999999992087, - 0.03974999999991269, - 0.5290000000000532, - 0.03129999999998745, - 0.06349999999991951, - 0.02650000000005548, - 0.029499999999870852, - 0.016799999999989268, - 0.008300000000019736 - ], - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "name": "median with 68% CI", - "type": "scatter", - "uid": "50c43c52-e82f-4237-b8fe-773cef34f1ea", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0.2609499999999798, - 0.31224999999994907, - 0.7545000000000073, - 0.245900000000006, - 0.3403999999999314, - 0.26310000000000855, - 0.3064999999999145, - 0.23050000000000637, - 0.21970000000004575 - ] - } - ], - "layout": { - "height": 350, - "legend": { - "orientation": "v", - "x": 1.1, - "y": 0.9 - }, - "title": { - "text": "Reaction time - Contrast", - "x": 0.25, - "y": 0.85 - }, - "width": 630, - "xaxis": { - "title": { - "text": "Contrast (%)" - } - }, - "yaxis": { - "title": { - "text": "Reaction time (s)" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "subj_uuid = (subject.Subject & 'subject_nickname=\"IBL_13\"').fetch1('subject_uuid')\n", "key = {'subject_uuid': subj_uuid,\n", @@ -512,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/DateReactionTimeTrialNumber.ipynb b/notebooks/notebooks_plotting/DateReactionTimeTrialNumber.ipynb index e509fba1..7694d569 100644 --- a/notebooks/notebooks_plotting/DateReactionTimeTrialNumber.ipynb +++ b/notebooks/notebooks_plotting/DateReactionTimeTrialNumber.ipynb @@ -2,41 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior\n", @@ -58,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -70,3301 +38,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "marker": { - "color": "lightgray" - }, - "mode": "markers", - "name": "data", - "type": "scatter", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532, - 533, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 545, - 546, - 547, - 548, - 549, - 550, - 551, - 552, - 553, - 554, - 555, - 556, - 557, - 558, - 559, - 560, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 569, - 570, - 571, - 572, - 573, - 574, - 575, - 576, - 577, - 578, - 579, - 580, - 581, - 582, - 583, - 584, - 585, - 586, - 587, - 588, - 589, - 590, - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599, - 600, - 601, - 602, - 603, - 604, - 605, - 606, - 607, - 608, - 609, - 610, - 611, - 612, - 613, - 614, - 615, - 616, - 617, - 618, - 619, - 620, - 621, - 622, - 623, - 624, - 625, - 626, - 627, - 628, - 629, - 630, - 631, - 632, - 633, - 634, - 635, - 636, - 637, - 638, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 650, - 651, - 652, - 653, - 654, - 655, - 656, - 657, - 658, - 659, - 660, - 661, - 662, - 663, - 664, - 665, - 666, - 667, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 687, - 688, - 689, - 690, - 691, - 692, - 693, - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793 - ], - "y": [ - 1.0379000104904172, - 0.5363998689880365, - 0.21280027618408326, - 0.5753997955322259, - 0.22380039215087777, - 0.47930094299316295, - 0.4103999176025397, - 8.281399551391601, - 0.2688988647460917, - 5.083100616455077, - 0.2219981577148431, - 0.24000082397460432, - 0.3762984863281247, - 0.526001141357419, - 0.18799901733398627, - 1.4341987426757825, - 7.02409995117187, - 0.1926964721679667, - 0.1889963989257808, - 0.2278009887695447, - 0.7036971323242227, - 0.38859676513672525, - 0.4240002075195264, - 0.21229824218751503, - 0.422202575683599, - 0.22299993896484693, - 0.17379953613281884, - 0.5753996948242275, - 0.16899792480469955, - 0.1654996093750043, - 0.18120328369141703, - 0.30319719238282516, - 0.22540144042970667, - 1.617801489257829, - 0.23979930419922368, - 0.23000349121095098, - 0.3876976806640755, - 0.2018004882812363, - 0.17429741210938232, - 0.1991990478515504, - 0.22890314941406587, - 0.19620278320311968, - 7.043505957031243, - 0.24660087890623572, - 7.1002033691406155, - 0.15950043945312586, - 0.1650982177734477, - 0.18389399414061813, - 0.20040549316408374, - 0.5232953125000108, - 4.76200153808594, - 0.3586072753906251, - 0.29860595703127046, - 0.17110039062501414, - 0.44469367675782223, - 0.2849012207031194, - 0.37790021972656973, - 0.7082037353515602, - 0.23490434570314278, - 0.2714926513671969, - 0.25620490722656086, - 0.23029648437500327, - 0.3977952636718953, - 8.793997314453122, - 0.20109826660157637, - 0.5359011474609474, - 0.24139353027342736, - 0.3494959472656376, - 0.2678050048828311, - 0.9700045410156406, - 0.36120236816407214, - 0.19709584960935445, - 0.3524029296875142, - 0.37279008789056434, - 0.15240136718745134, - 0.28510263671876146, - 0.24580664062500546, - 0.7077909667968925, - 0.33649047851565683, - 0.1779083007812119, - 0.21850732421876273, - 1.5933066894531294, - 0.1880908203124818, - 0.2083130371093489, - 0.29390185546873226, - 0.24421093749992906, - 0.4770068359374591, - 4.169806884765592, - 0.19650317382809135, - 0.8175113281250219, - 0.2233957519530918, - 0.2735880859374902, - 1.0647105957031044, - 0.45819750976562545, - 0.2522999511718922, - 0.4837997070312099, - 0.8207951660156141, - 1.254593310546852, - 0.17421469726559735, - 0.9784916992187505, - 0.2143983398437399, - 0.6127004882811775, - 0.6001951660156237, - 0.24080874023439947, - 0.45458999023435354, - 0.24819555664061, - 0.19140625, - 2.594905419921872, - 0.4695983886718409, - 0.4994065429686998, - 0.16470947265622726, - 0.30758852539059944, - 1.303810937499975, - 0.20750590820313164, - 0.2563067871093381, - 0.25100502929683444, - 0.14681411132812627, - 1.0501934082031426, - 0.36300688476558207, - 0.22191035156248518, - 0.2547039062499721, - 0.3402019531249607, - 0.16911367187498172, - 0.07589531249999482, - 0.3393872070312227, - 0.20269145507813846, - 0.5809086425780947, - 0.16951118164058698, - 0.17749770507811036, - 0.24688623046870362, - 0.185495654296858, - 0.233589941406251, - 0.35478666992185026, - 0.40378662109372954, - 0.3294074707030745, - 0.2687918945312049, - 0.22289580078120252, - 1.3361047363280818, - 0.8281853515624675, - 0.6923134277343479, - 0.19809814453122954, - 0.6830889648437051, - 0.3301088867187332, - 0.2650042480468642, - 0.29639838867183244, - 0.21721450195309444, - 0.6280857910156215, - 0.19970991210936972, - 0.19270527343746835, - 0.3267087402343236, - 0.19979003906246362, - 2.177210791015625, - 0.5038191406249553, - 0.2130118164062651, - 0.08008037109379984, - 0.2689112304688024, - 0.1951745117187329, - 0.23408505859379147, - 0.41471406250002474, - 0.253973437500008, - 0.26310195312498763, - 0.4200831054687342, - 0.1871781249999458, - 1.9800287109375176, - 0.29597421874996144, - 0.8651262695311743, - 0.18607509765627128, - 0.17590664062493033, - 0.453993457031288, - 0.22910957031251655, - 0.5389208984374818, - 0.4314746093749591, - 0.26332128906244634, - 0.18552968749997945, - 0.4055767578124687, - 0.24937900390614232, - 0.3340825195313073, - 0.1785755859375513, - 0.277609179687488, - 0.20989970703124072, - 0.512883398437566, - 0.11898789062490778, - 0.18137031250000746, - 0.31058798828121326, - 0.2087836914062109, - 0.143803320312486, - 0.15829980468743088, - 0.7637831054687467, - 0.3770789062500626, - 0.1959289062500602, - 0.22432666015617997, - 0.18477636718751, - 0.19689560546873963, - 0.45082031250001364, - 0.32971669921880675, - 0.18681210937495507, - 0.5496082031249898, - 0.2070718749999969, - 0.27129462890627565, - 0.16499423828122417, - 0.18409306640626255, - 0.33347880859378165, - 0.23357958984377092, - 0.2822202148437327, - 1.2825214843749109, - 0.21080078124998636, - 0.20722177734364777, - 0.39548251953124236, - 1.0443181640624744, - 0.19968515624998417, - 0.07200761718740978, - 0.24082802734380948, - 0.6136000976562173, - 0.21172255859369216, - 0.22130351562498163, - 0.5966767578124745, - 0.20178164062497217, - 0.31472939453124127, - 0.18771523437499127, - 0.1655229257812607, - 0.27431376953120434, - 0.581203710937416, - 0.36069355468748654, - 0.19310869140622344, - 0.26630126953125455, - 0.19971191406250455, - 1.2772013671874447, - 0.2952862304687187, - 0.21171611328122708, - 0.4457298828124294, - 0.21918916015613377, - 0.3018063476562247, - 0.21419648437495198, - 0.25389609374997235, - 0.12231650390617688, - 0.5413918945312162, - 0.24240947265616342, - 0.24112773437491342, - 0.2105093750000151, - 0.4401031249999505, - 0.37560117187490505, - 0.2607101562499565, - 0.27421660156244343, - 0.27977753906247926, - 0.27019609375008713, - 0.6285882812500176, - 0.4167718749999949, - 0.8371264648436636, - 0.3578791992188144, - 0.24619785156244234, - 0.23229560546872108, - 0.08440820312500819, - 0.256005566406202, - 0.3604725585937558, - 0.19517792968747472, - 0.22531035156248436, - 0.2414054687500311, - 0.24892939453116014, - 0.2517866210937427, - 0.208111425781226, - 0.23988398437495562, - 0.5264845703125047, - 0.2382238281250011, - 0.701673144531128, - 0.1719264648436365, - 0.18658525390617342, - 0.12619111328115196, - 0.33419345703123327, - 0.6074249999999211, - 0.22419072265620343, - 0.575518945312524, - 0.41310517578119743, - 0.30909296874995107, - 0.18007451171877165, - 0.26619589843744507, - 0.21242499999993925, - 0.20439121093750146, - 0.19501230468745234, - 0.17890966796869634, - 0.20662119140627055, - 0.47898759765621435, - 0.5496798593750327, - 0.19771787109368688, - 0.18481503906252783, - 0.21582167968745125, - 0.18288632812505057, - 0.42410117187500873, - 0.3995811523436714, - 0.33140253906253747, - 0.21341953124988322, - 0.5024986328124896, - 0.23069999999995616, - 0.2749764648436894, - 0.19638681640628874, - 0.2079185546874669, - 0.23570175781242142, - 0.18088466796871217, - 0.2103166015624538, - 0.2265916992187158, - 0.6989778320312325, - 0.23568076171875418, - 0.2243006835936967, - 0.21061582031245507, - 0.283406347656296, - 0.23907275390615723, - 0.3022838867187829, - 0.27530712890620634, - 0.2011143554686896, - 0.3905004882811909, - 0.4481298828125091, - 0.18867851562504256, - 0.2591120859375451, - 0.2557844726561598, - 0.23360693359381912, - 0.24681933593751637, - 0.22361376953131185, - 0.22532714843748636, - 0.2571059570311718, - 0.23249609374988722, - 0.22821142578129638, - 0.2224060546874398, - 0.3701241210936814, - 0.22552197265622453, - 0.20738310546869343, - 0.37981054687497817, - 0.45182968749998054, - 0.20154296875011823, - 0.1805949218751266, - 0.1498339843751637, - 0.18984863281252728, - 0.40694472656264224, - 0.17796289062516735, - 0.35528144531258476, - 0.16983513281252272, - 0.23874042968759568, - 0.5048207031250058, - 0.23175800781268663, - 0.16974003906261714, - 0.19003203124998436, - 0.18295820312505384, - 0.18451601562492215, - 0.1933798828124509, - 0.22345878906253347, - 0.20078203125012806, - 0.20834882812505384, - 0.1950956796877108, - 0.1523445312500371, - 0.22224355468756585, - 0.22007304687508622, - 0.24822011718742942, - 0.3111437500001557, - 0.38385585937498945, - 0.5387804687500193, - 0.23364394531245125, - 0.19874140625006476, - 0.2358042968751306, - 0.24984394531247744, - 0.42201972656243925, - 0.20272714843758877, - 0.21853398437497162, - 0.2386677734375553, - 0.2372603515625542, - 0.18579394531252547, - 0.21501835937510805, - 0.23425585937525284, - 0.2543494140625171, - 0.4630416015627361, - 0.27698828125016917, - 0.27896482031269443, - 0.22815546874994652, - 0.2672800781251681, - 0.20013046875010332, - 0.20865019531265716, - 0.2802132812500986, - 0.18926933593752437, - 0.29534765625021464, - 0.6852220703124203, - 0.2633738281251681, - 0.252750585937747, - 0.20912734375019681, - 0.29999960937516335, - 0.3892298828127423, - 0.24316289062494434, - 0.2541484375001346, - 0.26171992187505566, - 0.22916328125006658, - 0.23054160156243597, - 0.22423007812517426, - 0.2387580078125211, - 0.25005703125020773, - 0.19771015624996835, - 0.19151289062506294, - 0.2416830078127532, - 0.21634589843756658, - 0.20254704687499725, - 0.19720527343747563, - 0.5228148437502114, - 0.20580136718763242, - 0.19654765625000437, - 0.27184843750001164, - 0.23949433593747926, - 0.17092070312514807, - 0.20568789062508586, - 0.3747867187501015, - 0.42262968750014807, - 0.2436320312499447, - 0.9339009765624269, - 0.20935703125019245, - 0.28414121093760514, - 0.07156796875028704, - 0.20398593750019245, - 0.2021587890626506, - 0.2442486328125142, - 0.22618613281269973, - 0.20250449218769973, - 0.2722378671876413, - 0.23836562499991487, - 0.4663464843752081, - 3.1365943359373887, - 0.20429453125007058, - 0.22812421875005384, - 0.5314390625001124, - 0.3252181640625622, - 0.5133757812500335, - 0.30278320312527285, - 0.20796523437525138, - 0.38986972656266516, - 0.25779589843773465, - 0.20757382812507785, - 0.20320761718744507, - 0.24461542968742833, - 0.31971308593756476, - 0.6826289062501019, - 0.31824824218756476, - 0.19696621093748945, - 0.23238867187524193, - 0.20421328125007676, - 0.31698886718754693, - 0.2632275390626546, - 0.4094724609376499, - 0.16626113281267862, - 0.28212871093751346, - 0.2692861328127947, - 0.22862011718757458, - 0.25005097656253383, - 0.2764685546876535, - 0.22097773437508295, - 0.23626328125010332, - 0.4154687500001728, - 0.30106210937515243, - 0.3318685312501657, - 0.2860718750000615, - 0.5202050781251728, - 0.2798998046876022, - 0.21469218750007713, - 0.49408437500005675, - 0.3018763671875604, - 3.647481835937697, - 0.2266605468751095, - 0.22346152343766335, - 0.3255642578126299, - 0.4144039062500724, - 0.36494726562523283, - 0.18289238281272446, - 0.26481874999990396, - 0.24573652343769936, - 0.21915273437502947, - 0.5205222656250044, - 0.23944082031243852, - 0.419256640625008, - 0.23857363281263133, - 0.268695898437727, - 0.23496113281248654, - 0.33405078125019827, - 0.2367386718749458, - 0.2404527343751397, - 0.22004023437511933, - 0.18359160156273902, - 0.1270847656251135, - 0.28613769531261823, - 0.2136531250000644, - 0.23743242187515534, - 0.1877246093749818, - 0.4307539062501746, - 0.17395585937515534, - 0.1927585937501135, - 0.19500390625012187, - 0.14959921875015425, - 0.16705192968765914, - 0.177808398437719, - 0.21334902343755857, - 0.18817421875019136, - 0.22545683593762078, - 0.2218962890626699, - 0.192557617187731, - 0.19953144531268663, - 0.18387089843758986, - 0.2197257812499629, - 0.20155937500021537, - 0.1812736328124629, - 0.18393554687509095, - 0.23947988281270227, - 0.1913574218751819, - 0.16890429687509823, - 0.18801582031255748, - 0.5153863281252598, - 0.18897009374995832, - 0.19473437500005275, - 0.20694296875012697, - 0.20638222656248217, - 0.21050898437511023, - 0.20089453125001455, - 0.20643417968767608, - 0.19278593750004802, - 0.18842128906248945, - 0.21251875000007203, - 0.2174000000002252, - 0.21000566406269172, - 0.20717497656255546, - 0.21054824218776957, - 0.20132519531239268, - 0.19587617187494288, - 0.23000390625020373, - 0.21101210937513315, - 0.2747414062500866, - 0.19502558593762842, - 0.22041777343770264, - 0.19002304687501237, - 0.17151718750005784, - 0.2292099609376237, - 0.32794199218778886, - 0.26578378906265243, - 0.36126953124994543, - 0.20529042968769318, - 0.2093265625001095, - 0.056635546874986176, - 0.1522906249999778, - 0.19703769531247417, - 0.18339492187510587, - 0.19919082031265134, - 0.24025839843761787, - 0.17978320312499818, - 0.18311132812505093, - 0.20542500000010477, - 0.24900175781249345, - 0.20840351562515025, - 0.2440511718750713, - 0.2031859375001659, - 0.2480787109375342, - 0.17149414062510004, - 0.47110407812510857, - 0.18831855468761205, - 0.24225781249992906, - 0.20482246093774847, - 0.2841949218750415, - 0.21820996093742906, - 0.17770859374991232, - 0.4850541015625822, - 0.17656035156255712, - 0.16354609375025575, - 0.2286914062501637, - 0.2327394531250775, - 0.22290058593762296, - 0.1962908203124698, - 0.21956054687530013, - 0.17959316406245307, - 0.2056255859374687, - 0.2936824218752463, - 0.20965312500015898, - 0.2724468750000142, - 0.4368535156249891, - 0.17286503906257167, - 0.21803808593767826, - 0.20539082031268663, - 0.17394082031273683, - 0.14723417968752983, - 0.19774609375008367, - 0.18625019531259568, - 0.2110816406250251, - 0.16301660156250364, - 0.4706755859376699, - 2.1535683593751855, - 0.43433085937499527, - 0.33596269531244616, - 0.2236328125, - 0.12466445312520591, - 0.17909121093771319, - 0.47417695312515207, - 0.24955019531239486, - 4.4699343750000935, - 0.34225820312508404, - 0.2657123046876677, - 12.426844117187557, - 0.320797460937456, - 0.26509628906273974, - 0.33754941406255057, - 0.21252187500022046, - 0.2636628906252554, - 0.2333029296873974, - 0.1965628906252732, - 0.25979765625015716, - 0.250351757812723, - 0.21908046875000764, - 0.12052011718742506, - 0.22256621093765716, - 0.285874218750223, - 0.5488890390624874, - 0.25512031250013933, - 0.24144609375025539, - 0.3219408203126477, - 0.25934941406262624, - 0.22150214843759386, - 0.24462226562513933, - 0.3423761718752303, - 6.9799564453126095, - 0.2679919921877172, - 59.956689843750155, - 58.47223789062514, - 56.48740625000028, - 10.891331640624685, - 0.37370212499990885, - 0.9608124999999745, - 0.22269921874976717, - 41.212667968749884, - 2.371771875000377, - 0.29091406250017826, - 0.26250937499980864, - 0.2495156249997308, - 0.6748015624998516, - 0.2365234375001819, - 0.23452226562494616, - 0.24971562500013533, - 0.2394585937499869, - 0.24561171875029686, - 0.23057109374985885, - 0.24239921875005166, - 0.2553851562502132, - 0.29440117187505166, - 0.4032328124999367, - 0.6227160156249738, - 0.3511851562498123, - 0.2493312500000684, - 0.26066328124989013, - 0.1747878906248843, - 0.2341511718750553, - 0.17844218749996799, - 0.17346171874987704, - 0.23313437500019063, - 0.26145156250049695, - 0.29881132812533906, - 0.3079886718751368, - 0.22361679687492142, - 0.2391953124997599, - 0.20017773437530195, - 0.434943359375211, - 0.010092968750086584, - 0.20106132812543365, - 0.22894765625005675, - 0.25765703125034634, - 0.2498894531249789, - 0.247692968750016, - 0.2410578125000029, - 0.2085847656248916, - 0.24736445312510114, - 0.20185039062516807, - 0.3623468750001848, - 0.21400937500038708, - 0.21430234375020518, - 0.22001679687537035, - 0.4374500000003536, - 0.6107472656249229, - 0.21856367187501746, - 0.2481968750003034, - 0.18687109375014188, - 0.2418546875001084, - 0.2958570312498523, - 0.3415113281248523, - 0.3153960937497686, - 1.048107031249856, - 0.2500656249999338, - 0.4046066406249338, - 59.94142382812515, - 59.83048242187533, - 0.2988484375000553, - 25.176845312500063, - 0.8399050781254118, - 0.8426843749998625, - 0.5783785156249905, - 0.3539125000002059, - 59.95522929687513, - 39.49320234375, - 0.31795312499980355, - 1.053846484375299, - 0.3653195312504067, - 59.94970390624985, - 0.20778632812516662, - 0.3078945312504402, - 0.5414882812501673, - 59.94867226562519, - 0.14020429687525393, - 0.32075078124989886, - 59.9252957031249, - 2.968316406249869, - 59.944069921875325, - 0.356896484374829, - 0.4893382812501841, - 0.345978906250366, - 0.5954867187497257, - 7.496908984374841, - 59.94471171875011, - 59.802989453125065, - 25.1281152343754, - 0.40614453125044747, - 3.0810878906249854, - 59.94466523437495, - 59.850573437500316, - 36.67079201562501, - 0.22268146875012462, - 0.4217670156249369, - 0.2518373281250206, - 0.3740209218753989, - 0.25345021875000384, - 55.91839709375017, - 0.24493420312546732, - 0.22813810937532253, - 0.22960139062479357, - 0.25456506249975064, - 0.1967967031250737, - 0.21144201562492526, - 0.2198884999997972, - 0.26598615625016464, - 0.2043232656251348, - 30.500802171874966, - 59.95052092187507, - 59.80009123437503, - 0.06720998437549497, - 0.45702014062499074, - 25.242818187500234, - 59.94439084375017, - 0.10308576562511007, - 0.3702963125001588, - 13.100127953125138, - 27.17171857812491, - 0.3063502187501399, - 59.953136156250366, - 0.06980607812511153, - 0.24449396875024831, - 0.9625627187501777, - 0.24059475000012753, - 0.45963849999998274, - 0.4963123281254411, - 59.02912404687504, - 59.95443967187521, - 0.34417678125009843, - 0.15795764062477247, - 59.70058303125052, - 0.17716974999984814, - 0.40605764062502203, - 0.3264213124998605, - 0.2477646718748474, - 0.2666556874996786, - 0.22857521874993836, - 0.29571289062505457, - 0.21837951562520175, - 0.22790412499989543, - 0.25968264062521484, - 0.21579006250021848, - 0.23293107812469316, - 2.7522709218751515, - 0.2558779531250366, - 0.5835248281250642, - 0.27834904687506423, - 0.5467099843749565, - 0.3269912343748729, - 0.26760685937506423, - 0.22361896875008824, - 28.91468264062496, - 13.87167521874926, - 42.69951037499959, - 0.28694084375001694, - 0.2565705312508726, - 0.30090021875003004, - 24.606858812499922, - 0.26683459374999074, - 53.87171896875043, - 0.2527986562499791, - 59.94147756250004, - 0.20086896875000093, - 23.89586115625025, - 0.3357236562505932, - 0.5120869374995891, - 0.33396271874971717, - 59.95651896875006 - ] - }, - { - "marker": { - "color": "black" - }, - "name": "rolled data", - "type": "scatter", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532, - 533, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 545, - 546, - 547, - 548, - 549, - 550, - 551, - 552, - 553, - 554, - 555, - 556, - 557, - 558, - 559, - 560, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 569, - 570, - 571, - 572, - 573, - 574, - 575, - 576, - 577, - 578, - 579, - 580, - 581, - 582, - 583, - 584, - 585, - 586, - 587, - 588, - 589, - 590, - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599, - 600, - 601, - 602, - 603, - 604, - 605, - 606, - 607, - 608, - 609, - 610, - 611, - 612, - 613, - 614, - 615, - 616, - 617, - 618, - 619, - 620, - 621, - 622, - 623, - 624, - 625, - 626, - 627, - 628, - 629, - 630, - 631, - 632, - 633, - 634, - 635, - 636, - 637, - 638, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 650, - 651, - 652, - 653, - 654, - 655, - 656, - 657, - 658, - 659, - 660, - 661, - 662, - 663, - 664, - 665, - 666, - 667, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 687, - 688, - 689, - 690, - 691, - 692, - 693, - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793 - ], - "y": [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.5078504059905997, - 0.4448504302978513, - 0.3396493911743157, - 0.3933492019653322, - 0.3933492019653322, - 0.3933492019653322, - 0.3933492019653322, - 0.45114981384277186, - 0.3225986755371082, - 0.3081496551513645, - 0.2339009063720745, - 0.3081496551513645, - 0.38244762573242497, - 0.4062984863281258, - 0.30819887695313497, - 0.4053996704101621, - 0.30819887695313497, - 0.2254004638671958, - 0.30819887695313497, - 0.30819887695313497, - 0.3057983520507861, - 0.21764909057618098, - 0.21764909057618098, - 0.21764909057618098, - 0.2242006896972768, - 0.2242006896972768, - 0.22770246582032883, - 0.23490139770508733, - 0.22770246582032883, - 0.22770246582032883, - 0.22770246582032883, - 0.22945332031250842, - 0.22715229492188627, - 0.22945332031250842, - 0.22945332031250842, - 0.22945332031250842, - 0.2153518188476511, - 0.20049976806639336, - 0.19770091552733504, - 0.19980227050781707, - 0.2146543212890748, - 0.22350318603515973, - 0.3026040771484304, - 0.2726034179687531, - 0.2495057250976771, - 0.2495057250976771, - 0.29175358886719494, - 0.3286066162109478, - 0.3682537475585974, - 0.3682537475585974, - 0.3286066162109478, - 0.29175358886719494, - 0.27819693603515816, - 0.27819693603515816, - 0.33140072021484457, - 0.27819693603515816, - 0.3246964355468833, - 0.2638487792968789, - 0.2638487792968789, - 0.269648828125014, - 0.30865047607423435, - 0.35534915771485487, - 0.35534915771485487, - 0.3509494384765759, - 0.3509494384765759, - 0.3509494384765759, - 0.31729929199219953, - 0.31729929199219953, - 0.3187527832031378, - 0.3444467041015855, - 0.31079655761720915, - 0.26545463867188346, - 0.31079655761720915, - 0.26545463867188346, - 0.2321569824218841, - 0.26545463867188346, - 0.24500878906246726, - 0.26905639648433066, - 0.26905639648433066, - 0.2313591308593459, - 0.26905639648433066, - 0.26905639648433066, - 0.2588995117187096, - 0.2837449707031112, - 0.37604968261717886, - 0.3658927978515578, - 0.46760217285154226, - 0.4709986083984177, - 0.4709986083984177, - 0.4709986083984177, - 0.4709986083984177, - 0.4709986083984177, - 0.5482500976561937, - 0.5419974365234168, - 0.5419974365234168, - 0.5419974365234168, - 0.5273925781249886, - 0.35139277343748176, - 0.35139277343748176, - 0.4620941894530972, - 0.4620941894530972, - 0.4620941894530972, - 0.3810892578124765, - 0.3810892578124765, - 0.3810892578124765, - 0.28194765624996876, - 0.28194765624996876, - 0.28194765624996876, - 0.28194765624996876, - 0.28194765624996876, - 0.25365590820308626, - 0.2555053466796551, - 0.2555053466796551, - 0.25285446777340326, - 0.25285446777340326, - 0.25285446777340326, - 0.23830712890622863, - 0.2970455566405974, - 0.23830712890622863, - 0.21230090332031182, - 0.22478884277342104, - 0.19409355468749823, - 0.19409355468749823, - 0.21814069824219473, - 0.2402380859374773, - 0.2402380859374773, - 0.25783906249995425, - 0.2402380859374773, - 0.25783906249995425, - 0.2990996826171397, - 0.3420970703124624, - 0.3420970703124624, - 0.3792866455077899, - 0.36694775390623136, - 0.32975817871090385, - 0.3132536376952828, - 0.3132536376952828, - 0.4790973388671773, - 0.3132536376952828, - 0.2807013183593483, - 0.2807013183593483, - 0.2807013183593483, - 0.2807013183593483, - 0.2807013183593483, - 0.25680644531246344, - 0.21511315917967977, - 0.24096152343753374, - 0.20640092773436436, - 0.22354843750002829, - 0.25149814453129693, - 0.24402924804689974, - 0.2585376953124978, - 0.2585376953124978, - 0.24402924804689974, - 0.2585376953124978, - 0.266006591796895, - 0.27953808593747453, - 0.27953808593747453, - 0.27953808593747453, - 0.27953808593747453, - 0.27953808593747453, - 0.3580286621093478, - 0.36372441406246026, - 0.36372441406246026, - 0.2796477539062039, - 0.3344490234374575, - 0.25635014648429433, - 0.2987019042968768, - 0.2987019042968768, - 0.27046523437496717, - 0.27046523437496717, - 0.27046523437496717, - 0.25635014648429433, - 0.22963935546869152, - 0.26349409179681516, - 0.22963935546869152, - 0.2093416992187258, - 0.19507700195310917, - 0.2093416992187258, - 0.2093416992187258, - 0.20235629882813555, - 0.20235629882813555, - 0.20235629882813555, - 0.20283964843747526, - 0.20283964843747526, - 0.2106111328124598, - 0.2106111328124598, - 0.27702167968749336, - 0.21569926757808844, - 0.21569926757808844, - 0.21569926757808844, - 0.20198374023436827, - 0.23918325195313628, - 0.2524371093750233, - 0.2524371093750233, - 0.2524371093750233, - 0.2524371093750233, - 0.22219018554687864, - 0.2524371093750233, - 0.2578999023437518, - 0.2578999023437518, - 0.2578999023437518, - 0.2372038085937902, - 0.2615241210937711, - 0.22627529296875082, - 0.2165130371093369, - 0.23106577148439555, - 0.23106577148439555, - 0.23106577148439555, - 0.2165130371093369, - 0.2165130371093369, - 0.23106577148439555, - 0.24780864257809299, - 0.24780864257809299, - 0.24780864257809299, - 0.27030751953122945, - 0.23404145507811336, - 0.27030751953122945, - 0.27030751953122945, - 0.27030751953122945, - 0.28479999999996153, - 0.28079374999998663, - 0.28079374999998663, - 0.24274521484369416, - 0.26009868164061345, - 0.23654262695305306, - 0.27459116210934553, - 0.24815278320306788, - 0.24176860351553842, - 0.24176860351553842, - 0.24176860351553842, - 0.24815278320306788, - 0.24815278320306788, - 0.25730312499996444, - 0.2674633789062, - 0.2722063476562653, - 0.2722063476562653, - 0.27699707031246135, - 0.32768935546869216, - 0.3667401855468597, - 0.31882836914064683, - 0.27699707031246135, - 0.27699707031246135, - 0.2749868164062832, - 0.31403764648445076, - 0.3069423828125082, - 0.25110170898432216, - 0.24380166015623672, - 0.24380166015623672, - 0.24380166015623672, - 0.2368505371093761, - 0.24064472656249336, - 0.24516743164059562, - 0.24064472656249336, - 0.24064472656249336, - 0.24064472656249336, - 0.24064472656249336, - 0.23905390624997835, - 0.23905390624997835, - 0.23905390624997835, - 0.23905390624997835, - 0.2862086425781172, - 0.2862086425781172, - 0.32164321289059217, - 0.26664184570307725, - 0.28764443359369807, - 0.28764443359369807, - 0.28764443359369807, - 0.24519331054682425, - 0.21830786132807134, - 0.2095230957031049, - 0.2095230957031049, - 0.2095230957031049, - 0.205506201171886, - 0.205506201171886, - 0.205506201171886, - 0.20105454101559417, - 0.20216953124997872, - 0.2112214355468609, - 0.27361210937499436, - 0.27361210937499436, - 0.27361210937499436, - 0.2232608398437037, - 0.2528382324218228, - 0.2528382324218228, - 0.2528382324218228, - 0.2553391113280554, - 0.2332008789061888, - 0.2220597656249197, - 0.2200056152342995, - 0.22864584960933598, - 0.22864584960933598, - 0.22544619140620625, - 0.2174582519530759, - 0.22544619140620625, - 0.231136230468735, - 0.231136230468735, - 0.2373767578124557, - 0.2373767578124557, - 0.2571899414061818, - 0.2571899414061818, - 0.2571899414061818, - 0.2672096074218757, - 0.2672096074218757, - 0.25744827929685243, - 0.25744827929685243, - 0.2513019042968381, - 0.24021313476566775, - 0.2513019042968381, - 0.24021313476566775, - 0.23305151367185317, - 0.23305151367185317, - 0.23305151367185317, - 0.2303537597655918, - 0.22686669921876046, - 0.22686669921876046, - 0.2303537597655918, - 0.2303537597655918, - 0.22686669921876046, - 0.22396401367183216, - 0.2148945800780666, - 0.21645253906245898, - 0.20446303710940583, - 0.20446303710940583, - 0.19569580078132276, - 0.19569580078132276, - 0.19569580078132276, - 0.21080332031260696, - 0.21080332031260696, - 0.2108950195313355, - 0.2108950195313355, - 0.18727402343745325, - 0.19170595703121762, - 0.19170595703121762, - 0.19708095703128947, - 0.19708095703128947, - 0.19423778125008084, - 0.19170595703121762, - 0.19423778125008084, - 0.19793885546891943, - 0.20456542968759095, - 0.21421093750007003, - 0.22115830078132603, - 0.22115830078132603, - 0.22794375000000855, - 0.22794375000000855, - 0.23472412109379093, - 0.24201220703128, - 0.24903203124995343, - 0.24903203124995343, - 0.24282412109380402, - 0.23723603515634295, - 0.2365323242188424, - 0.23472412109379093, - 0.2271691406250511, - 0.23503007812519172, - 0.23575810546890352, - 0.23575810546890352, - 0.23575810546890352, - 0.23796406250005475, - 0.23796406250005475, - 0.24580488281253565, - 0.24430263671888497, - 0.24430263671888497, - 0.2608147460938426, - 0.2608147460938426, - 0.2721341796876686, - 0.2721341796876686, - 0.2653269531251681, - 0.25806220703145755, - 0.25806220703145755, - 0.25806220703145755, - 0.27179355468763333, - 0.27179355468763333, - 0.25876113281265134, - 0.26254687500011187, - 0.25793417968759513, - 0.2534495117189408, - 0.24795673828134568, - 0.24096044921873272, - 0.24660996093757603, - 0.24096044921873272, - 0.23464980468747854, - 0.23464980468747854, - 0.22985244140625127, - 0.22669667968762042, - 0.22028798828137042, - 0.22028798828137042, - 0.2110736328125995, - 0.20417420703131484, - 0.20417420703131484, - 0.2110736328125995, - 0.2110736328125995, - 0.20574462890635914, - 0.20574462890635914, - 0.22264785156255584, - 0.24156318359371198, - 0.24156318359371198, - 0.24156318359371198, - 0.25774023437497817, - 0.24156318359371198, - 0.22649453125006858, - 0.22649453125006858, - 0.24394033203122945, - 0.23490908203132221, - 0.2177715820314461, - 0.2177715820314461, - 0.2177715820314461, - 0.2322758789063073, - 0.2322758789063073, - 0.2322758789063073, - 0.23324492187498436, - 0.24130712890621453, - 0.2553017460937781, - 0.29872801562510176, - 0.31400068359391753, - 0.31400068359391753, - 0.3575439453126137, - 0.31400068359391753, - 0.28028955078150375, - 0.28028955078150375, - 0.28028955078150375, - 0.28028955078150375, - 0.28028955078150375, - 0.28028955078150375, - 0.2512056640625815, - 0.2512056640625815, - 0.23850205078133513, - 0.23850205078133513, - 0.2539214843750415, - 0.29010820312510077, - 0.29010820312510077, - 0.27267812500008404, - 0.26625683593772465, - 0.24780810546894827, - 0.2566392578125942, - 0.26625683593772465, - 0.26625683593772465, - 0.2566392578125942, - 0.25966855468766425, - 0.25966855468766425, - 0.2728773437502241, - 0.2728773437502241, - 0.2812702148438575, - 0.28298583984383185, - 0.28298583984383185, - 0.29356699218760696, - 0.3014692382813564, - 0.31687244921886304, - 0.3014692382813564, - 0.29397412109381094, - 0.29397412109381094, - 0.31372031250009513, - 0.31372031250009513, - 0.31372031250009513, - 0.31372031250009513, - 0.2833475585937322, - 0.25527763671880166, - 0.25527763671880166, - 0.25527763671880166, - 0.2951915039062669, - 0.25527763671880166, - 0.25527763671880166, - 0.24258867187506894, - 0.25527763671880166, - 0.24258867187506894, - 0.2399467773437891, - 0.2399467773437891, - 0.23900722656253492, - 0.23765615234378856, - 0.23765615234378856, - 0.23584990234371617, - 0.23584990234371617, - 0.22838945312503256, - 0.22838945312503256, - 0.21684667968759186, - 0.20320585937508895, - 0.1938812500001177, - 0.1938812500001177, - 0.1938812500001177, - 0.19024160156254766, - 0.19024160156254766, - 0.18794941406258658, - 0.19046640625015243, - 0.19046640625015243, - 0.19265810546892226, - 0.19378076171892644, - 0.19036591796896118, - 0.19604453125020882, - 0.200545410156451, - 0.200545410156451, - 0.19604453125020882, - 0.200545410156451, - 0.19604453125020882, - 0.19195751953145646, - 0.1896866210938697, - 0.1896866210938697, - 0.1901637578125701, - 0.1901637578125701, - 0.1901637578125701, - 0.19304589843761732, - 0.20055830078126746, - 0.19781445312503365, - 0.20363837890624836, - 0.20363837890624836, - 0.20363837890624836, - 0.20363837890624836, - 0.20640820312507913, - 0.20668857421890152, - 0.20680457812511577, - 0.2085903203126236, - 0.20680457812511577, - 0.20680457812511577, - 0.2085903203126236, - 0.21027695312523065, - 0.21078017578145136, - 0.21027695312523065, - 0.21027695312523065, - 0.20886160937516252, - 0.20593671875008113, - 0.20616865234376291, - 0.2157149414064179, - 0.22481386718766316, - 0.22481386718766316, - 0.22481386718766316, - 0.21487216796890607, - 0.21487216796890607, - 0.20730849609390134, - 0.20730849609390134, - 0.20730849609390134, - 0.20224062500017226, - 0.20224062500017226, - 0.19811425781256276, - 0.19021630859379002, - 0.19021630859379002, - 0.19021630859379002, - 0.19811425781256276, - 0.20230791015637806, - 0.20430546875013533, - 0.2069142578126275, - 0.2069142578126275, - 0.2069142578126275, - 0.2069142578126275, - 0.22533066406253965, - 0.22533066406253965, - 0.22533066406253965, - 0.23023388671867906, - 0.21151621093758877, - 0.23023388671867906, - 0.21151621093758877, - 0.21151621093758877, - 0.21151621093758877, - 0.22345068359379638, - 0.220555273437526, - 0.220555273437526, - 0.2188852539063646, - 0.20792568359388497, - 0.21259306640638442, - 0.21259306640638442, - 0.21460683593772956, - 0.22123056640646155, - 0.22123056640646155, - 0.21460683593772956, - 0.21384560546891862, - 0.21384560546891862, - 0.20763935546881385, - 0.20763935546881385, - 0.2075219726564228, - 0.20156845703138515, - 0.20156845703138515, - 0.19199814453133968, - 0.19199814453133968, - 0.20156845703138515, - 0.20156845703138515, - 0.2044138671875544, - 0.21735722656251255, - 0.21735722656251255, - 0.21735722656251255, - 0.2797977539062231, - 0.2927564453124205, - 0.3851467773437207, - 0.3391104492187651, - 0.30083750000005693, - 0.30083750000005693, - 0.29325488281256185, - 0.29325488281256185, - 0.3291734375000033, - 0.3291734375000033, - 0.29325488281256185, - 0.29325488281256185, - 0.2654042968752037, - 0.26437958984399756, - 0.2617302734377063, - 0.2550747070314401, - 0.2418273437500602, - 0.22793457031252728, - 0.22793457031252728, - 0.2418273437500602, - 0.2418273437500602, - 0.2458989257814892, - 0.25273603515643117, - 0.25273603515643117, - 0.24828320312519736, - 0.24987128906263933, - 0.2572348632813828, - 0.2726118164064246, - 0.2636707031251717, - 0.2636707031251717, - 0.29496640625018244, - 0.332158496093939, - 3.66116630859392, - 3.676829285156259, - 3.970384472656292, - 3.970384472656292, - 8.935644042968647, - 6.631551757812531, - 6.631551757812531, - 1.6662921875001757, - 0.6672573124999417, - 0.5242518437498802, - 0.33230809375004355, - 0.27671171874999345, - 0.256112499999972, - 0.256112499999972, - 0.24961562499993306, - 0.24756367187501382, - 0.24400546875017426, - 0.24400546875017426, - 0.24400546875017426, - 0.24400546875017426, - 0.2476636718752161, - 0.25255039062517426, - 0.2523582031251408, - 0.25802421875005166, - 0.25802421875005166, - 0.25802421875005166, - 0.25802421875005166, - 0.25499726562497926, - 0.24174121093756185, - 0.24174121093756185, - 0.24174121093756185, - 0.24174121093756185, - 0.23364277343762296, - 0.23364277343762296, - 0.23364277343762296, - 0.23616484374997526, - 0.23616484374997526, - 0.23616484374997526, - 0.23407148437490832, - 0.23407148437490832, - 0.23407148437490832, - 0.23407148437490832, - 0.2401265624998814, - 0.23500273437502983, - 0.24421113281255202, - 0.23500273437502983, - 0.24421113281255202, - 0.24421113281255202, - 0.24421113281255202, - 0.23053730468768663, - 0.23053730468768663, - 0.23053730468768663, - 0.2192902343751939, - 0.23369062500023574, - 0.2192902343751939, - 0.23093574218773938, - 0.23093574218773938, - 0.2450257812502059, - 0.27202695312507785, - 0.30562656249981046, - 0.27296132812489304, - 0.27296132812489304, - 0.30562656249981046, - 0.32845371093731046, - 0.32845371093731046, - 0.37305898437489304, - 0.6222558593751728, - 0.8412947265626372, - 0.8412947265626372, - 0.7091417968752012, - 0.8412947265626372, - 13.009764843749963, - 0.8412947265626372, - 0.8412947265626372, - 0.8412947265626372, - 0.8412947265626372, - 0.7105314453124265, - 0.47184902343769863, - 0.45340390625028704, - 0.7976673828127332, - 0.45340390625028704, - 0.3430351562501528, - 0.45340390625028704, - 0.45340390625028704, - 1.7549023437500182, - 0.4491923828124982, - 0.5154132812501757, - 0.5154132812501757, - 0.5424124999999549, - 0.5424124999999549, - 1.7819015624997974, - 5.232612695312355, - 5.232612695312355, - 4.046197851562283, - 1.8382873046873556, - 5.288998437499913, - 16.31251210937512, - 30.899453625000206, - 30.899453625000206, - 30.899453625000206, - 14.104601562500193, - 1.7514274531249612, - 0.4139557734376922, - 1.7514274531249612, - 0.3978939687501679, - 0.3137355703127014, - 0.2526437734375122, - 0.2526437734375122, - 0.2526437734375122, - 0.24838576562524395, - 0.23726779687513044, - 0.23726779687513044, - 0.22886975000005805, - 0.22886975000005805, - 0.22886975000005805, - 0.2420832265622721, - 0.23722678124977392, - 0.24293732812498092, - 0.3615031484375777, - 12.849919164062612, - 12.849919164062612, - 12.849919164062612, - 19.171473070312686, - 19.171473070312686, - 6.778574046875065, - 6.778574046875065, - 6.778574046875065, - 6.735212132812649, - 0.6664295156251683, - 0.33832326562514936, - 0.4149674062500708, - 0.47797541406271193, - 0.47797541406271193, - 0.47797541406271193, - 0.47797541406271193, - 0.4019076406250406, - 0.47797541406271193, - 0.47797541406271193, - 0.4328480703125024, - 0.4328480703125024, - 0.37511721093756023, - 0.33529904687497947, - 0.29653849999976956, - 0.2811842890623666, - 0.257210179687263, - 0.257210179687263, - 0.2537236562500311, - 0.2537236562500311, - 0.24034787499977028, - 0.24034787499977028, - 0.24440451562486487, - 0.24440451562486487, - 0.2577802968751257, - 0.2577802968751257, - 0.26901584375013954, - 0.27297795312506423, - 0.27297795312506423, - 0.30267014062496855, - 0.4368506093749147, - 0.4368506093749147, - 0.4368506093749147, - 0.3069660390624449, - 0.31394572656245145, - 0.31394572656245145, - 0.2939205312500235, - 7.086287718749645, - 7.086287718749645, - 7.086287718749645, - 0.2939205312500235, - 0.2939205312500235, - 0.3183119375003116, - 0.42390529687509115, - 0.42390529687509115, - 0.42390529687509115 - ] - } - ], - "layout": { - "height": 400, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Reaction time - trial number", - "x": 0.26, - "y": 0.85 - }, - "width": 630, - "xaxis": { - "showgrid": true, - "title": { - "text": "Trial number" - } - }, - "yaxis": { - "dtick": [ - -1, - 0, - 1, - 2 - ], - "range": [ - -1, - 2 - ], - "title": { - "text": "Reaction time (s)" - }, - "type": "log" - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# get all trial of the day\n", "trial_sets = (behavior.TrialSet & \n", @@ -3431,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/FitPars.ipynb b/notebooks/notebooks_plotting/FitPars.ipynb index d8b3004e..b93d7c49 100644 --- a/notebooks/notebooks_plotting/FitPars.ipynb +++ b/notebooks/notebooks_plotting/FitPars.ipynb @@ -2,43 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior\n", "from ibl_pipeline import behavior as behavior_ingest\n", @@ -62,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,4088 +47,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.5", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x4", - "y": [ - 16.7754, - 30.1857, - 19.2202, - 20.5585, - 12.5584, - 14.6569, - 10.3264, - 16.7634, - 12.5161, - 10.5736, - 11.0573, - 10.3284, - 7.55141, - 5.6668, - 9.71218, - 20.5857, - 18.1496, - 12.4867, - 8.85846, - 7.83484, - 5.51512, - 10.3364, - 11.7039, - 11.5655, - 16.4235, - 12.8918, - 5.34707, - 0.523064, - 17.7791, - 9.40366, - 41.5333, - 40.2977, - 13.393, - 9.66737, - 20.011, - 21.8307, - 12.4444, - 19.9108, - 16.8253, - 13.7974, - 20.8977, - 15.3712, - 3.52582, - 20.2913, - 12.3486, - 14.5013, - 15.7738, - 13.6139, - 12.5836, - 18.8884, - 8.67302, - 7.14815, - 10.567, - 12.5935, - 23.4473 - ], - "yaxis": "y4" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.5", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x3", - "y": [ - 40.0348, - 40.5976, - 24.3641, - 2.89297, - 3.65332, - 5.7701, - 3.36851, - -0.00605751, - 1.79205, - 0.0103413, - -0.986595, - -5.01262, - -7.88318, - -7.3783, - -0.00895387, - -18.5355, - -24.8298, - -1.88124, - -0.000985119, - 1.82043, - 0.794392, - -1.78258, - -0.621804, - -1.80648, - 0.00244633, - 5.70883, - -10.0292, - -10.7913, - -9.22812, - -3.18215, - -13.3968, - -8.09715, - 0.00123622, - 0.846806, - -1.76699, - -0.0647602, - 6.26873, - 3.62174, - 0.00046104, - -5.35177, - -6.85996, - -2.57824, - -1.7776, - -2.80199, - 1.82941, - 0.618882, - -1.42619, - -0.00459785, - -2.66457, - 0.00428932, - -11.1575, - -4.7055, - 0.000884174, - -0.0128951, - -3.92672 - ], - "yaxis": "y3" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.5", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x2", - "y": [ - 0.418605, - 0.408068, - 0.202479, - 0.112387, - 0.0573851, - 0.0257207, - 0.0414128, - 9.58956e-12, - 0.0350024, - 5.76718e-12, - 2.24996e-11, - 2.23885e-12, - 3.76801e-11, - 0.0551008, - 0.190833, - 0.0254471, - 0.0701713, - 0.00117274, - 0.0714957, - 2.7519e-12, - 3.82037e-11, - 0.00935206, - 0.119576, - 0.124722, - 1.00647e-11, - 0.0336096, - 1.30121e-11, - 1.08582e-09, - 0.00111656, - 0.05276, - 4.05891e-11, - 1.04698e-12, - 1.19898e-10, - 1.32048e-10, - 0.0605427, - 0.232516, - 0.14124, - 4.54328e-05, - 7.31274e-11, - 0.00787899, - 3.41147e-11, - 0.0501242, - 0.0708996, - 1.18578e-11, - 8.40877e-09, - 3.35046e-09, - 0.00677941, - 5.79038e-11, - 5.16398e-11, - 0.0377106, - 0.00783597, - 2.78027e-10, - 0.0345808, - 3.04773e-11, - 0.0406222 - ], - "yaxis": "y2" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.5", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x", - "y": [ - 0.305085, - 0.051737, - 0.0334727, - 0.131276, - 0.155378, - 0.0981793, - 0.0470461, - 3.79312e-06, - 0.0462852, - 0.0693975, - 0.00153598, - 0.0432877, - 0.0546435, - 0.0255237, - 1.43804e-12, - 1.8426e-12, - 4.19088e-12, - 2.58364e-06, - 1.54728e-11, - 0.00400964, - 0.0939997, - 3.13292e-11, - 1.96158e-11, - 5.61396e-10, - 0.0728164, - 1.60334e-07, - 0.0468926, - 0.216665, - 0.00261401, - 0.0447064, - 6.24772e-11, - 0.0718754, - 1.02535e-10, - 0.0421264, - 1.56633e-10, - 7.94355e-12, - 8.33297e-10, - 3.21951e-08, - 8.44591e-11, - 2.67845e-12, - 0.0860305, - 8.81858e-12, - 0.00159124, - 0.000178919, - 0.00556242, - 0.00219377, - 1.52497e-06, - 3.44193e-11, - 0.0445547, - 1.52782e-11, - 2.01451e-11, - 0.0205832, - 6.18818e-11, - 6.60961e-11, - 7.67261e-13 - ], - "yaxis": "y" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.2", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x4", - "y": [ - 8.31819, - 11.8583, - 10.0016, - 9.85056, - 32.2859, - 10.1408, - 38.6798, - 1.46699, - 14.0143, - 16.4108, - 15.7674, - 14.8839, - 13.5429, - 12.4603, - 20.7336, - 12.4794, - 16.7851, - 15.6777, - 12.6847, - 29.961, - 3.36038, - 19.1096, - 25.4267, - 11.8538, - 15.7654, - 13.9079, - 27.737, - 31.4526, - 13.4559, - 16.5195, - 27.787, - 33.8347, - 40.2331, - 0.00176432, - 11.3224, - 17.1545, - 17.858, - 22.0802, - 22.2828, - 19.1855, - 24.1048, - 22.5027, - 7.08321, - 23.8473, - 26.5671, - 29.7423 - ], - "yaxis": "y4" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.2", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x3", - "y": [ - 5.28432, - 2.26192, - -3.73832, - -6.57473, - -1.87622, - -8.09244, - -0.0663304, - -14.8932, - -5.12286, - -5.8536, - 1.91311, - -2.29962, - -7.13891, - -3.18799, - -16.4886, - -4.24281, - -14.9746, - -4.56793, - -5.0488, - -7.63592, - -0.988086, - -7.30074, - -11.6457, - -10.028, - -10.6505, - -6.32941, - -14.2461, - 0.000130392, - -0.0399873, - -8.95981, - -16.1, - -16.2191, - -21.4764, - -0.00188201, - -4.74732, - -8.81272, - -6.16749, - -6.65162, - -5.77104, - -0.00761786, - -16.1828, - -17.9888, - -4.96626, - -23.4363, - -16.9963, - -13.649 - ], - "yaxis": "y3" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.2", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x2", - "y": [ - 0.149483, - 0.144388, - 0.0311483, - 1.14448e-10, - 1.52661e-11, - 3.626e-10, - 0.229432, - 0.5, - 0.0242584, - 2.76459e-06, - 3.35168e-10, - 3.45558e-09, - 0.0166642, - 0.0570372, - 3.40378e-11, - 0.0585095, - 0.00768122, - 0.0458026, - 6.1378e-11, - 0.0196184, - 0.34773, - 0.091671, - 3.08568e-05, - 7.10211e-12, - 1.53729e-11, - 0.214633, - 0.0881787, - 0.00546438, - 0.41867, - 9.66618e-08, - 7.55084e-11, - 1.15438e-12, - 1.52132e-08, - 0.111077, - 0.00291507, - 8.94598e-11, - 0.31886, - 2.92887e-08, - 0.000201736, - 0.265218, - 5.73962e-08, - 0.0136686, - 0.0371167, - 0.0850928, - 3.60691e-09, - 0.11916 - ], - "yaxis": "y2" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.2", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x", - "y": [ - 4.91298e-12, - 4.30795e-07, - 0.0753848, - 0.0259967, - 0.0809911, - 0.0153534, - 2.4749e-12, - 0.0957447, - 1.99134e-05, - 6.29919e-07, - 0.0834285, - 0.0199181, - 9.83206e-12, - 0.095581, - 2.28582e-11, - 0.0507208, - 0.131603, - 0.145253, - 0.00744419, - 6.95469e-12, - 0.0205965, - 0.129366, - 0.00226725, - 0.406147, - 0.0191575, - 0.0309604, - 0.0190604, - 4.34661e-12, - 7.17956e-11, - 3.76762e-06, - 0.0724611, - 0.0390942, - 1.06994e-08, - 0.0756226, - 0.00976542, - 0.0394604, - 6.05168e-12, - 0.000138065, - 6.79488e-12, - 1.24785e-11, - 3.2055e-05, - 6.3455e-12, - 7.89558e-12, - 4.99141e-12, - 0.0254454, - 9.05035e-10 - ], - "yaxis": "y" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.8", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x4", - "y": [ - 9.30057, - 8.52759, - 14.6501, - 12.2414, - 15.497, - 10.953, - 34.7909, - 5.8672, - 15.3521, - 11.7294, - 16.0956, - 15.2046, - 21.0257, - 20.5086, - 28.1608, - 36.226, - 45.1996, - 13.5333, - 14.7714, - 13.7289, - 10.5019, - 17.0538, - 25.9181, - 36.7338, - 15.6876, - 16.6264, - 24.8595, - 11.3239, - 42.4709, - 26.4475, - 14.7631, - 28.1778, - 13.1289, - 4.72713, - 25.7571, - 20.3515, - 21.2645, - 14.0031, - 12.5965, - 20.8112, - 11.8035, - 15.194, - 6.05883, - 34.6688, - 26.7834, - 57.0347 - ], - "yaxis": "y4" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.8", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x3", - "y": [ - 7.21834, - 0.350718, - 0.00499667, - 0.138351, - -0.374768, - 0.899582, - 3.49091, - -11.6059, - 4.50919, - 4.70327, - 12.4355, - 4.54751, - -1.25474, - 5.40439, - 2.55236, - 6.95352, - -2.06647, - 0.0128961, - 3.09559, - 3.20948, - 5.9401, - 13.4628, - 4.35608, - 2.15818, - 3.30322, - 8.08887, - 5.16055, - 9.55427, - 14.1738, - 9.47584, - -0.737839, - 10.7695, - 9.04684, - -1.21522, - 6.03897, - 8.46384, - 0.527024, - 9.63373, - 0.809135, - 13.3047, - 8.56046, - -4.28918, - 0.62588, - 9.77951, - 8.0247, - 12.3126 - ], - "yaxis": "y3" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.8", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x2", - "y": [ - 1.05373e-10, - 0.00897082, - 1.20636e-10, - 3.31532e-11, - 1.80466e-11, - 0.0307866, - 5.04024e-10, - 0.0201749, - 8.13127e-06, - 0.0127137, - 3.36669e-09, - 0.0114483, - 9.85628e-05, - 0.053466, - 6.07416e-08, - 5.95771e-11, - 1.70147e-13, - 1.53124e-11, - 0.0899199, - 0.0202524, - 0.17068, - 0.0892769, - 0.0563798, - 0.0533099, - 0.0344894, - 3.59018e-11, - 1.13168e-05, - 0.0675662, - 0.0511848, - 8.29176e-13, - 0.0485975, - 0.0735155, - 0.100304, - 0.128461, - 4.07027e-07, - 0.000153989, - 1.26922e-09, - 0.0515952, - 0.0227627, - 0.0324384, - 0.0620465, - 0.0522054, - 0.0385374, - 0.0891045, - 0.0410168, - 0.0641132 - ], - "yaxis": "y2" - }, - { - "legendgroup": "p_left", - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", - "opacity": 0.8, - "size": 5 - }, - "mode": "markers", - "name": "p_left = 0.8", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-05", - "2019-12-06", - "2019-12-09", - "2019-12-10", - "2019-12-11", - "2019-12-12", - "2019-12-13", - "2019-12-17", - "2019-12-18", - "2019-12-19", - "2019-12-20", - "2019-12-23", - "2019-12-24", - "2019-12-27", - "2019-12-28", - "2019-12-29", - "2019-12-30", - "2019-12-31", - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-06", - "2020-01-07", - "2020-01-08", - "2020-01-09", - "2020-01-12", - "2020-01-13", - "2020-01-14", - "2020-01-15", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-29", - "2020-01-30", - "2020-01-31", - "2020-02-01", - "2020-02-03", - "2020-02-04", - "2020-02-06", - "2020-02-07", - "2020-02-08" - ], - "xaxis": "x", - "y": [ - 0.0524509, - 2.38996e-11, - 1.03092e-09, - 0.0585833, - 0.0232189, - 5.45246e-11, - 1.21532e-09, - 0.142735, - 8.97974e-07, - 0.0220075, - 1.23985e-10, - 4.45417e-11, - 6.66053e-11, - 2.87362e-11, - 1.76759e-11, - 0.000642538, - 0.306098, - 0.221676, - 2.25794e-11, - 2.45676e-11, - 0.0417997, - 7.50744e-11, - 1.31766e-09, - 0.352663, - 1.73016e-11, - 5.00907e-09, - 0.130769, - 0.228618, - 0.000171663, - 0.270363, - 0.04696, - 1.06408e-06, - 0.000251658, - 1.92841e-11, - 0.0540398, - 3.80569e-07, - 9.71363e-09, - 7.87257e-11, - 3.06717e-11, - 7.84979e-09, - 6.35159e-12, - 0.0733397, - 0.0491764, - 3.58544e-12, - 4.28269e-13, - 1.99194e-07 - ], - "yaxis": "y" - }, - { - "legendgroup": "date", - "line": { - "color": "darkgreen", - "dash": "dashdot", - "width": 1 - }, - "mode": "lines", - "name": "threshold for trained", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-10-29", - "2020-02-11" - ], - "xaxis": "x4", - "y": [ - 19, - 19 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-16", - "2019-12-16" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-23", - "2019-12-23" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-30", - "2019-12-30" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-06", - "2020-01-06" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-20", - "2020-01-20" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-10", - "2020-02-10" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": true, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-30", - "2020-01-30" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-31", - "2020-01-31" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-01", - "2020-02-01" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(255, 18, 18, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "not good enough for brainwide map", - "showlegend": true, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-07", - "2020-02-07" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-08", - "2020-02-08" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-11-27", - "2019-11-27" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-03", - "2019-12-03" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(28, 20, 255, 1)" - }, - "mode": "lines", - "name": "first day got ready4ephysrig", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-11", - "2019-12-11" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(117, 117, 117, 1)" - }, - "mode": "lines", - "name": "first day got ready4delay", - "showlegend": true, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "hoverinfo": "x", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "first ephys session date", - "showlegend": true, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x4", - "y": [ - 0, - 100 - ], - "yaxis": "y4" - }, - { - "legendgroup": "date", - "line": { - "color": "darkgreen", - "dash": "dashdot", - "width": 1 - }, - "mode": "lines", - "name": "threshold for trained", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-29", - "2020-02-11", - "2020-02-11", - "2019-10-29" - ], - "xaxis": "x3", - "y": [ - 16, - 16, - -16, - -16 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-16", - "2019-12-16" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-23", - "2019-12-23" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-30", - "2019-12-30" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-06", - "2020-01-06" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-20", - "2020-01-20" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-10", - "2020-02-10" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-30", - "2020-01-30" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-31", - "2020-01-31" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-01", - "2020-02-01" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(255, 18, 18, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "not good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-07", - "2020-02-07" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-08", - "2020-02-08" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-27", - "2019-11-27" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-03", - "2019-12-03" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(28, 20, 255, 1)" - }, - "mode": "lines", - "name": "first day got ready4ephysrig", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-11", - "2019-12-11" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(117, 117, 117, 1)" - }, - "mode": "lines", - "name": "first day got ready4delay", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "hoverinfo": "x", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "first ephys session date", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x3", - "y": [ - -100, - 100 - ], - "yaxis": "y3" - }, - { - "legendgroup": "date", - "line": { - "color": "darkgreen", - "dash": "dashdot", - "width": 1 - }, - "mode": "lines", - "name": "threshold for trained", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-29", - "2020-02-11" - ], - "xaxis": "x2", - "y": [ - 0.2, - 0.2 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-16", - "2019-12-16" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-23", - "2019-12-23" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-30", - "2019-12-30" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-06", - "2020-01-06" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-20", - "2020-01-20" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-10", - "2020-02-10" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-30", - "2020-01-30" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-31", - "2020-01-31" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-01", - "2020-02-01" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(255, 18, 18, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "not good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-07", - "2020-02-07" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-08", - "2020-02-08" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-27", - "2019-11-27" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-03", - "2019-12-03" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(28, 20, 255, 1)" - }, - "mode": "lines", - "name": "first day got ready4ephysrig", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-11", - "2019-12-11" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(117, 117, 117, 1)" - }, - "mode": "lines", - "name": "first day got ready4delay", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "x", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "first ephys session date", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x2", - "y": [ - 0, - 1 - ], - "yaxis": "y2" - }, - { - "legendgroup": "date", - "line": { - "color": "darkgreen", - "dash": "dashdot", - "width": 1 - }, - "mode": "lines", - "name": "threshold for trained", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-29", - "2020-02-11" - ], - "xaxis": "x", - "y": [ - 0.2, - 0.2 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-16", - "2019-12-16" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-23", - "2019-12-23" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-30", - "2019-12-30" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-06", - "2020-01-06" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-20", - "2020-01-20" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-10", - "2020-02-10" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-30", - "2020-01-30" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-31", - "2020-01-31" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-01", - "2020-02-01" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(255, 18, 18, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "not good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-07", - "2020-02-07" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 0.3)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-08", - "2020-02-08" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-27", - "2019-11-27" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-03", - "2019-12-03" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(28, 20, 255, 1)" - }, - "mode": "lines", - "name": "first day got ready4ephysrig", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-11", - "2019-12-11" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(117, 117, 117, 1)" - }, - "mode": "lines", - "name": "first day got ready4delay", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "legendgroup": "ephys_good_enough", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "first ephys session date", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x", - "y": [ - 0, - 1 - ], - "yaxis": "y" - } - ], - "layout": { - "height": 1000, - "legend": { - "orientation": "v", - "x": 1.1, - "y": 1 - }, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Fit Parameters", - "x": 0.3, - "y": 0.93 - }, - "width": 600, - "xaxis": { - "domain": [ - 0, - 1 - ], - "range": [ - "2019-10-29", - "2020-02-10" - ], - "showgrid": false, - "title": { - "text": "Date" - } - }, - "xaxis2": { - "domain": [ - 0, - 1 - ], - "range": [ - "2019-10-29", - "2020-02-10" - ], - "showgrid": false - }, - "xaxis3": { - "domain": [ - 0, - 1 - ], - "range": [ - "2019-10-29", - "2020-02-10" - ], - "showgrid": false - }, - "xaxis4": { - "domain": [ - 0, - 1 - ], - "range": [ - "2019-10-29", - "2020-02-10" - ], - "showgrid": false - }, - "yaxis": { - "anchor": "x", - "domain": [ - 0, - 0.2 - ], - "range": [ - -0.02, - 1.02 - ], - "showgrid": false, - "title": { - "text": "$Lapse high\\ (\\lambda)$" - } - }, - "yaxis2": { - "anchor": "x2", - "domain": [ - 0.25, - 0.45 - ], - "range": [ - -0.02, - 1.02 - ], - "showgrid": false, - "title": { - "text": "$Lapse low\\ (\\gamma)$" - } - }, - "yaxis3": { - "anchor": "x3", - "domain": [ - 0.5, - 0.7 - ], - "range": [ - -105, - 105 - ], - "showgrid": false, - "title": { - "text": "$Bias\\ (\\mu)$" - } - }, - "yaxis4": { - "anchor": "x4", - "domain": [ - 0.75, - 1 - ], - "range": [ - -5, - 105 - ], - "showgrid": false, - "title": { - "text": "$Threshold\\ (\\sigma)$" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# plot for fit parameter changes over time\n", "# get trial counts and session length to date\n", @@ -4345,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/PSTH.ipynb b/notebooks/notebooks_plotting/PSTH.ipynb index 4d7efdba..a9a82939 100644 --- a/notebooks/notebooks_plotting/PSTH.ipynb +++ b/notebooks/notebooks_plotting/PSTH.ipynb @@ -2,17 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "from ibl_pipeline import behavior, ephys\n", @@ -26,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -78,22 +70,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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pJOOX7VqVaNvbrS2em666abuV199df/y8vKUg+q1tbXh7rvv7n3VVVf1auz5G2LevHkdL7jggkGNvV4LFy7sfMYZZwwuKSlJ+TXu2LEjo7q6ulGLAeqqrq4ON99889Hnn39+/4YuSkhm69atsZNPPvnYmTNn9mzMIoN0evXVVzPHjBlz3MqVK7Pqbps0adLOF198cXWnTp2adoEAAAAAoO1IFuiv72mhAv0AAAAAQEoy0l0AcHirqqoK55xzzjEvvPBCXrJ9unbtWnniiSeWdO/evTIvL6+6qKgo9tFHH7X761//2qG4uDghQP7RRx+1P+uss4a88cYb76YaOm5t9Tz44IP5t9xyy9HJtufl5VV94QtfKO7Vq1dldnZ2zcaNG+Nvv/129urVqz8RxP75z3/ec+TIkaWpnLuhVq9e3f6b3/zmMXVD9d26dav8/Oc/X9yzZ8/KjIyM2o0bN7b729/+lrNhw4Z6b1698sorHc4///wBzz777NrmqCszM7Nm8ODB+wYOHFjWqVOn6ry8vOrq6upIUVFRbO3ate3feeed7MLCwno/x5544okuN998876bb755a2POvXXr1thpp512bN334UDt2rWrHTlyZMnRRx9d0bVr18qMjIzaXbt2ZWzZsiX+1ltv5Wzbti3emHM31cKFCztcdNFFA+tbnHHVVVdt/q//+q9N6agLAAAAAA5jycL49YX3kwX60/J9IQAAAADQ+gn0wxFs3rx560MI6w8cmzRpUv/58+d3OXDsvPPO27l/35RdfvnlfeoLz0ej0XDOOefsmjZt2pZTTjllX33HVlZWhocffjj/5ptvPnrjxo2fuCHywQcftL/sssv6/u53v0uprtZUz6ZNmzKuvfbafrW1tQnbunbtWnnnnXd++I1vfKOwffv2CTssW7Ys65prrjl66dKlHT8emzp1ar/q6uqGnr7Brr766k88yaBfv37lM2bM2DBx4sQ9sVhiw/4//OEPOddcc03ft99+O7vutsWLF+ffd999na+44opdjanl+OOPLx03blzh+eefXzhq1Kh99Z3/YzU1NeHJJ5/seM899/RYunRph7rb//M//7P32LFj94wZM6be9zuZysrK8JWvfGVQsjB///79y6ZPn77pggsuKOrYsWPSBR5r1qyJz5kzJ3/evHmd33rrrZxUamis+++/v/OVV17Zv7Ky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2bKs0047bfDPfvazXh+PdenSpSovLy/1NPkhDBw4sOzjn5977rn84cOHD50/f37HZAsg/vjHP+aMHDnyuMcee6xrfdtvu+22D3v06HHI1RNDhw6tOPXUU/fUHd+6dWt89OjRx993332dKyvrfzr1nj17ojNmzDhqyJAhn1m6dOn/dfQfNmxYQtf/VN1yyy1bTj755OL6tv30pz/tdeyxxw578MEH84uLiw/6GbpmzZr4Lbfc0m348OHHf/nLXz62uRYdHMxVV12187777lsbi8USnjLws5/9rNf3v//93i1dAwAAAAAcYZIF8XXoBwAAAACaRUa6CwAOb7Nmzfpo+/btGfPnz+9Sd9uGDRva33DDDX2nTZvWd9CgQfuGDh26Lz8/vyo/P7+6rKwsUlhYGCsqKspYvXp15tq1azOrq6sbHJY/HOrp06dP1U9/+tMPvv3tbx9Td9v27dvjl1566TFTp06tOvnkk4t79+5dkZmZWbt58+b4m2++mb169eqEpwDcc889H0yfPr1PYWFhU8pKMHPmzA0XXXTRwJKSklgIIaxfvz5z0qRJg7t37175+c9/vrhXr16VsVisdtOmTfHly5fnbtiwIVlHqvClL32p8Lvf/W7CkwmSuf322zf+y7/8S8Ligd27d2dMmTJlwI9//OM+J510UnG/fv0qsrKyarZv356xYcOG9q+88kqHuoshsrOzax599NF1I0eOHJbiJfiEjIyMsGDBgvdPPfXUY1etWpXwPqxduzbz0ksvPWbKlCm1I0eOLOnTp0/5UUcdVRWLxWp3796dsXnz5vjbb7+ds3Xr1nhT6misyy+/fHdWVlbtpZdeekxlZeUnrtEvfvGLHvv27Ys88MADH6WjNgAAAAA4DOnQDwAAAAC0KIF+oEmi0Wj43e9+t/7KK6+snDVrVo/a2oTG4KG2tjasXr06q76Q+pFez+WXX757w4YNH91+++1H17e9sLAw49lnn80/1DxXXnnl5ksuuaRw+vTpfZq7xiFDhpQ//PDDay+44IJBBy5i2Lp1a3zhwoWdGzrPqFGjSubNm7culXOffvrppTfddNOHP/7xj+t9XTt37sxYvHjxIa9PPB6vnT179vsjRowoO9S+DdG1a9fqP//5zyvHjRs3aPny5bn17VNeXh5ZunRphwOfENBa/Pu//3th+/bt11x88cWD6i58+J//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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "cluster = ephys.Cluster & 'cluster_id=14'\n", "trials_all = (behavior.TrialSet.Trial * ephys.TrialSpikes & cluster).proj(\n", @@ -113,89 +92,9 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "marker": { - "opacity": 0 - }, - "mode": "markers", - "type": "scatter", - "uid": "d7293593-775d-4456-b3db-d095aa75aafc", - "x": [ - -1, - 1 - ], - "y": [ - -3.1302000000000008, - 65.73420000000002 - ] - } - ], - "layout": { - "height": 370, - "images": [ - { - "layer": "below", - "sizex": 2, - "sizey": 68.86440000000002, - "sizing": "stretch", - "source": "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAC7gAAAXcCAYAAACyT8NoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XmUnHWdP/pP9ZomnT0krLJc2QIEgcgWCRCWiKhEcEAuW1CZIZHBAeSHKIgOm1wBdYTgggQYyCAJKBKRILLEASRKNAEJmCABkki2TndI0unqrq77h1evTVV1eq+nmtfrHM8xn+d5vs+b4Eyf0/XuT6ey2Ww2AAAAAACADlu9enVMnz693XumTZsWo0aN6qNEAAAAAADQP5QVOwAAAAAAAAAAAAAAAEQouAMAAAAAAAAAAAAAkBAK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiVBR7AAAAAAAAADQUxo2N8c1v3glfr+sLkbWVsf5E3aPSftuV+xYAAAAAEAH2eAOAAAAAABAv9Damo0zfvTbmP3i8li2bnP8/s31MfXeF+Op11YXOxoAAAAA0EEK7gAAAAAAAPQLzyxZE6/8dUObWWs2YuYLbxUpEQAAAADQWQruAAAAAAAA9Av/z2Ov5Z3/6pVVfZwEAAAAAOgqBXcAAAAAAAD6hcXv2d4OAAAAAJQeBXcAAAAAAABKXmtrttgRAAAAAIAeoOAOAAAAAABAyXtj3aZiRwAAAAAAeoCCOwAAAAAAACVv0fL6YkcAAAAAAHqAgjsAAAAAAAAlb+HbDQWvVZan+jAJAAAAANAdCu4AAAAAAACUvPY2uDdnspHNZvswDQAAAADQVQruAAAAAAAAlLTmTGv8aeWGrdyj4A4AAAAApUDBHQAAAAAAgJL251XvRlNLa7v3NGfavw4AAAAAJIOCOwAAAAAAACVt0fKGrd6j4A4AAAAApUHBHQAAAAAAgJK2aHn9Vu9JK7gDAAAAQElQcAcAAAAAAKCkLXy7Ixvcs32QBAAAAADoLgV3AAAAAAAAStaW5ky8turdrd7XYoM7AAAAAJQEBXcAAAAAAABK1p9WbohM69a3szcruAMAAABASVBwBwAAAAAAoGQtXb317e0REemWrZfgAQAAAIDiU3AHAAAAAACgZNVtau7QfTa4AwAAAEBpUHAHAAAAAACgZDU0KrgDAAAAQH+i4A4AAAAAAEDJamhMd+i+tII7AAAAAJQEBXcAAAAAAABKVv3mjm5wz/ZyEgAAAACgJyi4AwAAAAAAULIaGjtYcG+xwR0AAAAASkFFsQNsTTabjdbW1shmbdUAgH+WSqWirKwsUqlUsaMAAAAAQNF0fIO7gjsAAAAAlIJEFdyz2Ww0NjbGpk2bYtOmTZFOpyOTyRQ7FgAkWnl5eQwYMCAGDRoUtbW1UVlZWexIAAAAANBnOrzBvdUyJQAAAAAoBYkouGcymVi7dm3U19dHa6vtGQDQGZlM5h8/HBYRUVNTE6NHj46ampoiJwMAAACA3le/Od2h+5pbfAYFAAAAAKWg6AX3DRs2xDvvvGNTOwD0kMbGxli2bFkMHz48Ro0aFalUqtiRAAAAAKBXNGdaY1O6Y58xNWcU3AEAAACgFBS14N7Q0BArV64sZgQA6Lfq6uoiImL06NFFTgIAAAAAvaOhsbnD9yq4AwAAAEBpKFrBfcOGDQXL7dXV1VFbWxvbbLNNVFRURHl5ue2zAPAera2tkclkIp1Ox8aNG2Pjxo3R2tr2Q7q6uroYMGBADBkypEgpAQAAAKD31G/ueME9ncn2YhIAAAAAoKcUpeCeyWTinXfeyZnX1tbG6NGjo6qqqgipAKA01dTUxJAhQ6K1tTXq6upizZo1ba7/9a9/jerq6hgwYECREgIAAABA77DBHQAAAAD6n7JivHTt2rWRyWTazIYPHx477bSTcjsAdFFZWVmMHDkytt9++zbzbDYb9fX1RUoFAAAAAL2noTHd4XubWxTcAQAAAKAU9HnBPV/Jrra2NkaNGhWpVKqv4wBAvzN06NAYOnRom9nGjRsjm/UrmAEAAADoX+o32+AOAAAAAP1NnxfcGxsbo7W17TcQR48erdwOAD1o2LBhbf7c3NwcTU1NRUoDAAAAAL2jobETBfdWCyAAAAAAoBT0ecF906ZNbf5cXV0dVVVVfR0DAPq16urqqKysbDPbuHFjkdIAAAAAQO/o1Ab3FhvcAQAAAKAUFL3gXltb29cRAKDfS6VSMWjQoDazd999t0hpAAAAAKB3dGqDe0bBHQAAAABKQZ8X3NPpdJs/b7PNNn0dAQDeFwYOHNjmz83NHf+wDwAAAABKQWcK7ulMtheTAAAAAAA9pU8L7tlsNjKZTJtZRUVFX0YAgPeN936NzWQykc36EA8AAACA/qN+c3rrN/1/bHAHAAAAgNLQpwX31tbcbxyWl5f3ZQQAeN/I9zU239diAAAAAChV9Z3Y4K7gDgAAAACloc83uL9XKpXqywgA8L6R72usDe4AAAAA9CcNCu4AAAAA0O/0acEdAAAAAAAAekrD5o4X3NMtlj8AAAAAQClQcAcAAAAAAKDkZLPZqLfBHQAAAAD6HQV3AAAAAAAASs6mdCYyrR3fyt7SquAOAAAAAKVAwR0AAAAAAICSU7853an7m1s6XoYHAAAAAIqnotgBAAAAAAAAoKNWbdgSz7++LtZt6lzBPZ2xwR0AAAAASoGCOwAAAAAAACXhgd+9HZc/tCiyXVjG3qzgDgAAAAAloazYAQAAAAAAAGBrVm3YEl/uYrk9QsEdAAAAAEqFgjsAAAAAAACJ9/zr66K1i+X2iIjmTDceBgAAAAD6jII7AAAAAAAAiffs0rXdej7dYoM7AAAAAJQCBXcAAAAAAAASb3BNZbeeb84ouAMAAABAKVBwBwAAAAAAIPGGbdOxgnsqlX+u4A4AAAAApUHBHRJkyZIlccMNN8TkyZNjjz32iJEjR0ZlZWWkUqk2/5k8eXKxo77v7brrrjn/Xu66664OPbts2bKcZ1OpVCxbtqxXM9Nx/h0BAAAAQPKkWzpWUB9ZW5133pLJ9mQcAAAAAKCXVBQ7ABCxYsWKmDp1asyZMyeyWd9gBwAAAACA90p3sKC+bW11rHm3Kc/zNrgDAAAAQClQcIcie/HFF+OjH/1orF27tthRAAAAAAAgsTq8wX1QdcRfc+fNCu4AAAAAUBLKih0A3s/Wr18fp556qnI7AAAAAABsRUcL6iNrq/LOW7MRmVa/RRUAAAAAks4GdyiiW265Jd58882ceUVFRRx99NGx3377xdChQ6O8vLzN9b322quvIgIAAAAAQCJ0dIP7toOqC15rzrRGeVl5wesAAAAAQPEpuEORtLS0xA9+8IOc+QEHHBAPP/xw7LLLLkVIBQAAAAAAyZTu4Ab3bWsLF9zTmdYYUKngDgAAAABJVlbsAPB+tWjRolizZk3O/J577lFuBwAAAACA9+hwwb29De4d3AIPAAAAABSPgjsUyfz583Nme+65Z4wdO7YIaQAAAAAAINnSHSynt7fBvTmT7ak4AAAAAEAvUXCHInn77bdzZvvss08RkgAAAAAAQPJ1uODe3gb3Dm6BBwAAAACKR8EdiqShoSFnNnjw4CIkAQAAAACA5OtoOX3QgMpunwEAAAAAFI+COxTJpk2bcmZlZf5PEgAAAAAA8unoBveqisLfa2/OZHsqDgAAAADQS7RpoUiyWd9EBwAAAACAjurI9vWxOw2JivJUt84AAAAAAIqrotgB4P3gkUceiYULF7aZLVq0KOe+RYsWxbXXXtvuWWeffXbssssuHX53U1NTzJ07N55++ulYsGBB/OUvf4m6urpobGyMmpqaGDlyZHzwgx+Mww47LE466aQ4/PDDO3x2VyQpz6JFi+KBBx6IefPmxWuvvRbr16+P8vLyGDJkSOy5555xyCGHxOTJk+MjH/lIr2XYmtdffz1mz54dzzzzTCxevDjWrl0bjY2NUVtbG7vttluMGzcuTj755DjxxBOjvLy8R9/d2NgYzz33XDz//POxePHiePXVV2PVqlWxYcOGaGxsjMGDB8eIESNi5MiRcdBBB8WECRPi6KOPjlGjRvVojny2bNkSv/rVr2LevHmxYMGCWLZsWaxZsyY2b94cVVVVMXjw4Nhuu+1izJgxMXbs2Jg4cWKMGzfOb0kAAAAAgBLW1IEN7sfuPTqqygt/HzCt4A4AAAAAiZfK9uEa6ZaWlliyZEmb2R577BEVFXr29G9TpkyJu+++u0fOeuqpp+Loo4/e6n3vvPNO3HTTTXHHHXdEQ0NDh88fM2ZMXH311XHaaad1I2Wy8yxevDguvvjimDt3bofuP+igg+I73/lOHHnkkf+Y7brrrvHmm2+2uW/GjBkxZcqUrZ63bNmy2G233XLmb7zxRuy6664REfH222/HJZdcEg899FC0tm79A5ddd901brzxxm7/Pa1duzZmzZoVs2bNiueeey6ampo69XxlZWWcddZZ8eUvfzn23HPPbmXJ54033oibbrop7rnnnti4cWOnnh0xYkScccYZcf7558fYsWPbvbcj/446Y8OGDXHqqafGE088kXPtwAMPjEcffTS22267Tp+7Nb7uAgAAQO9ZvXp1TJ8+vd17pk2b1ifLAOD9YuLNT8df1mwqeP2EMaPje//3gVFRVhb/11cezXvPT/71sDh09xG9FREAAAAA6AFW2UI/9P3vfz/22muvuPnmmztVJo+IeOWVV+L000+PE088MdatW9fv8syYMSMOOuigDpfbIyIWLFgQRx11VFx33XXdfn9HzJ07N/bbb7+YPXt2h8rtEX8rZJ9++ulx5plnxpYtW7r03lmzZsX2228f06ZNi6eeeqrT5faIiObm5pgxY0aMGTMmbrnlli7lyKelpSW+/vWvxz777BPTp0/vdLk9ImLdunVx6623xgEHHNBjuTpixYoVMWHChLzl9hNOOCHmzZvXK+V2AAAAAOhvmgtsX//UgTvGk5ceFT88Z1xUV5RHeVkqylKFzuizvU8AAAAAQBcpuEM/0tzcHGeddVZMnTo1NmzY0K2zHnvssTjkkENytpSXcp5bbrklPvvZz3apAJ7NZuPKK6+Mq666qsvv74i5c+fGxz/+8S7/fc2cOTNOPPHEaGxs7PSz69ati5aWli69970ymUxceuml8dnPfja6+4tC6urqYuLEifGNb3yjS6X7Ynr55Zfj8MMPj4ULF+ZcmzJlSvziF7+I2traIiQDAAAAgNKTbslfcJ+w58jYfdu232erLM//EVihkjwAAAAAkBwVxQ4A9IxMJhOf/vSn4+c//3nBe3bYYYcYP358bL/99jF06NBoaGiIt956K5566qmor6/Puf8vf/lLHH/88bFgwYJOl3CTlmfWrFnxpS99qeD1ESNGxDHHHBM77bRTbLPNNrF8+fJYsGBBvPzyy23uu/baa+PAAw/s1Ls7atmyZXHaaafllMx33HHHOPLII2PHHXeMioqKWL58ebzwwguxdOnSvOc8/fTTcc4558SsWbN6JNc222wT++23X+y1114xdOjQGDp0aGQymWhoaIglS5bEiy++WHC7/owZM2LfffeNSy+9tEvvrquri6OOOirn38M/q66ujvHjx8cuu+wSo0aNioqKiqirq4uVK1fG73//+1ixYkWX3t1dTz31VHzqU5/K+1sLrrrqqvjP//zPIqQCAAAAgNJVqOBeVV6eZ1YWTXnuTyu4AwAAAEDiKbhDH7jrrrvirrvuajObMmVK3H333W1m5557bs59HXXppZfmLZOXlZXF6aefHpdddlnBYnZLS0s8+OCDccUVV8Qbb7zR5tqSJUvioosuijvvvLNk86xZsyYuuOCCvJvEt99++/jud78bkydPjsrKypzrixYtiksvvTSeeOKJf8ymTZvWY5vO/9kXvvCFNpvb99xzz/je974Xxx13XJSV5W4bev755+OLX/xi/O53v8u5Nnv27LjvvvvizDPP7FKWAw88MD71qU/F5MmTY9999837/r/LZrPx+OOPx7e+9a349a9/nXP9iiuuiGOPPTY+9KEPdSpDS0tLnHLKKQXL7XvttVd84xvfiI9//OMxcODAgue8/fbbMXv27Lj//vtj/vz5ncrQVTNnzozzzjsv0ul0m3l5eXncfvvtcf755/dJDgAAAADoT5oz+X9bZGV5KndWURaR5xdCthQ4AwAAAABIjsKNRaBkPPbYY/Hd7343Z77tttvG3LlzY+bMme1uHa+oqIjTTz89Fi5cGMcff3zO9RkzZsQjjzxSsnkuueSSqKury5mPHz8+Xn755fiXf/mXvOX2iIixY8fG448/Hl//+tf/MVu1alXBjeXd8corr/zjv59yyinxxz/+MU444YSC5fLDDz88nnvuuZg6dWre6xdffHHef+5CysvL49RTT4358+fHggUL4qqrror999+/3XJ7REQqlYpJkybFE088EdOnT8+5v7m5Oa6//voO5/i7G264IZ555pm8166++up4+eWX4/TTT2+33B4RsfPOO8fFF18cL7zwQvzmN7+JE044odNZOuPGG2+Ms846K6fcPnDgwHj44YeV2wEAAACgiwpucK/I/R5mvtJ7RESzDe4AAAAAkHglv8G9paWlUwVO+ofhw4dHRUXJ/8+3RzQ3N8e0adNy5kOHDo1nnnkm9tlnnw6fNWjQoJgzZ0585CMfydkKft1118UnPvGJksvzhz/8Ie69996c+d577x2PPPJIDBs2bKtnpFKpuPrqq2PdunXxve99r8P5u2rChAkxc+bMqK6u3uq9FRUVceutt8aaNWti9uzZba6tWbMmbrjhhvjWt77Vofd+7nOf63b5eurUqdHS0hIXXXRRm/lPf/rTWLFiRey4444dOufNN9+M6667Lu+122+/PS644IIu5fvIRz4Sc+fO7dKzW5PJZOKiiy6K6dOn51wbNWpUzJkzJz784Q/3yrsBAAAAoL/LZrORLlBOz19wz7+4o9AZAAAAAEBylHxDuK6uLm+ZkP5t2rRpMWrUqGLHSIS77ror3njjjZz5Pffc06ky+d9VVVXF/fffH/vss0+bDdQvvPBCvPDCC3HooYeWVJ4f/vCHeed33HFHh8rt/+ymm26KRx99NF5//fVOPdcZ1dXVMWPGjA6V2/+urKwsfvCDH8STTz6Z8wM/d911V1x33XVRVVXVoXN6woUXXhj33ntvzJ8//x+zlpaW+MlPfhKXXHJJh864/vrro6kp9/cHn3/++V0ut/emzZs3xxlnnBE///nPc67tscce8dhjj8Xuu+9ehGQAAAAA0D80Z7IFr1XlKbMXKrjb4A4AAAAAydczbUagaPL9gMfxxx/foe3mhey+++5x5pln5szvvPPOksqzefPm+J//+Z+c+SmnnBLjx4/vdI6qqqq48cYbO/1cZ3zhC1/oUhF6+PDhceWVV+bM165dGz/96U97IlqHpVKp+NznPpcz/+1vf9uh599999247777cuY77LBD3Hzzzd3O19PWrFkTEydOzFtuP+yww+K5555TbgcAAACAbmpv83r+De6pvPc2tyi4AwAAAEDSKbhDCVu8eHH88Y9/zJn/x3/8R7fPPvfcc3Nmv/nNb0oqz5NPPhkNDQ058/PPP7/LOU4++eRe/e0B3cl27rnnRmVlZc78wQcf7E6kLjnmmGNyZi+88EKHnp0zZ05s2rQpZz516tQYNGhQt7P1pKVLl8YRRxyR95/t5JNPjieffDJGjhxZhGQAAAAA0L+0V0zPX3AvtMG98CZ4AAAAACAZFNyhhD322GM5syFDhsRxxx3X7bMPPfTQqKqqajN79dVXY/369SWTZ/78+TmzESNGdCtPRUVFnHbaaV1+vj1jx46Nvffeu8vPDx8+PD760Y/mzH/3u991J1aXbL/99jmzt956KzZu3LjVZ/P976i8vDzvVvhieuGFF+KII46IpUuX5lybNm1aPPTQQ1FTU1OEZAAAAADQ/7S3wT1fmb1Qwb29cwAAAACAZKgodgCg65577rmc2bhx43KK4F0xYMCA2HnnneP111//xyybzcYf/vCHmDhxYknkyVfsPuSQQ6Kionv/r2/8+PFx6623duuMQud21xFHHBGPPPJIm9myZctizZo1se2223b53JaWlnjttddiyZIl0dDQEO+++268++67kclkOnXO+vXro7a2tt178v1gwr777pu3NF8sDz/8cJxxxhnR2NjYZp5KpeK6666LK664okjJAAAAAKB/Sre3wT1PmT3fLCKiWcEdAAAAABJPwR1K2KJFi3Jm3dkA/l4jRoxoUyiPiFizZk1J5znggAO6naMnzuitcwudsXDhwk5vrn/zzTdj5syZ8dBDD8VLL70UTU1N3c5XX18fO++8c8Hrzc3N8ec//zlnfsghh3T73T1l+vTp8e///u/R2tr2g7DKysq4884746yzzipSMgAAAADov9rbvF5VkWeDe0Uq770tmWyPZQIAAAAAeoeCO5Swt956K2d22223xW233dZr71y/fn3J5Fm3bl3ObI899uj2O3vijN46t9AZ+f4uClmxYkVcfPHFMXv27Mhme/bDnoaGhnavr1y5Mqc4HvG3De5JcNVVV8W9996bMx88eHA89NBDceyxxxYhFQAAAAD0f53d4F5pgzsAAAAAlCwFdyhR9fX1sWXLlj5/b6FCedLybNmyJe/G8cGDB3f7nRUVFVFTUxONjY3dPuuf9US2QmfU19d36PnZs2fHeeedFxs3bux2lnxaWlravb527dq886FDh/ZGnE7LV27fYYcd4pe//GWMHTu2CIkAAAAA4P2hvWJ63g3uBQru7W2CBwAAAACSoeQL7sOHD49p06YVOwZ9bPjw4cWOUHSbN28uynvzlcYjkpenUKG7J0rkERFDhgxJZMF9yJAheecdKbg/8MADceaZZ261hN6bCv2dJqXgnk8x/74AAAAA4P2ivQ3u+crs+ba6R9jgDgAAAACloOQL7hUVFTFq1Khix4A+l8lkih2hjaTloXPeeuutOO+88wqWtffdd984+uij49BDD41ddtkldt555xg8eHAMGDAgampqoqws98OiVCrVY/l68qzuOPjgg+PFF19sM1u9enUcc8wx8fjjj8fBBx9cpGQAAAAA0L+1X3DP/f5hRZ5ZRERzS7bHMgEAAAAAvaPkC+7wfjVgwIC886OOOiqOO+64XnvvhAkTSiJPoU3mGzZs6JH3NjQ09Mg5/6wnshXKtbUN6JdddlneLfwHH3xwfPe7343x48d3Kkc6ne7U/X9XU1OTd96RDfR9YebMmXH55ZfHz372szbzurq6OPbYY+OXv/xlHH744UVKBwAAAAD9V7rA5vWqirK8CzLybXWPsMEdAAAAAEqBgjuUqCFDhkQqlYpstu22mbFjx8aVV175vs9TU1MT1dXV0dTU1GbeEyXylpaWaGxs7PY579UT2Qqd0V7Bva6uLh588MGc+YQJE2Lu3LkFf3ihPXV1dZ1+JiJi5MiReefr16/v0nk9raqqKmbNmhVnn3123H///W2uNTQ0xAknnBBz5syJo446qkgJAQAAAKB/KrTBvapAkb1Qwb1QUR4AAAAASI78390DEq+qqiq22267nPm6deuKkCZ5eSIihg8fnjNbsmRJt8/tiTN669xCZ4wYMaLgM48++mhkMpk2s7KyspgxY0aXyu0REWvXru3SczvuuGOUl5fnzF955ZUundcbKioq4r777ospU6bkXNu4cWOceOKJ8fjjj/d9MAAAAADox9rb4J53Xp671T3CBncAAAAAKAUK7lDCxowZkzN79dVXi5Dkb5KWZ//998+ZLVy4sNvn9sQZvXXuokWL8s7Hjh1b8Jnf//73ObPx48fH7rvv3uUcCxYs6NJzFRUVsddee+XM589PnTNMAAAgAElEQVSf3+UsvaGsrCzuvPPOuOCCC3KuNTY2xic/+cl45JFHipAMAAAAAPqnQsX0ygJF9kIb3Jsz2bxzAAAAACA5FNyhhB122GE5sz/+8Y/R0NBQhDTJy3PIIYfkzObPnx8tLS3dOvfZZ5/t1vO9eW6+Mz7wgQ/EqFGjCj6zatWqnNl+++3XrRzPPfdcl5899NBDc2Yvv/xyvPPOO92J1ONSqVTcfvvtcfHFF+dca2pqilNPPTVmz55dhGQAAAAA0P+kWzq3wb2ywNwGdwAAAABIPgV3KGEf+9jHcmatra3xs5/9rAhpkpcnX8F93bp18cQTT3T5zEwmEw888EB3YhW0aNGibm28r6uri7lz5+bM8/09/LN169blzIYNG9blHFu2bOlWsfujH/1oziyTycSPf/zjLp/Zm2655Zb4yle+kjNvbm6Oz3zmM3HfffcVIRUAAAAA9C/pApvXqwpsai+8wV3BHQAAAACSTsEdStjhhx8eu+22W878m9/8ZrS29v036ZOWZ+LEiTFo0KCc+Y9+9KMun/nwww/H6tWruxOrXd3Jds8990Q6nc6Zn3LKKe0+N3DgwJxZvtJ7R917773dev5jH/tY3n9vt99+e2zcuLHL5/am6667Lq699tqceSaTiXPOOSex5XwAAAAAKBWFNrgXKrJXlafyzpsLFOUBAAAAgORQcIcSlkql4sILL8yZv/rqq/Gtb33rfZ9n4MCBccYZZ+TMH3rooXj22Wc7fV46nY7LL7+8J6IVdNttt8Vf/vKXTj9XV1cX11xzTc58xIgRWy24b7vttjmz//3f/+10hoiIVatWxRVXXNGlZ/+utrY2zj777Jz5ihUr4ktf+lK3zu5NX/3qV+Pmm2/Ombe2tsb5558ft912WxFSAQAAAED/UKjgXl1hgzsAAAAA9DcK7lDipk6dGjvvvHPO/Ctf+Ur89Kc/7bH3rFixIlauXFlyef71X/817/zzn/98rF+/vlPvvOyyy2Lp0qWdeqazmpqa4rzzzoumpqYOP5PNZuOCCy6Iurq6nGvnnHNOVFdXt/v8QQcdlDP705/+FL/+9a87nCHib9nPOeecWLt2baeey+eKK66IAQMG5Mx/8IMfxB133NHt83vLJZdcErfddlukUm23Q2Wz2bjwwgvjpptuKlIyAAAAAChthYrpVQUK7hUFCu6FivIAAAAAQHIouEOJq6mpidtvvz1n3traGp/+9Kfj61//erS2dv0b9gsXLowpU6bEbrvtFosWLSq5PAcffHDeLe6vvvpqfOITn+hQyT2bzcY111wT//Vf/9WlzJ01b968OPPMM6OxsXGr92Yymbjwwgtj1qxZOddGjhwZX/3qV7d6xgknnJB3PmXKlHjrrbe2HjgiGhoa4qSTTorHH3+8Q/dvzU477RRXX3113mvnn39+XHvttZHJZDp97m9+85uYNGlSd+O1a9q0afHjH/84yspyv8RedtlleTftAwAAAADtK1RML7Spvao8lXdugzsAAAAAJJ+CO/QDJ510Ulx22WU589bW1vjGN74Re+21V3z/+9/vUJm7qakp5s+fH1dddVWMGTMmPvShD8Xdd98dzc3NJZvn29/+dgwbNixn/uyzz8Z+++0Xs2bNKnjeokWLYtKkSfG1r33tH7PRo0fHiBEjOvz+jhozZsw//vuDDz4YBx54YDz++OMFfyDgt7/9bRxxxBExffr0vNdvueWWDuXcfffd85a+ly9fHuPGjYv77rsvWlpa8j67adOmuOOOO2LPPfdss/F93LhxW33v1lx22WVx7LHH5r121VVXxf777x+zZs2KzZs3t3vO22+/Hd/5znfikEMOiQkTJvRYCb895513Xtx3331RUVGRc+1rX/tah37wAAAAAAD4/6U7ucG9UPG9OZPtsUwAAAAAQO/Ibd4BJenGG2+M1atXx913351zbenSpTF16tSYNm1a7LfffnHAAQfE8OHDY9iwYbFly5aor6+P9evXx+LFi2Px4sUFy8ylmmf06NExffr0vJvcV65cGaeddlqMHDkyjjnmmNh5551jwIABsXLlynjxxRfjpZde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AAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHLh/wcCPo7RZTv9/AAAAABJRU5ErkJggg==", - "x": -1, - "xref": "x", - "y": 65.73420000000002, - "yref": "y" - } - ], - "margin": { - "b": 40, - "l": 50, - "pad": 0, - "r": 30, - "t": 80 - }, - "title": { - "text": "Raster, aligned to feedback", - "y": 0.87 - }, - "width": 580, - "xaxis": { - "range": [ - -1, - 1 - ], - "showgrid": false, - "title": { - "text": "Time (sec)" - } - }, - "yaxis": { - "range": [ - -3.1302000000000008, - 65.73420000000002 - ], - "showgrid": false, - "title": { - "text": "Firing rate (spks/sec)" - } - } - } - } - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "data = go.Scatter(\n", " x=x_lim,\n", @@ -247,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/PSTH_combined.ipynb b/notebooks/notebooks_plotting/PSTH_combined.ipynb index 79492ea6..cc791045 100644 --- a/notebooks/notebooks_plotting/PSTH_combined.ipynb +++ b/notebooks/notebooks_plotting/PSTH_combined.ipynb @@ -2,19 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "import numpy as np\n", @@ -28,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -95,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -231,3043 +221,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.04884645647905743, - 0.04321550744838653, - 0.041718177601072874, - 0.041033876819902546, - 0.039281083540007554, - 0.03620933500864907, - 0.03210907278471239, - 0.029044866775158527, - 0.030934599209568175, - 0.033951386818554516, - 0.032518020352632224, - 0.02661994228407876, - 0.02010471969880384, - 0.014416199066831566, - 0.010651481835588825, - 0.009603545576269959, - 0.010212124595530472, - 0.010926200807744722, - 0.013109936689162759, - 0.01466864811914599, - 0.012726276234496132, - 0.012065302127821835, - 0.015051898259707586, - 0.021362112888607187, - 0.026853607553675933, - 0.026073785726425696, - 0.022694238375717744, - 0.020828156404063936, - 0.022280369177245324, - 0.025200566711621797, - 0.025413730292226974, - 0.024130513712472386, - 0.023974938224613628, - 0.02373396590280963, - 0.02141031378086712, - 0.019599263687172807, - 0.022863846103439122, - 0.03167221268844345, - 0.04367650821190515, - 0.05769771750697004, - 0.07001018813351265, - 0.07632009640083437, - 0.08419660244303433, - 0.11477604646276592, - 0.19006333542678738, - 0.3157184724887997, - 0.4674341477111997, - 0.5824352633703361, - 0.6100525101167633, - 0.5622428623503862, - 0.5046158112843904, - 0.45978329146442826, - 0.429469475097162, - 0.40103803389775117, - 0.3664508275363528, - 0.31684894889742643, - 0.2572623407708075, - 0.22233192504851432, - 0.21653733586314836, - 0.21708331569906886, - 0.2007113105583127, - 0.17259097591481146, - 0.14694219616309945, - 0.12636650773014962, - 0.12337221836059886, - 0.13024900623296, - 0.1274695614882861, - 0.1207584448698442, - 0.11309277038406577, - 0.10041918066307629, - 0.08677813936022885, - 0.07027035988030828, - 0.052698677103776466, - 0.04820217056688959, - 0.05569613605958394, - 0.055524937318774926, - 0.042164516891523944, - 0.034989336742894166, - 0.03838236316944051, - 0.038292572560402735 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 255, 0, 0.2)", - "marker": { - "color": "green", - "size": 6 - }, - "mode": "lines", - "name": "left trials, mean +/- s.e.m", - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.06349677516174375, - 0.055164183262487614, - 0.051575078593336154, - 0.05080070317608229, - 0.05002401829394985, - 0.048288416057847734, - 0.04357813280757436, - 0.03987060412710056, - 0.04188634958962173, - 0.044033654487686154, - 0.04152655439302429, - 0.03534157905787802, - 0.029602848301074645, - 0.024005556153032813, - 0.017762094585770216, - 0.015068795486910962, - 0.014351022784188457, - 0.014522272936182084, - 0.01677625846131874, - 0.019326384428984916, - 0.018308471956598855, - 0.01748823338628165, - 0.0198655370570587, - 0.026956298790682683, - 0.035093162122976855, - 0.03383592421501711, - 0.028980657099937773, - 0.026184000006392733, - 0.027318908982421317, - 0.030776706850045427, - 0.03105991765168676, - 0.03114586966947354, - 0.0325712529445065, - 0.03140312792429545, - 0.02651539535978936, - 0.023956886228177154, - 0.02815879541463682, - 0.038346946209643545, - 0.05331313517881735, - 0.07056871565076045, - 0.08493652713853471, - 0.09121060579983942, - 0.09877675449349022, - 0.13166371531021126, - 0.21275468523992952, - 0.3440289714415146, - 0.5005415204787876, - 0.6174695136625296, - 0.6444422181669521, - 0.5945597663077807, - 0.53576105024794, - 0.4895434115661781, - 0.4582641141853336, - 0.4288423051072521, - 0.3943102923408946, - 0.3440635817764461, - 0.28117239196613814, - 0.24392090048323117, - 0.23827768903929689, - 0.23888615609322772, - 0.22203893210458628, - 0.19174638767770702, - 0.16425594103049176, - 0.14388274005383295, - 0.1423306873495412, - 0.1485439013098656, - 0.1440153272177517, - 0.13673118153252387, - 0.13014126070127624, - 0.11743436446528552, - 0.10225195224710565, - 0.08347661761198938, - 0.06393692333447791, - 0.05996052058204277, - 0.06883850488512593, - 0.06849963475288297, - 0.05273412203919753, - 0.044162371635162206, - 0.04868009992932838, - 0.04907705857201754 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 255, 0, 0.2)", - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.07814709384443007, - 0.0671128590765887, - 0.061431979585599435, - 0.060567529532262035, - 0.06076695304789214, - 0.0603674971070464, - 0.05504719283043633, - 0.0506963414790426, - 0.052838099969675284, - 0.05411592215681779, - 0.05053508843341635, - 0.04406321583167728, - 0.03910097690334545, - 0.03359491323923406, - 0.024872707335951608, - 0.020534045397551964, - 0.018489920972846442, - 0.018118345064619446, - 0.02044258023347472, - 0.02398412073882384, - 0.02389066767870158, - 0.022911164644741466, - 0.024679175854409815, - 0.032550484692758175, - 0.04333271669227778, - 0.041598062703608524, - 0.0352670758241578, - 0.03153984360872153, - 0.03235744878759731, - 0.03635284698846906, - 0.036706105011146545, - 0.03816122562647469, - 0.04116756766439938, - 0.03907228994578127, - 0.031620476938711596, - 0.028314508769181502, - 0.03345374472583451, - 0.04502167973084364, - 0.06294976214572955, - 0.08343971379455085, - 0.09986286614355677, - 0.10610111519884446, - 0.1133569065439461, - 0.14855138415765662, - 0.23544603505307166, - 0.37233947039422954, - 0.5336488932463755, - 0.652503763954723, - 0.678831926217141, - 0.6268766702651752, - 0.5669062892114896, - 0.5193035316679279, - 0.4870587532735052, - 0.456646576316753, - 0.4221697571454364, - 0.37127821465546573, - 0.30508244316146876, - 0.26550987591794806, - 0.26001804221544544, - 0.2606889964873866, - 0.24336655365085985, - 0.21090179944060258, - 0.18156968589788408, - 0.16139897237751627, - 0.16128915633848356, - 0.1668387963867712, - 0.16056109294721732, - 0.15270391819520351, - 0.1471897510184867, - 0.13444954826749475, - 0.11772576513398245, - 0.09668287534367048, - 0.07517516956517936, - 0.07171887059719595, - 0.08198087371066791, - 0.08147433218699102, - 0.0633037271868711, - 0.05333540652743025, - 0.05897783668921625, - 0.05986154458363234 - ] - }, - { - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.01093383243292511, - 0.018037920881406412, - 0.022560593485814025, - 0.02155679357015803, - 0.019610932952034678, - 0.01824719910828939, - 0.022597737019061127, - 0.029393381475560774, - 0.029274628523656938, - 0.021760735545097946, - 0.014054268815025256, - 0.010982771705738869, - 0.01267792407913048, - 0.014072931936222976, - 0.010715022535391566, - 0.007397916302419337, - 0.00639699331714333, - 0.006210073869373154, - 0.006696868822604809, - 0.011869559355206616, - 0.019446241005184377, - 0.02201030014836513, - 0.021945933014637688, - 0.021299316034024733, - 0.020948050597654783, - 0.02162665336905633, - 0.022035609233746867, - 0.01874916373120392, - 0.013531160449029161, - 0.012640124190769767, - 0.017014886122591277, - 0.02130079084138934, - 0.023082141046896626, - 0.02407628850006834, - 0.02905523146337958, - 0.0303649588931256, - 0.021859687617303253, - 0.01617354451320347, - 0.02112311297478661, - 0.028853476797333542, - 0.02957943391282602, - 0.024983209943828598, - 0.026135135074710582, - 0.029787435769789393, - 0.03052278451736218, - 0.036750820051987626, - 0.06374313353081548, - 0.10399377713537705, - 0.13524300702942194, - 0.17622676211283347, - 0.24985863752755125, - 0.3336341137625372, - 0.41243073439095745, - 0.4657250029956145, - 0.46024609242754333, - 0.4180988256021274, - 0.37118502172878076, - 0.32206002700136604, - 0.27628397080469647, - 0.25178930431035107, - 0.2447189535173047, - 0.24107250616361955, - 0.24741342990487825, - 0.2551101334036592, - 0.24620797413222384, - 0.23979789321776324, - 0.24290432955771082, - 0.22296675391521042, - 0.18341933343816763, - 0.1437950000876457, - 0.10948352100590993, - 0.09095674330160891, - 0.08665347750441055, - 0.08462270885412139, - 0.08288833982671202, - 0.08351445997305876, - 0.08480439389989346, - 0.07618036193566798, - 0.05999940961012113, - 0.046661597593544935 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 0, 255, 0.2)", - "marker": { - "color": "blue", - "size": 6 - }, - "mode": "lines", - "name": "right trials, mean +/- s.e.m", - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.018117465965091208, - 0.028251864278866397, - 0.035781031215996566, - 0.03469416809210023, - 0.028500281808745885, - 0.02720036708888659, - 0.03440254571090815, - 0.04565940249337651, - 0.04611915159640052, - 0.03321627867723299, - 0.020524899993598043, - 0.017680640885671672, - 0.021938211773886655, - 0.02261919873817047, - 0.018222360261406154, - 0.011751427373251685, - 0.010446310807805543, - 0.010591305040390395, - 0.00985622021948128, - 0.016698982215206153, - 0.02643948348787051, - 0.029271681998931976, - 0.0291479244721679, - 0.029559050274500086, - 0.032442929456466076, - 0.03355276687376666, - 0.030998868148926186, - 0.026391960097963272, - 0.01928277387458746, - 0.01894881140656091, - 0.024255028307388904, - 0.029353485801942004, - 0.0324447133075722, - 0.03368101857994058, - 0.04001898599247093, - 0.040402229224564754, - 0.028998130637679, - 0.022922117261600324, - 0.029663350620622392, - 0.03999948943282518, - 0.040657079323499275, - 0.03461984358616287, - 0.036182416550723046, - 0.043288925094566444, - 0.04345579700984401, - 0.049368382418971936, - 0.08253793746353827, - 0.13302714250487618, - 0.1680978947645578, - 0.2111737511668432, - 0.2886423922299568, - 0.3793770348999591, - 0.4631377426840163, - 0.5187835346997707, - 0.5143262458261857, - 0.4684024017453134, - 0.4152521590530434, - 0.3624379845222428, - 0.31482079901888027, - 0.2901097406378948, - 0.2824601957280436, - 0.2765618067932598, - 0.2868366268329807, - 0.29680407909397843, - 0.28744384551777147, - 0.278934417755636, - 0.2814855765901302, - 0.2601326677351989, - 0.2162562800878747, - 0.17097101126756747, - 0.1325982759285394, - 0.11125689573166832, - 0.10696698863650096, - 0.10659987622440284, - 0.10382814331657678, - 0.10242439296637844, - 0.1038610897264853, - 0.09463579294330796, - 0.07403945649984832, - 0.060164322776237844 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 0, 255, 0.2)", - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.025301099497257305, - 0.03846580767632638, - 0.04900146894617911, - 0.047831542614042426, - 0.03738963066545709, - 0.03615353506948379, - 0.046207354402755176, - 0.06192542351119224, - 0.06296367466914411, - 0.04467182180936803, - 0.02699553117217083, - 0.024378510065604476, - 0.03119849946864283, - 0.03116546554011796, - 0.02572969798742074, - 0.016104938444084033, - 0.014495628298467757, - 0.014972536211407636, - 0.01301557161635775, - 0.02152840507520569, - 0.033432725970556645, - 0.03653306384949882, - 0.036349915929698114, - 0.03781878451497544, - 0.04393780831527737, - 0.04547888037847699, - 0.039962127064105506, - 0.03403475646472263, - 0.02503438730014576, - 0.02525749862235205, - 0.03149517049218653, - 0.03740618076249467, - 0.04180728556824777, - 0.04328574865981283, - 0.050982740521562285, - 0.05043949955600391, - 0.03613657365805475, - 0.029670690009997176, - 0.03820358826645817, - 0.05114550206831681, - 0.05173472473417253, - 0.04425647722849715, - 0.04622969802673551, - 0.056790414419343495, - 0.056388809502325846, - 0.061985944785956246, - 0.10133274139626106, - 0.16206050787437531, - 0.20095278249969367, - 0.24612074022085292, - 0.3274261469323624, - 0.425119956037381, - 0.5138447509770752, - 0.5718420664039269, - 0.568406399224828, - 0.5187059778884994, - 0.45931929637730606, - 0.40281594204311955, - 0.3533576272330641, - 0.3284301769654385, - 0.3202014379387825, - 0.3120511074229001, - 0.3262598237610832, - 0.3384980247842977, - 0.3286797169033191, - 0.31807094229350874, - 0.3200668236225495, - 0.29729858155518735, - 0.24909322673758177, - 0.19814702244748925, - 0.1557130308511689, - 0.13155704816172772, - 0.12728049976859138, - 0.1285770435946843, - 0.12476794680644153, - 0.12133432595969812, - 0.12291778555307716, - 0.11309122395094794, - 0.08807950338957551, - 0.07366704795893075 - ] - }, - { - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.019984466596766448, - 0.02248131540617786, - 0.019160135399014303, - 0.012942066277474478, - 0.010827749048873002, - 0.01615357287063314, - 0.022211818442993338, - 0.026593854570801396, - 0.03220647545457134, - 0.03750372916988326, - 0.032626968933621915, - 0.025360617530277657, - 0.021290520326447057, - 0.016268545016513827, - 0.011982296253583203, - 0.011139890450063064, - 0.012243426368156465, - 0.010883768248159592, - 0.010867271417150604, - 0.00950683335889628, - 0.004997024475963384, - 0.003592937050731496, - 0.006992177240057165, - 0.011173030081641997, - 0.011164864341090323, - 0.010597896114712648, - 0.016112900234341063, - 0.023543561953357505, - 0.02323387242729017, - 0.020996852945771933, - 0.027086585569237952, - 0.03879708727416524, - 0.04456119098987719, - 0.041235691859725684, - 0.03410020922249701, - 0.025202762259431185, - 0.02328673378785779, - 0.03156660003986975, - 0.04349143540909195, - 0.05355768929055622, - 0.06061557413921194, - 0.06980530793363132, - 0.08817739476885, - 0.10990448803784655, - 0.11545989589126379, - 0.10893034487219587, - 0.10254584951437615, - 0.10181153857110511, - 0.12182566471039842, - 0.13980122913618576, - 0.12738343976444128, - 0.10135954161475716, - 0.08436262940737817, - 0.08931540894991137, - 0.09934443009296569, - 0.09838638228290879, - 0.09368707970515734, - 0.08717289316579069, - 0.08541942235253785, - 0.08060601173470239, - 0.06380600225546273, - 0.05597359354174769, - 0.06108816765393878, - 0.060354002033403215, - 0.05681357145695817, - 0.056363088673651376, - 0.05792120865573479, - 0.05766585203983813, - 0.05678428575353401, - 0.05683134040830233, - 0.05762906835498392, - 0.05995839290859319, - 0.06304070060932047, - 0.062104271527467614, - 0.050855211853204775, - 0.036923264610538686, - 0.03851319366554412, - 0.04974102018706417, - 0.04992859840229681, - 0.04696218214578593 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(255, 0, 0, 0.2)", - "marker": { - "color": "red", - "size": 6 - }, - "mode": "lines", - "name": "incorrect trials, mean +/- s.e.m", - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.030922678711676546, - 0.0346870385730373, - 0.02860853260969342, - 0.01998048200525791, - 0.020238302320337923, - 0.024619733625993935, - 0.0320760267279926, - 0.037881640254269135, - 0.04827104273293949, - 0.057105476566568655, - 0.05052115706416022, - 0.03937373105717338, - 0.03076624667928412, - 0.02298929280348497, - 0.017321760039356062, - 0.017728171566545863, - 0.019631883792327106, - 0.019238574888715235, - 0.01839558622930621, - 0.015618287302083774, - 0.008353426212052815, - 0.006100563778725576, - 0.011783527221267883, - 0.01707114281454538, - 0.0169788637090928, - 0.016331822720154373, - 0.0231022501883433, - 0.03154389258099651, - 0.03138755379682685, - 0.02830744057339121, - 0.037209315776600256, - 0.054137390529318305, - 0.05850418679344904, - 0.054917461158075165, - 0.048673022407435894, - 0.03458864700851878, - 0.03221096182760313, - 0.044540238770558564, - 0.057585545662417414, - 0.0681100291131872, - 0.07567591646499117, - 0.09019121306354154, - 0.11615487943828044, - 0.14253996121696416, - 0.14605614910429487, - 0.13428008501049743, - 0.1272410262292823, - 0.12739942613447994, - 0.1531094528611194, - 0.17553229463564515, - 0.15934828277082191, - 0.1273587943571837, - 0.10526357096961507, - 0.11122395286487241, - 0.1266713345089136, - 0.12434652398725597, - 0.11702426561344616, - 0.11302884237253458, - 0.11637584448673605, - 0.11082481159195759, - 0.08793415237816887, - 0.0796172578288821, - 0.0871450279610938, - 0.08452338611610484, - 0.07698040529809234, - 0.07672898932481412, - 0.07963191792356064, - 0.07926923501051553, - 0.07780584215483367, - 0.07753844926813387, - 0.07712705661461348, - 0.08115290197307055, - 0.08450678258453022, - 0.08242301667363598, - 0.07253904856035558, - 0.060080593523811975, - 0.06085949291985424, - 0.06970897536736881, - 0.0655544272275069, - 0.06115245058623751 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(255, 0, 0, 0.2)", - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.041860890826586644, - 0.046892761739896746, - 0.03805692982037254, - 0.027018897733041343, - 0.029648855591802845, - 0.03308589438135473, - 0.04194023501299186, - 0.04916942593773688, - 0.06433561001130764, - 0.07670722396325405, - 0.06841534519469852, - 0.0533868445840691, - 0.04024197303212118, - 0.029710040590456115, - 0.02266122382512892, - 0.024316452683028664, - 0.027020341216497747, - 0.027593381529270877, - 0.02592390104146182, - 0.02172974124527127, - 0.011709827948142246, - 0.008608190506719656, - 0.0165748772024786, - 0.02296925554744876, - 0.022792863077095275, - 0.022065749325596098, - 0.030091600142345538, - 0.039544223208635515, - 0.039541235166363535, - 0.03561802820101048, - 0.04733204598396256, - 0.06947769378447137, - 0.0724471825970209, - 0.06859923045642465, - 0.06324583559237477, - 0.04397453175760638, - 0.041135189867348466, - 0.05751387750124738, - 0.07167965591574288, - 0.08266236893581819, - 0.0907362587907704, - 0.11057711819345176, - 0.14413236410771088, - 0.17517543439608177, - 0.17665240231732596, - 0.159629825148799, - 0.15193620294418844, - 0.15298731369785476, - 0.1843932410118404, - 0.21126336013510455, - 0.19131312577720255, - 0.15335804709961023, - 0.12616451253185199, - 0.13313249677983346, - 0.15399823892486153, - 0.15030666569160317, - 0.140361451521735, - 0.13888479157927847, - 0.14733226662093424, - 0.1410436114492128, - 0.11206230250087501, - 0.10326092211601651, - 0.11320188826824883, - 0.10869277019880647, - 0.09714723913922652, - 0.09709488997597686, - 0.1013426271913865, - 0.10087261798119293, - 0.09882739855613334, - 0.09824555812796541, - 0.09662504487424305, - 0.10234741103754791, - 0.10597286455973996, - 0.10274176181980435, - 0.09422288526750638, - 0.08323792243708526, - 0.08320579217416436, - 0.08967693054767345, - 0.08118025605271699, - 0.07534271902668908 - ] - }, - { - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.03591875486529934, - 0.03614356538778558, - 0.03569367448130006, - 0.03327412158244427, - 0.031243778359291537, - 0.030461502357638663, - 0.03154992393400879, - 0.03351800110211423, - 0.03643231185281783, - 0.03663703321439933, - 0.031562590387381156, - 0.025775533597243386, - 0.021978097619504384, - 0.017817290917812326, - 0.013483119510252953, - 0.011419551978720174, - 0.011595033680485194, - 0.01165386192759087, - 0.012627191210802665, - 0.014766552895262243, - 0.014773588406555184, - 0.014669161902211136, - 0.017245041488978836, - 0.021601227319533577, - 0.024961498288456747, - 0.02459770915818824, - 0.023913197679364066, - 0.02358974793033823, - 0.02256601918758593, - 0.023360426636136092, - 0.026466238580579175, - 0.030396778713543113, - 0.03240012709252579, - 0.03167955959875518, - 0.029985775478033255, - 0.02667137203092665, - 0.025431763694630953, - 0.030764342874188434, - 0.04164686598881372, - 0.053902186563148415, - 0.06213267985742862, - 0.06653368919804034, - 0.07572158842151722, - 0.09842707520498839, - 0.13824739567247948, - 0.2013320818273865, - 0.28476981026911125, - 0.35533418368011427, - 0.38374925727153475, - 0.37587181389433677, - 0.36398962769460863, - 0.35783514021788676, - 0.35925929245330995, - 0.3604482442931696, - 0.3447884153570835, - 0.3075540169671528, - 0.26224002917092837, - 0.2296361905168302, - 0.21468975509959978, - 0.20723538600597816, - 0.19223841480922124, - 0.1745742101013132, - 0.16471011363033636, - 0.15606118853902998, - 0.15102374178207245, - 0.15246132271792748, - 0.1520312986541058, - 0.14302501991236422, - 0.12818928362959014, - 0.11059272549376849, - 0.09382988428823687, - 0.08054651717228835, - 0.07082634458719689, - 0.06793243918724426, - 0.06906032099795122, - 0.06590430835095169, - 0.05929648717153553, - 0.055251346988853325, - 0.051919296424732156, - 0.04745826702756823 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 0, 0, 0.2)", - "marker": { - "color": "black", - "size": 6 - }, - "mode": "lines", - "name": "all trials, mean +/- s.e.m", - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.044022633517488696, - 0.04335565010952405, - 0.04219496530431568, - 0.03957930012919583, - 0.037579482854753515, - 0.037329651438684094, - 0.038540544016896494, - 0.04097994232798244, - 0.04445160893369671, - 0.04405401067660456, - 0.03789990242051588, - 0.031501546338640246, - 0.02780507979661426, - 0.02340588890631911, - 0.017787152793070526, - 0.01477309715322323, - 0.014484209454388275, - 0.014522080604777075, - 0.015280449622242311, - 0.01779113432312355, - 0.01826420401444159, - 0.018104140740456853, - 0.02054955555094657, - 0.025443229564825157, - 0.030328171761887242, - 0.029843078390738298, - 0.028207199878244552, - 0.02743919982005143, - 0.026071479953602972, - 0.027048161453006578, - 0.030608701574842093, - 0.03580928900855844, - 0.03834016885696035, - 0.037276478685067525, - 0.03509947050175749, - 0.030751785911079892, - 0.02929090723360202, - 0.03559093877812066, - 0.04791874784393478, - 0.06181014325898758, - 0.07097447086155945, - 0.07578683331227323, - 0.08585763923878817, - 0.11036717543205844, - 0.1523699718268093, - 0.21797259640691583, - 0.30476807123367705, - 0.37772702095728455, - 0.4065916576092938, - 0.39784965824144886, - 0.3851769487366574, - 0.3789173019439152, - 0.3805834546058452, - 0.38192118299915473, - 0.366648451323616, - 0.3282857751331598, - 0.2804446159661093, - 0.24645581436708452, - 0.23155351261387389, - 0.22398493504089428, - 0.20825514631778225, - 0.18943027517466143, - 0.17991636839865574, - 0.17166237997978157, - 0.16667312349739916, - 0.1674864748032784, - 0.16652185351888782, - 0.15700876849791598, - 0.14155388058404467, - 0.12288261884801707, - 0.1047784189968866, - 0.09041616950270054, - 0.08009411616443096, - 0.07751038140773975, - 0.0790619245147258, - 0.07572517017098927, - 0.06828083678500506, - 0.06343186677217963, - 0.05926544792548018, - 0.05475624964238204 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(0, 0, 0, 0.2)", - "line": { - "width": 0 - }, - "marker": { - "color": "#444" - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - -0.9875, - -0.9625000000000001, - -0.9375, - -0.9125000000000001, - -0.8875, - -0.8625, - -0.8375000000000001, - -0.8125, - -0.7875000000000001, - -0.7625, - -0.7375, - -0.7125000000000001, - -0.6875, - -0.6625000000000001, - -0.6375, - -0.6125, - -0.5875000000000001, - -0.5625, - -0.5375000000000001, - -0.5125, - -0.48750000000000004, - -0.4625, - -0.4375, - -0.41250000000000003, - -0.3875, - -0.36250000000000004, - -0.3375, - -0.3125, - -0.28750000000000003, - -0.2625, - -0.2375, - -0.21250000000000002, - -0.1875, - -0.16250000000000003, - -0.1375, - -0.1125, - -0.08750000000000001, - -0.0625, - -0.037500000000000006, - -0.0125, - 0.0125, - 0.037500000000000006, - 0.0625, - 0.08750000000000001, - 0.1125, - 0.1375, - 0.16250000000000003, - 0.1875, - 0.21250000000000002, - 0.2375, - 0.2625, - 0.28750000000000003, - 0.3125, - 0.3375, - 0.36250000000000004, - 0.3875, - 0.41250000000000003, - 0.4375, - 0.4625, - 0.48750000000000004, - 0.5125, - 0.5375000000000001, - 0.5625, - 0.5875000000000001, - 0.6125, - 0.6375, - 0.6625000000000001, - 0.6875, - 0.7125000000000001, - 0.7375, - 0.7625, - 0.7875000000000001, - 0.8125, - 0.8375000000000001, - 0.8625, - 0.8875, - 0.9125000000000001, - 0.9375, - 0.9625000000000001, - 0.9875 - ], - "y": [ - 0.05212651216967805, - 0.05056773483126253, - 0.0486962561273313, - 0.045884478675947395, - 0.04391518735021549, - 0.044197800519729526, - 0.0455311640997842, - 0.048441883553850644, - 0.05247090601457558, - 0.05147098813880979, - 0.0442372144536506, - 0.0372275590800371, - 0.033632061973724134, - 0.028994486894825894, - 0.0220911860758881, - 0.018126642327726285, - 0.017373385228291356, - 0.01739029928196328, - 0.01793370803368196, - 0.020815715750984856, - 0.021754819622327996, - 0.02153911957870257, - 0.023854069612914305, - 0.029285231810116736, - 0.03569484523531773, - 0.03508844762328836, - 0.032501202077125035, - 0.03128865170976463, - 0.029576940719620016, - 0.030735896269877064, - 0.034751164569105014, - 0.04122179930357377, - 0.04428021062139491, - 0.04287339777137987, - 0.04021316552548173, - 0.034832199791233136, - 0.03315005077257309, - 0.040417534682052884, - 0.054190629699055845, - 0.06971809995482674, - 0.07981626186569028, - 0.08503997742650612, - 0.09599369005605912, - 0.1223072756591285, - 0.16649254798113913, - 0.23461311098644516, - 0.32476633219824286, - 0.40011985823445484, - 0.4294340579470528, - 0.41982750258856094, - 0.4063642697787062, - 0.39999946366994366, - 0.40190761675838044, - 0.4033941217051399, - 0.38850848729014853, - 0.34901753329916685, - 0.29864920276129026, - 0.26327543821733884, - 0.248417270128148, - 0.2407344840758104, - 0.22427187782634325, - 0.20428634024800968, - 0.19512262316697512, - 0.18726357142053315, - 0.18232250521272586, - 0.18251162688862935, - 0.18101240838366983, - 0.17099251708346774, - 0.1549184775384992, - 0.13517251220226564, - 0.11572695370553633, - 0.10028582183311273, - 0.08936188774166504, - 0.08708832362823524, - 0.08906352803150037, - 0.08554603199102685, - 0.07726518639847459, - 0.07161238655550593, - 0.0666115994262282, - 0.062054232257195856 - ] - } - ], - "layout": { - "height": 370, - "margin": { - "b": 40, - "l": 50, - "pad": 0, - "r": 30, - "t": 80 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "PSTH, aligned to stim on time", - "x": 0.17, - "y": 0.87 - }, - "width": 700, - "xaxis": { - "range": [ - -1, - 1 - ], - "showgrid": false, - "title": { - "text": "Time (sec)" - } - }, - "yaxis": { - "showgrid": false, - "title": { - "text": "Firing rate (spks/sec)" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "x_lim = [-1, 1]\n", "cluster = ephys.DefaultCluster & key\n", @@ -3331,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3351,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3363,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 138, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3375,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": 169, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3390,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 170, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3403,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 171, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3424,7 +380,7 @@ }, { "cell_type": "code", - "execution_count": 172, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3440,7 +396,7 @@ }, { "cell_type": "code", - "execution_count": 181, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3451,32 +407,9 @@ }, { "cell_type": "code", - "execution_count": 182, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 182, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(time, mean_spikes)\n", "plt.fill_between(time, mean_spikes+std_spikes, mean_spikes-std_spikes, alpha=0.5)" @@ -3484,38 +417,16 @@ }, { "cell_type": "code", - "execution_count": 175, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-1.125, -1.1 , -1.075, -1.05 , -1.025, -1. , -0.975, -0.95 ,\n", - " -0.925, -0.9 , -0.875, -0.85 , -0.825, -0.8 , -0.775, -0.75 ,\n", - " -0.725, -0.7 , -0.675, -0.65 , -0.625, -0.6 , -0.575, -0.55 ,\n", - " -0.525, -0.5 , -0.475, -0.45 , -0.425, -0.4 , -0.375, -0.35 ,\n", - " -0.325, -0.3 , -0.275, -0.25 , -0.225, -0.2 , -0.175, -0.15 ,\n", - " -0.125, -0.1 , -0.075, -0.05 , -0.025, 0. , 0.025, 0.05 ,\n", - " 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 , 0.225, 0.25 ,\n", - " 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425, 0.45 ,\n", - " 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n", - " 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 ,\n", - " 0.875, 0.9 , 0.925, 0.95 , 0.975, 1. , 1.025, 1.05 ,\n", - " 1.075, 1.1 , 1.125])" - ] - }, - "execution_count": 175, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "bins" ] }, { "cell_type": "code", - "execution_count": 167, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3528,32 +439,9 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xcV7Xo8d+eGXWNei+WbNmWbMfdDrbTXNJDCi3lEeJcSiAJXC48uAR4PHgXeOTB5SbUkAC5KYRACiFOSAiJ7RAnkZ3IjuUqW82ymq1R721mvz/mjDSyJEu2pmt9Px99NHPOmZmlo9HSnn32XltprRFCCBFaTP4OQAghhOdJchdCiBAkyV0IIUKQJHchhAhBktyFECIEWfwdAEBKSorOz8/3dxhCCBFU9u7d26y1Tp1oX0Ak9/z8fEpKSvwdhhBCBBWlVM1k+6RbRgghQpAkdyGECEGS3IUQIgRJchdCiBAkyV0IIUKQJHchhAhBktyFECIESXIXs4bDoXm2pJaOviF/hyKE10lyF7PGzmNNfP25A2wrbfB3KEJ4nSR3MWs89u4JAOrb+vwbiBA+IMldzAqVtm52lTcD0NghyV2EvoCoLSOEtz1ZXEO42URecjQN7ZLcReiTlrsISl/+0wd8/+Uj0zq2e2CY5/bWcd2yTC7Ijqehvd/L0Qnhf5LcRVAqOdFGcWXLtI59fm8d3QPDbN2QT1ZCJKc6+7E7ZGF4EdokuYugo7XG1j1AXVvvlMc6HJrHi0+wPDeBFbkJZCVEYXdomrqk9S5CmyR3EXS6BoYZHHbQ2T885Zj1dyqbqbL1sHV9HgBZ8VEA0u8uQp4kdxF0bF0DI7enar2/sK+ehOgwrluWCUBWgiu5S8tdhDZJ7iLoNLsl99rWyVvgdodm57EmNhWmEWExA5CVEAlIy12EPknuIug0dw+O3D5by31/bTttvUNsKkob2WaNDMMaYZHkLkKeJHcRdJq7nS13k4K6s8w23VnWhNmkuGzB2PWDsxKiaOiQbhkR2mQSkwg6tq4BzCZFQWoMta2Tt9y3lzWxOi+R+OiwMduzEiKl5S5CnrTcRdBp7h4gKSacOUkx1E7SLdPY0cfRxk42u3XJuGQmRElyFyFPkrsIOs3dA6TERpCbFEVdWx9aj5+QtLPMBjBhcs9OiKKtd4i+QbvXYxXCXyS5i6Bj6x4kJTac3MRoegfttPYMjjtmR9lpshOiWJAWO27fyIgZKSAmQpgkdxF0mrsGSLVGkJPoHLNee8ZF1f4hO+9UtLBlURpKqXGPz5SJTGIWkOQugoqr9EBqbAS5SdHA+OGQu6ta6BuyjxkC6S7bmMjUKBOZRAiT5C786kBdO//npcM4plnIy1V6ICXWreV+xkSmHWVNRIaZWD8vecLnSI+LRCmol5a7CGGS3IVfPf5uDf/9zgn+WW6b1vGu0gOp1giskWEkRIeNGTGjtWZHWRMXz08hMsw84XOEW0ykxkZIt4wIaZLchd9ordld5Szb+7ixBN5UXKUHUmIjAMhNjB4zkamiqZu6tr5Ju2RcshKiaJSJTCKESXIXfnOytZf69j7mJEXz5jEb1c09Uz7GVXogxRoO4BwO6TaRaUdZEwCbCs+e3LMnGOvePTB8TvELEcgkuQu/cS22cf/HlhJmVjxZXDPlY1ylB1KNlntOYjR17X0jffbby5ooyrCOVH+cTGZ8JPXto2Pkd5SdZtn3XqOiqeu8fx4hAokkd+E3xVUtpFojWD8vmWsuyOTZklp6pmg9u0oPJEYbLffEKAaHHdi6B+joHWJvTRtbFp291Q7ObpmBYQdtvUNorXnwjXIcGspOSXIXoUGSu/ALrTXFlS2sn5eMUoqtG/LpGhjmLx/Un/VxrtIDJpNz/HqOMRyytrWXt8pt2B16wlmpZxqt697H2xXNHKjrAKD+LIXIhAgmktyFX1TaemjqGmB9gXO44qo5CSzNjueJd09MWE7AxVV6wCXXGA5Z19bHzrImEqPDWJGbOOXru2ap1rf38audFWTERWKNsJy1yqQQwUSqQgq/KDZGybjGoiuluGN9Hl9/7gD/8tj7RBnDGNfmJ/Hpi+eOPM5mzE51yUl0ttxrWnp587iNjYVpmE3jZ6WeydVyf/lAI7urWvnOhxfz/N66aa3LKkQwkJa78IvdlS1kxkeSlxw9su365VlcsiCFhvY+Km3dvH+ilZ+8dowhu2PkmGajroxLZJiZVGsELx9ooLVncMohkC7JMeGEW0y8VNpAUkw4t12YS3ZilExsEiFDWu7C5xwOTXFVCxsLU8fUfokMM/PkZz40cv+l0ga+9PQHlDV2sTQnfkzpAXc5iVF8cLJ9woU5JqOUIis+khMtvXz6onyiwy3kJEbxTkUzWusJa9IIEUymbLkrpXKVUjuVUkeUUoeVUl82ticppV5XSpUb3xON7Uop9XOlVIVS6oBSapW3fwgReBwOjX2SkgLHm7po7RmctDyAy+o8Z9/53ppWYLT0gHu3DDgnMrmOP3NhjrPJTowiNsLCp9bnA84unt5BO+29Q9N+DiEC1XS6ZYaB/6m1XgysA+5VSi0G7gO2a60XANuN+wDXAAuMr7uAhzwetQgIg8OOCcvtAnz5z/v5/JN7J9znGt/uupg6mayEKDLiItl3sh0YLT2QckbLPTfJ2X8+nVEy7u67ehGP3LGa+CjnPwRXQTG5qCpCwZTJXWvdqLXeZ9zuAo4C2cCNwOPGYY8DNxm3bwSe0E67gQSlVKbHIxd+9/XnSrn2Z7vGjW7RWvNuRTM7jzXR0Te+FVxc2UJuUtTIxdCzWZ2XyN6aNmB86QGX+WmxKAWXT2N8u7ulOfFsKEgZuZ8zMvJGLqqK4HdOF1SVUvnASmAPkK61bjR2nQLSjdvZQK3bw+qMbWc+111KqRKlVInNNr2iUSJw7K9t58X9DZzq7B/X0j3dOUBLzyB2h2bXGQXBBobtFFe2cJFbUj2blXMSqG/v43Rn/0jpgTO7Za5flsXfv3wp89OsM/iJRpO7XFQVoWDayV0pFQs8D/yb1rrTfZ92Nt2mV7N19DGPaK3XaK3XpKZO7yKYCAxaa370ylHCzc63j2sCkMvhhtH7rlovLm8es9E1MMw1S6f3Yc7V776vpg1bl7PQl/toGQCL2URhxswSO0B8VBixMtZdhIhpJXelVBjOxP6U1vovxubTru4W47vrr7geyHV7eI6xTYSIHWVN7Klu5d+vLiTMrDhYf2Zy70QpuGJxOm8es425sLqttIHkmHAumqK/3WVJVjzhFhN7a9po7h4cU3rA05RSZCdESXIXIWE6o2UU8HvgqNb6v9x2bQO2Gre3Ai+6bb/DGDWzDuhw674RQW7Y7uD+V8uYmxLD1g35FGZYOVjfPuaYww0d5CfH8OFlmbT2DFJa59zfMzDM9qOnuXZpJhbz9D40hltMLMuOZ9/JtnGlB7whJzFK+txFSJjOX9hFwKeAzUqp/cbXtcD9wBVKqXLgcuM+wCtAFVAB/Ba4x/NhC395bm8d5U3dfOPqQsLMJpZmJ3CwrmPMRdXDDZ0szorjsoWpmE2KnUbXzOtHTtM/5OCGFVnn9Jqr8xI5VN9JfXvfuDHunpYjE5lEiJjOaJm3tdZKa71Ma73C+HpFa92itd6itV6gtb5ca91qHK+11vdqrQu01ku11iXe/zGEL9gdmgfeOM6qOQlctSQDgKXZ8XT2D3PSqKne0TtEXVsfS7LiSIgOZ/WcxJF+922lDWTFR7J6ztS1X9ytnJPIoN3BnupWUqzeTe7ZiVF09Q9POMpHiGAi5QfEtB2oa+d05wB3XjR3ZAbnspx4gJF+98ONzu9LspzbNxWlcbihk7JTnbx13Mb1y7POuVtlVV4CgLF2qnf6211cwzOla0YEO0nuYtp2lTejFFw8f3QY48J0K+FmEweNETNHGpwDqZZkxQGjE4vue/4gww7N9cvPrUsGIM0ayRyjtO+ZwyA9zTWRSUr/imAnyV1M29vlzSzNjicpZrT1HG4xUZRpHW25N3SSHhcxMtFoYXos2QlR7K9tZ15qzEjSP1er5jhb777ocweZpSqCnyR3MS1d/UPsO9k2ptXusjQ7noP1zouqhxs6RrpkwDm80NV6v2F51nkX5HKNdz9zdqqnJcWEExlmkouqIuhJchfTsruqlWGH5pIJqi4uzY6nq3+YY6e7qLT1jGud37Qyi8ToMD66Mue8X//Shakkx4Sfd8t/upRSznVZpc9dBDkp+SumZVe5jehw88jFTXdLjYuqz5XUYXfocQl4dV4SH/zvK2f0+nnJMez9zhUzeo7pkuGQIhRIy11My67yZtbNSybCYh63b2G6lXCLaWT9U/dumWAks1RFKJDkLqi0dXPTr97htcOnJtxf29pLdXMPlyyYuNhXmNnEosw4WnsGiYu0jFyUDFY5idG09w7RPTAMwMsHGrjygX9y3/MH2FbaMFJ6WIhAJsld8LM3ytlf287nn9zLj/9eNm6RjV3lzQAT9re7LM12dsUszooL+lWMshNHh0MeO9XF1589QM+Anb8dbORfn/6AtT98g79+IOWSRGCTPvdZ7kRzDy8faODODfn0D9n59ZuVHKzv4Ge3rhwZ8rir3EZWfCQFqTGTPs+y7ATgZNB3ycDocMiyU538bHs5sZEWXrh3A8kxERyq7+DTj73PW+U2blo5rpI1pzv7SbNGBP0/OBH8pOU+yz38ViUWs4l7NhZw/8eWcf9Hl7KnqpWNP9nJr3ZW0Nk/xDsVzVyyIPWsCct1oXXlnPEXXINNjjGR6bvbDnOiuYef37qSNGskZpNieW4CS7LjKWvsGve4iqZu1v9oO29XNPs6ZCHGkeQ+i53q6Oe5vXXcsiaXtLhIAG69cA4vfeliLpybxE9eO8ZFP9pBZ/8wF0/S3+4yP83K3//tEq69IPgX3UqJjSDcYqK9d4ivXVU4bjnARZlWKpq6GbI7xmwvOdGKQzsncgnhb5LcZ7FH3qrCoeGuS+eN2V6YYeV3W9fy/N0bWJIdR3xU2ISTl85UlBHn1XK8vmIyKZZlx3PVknS+cGnBuP2LM+MYtDuotHWP2e6apVvT0uOTOIU4G+lzn6Vaugd4+r2T3Lgii9ykidcyXZ2XyJ/uWo/DoUMiaZ+LP921DpNSE/7cRRnOi8dljV0jt2E0uVc3S3IX/ict91nq8eIa+oft3LNxfMv0TLMtsYNz6b7Jfu55qTGEm00cbRztfhkcdoz0w9e0yOxW4X+S3GepD062sTQ7fsaLSs9GYWYT89NiOXpq9KLq8dNdDNodFKZbaezop3/I7scIhZDkPms1dQ6QYVxEFeduUWbcmJa7q0vm+uXOC8quxUuE8BdJ7rOUrXvA67XRQ9miTCu2rgGau52zVQ/UdRAXaRmZ6CX97sLfJLnPQoPDDlp7BkmzSsv9fC3KHL2oCnCovoOlOfHkJzsnesmIGeFvktxnoZYeZ2tTWu7nryjDea3iaGMnA8N2yk51sjQ7gfjoMBKjwzghF1WFn0lyn4WaOiW5z1RybARp1giOnurk+KluhuyapdnO0gt5yTHSchd+J8l9FnJVNUyT5D4jzouqXRyobwdGFwvPT47mRLO03IV/SXKfhZq6pOXuCUWZViqauthX0058VNhIwbH8lBgaOvrGDIc83dnPf7x0ZFzJAiG8RZL7LORquXt7PdJQtzgzjiG75rXDp1iWEz9SWC0/OQatGbNU3x/3nOTRd6o5fnp8wTEhvEGS+yzU1NVPYnQY4Rb59c+Eq/RA98AwF2SPljrOS3aWc3DvmtlR1gRAV/+wDyMUs5n8dc9Ctq4BGQbpAa4yBADL3JK7azjkCeOialNn/8gkp86+IR9HKWYrSe6zUFOXTGDyhDCziQXpsQBjWu6JMeHER4WNJPedx5pG9nVKy134iCT3WcjZcpfk7gnLcxNIj4sYt25sfnL0SAGxHWVNxEeFAdJyF74jyX2W0VpL6QEPuu+aIp6/e8O4VarykmM40dLDwLCdt8ubuXZpBgCd/ZLchW9Icp9lOvuGGRx2SHL3kLjIMHISx9fDz0+Opr6tj3cqmukZtHP5onSsERY6+6RbRviGJPdZxtbdD8gYd2/LT4nBoeGJ4hoiLCY2FKQQFxVGh3TLCB+R5D7LuEoPyGgZ78ozRsy8eczGhoJkosLNWCMt0i0jfEaS+yxj65bZqb6QnzzaVbO5KA2AuKgwuaAqfEaS+ywjRcN8IykmHGuEc4niTa7kHhkmQyGFz8gC2bOMrXuACIuJuEj51XuTUop5qTH0DzlGLrjGRVk42igtd+Eb8hc+yzR19pNqjRg3dE943v0fW4bJ7Tw7W+6S3IVvTNkto5R6VCnVpJQ65Lbte0qpeqXUfuPrWrd931RKVSiljimlrvJW4OL82LplApOvLMqMozBjdAHyuKgwugeGcTi0H6MSs8V0+twfA66eYPsDWusVxtcrAEqpxcCtwBLjMb9WSpk9FayYuaZOmcDkL3GRFrSGrgHpdxfeN2Vy11q/BbRO8/luBP6ktR7QWlcDFcCFM4hPeJiz5S7DIP0hTkoQCB+ayWiZLyqlDhjdNonGtmyg1u2YOmPbOEqpu5RSJUqpEpvNNoMwxHQNDNtp7x2SlrufxEUayV363YUPnG9yfwgoAFYAjcBPz/UJtNaPaK3XaK3XpKamnmcY4lw0dw8Csryev8RFOccvSAkC4Qvnldy11qe11nattQP4LaNdL/VArtuhOcY2EQCaOqX0gD+NVIaUlrvwgfNK7kqpTLe7HwFcI2m2AbcqpSKUUnOBBcB7MwtReMrowtjS5+4PI90y0ucufGDKce5KqaeBjUCKUqoO+C6wUSm1AtDACeDzAFrrw0qpZ4AjwDBwr9baPtHzCt+ThbH9a+SCqsxSFT4wZXLXWt82webfn+X4HwI/nElQwjtsXQMoBcmx4f4OZVayRlhQSlruwjektsws0tQ1QFJ0OGFm+bX7g8mkiI2QypDCN+SvfBaxydqpfhcXGSajZYRPSHKfRWR5Pf+Li5L6MsI3JLnPIjajaJjwn7hIi/S5C5+Q5D5LuBbGlmGQ/uVsuUu3jPA+Kfkbwp7bW8d3XzyEQ4NGM2TXMjvVz5x97p3+DkPMApLcQ9iL++uxRoZxw4osAMLMig8vz5ziUcKb4qJktIzwDUnuIWpw2EHJiTZuWZvLt65d5O9whCEucrSmu8kkC6YI75E+9xB1oK6dviE76+Yl+zsU4SYuKsxZ01363YWXSXIPUe9WtqAUrJuX5O9QhBvX2rXSNSO8TZJ7iCqubGFRRhwJ0VJqIJC46st0yHBI4WWS3ENQ/5CdvSfb2FAgXTKBRhbsEL4iyT0EfXCyncFhB+sluQccWbBD+Iok9xBUXNmMScHaudLfHmhkwQ7hK5LcQ1BxVQtLs+NHugBE4JBFsoWvSHIPMX2DdvbXtrO+IMXfoYgJxIYbNd1lKKTwMknuIaakppUhu5b+9gBlMimsEVI8THifJPcQ825lCxaTYk1eor9DEZOQsr/CFyS5h5jiyhaW5yYQEyGVJQKVLNghfEGSewjp6BviYH2HjG8PcFI8TPiCJPcQUlzZgt2huWRBqr9DEWfhbLlLchfeJck9hOwqtxETbmblnAR/hyLOIi4qTAqHCa+T5B5CdpU3s74ghTCz/FoDmbTchS9IFggRNS09nGzt5dKFMr490MVFWegaGMbu0P4ORYQwSe4h4q3yZgDpbw8CrpnD3dI1I7xIknuI2HXcRk5iFPnJ0f4ORUwhTurLCB+Q5B4ChuwOiitbuGRBKkrJ0m2BzrVgh9R0F94kyT0ElNa20zUwzKULpL89GEjLXfiCJPcQsKvcWeJ3gxQLCwojC3bILFXhRZLcQ8CuchvLcxOIj5YSv8FgZMEOabkLL5LkHuQ6+obYX9vOJfOl1R4s4qWmu/ABqS4VxKqbe7j/1aM4NFyyUIZABouYcAsmJcldeJck9yDU1NnPA28c55mSOsLNJr68ZYGU+A0iJpMiLioMW/eAv0MRIUySexD6yjP7eb+6jU+ty+OeTQWkWSP9HZI4R6vnJPJ2RTNaaxm+KrxC+tyD0KH6Tj6xJofv3bBEEnuQ2lSURm1rH5W2bn+HIkKUJPcg09YzSEffEHNTYvwdipiBTUVpAOwoa/JzJCJUTZnclVKPKqWalFKH3LYlKaVeV0qVG98Tje1KKfVzpVSFUuqAUmqVN4OfjaqaewCYlyrJPZhlJ0RRlGFl+1FJ7sI7ptNyfwy4+oxt9wHbtdYLgO3GfYBrgAXG113AQ54JU7hUG8l9bkqsnyMRM7W5KI2SmjYpQyC8YsrkrrV+C2g9Y/ONwOPG7ceBm9y2P6GddgMJSqlMTwUr4ERzD2aTIicxyt+hiBnaXJSG3aHZVW7zdygiBJ1vn3u61rrRuH0KSDduZwO1bsfVGdvGUUrdpZQqUUqV2Gzy5p6u6uYe5iRFy4IcIWDlnEQSosPYIV0zwgtmnCG01ho451UHtNaPaK3XaK3XpKbKBJzpqmrukYupIcJsUmxcmMqbx22ycIfwuPNN7qdd3S3Gd1fTox7IdTsux9gmPEBrzYnmHvKTJbmHik1FabT2DFJa1+7vUESIOd/kvg3YatzeCrzotv0OY9TMOqDDrftGzNDpzgH6huzMlZEyIeOyhamYFNI1IzxuOkMhnwaKgUKlVJ1S6jPA/cAVSqly4HLjPsArQBVQAfwWuMcrUc9SVc3OCS/zpFsmZCREh7M6L1HGuwuPm7L8gNb6tkl2bZngWA3cO9OgxMRONPcCkC/JPaRcuiCVn75+nM7+oZFa70LMlAy5CCLVzd1EWExkxknJgVCyKDMOgPLTXX6ORIQSSe5BpNoYKWMySaGpUFKYYQXg2CmpMyM8R5J7EKmWkTIhKTshiphwM8dOdfo7FBFCJLkHiWG7g5OtvTJSJgSZTIqFGVaOSbeM8CBJ7kGivr2PIbtmrrTcQ1JhupVjp7pwjkkQYuYkuQeJkYJh0nIPSYUZVtp6h2R1JuExktyDxGg1SEnuoagw3XVRVbpmhGdIcg8S1c09WCMsJMeE+zsU4QWjI2YkuQvPkOQeJKqbe5ibGiPrbYao5NgIUmLDJbkLj5HkHiSqpRpkyCvMsHJcRswID5HkHgT6h+zUt/fJGPcQtzDdyvHT3Tik/K/wAEnuQeBkay9ay8XUUFeUYaVvyE5tW6+/QxEhQJJ7EDhY1wHA4qw4P0civGmhMWKmTPrdhQdIcg8C+2vbiY2wUJAqi2KHMldyPy7JXXiAJPcgUFrXztLseMxSMCykxURYyE2KokwuqgoPkOQe4PqH7Bxt7GTFnAR/hyJ8oDA9TlruwiMkuQe4I42dDNk1y3Mkuc8GhRmxVDX3MDBs93coIshJcg9wpbXOhZNX5Epynw0KM+KwOzRVth5/hyKCnCT3AFda205GXCQZ8bL60mwgNWaEp0hyD3D7a9tZnhvv7zCEj8xLjSHcbOJooyzcIWZGknsAa+8d5ERLLytyE/0divCRMLOJhRmxHG6Q5C5mRpJ7ACs1Ji9Jy312WZIZz+GGDlm4Q8yIJPcAtv9kO0rB0mxJ7rPJkuw42nqHaOzo93coIohJcg9gpXXtLEiLxRoZ5u9QhA8tMcpMSNeMmAlJ7gFKa01pbbuMb5+FijLiUAoON3T4OxQRxCS5B6i6tj5aegZlZuosFBNhYW5KjLTcxYxIcg9Q+43JS9Jyn52WZMVzRJK7mAFJ7gHoRHMPf9hdQ4TFNLK2pphdlmTFUd/eR1vPoL9DEUHK4u8AxKhTHf38fEc5z7xfi8Ws+MbVRYSZ5f/vbOS6qHqksZOL5qf4ORoRjCS5B4iu/iGu+dlbdA8M88kPzeHeTfNJi5OSA7PVkizn8NcjDZLcxfmR5B4gXjt8mrbeIZ7+3DrWFyT7OxzhZ0kx4WTGR8qIGXHe5DN/gNhW2kBOYhTr5iX5OxQRIJZkxcmIGXHeJLkHgJbuAd6paOaG5VkoJastCafFWfFU2rrpG5Ta7uLcSXIPAK8cbMTu0NywIsvfoYgAsiQrDoeGslPSehfnTpJ7ANhW2sDC9FiKMuL8HYoIIFKGQMzEjJK7UuqEUuqgUmq/UqrE2JaklHpdKVVufJd6tWdR397H+yfauGG5tNrFWNkJUcRHhUlyF+fFEy33TVrrFVrrNcb9+4DtWusFwHbjvpjEy6UNAFwvyV2cQSnF4sw4DtXLiBlx7rzRLXMj8Lhx+3HgJi+8RsjYVtrA8twE8pJj/B2KCEAXzk3iUEMHrTJTVZyjmSZ3DfxDKbVXKXWXsS1da91o3D4FpM/wNUJWRVM3hxs6pUtGTGrLojS0hjePNfk7FBFkZprcL9ZarwKuAe5VSl3qvlM7l5KZcDkZpdRdSqkSpVSJzWabYRjBR2vNg28cx2xSfHhZpr/DEQHqgqx4UmIj2FEmyV2cmxkld611vfG9CXgBuBA4rZTKBDC+T/iu1Fo/orVeo7Vek5qaOpMwgtIfdtfw8oFGvnrFQtKlzICYhMmk2FSYylvHbQzbHf4ORwSR807uSqkYpZTVdRu4EjgEbAO2GodtBV6caZChprS2ne+/fJRNhancfVmBv8MRAW7LojQ6+4fZW9Pm71BEEJlJbZl04AVjRqUF+KPW+u9KqfeBZ5RSnwFqgJtnHmboaO8d5J6n9pFqjeCBW1ZgMsmMVHF2Fy9IJcys2FHWxIfmSd0hMT3nndy11lXA8gm2twBbZhLUOcYRVFP2v/XCQZq6+nnuCxtIiA73dzgiCMRGWLhwbhI7ypr45rWLANc1m3LyU6L5yMocP0coAlFQz1B9/chp1vzgDU53Bscq8T0Dw/zj8Gnu3JDP8lxZYUlM3+aidMqbuqlt7QXgyd01/Gx7OT94+ShD59AX39E3xM0PF8sqT7NAUCf3VGsELT2D7AuSvsgPTrYz7NBSn1ucs81FaQDsPNbE/tp2vv/yEfKSo2npGTynkTRvlzfzXnUrL+6v91ao4ix2Hmti1fdfZ+uj7/HIW5Ucqu/A4ZhwQOGMBXVyX5wZR4TFNOGFpmG7g5buAT9ENbn3TrRiUrA6TyoyiHMzNyWGuSkxvLi/gXuf2keaNZLn795AqjWCZ0tqp/08xao5pkkAABVCSURBVFXNxvcWb4UqzuLRt6vRWlPf3sf/faWMD//ibf7j5SNeea2gTu7hFhPLcuLZe3J8cn/4rSou+fFOmgKoy+b96lYWZ8VhjQzzdygiCG0uSmNvTRu2rgF+/clVpMRG8LFVOew8ZqOpa3rv8+JKZ1I/VN9BR9+QN8OdtbTWHKzrwDnNZ1R9ex9vVzRzx/p83vjqZez51hYeuGU5N63M9kocQZ3cAVblJXK4vpP+obE1r984epreQTu/f7t63GMa2vt8vsLN4LCDD2rbWJsvi3GI83P1BRkAfOfDi0au2XxiTQ52h+aFfVN3s5zu7KfS1sOWojQcGt6rbvVqvLPVP4/buP6Xb/PH906O2f783jq0ho+vdl4AT4+L5CMrc1jhpetvwZ/c5yQyaHeMSdYdvUOU1rYTbjHxh901tPeO1uXoH7Jz22938/GHikcuTnnaByfbRlpILocaOugfcnChJHdxntbmJ7H7m1v41Pr8kW0FqbGsyUvkmZLacS3FM+02umLu2VRAhMU07j0qPOOvHzj/0T7wejk9A8MAOByaZ/fWsqEgmdykaJ/EERLJHRjT7/5uZTMODd+9fjE9g3Yee/fEyL4H3yinpqUXjeZbLxyc8g/iXGmt+eozpdz91N4xnyZcraQ1ktzFDGTEj5/NfPOaXCptPew72X7WxxZXthAXaWFFbiKr8xKl390L+gbt/OPIaVbkJtDcPcBvd1UBsLu6hdrWPm5ek+uzWII+uadaI5iTFM2+mtE39lvlzVgjLNyyJpfLF6Xz3++coHtgmMMNHfx2VxU3r8nhm9csYld5M3/18KiBQ/WdVDf30N47NGZEwvvVrcxLiSHVGuHR1xPi2mWZRIebp7ywWlzVwoVzkzGbFBsKkjna2CnVJj1se5mzO/jfryrk2qUZPPJWFbauAZ4tqcMaaRnpWvOFoE/u4Bx9svdkG1prtNa8ddzG+oJkLGYT924qoKNviCeLa/jmXw6SGB3Ot65dxO3r8lg5J4Hvv3zUo2/wbaX1hJkV81JiePzdGrTWOByakhrpbxfeERth4bqlmfxlXz1XPvBPrnzgn1z94Fu8dvjUyDH17X3UtPSyocA5w3W98X3PLGm9/+1AI99+4aDXX2fb/gbSrBF8aF4yX7+qiMFhBz/42xFeOdjIDcuziAwzez0Gl5BI7qvmJGDrGqCurY8TLb3Ut/dxyUJnMbKVcxK5aH4y//mPYxyo6+B7NywmITocs0lx/0eX0dU/xA88NBTJ4dC8fKCRyxam8tlL5nGksZOSmjaON3XR0TfEhXMluQvv+MLGAq5ckk5BaiwFqbEMDDv4+rOlI6NoXP3rrqS+LCeB6HDzrOma+XNJLU/tOUlFU/c5Pe5zT5Tw6ASDMibS0TfEm8dsXLcsE7NJMTclhk9+aA4v7m9gYNjh0y4ZCJXkbowb33eyjV3lzvLBly4YnSh078b52B2aLUVpXLd0tLxuYYaVL1xWwF8+qGffBMMpz9X7J1pp7Ojn+uVZ3LQyi7hIC4+9e4L3jf52Se7CWwpSY/nl/1jFQ7ev5qHbV/O7rWvoH3bwf15yNlyKK1tIjA6jMN0KQJjZxNr8pHEXVRva+6hu7hn5sntpgo0vOYcmOrtttxkrn01HY0cfrx85zS93VowbjTeR1w6fYtDuGLM+w5e2LCA2wsLC9FiW5cSfe/AzMJPCYQGjMN1KdLiZvTVtNLT3MycpeszKRusLknn0zjWsnpM0rg7NFy4r4Le7qvjLvrqRi7Pna1tpA1FhZq5YnE50uIVb1uby6DsnsHUNkBEXSU5i1IyeX4jpKkiN5Uub5vPT14/z0ZWn2V3Vwrp5yWMK1a0vSOb+V8to6uonLjKM7754mD+f0W+/Nj+Rxz99IdHhwZsq6tv7aOsdwmxSvFTawFcuXzCtelSuf3ytPYO8VNrAJ85oede09JAeFznS1fJSaQNzkqLHDG1MiY3gsX9ZS2ykxec1sEKi5W4xm1iRm8B71a3srmrhkgVjp/crpdhclE589PjJQzERFrYsSueVg6fG1ejoH7Kzo+w0tq6pZ7oO2R28crCRy43EDvCpdfk4tOa96lbWzh3/j0UIb/r8ZQUUplv52rOl1Lf3jXTJuKw3Kkz+ZV89Nz9czJ9LavnsxXN58JYVPHjLCr5xdRF7a9q464m902q5BqqDdc5h0reszaW6uYeD01yTtriyhYToMBakxfJ48YkxI+v2nWxj03++ycafvMkf95zkVEc/71Q0c/3yzHF/52vykyjKiPPYzzNdwfvv+Ayr5iTyy50VAFyy4NwW/7hheRZ/O9DIOxXNbCxMG9n+s+3lPPRmJeD8dLBhfvKYhTUy4iK5blkmYWYTb1c009Y7NOYj2ZzkaDYXprG9rIkL86XkgPCtcIuJ+z+2lI8+9C7AyMVUlyVZcVgjLdz/ahnWCAu/vWMNVyweuypmqjWCrz1byr1P7eOh21cTbgm+9uDB+g7CzIp/u3wBz5bUsm1/A8typp44VFzVwrq5yVy0IIXv/PUQ+062szovkcFhB/c9f4A0ayRZCZF864WDxEZYcGi4Ybl3Zpuej5BJ7q56LWaTGtdCmcrGwlSskRa2lTaMJHfXCJvLFqbyoXlJvFvRwh/3nGRgeGzr/oE3jvPVKxby5jEbcZEWLl049lPDFzYWUFLTxmUL0xDC11bOSeSuS+fxZpmNgtTYMfssZhMfXpbFofoOfn7bSuamjF+k/eOrc+gbsvOdvx7i3/78Af918wqfjvjwhIP1HSxMt5JmjeSyham8fKCRb1276KxrKdS29lLX1sfnLpnHR1dm8+NXy3ii+ASr8xJ5+J+VHD/dze+3rmFzURo7ypr46T+OY420UJhh9d0PNoWQSe4r5zj/Ey/PiSc+6txqt0RYzFy9JINXD52if8hOZJiZJ951jo3/xtVFLM6K456N8xm2Oxiyj340e7eymf/8x3G+/Kf9ANyyJpcIy9g3/tr8JEq/e+UMfzohzt99Vxdx39VFE3YL/uijS6d8/KfW5TEwZOcHfztKXVsxD92+muyE4Lh+pLXmYH0H1xjjy69fnsUbR5t470Qr686y8Imrv31DQTIxERY+viaHP+yu4bYL5/CLHRVctyyTLYucn3K2LEofuR1Igu8z1iQSosO5Y30e/3LR3PN6/A0rsugeGGZnWRO9g8M8+k41m4vSWJw12ldmMZuICjePfG1ZlM7fvnQxv7htJRfPT+HOi/I99NMI4TlKqRlf7/nsJfN4+FOrqbL1cP0v3uadimYPRXdu6tp6ueepvXwwzdFtdW19tPcOcUG2c6TKFYvTiQozTzlqpriqhZTYCOanOT/t3LE+nyG7Zuuj7xEZZuK71y+e2Q/iAyGT3AH+48YLuN6tz/tcrJ+XTEpsONtKG3j6vVraeoe4d9P8KR9nMimuX57FHz77IRZl+v6iiRC+ctWSDF784kUkx4Tzqd/v4XvbDk9rsIEn/ejVMl45eIpbHt7NU3tqpiwf4rp4uizb+ck+OtzC5YvTefVg46SLnGitebeymXXzRgdBzE2JYWNhKgPDDv7XdYtJswb+ovYh0y0zUxazieuWZvL0+7XsrWlj3bwkqbsuxBkKUmP5670X8cNXjvLk7hr+/H4tn744n8sWprGnqoV3KpspO9XFh5dl8qXNC8YMQDjTwLCdcLNp2p8q9te287cDjdy5IZ/q5h6+/cIh9p9s5/s3XTDpdYADdc6LqQszRq833LA8i5dKG9h+tGnCcgDVzT2c7hwYd+3uW9cu4sK5SXxiTXAsaxhSLfeZumFFNoPDDpq6BqbVahdiNoqJsPB/P7KUN756GZcvTudXOyu5+eFifvr6cTr7hrmoIIU/vVfLpT/eyY9eOUrbBOU9jp3qYsOPdnDNz3bx+pHTY1rgDoemrq13zApFWmt+9MpRUmLD+dpVhTx651r+dfN8nt1bx8d/8+6kFV4P1XdQmGEdcy1sY2Eqc1Ni+Ok/jjE8QevdNWt3Q8HYwREL063cs3F+0Axplpa7m1VzEshLjiYhKoyLZSk8Ic5qbkoMv7htJfduKqCmpZe1+UkkxTgXfT/Z0suD24/zyK4q/rq/nl9/chWr85wztKube7j993swmxQDww4+90QJy3MTuH5ZJvuMctltvUNcsiCFn9+6ksSYcHaUNbGnupXv33QBsRHOtPXVKwtZlpPAV57Zz/W/fJuf37qSSxeODoN2XUy91m1WOjhn5/77VYXc/dQ+nt9Xxy1r54zZ/25lCxlxkeQn+6Y0r7dIy92NUoo/fm4dv79zbdD8dxbC34oy4rhqScZIYgfnHI//unkFL33xYiLDzNz6yG6eKD5BXVsvn/ztbuwOzVOf/RCvf+VS/t/HlmLr7OcHfzvKByfb2VyUzr9uns+eqlY+/Iu32V/bzv2vljEvJYZb146dJXr54nRe+uLFpFsj2frf7/GrnRUjnwJqW/vo6Btiafb4af9XX5DByjkJ/Nfrx+kdHB7ZrrVmT1UL6wuSgz4HSMv9DMEyxEuIYHBBdjzb7r2Yrzyzn//94mF+/PdjmBQ8fdc6Fhh1bm5ZO4ebVmbT0j1IZnzkSFLdsiidu/+wl4/8+h20ht/cvoow8/j2aH5KDC/cu4Fv/uUgP3ntGH2Ddr52VSEH6p31ZCaq6aKU4lvXLuITvynm0ber+eLmBYBzXYjm7sGR2bvBTJK7EMKr4qPD+N0da/jFjgqeKanlF/9jJUuyxibcCIuZrDMaVstzE3jpSxfz9ecOYFLO0TqTiQ638OAtK4gON/PLnRVEhZvp7B8i3GxiYfrEE4vW5idxxeJ0fvPPKi5bmMaTu0/w3N464iItXFZ4brPcA5Hy9EpE52PNmjW6pKTE32EIIYKc3aH5n8/s56/7G4iPCiMvOZptX7x40uMrmrq56sG3sDs04WYTt6/L455NBaTEBseiOkqpvVrrNRPtk5a7ECJkmE2K//zEcvqG7Lx2+PTI5KXJzE+L5ZvXFHGipYe7N84PqW5ZSe5CiJBiMZv4+W0refCN8jHrN0zms5fM80FUvifJXQgRciIsZr5xdZG/w/ArGQophBAhSJK7EEKEIEnuQggRgiS5CyFECJLkLoQQIUiSuxBChCBJ7kIIEYIkuQshRAgKiNoySikbUHMeD00B/LOY49kFalwQuLEFalwQuLEFalwQuLGFWlx5WusJq5wFRHI/X0qpksmK5vhToMYFgRtboMYFgRtboMYFgRvbbIpLumWEECIESXIXQogQFOzJ/RF/BzCJQI0LAje2QI0LAje2QI0LAje2WRNXUPe5CyGEmFiwt9yFEEJMQJK7EEKEoIBP7kqpTyilDiulHEqpSYcKKaWuVkodU0pVKKXuc9s+Vym1x9j+Z6VUuIfiSlJKva6UKje+J05wzCal1H63r36l1E3GvseUUtVu+1Z4Iq7pxmYcZ3d7/W1u2/15zlYopYqN3/kBpdQtbvs8es4me8+47Y8wfv4K43zku+37prH9mFLqqpnEcZ6xfVUpdcQ4R9uVUnlu+yb8vfoorjuVUja31/+s276txu++XCm11ZNxTTO2B9ziOq6Uanfb581z9qhSqkkpdWiS/Uop9XMj7gNKqVVu+87/nGmtA/oLWAQUAm8CayY5xgxUAvOAcKAUWGzsewa41bj9G+BuD8X1Y+A+4/Z9wP+b4vgkoBWINu4/BnzcS+dsWrEB3ZNs99s5AxYCC4zbWUAjkODpc3a294zbMfcAvzFu3wr82bi92Dg+AphrPI/Zg7+/6cS2ye29dLcrtrP9Xn0U153ALyd4bBJQZXxPNG4n+jK2M47/EvCot8+Z8dyXAquAQ5PsvxZ4FVDAOmCPJ85ZwLfctdZHtdbHpjjsQqBCa12ltR4E/gTcqJRSwGbgOeO4x4GbPBTajcbzTfd5Pw68qrXu9dDrn825xjbC3+dMa31ca11u3G4AmoAJZ+DN0ITvmbPE+xywxTg/NwJ/0loPaK2rgQrj+XwWm9Z6p9t7aTeQ48HXP++4zuIq4HWtdavWug14Hbjaj7HdBjztwdeflNb6LZwNu8ncCDyhnXYDCUqpTGZ4zgI+uU9TNlDrdr/O2JYMtGuth8/Y7gnpWutG4/YpIH2K429l/Jvph8bHsAeUUhEeiutcYotUSpUopXa7uosIoHOmlLoQZyus0m2zp87ZZO+ZCY8xzkcHzvMzncfOxLk+/2dwtvxcJvq9+jKujxm/o+eUUrnn+Fhvx4bRhTUX2OG22VvnbDomi31G5ywgFshWSr0BZEyw69ta6xd9HY/L2eJyv6O11kqpSceUGv+FlwKvuW3+Js4EF45zjOs3gP/wcWx5Wut6pdQ8YIdS6iDOBHbePHzOngS2aq0dxuYZnbNQpJS6HVgDXOa2edzvVWtdOfEzeNxLwNNa6wGl1OdxfvLZ7KPXnq5bgee01na3bf48Z14REMlda335DJ+iHsh1u59jbGvB+RHHYrS8XNtnHJdS6rRSKlNr3WgkoqazPNXNwAta6yG353a1YAeUUv8NfG26cXkqNq11vfG9Sin1JrASeB4/nzOlVBzwN5z/3He7PfeMztkZJnvPTHRMnVLKAsTjfE9N57EzMa3nV0pdjvOf5mVa6wHX9kl+r55IVFPGpbVucbv7O5zXWVyP3XjGY9/0QEzTjs3NrcC97hu8eM6mY7LYZ3TOQqVb5n1ggXKO8gjH+cvbpp1XJXbi7O8G2Ap46pPANuP5pvO84/r3jOTm6uO+CZjwSrq3YlNKJbq6NZRSKcBFwBF/nzPj9/cCzj7I587Y58lzNuF75izxfhzYYZyfbcCtyjmaZi6wAHhvBrGcc2xKqZXAw8ANWusmt+0T/l59GFem290bgKPG7deAK434EoErGftJ1uuxGfEV4bw4Wey2zZvnbDq2AXcYo2bWAR1GQ2Zm58xbV4g99QV8BGdf0wBwGnjN2J4FvOJ23LXAcZz/bb/ttn0ezj+8CuBZIMJDcSUD24Fy4A0gydi+Bvid23H5OP8Dm854/A7gIM4E9Qcg1oPnbMrYgA3G65ca3z8TCOcMuB0YAva7fa3wxjmb6D2Ds5vnBuN2pPHzVxjnY57bY79tPO4YcI0X3vdTxfaG8ffgOkfbpvq9+iiuHwGHjdffCRS5PfbTxrmsAP7F1+fMuP894P4zHuftc/Y0zlFfQzhz2WeALwBfMPYr4FdG3AdxGxU4k3Mm5QeEECIEhUq3jBBCCDeS3IUQIgRJchdCiBAkyV0IIUKQJHchhAhBktyFECIESXIXQogQ9P8BfwaVY6TeJg8AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(time, hist)" ] diff --git a/notebooks/notebooks_plotting/PerformanceReactionTime.ipynb b/notebooks/notebooks_plotting/PerformanceReactionTime.ipynb index d7a52aa9..31523924 100644 --- a/notebooks/notebooks_plotting/PerformanceReactionTime.ipynb +++ b/notebooks/notebooks_plotting/PerformanceReactionTime.ipynb @@ -2,43 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior\n", "from ibl_pipeline import behavior as behavior_ingest\n", @@ -61,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -81,786 +47,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "marker": { - "color": "black", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "performance easy", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-01", - "2019-10-02", - "2019-10-03", - "2019-10-08", - "2019-10-10", - "2019-10-11", - "2019-10-14", - "2019-10-15", - "2019-10-17", - "2019-10-18", - "2019-10-21", - "2019-10-22", - "2019-10-24", - "2019-10-25", - "2019-10-29", - "2019-10-31", - "2019-11-01", - "2019-11-04", - "2019-11-05", - "2019-11-07", - "2019-11-08", - "2019-11-12", - "2019-11-13", - "2019-11-14", - "2019-11-15", - "2019-11-19", - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-06", - "2019-12-07", - "2019-12-08", - "2019-12-10", - "2019-12-11" - ], - "y": [ - 0.448276, - 0.56213, - 0.728353, - 0.887097, - 0.923077, - 0.946237, - 0.961905, - 0.977778, - 0.981818, - 1, - 1, - 0.991525, - 0.956897, - 0.984375, - 0.992647, - 0.986207, - 1, - 0.989583, - 0.893805, - 0.977273, - 0.985714, - 0.958904, - 0.987342, - 0.989247, - 0.990991, - 0.988235, - 0.975207, - 0.944444, - 0.907692, - 1, - 0.966667, - 0.916667, - 0.962687, - 0.982558, - 1, - 0.992908, - 0.951807, - 0.977528, - 1, - 0.964286 - ], - "yaxis": "y" - }, - { - "marker": { - "color": "red", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "reaction time", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-01", - "2019-10-02", - "2019-10-03", - "2019-10-08", - "2019-10-10", - "2019-10-11", - "2019-10-14", - "2019-10-15", - "2019-10-17", - "2019-10-18", - "2019-10-21", - "2019-10-22", - "2019-10-24", - "2019-10-25", - "2019-10-29", - "2019-10-31", - "2019-11-01", - "2019-11-04", - "2019-11-05", - "2019-11-07", - "2019-11-08", - "2019-11-12", - "2019-11-13", - "2019-11-14", - "2019-11-15", - "2019-11-19", - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-12-02", - "2019-12-03", - "2019-12-04", - "2019-12-06", - "2019-12-07", - "2019-12-08", - "2019-12-10", - "2019-12-11" - ], - "y": [ - 20.3008, - 4.4942, - 3.08166, - 0.60273, - 0.482464, - 0.442652, - 0.409251, - 0.332807, - 0.468705, - 0.381929, - 0.333322, - 0.297746, - 0.299108, - 0.309121, - 0.317263, - 0.325579, - 0.297803, - 0.337364, - 0.384279, - 0.388938, - 0.333047, - 0.711099, - 0.4851, - 0.350946, - 0.323116, - 0.349884, - 0.380604, - 0.396207, - 2.7206, - 0.697309, - 2.17031, - 0.739069, - 0.459172, - 0.34953, - 0.467424, - 0.772379, - 0.340566, - 1.98266e-07, - 0.502712, - 4.54026 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-09-23", - "2019-09-23" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-30", - "2019-09-30" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-07", - "2019-10-07" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-14", - "2019-10-14" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-21", - "2019-10-21" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-28", - "2019-10-28" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "good_enough_dates", - "line": { - "color": "rgba(5, 142, 255, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-06", - "2019-12-06" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "good_enough_dates", - "line": { - "color": "rgba(5, 142, 255, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-07", - "2019-12-07" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "good_enough_dates", - "line": { - "color": "rgba(5, 142, 255, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-08", - "2019-12-08" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "good_enough_dates", - "line": { - "color": "rgba(5, 142, 255, 0.2)", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-10", - "2019-12-10" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-10-11", - "2019-10-11" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-10-14", - "2019-10-14" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(28, 20, 255, 1)" - }, - "mode": "lines", - "name": "first day got ready4ephysrig", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-11-19", - "2019-11-19" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(117, 117, 117, 1)" - }, - "mode": "lines", - "name": "first day got ready4delay", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-11-26", - "2019-11-26" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "first ephys session date", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-12-06", - "2019-12-06" - ], - "xaxis": "x", - "y": [ - 0, - 1.1 - ], - "yaxis": "y" - } - ], - "layout": { - "height": 400, - "legend": { - "orientation": "v", - "x": 1.2, - "y": 0.8 - }, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Performance and median reaction time", - "x": 0.14, - "y": 0.85 - }, - "width": 700, - "xaxis": { - "showgrid": false, - "title": { - "text": "Date" - } - }, - "yaxis": { - "range": [ - 0, - 1.1 - ], - "title": { - "text": "Performance on easy trials" - } - }, - "yaxis2": { - "color": "red", - "dtick": [ - -1, - 0, - 1 - ], - "overlaying": "y", - "range": [ - -1, - 1 - ], - "side": "right", - "title": { - "text": "Median reaction time (s)" - }, - "type": "log" - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "perf_rt = subj.fetch1('KEY').copy()\n", "session_info = \\\n", @@ -962,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/SessionPsychCurve.ipynb b/notebooks/notebooks_plotting/SessionPsychCurve.ipynb index 9d780864..e39fee3f 100644 --- a/notebooks/notebooks_plotting/SessionPsychCurve.ipynb +++ b/notebooks/notebooks_plotting/SessionPsychCurve.ipynb @@ -2,42 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior\n", "from ibl_pipeline import behavior as behavior_ingest\n", @@ -58,32 +25,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Regular plotting\n", "key = {'lab_name': 'cortexlab',\n", @@ -103,1607 +47,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "error_y": { - "array": [ - 0, - 0, - -0.1778940342094043, - -0.21530644746333616, - -0.1335374220659341, - -0.09703730453338144, - -0.0640491726391581, - 0, - 0 - ], - "arrayminus": [ - 0, - 0, - -0.1778940342094043, - -0.21530644746333616, - -0.1335374220659341, - -0.09703730453338144, - -0.0640491726391581, - 0, - 0 - ], - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.8, - 0.75, - 0.7272727272727273, - 0.8125, - 0.9333333333333333, - 1, - 1 - ] - }, - { - "error_y": { - "array": [ - 0, - 0, - -0.09951366169139837, - -0.12430723540121913, - -0.17021469222588115, - -0.13353742206593414, - -0.13749788300116805, - 0, - 0 - ], - "arrayminus": [ - 0, - 0, - -0.09951366169139836, - -0.12430723540121913, - -0.17021469222588115, - -0.1335374220659341, - -0.13749788300116805, - 0, - 0 - ], - "color": "rgba(0.133, 0.133, 0.133, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.15384615384615385, - 0.25, - 0.625, - 0.2727272727272727, - 0.46153846153846156, - 1, - 1 - ] - }, - { - "error_y": { - "array": [ - 0, - -0.02810969941390554, - -0.061110170222741345, - -0.05144874715647643, - -0.09005039047961111, - -0.10230919901805555, - -0.1778940342094043, - -0.09434255844157613, - 0 - ], - "arrayminus": [ - 0, - -0.028109699413905544, - -0.061110170222741345, - -0.05144874715647643, - -0.09005039047961111, - -0.10230919901805552, - -0.1778940342094043, - -0.09434255844157613, - 0 - ], - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "showlegend": false, - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.04081632653061224, - 0.1794871794871795, - 0.13636363636363635, - 0.35714285714285715, - 0.23529411764705882, - 0.8, - 0.9, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)" - }, - "name": "p_left = 0.2 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.17503e-10, - 2.1750305540280344e-10, - 2.1750305540280344e-10, - 2.1750322161121377e-10, - 2.17503498625231e-10, - 2.175042742644792e-10, - 2.1750621336259975e-10, - 2.175109226008925e-10, - 2.1752216936999163e-10, - 2.1754892892405506e-10, - 2.176115894947502e-10, - 2.177564124229528e-10, - 2.180866685342824e-10, - 2.1883028496210762e-10, - 2.2048295058884176e-10, - 2.2410801142098534e-10, - 2.3195659416807442e-10, - 2.487292388827073e-10, - 2.8410813949475524e-10, - 3.5776622207634045e-10, - 5.091325537824801e-10, - 8.161559427102826e-10, - 1.430832428829832e-09, - 2.6454927992067985e-09, - 5.014662660858792e-09, - 9.575773746794965e-09, - 1.8242961502615548e-08, - 3.449915518964722e-08, - 6.459403719102752e-08, - 1.1958604081448368e-07, - 2.1876957225640767e-07, - 3.9533786632470657e-07, - 7.055930232175925e-07, - 1.2436873773737786e-06, - 2.16483875231221e-06, - 3.7212942982809804e-06, - 6.317120364791331e-06, - 1.0590265192858506e-05, - 1.753335519580364e-05, - 2.86683787684596e-05, - 4.629473947910489e-05, - 7.38349551256484e-05, - 0.00011630719780379618, - 0.00018095834395851285, - 0.00027809439510897505, - 0.00042214591469183125, - 0.0006330031126426098, - 0.0009376468174294332, - 0.0013720861908919847, - 0.001983590251465019, - 0.0028331671810377236, - 0.003998202998249774, - 0.005575120770993185, - 0.007681866028585271, - 0.010459968179281362, - 0.014075878137231084, - 0.018721247131883702, - 0.024611799775001147, - 0.03198447466080575, - 0.04109256529230323, - 0.05219869712182512, - 0.06556562260568011, - 0.0814449993745941, - 0.1000645246724583, - 0.12161401395242392, - 0.14623121013170617, - 0.17398826729684064, - 0.20487994409447854, - 0.23881454728957505, - 0.27560857229104113, - 0.31498579252797304, - 0.35658126315294497, - 0.39995034848454963, - 0.44458248905663295, - 0.4899190322278104, - 0.5353741013886454, - 0.5803572112109288, - 0.6242961802791633, - 0.6666588656956928, - 0.7069723499380114, - 0.7448384362311206, - 0.7799446293188768, - 0.812070158139591, - 0.8410869947386267, - 0.8669561991576368, - 0.8897202375816408, - 0.9094921544210707, - 0.9264426135794952, - 0.9407858575055231, - 0.9527655735912658, - 0.9626415237513224, - 0.9706776078790373, - 0.9771318206612662, - 0.9822483480266375, - 0.9862518545382729, - 0.9893438510194621, - 0.9917009111102385, - 0.9934744288123452, - 0.9947915738745674, - 0.9957571019207271, - 0.9964557032075113, - 0.9969546187906162, - 0.997306307117557, - 0.9975510003921054, - 0.997719042957675, - 0.997832949786845, - 0.997909160040483, - 0.9979594881055504, - 0.9979922931204371, - 0.9980133989982786, - 0.9980268019290105, - 0.9980352028963138, - 0.998040400366184, - 0.9980435742266319, - 0.9980454872348293, - 0.9980466253310674, - 0.9980472936354258, - 0.9980476809846974, - 0.998047902581931, - 0.9980480277112441, - 0.9980480974520433, - 0.9980481358181653, - 0.998048156650695, - 0.9980481678159653, - 0.9980481737224566, - 0.998048176806518, - 0.9980481783959778, - 0.9980481792045323, - 0.9980481796105096, - 0.9980481798117096, - 0.9980481799101304, - 0.9980481799576505, - 0.9980481799802972, - 0.99804817999095, - 0.9980481799958959, - 0.9980481799981625, - 0.9980481799991877, - 0.9980481799996456, - 0.9980481799998473, - 0.998048179999935, - 0.9980481799999726, - 0.9980481799999886, - 0.9980481799999953, - 0.9980481799999981, - 0.9980481799999993, - 0.9980481799999997, - 0.9980481799999998, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818, - 0.99804818 - ] - }, - { - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1.0)" - }, - "name": "p_left = 0.5 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668, - 0.11668000000000006, - 0.11668000000000016, - 0.1166800000000004, - 0.11668000000000099, - 0.1166800000000024, - 0.11668000000000595, - 0.11668000000001433, - 0.11668000000003428, - 0.11668000000008107, - 0.11668000000018913, - 0.11668000000043573, - 0.11668000000099109, - 0.11668000000222577, - 0.1166800000049352, - 0.11668000001080443, - 0.11668000002335456, - 0.1166800000498447, - 0.11668000010503783, - 0.11668000021855249, - 0.11668000044900707, - 0.11668000091084027, - 0.11668000182443014, - 0.11668000360838438, - 0.11668000704699112, - 0.11668001358955041, - 0.1166800258774932, - 0.1166800486587175, - 0.11668009034962104, - 0.11668016566296471, - 0.11668029996077432, - 0.11668053635252247, - 0.1166809470878728, - 0.11668165155096381, - 0.1166828442223534, - 0.11668483741721211, - 0.11668812551798326, - 0.11669347986959618, - 0.11670208653792412, - 0.11671574273142468, - 0.11673713174102333, - 0.11677020051631833, - 0.11682066803731436, - 0.11689669580912686, - 0.11700975320682636, - 0.11717570889492371, - 0.11741617382011389, - 0.11776010993003659, - 0.11824570051270158, - 0.1189224519440761, - 0.11985346240250636, - 0.12111775148583434, - 0.12281249769245306, - 0.1250549819836944, - 0.12798399031568564, - 0.1317603927203149, - 0.13656659878006386, - 0.14260459688686214, - 0.15009232428416916, - 0.1592581911603968, - 0.17033369611176208, - 0.18354421867317722, - 0.19909824863787137, - 0.21717549760799837, - 0.23791451723839996, - 0.26140059974224494, - 0.2876548378016395, - 0.3166252539469298, - 0.34818086012600796, - 0.3821093711336339, - 0.4181190753320089, - 0.4558450777115338, - 0.494859798453764, - 0.5346872665867579, - 0.574820428417173, - 0.6147404286617565, - 0.6539366476728253, - 0.6919262106254948, - 0.7282717317296159, - 0.7625962130463538, - 0.7945942655587201, - 0.8240391320839016, - 0.8507853335848097, - 0.8747670969084396, - 0.8959930202006112, - 0.914537666079184, - 0.9305309252179947, - 0.9441460578975099, - 0.9555873020792264, - 0.9650778459844319, - 0.9728488193569312, - 0.9791297819581128, - 0.9841410018610193, - 0.9880876388268848, - 0.9911557942858823, - 0.9935102688530595, - 0.9952937852455008, - 0.9966273885529908, - 0.9976117229852243, - 0.9983288979858047, - 0.9988446893392315, - 0.9992108649542211, - 0.9994674735654057, - 0.9996449821963154, - 0.9997661909990191, - 0.9998478897249685, - 0.9999022476461166, - 0.9999379483537224, - 0.9999610933563878, - 0.9999759050278005, - 0.9999852616118264, - 0.9999910960224448, - 0.9999946872512174, - 0.9999968692553117, - 0.9999981779382935, - 0.9999989527206976, - 0.9999994055050808, - 0.9999996667028854, - 0.9999998154381645, - 0.9999998990417392, - 0.9999999454293582, - 0.9999999708359079, - 0.999999984571762, - 0.9999999919022351, - 0.9999999957639012, - 0.9999999977719939, - 0.9999999988027578, - 0.9999999993250348, - 0.9999999995862564, - 0.9999999997152249, - 0.9999999997780776, - 0.9999999998083141, - 0.9999999998226724, - 0.9999999998294029, - 0.9999999998325171, - 0.9999999998339395, - 0.9999999998345808, - 0.9999999998348662, - 0.9999999998349917, - 0.9999999998350461, - 0.9999999998350693, - 0.9999999998350791, - 0.9999999998350831, - 0.9999999998350848, - 0.9999999998350856, - 0.9999999998350858, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086, - 0.999999999835086 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)" - }, - "name": "p_left = 0.8 model fits", - "type": "scatter", - "x": [ - -100, - -99, - -98, - -97, - -96, - -95, - -94, - -93, - -92, - -91, - -90, - -89, - -88, - -87, - -86, - -85, - -84, - -83, - -82, - -81, - -80, - -79, - -78, - -77, - -76, - -75, - -74, - -73, - -72, - -71, - -70, - -69, - -68, - -67, - -66, - -65, - -64, - -63, - -62, - -61, - -60, - -59, - -58, - -57, - -56, - -55, - -54, - -53, - -52, - -51, - -50, - -49, - -48, - -47, - -46, - -45, - -44, - -43, - -42, - -41, - -40, - -39, - -38, - -37, - -36, - -35, - -34, - -33, - -32, - -31, - -30, - -29, - -28, - -27, - -26, - -25, - -24, - -23, - -22, - -21, - -20, - -19, - -18, - -17, - -16, - -15, - -14, - -13, - -12, - -11, - -10, - -9, - -8, - -7, - -6, - -5, - -4, - -3, - -2, - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99 - ], - "y": [ - 0.014622700000000656, - 0.014622700000001205, - 0.014622700000002134, - 0.01462270000000383, - 0.014622700000006839, - 0.014622700000012144, - 0.014622700000021388, - 0.01462270000003758, - 0.014622700000065585, - 0.014622700000113939, - 0.014622700000196864, - 0.014622700000338317, - 0.014622700000578283, - 0.014622700000983278, - 0.014622700001662919, - 0.014622700002797548, - 0.014622700004681287, - 0.014622700007791988, - 0.014622700012900806, - 0.014622700021246134, - 0.014622700034804426, - 0.01462270005671297, - 0.014622700091923211, - 0.014622700148205202, - 0.014622700237683185, - 0.014622700379167521, - 0.014622700601675935, - 0.01462270094971691, - 0.014622701491168937, - 0.014622702328959495, - 0.014622703618267577, - 0.014622705591706659, - 0.014622708595959969, - 0.01462271314474222, - 0.014622719994883729, - 0.014622730254939681, - 0.014622745539244896, - 0.014622768185034348, - 0.014622801556479919, - 0.014622850467685076, - 0.014622921767351641, - 0.014623025141614229, - 0.014623174209173846, - 0.0146233880052104, - 0.014623692978601967, - 0.014624125661809758, - 0.014624736215589223, - 0.014625593102678238, - 0.014626789207019741, - 0.014628449789022373, - 0.014630742753777699, - 0.014633891808624566, - 0.014638193199041721, - 0.014644036836911347, - 0.014651932771099198, - 0.014662544094198876, - 0.01467672752684384, - 0.01469558306606793, - 0.014720514218661288, - 0.014753300453945553, - 0.014796183590193416, - 0.014851969860015378, - 0.014924149365266514, - 0.015017034512435938, - 0.015135918794962294, - 0.015287256939070324, - 0.01547886693503502, - 0.015720153819072567, - 0.016022354239208243, - 0.016398799824327185, - 0.016865196180068945, - 0.01743991296927731, - 0.01814427902141163, - 0.019002874791416356, - 0.0200438128056121, - 0.021298995057067876, - 0.022804334727324405, - 0.024599928210202474, - 0.026730162302253287, - 0.029243740715187344, - 0.032193613871619, - 0.035636796374758854, - 0.039634057690841884, - 0.04424947352523498, - 0.04954982815599064, - 0.05560386162266043, - 0.06248136012128974, - 0.070252093148807, - 0.07898460674118082, - 0.08874488837904779, - 0.09959492556417528, - 0.11159118643178761, - 0.12478305675875838, - 0.13921127304010664, - 0.15490639561911762, - 0.17188736886932354, - 0.19016021687446943, - 0.2097169227241439, - 0.2305345372973478, - 0.2525745591879451, - 0.2757826212735063, - 0.30008851148105475, - 0.3254065457972316, - 0.3516363008362155, - 0.3786637017255449, - 0.40636244916801467, - 0.4345957577953415, - 0.46321836686638185, - 0.49207877448319987, - 0.5210216382619146, - 0.549890279191449, - 0.5785292215387877, - 0.6067867003008462, - 0.6345170689262575, - 0.6615830437761366, - 0.6878577278806207, - 0.7132263646863793, - 0.7375877822942689, - 0.7608554996992283, - 0.7829584782641782, - 0.803841513566159, - 0.8234652743366327, - 0.8418060060059874, - 0.8588549259418639, - 0.8746173455076903, - 0.8891115603190519, - 0.9023675543974525, - 0.9144255662696494, - 0.9253345654872362, - 0.9351506866820165, - 0.9439356653359298, - 0.9517553151925598, - 0.9586780819695756, - 0.9647737020644436, - 0.9701119885957291, - 0.9747617606892082, - 0.9787899256720828, - 0.9822607180099616, - 0.9852350935932416, - 0.9877702734851028, - 0.9899194275649764, - 0.9917314856736489, - 0.9932510618806532, - 0.9945184763063191, - 0.9955698584659693, - 0.9964373162675696, - 0.997149155479054, - 0.9977301355744062, - 0.9982017492561508, - 0.9985825145302792, - 0.998888269882176, - 0.9991324647864394, - 0.9993264394119248, - 0.9994796889035013, - 0.9996001089964093, - 0.9996942209239855, - 0.9997673746033159, - 0.9998239299247015, - 0.9998674166364594, - 0.9999006738194003, - 0.9999259703023119, - 0.9999451076003972, - 0.9999595070832095, - 0.9999702831173805, - 0.9999783039013573, - 0.9999842416317338, - 0.999988613528715, - 0.9999918151146228, - 0.999994146994596, - 0.9999958362410595, - 0.9999970533393062, - 0.9999979255151372, - 0.9999985471398204, - 0.9999989877943574, - 0.9999992984748844, - 0.9999995163339377, - 0.9999996682777373, - 0.9999997736766532, - 0.9999998463935097, - 0.9999998962911307, - 0.9999999303453065, - 0.9999999534609879, - 0.9999999690668877, - 0.9999999795458123, - 0.9999999865440777, - 0.9999999911925463, - 0.9999999942635135, - 0.9999999962813512, - 0.9999999976000422, - 0.9999999984571704, - 0.999999999011278, - 0.9999999993675555, - 0.9999999995953945, - 0.99999999974031, - 0.9999999998319838, - 0.9999999998896635, - 0.9999999999257585, - 0.999999999948224, - 0.9999999999621308, - 0.999999999970693 - ] - }, - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.2, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.8, - 0.75, - 0.7272727272727273, - 0.8125, - 0.9333333333333333, - 1, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.133, 0.133, 0.133, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.5, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0, - 0.15384615384615385, - 0.25, - 0.625, - 0.2727272727272727, - 0.46153846153846156, - 1, - 1 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers", - "name": "p_left = 0.8, data with 68% CI", - "type": "scatter", - "x": [ - -100, - -25, - -5.999999865889549, - -1.9999999552965164, - 0, - 1.9999999552965164, - 5.999999865889549, - 25, - 100 - ], - "y": [ - 0, - 0.04081632653061224, - 0.1794871794871795, - 0.13636363636363635, - 0.35714285714285715, - 0.23529411764705882, - 0.8, - 0.9, - 1 - ] - } - ], - "layout": { - "height": 350, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Psychometric Curve", - "x": 0.25, - "y": 0.85 - }, - "width": 630, - "xaxis": { - "title": { - "text": "Contrast (%)" - } - }, - "yaxis": { - "range": [ - -0.05, - 1.05 - ], - "title": { - "text": "Probability choosing right" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "subj_uuid = (subject.Subject & 'subject_nickname=\"IBL_13\"').fetch1('subject_uuid')\n", "key = {'subject_uuid': subj_uuid,\n", @@ -1806,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/SessionReactionTimeContrast.ipynb b/notebooks/notebooks_plotting/SessionReactionTimeContrast.ipynb index daff5dde..86df5eea 100644 --- a/notebooks/notebooks_plotting/SessionReactionTimeContrast.ipynb +++ b/notebooks/notebooks_plotting/SessionReactionTimeContrast.ipynb @@ -2,34 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior\n", @@ -51,290 +26,9 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.6/dist-packages/datajoint/connection.py:151: UserWarning:\n", - "\n", - "Mysql server has gone away. Reconnecting to the server.\n", - "\n" - ] - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "responsive": true, - "showLink": false - }, - "data": [ - { - "marker": { - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", - "size": 6 - }, - "mode": "markers+lines", - "name": "p_left = 0.2", - "type": "scatter", - "uid": "1d16edef-ec5b-445c-aab0-c11fc0f3d072", - "x": [ - -100, - -25, - -12.5, - -6.25, - 0, - 6.25, - 12.5, - 25, - 100 - ], - "y": [ - 0.23060000000009495, - 0.2359999999998763, - 0.2676000000000158, - 0.33960000000001855, - 0.39765000000005557, - 0.3428000000000111, - 0.31379999999990105, - 0.27539999999999054, - 0.227800000000002 - ] - }, - { - "error_y": { - "array": [ - 0.0030999999999039574, - 0.006900000000143791, - 0.01059999999995398, - 0.038399999999910506, - 0.3212499999999636, - 0.01989999999995007, - 0.013600000000110413, - 0.011100000000055843, - 0.011700000000033128 - ], - "arrayminus": [ - 0.010600000000067666, - 0.0043999999998902695, - 0.011100000000027421, - 0.03849999999999909, - 0.08015000000000327, - 0.04379999999997608, - 0.02819999999974243, - 0.012499999999988631, - 0.009300000000052933 - ], - "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "name": "median with 68% CI", - "type": "scatter", - "uid": "371ac91b-26b3-4df4-b104-587247b124b2", - "x": [ - -100, - -25, - -12.5, - -6.25, - 0, - 6.25, - 12.5, - 25, - 100 - ], - "y": [ - 0.23060000000009495, - 0.2359999999998763, - 0.2676000000000158, - 0.33960000000001855, - 0.39765000000005557, - 0.3428000000000111, - 0.31379999999990105, - 0.27539999999999054, - 0.227800000000002 - ] - }, - { - "marker": { - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", - "size": 6 - }, - "mode": "markers+lines", - "name": "p_left = 0.8", - "type": "scatter", - "uid": "8d6b63ca-56d9-408d-acba-19d51d273cfd", - "x": [ - -100, - -25, - -12.5, - -6.25, - 0, - 6.25, - 12.5, - 25, - 100 - ], - "y": [ - 0.2308500000000464, - 0.2518000000000029, - 0.3400500000000193, - 0.4973500000000115, - 0.4855999999999767, - 0.4112000000001217, - 0.30535000000000423, - 0.2825000000000273, - 0.2587500000000773 - ] - }, - { - "error_y": { - "array": [ - 0.005249999999890065, - 9.999999997489795e-05, - 0.060949999999934334, - 0.43474999999997976, - 0.12350000000003547, - 0.03194999999988113, - 0.008950000000027103, - 0.0029999999999290594, - 0.013799999999836388 - ], - "arrayminus": [ - 0.004950000000022214, - 0.009700000000002262, - 0.04235000000005584, - 0.1044499999999573, - 0.059700000000020736, - 0.01719999999988886, - 0.011149999999958027, - 0.008299999999962893, - 0.012700000000064549 - ], - "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", - "type": "data", - "visible": true - }, - "marker": { - "size": 6 - }, - "mode": "none", - "name": "median with 68% CI", - "type": "scatter", - "uid": "a2c188cc-df0f-4d7b-bc8d-d586af7aedcf", - "x": [ - -100, - -25, - -12.5, - -6.25, - 0, - 6.25, - 12.5, - 25, - 100 - ], - "y": [ - 0.2308500000000464, - 0.2518000000000029, - 0.3400500000000193, - 0.4973500000000115, - 0.4855999999999767, - 0.4112000000001217, - 0.30535000000000423, - 0.2825000000000273, - 0.2587500000000773 - ] - } - ], - "layout": { - "height": 350, - "legend": { - "orientation": "v", - "x": 1.1, - "y": 0.9 - }, - "title": { - "text": "Reaction time - Contrast", - "x": 0.25, - "y": 0.85 - }, - "width": 630, - "xaxis": { - "title": { - "text": "Contrast (%)" - } - }, - "yaxis": { - "range": [ - -0.05, - 1.05 - ], - "title": { - "text": "Probability choosing right" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "subj_uuid = (subject.Subject & 'subject_nickname=\"IBL_13\"').fetch1('subject_uuid')\n", "key = {'subject_uuid': subj_uuid,\n", @@ -410,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/SessionReactionTimeTrialNumber.ipynb b/notebooks/notebooks_plotting/SessionReactionTimeTrialNumber.ipynb index 20508131..929759f8 100644 --- a/notebooks/notebooks_plotting/SessionReactionTimeTrialNumber.ipynb +++ b/notebooks/notebooks_plotting/SessionReactionTimeTrialNumber.ipynb @@ -2,41 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior\n", @@ -57,3297 +25,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "responsive": true, - "showLink": false - }, - "data": [ - { - "marker": { - "color": "lightgray" - }, - "mode": "markers", - "name": "data", - "type": "scatter", - "uid": "757d99ff-77c8-42e2-a9e4-84e8553468f3", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532, - 533, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 545, - 546, - 547, - 548, - 549, - 550, - 551, - 552, - 553, - 554, - 555, - 556, - 557, - 558, - 559, - 560, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 569, - 570, - 571, - 572, - 573, - 574, - 575, - 576, - 577, - 578, - 579, - 580, - 581, - 582, - 583, - 584, - 585, - 586, - 587, - 588, - 589, - 590, - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599, - 600, - 601, - 602, - 603, - 604, - 605, - 606, - 607, - 608, - 609, - 610, - 611, - 612, - 613, - 614, - 615, - 616, - 617, - 618, - 619, - 620, - 621, - 622, - 623, - 624, - 625, - 626, - 627, - 628, - 629, - 630, - 631, - 632, - 633, - 634, - 635, - 636, - 637, - 638, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 650, - 651, - 652, - 653, - 654, - 655, - 656, - 657, - 658, - 659, - 660, - 661, - 662, - 663, - 664, - 665, - 666, - 667, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 687, - 688, - 689, - 690, - 691, - 692, - 693, - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793 - ], - "y": [ - 1.0378999999999996, - 0.5363999999999995, - 0.21280000000000143, - 0.5754000000000001, - 0.2237999999999989, - 0.4792999999999985, - 0.4103999999999992, - 8.281399999999998, - 0.26890000000000214, - 5.083099999999995, - 0.2220000000000013, - 0.23999999999999488, - 0.3763000000000005, - 0.5259999999999962, - 0.1880000000000024, - 1.4342000000000041, - 7.024099999999997, - 0.1927000000000021, - 0.18899999999999295, - 0.227800000000002, - 0.7036999999999978, - 0.3885999999999967, - 0.4239999999999924, - 0.21229999999999905, - 0.4222000000000037, - 0.22299999999999898, - 0.17379999999999995, - 0.5754000000000019, - 0.16900000000001114, - 0.16549999999999443, - 0.18120000000000402, - 0.3032000000000039, - 0.2254000000000076, - 1.6178000000000026, - 0.23980000000000246, - 0.23000000000000398, - 0.38769999999999527, - 0.20179999999999154, - 0.17430000000001655, - 0.1991999999999905, - 0.2289000000000101, - 0.19619999999997617, - 7.0434999999999945, - 0.24660000000000082, - 7.100200000000001, - 0.1595000000000084, - 0.16510000000002378, - 0.18389999999999418, - 0.2004000000000019, - 0.5232999999999777, - 4.7620000000000005, - 0.3585999999999956, - 0.2985999999999933, - 0.1710999999999956, - 0.44470000000001164, - 0.28489999999999327, - 0.377900000000011, - 0.7081999999999766, - 0.23490000000001032, - 0.2715000000000032, - 0.25620000000000687, - 0.23029999999999973, - 0.3977999999999895, - 8.794000000000011, - 0.20109999999999673, - 0.535899999999998, - 0.24139999999999873, - 0.34950000000000614, - 0.26780000000002246, - 0.9699999999999989, - 0.3611999999999682, - 0.19709999999997763, - 0.35240000000004557, - 0.3727999999999838, - 0.1524000000000001, - 0.2850999999999999, - 0.2458000000000311, - 0.7078000000000202, - 0.3365000000000009, - 0.17789999999996553, - 0.2185000000000059, - 1.5932999999999993, - 0.18810000000001992, - 0.20830000000000837, - 0.2939000000000078, - 0.244199999999978, - 0.47699999999997544, - 4.169800000000009, - 0.19650000000001455, - 0.8175000000000523, - 0.22340000000002647, - 0.27359999999998763, - 1.0647000000000162, - 0.4581999999999766, - 0.25230000000004793, - 0.4837999999999738, - 0.8208000000000197, - 1.254600000000039, - 0.1741999999999848, - 0.9784999999999968, - 0.21440000000001191, - 0.6126999999999612, - 0.6002000000000294, - 0.24080000000003565, - 0.4545999999999708, - 0.2481999999999971, - 0.19139999999998736, - 2.5948999999999955, - 0.469600000000014, - 0.4993999999999801, - 0.16470000000003893, - 0.30759999999997945, - 1.3038000000000238, - 0.20750000000003865, - 0.2563000000000102, - 0.25099999999997635, - 0.14680000000004156, - 1.050200000000018, - 0.36299999999999955, - 0.2219000000000051, - 0.2547000000000139, - 0.34019999999998163, - 0.16910000000001446, - 0.07590000000004693, - 0.3394000000000119, - 0.202699999999993, - 0.5809000000000424, - 0.1694999999999709, - 0.1775000000000091, - 0.24689999999998236, - 0.18549999999999045, - 0.233600000000024, - 0.35480000000001155, - 0.4037999999999897, - 0.32939999999996417, - 0.2687999999999988, - 0.22289999999998145, - 1.3360999999999876, - 0.8281999999999812, - 0.6922999999999888, - 0.19809999999995398, - 0.6830999999999676, - 0.3301000000000158, - 0.26499999999998636, - 0.29640000000000555, - 0.21719999999999118, - 0.6281000000000176, - 0.1997000000000071, - 0.1927000000000021, - 0.32670000000001664, - 0.19980000000003884, - 2.1772000000000276, - 0.5037999999999556, - 0.21300000000007913, - 0.08010000000001583, - 0.26890000000003056, - 0.19519999999999982, - 0.2341000000000122, - 0.4147000000000389, - 0.2540000000000191, - 0.26310000000000855, - 0.42010000000004766, - 0.18719999999996162, - 1.9800000000000182, - 0.2960000000000491, - 0.865099999999984, - 0.18610000000001037, - 0.17589999999995598, - 0.4540000000000646, - 0.22910000000001673, - 0.5388999999998987, - 0.4315000000000282, - 0.26329999999995835, - 0.1855000000000473, - 0.4056000000000495, - 0.24939999999992324, - 0.3341000000000349, - 0.17860000000007403, - 0.27760000000000673, - 0.20990000000006148, - 0.5129000000000588, - 0.11899999999991451, - 0.1813999999999396, - 0.3106000000000222, - 0.20879999999999654, - 0.14379999999994197, - 0.15829999999994016, - 0.7638000000000602, - 0.3771000000000413, - 0.19590000000005148, - 0.22429999999997108, - 0.18479999999999563, - 0.19690000000002783, - 0.45079999999995835, - 0.32970000000000255, - 0.18679999999994834, - 0.5495999999999412, - 0.20709999999996853, - 0.27129999999999654, - 0.16499999999996362, - 0.18409999999994398, - 0.33350000000007185, - 0.233600000000024, - 0.2821999999999889, - 1.2824999999999136, - 0.21079999999994925, - 0.20719999999994343, - 0.39549999999997, - 1.044300000000021, - 0.1997000000000071, - 0.07200000000000273, - 0.24080000000003565, - 0.6136000000000195, - 0.2116999999999507, - 0.22129999999992833, - 0.5966999999999416, - 0.20180000000004839, - 0.3147000000000162, - 0.1876999999999498, - 0.1654999999999518, - 0.2742999999999256, - 0.5811999999999671, - 0.3606999999999516, - 0.19309999999995853, - 0.2663000000000011, - 0.1997000000000071, - 1.2771999999999935, - 0.29529999999999745, - 0.2116999999999507, - 0.445699999999988, - 0.21920000000000073, - 0.30179999999995744, - 0.2141999999998916, - 0.2539000000000442, - 0.12229999999999563, - 0.5413999999999533, - 0.24239999999997508, - 0.24109999999996035, - 0.21050000000002456, - 0.4400999999999158, - 0.3755999999999631, - 0.26070000000004256, - 0.2742000000000644, - 0.2798000000000229, - 0.2702000000000453, - 0.6286000000000058, - 0.41679999999996653, - 0.837099999999964, - 0.35790000000008604, - 0.2461999999999307, - 0.23230000000000928, - 0.0844000000000733, - 0.2559999999999718, - 0.3605000000000018, - 0.19519999999999982, - 0.22530000000006112, - 0.24139999999999873, - 0.24889999999993506, - 0.2518000000000029, - 0.20810000000005857, - 0.2398999999999205, - 0.5265000000000555, - 0.23820000000000618, - 0.7016999999999598, - 0.17189999999993688, - 0.18659999999999854, - 0.12619999999992615, - 0.3342000000000098, - 0.6073999999999842, - 0.22419999999999618, - 0.5755000000000337, - 0.4130999999999858, - 0.30910000000005766, - 0.18010000000003856, - 0.2662000000000262, - 0.21240000000000236, - 0.20439999999996417, - 0.19500000000005002, - 0.17889999999999873, - 0.20660000000009404, - 0.47899999999992815, - 0.5497000000000298, - 0.1977000000000544, - 0.18479999999999563, - 0.2158000000000584, - 0.18290000000001783, - 0.42410000000006676, - 0.399599999999964, - 0.33140000000003056, - 0.21339999999997872, - 0.5024999999999409, - 0.23070000000006985, - 0.27499999999997726, - 0.19640000000003965, - 0.2078999999999951, - 0.23569999999995161, - 0.18089999999995143, - 0.21029999999996107, - 0.22659999999996217, - 0.6989999999999554, - 0.23569999999995161, - 0.22429999999997108, - 0.21059999999999945, - 0.28340000000002874, - 0.23909999999989395, - 0.3023000000000593, - 0.27529999999990196, - 0.20109999999999673, - 0.39049999999997453, - 0.448099999999954, - 0.18870000000003984, - 0.25909999999998945, - 0.2557999999999083, - 0.233600000000024, - 0.24680000000000746, - 0.2236000000000331, - 0.22529999999994743, - 0.25709999999992306, - 0.23249999999995907, - 0.22820000000001528, - 0.22239999999999327, - 0.37009999999997945, - 0.22550000000001091, - 0.2074000000000069, - 0.37980000000004566, - 0.4518000000000484, - 0.2015000000001237, - 0.18059999999991305, - 0.14980000000014115, - 0.1898999999998523, - 0.4068999999999505, - 0.17799999999988358, - 0.3552999999999429, - 0.1697999999998956, - 0.23869999999988067, - 0.504799999999932, - 0.2318000000000211, - 0.1696999999999207, - 0.1899999999998272, - 0.18290000000001783, - 0.18449999999984357, - 0.19339999999988322, - 0.2234000000000833, - 0.20080000000007203, - 0.20839999999998327, - 0.19509999999991123, - 0.15229999999996835, - 0.22230000000013206, - 0.22010000000000218, - 0.2481999999999971, - 0.3110999999998967, - 0.38380000000006476, - 0.5388000000000375, - 0.233600000000024, - 0.19879999999989195, - 0.2357999999999265, - 0.24989999999979773, - 0.42200000000002547, - 0.20269999999982247, - 0.21849999999994907, - 0.23870000000010805, - 0.23730000000000473, - 0.185799999999972, - 0.21499999999991815, - 0.23420000000010077, - 0.2544000000000324, - 0.46309999999994034, - 0.27700000000004366, - 0.27899999999999636, - 0.22820000000001528, - 0.26729999999997744, - 0.20010000000002037, - 0.20870000000013533, - 0.2802000000001499, - 0.1893000000000029, - 0.29539999999997235, - 0.6851999999998952, - 0.26340000000004693, - 0.25279999999997926, - 0.20910000000003492, - 0.3000000000001819, - 0.3892000000000735, - 0.24319999999988795, - 0.2541000000001077, - 0.2617000000000189, - 0.22919999999999163, - 0.23059999999986758, - 0.22420000000010987, - 0.23869999999988067, - 0.2500999999999749, - 0.1976999999999407, - 0.1914999999999054, - 0.2417000000000371, - 0.21630000000004657, - 0.20249999999987267, - 0.19719999999983884, - 0.5228000000001884, - 0.2057999999999538, - 0.19650000000001455, - 0.2717999999999847, - 0.23949999999990723, - 0.17090000000007421, - 0.2056999999999789, - 0.3748000000000502, - 0.4226000000001022, - 0.24359999999978754, - 0.9338999999999942, - 0.20929999999998472, - 0.2842000000000553, - 0.07159999999998945, - 0.20400000000017826, - 0.20209999999997308, - 0.2441999999998643, - 0.22620000000006257, - 0.20250000000010004, - 0.2722000000001117, - 0.23839999999995598, - 0.46630000000004657, - 3.1365999999998166, - 0.20429999999987558, - 0.22810000000004038, - 0.5314999999998236, - 0.32519999999999527, - 0.5133999999998196, - 0.30280000000016116, - 0.20800000000008367, - 0.3898999999998978, - 0.2578000000000884, - 0.2075999999999567, - 0.20319999999992433, - 0.24459999999999127, - 0.31970000000001164, - 0.6826000000000931, - 0.3181999999999334, - 0.19699999999988904, - 0.23240000000009786, - 0.20420000000012806, - 0.3170000000000073, - 0.26320000000009713, - 0.40949999999998, - 0.16630000000009204, - 0.2820999999999003, - 0.2693000000001575, - 0.22859999999991487, - 0.2500999999999749, - 0.27650000000016917, - 0.22100000000000364, - 0.23630000000002838, - 0.4155000000000655, - 0.30110000000013315, - 0.3319000000001324, - 0.2861000000000331, - 0.5201999999999316, - 0.2798999999999978, - 0.21469999999999345, - 0.4941000000001168, - 0.3019000000001597, - 3.6475000000000364, - 0.22669999999993706, - 0.2235000000000582, - 0.32560000000012224, - 0.41439999999988686, - 0.3650000000000091, - 0.18290000000001783, - 0.2647999999999229, - 0.2457000000001699, - 0.21920000000000073, - 0.5204999999998563, - 0.23949999999990723, - 0.4193000000000211, - 0.23860000000013315, - 0.26870000000008076, - 0.23499999999989996, - 0.3341000000000349, - 0.23669999999992797, - 0.24050000000011096, - 0.22000000000002728, - 0.18360000000006949, - 0.1270999999999276, - 0.2861000000000331, - 0.2136000000000422, - 0.23739999999997963, - 0.1876999999999498, - 0.4307000000001153, - 0.17390000000000327, - 0.19280000000003383, - 0.19499999999993634, - 0.14959999999996398, - 0.16699999999991633, - 0.17780000000016116, - 0.2134000000000924, - 0.18820000000005166, - 0.22550000000001091, - 0.2219000000000051, - 0.19260000000008404, - 0.1994999999999436, - 0.18389999999999418, - 0.21969999999987522, - 0.2016000000000986, - 0.1812999999999647, - 0.18390000000022155, - 0.2395000000001346, - 0.1914000000001579, - 0.16889999999989413, - 0.1879999999998745, - 0.5153999999999996, - 0.18899999999985084, - 0.19470000000001164, - 0.20689999999990505, - 0.20640000000003056, - 0.21050000000013824, - 0.20090000000004693, - 0.20640000000003056, - 0.19280000000003383, - 0.18840000000000146, - 0.21249999999986358, - 0.21739999999999782, - 0.21000000000003638, - 0.20719999999982974, - 0.21050000000013824, - 0.20129999999994652, - 0.1958999999999378, - 0.2300000000000182, - 0.21100000000001273, - 0.2746999999999389, - 0.19499999999993634, - 0.22040000000015425, - 0.19000000000005457, - 0.1714999999999236, - 0.22919999999999163, - 0.3280000000002019, - 0.2658000000001266, - 0.361299999999801, - 0.2053000000000793, - 0.20929999999998472, - 0.056599999999889405, - 0.15229999999996835, - 0.19699999999988904, - 0.1834000000001197, - 0.19920000000001892, - 0.2401999999999589, - 0.1797999999998865, - 0.18309999999996762, - 0.2054000000000542, - 0.24900000000002365, - 0.20839999999998327, - 0.24410000000011678, - 0.2032000000001517, - 0.24809999999979482, - 0.1714999999999236, - 0.47109999999997854, - 0.18830000000002656, - 0.2421999999999116, - 0.20479999999997744, - 0.2841999999998279, - 0.218199999999797, - 0.1776999999999589, - 0.48499999999989996, - 0.17660000000000764, - 0.16360000000008768, - 0.22869999999988977, - 0.23270000000002256, - 0.22289999999998145, - 0.19630000000006476, - 0.2195000000001528, - 0.1795999999999367, - 0.205600000000004, - 0.2937000000001717, - 0.20959999999990941, - 0.2725000000000364, - 0.43679999999994834, - 0.17290000000002692, - 0.21800000000007458, - 0.2054000000000542, - 0.17400000000020555, - 0.1471999999998843, - 0.1977999999999156, - 0.18630000000007385, - 0.21109999999998763, - 0.16300000000001091, - 0.47070000000007894, - 2.1536000000000968, - 0.43429999999989377, - 0.33599999999978536, - 0.2236000000000331, - 0.1247000000000753, - 0.1791000000000622, - 0.47420000000010987, - 0.24959999999987303, - 4.469900000000052, - 0.342200000000048, - 0.2657000000001517, - 12.426799999999957, - 0.3207999999999629, - 0.26510000000007494, - 0.3375999999998385, - 0.21250000000009095, - 0.2636999999999716, - 0.23329999999987194, - 0.19659999999998945, - 0.2598000000000411, - 0.25040000000012697, - 0.21909999999979846, - 0.12049999999999272, - 0.22260000000005675, - 0.2859000000000833, - 0.5489000000000033, - 0.25509999999985666, - 0.2415000000000873, - 0.3220000000001164, - 0.25929999999993925, - 0.22149999999987813, - 0.24459999999999127, - 0.3423999999999978, - 6.979900000000043, - 0.2680000000000291, - 59.956699999999955, - 58.47219999999993, - 56.48730000000023, - 10.891299999999774, - 0.3737999999998465, - 0.9608000000002903, - 0.22280000000000655, - 41.21270000000004, - 2.3718000000003485, - 0.2909999999997126, - 0.2626000000000204, - 0.24959999999964566, - 0.6748999999999796, - 0.23660000000018044, - 0.23460000000022774, - 0.2498000000000502, - 0.23939999999993233, - 0.245600000000195, - 0.23050000000012005, - 0.2424999999998363, - 0.25549999999975626, - 0.29440000000022337, - 0.40319999999974243, - 0.6226999999998952, - 0.3512999999998101, - 0.24929999999994834, - 0.2606999999998152, - 0.17489999999997963, - 0.23410000000012587, - 0.17849999999998545, - 0.1734999999998763, - 0.23320000000012442, - 0.2614000000003216, - 0.29890000000023065, - 0.3079000000002452, - 0.22359999999980573, - 0.23909999999978027, - 0.20010000000002037, - 0.43489999999974316, - 0.010199999999713327, - 0.20100000000002183, - 0.22890000000006694, - 0.25759999999991123, - 0.24989999999979773, - 0.24769999999989523, - 0.24099999999998545, - 0.20870000000013533, - 0.2474000000001979, - 0.20180000000027576, - 0.3623999999999796, - 0.21390000000019427, - 0.21430000000009386, - 0.22000000000025466, - 0.4375, - 0.610700000000179, - 0.2185999999996966, - 0.2481999999999971, - 0.1869000000001506, - 0.2418999999999869, - 0.29579999999987194, - 0.3413999999997941, - 0.31539999999995416, - 1.0481999999997242, - 0.2500999999997475, - 0.404700000000048, - 59.94150000000036, - 59.83040000000028, - 0.29890000000023065, - 25.176800000000185, - 0.8398000000001957, - 0.8426999999996951, - 0.5783999999998741, - 0.35390000000006694, - 59.95520000000033, - 39.49330000000009, - 0.31790000000000873, - 1.053899999999885, - 0.36520000000018626, - 59.949699999999666, - 0.20780000000013388, - 0.3079000000002452, - 0.5414999999998145, - 59.94870000000037, - 0.14030000000002474, - 0.3206999999997606, - 59.92540000000008, - 2.968199999999797, - 59.944000000000415, - 0.3568999999997686, - 0.4893000000001848, - 0.3459000000002561, - 0.5953999999996995, - 7.496799999999894, - 59.944800000000214, - 59.803100000000086, - 25.128200000000106, - 0.40610000000015134, - 3.0812000000000808, - 59.94470000000001, - 59.85050000000001, - 36.67089999999962, - 0.22269999999980428, - 0.4216999999998734, - 0.25189999999975043, - 0.37390000000004875, - 0.253400000000056, - 55.91840000000002, - 0.24490000000014334, - 0.22810000000026776, - 0.22959999999966385, - 0.2545000000000073, - 0.1969000000003689, - 0.21139999999968495, - 0.2199999999997999, - 0.2660000000000764, - 0.20440000000007785, - 30.50070000000005, - 59.95039999999972, - 59.80019999999968, - 0.06710000000020955, - 0.4569000000001324, - 25.24270000000024, - 59.94450000000006, - 0.10320000000001528, - 0.3704000000002452, - 13.100100000000111, - 27.171699999999873, - 0.3063999999999396, - 59.95310000000018, - 0.06970000000001164, - 0.24459999999999127, - 0.962500000000091, - 0.24070000000028813, - 0.45959999999968204, - 0.4962000000000444, - 59.029199999999946, - 59.954499999999825, - 0.3441000000002532, - 0.1578999999996995, - 59.700700000000325, - 0.1772000000000844, - 0.40599999999994907, - 0.3265000000001237, - 0.24769999999989523, - 0.2665999999999258, - 0.22850000000016735, - 0.29579999999987194, - 0.21829999999999927, - 0.22800000000006548, - 0.25959999999986394, - 0.21570000000019718, - 0.23299999999971988, - 2.7521999999999025, - 0.2559999999998581, - 0.5834999999997308, - 0.278400000000147, - 0.5468000000000757, - 0.3269999999997708, - 0.26769999999987704, - 0.22360000000026048, - 28.914700000000266, - 13.87159999999949, - 42.69970000000012, - 0.28699999999935244, - 0.2566999999999098, - 0.3007999999999811, - 24.60689999999977, - 0.26670000000012806, - 53.8715000000002, - 0.2528999999994994, - 59.9413999999997, - 0.20079999999961728, - 23.895799999999326, - 0.3356000000003405, - 0.5122000000001208, - 0.3338999999996304, - 59.95629999999983 - ] - }, - { - "marker": { - "color": "black" - }, - "name": "rolled data", - "type": "scatter", - "uid": "f2e6fe6a-99ab-4848-ba28-9f00d36d173d", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456, - 457, - 458, - 459, - 460, - 461, - 462, - 463, - 464, - 465, - 466, - 467, - 468, - 469, - 470, - 471, - 472, - 473, - 474, - 475, - 476, - 477, - 478, - 479, - 480, - 481, - 482, - 483, - 484, - 485, - 486, - 487, - 488, - 489, - 490, - 491, - 492, - 493, - 494, - 495, - 496, - 497, - 498, - 499, - 500, - 501, - 502, - 503, - 504, - 505, - 506, - 507, - 508, - 509, - 510, - 511, - 512, - 513, - 514, - 515, - 516, - 517, - 518, - 519, - 520, - 521, - 522, - 523, - 524, - 525, - 526, - 527, - 528, - 529, - 530, - 531, - 532, - 533, - 534, - 535, - 536, - 537, - 538, - 539, - 540, - 541, - 542, - 543, - 544, - 545, - 546, - 547, - 548, - 549, - 550, - 551, - 552, - 553, - 554, - 555, - 556, - 557, - 558, - 559, - 560, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 569, - 570, - 571, - 572, - 573, - 574, - 575, - 576, - 577, - 578, - 579, - 580, - 581, - 582, - 583, - 584, - 585, - 586, - 587, - 588, - 589, - 590, - 591, - 592, - 593, - 594, - 595, - 596, - 597, - 598, - 599, - 600, - 601, - 602, - 603, - 604, - 605, - 606, - 607, - 608, - 609, - 610, - 611, - 612, - 613, - 614, - 615, - 616, - 617, - 618, - 619, - 620, - 621, - 622, - 623, - 624, - 625, - 626, - 627, - 628, - 629, - 630, - 631, - 632, - 633, - 634, - 635, - 636, - 637, - 638, - 639, - 640, - 641, - 642, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 650, - 651, - 652, - 653, - 654, - 655, - 656, - 657, - 658, - 659, - 660, - 661, - 662, - 663, - 664, - 665, - 666, - 667, - 668, - 669, - 670, - 671, - 672, - 673, - 674, - 675, - 676, - 677, - 678, - 679, - 680, - 681, - 682, - 683, - 684, - 685, - 686, - 687, - 688, - 689, - 690, - 691, - 692, - 693, - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793 - ], - "y": [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - 0.507849999999999, - 0.44484999999999886, - 0.3396500000000007, - 0.39334999999999987, - 0.39334999999999987, - 0.39334999999999987, - 0.39334999999999987, - 0.4511499999999984, - 0.32260000000000133, - 0.3081499999999977, - 0.23389999999999844, - 0.3081499999999977, - 0.3824499999999986, - 0.40629999999999455, - 0.30819999999999936, - 0.4054000000000002, - 0.30819999999999936, - 0.2254000000000005, - 0.30819999999999936, - 0.30819999999999936, - 0.30579999999999785, - 0.217649999999999, - 0.217649999999999, - 0.217649999999999, - 0.22420000000000329, - 0.22420000000000329, - 0.2277000000000058, - 0.23490000000000322, - 0.2277000000000058, - 0.2277000000000058, - 0.2277000000000058, - 0.22945000000000704, - 0.22715000000000884, - 0.22945000000000704, - 0.22945000000000704, - 0.22945000000000704, - 0.21535000000000082, - 0.20049999999999102, - 0.19769999999998333, - 0.1997999999999962, - 0.214650000000006, - 0.22350000000000136, - 0.3025999999999982, - 0.27259999999999707, - 0.2494999999999976, - 0.2494999999999976, - 0.2917499999999933, - 0.32859999999999445, - 0.3682500000000033, - 0.3682500000000033, - 0.32859999999999445, - 0.2917499999999933, - 0.2781999999999982, - 0.2781999999999982, - 0.33140000000000214, - 0.2781999999999982, - 0.3247000000000071, - 0.263850000000005, - 0.263850000000005, - 0.2696500000000128, - 0.3086500000000143, - 0.3553499999999872, - 0.3553499999999872, - 0.35095000000002585, - 0.35095000000002585, - 0.35095000000002585, - 0.317300000000003, - 0.317300000000003, - 0.31875000000002274, - 0.34445000000002324, - 0.3108000000000004, - 0.2654500000000155, - 0.3108000000000004, - 0.2654500000000155, - 0.2321500000000185, - 0.2654500000000155, - 0.24500000000000455, - 0.2690499999999929, - 0.2690499999999929, - 0.23134999999999195, - 0.2690499999999929, - 0.2690499999999929, - 0.2588999999999828, - 0.2837499999999977, - 0.3760499999999922, - 0.36589999999998213, - 0.46759999999997603, - 0.4709999999999752, - 0.4709999999999752, - 0.4709999999999752, - 0.4709999999999752, - 0.4709999999999752, - 0.5482499999999675, - 0.5420000000000016, - 0.5420000000000016, - 0.5420000000000016, - 0.5274000000000001, - 0.35139999999998395, - 0.35139999999998395, - 0.4620999999999924, - 0.4620999999999924, - 0.4620999999999924, - 0.3810999999999751, - 0.3810999999999751, - 0.3810999999999751, - 0.2819499999999948, - 0.2819499999999948, - 0.2819499999999948, - 0.2819499999999948, - 0.2819499999999948, - 0.25364999999999327, - 0.25550000000001205, - 0.25550000000001205, - 0.25284999999999513, - 0.25284999999999513, - 0.25284999999999513, - 0.2383000000000095, - 0.2970500000000129, - 0.2383000000000095, - 0.21229999999999905, - 0.22479999999998768, - 0.19409999999999172, - 0.19409999999999172, - 0.2181500000000085, - 0.24025000000000318, - 0.24025000000000318, - 0.2578499999999906, - 0.24025000000000318, - 0.2578499999999906, - 0.2990999999999815, - 0.34209999999998786, - 0.34209999999998786, - 0.37930000000000064, - 0.3669500000000028, - 0.32974999999999, - 0.3132500000000107, - 0.3132500000000107, - 0.47910000000001673, - 0.3132500000000107, - 0.28069999999999595, - 0.28069999999999595, - 0.28069999999999595, - 0.28069999999999595, - 0.28069999999999595, - 0.25679999999999836, - 0.21510000000003515, - 0.24095000000005484, - 0.20640000000005898, - 0.22355000000004566, - 0.2515000000000214, - 0.24405000000001564, - 0.2585500000000138, - 0.2585500000000138, - 0.24405000000001564, - 0.2585500000000138, - 0.26600000000001955, - 0.27955000000002883, - 0.27955000000002883, - 0.27955000000002883, - 0.27955000000002883, - 0.27955000000002883, - 0.3580500000000484, - 0.36375000000003865, - 0.36375000000003865, - 0.27965000000000373, - 0.3344500000000039, - 0.2563499999999408, - 0.29869999999999663, - 0.29869999999999663, - 0.27044999999998254, - 0.27044999999998254, - 0.27044999999998254, - 0.2563499999999408, - 0.22964999999999236, - 0.263499999999965, - 0.22964999999999236, - 0.209350000000029, - 0.19509999999996808, - 0.209350000000029, - 0.209350000000029, - 0.202350000000024, - 0.202350000000024, - 0.202350000000024, - 0.2028500000000122, - 0.2028500000000122, - 0.21059999999999945, - 0.21059999999999945, - 0.2769999999999868, - 0.2156999999999698, - 0.2156999999999698, - 0.2156999999999698, - 0.20199999999999818, - 0.23919999999998254, - 0.2524500000000103, - 0.2524500000000103, - 0.2524500000000103, - 0.2524500000000103, - 0.22219999999998663, - 0.2524500000000103, - 0.25790000000000646, - 0.25790000000000646, - 0.25790000000000646, - 0.23720000000002983, - 0.2615000000000123, - 0.22624999999999318, - 0.21649999999993952, - 0.231049999999982, - 0.231049999999982, - 0.231049999999982, - 0.21649999999993952, - 0.21649999999993952, - 0.231049999999982, - 0.24779999999992697, - 0.24779999999992697, - 0.24779999999992697, - 0.27029999999996335, - 0.23405000000002474, - 0.27029999999996335, - 0.27029999999996335, - 0.27029999999996335, - 0.28479999999996153, - 0.2807999999999993, - 0.2807999999999993, - 0.2427500000000009, - 0.26010000000002265, - 0.23655000000002246, - 0.2746000000000208, - 0.24815000000000964, - 0.2417499999999677, - 0.2417499999999677, - 0.2417499999999677, - 0.24815000000000964, - 0.24815000000000964, - 0.2573000000000434, - 0.2674500000000535, - 0.27220000000005484, - 0.27220000000005484, - 0.27700000000004366, - 0.327699999999993, - 0.36675000000002456, - 0.3188500000000545, - 0.27700000000004366, - 0.27700000000004366, - 0.2750000000000341, - 0.31405000000006567, - 0.3069500000000289, - 0.25109999999995125, - 0.2437999999999647, - 0.2437999999999647, - 0.2437999999999647, - 0.236850000000004, - 0.24064999999995962, - 0.2451499999999669, - 0.24064999999995962, - 0.24064999999995962, - 0.24064999999995962, - 0.24064999999995962, - 0.23904999999996335, - 0.23904999999996335, - 0.23904999999996335, - 0.23904999999996335, - 0.286200000000008, - 0.286200000000008, - 0.32165000000003374, - 0.2666500000000269, - 0.2876500000000419, - 0.2876500000000419, - 0.2876500000000419, - 0.2452000000000112, - 0.21829999999999927, - 0.2095000000000482, - 0.2095000000000482, - 0.2095000000000482, - 0.2055000000000291, - 0.2055000000000291, - 0.2055000000000291, - 0.20105000000000928, - 0.20215000000007421, - 0.21120000000007622, - 0.2736000000000445, - 0.2736000000000445, - 0.2736000000000445, - 0.22325000000006412, - 0.25285000000002356, - 0.25285000000002356, - 0.25285000000002356, - 0.25534999999996444, - 0.23320000000001073, - 0.22205000000002428, - 0.21999999999997044, - 0.228650000000016, - 0.228650000000016, - 0.22544999999996662, - 0.21744999999998527, - 0.22544999999996662, - 0.2311499999999569, - 0.2311499999999569, - 0.23739999999992278, - 0.23739999999992278, - 0.25719999999989795, - 0.25719999999989795, - 0.25719999999989795, - 0.2671999999999457, - 0.2671999999999457, - 0.2574499999999489, - 0.2574499999999489, - 0.2512999999999579, - 0.24020000000001573, - 0.2512999999999579, - 0.24020000000001573, - 0.23304999999999154, - 0.23304999999999154, - 0.23304999999999154, - 0.23034999999998718, - 0.2268500000000131, - 0.2268500000000131, - 0.23034999999998718, - 0.23034999999998718, - 0.2268500000000131, - 0.2239500000000021, - 0.2149000000000001, - 0.2164500000000089, - 0.2044500000000653, - 0.2044500000000653, - 0.195699999999988, - 0.195699999999988, - 0.195699999999988, - 0.2108499999999367, - 0.2108499999999367, - 0.21089999999992415, - 0.21089999999992415, - 0.18724999999983538, - 0.1916999999998552, - 0.1916999999998552, - 0.19709999999997763, - 0.19709999999997763, - 0.19424999999989723, - 0.1916999999998552, - 0.19424999999989723, - 0.19794999999999163, - 0.20460000000002765, - 0.21424999999999272, - 0.22120000000006712, - 0.22120000000006712, - 0.22795000000007803, - 0.22795000000007803, - 0.23469999999997526, - 0.2419999999999618, - 0.2490499999998974, - 0.2490499999998974, - 0.24284999999986212, - 0.23725000000001728, - 0.23654999999996562, - 0.23469999999997526, - 0.2271499999999378, - 0.23500000000001364, - 0.23575000000005275, - 0.23575000000005275, - 0.23575000000005275, - 0.2380000000000564, - 0.2380000000000564, - 0.24585000000001855, - 0.24430000000006658, - 0.24430000000006658, - 0.2608500000000049, - 0.2608500000000049, - 0.27215000000001055, - 0.27215000000001055, - 0.2653500000000122, - 0.2581000000000131, - 0.2581000000000131, - 0.2581000000000131, - 0.2718000000000984, - 0.2718000000000984, - 0.2587500000000773, - 0.2625500000000329, - 0.2579000000000633, - 0.2534500000000435, - 0.2479999999999336, - 0.2409499999998843, - 0.24664999999993142, - 0.2409499999998843, - 0.23464999999987413, - 0.23464999999987413, - 0.2298999999999296, - 0.22670000000005075, - 0.22025000000007822, - 0.22025000000007822, - 0.21105000000000018, - 0.20414999999991323, - 0.20414999999991323, - 0.21105000000000018, - 0.21105000000000018, - 0.20574999999996635, - 0.20574999999996635, - 0.22264999999993051, - 0.2415499999998474, - 0.2415499999998474, - 0.2415499999998474, - 0.25769999999988613, - 0.2415499999998474, - 0.22644999999988613, - 0.22644999999988613, - 0.24389999999982592, - 0.23489999999992506, - 0.21775000000002365, - 0.21775000000002365, - 0.21775000000002365, - 0.23230000000000928, - 0.23230000000000928, - 0.23230000000000928, - 0.23324999999999818, - 0.24129999999991014, - 0.25530000000003383, - 0.2987000000000535, - 0.3140000000000782, - 0.3140000000000782, - 0.3575499999999465, - 0.3140000000000782, - 0.2803000000001248, - 0.2803000000001248, - 0.2803000000001248, - 0.2803000000001248, - 0.2803000000001248, - 0.2803000000001248, - 0.25120000000003984, - 0.25120000000003984, - 0.23850000000004457, - 0.23850000000004457, - 0.2539000000000442, - 0.2901000000000522, - 0.2901000000000522, - 0.2726499999999987, - 0.26625000000012733, - 0.2478000000000975, - 0.256650000000036, - 0.26625000000012733, - 0.26625000000012733, - 0.256650000000036, - 0.2597000000000662, - 0.2597000000000662, - 0.27290000000016335, - 0.27290000000016335, - 0.28130000000010114, - 0.28300000000001546, - 0.28300000000001546, - 0.29360000000008313, - 0.30150000000014643, - 0.31690000000014606, - 0.30150000000014643, - 0.2940000000000964, - 0.2940000000000964, - 0.31375000000014097, - 0.31375000000014097, - 0.31375000000014097, - 0.31375000000014097, - 0.2833500000000413, - 0.2552500000000464, - 0.2552500000000464, - 0.2552500000000464, - 0.29520000000002256, - 0.2552500000000464, - 0.2552500000000464, - 0.24260000000003856, - 0.2552500000000464, - 0.24260000000003856, - 0.2400000000000091, - 0.2400000000000091, - 0.2390500000000202, - 0.23765000000003056, - 0.23765000000003056, - 0.23584999999991396, - 0.23584999999991396, - 0.22834999999997763, - 0.22834999999997763, - 0.21680000000003474, - 0.20320000000003802, - 0.19389999999998508, - 0.19389999999998508, - 0.19389999999998508, - 0.19024999999999181, - 0.19024999999999181, - 0.18795000000000073, - 0.19050000000004275, - 0.19050000000004275, - 0.19270000000005894, - 0.1938000000000102, - 0.19040000000006785, - 0.19605000000001382, - 0.2005500000000211, - 0.2005500000000211, - 0.19605000000001382, - 0.2005500000000211, - 0.19605000000001382, - 0.19200000000012096, - 0.1897000000000162, - 0.1897000000000162, - 0.19020000000000437, - 0.19020000000000437, - 0.19020000000000437, - 0.19305000000008476, - 0.2005500000000211, - 0.19780000000002929, - 0.20365000000003874, - 0.20365000000003874, - 0.20365000000003874, - 0.20365000000003874, - 0.20640000000003056, - 0.2066499999999678, - 0.20679999999993015, - 0.20859999999993306, - 0.20679999999993015, - 0.20679999999993015, - 0.20859999999993306, - 0.2102500000000873, - 0.2107500000000755, - 0.2102500000000873, - 0.2102500000000873, - 0.208849999999984, - 0.20590000000004238, - 0.20614999999997963, - 0.2157000000000835, - 0.22480000000007294, - 0.22480000000007294, - 0.22480000000007294, - 0.21485000000006949, - 0.21485000000006949, - 0.20730000000003201, - 0.20730000000003201, - 0.20730000000003201, - 0.2022500000000491, - 0.2022500000000491, - 0.19809999999995398, - 0.19020000000000437, - 0.19020000000000437, - 0.19020000000000437, - 0.19809999999995398, - 0.20230000000003656, - 0.20430000000010295, - 0.20690000000001874, - 0.20690000000001874, - 0.20690000000001874, - 0.20690000000001874, - 0.22529999999994743, - 0.22529999999994743, - 0.22529999999994743, - 0.2301999999998543, - 0.21149999999988722, - 0.2301999999998543, - 0.21149999999988722, - 0.21149999999988722, - 0.21149999999988722, - 0.22344999999984339, - 0.22054999999988922, - 0.22054999999988922, - 0.2188499999999749, - 0.20790000000010878, - 0.2125500000000784, - 0.2125500000000784, - 0.2145500000000311, - 0.22120000000006712, - 0.22120000000006712, - 0.2145500000000311, - 0.213799999999992, - 0.213799999999992, - 0.2075999999999567, - 0.2075999999999567, - 0.2074999999999818, - 0.2015999999999849, - 0.2015999999999849, - 0.19204999999999472, - 0.19204999999999472, - 0.2015999999999849, - 0.2015999999999849, - 0.20444999999995161, - 0.21735000000001037, - 0.21735000000001037, - 0.21735000000001037, - 0.27979999999990923, - 0.2927999999998292, - 0.38514999999983957, - 0.3390999999999167, - 0.30084999999996853, - 0.30084999999996853, - 0.2932500000000573, - 0.2932500000000573, - 0.3291999999999007, - 0.3291999999999007, - 0.2932500000000573, - 0.2932500000000573, - 0.2654000000001133, - 0.2644000000000233, - 0.26175000000000637, - 0.25510000000008404, - 0.24184999999999945, - 0.22794999999996435, - 0.22794999999996435, - 0.24184999999999945, - 0.24184999999999945, - 0.24595000000010714, - 0.2527499999999918, - 0.2527499999999918, - 0.248299999999972, - 0.24984999999992397, - 0.25719999999989795, - 0.2726000000000113, - 0.2636499999999842, - 0.2636499999999842, - 0.29500000000007276, - 0.3322000000000571, - 3.6611500000000206, - 3.676849999999945, - 3.970350000000167, - 3.970350000000167, - 8.935599999999909, - 6.631550000000061, - 6.631550000000061, - 1.6663000000003194, - 0.6673000000000684, - 0.524349999999913, - 0.33239999999977954, - 0.2767999999998665, - 0.2562000000000353, - 0.2562000000000353, - 0.24969999999984793, - 0.24759999999992033, - 0.24405000000001564, - 0.24405000000001564, - 0.24405000000001564, - 0.24405000000001564, - 0.2477000000001226, - 0.25264999999990323, - 0.2523999999998523, - 0.2580999999997857, - 0.2580999999997857, - 0.2580999999997857, - 0.2580999999997857, - 0.25499999999988177, - 0.2417000000000371, - 0.2417000000000371, - 0.2417000000000371, - 0.2417000000000371, - 0.23365000000012515, - 0.23365000000012515, - 0.23365000000012515, - 0.23614999999995234, - 0.23614999999995234, - 0.23614999999995234, - 0.2339999999999236, - 0.2339999999999236, - 0.2339999999999236, - 0.2339999999999236, - 0.24004999999988286, - 0.2349500000000262, - 0.24420000000009168, - 0.2349500000000262, - 0.24420000000009168, - 0.24420000000009168, - 0.24420000000009168, - 0.23050000000012005, - 0.23050000000012005, - 0.23050000000012005, - 0.21929999999997563, - 0.23370000000022628, - 0.21929999999997563, - 0.23095000000012078, - 0.23095000000012078, - 0.245049999999992, - 0.2719999999999345, - 0.30559999999991305, - 0.27294999999980973, - 0.27294999999980973, - 0.30559999999991305, - 0.3283999999998741, - 0.3283999999998741, - 0.37304999999992106, - 0.6222500000001219, - 0.8412499999999454, - 0.8412499999999454, - 0.7091000000000349, - 0.8412499999999454, - 13.00974999999994, - 0.8412499999999454, - 0.8412499999999454, - 0.8412499999999454, - 0.8412499999999454, - 0.7105499999997846, - 0.4718000000000302, - 0.45335000000000036, - 0.7976999999998498, - 0.45335000000000036, - 0.34294999999997344, - 0.45335000000000036, - 0.45335000000000036, - 1.7548499999998057, - 0.44919999999979154, - 0.5153999999999996, - 0.5153999999999996, - 0.5423499999999422, - 0.5423499999999422, - 1.7817999999997483, - 5.232499999999845, - 5.232499999999845, - 4.046099999999797, - 1.8382999999998901, - 5.288999999999987, - 16.3125, - 30.899549999999863, - 30.899549999999863, - 30.899549999999863, - 14.104700000000093, - 1.751449999999977, - 0.41390000000001237, - 1.751449999999977, - 0.3977999999999611, - 0.3136500000000524, - 0.25264999999990323, - 0.25264999999990323, - 0.25264999999990323, - 0.24839999999994689, - 0.2372499999999036, - 0.2372499999999036, - 0.2288499999999658, - 0.2288499999999658, - 0.2288499999999658, - 0.24204999999983556, - 0.2372499999999036, - 0.24299999999993815, - 0.3614500000001044, - 12.849800000000187, - 12.849800000000187, - 12.849800000000187, - 19.171400000000176, - 19.171400000000176, - 6.778500000000122, - 6.778500000000122, - 6.778500000000122, - 6.735250000000178, - 0.6664500000001681, - 0.3384000000000924, - 0.4149999999999636, - 0.4778999999998632, - 0.4778999999998632, - 0.4778999999998632, - 0.4778999999998632, - 0.4018499999999676, - 0.4778999999998632, - 0.4778999999998632, - 0.43279999999981555, - 0.43279999999981555, - 0.37505000000010114, - 0.33530000000018845, - 0.29655000000002474, - 0.28119999999989886, - 0.2571499999999105, - 0.2571499999999105, - 0.2536499999998796, - 0.2536499999998796, - 0.24034999999980755, - 0.24034999999980755, - 0.244499999999789, - 0.244499999999789, - 0.25779999999986103, - 0.25779999999986103, - 0.26900000000000546, - 0.273050000000012, - 0.273050000000012, - 0.3026999999999589, - 0.43689999999992324, - 0.43689999999992324, - 0.43689999999992324, - 0.3069999999995616, - 0.31389999999987594, - 0.31389999999987594, - 0.29389999999966676, - 7.086199999999735, - 7.086199999999735, - 7.086199999999735, - 0.29389999999966676, - 0.29389999999966676, - 0.3182000000001608, - 0.42390000000023065, - 0.42390000000023065, - 0.42390000000023065 - ] - } - ], - "layout": { - "height": 400, - "title": { - "text": "Reaction time - trial number" - }, - "width": 630, - "xaxis": { - "title": { - "text": "Trial number" - } - }, - "yaxis": { - "dtick": [ - -1, - 0, - 1, - 2 - ], - "range": [ - -1, - 2 - ], - "title": { - "text": "Reaction time (s)" - }, - "type": "log" - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "subj_uuid = (subject.Subject & 'subject_nickname=\"IBL-T3\"').fetch1('subject_uuid')\n", "key = {'subject_uuid': subj_uuid,\n", @@ -3398,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/TrialCountsSessionDuration.ipynb b/notebooks/notebooks_plotting/TrialCountsSessionDuration.ipynb index 4357c8cb..40437b1f 100644 --- a/notebooks/notebooks_plotting/TrialCountsSessionDuration.ipynb +++ b/notebooks/notebooks_plotting/TrialCountsSessionDuration.ipynb @@ -2,34 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from ibl_pipeline.analyses import behavior as behavior_analyses\n", "from ibl_pipeline import behavior as behavior_ingest\n", @@ -52,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -71,1360 +46,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "marker": { - "color": "black", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "trial counts", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-10", - "2019-08-12", - "2019-08-13", - "2019-08-14", - "2019-08-14", - "2019-08-15", - "2019-08-16", - "2019-08-19", - "2019-08-20", - "2019-08-21", - "2019-08-22", - "2019-08-23", - "2019-08-26", - "2019-08-27", - "2019-08-28", - "2019-08-29", - "2019-08-30", - "2019-08-31", - "2019-09-10", - "2019-09-11", - "2019-09-12", - "2019-09-13", - "2019-09-16", - "2019-09-17", - "2019-09-18", - "2019-09-19", - "2019-09-20", - "2019-09-23", - "2019-09-24", - "2019-09-25", - "2019-09-26", - "2019-09-27", - "2019-09-30", - "2019-10-01", - "2019-10-04", - "2019-10-07", - "2019-10-08", - "2019-10-10", - "2019-10-11", - "2019-10-14", - "2019-10-15", - "2019-10-17", - "2019-10-18", - "2019-10-21", - "2019-10-22", - "2019-10-24", - "2019-10-25", - "2019-10-29", - "2019-10-29", - "2019-10-31", - "2019-11-01", - "2019-11-04", - "2019-11-05", - "2019-11-07", - "2019-11-11", - "2019-11-12", - "2019-11-14", - "2019-11-15", - "2019-11-18", - "2019-11-19", - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-11-29", - "2019-12-02", - "2019-12-05", - "2019-12-09", - "2019-12-10", - "2019-12-12", - "2019-12-13", - "2020-01-06", - "2020-01-07", - "2020-01-09", - "2020-01-10", - "2020-01-13", - "2020-01-14", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-28", - "2020-02-18", - "2020-02-19", - "2020-02-21", - "2020-02-24", - "2020-02-25", - "2020-02-27", - "2020-03-02", - "2020-03-04", - "2020-03-05" - ], - "y": [ - 196, - 140, - 223, - 55, - 289, - 141, - 340, - 224, - 252, - 269, - 640, - 521, - 807, - 869, - 743, - 683, - 799, - 759, - 462, - 717, - 972, - 349, - 659, - 1011, - 1145, - 914, - 1053, - 1087, - 929, - 999, - 1215, - 941, - 983, - 967, - 859, - 992, - 1043, - 1134, - 1190, - 941, - 755, - 1028, - 959, - 985, - 1039, - 1075, - 1174, - 57, - 974, - 1232, - 873, - 1175, - 1041, - 1087, - 659, - 642, - 421, - 429, - 763, - 530, - 932, - 819, - 994, - 516, - 916, - 860, - 709, - 909, - 811, - 864, - 864, - 984, - 811, - 683, - 577, - 442, - 402, - 505, - 416, - 512, - 718, - 704, - 642, - 611, - 467, - 312, - 191, - 643, - 481, - 616, - 789, - 599, - 371, - 524, - 640, - 195, - 225 - ], - "yaxis": "y" - }, - { - "marker": { - "color": "red", - "line": { - "color": "white", - "width": 1 - }, - "size": 6 - }, - "mode": "markers+lines", - "name": "session duration", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-10", - "2019-08-12", - "2019-08-13", - "2019-08-14", - "2019-08-14", - "2019-08-15", - "2019-08-16", - "2019-08-19", - "2019-08-20", - "2019-08-21", - "2019-08-22", - "2019-08-23", - "2019-08-26", - "2019-08-27", - "2019-08-28", - "2019-08-29", - "2019-08-30", - "2019-08-31", - "2019-09-10", - "2019-09-11", - "2019-09-12", - "2019-09-13", - "2019-09-16", - "2019-09-17", - "2019-09-18", - "2019-09-19", - "2019-09-20", - "2019-09-23", - "2019-09-24", - "2019-09-25", - "2019-09-26", - "2019-09-27", - "2019-09-30", - "2019-10-01", - "2019-10-04", - "2019-10-07", - "2019-10-08", - "2019-10-10", - "2019-10-11", - "2019-10-14", - "2019-10-15", - "2019-10-17", - "2019-10-18", - "2019-10-21", - "2019-10-22", - "2019-10-24", - "2019-10-25", - "2019-10-29", - "2019-10-29", - "2019-10-31", - "2019-11-01", - "2019-11-04", - "2019-11-05", - "2019-11-07", - "2019-11-11", - "2019-11-12", - "2019-11-14", - "2019-11-15", - "2019-11-18", - "2019-11-19", - "2019-11-21", - "2019-11-22", - "2019-11-25", - "2019-11-26", - "2019-11-27", - "2019-11-28", - "2019-11-29", - "2019-12-02", - "2019-12-05", - "2019-12-09", - "2019-12-10", - "2019-12-12", - "2019-12-13", - "2020-01-06", - "2020-01-07", - "2020-01-09", - "2020-01-10", - "2020-01-13", - "2020-01-14", - "2020-01-16", - "2020-01-17", - "2020-01-20", - "2020-01-21", - "2020-01-22", - "2020-01-23", - "2020-01-24", - "2020-01-27", - "2020-01-28", - "2020-02-18", - "2020-02-19", - "2020-02-21", - "2020-02-24", - "2020-02-25", - "2020-02-27", - "2020-03-02", - "2020-03-04", - "2020-03-05" - ], - "y": [ - 46, - 46, - 54, - 21, - 45, - 45, - 44, - 44, - 48, - 45, - 77, - 53, - 73, - 79, - 61, - 59, - 69, - 63, - 43, - 61, - 81, - 44, - 50, - 89, - 92, - 78, - 89, - 89, - 72, - 78, - 91, - 66, - 79, - 78, - 65, - 75, - 84, - 85, - 90, - 78, - 60, - 87, - 77, - 79, - 82, - 77, - 88, - 4, - 82, - 90, - 64, - 86, - 76, - 77, - 59, - 47, - 38, - 31, - 55, - 38, - 68, - 58, - 69, - 34, - 64, - 58, - 54, - 62, - 56, - 62, - 68, - 77, - 69, - 75, - 46, - 37, - 37, - 45, - 36, - 38, - 59, - 67, - 68, - 61, - 47, - 45, - 44, - 62, - 55, - 62, - 89, - 68, - 44, - 51, - 79, - 30, - 43 - ], - "yaxis": "y2" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-07-29", - "2019-07-29" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-05", - "2019-08-05" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-12", - "2019-08-12" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-19", - "2019-08-19" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-08-26", - "2019-08-26" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-02", - "2019-09-02" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-09", - "2019-09-09" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-16", - "2019-09-16" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-23", - "2019-09-23" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-09-30", - "2019-09-30" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-07", - "2019-10-07" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-14", - "2019-10-14" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-21", - "2019-10-21" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-10-28", - "2019-10-28" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-04", - "2019-11-04" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-11", - "2019-11-11" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-18", - "2019-11-18" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-11-25", - "2019-11-25" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-02", - "2019-12-02" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-09", - "2019-12-09" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-16", - "2019-12-16" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-23", - "2019-12-23" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2019-12-30", - "2019-12-30" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-06", - "2020-01-06" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-13", - "2020-01-13" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-20", - "2020-01-20" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-01-27", - "2020-01-27" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-03", - "2020-02-03" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-10", - "2020-02-10" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-17", - "2020-02-17" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-02-24", - "2020-02-24" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "skip", - "legendgroup": "monday", - "line": { - "color": "gray", - "dash": "dot", - "width": 0.5 - }, - "mode": "lines", - "name": "Mondays", - "showlegend": false, - "type": "scatter", - "x": [ - "2020-03-02", - "2020-03-02" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(195, 90, 80, 1)" - }, - "mode": "lines", - "name": "first day got trained 1a", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-09-19", - "2019-09-19" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(255, 153, 20, 1)" - }, - "mode": "lines", - "name": "first day got trained 1b", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-09-25", - "2019-09-25" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "marker": { - "color": "rgba(0, 0, 0, 1)" - }, - "mode": "lines", - "name": "mouse became seven months", - "showlegend": true, - "type": "scatter", - "x": [ - "2020-01-14", - "2020-01-14" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - }, - { - "hoverinfo": "x", - "line": { - "color": "rgba(5, 142, 255, 1)", - "dash": "dashdot", - "width": 2 - }, - "mode": "lines", - "name": "good enough for brainwide map", - "showlegend": true, - "type": "scatter", - "x": [ - "2019-09-19", - "2019-09-19" - ], - "xaxis": "x", - "y": [ - 0, - 1282 - ], - "yaxis": "y" - } - ], - "layout": { - "height": 400, - "legend": { - "orientation": "v", - "x": 1.2, - "y": 0.8 - }, - "template": { - "layout": { - "plot_bgcolor": "white" - } - }, - "title": { - "text": "Trial counts and session duration", - "x": 0.18, - "y": 0.85 - }, - "width": 700, - "xaxis": { - "range": [ - "2019-07-25", - "2020-03-08" - ], - "showgrid": false, - "title": { - "text": "Date" - } - }, - "yaxis": { - "range": [ - 0, - 1282 - ], - "title": { - "text": "Trial counts" - } - }, - "yaxis2": { - "color": "red", - "overlaying": "y", - "side": "right", - "title": { - "text": "Session duration (mins)" - } - } - } - }, - "text/html": [ - "
\n", - " \n", - " \n", - "
\n", - " \n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# get trial counts and session length to date\n", "session_info = (behavior_ingest.TrialSet *\n", @@ -1521,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_plotting/contrast_heatmap-Copy1.json b/notebooks/notebooks_plotting/contrast_heatmap-Copy1.json index 8d900d0a..b777fc56 100644 --- a/notebooks/notebooks_plotting/contrast_heatmap-Copy1.json +++ b/notebooks/notebooks_plotting/contrast_heatmap-Copy1.json @@ -1 +1 @@ -{"data": [{"colorbar": {"thickness": 10, "title": {"text": "prob choosing left", "side": "right"}}, "x": ["2019-01-23", "2019-01-24", "2019-01-25", "2019-01-28", "2019-01-29", "2019-01-30", "2019-01-31", "2019-02-01", "2019-02-04", "2019-02-05", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-11", "2019-02-21", "2019-02-22", "2019-02-25"], "y": [100.0, 50.0, 25.0, 12.0, 6.0, 0.0, -6.0, -12.0, -25.0, -50.0, -100.0], "z": [[0.23636363636363636, 0.1111111111111111, 0.15789473684210525, 0.1297709923664122, 0.4768211920529801, 0.8297872340425532, 0.7591240875912408, 0.8666666666666667, 0.9622641509433962, 0.9512195121951219, 0.927536231884058, 0.9620253164556962, 0.9230769230769231, 0.9897959183673469, 1.0, 1.0, 1.0], [0.4772727272727273, 0.14035087719298245, 0.23076923076923078, 0.1836734693877551, 0.6044776119402985, 0.6641221374045801, 0.712, 0.9428571428571428, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, 0.5555555555555556, 0.6802721088435374, 0.8611111111111112, 0.9609375, 0.7761194029850746, 0.984375, 0.9764705882352941, 0.8596491228070176, 0.9512195121951219, 0.7777777777777778, 1.0, 1.0], [null, null, null, null, null, null, null, 0.8658536585365854, 0.9134615384615384, 0.6575342465753424, 0.8904109589041096, 0.9538461538461539, 0.8, 0.9243697478991597, 0.9285714285714286, 0.9, 0.75], [null, null, null, null, null, null, null, 0.6585365853658537, 0.7850467289719626, 0.5454545454545454, 0.835820895522388, 0.8536585365853658, 0.765625, 0.8596491228070176, 0.8333333333333334, 0.75, 0.6666666666666666], [null, null, null, null, null, null, null, 0.84, 0.58, 0.25806451612903225, 0.6075949367088608, 0.6842105263157895, 0.546875, 0.5948275862068966, 0.42857142857142855, 0.3333333333333333, 0.4166666666666667], [null, null, null, null, null, null, null, 0.4358974358974359, 0.38345864661654133, 0.10344827586206896, 0.2571428571428571, 0.3384615384615385, 0.2753623188405797, 0.46464646464646464, 0.3333333333333333, 0.3333333333333333, 0.25], [null, null, null, null, null, null, null, 0.24324324324324326, 0.17857142857142858, 0.045454545454545456, 0.0975609756097561, 0.2376237623762376, 0.11428571428571428, 0.22580645161290322, 0.42857142857142855, 0.25, 0.3333333333333333], [null, null, null, null, null, 0.12, 0.1111111111111111, 0.15217391304347827, 0.12380952380952381, 0.028985507246376812, 0.1044776119402985, 0.10975609756097561, 0.02666666666666667, 0.23255813953488372, 0.2, 0.0, 0.1111111111111111], [0.2857142857142857, 0.1590909090909091, 0.2857142857142857, 0.20408163265306123, 0.3983739837398374, 0.12605042016806722, 0.09868421052631579, 0.08571428571428572, null, null, null, null, null, null, null, null, null], [0.3333333333333333, 0.12903225806451613, 0.21621621621621623, 0.20930232558139536, 0.32673267326732675, 0.14545454545454545, 0.09243697478991597, 0.07865168539325842, 0.046296296296296294, 0.0, 0.016129032258064516, 0.023529411764705882, 0.0, 0.046875, 0.0, 0.1111111111111111, 0.0]], "zmax": 1, "zmin": 0, "type": "heatmap", "uid": "cd663264-7c98-4a87-9bf3-e474faecd225"}], "layout": {"height": 400, "showlegend": false, "title": {"text": "Contrast heatmap"}, "width": 500, "xaxis": {"title": {"text": "Date"}}, "yaxis": {"range": [-100, 100], "title": {"text": "Contrast (%)"}}}} \ No newline at end of file +{"data": [{"colorbar": {"thickness": 10, "title": {"text": "prob choosing left", "side": "right"}}, "x": ["2019-01-23", "2019-01-24", "2019-01-25", "2019-01-28", "2019-01-29", "2019-01-30", "2019-01-31", "2019-02-01", "2019-02-04", "2019-02-05", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-11", "2019-02-21", "2019-02-22", "2019-02-25"], "y": [100.0, 50.0, 25.0, 12.0, 6.0, 0.0, -6.0, -12.0, -25.0, -50.0, -100.0], "z": [[0.23636363636363636, 0.1111111111111111, 0.15789473684210525, 0.1297709923664122, 0.4768211920529801, 0.8297872340425532, 0.7591240875912408, 0.8666666666666667, 0.9622641509433962, 0.9512195121951219, 0.927536231884058, 0.9620253164556962, 0.9230769230769231, 0.9897959183673469, 1.0, 1.0, 1.0], [0.4772727272727273, 0.14035087719298245, 0.23076923076923078, 0.1836734693877551, 0.6044776119402985, 0.6641221374045801, 0.712, 0.9428571428571428, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, 0.5555555555555556, 0.6802721088435374, 0.8611111111111112, 0.9609375, 0.7761194029850746, 0.984375, 0.9764705882352941, 0.8596491228070176, 0.9512195121951219, 0.7777777777777778, 1.0, 1.0], [null, null, null, null, null, null, null, 0.8658536585365854, 0.9134615384615384, 0.6575342465753424, 0.8904109589041096, 0.9538461538461539, 0.8, 0.9243697478991597, 0.9285714285714286, 0.9, 0.75], [null, null, null, null, null, null, null, 0.6585365853658537, 0.7850467289719626, 0.5454545454545454, 0.835820895522388, 0.8536585365853658, 0.765625, 0.8596491228070176, 0.8333333333333334, 0.75, 0.6666666666666666], [null, null, null, null, null, null, null, 0.84, 0.58, 0.25806451612903225, 0.6075949367088608, 0.6842105263157895, 0.546875, 0.5948275862068966, 0.42857142857142855, 0.3333333333333333, 0.4166666666666667], [null, null, null, null, null, null, null, 0.4358974358974359, 0.38345864661654133, 0.10344827586206896, 0.2571428571428571, 0.3384615384615385, 0.2753623188405797, 0.46464646464646464, 0.3333333333333333, 0.3333333333333333, 0.25], [null, null, null, null, null, null, null, 0.24324324324324326, 0.17857142857142858, 0.045454545454545456, 0.0975609756097561, 0.2376237623762376, 0.11428571428571428, 0.22580645161290322, 0.42857142857142855, 0.25, 0.3333333333333333], [null, null, null, null, null, 0.12, 0.1111111111111111, 0.15217391304347827, 0.12380952380952381, 0.028985507246376812, 0.1044776119402985, 0.10975609756097561, 0.02666666666666667, 0.23255813953488372, 0.2, 0.0, 0.1111111111111111], [0.2857142857142857, 0.1590909090909091, 0.2857142857142857, 0.20408163265306123, 0.3983739837398374, 0.12605042016806722, 0.09868421052631579, 0.08571428571428572, null, null, null, null, null, null, null, null, null], [0.3333333333333333, 0.12903225806451613, 0.21621621621621623, 0.20930232558139536, 0.32673267326732675, 0.14545454545454545, 0.09243697478991597, 0.07865168539325842, 0.046296296296296294, 0.0, 0.016129032258064516, 0.023529411764705882, 0.0, 0.046875, 0.0, 0.1111111111111111, 0.0]], "zmax": 1, "zmin": 0, "type": "heatmap", "uid": "cd663264-7c98-4a87-9bf3-e474faecd225"}], "layout": {"height": 400, "showlegend": false, "title": {"text": "Contrast heatmap"}, "width": 500, "xaxis": {"title": {"text": "Date"}}, "yaxis": {"range": [-100, 100], "title": {"text": "Contrast (%)"}}}} diff --git a/notebooks/notebooks_plotting/contrast_heatmap.json b/notebooks/notebooks_plotting/contrast_heatmap.json index fd833baf..1985a8fd 100644 --- a/notebooks/notebooks_plotting/contrast_heatmap.json +++ b/notebooks/notebooks_plotting/contrast_heatmap.json @@ -1 +1 @@ -{"data": [{"colorbar": {"thickness": 10, "title": {"text": "prob choosing right", "side": "right"}}, "x": ["2019-01-07", "2019-01-08", "2019-01-09", "2019-01-10", "2019-01-11", "2019-01-12", "2019-01-13", "2019-01-14", "2019-01-15", "2019-01-16", "2019-01-17", "2019-01-18", "2019-01-19", "2019-01-20", "2019-01-21", "2019-01-22", "2019-01-23", "2019-01-24", "2019-01-25", "2019-01-26", "2019-01-27", "2019-01-28", "2019-01-29", "2019-01-30", "2019-01-31", "2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04", "2019-02-05", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15"], "xgap": 1, "y": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "ygap": 1, "z": [[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.23636363636363636, 0.1111111111111111, 0.15789473684210525, null, null, 0.1297709923664122, 0.4768211920529801, 0.8297872340425532, 0.7591240875912408, 0.8666666666666667, null, null, 0.9622641509433962, 0.9512195121951219, 0.927536231884058, 0.9620253164556962, 0.9230769230769231, null, null, 0.9897959183673469, null, null, null, null, null, null, null, null, null, 1.0, 1.0, null, null, 1.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.4772727272727273, 0.14035087719298245, 0.23076923076923078, null, null, 0.1836734693877551, 0.6044776119402985, 0.6641221374045801, 0.712, 0.9428571428571428, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.5555555555555556, 0.6802721088435374, 0.8611111111111112, null, null, 0.9609375, 0.7761194029850746, 0.984375, 0.9764705882352941, 0.8596491228070176, null, null, 0.9512195121951219, null, null, null, null, null, null, null, null, null, 0.7777777777777778, 1.0, null, null, 1.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.8658536585365854, null, null, 0.9134615384615384, 0.6575342465753424, 0.8904109589041096, 0.9538461538461539, 0.8, null, null, 0.9243697478991597, null, null, null, null, null, null, null, null, null, 0.9285714285714286, 0.9, null, null, 0.75, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.6585365853658537, null, null, 0.7850467289719626, 0.5454545454545454, 0.835820895522388, 0.8536585365853658, 0.765625, null, null, 0.8596491228070176, null, null, null, null, null, null, null, null, null, 0.8333333333333334, 0.75, null, null, 0.6666666666666666, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.84, null, null, 0.58, 0.25806451612903225, 0.6075949367088608, 0.6842105263157895, 0.546875, null, null, 0.5948275862068966, null, null, null, null, null, null, null, null, null, 0.42857142857142855, 0.3333333333333333, null, null, 0.4166666666666667, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.4358974358974359, null, null, 0.38345864661654133, 0.10344827586206896, 0.2571428571428571, 0.3384615384615385, 0.2753623188405797, null, null, 0.46464646464646464, null, null, null, null, null, null, null, null, null, 0.3333333333333333, 0.3333333333333333, null, null, 0.25, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.24324324324324326, null, null, 0.17857142857142858, 0.045454545454545456, 0.0975609756097561, 0.2376237623762376, 0.11428571428571428, null, null, 0.22580645161290322, null, null, null, null, null, null, null, null, null, 0.42857142857142855, 0.25, null, null, 0.3333333333333333, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.12, 0.1111111111111111, 0.15217391304347827, null, null, 0.12380952380952381, 0.028985507246376812, 0.1044776119402985, 0.10975609756097561, 0.02666666666666667, null, null, 0.23255813953488372, null, null, null, null, null, null, null, null, null, 0.2, 0.0, null, null, 0.1111111111111111, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.2857142857142857, 0.1590909090909091, 0.2857142857142857, null, null, 0.20408163265306123, 0.3983739837398374, 0.12605042016806722, 0.09868421052631579, 0.08571428571428572, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.3333333333333333, 0.12903225806451613, 0.21621621621621623, null, null, 0.20930232558139536, 0.32673267326732675, 0.14545454545454545, 0.09243697478991597, 0.07865168539325842, null, null, 0.046296296296296294, 0.0, 0.016129032258064516, 0.023529411764705882, 0.0, null, null, 0.046875, null, null, null, null, null, null, null, null, null, 0.0, 0.1111111111111111, null, null, 0.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]], "zmax": 1, "zmin": 0, "type": "heatmap"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-01-07", "2019-01-07"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-14", "2019-01-14"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-21", "2019-01-21"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-28", "2019-01-28"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-04", "2019-02-04"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-11", "2019-02-11"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-18", "2019-02-18"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-25", "2019-02-25"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-04", "2019-03-04"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-11", "2019-03-11"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "title": {"text": "Contrast heatmap", "x": 0.3, "y": 0.85}, "width": 700, "xaxis": {"showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 11], "tickmode": "array", "ticktext": ["-100.0", "-50.0", "-25.0", "-12.0", "-6.0", "0.0", "6.0", "12.0", "25.0", "50.0", "100.0"], "tickvals": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "title": {"text": "Contrast (%)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"colorbar": {"thickness": 10, "title": {"text": "prob choosing right", "side": "right"}}, "x": ["2019-01-07", "2019-01-08", "2019-01-09", "2019-01-10", "2019-01-11", "2019-01-12", "2019-01-13", "2019-01-14", "2019-01-15", "2019-01-16", "2019-01-17", "2019-01-18", "2019-01-19", "2019-01-20", "2019-01-21", "2019-01-22", "2019-01-23", "2019-01-24", "2019-01-25", "2019-01-26", "2019-01-27", "2019-01-28", "2019-01-29", "2019-01-30", "2019-01-31", "2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04", "2019-02-05", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15"], "xgap": 1, "y": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "ygap": 1, "z": [[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.23636363636363636, 0.1111111111111111, 0.15789473684210525, null, null, 0.1297709923664122, 0.4768211920529801, 0.8297872340425532, 0.7591240875912408, 0.8666666666666667, null, null, 0.9622641509433962, 0.9512195121951219, 0.927536231884058, 0.9620253164556962, 0.9230769230769231, null, null, 0.9897959183673469, null, null, null, null, null, null, null, null, null, 1.0, 1.0, null, null, 1.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.4772727272727273, 0.14035087719298245, 0.23076923076923078, null, null, 0.1836734693877551, 0.6044776119402985, 0.6641221374045801, 0.712, 0.9428571428571428, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.5555555555555556, 0.6802721088435374, 0.8611111111111112, null, null, 0.9609375, 0.7761194029850746, 0.984375, 0.9764705882352941, 0.8596491228070176, null, null, 0.9512195121951219, null, null, null, null, null, null, null, null, null, 0.7777777777777778, 1.0, null, null, 1.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.8658536585365854, null, null, 0.9134615384615384, 0.6575342465753424, 0.8904109589041096, 0.9538461538461539, 0.8, null, null, 0.9243697478991597, null, null, null, null, null, null, null, null, null, 0.9285714285714286, 0.9, null, null, 0.75, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.6585365853658537, null, null, 0.7850467289719626, 0.5454545454545454, 0.835820895522388, 0.8536585365853658, 0.765625, null, null, 0.8596491228070176, null, null, null, null, null, null, null, null, null, 0.8333333333333334, 0.75, null, null, 0.6666666666666666, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.84, null, null, 0.58, 0.25806451612903225, 0.6075949367088608, 0.6842105263157895, 0.546875, null, null, 0.5948275862068966, null, null, null, null, null, null, null, null, null, 0.42857142857142855, 0.3333333333333333, null, null, 0.4166666666666667, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.4358974358974359, null, null, 0.38345864661654133, 0.10344827586206896, 0.2571428571428571, 0.3384615384615385, 0.2753623188405797, null, null, 0.46464646464646464, null, null, null, null, null, null, null, null, null, 0.3333333333333333, 0.3333333333333333, null, null, 0.25, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.24324324324324326, null, null, 0.17857142857142858, 0.045454545454545456, 0.0975609756097561, 0.2376237623762376, 0.11428571428571428, null, null, 0.22580645161290322, null, null, null, null, null, null, null, null, null, 0.42857142857142855, 0.25, null, null, 0.3333333333333333, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.12, 0.1111111111111111, 0.15217391304347827, null, null, 0.12380952380952381, 0.028985507246376812, 0.1044776119402985, 0.10975609756097561, 0.02666666666666667, null, null, 0.23255813953488372, null, null, null, null, null, null, null, null, null, 0.2, 0.0, null, null, 0.1111111111111111, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.2857142857142857, 0.1590909090909091, 0.2857142857142857, null, null, 0.20408163265306123, 0.3983739837398374, 0.12605042016806722, 0.09868421052631579, 0.08571428571428572, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.3333333333333333, 0.12903225806451613, 0.21621621621621623, null, null, 0.20930232558139536, 0.32673267326732675, 0.14545454545454545, 0.09243697478991597, 0.07865168539325842, null, null, 0.046296296296296294, 0.0, 0.016129032258064516, 0.023529411764705882, 0.0, null, null, 0.046875, null, null, null, null, null, null, null, null, null, 0.0, 0.1111111111111111, null, null, 0.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]], "zmax": 1, "zmin": 0, "type": "heatmap"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-01-07", "2019-01-07"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-14", "2019-01-14"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-21", "2019-01-21"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-01-28", "2019-01-28"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-04", "2019-02-04"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-11", "2019-02-11"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-18", "2019-02-18"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-25", "2019-02-25"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-04", "2019-03-04"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-11", "2019-03-11"], "xaxis": "x", "y": [-100, 100], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "title": {"text": "Contrast heatmap", "x": 0.3, "y": 0.85}, "width": 700, "xaxis": {"showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 11], "tickmode": "array", "ticktext": ["-100.0", "-50.0", "-25.0", "-12.0", "-6.0", "0.0", "6.0", "12.0", "25.0", "50.0", "100.0"], "tickvals": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "title": {"text": "Contrast (%)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/date_reaction_time_contrast.json b/notebooks/notebooks_plotting/date_reaction_time_contrast.json index 18a5c27c..6310075f 100644 --- a/notebooks/notebooks_plotting/date_reaction_time_contrast.json +++ b/notebooks/notebooks_plotting/date_reaction_time_contrast.json @@ -1 +1 @@ -{"data": [{"error_y": {"array": [0.04384999999999195, 0.023000000000010346, 0.008000000000009777, 0.4321000000000481, 0.10550000000000104, 0.05535000000000423, 0.05189999999998918, 0.032399999999995543, 0.0], "arrayminus": [0.03585000000000349, 0.03294999999998538, 0.12579999999999814, 0.2131000000000256, 0.13974999999995497, 0.05285000000000162, 0.1945000000000121, 0.019300000000015416, 0.0341999999999949], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.30415000000001413, 0.28709999999999525, 0.4508999999999901, 0.614200000000011, 0.4179499999999816, 0.3319500000000013, 0.5697000000000116, 0.25039999999998486, 0.2541999999999973], "type": "scatter", "uid": "31daeb3c-0b75-4326-9c48-0659bb1fb655"}, {"error_y": {"array": [0.028999999999996362, 0.009000000000014552, 0.030700000000024374, 0.016200000000083037, 0.06889999999992824, 0.143950000000018, 0.0, 0.0, 0.0], "arrayminus": [0.08935000000002447, 0.04529999999999745, 0.07779999999991105, 0.04144999999996912, 0.08950000000015734, 0.14639999999997144, 0.5720000000001164, 0.018100000000004002, 0.148900000000026], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.31929999999999836, 0.3407999999999447, 0.331299999999942, 0.434599999999989, 0.3734000000000606, 0.42714999999998327, 0.8816000000001623, 0.23730000000000473, 0.23440000000005057], "type": "scatter", "uid": "cac11a33-6bae-416e-ab2c-e66e201e2fca"}, {"error_y": {"array": [0.006050000000016098, 0.01140000000003738, 0.0, 0.030200000000036198, 0.044750000000135515, 0.011999999999943611, 0.01160000000004402, 0.010699999999928878, 0.006199999999978445], "arrayminus": [0.022449999999992087, 0.03974999999991269, 0.5290000000000532, 0.03129999999998745, 0.06349999999991951, 0.02650000000005548, 0.029499999999870852, 0.016799999999989268, 0.008300000000019736], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.2609499999999798, 0.31224999999994907, 0.7545000000000073, 0.245900000000006, 0.3403999999999314, 0.26310000000000855, 0.3064999999999145, 0.23050000000000637, 0.21970000000004575], "type": "scatter", "uid": "a252b291-fc8a-4e61-854c-9f47f0628044"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.5", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.30415000000001413, 0.28709999999999525, 0.4508999999999901, 0.614200000000011, 0.4179499999999816, 0.3319500000000013, 0.5697000000000116, 0.25039999999998486, 0.2541999999999973], "type": "scatter", "uid": "89007021-cb15-4d65-a25e-36dd4777f798"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.31929999999999836, 0.3407999999999447, 0.331299999999942, 0.434599999999989, 0.3734000000000606, 0.42714999999998327, 0.8816000000001623, 0.23730000000000473, 0.23440000000005057], "type": "scatter", "uid": "d8f43174-c76c-49c2-a24e-deadfb39f9b8"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.2609499999999798, 0.31224999999994907, 0.7545000000000073, 0.245900000000006, 0.3403999999999314, 0.26310000000000855, 0.3064999999999145, 0.23050000000000637, 0.21970000000004575], "type": "scatter", "uid": "9ba2b4fb-bd70-42af-b676-1859926468b0"}], "layout": {"height": 400, "title": {"text": "Reaction time - contrast"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"title": {"text": "Reaction time (s)"}}}} \ No newline at end of file +{"data": [{"error_y": {"array": [0.04384999999999195, 0.023000000000010346, 0.008000000000009777, 0.4321000000000481, 0.10550000000000104, 0.05535000000000423, 0.05189999999998918, 0.032399999999995543, 0.0], "arrayminus": [0.03585000000000349, 0.03294999999998538, 0.12579999999999814, 0.2131000000000256, 0.13974999999995497, 0.05285000000000162, 0.1945000000000121, 0.019300000000015416, 0.0341999999999949], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.30415000000001413, 0.28709999999999525, 0.4508999999999901, 0.614200000000011, 0.4179499999999816, 0.3319500000000013, 0.5697000000000116, 0.25039999999998486, 0.2541999999999973], "type": "scatter", "uid": "31daeb3c-0b75-4326-9c48-0659bb1fb655"}, {"error_y": {"array": [0.028999999999996362, 0.009000000000014552, 0.030700000000024374, 0.016200000000083037, 0.06889999999992824, 0.143950000000018, 0.0, 0.0, 0.0], "arrayminus": [0.08935000000002447, 0.04529999999999745, 0.07779999999991105, 0.04144999999996912, 0.08950000000015734, 0.14639999999997144, 0.5720000000001164, 0.018100000000004002, 0.148900000000026], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.31929999999999836, 0.3407999999999447, 0.331299999999942, 0.434599999999989, 0.3734000000000606, 0.42714999999998327, 0.8816000000001623, 0.23730000000000473, 0.23440000000005057], "type": "scatter", "uid": "cac11a33-6bae-416e-ab2c-e66e201e2fca"}, {"error_y": {"array": [0.006050000000016098, 0.01140000000003738, 0.0, 0.030200000000036198, 0.044750000000135515, 0.011999999999943611, 0.01160000000004402, 0.010699999999928878, 0.006199999999978445], "arrayminus": [0.022449999999992087, 0.03974999999991269, 0.5290000000000532, 0.03129999999998745, 0.06349999999991951, 0.02650000000005548, 0.029499999999870852, 0.016799999999989268, 0.008300000000019736], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.2609499999999798, 0.31224999999994907, 0.7545000000000073, 0.245900000000006, 0.3403999999999314, 0.26310000000000855, 0.3064999999999145, 0.23050000000000637, 0.21970000000004575], "type": "scatter", "uid": "a252b291-fc8a-4e61-854c-9f47f0628044"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.5", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.30415000000001413, 0.28709999999999525, 0.4508999999999901, 0.614200000000011, 0.4179499999999816, 0.3319500000000013, 0.5697000000000116, 0.25039999999998486, 0.2541999999999973], "type": "scatter", "uid": "89007021-cb15-4d65-a25e-36dd4777f798"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.31929999999999836, 0.3407999999999447, 0.331299999999942, 0.434599999999989, 0.3734000000000606, 0.42714999999998327, 0.8816000000001623, 0.23730000000000473, 0.23440000000005057], "type": "scatter", "uid": "d8f43174-c76c-49c2-a24e-deadfb39f9b8"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-1.0, -0.25, -0.05999999865889549, -0.019999999552965164, 0.0, 0.019999999552965164, 0.05999999865889549, 0.25, 1.0], "y": [0.2609499999999798, 0.31224999999994907, 0.7545000000000073, 0.245900000000006, 0.3403999999999314, 0.26310000000000855, 0.3064999999999145, 0.23050000000000637, 0.21970000000004575], "type": "scatter", "uid": "9ba2b4fb-bd70-42af-b676-1859926468b0"}], "layout": {"height": 400, "title": {"text": "Reaction time - contrast"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"title": {"text": "Reaction time (s)"}}}} diff --git a/notebooks/notebooks_plotting/fit_pars.json b/notebooks/notebooks_plotting/fit_pars.json index 44055146..d2c8fa44 100644 --- a/notebooks/notebooks_plotting/fit_pars.json +++ b/notebooks/notebooks_plotting/fit_pars.json @@ -1 +1 @@ -{"data": [{"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": true, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [16.7754, 30.1857, 19.2202, 20.5585, 12.5584, 14.6569, 10.3264, 16.7634, 12.5161, 10.5736, 11.0573, 10.3284, 7.55141, 5.6668, 9.71218, 20.5857, 18.1496, 12.4867, 8.85846, 7.83484, 5.51512, 10.3364, 11.7039, 11.5655, 16.4235, 12.8918, 5.34707, 0.523064, 17.7791, 9.40366, 41.5333, 40.2977, 13.393, 9.66737, 20.011, 21.8307, 12.4444, 19.9108, 16.8253, 13.7974, 20.8977, 15.3712, 3.52582, 20.2913, 12.3486, 14.5013, 15.7738, 13.6139, 12.5836, 18.8884, 8.67302, 7.14815, 10.567, 12.5935, 23.4473], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [40.0348, 40.5976, 24.3641, 2.89297, 3.65332, 5.7701, 3.36851, -0.00605751, 1.79205, 0.0103413, -0.986595, -5.01262, -7.88318, -7.3783, -0.00895387, -18.5355, -24.8298, -1.88124, -0.000985119, 1.82043, 0.794392, -1.78258, -0.621804, -1.80648, 0.00244633, 5.70883, -10.0292, -10.7913, -9.22812, -3.18215, -13.3968, -8.09715, 0.00123622, 0.846806, -1.76699, -0.0647602, 6.26873, 3.62174, 0.00046104, -5.35177, -6.85996, -2.57824, -1.7776, -2.80199, 1.82941, 0.618882, -1.42619, -0.00459785, -2.66457, 0.00428932, -11.1575, -4.7055, 0.000884174, -0.0128951, -3.92672], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [0.418605, 0.408068, 0.202479, 0.112387, 0.0573851, 0.0257207, 0.0414128, 9.58956e-12, 0.0350024, 5.76718e-12, 2.24996e-11, 2.23885e-12, 3.76801e-11, 0.0551008, 0.190833, 0.0254471, 0.0701713, 0.00117274, 0.0714957, 2.7519e-12, 3.82037e-11, 0.00935206, 0.119576, 0.124722, 1.00647e-11, 0.0336096, 1.30121e-11, 1.08582e-09, 0.00111656, 0.05276, 4.05891e-11, 1.04698e-12, 1.19898e-10, 1.32048e-10, 0.0605427, 0.232516, 0.14124, 4.54328e-05, 7.31274e-11, 0.00787899, 3.41147e-11, 0.0501242, 0.0708996, 1.18578e-11, 8.40877e-09, 3.35046e-09, 0.00677941, 5.79038e-11, 5.16398e-11, 0.0377106, 0.00783597, 2.78027e-10, 0.0345808, 3.04773e-11, 0.0406222], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [0.305085, 0.051737, 0.0334727, 0.131276, 0.155378, 0.0981793, 0.0470461, 3.79312e-06, 0.0462852, 0.0693975, 0.00153598, 0.0432877, 0.0546435, 0.0255237, 1.43804e-12, 1.8426e-12, 4.19088e-12, 2.58364e-06, 1.54728e-11, 0.00400964, 0.0939997, 3.13292e-11, 1.96158e-11, 5.61396e-10, 0.0728164, 1.60334e-07, 0.0468926, 0.216665, 0.00261401, 0.0447064, 6.24772e-11, 0.0718754, 1.02535e-10, 0.0421264, 1.56633e-10, 7.94355e-12, 8.33297e-10, 3.21951e-08, 8.44591e-11, 2.67845e-12, 0.0860305, 8.81858e-12, 0.00159124, 0.000178919, 0.00556242, 0.00219377, 1.52497e-06, 3.44193e-11, 0.0445547, 1.52782e-11, 2.01451e-11, 0.0205832, 6.18818e-11, 6.60961e-11, 7.67261e-13], "yaxis": "y", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": true, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [8.31819, 11.8583, 10.0016, 9.85056, 32.2859, 10.1408, 38.6798, 1.46699, 14.0143, 16.4108, 15.7674, 14.8839, 13.5429, 12.4603, 20.7336, 12.4794, 16.7851, 15.6777, 12.6847, 29.961, 3.36038, 19.1096, 25.4267, 11.8538, 15.7654, 13.9079, 27.737, 31.4526, 13.4559, 16.5195, 27.787, 33.8347, 40.2331, 0.00176432, 11.3224, 17.1545, 17.858, 22.0802, 22.2828, 19.1855, 24.1048, 22.5027, 7.08321, 23.8473, 26.5671, 29.7423], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [5.28432, 2.26192, -3.73832, -6.57473, -1.87622, -8.09244, -0.0663304, -14.8932, -5.12286, -5.8536, 1.91311, -2.29962, -7.13891, -3.18799, -16.4886, -4.24281, -14.9746, -4.56793, -5.0488, -7.63592, -0.988086, -7.30074, -11.6457, -10.028, -10.6505, -6.32941, -14.2461, 0.000130392, -0.0399873, -8.95981, -16.1, -16.2191, -21.4764, -0.00188201, -4.74732, -8.81272, -6.16749, -6.65162, -5.77104, -0.00761786, -16.1828, -17.9888, -4.96626, -23.4363, -16.9963, -13.649], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [0.149483, 0.144388, 0.0311483, 1.14448e-10, 1.52661e-11, 3.626e-10, 0.229432, 0.5, 0.0242584, 2.76459e-06, 3.35168e-10, 3.45558e-09, 0.0166642, 0.0570372, 3.40378e-11, 0.0585095, 0.00768122, 0.0458026, 6.1378e-11, 0.0196184, 0.34773, 0.091671, 3.08568e-05, 7.10211e-12, 1.53729e-11, 0.214633, 0.0881787, 0.00546438, 0.41867, 9.66618e-08, 7.55084e-11, 1.15438e-12, 1.52132e-08, 0.111077, 0.00291507, 8.94598e-11, 0.31886, 2.92887e-08, 0.000201736, 0.265218, 5.73962e-08, 0.0136686, 0.0371167, 0.0850928, 3.60691e-09, 0.11916], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [4.91298e-12, 4.30795e-07, 0.0753848, 0.0259967, 0.0809911, 0.0153534, 2.4749e-12, 0.0957447, 1.99134e-05, 6.29919e-07, 0.0834285, 0.0199181, 9.83206e-12, 0.095581, 2.28582e-11, 0.0507208, 0.131603, 0.145253, 0.00744419, 6.95469e-12, 0.0205965, 0.129366, 0.00226725, 0.406147, 0.0191575, 0.0309604, 0.0190604, 4.34661e-12, 7.17956e-11, 3.76762e-06, 0.0724611, 0.0390942, 1.06994e-08, 0.0756226, 0.00976542, 0.0394604, 6.05168e-12, 0.000138065, 6.79488e-12, 1.24785e-11, 3.2055e-05, 6.3455e-12, 7.89558e-12, 4.99141e-12, 0.0254454, 9.05035e-10], "yaxis": "y", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": true, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [9.30057, 8.52759, 14.6501, 12.2414, 15.497, 10.953, 34.7909, 5.8672, 15.3521, 11.7294, 16.0956, 15.2046, 21.0257, 20.5086, 28.1608, 36.226, 45.1996, 13.5333, 14.7714, 13.7289, 10.5019, 17.0538, 25.9181, 36.7338, 15.6876, 16.6264, 24.8595, 11.3239, 42.4709, 26.4475, 14.7631, 28.1778, 13.1289, 4.72713, 25.7571, 20.3515, 21.2645, 14.0031, 12.5965, 20.8112, 11.8035, 15.194, 6.05883, 34.6688, 26.7834, 57.0347], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [7.21834, 0.350718, 0.00499667, 0.138351, -0.374768, 0.899582, 3.49091, -11.6059, 4.50919, 4.70327, 12.4355, 4.54751, -1.25474, 5.40439, 2.55236, 6.95352, -2.06647, 0.0128961, 3.09559, 3.20948, 5.9401, 13.4628, 4.35608, 2.15818, 3.30322, 8.08887, 5.16055, 9.55427, 14.1738, 9.47584, -0.737839, 10.7695, 9.04684, -1.21522, 6.03897, 8.46384, 0.527024, 9.63373, 0.809135, 13.3047, 8.56046, -4.28918, 0.62588, 9.77951, 8.0247, 12.3126], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [1.05373e-10, 0.00897082, 1.20636e-10, 3.31532e-11, 1.80466e-11, 0.0307866, 5.04024e-10, 0.0201749, 8.13127e-06, 0.0127137, 3.36669e-09, 0.0114483, 9.85628e-05, 0.053466, 6.07416e-08, 5.95771e-11, 1.70147e-13, 1.53124e-11, 0.0899199, 0.0202524, 0.17068, 0.0892769, 0.0563798, 0.0533099, 0.0344894, 3.59018e-11, 1.13168e-05, 0.0675662, 0.0511848, 8.29176e-13, 0.0485975, 0.0735155, 0.100304, 0.128461, 4.07027e-07, 0.000153989, 1.26922e-09, 0.0515952, 0.0227627, 0.0324384, 0.0620465, 0.0522054, 0.0385374, 0.0891045, 0.0410168, 0.0641132], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [0.0524509, 2.38996e-11, 1.03092e-09, 0.0585833, 0.0232189, 5.45246e-11, 1.21532e-09, 0.142735, 8.97974e-07, 0.0220075, 1.23985e-10, 4.45417e-11, 6.66053e-11, 2.87362e-11, 1.76759e-11, 0.000642538, 0.306098, 0.221676, 2.25794e-11, 2.45676e-11, 0.0417997, 7.50744e-11, 1.31766e-09, 0.352663, 1.73016e-11, 5.00907e-09, 0.130769, 0.228618, 0.000171663, 0.270363, 0.04696, 1.06408e-06, 0.000251658, 1.92841e-11, 0.0540398, 3.80569e-07, 9.71363e-09, 7.87257e-11, 3.06717e-11, 7.84979e-09, 6.35159e-12, 0.0733397, 0.0491764, 3.58544e-12, 4.28269e-13, 1.99194e-07], "yaxis": "y", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": true, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x4", "y": [19, 19], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": true, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": true, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": true, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": true, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11", "2020-02-11", "2019-10-29"], "xaxis": "x3", "y": [16, 16, -16, -16], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x2", "y": [0.2, 0.2], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x", "y": [0.2, 0.2], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}], "layout": {"height": 1000, "legend": {"orientation": "v", "x": 1.1, "y": 1}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Fit Parameters", "x": 0.3, "y": 0.93}, "width": 600, "xaxis": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false, "title": {"text": "Date"}}, "yaxis": {"anchor": "x", "domain": [0, 0.2], "range": [-0.02, 1.02], "showgrid": false, "title": {"text": "$Lapse high\\ (\\lambda)$"}}, "xaxis2": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis2": {"anchor": "x2", "domain": [0.25, 0.45], "range": [-0.02, 1.02], "showgrid": false, "title": {"text": "$Lapse low\\ (\\gamma)$"}}, "xaxis3": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis3": {"anchor": "x3", "domain": [0.5, 0.7], "range": [-105, 105], "showgrid": false, "title": {"text": "$Bias\\ (\\mu)$"}}, "xaxis4": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis4": {"anchor": "x4", "domain": [0.75, 1], "range": [-5, 105], "showgrid": false, "title": {"text": "$Threshold\\ (\\sigma)$"}}}} \ No newline at end of file +{"data": [{"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": true, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [16.7754, 30.1857, 19.2202, 20.5585, 12.5584, 14.6569, 10.3264, 16.7634, 12.5161, 10.5736, 11.0573, 10.3284, 7.55141, 5.6668, 9.71218, 20.5857, 18.1496, 12.4867, 8.85846, 7.83484, 5.51512, 10.3364, 11.7039, 11.5655, 16.4235, 12.8918, 5.34707, 0.523064, 17.7791, 9.40366, 41.5333, 40.2977, 13.393, 9.66737, 20.011, 21.8307, 12.4444, 19.9108, 16.8253, 13.7974, 20.8977, 15.3712, 3.52582, 20.2913, 12.3486, 14.5013, 15.7738, 13.6139, 12.5836, 18.8884, 8.67302, 7.14815, 10.567, 12.5935, 23.4473], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [40.0348, 40.5976, 24.3641, 2.89297, 3.65332, 5.7701, 3.36851, -0.00605751, 1.79205, 0.0103413, -0.986595, -5.01262, -7.88318, -7.3783, -0.00895387, -18.5355, -24.8298, -1.88124, -0.000985119, 1.82043, 0.794392, -1.78258, -0.621804, -1.80648, 0.00244633, 5.70883, -10.0292, -10.7913, -9.22812, -3.18215, -13.3968, -8.09715, 0.00123622, 0.846806, -1.76699, -0.0647602, 6.26873, 3.62174, 0.00046104, -5.35177, -6.85996, -2.57824, -1.7776, -2.80199, 1.82941, 0.618882, -1.42619, -0.00459785, -2.66457, 0.00428932, -11.1575, -4.7055, 0.000884174, -0.0128951, -3.92672], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [0.418605, 0.408068, 0.202479, 0.112387, 0.0573851, 0.0257207, 0.0414128, 9.58956e-12, 0.0350024, 5.76718e-12, 2.24996e-11, 2.23885e-12, 3.76801e-11, 0.0551008, 0.190833, 0.0254471, 0.0701713, 0.00117274, 0.0714957, 2.7519e-12, 3.82037e-11, 0.00935206, 0.119576, 0.124722, 1.00647e-11, 0.0336096, 1.30121e-11, 1.08582e-09, 0.00111656, 0.05276, 4.05891e-11, 1.04698e-12, 1.19898e-10, 1.32048e-10, 0.0605427, 0.232516, 0.14124, 4.54328e-05, 7.31274e-11, 0.00787899, 3.41147e-11, 0.0501242, 0.0708996, 1.18578e-11, 8.40877e-09, 3.35046e-09, 0.00677941, 5.79038e-11, 5.16398e-11, 0.0377106, 0.00783597, 2.78027e-10, 0.0345808, 3.04773e-11, 0.0406222], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.133, 0.133, 0.133, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.5", "showlegend": false, "x": ["2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [0.305085, 0.051737, 0.0334727, 0.131276, 0.155378, 0.0981793, 0.0470461, 3.79312e-06, 0.0462852, 0.0693975, 0.00153598, 0.0432877, 0.0546435, 0.0255237, 1.43804e-12, 1.8426e-12, 4.19088e-12, 2.58364e-06, 1.54728e-11, 0.00400964, 0.0939997, 3.13292e-11, 1.96158e-11, 5.61396e-10, 0.0728164, 1.60334e-07, 0.0468926, 0.216665, 0.00261401, 0.0447064, 6.24772e-11, 0.0718754, 1.02535e-10, 0.0421264, 1.56633e-10, 7.94355e-12, 8.33297e-10, 3.21951e-08, 8.44591e-11, 2.67845e-12, 0.0860305, 8.81858e-12, 0.00159124, 0.000178919, 0.00556242, 0.00219377, 1.52497e-06, 3.44193e-11, 0.0445547, 1.52782e-11, 2.01451e-11, 0.0205832, 6.18818e-11, 6.60961e-11, 7.67261e-13], "yaxis": "y", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": true, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [8.31819, 11.8583, 10.0016, 9.85056, 32.2859, 10.1408, 38.6798, 1.46699, 14.0143, 16.4108, 15.7674, 14.8839, 13.5429, 12.4603, 20.7336, 12.4794, 16.7851, 15.6777, 12.6847, 29.961, 3.36038, 19.1096, 25.4267, 11.8538, 15.7654, 13.9079, 27.737, 31.4526, 13.4559, 16.5195, 27.787, 33.8347, 40.2331, 0.00176432, 11.3224, 17.1545, 17.858, 22.0802, 22.2828, 19.1855, 24.1048, 22.5027, 7.08321, 23.8473, 26.5671, 29.7423], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [5.28432, 2.26192, -3.73832, -6.57473, -1.87622, -8.09244, -0.0663304, -14.8932, -5.12286, -5.8536, 1.91311, -2.29962, -7.13891, -3.18799, -16.4886, -4.24281, -14.9746, -4.56793, -5.0488, -7.63592, -0.988086, -7.30074, -11.6457, -10.028, -10.6505, -6.32941, -14.2461, 0.000130392, -0.0399873, -8.95981, -16.1, -16.2191, -21.4764, -0.00188201, -4.74732, -8.81272, -6.16749, -6.65162, -5.77104, -0.00761786, -16.1828, -17.9888, -4.96626, -23.4363, -16.9963, -13.649], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [0.149483, 0.144388, 0.0311483, 1.14448e-10, 1.52661e-11, 3.626e-10, 0.229432, 0.5, 0.0242584, 2.76459e-06, 3.35168e-10, 3.45558e-09, 0.0166642, 0.0570372, 3.40378e-11, 0.0585095, 0.00768122, 0.0458026, 6.1378e-11, 0.0196184, 0.34773, 0.091671, 3.08568e-05, 7.10211e-12, 1.53729e-11, 0.214633, 0.0881787, 0.00546438, 0.41867, 9.66618e-08, 7.55084e-11, 1.15438e-12, 1.52132e-08, 0.111077, 0.00291507, 8.94598e-11, 0.31886, 2.92887e-08, 0.000201736, 0.265218, 5.73962e-08, 0.0136686, 0.0371167, 0.0850928, 3.60691e-09, 0.11916], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.2", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [4.91298e-12, 4.30795e-07, 0.0753848, 0.0259967, 0.0809911, 0.0153534, 2.4749e-12, 0.0957447, 1.99134e-05, 6.29919e-07, 0.0834285, 0.0199181, 9.83206e-12, 0.095581, 2.28582e-11, 0.0507208, 0.131603, 0.145253, 0.00744419, 6.95469e-12, 0.0205965, 0.129366, 0.00226725, 0.406147, 0.0191575, 0.0309604, 0.0190604, 4.34661e-12, 7.17956e-11, 3.76762e-06, 0.0724611, 0.0390942, 1.06994e-08, 0.0756226, 0.00976542, 0.0394604, 6.05168e-12, 0.000138065, 6.79488e-12, 1.24785e-11, 3.2055e-05, 6.3455e-12, 7.89558e-12, 4.99141e-12, 0.0254454, 9.05035e-10], "yaxis": "y", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": true, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x4", "y": [9.30057, 8.52759, 14.6501, 12.2414, 15.497, 10.953, 34.7909, 5.8672, 15.3521, 11.7294, 16.0956, 15.2046, 21.0257, 20.5086, 28.1608, 36.226, 45.1996, 13.5333, 14.7714, 13.7289, 10.5019, 17.0538, 25.9181, 36.7338, 15.6876, 16.6264, 24.8595, 11.3239, 42.4709, 26.4475, 14.7631, 28.1778, 13.1289, 4.72713, 25.7571, 20.3515, 21.2645, 14.0031, 12.5965, 20.8112, 11.8035, 15.194, 6.05883, 34.6688, 26.7834, 57.0347], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x3", "y": [7.21834, 0.350718, 0.00499667, 0.138351, -0.374768, 0.899582, 3.49091, -11.6059, 4.50919, 4.70327, 12.4355, 4.54751, -1.25474, 5.40439, 2.55236, 6.95352, -2.06647, 0.0128961, 3.09559, 3.20948, 5.9401, 13.4628, 4.35608, 2.15818, 3.30322, 8.08887, 5.16055, 9.55427, 14.1738, 9.47584, -0.737839, 10.7695, 9.04684, -1.21522, 6.03897, 8.46384, 0.527024, 9.63373, 0.809135, 13.3047, 8.56046, -4.28918, 0.62588, 9.77951, 8.0247, 12.3126], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x2", "y": [1.05373e-10, 0.00897082, 1.20636e-10, 3.31532e-11, 1.80466e-11, 0.0307866, 5.04024e-10, 0.0201749, 8.13127e-06, 0.0127137, 3.36669e-09, 0.0114483, 9.85628e-05, 0.053466, 6.07416e-08, 5.95771e-11, 1.70147e-13, 1.53124e-11, 0.0899199, 0.0202524, 0.17068, 0.0892769, 0.0563798, 0.0533099, 0.0344894, 3.59018e-11, 1.13168e-05, 0.0675662, 0.0511848, 8.29176e-13, 0.0485975, 0.0735155, 0.100304, 0.128461, 4.07027e-07, 0.000153989, 1.26922e-09, 0.0515952, 0.0227627, 0.0324384, 0.0620465, 0.0522054, 0.0385374, 0.0891045, 0.0410168, 0.0641132], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "p_left", "marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1)", "opacity": 0.8, "size": 5}, "mode": "markers", "name": "p_left = 0.8", "showlegend": false, "x": ["2019-12-05", "2019-12-06", "2019-12-09", "2019-12-10", "2019-12-11", "2019-12-12", "2019-12-13", "2019-12-17", "2019-12-18", "2019-12-19", "2019-12-20", "2019-12-23", "2019-12-24", "2019-12-27", "2019-12-28", "2019-12-29", "2019-12-30", "2019-12-31", "2020-01-01", "2020-01-02", "2020-01-03", "2020-01-06", "2020-01-07", "2020-01-08", "2020-01-09", "2020-01-12", "2020-01-13", "2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-29", "2020-01-30", "2020-01-31", "2020-02-01", "2020-02-03", "2020-02-04", "2020-02-06", "2020-02-07", "2020-02-08"], "xaxis": "x", "y": [0.0524509, 2.38996e-11, 1.03092e-09, 0.0585833, 0.0232189, 5.45246e-11, 1.21532e-09, 0.142735, 8.97974e-07, 0.0220075, 1.23985e-10, 4.45417e-11, 6.66053e-11, 2.87362e-11, 1.76759e-11, 0.000642538, 0.306098, 0.221676, 2.25794e-11, 2.45676e-11, 0.0417997, 7.50744e-11, 1.31766e-09, 0.352663, 1.73016e-11, 5.00907e-09, 0.130769, 0.228618, 0.000171663, 0.270363, 0.04696, 1.06408e-06, 0.000251658, 1.92841e-11, 0.0540398, 3.80569e-07, 9.71363e-09, 7.87257e-11, 3.06717e-11, 7.84979e-09, 6.35159e-12, 0.0733397, 0.0491764, 3.58544e-12, 4.28269e-13, 1.99194e-07], "yaxis": "y", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": true, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x4", "y": [19, 19], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": true, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": true, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": true, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": true, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x4", "y": [0, 100], "yaxis": "y4", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11", "2020-02-11", "2019-10-29"], "xaxis": "x3", "y": [16, 16, -16, -16], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x3", "y": [-100, 100], "yaxis": "y3", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x2", "y": [0.2, 0.2], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x2", "y": [0, 1], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "date", "line": {"color": "darkgreen", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "threshold for trained", "showlegend": false, "x": ["2019-10-29", "2020-02-11"], "xaxis": "x", "y": [0.2, 0.2], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-30", "2020-01-30"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-01-31", "2020-01-31"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-01", "2020-02-01"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(255, 18, 18, 0.2)", "width": 2}, "mode": "lines", "name": "not good enough for brainwide map", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-07", "2020-02-07"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 0.3)", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": false, "x": ["2020-02-08", "2020-02-08"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": false, "x": ["2019-11-27", "2019-11-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": false, "x": ["2019-12-03", "2019-12-03"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": false, "x": ["2019-12-11", "2019-12-11"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "legendgroup": "ephys_good_enough", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "first ephys session date", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1], "yaxis": "y", "type": "scatter"}], "layout": {"height": 1000, "legend": {"orientation": "v", "x": 1.1, "y": 1}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Fit Parameters", "x": 0.3, "y": 0.93}, "width": 600, "xaxis": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false, "title": {"text": "Date"}}, "yaxis": {"anchor": "x", "domain": [0, 0.2], "range": [-0.02, 1.02], "showgrid": false, "title": {"text": "$Lapse high\\ (\\lambda)$"}}, "xaxis2": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis2": {"anchor": "x2", "domain": [0.25, 0.45], "range": [-0.02, 1.02], "showgrid": false, "title": {"text": "$Lapse low\\ (\\gamma)$"}}, "xaxis3": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis3": {"anchor": "x3", "domain": [0.5, 0.7], "range": [-105, 105], "showgrid": false, "title": {"text": "$Bias\\ (\\mu)$"}}, "xaxis4": {"domain": [0, 1], "range": ["2019-10-29", "2020-02-10"], "showgrid": false}, "yaxis4": {"anchor": "x4", "domain": [0.75, 1], "range": [-5, 105], "showgrid": false, "title": {"text": "$Threshold\\ (\\sigma)$"}}}} diff --git a/notebooks/notebooks_plotting/performance_reaction_time.json b/notebooks/notebooks_plotting/performance_reaction_time.json index 918db79b..b86167be 100644 --- a/notebooks/notebooks_plotting/performance_reaction_time.json +++ b/notebooks/notebooks_plotting/performance_reaction_time.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "performance easy", "showlegend": false, "x": ["2019-10-01", "2019-10-02", "2019-10-03", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-08", "2019-11-12", "2019-11-13", "2019-11-14", "2019-11-15", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-06", "2019-12-07", "2019-12-08", "2019-12-10", "2019-12-11"], "y": [0.448276, 0.56213, 0.728353, 0.887097, 0.923077, 0.946237, 0.961905, 0.977778, 0.981818, 1.0, 1.0, 0.991525, 0.956897, 0.984375, 0.992647, 0.986207, 1.0, 0.989583, 0.893805, 0.977273, 0.985714, 0.958904, 0.987342, 0.989247, 0.990991, 0.988235, 0.975207, 0.944444, 0.907692, 1.0, 0.966667, 0.916667, 0.962687, 0.982558, 1.0, 0.992908, 0.951807, 0.977528, 1.0, 0.964286], "yaxis": "y", "type": "scatter"}, {"marker": {"color": "red", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "reaction time", "showlegend": false, "x": ["2019-10-01", "2019-10-02", "2019-10-03", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-08", "2019-11-12", "2019-11-13", "2019-11-14", "2019-11-15", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-06", "2019-12-07", "2019-12-08", "2019-12-10", "2019-12-11"], "y": [20.3008, 4.4942, 3.08166, 0.60273, 0.482464, 0.442652, 0.409251, 0.332807, 0.468705, 0.381929, 0.333322, 0.297746, 0.299108, 0.309121, 0.317263, 0.325579, 0.297803, 0.337364, 0.384279, 0.388938, 0.333047, 0.711099, 0.4851, 0.350946, 0.323116, 0.349884, 0.380604, 0.396207, 2.7206, 0.697309, 2.17031, 0.739069, 0.459172, 0.34953, 0.467424, 0.772379, 0.340566, 1.98266e-07, 0.502712, 4.54026], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-09-23", "2019-09-23"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-30", "2019-09-30"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-07", "2019-10-07"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-21", "2019-10-21"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-28", "2019-10-28"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-10-11", "2019-10-11"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": true, "x": ["2019-11-19", "2019-11-19"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": true, "x": ["2019-11-26", "2019-11-26"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2019-10-10", "2019-10-10"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Performance and median reaction time", "x": 0.14, "y": 0.85}, "width": 700, "xaxis": {"showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 1.1], "title": {"text": "Performance on easy trials"}}, "yaxis2": {"color": "red", "dtick": [-1.0, 0.0, 1.0], "overlaying": "y", "range": [-1.0, 1.0], "side": "right", "title": {"text": "Median reaction time (s)"}, "type": "log"}}} \ No newline at end of file +{"data": [{"marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "performance easy", "showlegend": false, "x": ["2019-10-01", "2019-10-02", "2019-10-03", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-08", "2019-11-12", "2019-11-13", "2019-11-14", "2019-11-15", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-06", "2019-12-07", "2019-12-08", "2019-12-10", "2019-12-11"], "y": [0.448276, 0.56213, 0.728353, 0.887097, 0.923077, 0.946237, 0.961905, 0.977778, 0.981818, 1.0, 1.0, 0.991525, 0.956897, 0.984375, 0.992647, 0.986207, 1.0, 0.989583, 0.893805, 0.977273, 0.985714, 0.958904, 0.987342, 0.989247, 0.990991, 0.988235, 0.975207, 0.944444, 0.907692, 1.0, 0.966667, 0.916667, 0.962687, 0.982558, 1.0, 0.992908, 0.951807, 0.977528, 1.0, 0.964286], "yaxis": "y", "type": "scatter"}, {"marker": {"color": "red", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "reaction time", "showlegend": false, "x": ["2019-10-01", "2019-10-02", "2019-10-03", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-08", "2019-11-12", "2019-11-13", "2019-11-14", "2019-11-15", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-12-02", "2019-12-03", "2019-12-04", "2019-12-06", "2019-12-07", "2019-12-08", "2019-12-10", "2019-12-11"], "y": [20.3008, 4.4942, 3.08166, 0.60273, 0.482464, 0.442652, 0.409251, 0.332807, 0.468705, 0.381929, 0.333322, 0.297746, 0.299108, 0.309121, 0.317263, 0.325579, 0.297803, 0.337364, 0.384279, 0.388938, 0.333047, 0.711099, 0.4851, 0.350946, 0.323116, 0.349884, 0.380604, 0.396207, 2.7206, 0.697309, 2.17031, 0.739069, 0.459172, 0.34953, 0.467424, 0.772379, 0.340566, 1.98266e-07, 0.502712, 4.54026], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-09-23", "2019-09-23"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-30", "2019-09-30"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-07", "2019-10-07"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-21", "2019-10-21"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-28", "2019-10-28"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-10-11", "2019-10-11"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(28, 20, 255, 1)"}, "mode": "lines", "name": "first day got ready4ephysrig", "showlegend": true, "x": ["2019-11-19", "2019-11-19"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(117, 117, 117, 1)"}, "mode": "lines", "name": "first day got ready4delay", "showlegend": true, "x": ["2019-11-26", "2019-11-26"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2019-10-10", "2019-10-10"], "xaxis": "x", "y": [0, 1.1], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Performance and median reaction time", "x": 0.14, "y": 0.85}, "width": 700, "xaxis": {"showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 1.1], "title": {"text": "Performance on easy trials"}}, "yaxis2": {"color": "red", "dtick": [-1.0, 0.0, 1.0], "overlaying": "y", "range": [-1.0, 1.0], "side": "right", "title": {"text": "Median reaction time (s)"}, "type": "log"}}} diff --git a/notebooks/notebooks_plotting/plotting_utils.py b/notebooks/notebooks_plotting/plotting_utils.py index 367f6270..bbf2cb03 100644 --- a/notebooks/notebooks_plotting/plotting_utils.py +++ b/notebooks/notebooks_plotting/plotting_utils.py @@ -1,193 +1,211 @@ -from ibl_pipeline.analyses import behavior -from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import subject, action, acquisition -from ibl_pipeline.utils import psychofit as psy -from uuid import UUID -import numpy as np import datetime +from uuid import UUID + import datajoint as dj -import plotly.graph_objs as go +import numpy as np import pandas as pd -import seaborn as sns import plotly +import plotly.graph_objs as go +import seaborn as sns from plotly import tools +from ibl_pipeline import acquisition, action +from ibl_pipeline import behavior as behavior_ingest +from ibl_pipeline import subject +from ibl_pipeline.analyses import behavior +from ibl_pipeline.utils import psychofit as psy + def get_date_range(subj): - + # get date range of session first_session_date, last_session_date = subj.aggr( - acquisition.Session, - first_session_date='min(DATE(session_start_time))', - last_session_date='max(DATE(session_end_time))').fetch1( - 'first_session_date', 'last_session_date' - ) - + acquisition.Session, + first_session_date="min(DATE(session_start_time))", + last_session_date="max(DATE(session_end_time))", + ).fetch1("first_session_date", "last_session_date") + # get date range of water restriction first_water_res_date, last_water_res_date = subj.aggr( - action.WaterRestriction, - first_res_date='min(DATE(restriction_start_time))', - last_res_date='max(DATE(restriction_end_time))').fetch1( - 'first_res_date', 'last_res_date') - + action.WaterRestriction, + first_res_date="min(DATE(restriction_start_time))", + last_res_date="max(DATE(restriction_end_time))", + ).fetch1("first_res_date", "last_res_date") + # get date range of water administration first_water_admin_date, last_water_admin_date = subj.aggr( - action.WaterAdministration, - first_admin_date='min(DATE(administration_time))', - last_admin_date='max(DATE(administration_time))').fetch1( - 'first_admin_date', 'last_admin_date') - + action.WaterAdministration, + first_admin_date="min(DATE(administration_time))", + last_admin_date="max(DATE(administration_time))", + ).fetch1("first_admin_date", "last_admin_date") + # get date range of weighing first_weighing_date, last_weighing_date = subj.aggr( - action.Weighing, - first_weighing_date='min(DATE(weighing_time))', - last_weighing_date='max(DATE(weighing_time))').fetch1( - 'first_weighing_date', 'last_weighing_date') - + action.Weighing, + first_weighing_date="min(DATE(weighing_time))", + last_weighing_date="max(DATE(weighing_time))", + ).fetch1("first_weighing_date", "last_weighing_date") + # get overall date range - first_date = min([first_session_date, first_water_res_date, first_water_admin_date, first_weighing_date]) \ - - datetime.timedelta(days=3) - + first_date = min( + [ + first_session_date, + first_water_res_date, + first_water_admin_date, + first_weighing_date, + ] + ) - datetime.timedelta(days=3) + if last_water_res_date: - last_date = np.nanmax([last_session_date, last_water_res_date, last_water_admin_date, last_weighing_date]) \ - + datetime.timedelta(days=3) + last_date = np.nanmax( + [ + last_session_date, + last_water_res_date, + last_water_admin_date, + last_weighing_date, + ] + ) + datetime.timedelta(days=3) else: - last_date = np.nanmax([last_session_date, last_water_admin_date, last_weighing_date]) \ - + datetime.timedelta(days=3) + last_date = np.nanmax( + [last_session_date, last_water_admin_date, last_weighing_date] + ) + datetime.timedelta(days=3) - first_date_str = first_date.strftime('%Y-%m-%d') - last_date_str = last_date.strftime('%Y-%m-%d') + first_date_str = first_date.strftime("%Y-%m-%d") + last_date_str = last_date.strftime("%Y-%m-%d") - date_array = [first_date + datetime.timedelta(days=day) for day in range(0, (last_date-first_date).days)] + date_array = [ + first_date + datetime.timedelta(days=day) + for day in range(0, (last_date - first_date).days) + ] # get Mondays - mondays = [day.strftime('%Y-%m-%d') - for day in date_array if day.weekday()==0] - + mondays = [day.strftime("%Y-%m-%d") for day in date_array if day.weekday() == 0] + return dict( first_date=first_date, last_date=last_date, first_date_str=first_date_str, last_date_str=last_date_str, date_array=date_array, - mondays=mondays) - + mondays=mondays, + ) + + def get_status(subj): # get the first date when animal became "trained" and "ready for ephys" first_trained = subj.aggr( - behavior.SessionTrainingStatus & 'training_status = "trained"', - first_session='DATE(min(session_start_time))') + behavior.SessionTrainingStatus & 'training_status = "trained"', + first_session="DATE(min(session_start_time))", + ) first_biased = subj.aggr( - behavior.SessionTrainingStatus & 'training_status = "ready for ephys"', - first_session='DATE(min(session_start_time))') - + behavior.SessionTrainingStatus & 'training_status = "ready for ephys"', + first_session="DATE(min(session_start_time))", + ) + result = dict() if len(first_trained): - first_trained_date = first_trained.fetch1('first_session').strftime('%Y-%m-%d') + first_trained_date = first_trained.fetch1("first_session").strftime("%Y-%m-%d") result.update(is_trained=True, first_trained_date=first_trained_date) else: result.update(is_trained=False) if len(first_biased): - first_biased_date = first_biased.fetch1('first_session').strftime('%Y-%m-%d') + first_biased_date = first_biased.fetch1("first_session").strftime("%Y-%m-%d") result.update(is_biased=True, first_biased_date=first_biased_date) else: result.update(is_biased=False) - + return result -def create_status_plot(data, yrange, status, xaxis='x1', yaxis='y1', show_legend_external=True): - - if status['is_trained']: + +def create_status_plot( + data, yrange, status, xaxis="x1", yaxis="y1", show_legend_external=True +): + + if status["is_trained"]: data.append( - go.Scatter( - x=[status['first_trained_date'], status['first_trained_date']], - y=yrange, - mode="lines", - marker=dict(color='orange'), - name='first day got trained', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - legendgroup='status' - ) + go.Scatter( + x=[status["first_trained_date"], status["first_trained_date"]], + y=yrange, + mode="lines", + marker=dict(color="orange"), + name="first day got trained", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + legendgroup="status", + ) ) - - if status['is_biased']: + + if status["is_biased"]: data.append( - go.Scatter( - x=[status['first_biased_date'], status['first_biased_date']], - y=yrange, - mode="lines", - marker=dict(color='forestgreen'), - name='first day got biased', - xaxis=xaxis, - yaxis=yaxis, - showlegend=show_legend_external, - legendgroup='status' - ) + go.Scatter( + x=[status["first_biased_date"], status["first_biased_date"]], + y=yrange, + mode="lines", + marker=dict(color="forestgreen"), + name="first day got biased", + xaxis=xaxis, + yaxis=yaxis, + showlegend=show_legend_external, + legendgroup="status", + ) ) - + return data - -def create_monday_plot(data, yrange, mondays, xaxis='x1', yaxis='y1', show_legend_external=True): - + +def create_monday_plot( + data, yrange, mondays, xaxis="x1", yaxis="y1", show_legend_external=True +): + for imonday, monday in enumerate(mondays): - if imonday==0 and show_legend_external: + if imonday == 0 and show_legend_external: show_legend = True else: - show_legend = False - + show_legend = False + data.append( go.Scatter( x=[monday, monday], y=yrange, mode="lines", - line=dict( - width=0.5, - color='gray', - dash='dot' - ), - name='Mondays', + line=dict(width=0.5, color="gray", dash="dot"), + name="Mondays", xaxis=xaxis, yaxis=yaxis, showlegend=show_legend, - legendgroup='monday', - hoverinfo='skip' + legendgroup="monday", + hoverinfo="skip", ) ) - + return data def get_color(prob_left, opacity=0.3): - + cmap = sns.diverging_palette(20, 220, n=3, center="dark") - + if prob_left == 0.2: color = cmap[0] err_c = color.copy() - err_c[3] = err_c[3]*opacity - curve_color = 'rgba{}'.format(tuple(color)) - error_color = 'rgba{}'.format(tuple(err_c)) + err_c[3] = err_c[3] * opacity + curve_color = "rgba{}".format(tuple(color)) + error_color = "rgba{}".format(tuple(err_c)) elif prob_left == 0.5: color = cmap[1] err_c = color.copy() - err_c[3] = err_c[3]*opacity - curve_color = 'rgba{}'.format(tuple(color)) - error_color = 'rgba{}'.format(tuple(err_c)) + err_c[3] = err_c[3] * opacity + curve_color = "rgba{}".format(tuple(color)) + error_color = "rgba{}".format(tuple(err_c)) elif prob_left == 0.8: color = cmap[2] err_c = color.copy() - err_c[3] = err_c[3]*opacity - curve_color = 'rgba{}'.format(tuple(color)) - error_color = 'rgba{}'.format(tuple(err_c)) + err_c[3] = err_c[3] * opacity + curve_color = "rgba{}".format(tuple(color)) + error_color = "rgba{}".format(tuple(err_c)) else: return - - return curve_color, error_color - - - \ No newline at end of file + return curve_color, error_color diff --git a/notebooks/notebooks_plotting/populate plotting.ipynb b/notebooks/notebooks_plotting/populate plotting.ipynb index 561aeb77..73756867 100644 --- a/notebooks/notebooks_plotting/populate plotting.ipynb +++ b/notebooks/notebooks_plotting/populate plotting.ipynb @@ -2,17 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "from ibl_pipeline.plotting import behavior" ] diff --git a/notebooks/notebooks_plotting/psth.json b/notebooks/notebooks_plotting/psth.json index aeb8e7a1..5afb9a4f 100644 --- a/notebooks/notebooks_plotting/psth.json +++ b/notebooks/notebooks_plotting/psth.json @@ -1 +1 @@ -{"data": [{"marker": {"opacity": 0}, "mode": "markers", "x": [-1, 1], "y": [-3.1302000000000008, 65.73420000000002], "type": "scatter", "uid": "88a4697d-d80e-4b18-a6ec-bbb017b33026"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 68.86440000000002, "sizing": "stretch", "source": "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAC7gAAAXcCAYAAACyT8NoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XmUnHWdP/pP9ZomnT0krLJc2QIEgcgWCRCWiKhEcEAuW1CZIZHBAeSHKIgOm1wBdYTgggQYyCAJKBKRILLEASRKNAEJmCABkki2TndI0unqrq77h1evTVV1eq+nmtfrHM8xn+d5vs+b4Eyf0/XuT6ey2Ww2AAAAAACADlu9enVMnz693XumTZsWo0aN6qNEAAAAAADQP5QVOwAAAAAAAAAAAAAAAEQouAMAAAAAAAAAAAAAkBAK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiaDgDgAAAAAAAAAAAABAIii4AwAAAAAAAAAAAACQCAruAAAAAAAAAAAAAAAkgoI7AAAAAAAAAAAAAACJoOAOAAAAAAAAAAAAAEAiKLgDAAAAAAAAAAAAAJAICu4AAAAAAAAAAAAAACSCgjsAAAAAAAAAAAAAAImg4A4AAAAAAAAAAAAAQCIouAMAAAAAAAAAAAAAkAgK7gAAAAAAAAAAAAAAJIKCOwAAAAAAAAAAAAAAiVBR7AAAAAAAAADQUxo2N8c1v3glfr+sLkbWVsf5E3aPSftuV+xYAAAAAEAH2eAOAAAAAABAv9Damo0zfvTbmP3i8li2bnP8/s31MfXeF+Op11YXOxoAAAAA0EEK7gAAAAAAAPQLzyxZE6/8dUObWWs2YuYLbxUpEQAAAADQWQruAAAAAAAA9Av/z2Ov5Z3/6pVVfZwEAAAAAOgqBXcAAAAAAAD6hcXv2d4OAAAAAJQeBXcAAAAAAABKXmtrttgRAAAAAIAeoOAOAAAAAABAyXtj3aZiRwAAAAAAeoCCOwAAAAAAACVv0fL6YkcAAAAAAHqAgjsAAAAAAAAlb+HbDQWvVZan+jAJAAAAANAdCu4AAAAAAACUvPY2uDdnspHNZvswDQAAAADQVQruAAAAAAAAlLTmTGv8aeWGrdyj4A4AAAAApUDBHQAAAAAAgJL251XvRlNLa7v3NGfavw4AAAAAJIOCOwAAAAAAACVt0fKGrd6j4A4AAAAApUHBHQAAAAAAgJK2aHn9Vu9JK7gDAAAAQElQcAcAAAAAAKCkLXy7Ixvcs32QBAAAAADoLgV3AAAAAAAAStaW5ky8turdrd7XYoM7AAAAAJQEBXcAAAAAAABK1p9WbohM69a3szcruAMAAABASVBwBwAAAAAAoGQtXb317e0REemWrZfgAQAAAIDiU3AHAAAAAACgZNVtau7QfTa4AwAAAEBpUHAHAAAAAACgZDU0KrgDAAAAQH+i4A4AAAAAAEDJamhMd+i+tII7AAAAAJQEBXcAAAAAAABKVv3mjm5wz/ZyEgAAAACgJyi4AwAAAAAAULIaGjtYcG+xwR0AAAAASkFFsQNsTTabjdbW1shmbdUAgH+WSqWirKwsUqlUsaMAAAAAQNF0fIO7gjsAAAAAlIJEFdyz2Ww0NjbGpk2bYtOmTZFOpyOTyRQ7FgAkWnl5eQwYMCAGDRoUtbW1UVlZWexIAAAAANBnOrzBvdUyJQAAAAAoBYkouGcymVi7dm3U19dHa6vtGQDQGZlM5h8/HBYRUVNTE6NHj46ampoiJwMAAACA3le/Od2h+5pbfAYFAAAAAKWg6AX3DRs2xDvvvGNTOwD0kMbGxli2bFkMHz48Ro0aFalUqtiRAAAAAKBXNGdaY1O6Y58xNWcU3AEAAACgFBS14N7Q0BArV64sZgQA6Lfq6uoiImL06NFFTgIAAAAAvaOhsbnD9yq4AwAAAEBpKFrBfcOGDQXL7dXV1VFbWxvbbLNNVFRURHl5ue2zAPAera2tkclkIp1Ox8aNG2Pjxo3R2tr2Q7q6uroYMGBADBkypEgpAQAAAKD31G/ueME9ncn2YhIAAAAAoKcUpeCeyWTinXfeyZnX1tbG6NGjo6qqqgipAKA01dTUxJAhQ6K1tTXq6upizZo1ba7/9a9/jerq6hgwYECREgIAAABA77DBHQAAAAD6n7JivHTt2rWRyWTazIYPHx477bSTcjsAdFFZWVmMHDkytt9++zbzbDYb9fX1RUoFAAAAAL2noTHd4XubWxTcAQAAAKAU9HnBPV/Jrra2NkaNGhWpVKqv4wBAvzN06NAYOnRom9nGjRsjm/UrmAEAAADoX+o32+AOAAAAAP1NnxfcGxsbo7W17TcQR48erdwOAD1o2LBhbf7c3NwcTU1NRUoDAAAAAL2jobETBfdWCyAAAAAAoBT0ecF906ZNbf5cXV0dVVVVfR0DAPq16urqqKysbDPbuHFjkdIAAAAAQO/o1Ab3FhvcAQAAAKAUFL3gXltb29cRAKDfS6VSMWjQoDazd999t0hpAAAAAKB3dGqDe0bBHQAAAABKQZ8X3NPpdJs/b7PNNn0dAQDeFwYOHNjmz83NHf+wDwAAAABKQWcK7ulMtheTAAAAAAA9pU8L7tlsNjKZTJtZRUVFX0YAgPeN936NzWQykc36EA8AAACA/qN+c3rrN/1/bHAHAAAAgNLQpwX31tbcbxyWl5f3ZQQAeN/I9zU239diAAAAAChV9Z3Y4K7gDgAAAACloc83uL9XKpXqywgA8L6R72usDe4AAAAA9CcNCu4AAAAA0O/0acEdAAAAAAAAekrD5o4X3NMtlj8AAAAAQClQcAcAAAAAAKDkZLPZqLfBHQAAAAD6HQV3AAAAAAAASs6mdCYyrR3fyt7SquAOAAAAAKVAwR0AAAAAAICSU7853an7m1s6XoYHAAAAAIqnotgBAAAAAAAAoKNWbdgSz7++LtZt6lzBPZ2xwR0AAAAASoGCOwAAAAAAACXhgd+9HZc/tCiyXVjG3qzgDgAAAAAloazYAQAAAAAAAGBrVm3YEl/uYrk9QsEdAAAAAEqFgjsAAAAAAACJ9/zr66K1i+X2iIjmTDceBgAAAAD6jII7AAAAAAAAiffs0rXdej7dYoM7AAAAAJQCBXcAAAAAAAASb3BNZbeeb84ouAMAAABAKVBwBwAAAAAAIPGGbdOxgnsqlX+u4A4AAAAApUHBHRJkyZIlccMNN8TkyZNjjz32iJEjR0ZlZWWkUqk2/5k8eXKxo77v7brrrjn/Xu66664OPbts2bKcZ1OpVCxbtqxXM9Nx/h0BAAAAQPKkWzpWUB9ZW5133pLJ9mQcAAAAAKCXVBQ7ABCxYsWKmDp1asyZMyeyWd9gBwAAAACA90p3sKC+bW11rHm3Kc/zNrgDAAAAQClQcIcie/HFF+OjH/1orF27tthRAAAAAAAgsTq8wX1QdcRfc+fNCu4AAAAAUBLKih0A3s/Wr18fp556qnI7AAAAAABsRUcL6iNrq/LOW7MRmVa/RRUAAAAAks4GdyiiW265Jd58882ceUVFRRx99NGx3377xdChQ6O8vLzN9b322quvIgIAAAAAQCJ0dIP7toOqC15rzrRGeVl5wesAAAAAQPEpuEORtLS0xA9+8IOc+QEHHBAPP/xw7LLLLkVIBQAAAAAAyZTu4Ab3bWsLF9zTmdYYUKngDgAAAABJVlbsAPB+tWjRolizZk3O/J577lFuBwAAAACA9+hwwb29De4d3AIPAAAAABSPgjsUyfz583Nme+65Z4wdO7YIaQAAAAAAINnSHSynt7fBvTmT7ak4AAAAAEAvUXCHInn77bdzZvvss08RkgAAAAAAQPJ1uODe3gb3Dm6BBwAAAACKR8EdiqShoSFnNnjw4CIkAQAAAACA5OtoOX3QgMpunwEAAAAAFI+COxTJpk2bcmZlZf5PEgAAAAAA8unoBveqisLfa2/OZHsqDgAAAADQS7RpoUiyWd9EBwAAAACAjurI9vWxOw2JivJUt84AAAAAAIqrotgB4P3gkUceiYULF7aZLVq0KOe+RYsWxbXXXtvuWWeffXbssssuHX53U1NTzJ07N55++ulYsGBB/OUvf4m6urpobGyMmpqaGDlyZHzwgx+Mww47LE466aQ4/PDDO3x2VyQpz6JFi+KBBx6IefPmxWuvvRbr16+P8vLyGDJkSOy5555xyCGHxOTJk+MjH/lIr2XYmtdffz1mz54dzzzzTCxevDjWrl0bjY2NUVtbG7vttluMGzcuTj755DjxxBOjvLy8R9/d2NgYzz33XDz//POxePHiePXVV2PVqlWxYcOGaGxsjMGDB8eIESNi5MiRcdBBB8WECRPi6KOPjlGjRvVojny2bNkSv/rVr2LevHmxYMGCWLZsWaxZsyY2b94cVVVVMXjw4Nhuu+1izJgxMXbs2Jg4cWKMGzfOb0kAAAAAgBLW1IEN7sfuPTqqygt/HzCt4A4AAAAAiZfK9uEa6ZaWlliyZEmb2R577BEVFXr29G9TpkyJu+++u0fOeuqpp+Loo4/e6n3vvPNO3HTTTXHHHXdEQ0NDh88fM2ZMXH311XHaaad1I2Wy8yxevDguvvjimDt3bofuP+igg+I73/lOHHnkkf+Y7brrrvHmm2+2uW/GjBkxZcqUrZ63bNmy2G233XLmb7zxRuy6664REfH222/HJZdcEg899FC0tm79A5ddd901brzxxm7/Pa1duzZmzZoVs2bNiueeey6ampo69XxlZWWcddZZ8eUvfzn23HPPbmXJ54033oibbrop7rnnnti4cWOnnh0xYkScccYZcf7558fYsWPbvbcj/446Y8OGDXHqqafGE088kXPtwAMPjEcffTS22267Tp+7Nb7uAgAAQO9ZvXp1TJ8+vd17pk2b1ifLAOD9YuLNT8df1mwqeP2EMaPje//3gVFRVhb/11cezXvPT/71sDh09xG9FREAAAAA6AFW2UI/9P3vfz/22muvuPnmmztVJo+IeOWVV+L000+PE088MdatW9fv8syYMSMOOuigDpfbIyIWLFgQRx11VFx33XXdfn9HzJ07N/bbb7+YPXt2h8rtEX8rZJ9++ulx5plnxpYtW7r03lmzZsX2228f06ZNi6eeeqrT5faIiObm5pgxY0aMGTMmbrnlli7lyKelpSW+/vWvxz777BPTp0/vdLk9ImLdunVx6623xgEHHNBjuTpixYoVMWHChLzl9hNOOCHmzZvXK+V2AAAAAOhvmgtsX//UgTvGk5ceFT88Z1xUV5RHeVkqylKFzuizvU8AAAAAQBcpuEM/0tzcHGeddVZMnTo1NmzY0K2zHnvssTjkkENytpSXcp5bbrklPvvZz3apAJ7NZuPKK6+Mq666qsvv74i5c+fGxz/+8S7/fc2cOTNOPPHEaGxs7PSz69ati5aWli69970ymUxceuml8dnPfja6+4tC6urqYuLEifGNb3yjS6X7Ynr55Zfj8MMPj4ULF+ZcmzJlSvziF7+I2traIiQDAAAAgNKTbslfcJ+w58jYfdu232erLM//EVihkjwAAAAAkBwVxQ4A9IxMJhOf/vSn4+c//3nBe3bYYYcYP358bL/99jF06NBoaGiIt956K5566qmor6/Puf8vf/lLHH/88bFgwYJOl3CTlmfWrFnxpS99qeD1ESNGxDHHHBM77bRTbLPNNrF8+fJYsGBBvPzyy23uu/baa+PAAw/s1Ls7atmyZXHaaafllMx33HHHOPLII2PHHXeMioqKWL58ebzwwguxdOnSvOc8/fTTcc4558SsWbN6JNc222wT++23X+y1114xdOjQGDp0aGQymWhoaIglS5bEiy++WHC7/owZM2LfffeNSy+9tEvvrquri6OOOirn38M/q66ujvHjx8cuu+wSo0aNioqKiqirq4uVK1fG73//+1ixYkWX3t1dTz31VHzqU5/K+1sLrrrqqvjP//zPIqQCAAAAgNJVqOBeVV6eZ1YWTXnuTyu4AwAAAEDiKbhDH7jrrrvirrvuajObMmVK3H333W1m5557bs59HXXppZfmLZOXlZXF6aefHpdddlnBYnZLS0s8+OCDccUVV8Qbb7zR5tqSJUvioosuijvvvLNk86xZsyYuuOCCvJvEt99++/jud78bkydPjsrKypzrixYtiksvvTSeeOKJf8ymTZvWY5vO/9kXvvCFNpvb99xzz/je974Xxx13XJSV5W4bev755+OLX/xi/O53v8u5Nnv27LjvvvvizDPP7FKWAw88MD71qU/F5MmTY9999837/r/LZrPx+OOPx7e+9a349a9/nXP9iiuuiGOPPTY+9KEPdSpDS0tLnHLKKQXL7XvttVd84xvfiI9//OMxcODAgue8/fbbMXv27Lj//vtj/vz5ncrQVTNnzozzzjsv0ul0m3l5eXncfvvtcf755/dJDgAAAADoT5oz+X9bZGV5KndWURaR5xdCthQ4AwAAAABIjsKNRaBkPPbYY/Hd7343Z77tttvG3LlzY+bMme1uHa+oqIjTTz89Fi5cGMcff3zO9RkzZsQjjzxSsnkuueSSqKury5mPHz8+Xn755fiXf/mXvOX2iIixY8fG448/Hl//+tf/MVu1alXBjeXd8corr/zjv59yyinxxz/+MU444YSC5fLDDz88nnvuuZg6dWre6xdffHHef+5CysvL49RTT4358+fHggUL4qqrror999+/3XJ7REQqlYpJkybFE088EdOnT8+5v7m5Oa6//voO5/i7G264IZ555pm8166++up4+eWX4/TTT2+33B4RsfPOO8fFF18cL7zwQvzmN7+JE044odNZOuPGG2+Ms846K6fcPnDgwHj44YeV2wEAAACgiwpucK/I/R5mvtJ7RESzDe4AAAAAkHglv8G9paWlUwVO+ofhw4dHRUXJ/8+3RzQ3N8e0adNy5kOHDo1nnnkm9tlnnw6fNWjQoJgzZ0585CMfydkKft1118UnPvGJksvzhz/8Ie69996c+d577x2PPPJIDBs2bKtnpFKpuPrqq2PdunXxve99r8P5u2rChAkxc+bMqK6u3uq9FRUVceutt8aaNWti9uzZba6tWbMmbrjhhvjWt77Vofd+7nOf63b5eurUqdHS0hIXXXRRm/lPf/rTWLFiRey4444dOufNN9+M6667Lu+122+/PS644IIu5fvIRz4Sc+fO7dKzW5PJZOKiiy6K6dOn51wbNWpUzJkzJz784Q/3yrsBAAAAoL/LZrORLlBOz19wz7+4o9AZAAAAAEBylHxDuK6uLm+ZkP5t2rRpMWrUqGLHSIS77ror3njjjZz5Pffc06ky+d9VVVXF/fffH/vss0+bDdQvvPBCvPDCC3HooYeWVJ4f/vCHeed33HFHh8rt/+ymm26KRx99NF5//fVOPdcZ1dXVMWPGjA6V2/+urKwsfvCDH8STTz6Z8wM/d911V1x33XVRVVXVoXN6woUXXhj33ntvzJ8//x+zlpaW+MlPfhKXXHJJh864/vrro6kp9/cHn3/++V0ut/emzZs3xxlnnBE///nPc67tscce8dhjj8Xuu+9ehGQAAAAA0D80Z7IFr1XlKbMXKrjb4A4AAAAAydczbUagaPL9gMfxxx/foe3mhey+++5x5pln5szvvPPOksqzefPm+J//+Z+c+SmnnBLjx4/vdI6qqqq48cYbO/1cZ3zhC1/oUhF6+PDhceWVV+bM165dGz/96U97IlqHpVKp+NznPpcz/+1vf9uh599999247777cuY77LBD3Hzzzd3O19PWrFkTEydOzFtuP+yww+K5555TbgcAAACAbmpv83r+De6pvPc2tyi4AwAAAEDSKbhDCVu8eHH88Y9/zJn/x3/8R7fPPvfcc3Nmv/nNb0oqz5NPPhkNDQ058/PPP7/LOU4++eRe/e0B3cl27rnnRmVlZc78wQcf7E6kLjnmmGNyZi+88EKHnp0zZ05s2rQpZz516tQYNGhQt7P1pKVLl8YRRxyR95/t5JNPjieffDJGjhxZhGQAAAAA0L+0V0zPX3AvtMG98CZ4AAAAACAZFNyhhD322GM5syFDhsRxxx3X7bMPPfTQqKqqajN79dVXY/369SWTZ/78+TmzESNGdCtPRUVFnHbaaV1+vj1jx46Nvffeu8vPDx8+PD760Y/mzH/3u991J1aXbL/99jmzt956KzZu3LjVZ/P976i8vDzvVvhieuGFF+KII46IpUuX5lybNm1aPPTQQ1FTU1OEZAAAAADQ/7S3wT1fmb1Qwb29cwAAAACAZKgodgCg65577rmc2bhx43KK4F0xYMCA2HnnneP111//xyybzcYf/vCHmDhxYknkyVfsPuSQQ6Kionv/r2/8+PFx6623duuMQud21xFHHBGPPPJIm9myZctizZo1se2223b53JaWlnjttddiyZIl0dDQEO+++268++67kclkOnXO+vXro7a2tt178v1gwr777pu3NF8sDz/8cJxxxhnR2NjYZp5KpeK6666LK664okjJAAAAAKB/Sre3wT1PmT3fLCKiWcEdAAAAABJPwR1K2KJFi3Jm3dkA/l4jRoxoUyiPiFizZk1J5znggAO6naMnzuitcwudsXDhwk5vrn/zzTdj5syZ8dBDD8VLL70UTU1N3c5XX18fO++8c8Hrzc3N8ec//zlnfsghh3T73T1l+vTp8e///u/R2tr2g7DKysq4884746yzzipSMgAAAADov9rbvF5VkWeDe0Uq770tmWyPZQIAAAAAeoeCO5Swt956K2d22223xW233dZr71y/fn3J5Fm3bl3ObI899uj2O3vijN46t9AZ+f4uClmxYkVcfPHFMXv27Mhme/bDnoaGhnavr1y5Mqc4HvG3De5JcNVVV8W9996bMx88eHA89NBDceyxxxYhFQAAAAD0f53d4F5pgzsAAAAAlCwFdyhR9fX1sWXLlj5/b6FCedLybNmyJe/G8cGDB3f7nRUVFVFTUxONjY3dPuuf9US2QmfU19d36PnZs2fHeeedFxs3bux2lnxaWlravb527dq886FDh/ZGnE7LV27fYYcd4pe//GWMHTu2CIkAAAAA4P2hvWJ63g3uBQru7W2CBwAAAACSoeQL7sOHD49p06YVOwZ9bPjw4cWOUHSbN28uynvzlcYjkpenUKG7J0rkERFDhgxJZMF9yJAheecdKbg/8MADceaZZ261hN6bCv2dJqXgnk8x/74AAAAA4P2ivQ3u+crs+ba6R9jgDgAAAACloOQL7hUVFTFq1Khix4A+l8lkih2hjaTloXPeeuutOO+88wqWtffdd984+uij49BDD41ddtkldt555xg8eHAMGDAgampqoqws98OiVCrVY/l68qzuOPjgg+PFF19sM1u9enUcc8wx8fjjj8fBBx9cpGQAAAAA0L+1X3DP/f5hRZ5ZRERzS7bHMgEAAAAAvaPkC+7wfjVgwIC886OOOiqOO+64XnvvhAkTSiJPoU3mGzZs6JH3NjQ09Mg5/6wnshXKtbUN6JdddlneLfwHH3xwfPe7343x48d3Kkc6ne7U/X9XU1OTd96RDfR9YebMmXH55ZfHz372szbzurq6OPbYY+OXv/xlHH744UVKBwAAAAD9V7rA5vWqirK8CzLybXWPsMEdAAAAAEqBgjuUqCFDhkQqlYpstu22mbFjx8aVV175vs9TU1MT1dXV0dTU1GbeEyXylpaWaGxs7PY579UT2Qqd0V7Bva6uLh588MGc+YQJE2Lu3LkFf3ihPXV1dZ1+JiJi5MiReefr16/v0nk9raqqKmbNmhVnn3123H///W2uNTQ0xAknnBBz5syJo446qkgJAQAAAKB/KrTBvapAkb1Qwb1QUR4AAAAASI78390DEq+qqiq22267nPm6deuKkCZ5eSIihg8fnjNbsmRJt8/tiTN669xCZ4wYMaLgM48++mhkMpk2s7KyspgxY0aXyu0REWvXru3SczvuuGOUl5fnzF955ZUundcbKioq4r777ospU6bkXNu4cWOceOKJ8fjjj/d9MAAAAADox9rb4J53Xp671T3CBncAAAAAKAUK7lDCxowZkzN79dVXi5Dkb5KWZ//998+ZLVy4sNvn9sQZvXXuokWL8s7Hjh1b8Jnf//73ObPx48fH7rvv3uUcCxYs6NJzFRUVsddee+XM589PnTNMAAAgAElEQVSf3+UsvaGsrCzuvPPOuOCCC3KuNTY2xic/+cl45JFHipAMAAAAAPqnQsX0ygJF9kIb3Jsz2bxzAAAAACA5FNyhhB122GE5sz/+8Y/R0NBQhDTJy3PIIYfkzObPnx8tLS3dOvfZZ5/t1vO9eW6+Mz7wgQ/EqFGjCj6zatWqnNl+++3XrRzPPfdcl5899NBDc2Yvv/xyvPPOO92J1ONSqVTcfvvtcfHFF+dca2pqilNPPTVmz55dhGQAAAAA0P+kWzq3wb2ywNwGdwAAAABIPgV3KGEf+9jHcmatra3xs5/9rAhpkpcnX8F93bp18cQTT3T5zEwmEw888EB3YhW0aNGibm28r6uri7lz5+bM8/09/LN169blzIYNG9blHFu2bOlWsfujH/1oziyTycSPf/zjLp/Zm2655Zb4yle+kjNvbm6Oz3zmM3HfffcVIRUAAAAA9C/pApvXqwpsai+8wV3BHQAAAACSTsEdStjhhx8eu+22W878m9/8ZrS29v036ZOWZ+LEiTFo0KCc+Y9+9KMun/nwww/H6tWruxOrXd3Jds8990Q6nc6Zn3LKKe0+N3DgwJxZvtJ7R917773dev5jH/tY3n9vt99+e2zcuLHL5/am6667Lq699tqceSaTiXPOOSex5XwAAAAAKBWFNrgXKrJXlafyzpsLFOUBAAAAgORQcIcSlkql4sILL8yZv/rqq/Gtb33rfZ9n4MCBccYZZ+TMH3rooXj22Wc7fV46nY7LL7+8J6IVdNttt8Vf/vKXTj9XV1cX11xzTc58xIgRWy24b7vttjmz//3f/+10hoiIVatWxRVXXNGlZ/+utrY2zj777Jz5ihUr4ktf+lK3zu5NX/3qV+Pmm2/Ombe2tsb5558ft912WxFSAQAAAED/UKjgXl1hgzsAAAAA9DcK7lDipk6dGjvvvHPO/Ctf+Ur89Kc/7bH3rFixIlauXFlyef71X/817/zzn/98rF+/vlPvvOyyy2Lp0qWdeqazmpqa4rzzzoumpqYOP5PNZuOCCy6Iurq6nGvnnHNOVFdXt/v8QQcdlDP705/+FL/+9a87nCHib9nPOeecWLt2baeey+eKK66IAQMG5Mx/8IMfxB133NHt83vLJZdcErfddlukUm23Q2Wz2bjwwgvjpptuKlIyAAAAAChthYrpVQUK7hUFCu6FivIAAAAAQHIouEOJq6mpidtvvz1n3traGp/+9Kfj61//erS2dv0b9gsXLowpU6bEbrvtFosWLSq5PAcffHDeLe6vvvpqfOITn+hQyT2bzcY111wT//Vf/9WlzJ01b968OPPMM6OxsXGr92Yymbjwwgtj1qxZOddGjhwZX/3qV7d6xgknnJB3PmXKlHjrrbe2HjgiGhoa4qSTTorHH3+8Q/dvzU477RRXX3113mvnn39+XHvttZHJZDp97m9+85uYNGlSd+O1a9q0afHjH/84yspyv8RedtlleTftAwAAAADtK1RML7Spvao8lXdugzsAAAAAJJ+CO/QDJ510Ulx22WU589bW1vjGN74Re+21V3z/+9/vUJm7qakp5s+fH1dddVWMGTMmPvShD8Xdd98dzc3NJZvn29/+dgwbNixn/uyzz8Z+++0Xs2bNKnjeokWLYtKkSfG1r33tH7PRo0fHiBEjOvz+jhozZsw//vuDDz4YBx54YDz++OMFfyDgt7/9bRxxxBExffr0vNdvueWWDuXcfffd85a+ly9fHuPGjYv77rsvWlpa8j67adOmuOOOO2LPPfdss/F93LhxW33v1lx22WVx7LHH5r121VVXxf777x+zZs2KzZs3t3vO22+/Hd/5znfikEMOiQkTJvRYCb895513Xtx3331RUVGRc+1rX/tah37wAAAAAAD4/6U7ucG9UPG9OZPtsUwAAAAAQO/Ibd4BJenGG2+M1atXx913351zbenSpTF16tSYNm1a7LfffnHAAQfE8OHDY9iwYbFly5aor6+P9evXx+LFi2Px4sUFy8ylmmf06NExffr0vJvcV65cGaeddlqMHDkyjjnmmNh5551jwIABsXLlynjxxRfjpZdeynlm+vTpcckll8S6deu6leu9br311pg8eXJs2LAhIiJee+21mDRpUuy0004xYcKE2HHHHaO8vDxWrFgRzz//fCxdurTgWZ/61Kfi7LPP7vC7r7322njiiSdytqKvWbMmzjrrrLj00kvjyCOPjN122y1qampizZo18cYbb8TTTz8dW7ZsafNMbW1t/Pd//3fss88+nfinz1VeXh6zZs2Ko48+Ou+2/sWLF8dpp50WAwYMiPHjx8euu+4a2267bZSXl8f69etjxYoV8eKLL8by5cu7laOrPvOZz8SAAQPi9NNPj3Q63eba9ddfH42NjXHLLbcUJRsAAAAAlJrObnAvXHC3wR0AAAAAkk7BHfqJVCoVM2bMiB122CG++c1vRjabu4Umm83GSy+9lLe03d/zfOYzn4m33norLr/88rzX165dG7NmzdrqOVdeeWWccsopcckll/R0xNhtt93igQceiI9//ONtSv3Lly+PmTNndvicI488Mu69995OvXvcuHFxyy23xBe/+MW811etWhWzZ8/e6jlVVVUxe/bs2HvvvTv1/kKGDRsWTz75ZJx88snx7LPP5r1ny5YtbbbHJ8nkyZPjZz/7WZxyyik5Pwjw7W9/O7Zs2RK33XZbpFL5f10yAAAAAPA3nd7gXmCu4A4AAAAAyZf/u3tASUqlUnH99dfH3Llz44Mf/GCPnr3//vvHBz7wgZLO83/+z/+JH/3oR1FdXd3p96VSqbjmmmvimmuu6fSznTFp0qSYM2dODB48uEvPn3766TF37tzYZpttOv3sRRddFN/85jejvLy8S+/edttt41e/+lVMmjSpS88XMmLEiHjqqafiy1/+clRWVnb7vL4uk5944onxi1/8IgYOHJhz7fbbb4/Pfe5z0drqQzUAAAAAaE9zgQ3u1QU2tVeV5/8+YHMmdxkLAAAAAJAsCu5QJOXl5Xn/0xOOP/74+NOf/hQ//OEPY+zYsV0+Z++9946LL744FixYEIsWLYoxY8aUfJ7Pf/7z8eKLL8bxxx/f4WcOOuigeOaZZ+LKK6/s9Pu6YtKkSfHyyy/Hqaee2uEy9i677BIzZ86M+++/P2pqarr87ssvvzx+/etfx7hx4zr8zIABA+Lf/u3fYvHixTFhwoQuv7s9lZWVccMNN8RLL70U5557bpd+SGH06NFx6aWXxmuvvdYLCds3ceLEmDt3bt4fXJgxY0acddZZbbb2AwAAAABtFdrgXlmg4F5oboM7AAAAACRfKpvN9tmqipaWlliyZEmb2R577BEVFRV9FQHel1599dWYO3duzJ8/P1577bV4++23Y8OGDZFOp2PgwIExaNCgGDZsWHzwgx+MvffeO/bff/84+uijY8cdd+zXeRYuXBg/+clPYt68efHnP/856uvro6ysLIYMGRJ77rlnHHLIITF58uQ48sgje/S9nbF06dKYPXt2PPPMM/HKK6/E2rVrY8uWLVFbWxu77rprfPjDH45PfvKTcdJJJ/XYD0j83dNPPx2PPvpozJs3L5YvXx7r1q2LTCYTgwYNip133jn23XffmDhxYpx88skxcuTInOdfffXVnNkHPvCBLm2Xf68NGzbEnDlzYt68ebFo0aJYtmxZrF+/PtLpdGyzzTYxaNCg2GGHHWKfffaJsWPHxnHHHRcf+tCH+nx7e7H5ugsAAAC9Z/Xq1TF9+vR275k2bVqMGjWqjxJB/zb13hfjly+/kzM/+7Bd4prJ++XM5/15TZxz5/yceWV5KpZc97FeyQgAAAAA9AwFdwDop3zdBQAAgN6j4A596/N3/y6eWLw6Z/65j+wWV30897d9Pv/6ujjjR7/Ne9YbN3zsfbcMAwAAAABKSf7fzwgAAAAAAAAJ0dTSmndeWZ7/o67K8sIF9uZMn+1+AgAAAAC6QMEdAAAAAACAREsXKLhXVRQquBf+CKw5k/8sAAAAACAZFNwBAAAAAABItEKl9KoCm9oV3AEAAACgdCm4AwAAAAAAkGjpQgX3AhvcqyryF9/bOwsAAAAASAYFdwAAAAAAABKtuSWbd15VYFN7exvcWzL5zwIAAAAAkkHBHQAAAAAAgEQrtHW9ssAG9/YK7s02uAMAAABAoim4AwAAAAAAkGjplvyl9K5scFdwBwAAAIBkU3AHAAAAAAAg0QptcK8qsMG9UPE9IiLdku2RTAAAAABA71BwBwAAAAAAINE6vcG9IlXwLBvcAQAAACDZFNwBAAAAAABItIIF9wIb3CvKCn8EpuAOAAAAAMmm4A4AAAAAAECiFSqlVxba4F5eeIN7WsEdAAAAABJNwR0AAAAAAIDEam3NRktrNu+1QhvcU6lUwZJ7cyb/WQAAAABAMii4AwAAAAAAkFjtbVwvVHCPKLzdvbnFBncAAAAASDIFdwAAAAAAABKr3YJ7gRJ7ROGCe0urgjsAAAAAJJmCOwAAAAAAAImVbmfjelc2uKcz2W5nAgAAAAB6j4I7AAAAAAAAidXcxQ3uVeWp/Oe1U5gHAAAAAIpPwR0AAAAAAIDEam+De2V7G9wLXGuvMA8AAAAAFJ+COwAAAAAAAInVXsG9vQ3ulQWuKbgDAAAAQLIpuAMAAAAAAJBY6XYK6e0V3CvKUgXOy3Y7EwAAAADQexTcAQAAAAAASKx2N7hXFP6oq9A1G9wBAAAAINkU3AEAAAAAAEisrhbcKwtsd29u5zwAAAAAoPj6tOCeSuX+Kshs1q+BBIDekO9rbL6vxQAAAACQZM2Z/J8llaUiyssKf7+rsjz/teZWn00BAAAAQJL1acG9rCz3dZlMpi8jAMD7Rr6vsfm+FgMAAABAkqULfJbU3vb2iHY2uGdscAcAAACAJOvzDe7l5eVtZi0tLX0ZAQDeN977Nba8vNwGdwAAAABKTrol/8b1qgIF9q1db25RcAcAAACAJOvzNa5VVVVt/rx58+a+jgAA7wubNm1q8+fKysoiJQEAAACArksX2LhugzsAAAAA9E99XnAfOHBgmz9v3LixryMAQL+XzWbj3XffbTMbNGhQkdIAAAAAQNelC2xc39oG98oCBfh0Jv9GeAAAAAAgGYpecG9qaop0Ot3XMQCgX2tqaorm5uY2s9ra2iKlAQAAAICuK7Rxfesb3FOdOg8AAAAASIY+L7jX1NREWVnb165atSqyWdsyAKCnrF+/vs2fKysro7q6ukhpAAAAAKDrCm1wr9zaBvey/NcV3AEAAAAg2fq84J5KpWLo0KFtZhs3bozVq1cruQNAD6ivr4/6+vo2s9ra2kil8m+sAgAAAIAkK1Rw3+oG9wob3AEAAACgFPV5wT0iYuTIkVFeXt5mVldXF2+//Xak0+liRAKAktfa2hpr166Nv/71r23m+X64DAAAAABKRbpAIX2rG9wLXE+3WLgEAAAAAElWUYyXlpeXx3bbbRcrVqxoM9+0aVO8/vrrUV1dHQMHDoyBAwdGRUVFlJWVRVmBXyMJAO9Xra2tkclkIp1Ox8aNG2Pjxo3R2pr7Yd/2228fAwYMKEJCAAAAAOi+rm5wrypQcG/J8z00AAAAACA5ilJwj4gYPHhwZLPZWLlyZc61pqamaGpqirq6uiIkA4D+Y/jw4TFkyJBixwAAAACALmsusMG9eisF90Ib3AudBwAAAAAkQ9EK7hERQ4YMiVQqFatWrYqWlpZiRgGAfmf48OExatSoYscAAAAAgG4ptMG9UIF9a9ebW7LdzgQAAAAA9J6iFtwj/rbJfeDAgbF27dqor6+PVr8WEgC6paamJkaPHh01NTXFjgIAAAAA3ZYusHG9amsF94pUp84DAAAAAJKh6AX3iIjy8vIYPXp0jBo1KhobG2PTpk2xadOmSKfTkclkih0PABKtvLw8ampqora2Nmpra6OysrLYkQAAAACgxzQXKrhXtF9wL1SAL3QeAAAAAJAMiSi4/7/s3U2PLFt6luEVX1m7Sg1ugdqS7QYmIIEE3f//Z7gZgECMfCwLGNDGraqdGV+MLFko3thVmRG53nN0XcOIXStjfNat5/yjpmnK29tbeXt7K7/5zW9KKaWs61qWZSnr6n8XCQD/VNu2pWma0jTbS1QAAAAA8EtwnbaD9OFHC+4CdwAAAAD4WUoVuG9pmqZ0XVf7MwAAAAAAAKjgFgTuP1pw77vtYYjoPAAAAAAgh/3/8gcAAAAAAAAVRYvrlyBg/0ff+u0Bpe+jwB0AAAAAMhO4AwAAAAAAkNa9C+5vl+3A/f02PfxNAAAAAMB5BO4AAAAAAACkNc7r5vMfBe7fgsDdgjsAAAAA5CZwBwAAAAAAIK1owX3ofrDgPmwH7rd5KdMscgcAAACArATuAAAAAAAApHUNYvQfLbi/Xfrw3cc4P/RNAAAAAMB5BO4AAAAAAACkNQYL7pcfLLi/XuL3HzeBOwAAAABkJXAHAAAAAAAgrdudC+6vOwvu7wJ3AAAAAEhL4A4AAAAAAEBat3sX3IcufPcxCtwBAAAAICuBOwAAAAAAAGmNwYL78IPA/e0SB+4W3AEAAAAgL4E7AAAAAAAAaYUL7v3+NddL35am2X733YI7AAAAAKQlcAcAAAAAACCtW7Dg/qPAvWma8jpsr7hbcAcAAACAvATuAAAAAAAApBUuuHc/vuZ6u0SB+/TQNwEAAAAA5xG4AwAAAAAAkNK6rncvuJdSyrdgwf37aMEdAAAAALISuAMAAAAAAJDSvKxlXbfffSZwjxfcBe4AAAAAkJXAHQAAAAAAgJSi9fZSShm6H19zvV76zecfFtwBAAAAIC2BOwAAAAAAACndpjhwv3wmcB+2/82HBXcAAAAASEvgDgAAAAAAQEp7C+6Xvvnh378FC+7vAncAAAAASEvgDgAAAAAAQEr7C+7dD//+ddj+Nx+jwB0AAAAAshK4AwAAAAAAkNI4r+G7S//ja67XSxC4W3AHAAAAgLQE7gAAAAAAAKS0t+A+dM0P//5N4A4AAAAAPzsCdwAAAAAAAFLaC9w/teA+bAfu76PAHQAAAACyErgDAAAAAACQ0m1+MHAPF9ynu78JAAAAADiXwB0AAAAAAICU9hbch/b+BfcPC+4AAAAAkJbAHQAAAAAAgJSiBfeha0rbNj/8+7dgwf39JnAHAAAAgKwE7gAAAAAAAKQ0BgvuQ/e5K67XS7/5/LvAHQAAAADSErgDAAAAAACQUrTgfuk/GbgPwYL7KHAHAAAAgKwE7gAAAAAAAKQ0RoH7Jxfc3y5B4G7BHQAAAADSErgDAAAAAACQ0nXaDtyHTwbu34IF99u0lHlZ7/4uAAAAAOA8AncAAAAAAABSugWB+0v/2IJ7KaV8jFbcAQAAACAjgTsAAAAAAAApRYH75ZOB++te4H4TuAMAAABARgJ3AAAAAAAAUro+uOD+OgjcAQAAAODnRuAOAAAAAABASo8uuL/tLLi/j9Nd3wQAAAAAnEvgDgAAAAAAQErXaXtl/aWPw/V/6nUncLfgDgAAAAA5CdwBAAAAAABIKVpwf/nkgvu3nRBe4A4AAAAAOQncAQAAAAAASOkaBO6XTwbubduUb8P2v/0YBe4AAAAAkJHAHQAAAAAAgJQeXXAvpZS3S7/5/N2COwAAAACkJHAHAAAAAAAgpeu0HaF/dsG9lFJeh27z+YfAHQAAAABSErgDAAAAAACQ0jVccN+O1re8XoLAfRS4AwAAAEBGAncAAAAAAABSugWB+1cW3N+CwP3dgjsAAAAApCRwBwAAAAAAIKV4wf3zV1zfBgvuAAAAAPBzInAHAAAAAAAgpTMX3D9u013fBAAAAACcS+AOAAAAAABAStdpe2X9pd+O1rdEgfv7zYI7AAAAAGQkcAcAAAAAACCla7Dg/vKFBfdvQ7DgPgrcAQAAACAjgTsAAAAAAAAp3YLA/fKFwD1acP+w4A4AAAAAKQncAQAAAAAASOmIBfdXC+4AAAAA8LMicAcAAAAAACClKHD/yoL766XffP5uwR0AAAAAUhK4AwAAAAAAkNJ12o7QX/rtVfYtb5dgwV3gDgAAAAApCdwBAAAAAABI6RYsuL98ZcF9CAL3UeAOAAAAABkJ3AEAAAAAAEhnXddyPSJwt+AOAAAAAD8rAncAAAAAAADSGec1fPcyWHAHAAAAgF8qgTsAAAAAAADpXKc4QL9029H6lrdgwf39Nn35mwAAAACA8wncAQAAAAAASOc6LeG7Ly24B4H793EpyxKvxAMAAAAAdQjcAQAAAAAASOe2E7hfui8E7kO89v59ZyUeAAAAAKhD4A4AAAAAAEA6Ry24v1368N37TeAOAAAAANkI3AEAAAAAAEjnGQvuHwJ3AAAAAEhH4A4AAAAAAEA61ymOz192ovX/3+tlJ3AfBe4AAAAAkI3AHQAAAAAAgHT2Ftxf+s9fcb3tBO7vFtwBAAAAIB2BOwAAAAAAAOlcg8C9aUrp2+bT53zbWXv/ELgDAAAAQDoCdwAAAAAAANK5Ttvx+Uvflqb5fODetU24+P4xTnd9GwAAAABwHoE7AAAAAAAA6dyCBfdL9/XrrdfL9or7x237NwAAAACAegTuAAAAAAAApHMNAveXYTtW3/MW/M37zYI7AAAAAGQjcAcAAAAAACCdKHA/dMF9nL98FgAAAABwLoE7AAAAAAAA6cQL7gcG7jeBOwAAAABkI3AHAAAAAAAgnduBC+5vQ7/5/F3gDgAAAADpCNwBAAAAAABI5zptx+cvw/Ya+55vwYL791HgDgAAAADZCNwBAAAAAABI5zpuL7i/9PcsuG8H7hbcAQAAACAfgTsAAAAAAADp3OYDA/dgwV3gDgAAAAD5CNwBAAAAAABI58gF929B4P59FLgDAAAAQDYCdwAAAAAAANK5zdvx+eWeBfchWnCfvnwWAAAAAHAugTsAAAAAAADpxAvu27H6ntdgwf3DgjsAAAAApCNwBwAAAAAAIJ3bvB24X7qvX2+FgftN4A4AAAAA2QjcAQAAAAAASCdccB++fr31NmwH7u8CdwAAAABIR+AOAAAAAABAOtdpOz5/6b9+vfWrb8Pm87/5P+9lCpbiAQAAAIA6BO4AAAAAAACkcwvC88sdgfu/+/NfbT7/Pi7lv/+vP335PAAAAADgPAJ3AAAAAAAA0rmO24H7S999+ax//xf/rAxds/nuDz/98cvnAQAAAADnEbgDAAAAAACQzpEL7i99V/7DX/zzzXd//dPff/k8AAAAAOA8AncAAAAAAADSiRfc77ve+t1v/2zzuQV3AAAAAMhF4A4AAAAAAEA6Ry64l1LK7377683n//Xv/qF8H+e7zgQAAAAAjidwBwAAAAAAIJ1rEJ2/9N1d5/0+CNynZS3/5e/+711nAgAAAADHE7gDAAAAAACQznXaXnB/uXPB/d/++a/K22U7jv/DT39/15kAAAAAwPEE7gAAAAAAAKRzCwL3y52Be9c25T/+5Z9tvvvrn/5415kAAAAAwPEE7gAAAAAAAKRz9IJ7KaX87rfbgbsFdwAAAADIQ+AOAAAAAABAKuu6ltt87IJ7KaX87l/9evP5//jffyr/8H28+1wAAAAA4DgCdwAAAAAAAFKJ1ttLKeWl7+4+9/fBgvu6lvKf/9aKOwAAAABkIHAHAAAAAAAglWi9vZRSXh5YcP/X/+Kt/Ppt2Hz3h58E7gAAAACQgcAdAAAAAACAVK7jOYF70zTlP/3V9or7H376493nAgAAAADHEbgDAAAAAACQynWaw3eXBwL3Ukr5/W9/vfn8v/3PPz10LgAAAABwDIE7AAAAAAAAqdymvQX37qGz/82/fNt8/nGLo3oAAAAA4HkE7gAAAAAAAKRy3Q3cH7veGrrtvx/n+DcBAAAAgOcRuAMAAAAAAJDK3oL7ReAOAAAAAL9oAncAAAAAAABSOXPBve+azefTvD50LgAAAABwDIE7AAAAAAAAqUQL7m1TSh8ssH/WEATu42LBHQAAAAAyELgDAAAAAACQynWaN5+/9N3DZw9BIG/BHQAAAAByELgDAAAAAACQyjVYcL/0j19t9W0QuC9rWVeROwAAAADUJnAHAAAAAAAglVsQuL8cELgPXRO+G624AwAAAEB1AncAAAAAAABSuU7z5vOX4YAF9y4+Y1q2w3oAAAAA4HkE7gAAAAAAAKQSLbhfduL0z9pdcJ8suAMAAABAbQJ3AAAAAAAAUrkGgftL3z189rATyY8W3AEAAACgOoE7AAAAAAAAqUSB+6V//Gqrb+MF92m24A4AAAAAtQncAQAAAAAASCVecH/8amt3wX224A4AAAAAtQncAQAAAAAASOU6zZvPj1hwF7gDAAAAQG4CdwAAAAAAAFK5hQvu3cNn910TvpuW9eHzAQAAAIDHCNwBAAAAAABI5RoF7oMFdwAAAAD4pRO4AwAAAAAAkEq44L4Tp3/WsLPgPs4W3AEAAACgNoE7AAAAAAAAqZy54N638RmTBXcAAAAAqE7gDgAAAAAAQCq3ad58frHgDgAAAAC/eAJ3AAAAAAAAUokX3LuHz26apvTtduQ+WnAHAAAAgOoE7gAAAAAAAKRyHbdD8yMW3EsppQ9W3KdF4A4AAAAAtQncAQAAAAAASOUWLKm/9MdcbQ3t9jnjvB5yPgAAAABwP4E7AAAAAAAAqVynefP55ajAPThnDMJ6AAAAAOB5BO4AAAAAAACkcpvOXXDv22bz+WTBHQAAAACqE7gDAAAAAACQyjUK3IfukPOHzoI7AAAAAGQlcAcAAAAAACCVaMH9EoTpXzV0wYL7YsEdAAAAAGoTuAMAAAAAAJBKvOB+zNVWb8EdAAAAANISuAMAAAAAAJDKdZw3nx+14N632wvu42zBHQAAAABqE7gDAAAAAACQyi1YUn8ZukPOH4JQfrLgDgAAAADVCdwBAAAAAABIY1nWcEn9qIlq2OEAACAASURBVAX3oYsW3AXuAAAAAFCbwB0AAAAAAIA0ovX2Ukp5GY652uqDUD4K6wEAAACA5xG4AwAAAAAAkMZ13Anc+3MX3KfFgjsAAAAA1CZwBwAAAAAAII3rPIfvjgvcLbgDAAAAQFYCdwAAAAAAANLYX3DvDvmNvo0CdwvuAAAAAFCbwB0AAAAAAIA0rlMcmV8OW3BvNp9PFtwBAAAAoDqBOwAAAAAAAGncdgL3l8MC9+1zpsWCOwAAAADUJnAHAAAAAAAgjes0h++OWnDvgwX322TBHQAAAABqE7gDAAAAAACQxt6C+yVYXv+qobXgDgAAAABZCdwBAAAAAABI4xoE7n3blP6gwD1acJ9mC+4AAAAAUJvAHQAAAAAAgDSiBfdLf9y11hCE8rfZgjsAAAAA1CZwBwAAAAAAII1owf3l0MA9WnAXuAMAAABAbQJ3AAAAAAAA0rjN8+bzIxfc+2DBfVrWw34DAAAAALiPwB0AAAAAAIA0rmO04N4d9htDELjfgvV4AAAAAOB5BO4AAAAAAACkMc7bkXnfNYf9xtBun2XBHQAAAADqE7gDAAAAAACQRtSYd81xgXsfLLhPQVwPAAAAADyPwB0AAAAAAIA01nW7cG8PDNyHYA1+nC24AwAAAEBtAncAAAAAAADSiBbcD+zbyxAsuI8W3AEAAACgOoE7AAAAAAAAaUQb6s2BhXsfLLhPUV0PAAAAADyNwB0AAAAAAIA01nU7Mj9wwL0MrQV3AAAAAMhK4A4AAAAAAEAaQd9egib9LkO/ncsL3AEAAACgPoE7AAAAAAAAaSzhgvtxG+59UMtPc1DXAwAAAABPI3AHAAAAAAAgjSVacD+uby9DZ8EdAAAAALISuAMAAAAAAJDGWoIF9+a4wn3otq/IRgvuAAAAAFCdwB0AAAAAAIA01qAxP7BvL30QuE+LBXcAAAAAqE3gDgAAAAAAQBprULi3Ry64t9tnjfMa/j4AAAAA8BwCdwAAAAAAANJYogX3A38jWnAvpZQ5+gAAAAAA4CkE7gAAAAAAAKQRDagfuuDexWeNs8AdAAAAAGoSuAMAAAAAAJDGEhXuB064DzsL7uOyHPdDAAAAAMCXCdwBAAAAAABIYw0C9/bAwL3fWXCfLLgDAAAAQFUCdwAAAAAAANKI8vLmwAn33QX32YI7AAAAANQkcAcAAAAAACCNJVpwP/BWa9g5TOAOAAAAAHUJ3AEAAAAAAEgj6NtL2xy34N538VnTHG3IAwAAAADPIHAHAAAAAAAgjeUJffnQWXAHAAAAgKwE7gAAAAAAAKSxlu3C/cgF92FnwX204A4AAAAAVQncAQAAAAAASGMN+vID+/bS7yy4T4sFdwAAAACoSeAOAAAAAABAGmtQuB+54N63ewvuAncAAAAAqEngDgAAAAAAQBpLtOB+4G8MOwvu4xx8AAAAAADwFAJ3AAAAAAAA0liCBffmwAX3rm1KNOI+CdwBAAAAoCqBOwAAAAAAAGkEfXs5sG8vpZTSByvu47Ic+0MAAAAAwJcI3AEAAAAAAEhjDQr3aHH9XpcocJ8E7gAAAABQk8AdAAAAAACANIIB99IePOHed9vnTUv0BQAAAADAMwjcAQAAAAAASGMJFtwP7ttL3wYL7rMFdwAAAACoSeAOAAAAAABAGkHfXpqDC/dLsOA+zhbcAQAAAKAmgTsAAAAAAABpLFHgfvDv9N32NdlkwR0AAAAAqhK4AwAAAAAAkMh24d4evODeRwvuUWEPAAAAADyFwB0AAAAAAIA0lmBA/eC+vQzt9jXZOFlwBwAAAICaBO4AAAAAAACksazPWXAf+u3zpqiwBwAAAACeQuAOAAAAAABAGtt5+/EL7n204D5HXwAAAAAAPIPAHQAAAAAAgDSiBfemHLzg3gUL7gJ3AAAAAKhK4A4AAAAAAEAeQV/eHrzgPnTRgvty7A8BAAAAAF8icAcAAAAAACCNcMH94MC9jwL3ReAOAAAAADUJ3AEAAAAAAEgjGHAv7cGF+xBMwk9z9AUAAAAAwDMI3AEAAAAAAEhjCfryoxfch2jBfbbgDgAAAAA1CdwBAAAAAABIY123C/fm4MK977bPGy24AwAAAEBVAncAAAAAAADSCPr2cvCAe7jgPllwBwAAAICqBO4AAAAAAACksQSFe3v0gnsbLbgL3AEAAACgJoE7AAAAAAAAaUQL7kGPfreh374mG5fgAwAAAACApxC4AwAAAAAAkEa04N4cvOA+BMX8ZMEdAAAAAKoSuAMAAAAAAJBGtJ9+cN9e+m77mmyaLbgDAAAAQE0CdwAAAAAAANJYowX3cvCCexC43yy4AwAAAEBVAncAAAAAAADSCPr20h684D502wdacAcAAACAugTuAAAAAAAApLFEC+4HB+59u31NNi0W3AEAAACgJoE7AAAAAAAAaSzhgvuxhfvQb593s+AOAAAAAFUJ3AEAAAAAAEgjzMsPXnAfogX32YI7AAAAANQkcAcAAAAAACCNdd1O3I9ecO+77fMmC+4AAAAAUJXAHQAAAAAAgDSCvr20By+49932NdlowR0AAAAAqhK4AwAAAAAAkMYSFO5NObZwvwQL7uMicAcAAACAmgTuAAAAAAAApPG0Bfd2+5psmoMPAAAAAACeQuAOAAAAAABAGtGCe2mOLdz7aMFd4A4AAAAAVQncAQAAAAAASCPKy49ecL9029dk47wc+0MAAAAAwJcI3AEAAAAAAEhjDRbcm3L0gvv2NdkkcAcAAACAqgTuAAAAAAAApLEEE+5HL7j33faBY/QBAAAAAMBTCNwBAAAAAABII1xwPzhwvwQL7qMFdwAAAACoSuAOAAAAAABAGtGAenNw4d4Hk/DrWspsxR0AAAAAqhG4AwAAAAAAkEaUlrdHB+7BgnspVtwBAAAAoCaBOwAAAAAAAGms63bifnDfXoYuPlDgDgAAAAD1CNwBAAAAAABII+jbS3t44B5fk01ztCMPAAAAAJxN4A4AAAAAAEAaS7TgXo4t3HcX3BcL7gAAAABQi8AdAAAAAACANKIF9+bgBfe+teAOAAAAABkJ3AEAAAAAAEgjXHA/uHAf+viabJwtuAMAAABALQJ3AAAAAAAA0ogW3NuDF9yHnQNHC+4AAAAAUI3AHQAAAAAAgDTWsh2XtwcvuPddfE02LRbcAQAAAKAWgTsAAAAAAABpLMF4+sF9exm6nQX3yYI7AAAAANQicAcAAAAAACCNdd2Oy5uDC/dhZ8F9tOAOAAAAANUI3AEAAAAAAEgj6NvLwQPupW/jE6fZgjsAAAAA1CJwBwAAAAAAII0oLW8PXnDvdgL3cbbgDgAAAAC1CNwBAAAAAABIYwkm3A/u20vTNOXSbV+VCdwBAAAAoB6BOwAAAAAAAGkEfXvZGVy/W99tHzrN0Y48AAAAAHA2gTsAAAAAAABphAvu5fjCvQ+q+Wmx4A4AAAAAtQjcAQAAAAAASCNacG9OWHC/9NtXZTcL7gAAAABQjcAdAAAAAACANNagcG9PKNz7dvuqbJotuAMAAABALQJ3AAAAAAAA0lieuODed9uHThbcAQAAAKAagTsAAAAAAABprOV5C+6Xbvuq7GbBHQAAAACqEbgDAAAAAACQRo4Fd4E7AAAAANQicAcAAAAAACCNNQzcjy/c+3b7qmyKKnsAAAAA4HQCdwAAAAAAANJYg8L9hAH3MgQL7jcL7gAAAABQjcAdAAAAAACANJYgcG9PWHAfumDBfbbgDgAAAAC1CNwBAAAAAABII0rLT+jbSx8suE8W3AEAAACgGoE7AAAAAAAAaSxLtOB+/G9FC+5j8A0AAAAAwPkE7gAAAAAAAKQRL7gfX7iHgftkwR0AAAAAahG4AwAAAAAAkMYaFO4nDLiXPpiFnyy4AwAAAEA1AncAAAAAAADSWIPCvX3mgvtswR0AAAAAahG4AwAAAAAAkEY0nn5C3176bvtQgTsAAAAA1CNwBwAAAAAAII211F9wn+agsgcAAAAATidwBwAAAAAAII1owb2csOA+RAvu4UcAAAAAAGcTuAMAAAAAAJDGuj5vwb1vt6/Kxmk5/LcAAAAAgM8RuAMAAAAAAJBG0LefMeBehm77qmxaBO4AAAAAUIvAHQAAAAAAgDSWJy64D932meMcVPYAAAAAwOkE7gAAAAAAAKQRpeXtCRPufRC4W3AHAAAAgHoE7gAAAAAAAKQRDLiXckLgPnTbV2XjZMEdAAAAAGoRuAMAAAAAAJDCGtbtpbTN8YV7GLhbcAcAAACAagTuAAAAAAAApLDsDKefMOBe+nb71Gm24A4AAAAAtQjcAQAAAAAASGF3wT2I0R/RRwvuswV3AAAAAKhF4A4AAAAAAEAKz15wv3TbpwrcAQAAAKAegTsAAAAAAAApLDsL7k3zvAX3aa+0BwAAAABOJXAHAAAAAAAgvfaECfcuiOZngTsAAAAAVCNwBwAAAAAAIIVnL7iX4MidzwAAAAAATiZwBwAAAAAAIIW9sPyMBfc2iOZXhTsAAAAAVCNwBwAAAAAAIIXdBfdobv0B0YnydgAAAACoR+AOAAAAAABACntheTC2/pA2uCkz4A4AAAAA9QjcAQAAAAAASGFd4ndnBO7RKvzekjwAAAAAcC6BOwAAAAAAACnsheXtCYV7dKS8HQAAAADqEbgDAAAAAACQwl5YfsqCe3DoasEdAAAAAKoRuAMAAAAAAJDC0xfcg+f6dgAAAACoR+AOAAAAAABACntheXvCgnsUzevbAQAAAKAegTsAAAAAAAAprLvT6ScsuAdH7i3JAwAAAADnErgDAAAAAACQwl5WfsaCe3Skvh0AAAAA6hG4AwAAAAAAkMLecnoTza0/IDrTgjsAAAAA1CNwBwAAAAAAIIW9rvyUBfdwwv343wIAAAAAPkfgDgAAAAAAQAq7C+7l+MK9DQp3fTsAAAAA1CNwBwAAAAAAIIW9Bfdwbf0B0ZF7oT0AAAAAcC6BOwAAAAAAACk8PXAPztS3AwAAAEA9AncAAAAAAABS2FtOb08o3KMz16JwBwAAAIBaBO4AAAAAAACksJeVnxG4l+DIRd8OAAAAANUI3AEAAAAAAEhhb8H9jL49jOYF7gAAAABQjcAdAAAAAACAFHb69lMC9+jIvdAeAAAAADiXwB0AAAAAAIAU1r0F9zBHv58BdwAAAADIR+AOAAAAAABACntheXvCgnsbFO57oT0AAAAAcC6BOwAAAAAAACksewvu0dz6A6ITF307AAAAAFQjcAcAAAAAACCFZYnfnbHgvhfNW3EHAAAAgDoE7gAAAAAAAKSwlicvuO8cqW8HAAAAgDoE7gAAAAAAAKSwF5Wf0LeXvSP17QAAAABQh8AdAAAAAACAFPYC9/aEwr1t4zNXE+4AAAAAUIXAHQAAAAAAgBSWnaj8hAH33TMXfTsAAAAAVCFwBwAAAAAAIIW9pvyMBfdm58x192sAAAAAgLMI3AEAAAAAAEhhd8H9hAn3vTN3PgUAAAAAOJHAHQAAAAAAgBT2ovJTAveddwJ3AAAAAKhD4A4AAAAAAEAK696C+26Ofp92p5pfi8IdAAAAAGoQuAMAAAAAAJDCstOUt2csuO+cufctAAAAAMB5BO4AAAAAAACksLfgvre2fq+9Vfi9bwEAAAAAziNwBwAAAAAAIIW91fQT+nYL7gAAAACQkMAdAAAAAACAFNYSV+XNGQvue0cK3AEAAACgCoE7AAAAAAAAKaxBVH7GensppbQ7B+/F9gAAAADAeQTuAAAAAAAApBAF7nsh+iP2jl307QAAAABQhcAdAAAAAACAFJagcD9pwL00OyevUW0PAAAAAJxK4A4AAAAAAEAKUeB+1oJ7a8EdAAAAANIRuAMAAAAAAJBC2JSfNOG+182v8dcAAAAAACcSuAMAAAAAAJDCGi64n/N7zX7hDgAAAABUIHAHAAAAAAAghaBvL+1eiP6AvVMXgTsAAAAAVCFwBwAAAAAAIIUoKj9pwH13wX014Q4AAAAAVQjcAQAAAAAASGENJtzPWnBvd4614A4AAAAAdQjcAQAAAAAASCGMyk+acG92Do5iewAAAADgXAJ3AAAAAAAAknjugvvesfp2AAAAAKhD4A4AAAAAAEAK0YL7SX27wB0AAAAAEhK4AwAAAAAAkMISVOXnLbjH567BmjwAAAAAcC6BOwAAAAAAAClEq+knDbiXdufgaE0eAAAAADiXwB0AAAAAAIAUogX3vaX1RzQ76fwa1fYAAAAAwKkE7gAAAAAAAKS2t7R+1rnydgAAAACoQ+AOAAAAAABACvGC+0k/uBe4W3AHAAAAgCoE7gAAAAAAAKQQNeXtSYV7s1O469sBAAAAoA6BOwAAAAAAACksQVR+1oB7u7fgftJvAgAAAAD7BO4AAAAAAACksAaz6c1ZC+475y4m3AEAAACgCoE7AAAAAAAAKURN+Ul9+/6Cu74dAAAAAKoQuAMAAAAAAJBCtJrenrXgXiy4AwAAAEA2AncAAAAAAABSiJLyvaX1h1hwBwAAAIB0BO4AAAAAAACkEK2mNyctuJ8WzgMAAAAAdxO4AwAAAAAAkEK0mn5S374bzkexPQAAAABwLoE7AAAAAAAAKazRgvtJv7e34K5vBwAAAIA6BO4AAAAAAACkEDXl7UkT7s1OOm/BHQAAAADqELgDAAAAAACQwrIEC+4nTbjvnStvBwAAAIA6BO4AAAAAAACk8PQF973AXeEO/D927mDFgl3Zrmim/v+blW4YzPWllnweZ0eEwGM0d4Ei+zVZAAAAwAiBOwAAAAAAAFcIA+5l3icX7p/CHQAAAABGCNwBAAAAAAC4QorKqxbc12nBveQiAAAAAPD/InAHAAAAAADgCmk0fRX9R+s9hPO7e04eAAAAAHieR+AOAAAAAADAJXYo3N+nZsH99Kq8HQAAAABmCNwBAAAAAAC4QorKV03f/hwG3OOaPAAAAABQS+AOAAAAAADAFdKC+7FE/xfew7ufwh0AAAAARgjcAQAAAAAAuEJqyqsW3J8nt/PydgAAAACYIXAHAAAAAADgCmk1vbBvf1Yo3OOaPAAAAABQSuAOAAAAAADAFXZccK9L3NPL+nYAAAAAmCFwBwAAAAAA4AopKi/s22M8r28HAAAAgBkCdwAAAAAAAK6wQ+H+Vhbu4en0LQAAAABALYE7AAAAAAAAV0hJ+erv2024AwAAAMAQgTsAAAAAAABX+NKCe87Q/7UV1uEtuAMAAADADIE7AAAAAAAAV0hN+Sr8j1bo2+O3AAAAAAC1BO4AAAAAAABcIa2mTyy469sBAAAAYIbAHQAAAAAAgCukqDytrP9CejrF9gAAAABALYE7AAAAAAAAV4gL7gOFu74dAAAAAGYI3AEAAAAAALhCispXYd++Qjz/KdwBAAAAYITAHQAAAAAAgCukqLywb3/SOLy8HQAAAABmCNwBAAAAAAC4wo4L7nWJe15wLzsJAAAAABwI3AEAAAAAALhCisrfwsA9vbwV7gAAAAAwQuAOAAAAAADAFVJUXti3x7fl7QAAAAAwQ+AOAAAAAADA1VZp4P73458FdwAAAAAYIXAHAAAAAADgCnHB/akr3NPL+nYAAAAAmCFwBwAAAAAA4AopKl+F/9FaacH9UbgDAAAAwASBOwAAAAAAAFcYWXAPT+9ddhIAAAAAOBC4AwAAAAAAcIUdRtNThP4L6Wn77QAAAAAwQ+AOAAAAAADAJf7Oyldh4f6Gt9OaPAAAAABQS+AOAAAAAADAFfb++/fSBXcT7gAAAABwFYE7AAAAAAAAV/gGFtzT2+lbAAAAAIBaAncAAAAAAACusENTXjjgHhfc07cAAAAAALUE7gAAAAAAAFzhS4F74YJ7ejl9CwAAAABQS+AOAAAAAADAFb5QlRf27c8Kj3+Pwh0AAAAAJgjcAQAAAAAAuEJKyldh4J4m3Le+HQAAAABGCNwBAAAAAAC4wk4L7qlC/4G04P6EbwEAAAAAagncAQAAAAAAuEJaTV+F/9FK6bwFdwAAAACYIXAHAAAAAADgCl9acE8r6z+QB9wV7gAAAAAwQeAOAAAAAADAFVJTXpe3P88Khbu8HQAAAABmCNwBAAAAAAC4whey8hShV9oKdwAAAAAYIXAHAAAAAADgCnv//Xtl3x4X3NOcPAAAAABQSuAOAAAAAADAFSYW3NPT+nYAAAAAmCFwBwAAAAAA4Ap7ICqPgXuI7QEAAACAWgJ3AAAAAAAArvCF2fTKBff0tgV3AAAAAJghcAcAAAAAAOAKKSov7Nuf9PTEmjwAAAAAIHAHAAAAAADgEjsuuBceTQvuj8IdAAAAACYI3AEAAAAAALhCSspX4YR7iufTmjwAAAAAUEvgDgAAAAAAwBV2isoLF9zT05/CHQAAAABGCNwBAAAAAAC4QorKaxfc/35b3w4AAAAAMwTuAAAAAAAAXCFF5YUD7k9q5+OaPAAAAABQSuAOAAAAAADAFb6nf8H9Dfl8+hYAAAAAoJbAHQAAAAAAgCvs/ffvhX27BXcAAAAAuIzAHQAAAAAAgCvs7++q/K1ccE9Ph28BAAAAAGoJ3AEAAAAAALhCSspX4YL7CoW7vB0AAAAAZgjcAQAAAAAAuMKXFtyf/gX3tCYPAAAAANQSuAMAAAAAAHCF1JRXLrineF7fDgAAAAAzBO4AAAAAAABcIa2mp5X1X8gL7nU3AQAAAIBM4A4AAAAAAMAVUlP+Fhbu6e0vfg0AAAAAUEngDgAAAAAAwBXSanrlgvtKb+vbAQAAAGCEwB0AAAAAAIA7fH9X5atywT38vsO3AAAAAAC1BO4AAAAAAABcIS64F958QzyvbwcAAACAGQJ3AAAAAAAArpBW0ysX3Fd4OsX2AAAAAEAtgTsAAAAAAABXSKvphX37k/bhv0fhDgAAAAATBO4AAAAAAABcIS24vwML7im2BwAAAABqCdwBAAAAAAC4WorQfyG185/CHQAAAABGCNwBAAAAAAC4QlxwL7z5htfl7QAAAAAwQ+AOAAAAAADAFdJo+iqccF/hv2UptgcAAAAAagncAQAAAAAAuMJVC+76dgAAAAAYIXAHAAAAAADgCikqf9+6xD09rW8HAAAAgBkCdwAAAAAAAK6QovLCvj3G858JdwAAAAAYIXAHAAAAAADgCjtE5atywT38rm8HAAAAgBkCdwAAAAAAAK6QovJVuOCe3ha4AwAAAMAMgTsAAAAAAABXSAvub9xZ//fesA6fvgUAAAAAqCVwBwAAAAAA4AqpKQ8N+k+kt+XtAAAAADBD4A4AAAAAAMAVvrTgXli4p3V4C+4AAAAAMEPgDgAAAAAAwBVSUr4GFtxNuAMAAADADIE7AAAAAAAAV0ir6YUD7jGe17cDAAAAwAyBOwAAAAAAAFfYoSpfhYX7+/z9dortAQAAAIBaAncAAAAAAACuMNGUr/DfMn07AAAAAMwQuAMAAAAAAHCFL1TllQvujwV3AAAAALiKwB0AAAAAAIArpKS8MnBPT8vbAQAAAGCGwB0AAAAAAIArpNX0ygH3ld5WuAMAAADACIE7AAAAAAAAVwh9e47Qf+B9/n48xfYAAAAAQC2BOwAAAAAAAFfIUXld4Z7ieX07AAAAAMwQuAMAAAAAAHCHiQX314I7AAAAANxE4A4AAAAAAMAVUlSeIvRK8nYAAAAAmCFwBwAAAAAA4Ap7YMF9hXjegDsAAAAAzBC4AwAAAAAAcIUv7KanCP0X0tOfwh0AAAAARgjcAQAAAAAAuEJacH8KF9zT0/J2AAAAAJghcAcAAAAAAOAOoSqvXHBf6++3twV3AAAAABghcAcAAAAAAOAKKSovHHDPC+76dgAAAAAYIXAHAAAAAADgCqkpr1xwf8Pb+nYAAAAAmCFwBwAAAAAA4Apxwb1wwj29/ZlwBwAAAIARAncAAAAAAACukJry0sA9/K5vBwAAAIAZAncAAAAAAADGnRbT35ih/3sr1PNpTR4AAAAAqCVwBwAAAAAAYNw+9OSrcsE9vK1vBwAAAIAZAncAAAAAAADGnRbcV2Hh/obC/XsU7gAAAAAwQeAOAAAAAADAuNOCe+GAe3z79D0AAAAAQB2BOwAAAAAAAONOi+lpZf0X4tMCdwAAAAAYIXAHAAAAAABg3HdacC+ccF/h8X36IAAAAACgjMAdAAAAAACAcaeePEXov2DAHQAAAADuInAHAAAAAABg3GkxvXDA/Vnr79c/C+4AAAAAMELgDgAAAAAAwLhT4F654J5sfTsAAAAAjBC4AwAAAAAAMO7Uk1f27eltfTsAAAAAzBC4AwAAAAAAMO7b+W+VgXtah/8Oi/IAAAAAQB2BOwAAAAAAAOO+w2Z6itB/Ib2sbwcAAACAGQJ3AAAAAAAAxu1DUD6y4H4I7gEAAACAOgJ3AAAAAAAAxn2HyfTSBffw9N5lJwEAAACAA4E7AAAAAAAA444L7n2f8X/YbwcAAACAGQJ3AAAAAAAAxn2HpPwtXHBP6/CnRXkAAAAAoI7AHQAAAAAAgHGnnrywb49v69sBAAAAYIbAHQAAAAAAgHH7UJSnlfVfiAvuh0V5AAAAAKCOwB0AAAAAAIBxxwX3wrupnd/6dgAAAAAYIXAHAAAAAABg3NSCe3r5OxX3AAAAAEAZgTsAAAAAAADjjgvuhRPub3hc3g4AAAAAMwTuAAAAAAAAjJsL3P/+3YA7AAAAAMwQuAMAAAAAADDuO2ymr8LCPb39KdwBAAAAYITAHQAAAAAAgHF7asE9/H76HgAAAACgjsAdAAAAAACAcafF9MoF9/T0aVEeAAAAAKgjcAcAAAAAAGDcccG98O4bCvdDbw8AAAAAFBK4AwAAAAAAMO604J4i9F9ILwvcAQAAAGCGwB0AAAAAAIBxp558FU64r7jgrnAHAAAAgAkCdwAAAAAAAMbtqQX38PTWtwMAAADACIE7AAAAAAAA406D6ZULf7ZsAwAAIABJREFU7ilw/46b8gAAAABAFYE7AAAAAAAA444L7k9d4b5C4X4K7gEAAACAOgJ3AAAAAAAAxp2C8nfgP1pb4A4AAAAAIwTuAAAAAAAAjDsG7oV337Dg/jwKdwAAAACYIHAHAAAAAABg3HcIyleM0P+9FZ624A4AAAAAMwTuAAAAAAAAjDsF5YV9+/OGffjvNCkPAAAAAJQRuAMAAAAAADBuH4LyiQV3eTsAAAAAzBC4AwAAAAAAMO40mF664B7e3qdJeQAAAACgjMAdAAAAAACAcd+hcH+fwsI9vC1vBwAAAIAZAncAAAAAAADGnYLyVdi3p7dPi/IAAAAAQB2BOwAAAAAAAOP2Piy4v3WFe3r7tCgPAAAAANQRuAMAAAAAADDuugX3upMAAAAAwIHAHQAAAAAAgHH7sJheu+D+9++n7wEAAAAA6gjcAQAAAAAAGJd68sK2/X+///x9QN8OAAAAADME7gAAAAAAAIyLgXvx3RTQC9wBAAAAYIbAHQAAAAAAgHE7FOWreML9De9/j8IdAAAAACYI3AEAAAAAABiXcvLqwH1ZcAcAAACAqwjcAQAAAAAAGJcW3J/avv15w4H4PQAAAABAKYE7AAAAAAAA80JPnhbWfyUNxMvbAQAAAGCGwB0AAAAAAIBxaTE9Laz/SgzcFe4AAAAAMELgDgAAAAAAwLgUlJcvuB8C+k/lDgAAAADtBO4AAAAAAACMiwvuaWL9R04Bvb4dAAAAAPoJ3AEAAAAAABi3Q0xe3LcfA/oU3QMAAAAAdQTuAAAAAAAAXCAsuBdfPQX08nYAAAAA6CdwBwAAAAAAYFxacF+rNnE/PW/BHQAAAAD6CdwBAAAAAAAYl1rydZpY/4n8vr4dAAAAAPoJ3AEAAAAAABiX1tKr8/bigXgAAAAA4H9I4A4AAAAAAMC4NJb+Fi+4n95P0T0AAAAAUEfgDgAAAAAAwLgvLbgXL6yfnte3AwAAAEA/gTsAAAAAAADjUky+igP3dSjo9e0AAAAA0E/gDgAAAAAAwLidFtyPG+v/3mkhPn0TAAAAAFBH4A4AAAAAAMC4PbTgfgrc9e0AAAAA0E/gDgAAAAAAwLgvLbifCvQfOC3Ep28CAAAAAOoI3AEAAAAAABiXWvLivt2COwAAAABcRuAOAAAAAADAuO/5uyZfxYX76X19OwAAAAD0E7gDAAAAAAAwbl+44L5NuAMAAABAO4E7AAAAAAAA41JLXr/gnv+mbwcAAACAfgJ3AAAAAAAAxqW19OIB9+OFT+EOAAAAAO0E7gAAAAAAAIxLMXnxgPvxfXk7AAAAAPQTuAMAAAAAADAuxeRvceG+Du8bcAcAAACAfgJ3AAAAAAAAxu39d02+qhfcD3/bCncAAAAAaCdwBwAAAAAAYFxKyU8L679wel7eDgAAAAD9BO4AAAAAAACMCwPu5U4BfVqVBwAAAADqCNwBAAAAAAAY931/x+TVC+4AAAAAwF0E7gAAAAAAAIwLfftT3bevlQ+kbwIAAAAA6gjcAQAAAAAAGPc9Mwvup9e3wh0AAAAA2gncAQAAAAAAGLeHFtxP78vbAQAAAKCfwB0AAAAAAIBxaS39LS7cTwvxFtwBAAAAoJ/AHQAAAAAAgHGpJS8ecD++r28HAAAAgH4CdwAAAAAAAMZ9oSZfxYX7eSFe4Q4AAAAA3QTuAAAAAAAAjEtr6esYoP97p+e3vh0AAAAA2gncAQAAAAAAGJdi8uK+/TnutwvcAQAAAKCdwB0AAAAAAIBx3/N3Tf4WF+6nhfitcAcAAACAdgJ3AAAAAAAAxsUF9+K7p35e3w4AAAAA/QTuAAAAAAAAzAs1+Wlh/RdOC/FpVR4AAAAAqCNwBwAAAAAAYFxccC+ecLfgDgAAAAB3EbgDAAAAAAAwbk8tuB/+JnAHAAAAgH4CdwAAAAAAAMallrx6wf0U0KfoHgAAAACoI3AHAAAAAABgXIrJ3+oF98Pz8nYAAAAA6CdwBwAAAAAAYF6oydfggvtnwR0AAAAA2gncAQAAAAAAGBcX3Ju/4z9tfTsAAAAAtBO4AwAAAAAAMC6NpZ8W1n/h/LzCHQAAAAC6CdwBAAAAAAAYl9bSi/v2Y0BvwR0AAAAA+gncAQAAAAAAGPeFtfS3esH98Le0Kg8AAAAA1BG4AwAAAAAAMC7F5MUD7scF90/hDgAAAADtBO4AAAAAAACM2yEmPwXov3B6fuvbAQAAAKCdwB0AAAAAAIBxaSx9Ff836z0tuD8KdwAAAADoJnAHAAAAAABgXFpwf5/aBffnOay469sBAAAAoJ3AHQAAAAAAgHGpJT8MrP9MOrEF7gAAAADQTuAOAAAAAADAuC8tuDcU7ivc+Ey4AwAAAEA7gTsAAAAAAADjQt/+rI4F93DDgjsAAAAA9BO4AwAAAAAAMG6nBfeG22+4klblAQAAAIA6AncAAAAAAADGpbX0lebVfyidkLcDAAAAQD+BOwAAAAAAAOPiWHrDhHsM3C24AwAAAEA7gTsAAAAAAADjUkzeseCebujbAQAAAKCfwB0AAAAAAIBxqSVfHQvu4fctcAcAAACAdgJ3AAAAAAAAxu0wl/7G/Px33rjgrnAHAAAAgG4CdwAAAAAAAMallnw1/Dcr9O1xVR4AAAAAqCNwBwAAAAAAYFxacH86FtzD7xbcAQAAAKCfwB0AAAAAAIBxKSVf9X3784YJd307AAAAAPQTuAMAAAAAADAuraWH9vynUkS/Be4AAAAA0E7gDgAAAAAAwLi9//59NRTuccE97soDAAAAAFUE7gAAAAAAAIxLMXnDgHtccA+j8gAAAABAIYE7AAAAAAAA43aIydO6+m/9fWMr3AEAAACgncAdAAAAAACAcaklXw2Be0tDDwAAAAD8IwJ3AAAAAAAAxn2hcO+Iz1e4YcEdAAAAAPoJ3AEAAAAAABiXUvIUn//S+/x9RN8OAAAAAP0E7gAAAAAAAIxLa+lvw4R7iugF7gAAAADQT+AOAAAAAADAuBSTN/TtMaJP0T0AAAAAUEfgDgAAAAAAwLi44P40FO6BvB0AAAAA+gncAQAAAAAAGJfG0ldD377Cf8w+C+4AAAAA0E7gDgAAAAAAwLgv7KWvt75wTyvx+nYAAAAA6CdwBwAAAAAAYNzef//e0LfHlXh9OwAAAAD0E7gDAAAAAAAwLi24vx0L7uHGNuEOAAAAAO0E7gAAAAAAAIzboSVvGHCPN/TtAAAAANBP4A4AAAAAAMC8EJOvlgX3v3//FO4AAAAA0E7gDgAAAAAAwLgdYvKGvv15wxF5OwAAAAD0E7gDAAAAAAAwLsXkqyFwTzcMuAMAAABAP4E7AAAAAAAA4/KCe33h/j5/30jfBAAAAADUEbgDAAAAAAAwboeWvKFvjzf07QAAAADQT+AOAAAAAADAvFCTr44F93DDgjsAAAAA9BO4AwAAAAAAMC4uuDfc7rgBAAAAAPwzAncAAAAAAADGfc/cgvsK/zEz4A4AAAAA/QTuAAAAAAAAjNv7798b+vbnDRvuW+EOAAAAAO0E7gAAAAAAAIxLKfnbULinE/J2AAAAAOgncAcAAAAAAGDcF9bSGwbcY0RvwR0AAAAA+gncAQAAAAAAGJdi8tVQuKcT+nYAAAAA6CdwBwAAAAAAYFyKydO6+i91RPQAAAAAwD8jcAcAAAAAAGDc6IJ7iOj3NuEOAAAAAN0E7gAAAAAAAIxLKXnHgnu6IG8HAAAAgH4CdwAAAAAAAMaFAfenoW9/VjiSvgkAAAAAqCNwBwAAAAAAYNwXavIUn/9UOLEV7gAAAADQTuAOAAAAAADAuJ0W3Btur3BE3g4AAAAA/QTuAAAAAAAAjPtCTt6x4P6GjD6tygMAAAAAdQTuAAAAAAAAjNs7/KFhwj019Pp2AAAAAOgncAcAAAAAAGBcWkvvWHBPN9KqPAAAAABQR+AOAAAAAADAuJSSNwy4xwX3rW8HAAAAgHYCdwAAAAAAAMbttODe8N+sNy24C9wBAAAAoJ3AHQAAAAAAgHEpJl9pXv2H0oVP4Q4AAAAA7QTuAAAAAAAAjNuDLXlq6OXtAAAAANBP4A4AAAAAAMAF/s7JOxbc0w0L7gAAAADQT+AOAAAAAADAuLTg3tC3P+nE5Ko8AAAAAPz/SuAOAAAAAADAuLSW3rHgnk4YcAcAAACAfgJ3AAAAAAAAxsUF94bbbyjct8IdAAAAANoJ3AEAAAAAABiXYvIUn/9SR0QPAAAAAPwzAncAAAAAAADmhbH01VCfrxDRfxbcAQAAAKCdwB0AAAAAAIBxowvu4cTWtwMAAABAO4E7AAAAAAAA41JL3rHgngL3L34VAAAAAFBF4A4AAAAAAMC4vOBefzutxFtwBwAAAIB+AncAAAAAAADGhb49xue/lC6kbwIAAAAA6gjcAQAAAAAAGBcD94bbK0b0CncAAAAA6CZwBwAAAAAAYNwOhXuOz38nndi7/DQAAAAA8F8E7gAAAAAAAIxLW+kNfXtcif8suAMAAABAO4E7AAAAAAAA4yYX3NONrW8HAAAAgHYCdwAAAAAAAMaFvr1lwT1NuKdvAgAAAADqCNwBAAAAAAAY9R1K8jfV5z+UFty/R+EOAAAAAN0E7gAAAAAAAIw6LaWvhgX3dMKCOwAAAAD0E7gDAAAAAAAwap8W3MO6+i+lE6dleQAAAACghsAdAAAAAACAUaeMvGPBfYXCfevbAQAAAKCdwB0AAAAAAIBR5wX3+vtxwb3+NAAAAADwXwTuAAAAAAAAjDr07c/bULinG9/pwwAAAACAEgJ3AAAAAAAARh0D94b76Ya+HQAAAAD6CdwBAAAAAAAYtQ8l+WpZcP/79+9RuAMAAABAN4E7AAAAAAAAo04ZeUfgnm7sXX4aAAAAAPgvAncAAAAAAABGnRbcG/r2J52w4A4AAAAA/QTuAAAAAAAAjDr07T2Bezhy+i4AAAAAoIbAHQAAAAAAgFHfacE97qv/Torot8AdAAAAANoJ3AEAAAAAABh1WkpfDf/NyhG9wh0AAAAAugncAQAAAAAAGLWHF9xXOHEK7wEAAACAGgJ3AAAAAAAARu3Tgnt93/684cYpvAcAAAAAagjcAQAAAAAAGPU9hwX3VJ//0Ao35O0AAAAA0E/gDgAAAAAAwKjTUHpD3/48ccG94TYAAAAA8H8RuAMAAAAAADDqFLindfVfekPh/p0+DAAAAAAoIXAHAAAAAABg1D6E5B0D7qvjCAAAAADwjwjcAQAAAAAAGHXaSW9ZcA8nTuE9AAAAAFBD4A4AAAAAAMCovQ8L7g3r6imi17cDAAAAQD+BOwAAAAAAANfqCNzTCQvuAAAAANBP4A4AAAAAAMCoU0j+thTuFtwBAAAA4BYCdwAAAAAAAEbtQ0i+Gvr2dEPfDgAAAAD9BO4AAAAAAACM+g5T6athwf190oK7xB0AAAAAugncAQAAAAAAGHVacG8YcH9SQ69vBwAAAIB+AncAAAAAAACG5ZL8bVhwX+HEVrgDAAAAQDuBOwAAAAAAAKOOC+4NE+4pope3AwAAAEA/gTsAAAAAAACjTkPpq6FwTycMuAMAAABAP4E7AAAAAAAAo/ahJG8YcH/ecOVTuAMAAABAO4E7AAAAAAAAo06B++iCe/llAAAAAOC/CdwBAAAAAAAYdRxKb5hwX+HGKbwHAAAAAGoI3AEAAAAAABh16shTfP5Lb6jo9e0AAAAA0E/gDgAAAAAAwKjvySX5eusL93RC4A4AAAAA/QTuAAAAAAAAjNqHkLyhb3/ecGQr3AEAAACgncAdAAAAAACAUd8hJG9ZcC+/AAAAAAD8UwJ3AAAAAAAARp0W3DusULhbcAcAAACAfgJ3AAAAAAAAhg0vuIcb+nYAAAAA6CdwBwAAAAAAYNRpwb2hb48L7vp2AAAAAOgncAcAAAAAAGDUPhTuHQvuqaLfJtwBAAAAoJ3AHQAAAAAAgFGnjLwhb8839O0AAAAA0E7gDgAAAAAAwKjTUnrHgHtaibfgDgAAAAD9BO4AAAAAAADMCh35+z7P21C4pxPydgAAAADoJ3AHAAAAAABg1E6Be9P9lQJ3hTsAAAAAtBO4AwAAAAAAMOoLW+mrYb39eZ7nDSn9VrgDAAAAQDuBOwAAAAAAAKPignvXhLsFdwAAAAC4hsAdAAAAAACAUV8oyd+mwj0txafvAgAAAADqCNwBAAAAAAAYlTry4QH3R94OAAAAAP0E7gAAAAAAAIzaoXBPy+q/tsJ/zAy4AwAAAEA/gTsAAAAAAACjUki+mibc37DhnsJ7AAAAAKCOwB0AAAAAAIBRKSR/mxbc0xl5OwAAAAD0E7gDAAAAAAAwKoXkTX17DOk/C+4AAAAA0E7gDgAAAAAAwKgUkjf17fGOvh0AAAAA+gncAQAAAAAAGJVC8rV6EveVFtxbrgMAAAAA/0ngDgAAAAAAwKgdSvK2BfdwaJtwBwAAAIB2AncAAAAAAABGfWErPS2r/1q6om8HAAAAgH4CdwAAAAAAAEbFBfemCfc3HPoU7gAAAADQTuAOAAAAAADAqBSSp/D819IZfTsAAAAA9BO4AwAAAAAAMCqF5KtpwX2lBfee8wAAAADAfxC4AwAA8L/YuZ9fS9L7ruPPOXV+zM90hzgokskPeYKyASEERsYSksWO/wAkRJRlJP4UZ0dWBET+CFgYIUsQYGWJ6Vg2sSY2ybQ9sj1h7p3pvnfOjzrFInaI5fpW3+k+9a2nznm9llW37316+9RbHwAAgEmdogX3krTgHjyPzgUAAAAAjEfgDgAAAAAAwKSmXnAPBtzDcwEAAAAA4xG4AwAAAAAAMKlwwT0qz89sGfydrijcAQAAACCbwB0AAAAAAIBJRRl5Ut9eSvB3Tvp2AAAAAEgncAcAAAAAAGBSXbjgnvP3wz8jcAcAAACAdAJ3AAAAAAAAJhUtpS+TCvfo75yC8B4AAAAAGI/AHQAAAAAAgElFHXnSgHu4FC9vBwAAAIB8AncAAAAAAAAmFS2lT73g3llwBwAAAIB0AncAAAAAAAAmFWXkSX17uBR/0rcDAAAAQDqBOwAAAAAAAJM6BSX5YurCvVhxBwAAAIBsAncAAAAAAAAmdWhPvc83Tc6nrOVASK9vBwAAAIBcAncAAAAAAAAmtTv2B+7bdc6nrKGdeH07AAAAAOQSuAMAAAAAADCp3aHtfZ624L4cWnCXuAMAAABAJoE7AAAAAAAAk9q10YJ7k/L3hxbcT/p2AAAAAEglcAcAAAAAAGBSu0N/4J614L4YKNy7onAHAAAAgEwCdwAAAAAAACa1DxfcswL3uHDv9O0AAAAAkErgDgAAAAAAwKSiBfftKilwH3gncAcAAACAXAJ3AAAAAAAAJhUuuCcF7suhBfeicAcAAACATAJ3AAAAAAAAJrU7tL3Pt6sm5e8P9O3lpG8HAAAAgFQCdwAAAAAAACa1O/YvuG+SFtwXZWDBvVO4AwAAAEAmgTsAAAAAAACT2geB+zYrcLfgDgAAAADVELgDAAAAAAAwqd2x7X2+aaYP3IvAHQAAAABSCdwBAAAAAACY1L4NFtzXOZ+ylgOFe6dwBwAAAIBUAncAAAAAAAAmtTsEgfuqSfn7QwvuJ307AAAAAKQSuAMAAAAAADCpaMF9s8r5lLUoAwvuncIdAAAAADIJ3AEAAAAAAJhUvOCe8ylracEdAAAAAKohcAcAAAAAAGBSu2Pb+zxtwX0gcO+Kwh0AAAAAMgncAQAAAAAAmNT+GC24Nyl/fzFcuAMAAAAAiQTuAAAAAAAATGoXBO5pC+4D704CdwAAAABIJXAHAAAAAABgMu2pK8egIt9mBe4DC+6dCXcAAAAASCVwBwAAAAAAYDL7YL29lLzAfTkw4W7BHQAAAAByCdwBAAAAAACYzFDgvslacC8DC+6dwh0AAAAAMgncAQAAAAAAmMzu2Ibvtqsm5QyLgQV3fTsAAAAA5BK4AwAAAAAAMJndwIL7NmvBXeAOAAAAANUQuAMAAAAAADCZOgL3uHDvisIdAAAAADIJ3AEAAAAAAJjM7tiG7zZJgfvSgjsAAAAAVEPgDgAAAAAAwGT2gwvuTcoZFiUu3E8KdwAAAABIJXAHAAAAAABgMruBwL2KBfeUEwAAAAAAPyVwBwAAAAAAYDLRgvtquSjNUHl+TkOBuwV3AAAAAEglcAcAAAAAAGAy0YL7Nmm9vZRSFgOFu74dAAAAAHIJ3AEAAAAAAJhMtOC+SQzch4bi9e0AAAAAkEvgDgAAAAAAwGR2x7b3+XbVpJ1hsYgL95MJdwAAAABIJXAHAAAAAABgMrvaF9z17QAAAACQSuAOAAAAAADAZPZB4L5NDNwXxYI7AAAAANRC4A4AAAAAAMBkdse29/l2nfgZy4I7AAAAAFRD4A4AAAAAAMBkogX3TZP3GWs5ELgDAAAAALkE7gAAAAAAAExmFwTu21WTdobFIi7cTybcAQAAACCVwB0AAAAAAIDJhAvuq7zPWEMD7vp2AAAAAMglcAcAAAAAAGAy8YJ73mespQV3AAAAAKiGwB0AAAAAAIDJ7I5t7/PUBfeBCXd5OwAAAADkErgDAAAAAAAwmXjBvUk7w2DgrnAHAAAAgFQCdwAAAAAAACYTBu7rxAX3EhfuncIdAAAAAFIJ3AEAAAAAAJjMPgjcN01i4D604J52CgAAAACgFIE7AAAAAAAAE6phwX05ULifThJ3AAAAAMgkcAcAAAAAAGAy+2Pb+3ybueA+8E7eDgAAAAC5BO4AAAAAAABMJl5wb9LOMDDgXjqFOwAAAACkErgDAAAAAAAwmX0QuG8yF9wHCvdO4Q4AAAAAqQTuAAAAAAAATCZecM/9jBU17vJ2AAAAAMglcAcAAAAAAGAyu2Pb+3y7yv2MtQwK95MFdwAAAABIJXAHAAAAAABgMvtgwX2THLgHA+5F3w4AAAAAuQTuAAAAAAAATGYXBO7bVZN6jmjBXd8OAAAAALkE7gAAAAAAAEwmXHBvkj9jBRPuJxPuAAAAAJBK4A4AAAAAAMBkwgX3de5nrKBvN+EOAAAAAMkE7gAAAAAAAEzi2J5Ke+ovyLMX3JeL/sTdgjsAAAAA5BK4AwAAAAAAMIl927/eXkop23WTeJJSgr696NsBAAAAIJfAHQAAAAAAgEnsDgOB+6qOBXd9OwAAAADkErgDAAAAAAAwiaEF901y4B4MuJeTCXcAAAAASCVwBwAAAAAAYBI1LbhHhbu+HQAAAAByCdwBAAAAAACYxL5tw3fZC+7LRX/h3incAQAAACCVwB0AAAAAAIBJfDq44N4knqSUoG8v8nYAAAAAyCVwBwAAAAAAYBL7dihwr2XBPfUYAAAAAHD1BO4AAAAAAABMYjew4L5pcj9jBQPu5aRwBwAAAIBUAncAAAAAAAAmsTu2vc83zbIsl1FyPo5gwL3I2wEAAAAgl8AdAAAAAACASeyP/Qvum1X+J6xFULh3FtwBAAAAIJXAHQAAAAAAgEnsgsB9O0XgHjzXtwMAAABALoE7AAAAAAAAk6hpwX0ZLbgXhTsAAAAAZBK4AwAAAAAAMImqFtyDCfdT/xEBAAAAgJEI3AEAAAAAAJjE/tj2Pp9iwT3o2+23AwAAAEAygTsAAAAAAACTiBfcm+STlLIIJty7TuIOAAAAAJkE7gAAAAAAAExiHwbuEyy4BxPu+nYAAAAAyCVwBwAAAAAAYBLRgvtmgsB9GS24F4U7AAAAAGQSuAMAAAAAADCJ3bHtfV7TgvtJ3w4AAAAAqQTuAAAAAAAATGJf0YJ70LeXTuAOAAAAAKkE7gAAAAAAAExiFwTu21WTfJJSlsGEe1cU7gAAAACQSeAOAAAAAADAJGpacI8m3E/6dgAAAABIJXAHAAAAAABgEvGCe/4nrKBvL6VTuAMAAABAJoE7AAAAAAAAk4gD9yb5JKUsF/2JuwV3AAAAAMglcAcAAAAAAGASu2Pb+3wzxYJ7MOHeWXAHAAAAgFQCdwAAAAAAACYRL7jnf8KKFtzl7QAAAACQS+AOAAAAAADAJPZB4D7FgnvkpHAHAAAAgFT13A4CAAAAAABwVWpacF9EC+6dwh0AAAAAMgncAQAAAAAAmMT+2PY+nyJwX/b37UXfDgAAAAC5BO4AAAAAAABMIl5wb5JPUkow4F66onAHAAAAgEyrqQ8AAAAAAADA9ei6rnzjzz4q//NP/6I8/ei+92e26ykW3PsLdwvuAAAAAJBL4A4AAAAAAECa3/vad8q/+fp7gz+zafID92DAvZwE7gAAAACQKv92EAAAAAAAgKv0vQ+fvzBuL2WaBfcSLbgXhTsAAAAAZBK4AwAAAAAAkOK/v/fhg35u0zQjn+TnLYMJ907fDgAAAACpBO4AAAAAAACk+M/f+uGDfm6KBfegby+dwh0AAAAAUgncAQAAAAAASPHo9fWDfm7T5H/CWi76E3d9OwAAAADkErgDAAAAAACQYtVEO+k/a5IF9+BoJ4E7AAAAAKQSuAMAAAAAAJDi9u7woJ+bYsF9UYIF96JwBwAAAIBMAncAAAAAAABS3N4/LHDfrpuRT/LzLLgDAAAAQB0E7gAAAAAAAKS4eWjgvppgwT0I3EuncAcAAACATAJ3AAAAAAAAUtzcPSxw30wQuC+Dwl3eDgAAAAC5BO4AAAAAAACMruu68vEMF9xPFtwBAAAAIJXAHQAAAAAAgNHdH9qyb08P+tlNM0HgXoIFd307AAAAAKQSuAMAAAAAADC6m7uHrbevm0VZRHPqI4oX3HPPAQAAAADXTuAOAAAAAADA6G7vHxa4H9ppivIoqu+Kwh0AAAAAMgncAQAAAAAAGN1DF9ynsoxG4/XtAAAAAJBK4A4AAAAAAMDobu/3Ux9hUNS3nzqFOwAAAABkErgDAAAAAAAwutv7uhfcF4v+xF3fDgAAAAC5BO4AAAAAAACM7ubuYYH7l9/5pZFP0m8ZTLh6KZ7qAAAgAElEQVSfBO4AAAAAkErgDgAAAAAAwOhuHrjg/s/+zq+MfJJIsOBeFO4AAAAAkGk19QEAAAAAAAC4fLcvCNy3q2X57S//RvmXX/r1pBP9rGjBvdO3AwAAAEAqgTsAAAAAAACju73rD9z/+Rd/tfzrf/qb5dHr6/L2a+vkU/1/izBwV7gDAAAAQCaBOwAAAAAAAKO7ud/3Pn/8xqb8rV98I/k0P29R+gt3eTsAAAAA5FpOfQAAAAAAAAAu3+19/4L74zemW23/65bBVzMD7gAAAACQS+AOAAAAAADA6G7u+gP3R6/XEbhHC+4nhTsAAAAApBK4AwAAAAAAMLrbIHB/XEvg3t+3F3k7AAAAAOQSuAMAAAAAADCqY3sqn+yOve8evVFL4N5fuHcW3AEAAAAglcAdAAAAAACAUX38aX/cXkopj2pZcA+e69sBAAAAIJfAHQAAAAAAgFHd3O3Dd4/f2CSeJLYMCneBOwAAAADkErgDAAAAAAAwqtv7Q/jucS0L7ov+wv2kcAcAAACAVAJ3AAAAAAAARnUTBO6r5aK8sWmST9MvGHAv8nYAAAAAyCVwBwAAAAAAYFS3d/2B++M31uFyejYL7gAAAABQB4E7AAAAAAAAo7oNFtwfvb5OPkks7Oz17QAAAACQSuAOAAAAAADAqG7CBfdN8kliyyBw17cDAAAAQC6BOwAAAAAAAKO6ud/3Pq9qwb30F+6nTuIOAAAAAJkE7gAAAAAAAIzq9j5YcK8pcI8W3PXtAAAAAJBK4A4AAAAAAMCobu/6A/dHb9QUuFtwBwAAAIAaCNwBAAAAAAAY1U2w4P5oDgvuuccAAAAAgKsncAcAAAAAAGBUt0Hg/riiwH0ZBO4KdwAAAADIJXAHAAAAAABgVDd3QeD+xib5JLFF6S/cT53CHQAAAAAyCdwBAAAAAAAYTdd15fZ+3/vuUUUL7otgwV3fDgAAAAC5BO4AAAAAAACM5v7QlkPbX4k/eqOewH0ZFO4W3AEAAAAgl8AdAAAAAACA0dzcHcJ3jytacI/I2wEAAAAgl8AdAAAAAACA0QwF7o8qCtyjBXcD7gAAAACQS+AOAAAAAADAaG7v5xG4B3176RTuAAAAAJBK4A4AAAAAAMBobu/3vc/f3q7KqqnnU1XQtxd5OwAAAADkqufWEAAAAAAAgItzc9e/4P4LFa23l1LKctmfuJ8suAMAAABAKoE7AAAAAAAAo7nbt73P335tlXySYeGCu74dAAAAAFIJ3AEAAAAAABjNoT31Pt+s6vpMtVj0J+76dgAAAADIVdfNIQAAAAAAABclCtzXTV2fqYK+vXQm3AEAAAAgVV03hwAAAAAAAFyUQ9sfiK+boCifSHQafTsAAAAA5BK4AwAAAAAAMJq5LLgvgwn3k8IdAAAAAFLVdXMIAAAAAADARZlL4B707RbcAQAAACBZXTeHAAAAAAAAXJRD21+Ir5ugKJ/IIijcu6JwBwAAAIBMAncAAAAAAABGs5/Lgnvw/KRvBwAAAIBUdd0cAgAAAAAAcFEOx/7AfVNb4B4V7gJ3AAAAAEhV180hAAAAAAAAF+UwkwX3ZVC4nzqFOwAAAABkquvmEAAAAAAAgItyaPsD8fUqmkyfhgF3AAAAAKiDwB0AAAAAAIDR7Oey4L7sT9w7C+4AAAAAkKqum0MAAAAAAAAuyiEI3DeVBe6Rk74dAAAAAFLN4+YQAAAAAACAWTq2/YX4qulfTJ/KIjiOvh0AAAAAcgncAQAAAAAAGM0+WHBfV7bgvgwLd4k7AAAAAGSq6+YQAAAAAACAi3KYSeAe7cmf9O0AAAAAkKqum0MAAAAAAAAuShS4byoL3KMF964o3AEAAAAgU103hwAAAAAAAFyUw7E/EF830Wb6NIK+vZz6+3wAAAAAYCQCdwAAAAAAAEYTLbivV/P4TGW/HQAAAAByzePmEAAAAAAAgFnaR4F7U9dnqmUw4d51EncAAAAAyFTXzSEAAAAAAAAXJVpw31QWuAd9e9G3AwAAAECuum4OAQAAAAAAuCiHtr8Qn82Ce1G4AwAAAECmum4OAQAAAAAAuCjRgvuqCSbTJxItuJ/07QAAAACQSuAOAAAAAADAaKLAfVPZgnuU23edwh0AAAAAMtV1cwgAAAAAAMBFObT9gfi6tsA9mHCXtwMAAABArrpuDgEAAAAAALgY7akr7SkK3KPN9GkEfXsx4A4AAAAAuQTuAAAAAAAAjOLQnsJ361Vdn6kWJVhwV7gDAAAAQKq6bg4BAAAAAAC4GEOB+6ap6zPVMlhwDwboAQAAAICR1HVzCAAAAAAAwMU4tHEdvq4scF8EgXtXFO4AAAAAkKmum0MAAAAAAAAuxtCC+7oJivKJNMv+z2bHgUgfAAAAADg/gTsAAAAAAACj2B+HAve6PlNtVv3nGfo/AAAAAADnV9fNIQAAAAAAABdjeMG9rs9UW4E7AAAAAFShrptDAAAAAAAALsbx1IXv1s0i8SQvFgXuO4E7AAAAAKQSuAMAAAAAADCKofXzdRCUT2UTLbi3p9J1cagPAAAAAJxXXTeHAAAAAAAAXIxDGwfum6auz1TbVRO+s+IOAAAAAHnqujkEAAAAAADgYhzaePl8XV3gHp9nPxDqAwAAAADnVdfNIQAAAAAAABcjWnBfLkpplovk0wwbCtx3B4E7AAAAAGQRuAMAAAAAADCKaPm8tvX2UkrZDAXuxzbxJAAAAABw3eq7PQQAAAAAAOAiHI79gfumwsB9u2rCd/vg/wEAAAAAnF99t4cAAAAAAABchEPb9T5fD6ylT2U7uOAucAcAAACALPXdHgIAAAAAAHARDm1/GL5aLpJP8mKbgcDdgjsAAAAA5BG4AwAAAAAAMIoocF839X2isuAOAAAAAHWo7/YQAAAAAACAi3Bou97nQ2vpU1k1yxINy1twBwAAAIA89d0eAgAAAAAAcBHiBfegJJ/YdtX0Pt8d2+STAAAAAMD1ErgDAAAAAAAwijhwr/MTVbQsv7PgDgAAAABp6rw9BAAAAAAAYPb2Mwvct0Hgvhe4AwAAAECaOm8PAQAAAAAAmL3Dset9vqk1cF9HC+5t8kkAAAAA4HrVeXsIAAAAAADA7B2iBffVIvkkDxOF9xbcAQAAACCPwB0AAAAAAIBRRIH7alnnJ6rtqul9vhO4AwAAAECaOm8PAQAAAAAAmL19tOAeLKVPbbPqP5fAHQAAAADy1Hl7CAAAAAAAwOxFC+6b1SL5JA+zFbgDAAAAwOQE7gAAAAAAAIzi2Ha9z+e24L4XuAMAAABAmjpvDwEAAAAAAJi9fbDgXmvgvl01vc93xzb5JAAAAABwveq8PQQAAAAAAGD2DjNbcN+u+8+1s+AOAAAAAGnqvD0EAAAAAABg9g5BGL5pFskneZhtEN7vBe4AAAAAkEbgDgAAAAAAwCgObX8YbsEdAAAAAIjUeXsIAAAAAADA7O2jwH1V5yeqTbjg3iafBAAAAACuV523hwAAAAAAAMxeuOC+XCSf5GG266b3uQV3AAAAAMgjcAcAAAAAAGAUh7brfb4OltKnFi+4C9wBAAAAIEudt4cAAAAAAADMXrjgvqrzE9U2OJcFdwAAAADIU+ftIQAAAAAAALM3twX37ToK3NvkkwAAAADA9arz9hAAAAAAAIDZixbcN80i+SQPswnC+70FdwAAAABII3AHAAAAAABgFFHgXu+Ce9P7fCdwBwAAAIA0dd4eAgAAAAAAMHuHIAyvNXC34A4AAAAA06vz9hAAAAAAAIDZ27dd7/P1qs5PVNt1/7ksuAMAAABAnjpvDwEAAAAAAJi9Q9sfhm+aRfJJHsaCOwAAAABMT+AOAAAAAADAKKLAfbWs8xPVdt30Pt8d2+STAAAAAMD1qvP2EAAAAAAAgNmLAvf1qs5PVNvgXIe2K6dTl3waAAAAALhOdd4eAgAAAAAAMGtd15VD2x+Fr5tF8mkeZjMQ3u+DWB8AAAAAOC+BOwAAAAAAAGcXxe2llLJp6vxEFS24l1LK7iBwBwAAAIAMdd4eAgAAAAAAMGvHUxyEr+cYuLdt4kkAAAAA4HrVeXsIAAAAAADArB2O8YJ7vYF7E76z4A4AAAAAOeq8PQQAAAAAAGDW9m0chG9Wi8STPNxmYMF96P8DAAAAAJyPwB0AAAAAAICzOwwE4fUuuMfnsuAOAAAAADnqvD0EAAAAAABg1uYZuDfhOwvuAAAAAJCjzttDAAAAAAAAZm0ocF81i8STPNxmcMG9TTwJAAAAAFwvgTsAAAAAAABntz924btNpQvuzXJRVsv++H53tOAOAAAAABnqvD0EAAAAAABg1oYW3NeVBu6lxCvue4E7AAAAAKSo9/YQAAAAAACA2Zpr4L4NAncL7gAAAACQo97bQwAAAAAAAGbr0Hbhu3WzSDzJZxMuuLdt8kkAAAAA4DoJ3AEAAAAAADi7aMF93SzKYlFv4L5dNb3PdwcL7gAAAACQQeAOAAAAAADA2cWBe92fp7bhgrvAHQAAAAAy1H2DCAAAAAAAwCzNNXDfBIG7BXcAAAAAyFH3DSIAAAAAAACztG+73ufrZpF8ks8mWnDfHdvkkwAAAADAdRK4AwAAAAAAcHaH42UtuO+D/w8AAAAAcF513yACAAAAAAAwS4d2noH7dtX0Pt8J3AEAAAAgRd03iAAAAAAAAMxSHLgvkk/y2UQL7gJ3AAAAAMghcAcAAAAAAODs9m3X+7z+BXeBOwAAAABMqe4bRAAAAAAAAGbpGCy4Rwvptdiumt7ne4E7AAAAAKSo+wYRAAAAAACAWToEgXvtC+5RgL87tsknAQAAAIDrVPcNIgAAAAAAALO0b7ve5+tmkXySz2YbBu4W3AEAAAAgg8AdAAAAAACAs5vrgnsUuO8F7gAAAACQou4bRAAAAAAAAGbpEAThcw3cd8c2+SQAAAAAcJ3qvkEEAAAAAABgluIF90XyST6bjQV3AAAAAJiUwB0AAAAAAICz27dd7/P6F9yb3uc7gTsAAAAApKj7BhEAAAAAAIBZihbcN7UH7msL7gAAAAAwpbpvEAEAAAAAAJilKHCvfcE9CvAtuAMAAABAjrpvEAEAAAAAAJilMHBfLZJP8tlYcAcAAACAaa2mPgAAAAAAAADz9q0ffFy+8ecflc8/fq18+Z3PldfWTTm0Xe/P1r/g3vQ+3x3b5JMAAAAAwHUSuAMAAAAAAPDSfv/r75Wvfu1PSveTnv3v/erj8oe/88VwwX1TeeC+XfWfb2fBHQAAAABS1H2DCAAAAAAAQLW+9+Hz8nt/LW4vpZR3378p/+6PvhcG7tUvuAeB+17gDgAAAAAp6r5BBAAAAAAAoFr/8ckPyqn7+ef/5ds/Kodjz4tSyqpZjHyqVxMtuB9PXWn7/rMAAAAAwFkJ3AEAAAAAAHgpX/3ad3qff+uDj8t+pgvu23UTvrPiDgAAAADjq/sGEQAAAAAAgFl6tjv2Pt9UHrgPnW93bBNPAgAAAADXqe4bRAAAAAAAAKr0o08+HXz//Y/ue5+vm8UYxzmb7Tr+fGbBHQAAAADGJ3AHAAAAAADgM3vy/u3g+/tD/9r5elX356nhBXeBOwAAAACMre4bRAAAAAAAAKr05OnNS/279UBAXoOhBffdsT/aBwAAAADOp+4bRAAAAAAAAKr07tPhBffI0EJ6DbZNE76z4A4AAAAA46v7BhEAAAAAAIDqdF13pQvuAncAAAAAGFvdN4gAAAAAAABU5+lH9+Wju8NL/dt1szjzac5raGF+L3AHAAAAgNEJ3AEAAAAAAPhM3n3J9fZS6l9wXy4XYYRvwR0AAAAAxlf3DSIAAAAAAADVefL09qX/be2BeymlbFdN73ML7gAAAAAwvvpvEAEAAAAAAKjKu++/yoJ7/zp6TTar/k9ou2ObfBIAAAAAuD4CdwAAAAAAAB6sPXXlm99/hQX3IB6vyTY4owV3AAAAABhf/TeIAAAAAAAAVOO7P35Wnu9ffsl809T/eSpecBe4AwAAAMDY6r9BBAAAAAAAoBrf/MHLr7eXUsp6BoF7tOC+O7x82A8AAAAAPEz9N4gAAAAAAABU44cf717p36+bxZlOMp7tqul9vm8tuAMAAADA2ATuAAAAAAAAPNjz3fGV/v0cFtw34YK7wB0AAAAAxlb/DSIAAAAAAADVeHYFgfs2CNwtuAMAAADA+Oq/QQQAAAAAAKAar77gvjjTScYTLrgfBe4AAAAAMDaBOwAAAAAAAA/2ygvuQTxek3DBXeAOAAAAAKOr/wYRAAAAAACAajzbta/07zdN/Z+nNqum9/nu+Gr/dwAAAADgxeq/QQQAAAAAAKAaz191wX0GgXu04L47WHAHAAAAgLHVf4MIAAAAAABANV4lcF8uSmmWizOeZhxh4N4K3AEAAABgbAJ3AAAAAAAAHuyTT18+cJ/DensppWwsuAMAAADAZOZxiwgAAAAAAEAVnu9fPnDfzCRw366a3ud7C+4AAAAAMLp53CICAAAAAABQhee7V1hwD5bRaxMvuLfJJwEAAACA67Oa+gAAAAAAAADU5dsffFz+1/s35fOPXy9f+sIv/VXwvTu25dB2L/17V8vFuY44qm0QuFtwBwAAAIDxCdwBAAAAAAD4K7//9ffKV7/2J6X7Scf+D379F8t/+J0vlrdfW5dnn8br7V/43Jvlux8+H/zd62YeC+5R4L47CNwBAAAAYGzzuEUEAAAAAABgdN/98bOfidtLKeUbf/ZR+bf/7XullFKe79rw337hl9964e/fBOF4bcLA/Rj//wEAAACA85jHLSIAAAAAAACj+09//MHPxO0/9V+/8+NSSinPdvGC+zu//OYLf38UjtcmCvH3rQV3AAAAABjbPG4RAQAAAAAAGN27T297n3/4bFdKKeX5Pg7cv/Jbf/OFv//v/9rjlztYstWy/xNa2/bU/wAAAADAWQncAQAAAAAAKKWU8uTpTe/z27tDKaWUZ5/2B+6bZlm+9IW/Uf7J3/5c+Lt/4bVV+Vf/+Dde+YwZVs2i9/nxJHAHAAAAgLGtpj4AAAAAAAAA0/vhx5+WH3686333ye5Yju2pPNv1B+5vbpuyWCzKH/z2Pyz//o/+T/kff/ph+eQnMXyzXJS/+/lH5V/8o18rv/Urb492/nNqlv2BeytwBwAAAIDRCdwBAAAAAAAo777fv97+Ux9/eizPw8D9Lz85bVdN+d2vvFN+9yvvnP18mVZR4N4J3AEAAABgbMupDwAAAAAAAMD0njy9HXx/c7cPF9zf2l7WptJyEQTurcAdAAAAAMYmcAcAAAAAAKC8+3R4wf3m/nA1gfuq6Q/cjyeBOwAAAACMTeAOAAAAAABw5bquK3/8/eEF99v7Q3keBO5vXljg3iz7P6G1AncAAAAAGJ3AHQAAAAAA4Mr9+f+9Kzd3h8Gfub07lGe7tvfdxS24L6MF91PySQAAAADg+gjcAQAAAAAArty7T4fX20sp5eZuP7Dg3pz7SJNqgsD91P3l2j0AAAAAMB6BOwAAAAAAwJV78v7NC3/m9v5YngWB+1vb9bmPNKkocC+llPYkcAcAAACAMQncAQAAAAAArtyThyy43+8HAvfrWHAvpZSjwB0AAAAARiVwBwAAAAAAuGLtqSvf/MGLA/fb+0N5HgTub25X5z7WpFYW3AEAAABgMgJ3AAAAAACAK/bej56Vu337wp+7vbuewH1owb3tBO4AAAAAMCaBOwAAAAAAwBV79+nNg37u5v5QngWB+9uvXVHg3grcAQAAAGBMAncAAAAAAIAr9uSBgfvtQOD+5uayAvfVQOB+PAncAQAAAGBMAncAAAAAAIAr9uTp7YN+7i+e7cqnh1Pvuze3lxW4N8v4E1orcAcAAACAUQncAQAAAAAArtTu2JZvf/Dxg372o7tD+O6tCwvchxfc+yN/AAAAAOA8BO4AAAAAAABX6n9/8Ek5tK++SP7Wa5cVuDcDgbu+HQAAAADGJXAHAAAAAAC4Uk+e3pzl97y5bc7ye2oxFLhbcAcAAACAcQncAQAAAAAArtS7T2/P8nve2l7Pgnt7evXFewAAAAAgJnAHAAAAAAC4UudYcF8uSnl9fVkL7v+PvbsPruy878P+uy943QUu+LbYXWIpipJIipSwjiVGL3ZdSU5cp3Yn9aS2U6VR8zKZjMd1Z1J3JvUfdZvOxP0jdZ1Mxp28KfU0ad2ocetGtVPFijVSVEsjyZEAkaJJSqSkxZKL3eUSF9gFcC/uS/8Ql1ouznNxAdxzcC/w+cxwhvuc557z7L0X+8dzvueLas8GdwF3AAAAAMiTgDsAAAAAAMAJdKvRim9evXno85yaqEaplA6EjyIN7gAAAABwdATcAQAAAAAATqCnL9cjldUeq/QfWD89UR3QioZHtZy+hSbgDgAAAAD5EnAHAAAAAAA4gZZX6pnjs5PVePuZmb7Pc+oYBtx75NujJeAOAAAAALk6fjuOAAAAAAAA7GlpZS1zfHFhLjrd/kPcxzHgrsEdAAAAAI7O8dtxBAAAAAAAOKGeu7IRX/r2jdhstCIiolIuxeNnZ+N9j9wbY5U3h7ZTDe6LC7V46fqtvq85cwwD7uVS+lir0yluIQAAAABwAh2/HUcAAAAAAIAT6Nc/8834W596LvPY+x+5N/7Bx94bs5NjERHx2q1mfPfGZubcxYW5eG2z2fd1T01U9r/YIVcqlaJaLkUro61dgzsAAAAA5Cv9+xUBAAAAAAAYCd+8upEMt0dEfPHFG/G//MG33/jz8uXs9vaIiIsXalGbGu/72qeOYYN7REQ5UeMu4A4AAAAA+RJwBwAAAAAAGHH/z/Ire8755NL35yxfWsuc88DMRJydnYza1Fjf1z59TAPuVQF3AAAAADgSAu4AAAAAAAAjbnkl3ch+2wtXN2Kz2YqIiKXE/IsLtSiVSjE3LeBeSQTcWwLuAAAAAJArAXcAAAAAAIAR1u12Y3klu5H9Tp1uxNOX1yMikvMXF+YiImJuHw3up45pwF2DOwAAAAAcDQF3AAAAAACAEfZyfTuu32z2NXd5ZS2u1Lfj6kYj8/jiQi0iImr7CLgf3wb37NtoAu4AAAAAkK/jueMIAAAAAABwQixf2ru9/ballXpcuHc6efx2g3ttWoN7JVETJeAOAAAAAPk6njuOAAAAAAAAJ8TSSr3vucsra/HQvVOZxy7cOxX3nhqPiIi56fG+z3lcG9yriQb3loA7AAAAAOQq0T0BAAAAAADAKFhe6b/B/Tuvbsa/eeF65rHb7e0REbWp/hvcj2vAvVIuZY63O52CVwIAAAAAJ4uAOwAAAAAAwIjqdLrx9X00uEdELCfmX1yovfH/p8YrUU0EvO92aqKyr+uPitTfX4M7AAAAAORLwB0AAAAAAGBEvfTqrdhotAZyrjsb3EulUsxN99fiPjN5PBvcy4mAe0fAHQAAAAByJeAOAAAAAAAwopZX1jLHy6WID77tvr7PUypFvOvB2pvGZqf6C7ifmjieAXcN7gAAAABwNATcAQAAAAAARtTSpXrm+KPzM/G+t/YfcH/7A6fj9F1B9bkTHnCvJALubQF3AAAAAMiVgDsAAAAAAMCISjW4Ly7UYvFCLfNY9vy5XWNz0+N9vfbU+PEMuGtwBwAAAICjIeAOAAAAAAAwgnbanXjm5fXMY4sLc3ExI7SecjEjDF/ro8F9erySbDofdRrcAQAAAOBoCLgDAAAAAACMoOdXN6LR6mQeu7gwF/eeGo+Fe6b6OldWg3s/AfdTE8ezvT1CwB0AAAAAjoqAOwAAAAAAwAh6+nI9c3y8Uo7Hzs5ERPTV4j5WKcU7z83sGp+b3jvgfvoEBtxbAu4AAAAAkCsBdwAAAAAAgBH0Sn07c/yxszMxXv3eLaCLF2p7nued52ZjolrZNX5+bu/297Ozk3vOGVXVcvZttHYnuzUfAAAAABgMAXcAAAAAAIARtLa5kzn+wMzEG///p3/gwRirZDeR3/bT71nIHP/Rx89ENdFiftuffGJ+j1WOLg3uAAAAAHA0BNwBAAAAAABGUH0rO+A+NzX2xv/Pz07Gr/3sD8TkWPYtoZ9570L87FMPZR677/RE/P0//56YGtvd7n77tR/7wFv2uerRkQr3dwTcAQAAACBX1aNeAAAAAAAAAPuXCrjXpsfe9OefXDwfH37sTCyv1ONWoxUR32snf/zcTJyrTfW8xo++cz6++st/MpYurcXG9vdf++SDs3FmZnIAf4vhVdbgDgAAAABHQsAdAAAAAABgBK1tNjPHa1Nju8ZOTVTjA2+770DXmRyrxPseOdhrR1mqwb0t4A4AAAAAucr+fZQAAAAAAAAMtbVEg/tcRsCd/atocAcAAACAIyHgDgAAAAAAMILWUwH36fGCV3I8JRvc2wLuAAAAAJAnAXcAAAAAAIAR0+12Y20zO+Be0+A+EOVUwL0r4A4AAAAAeRJwBwAAAAAAGDG3mu1odbKD1rVpAfdBSDa4J953AAAAAGAwBNwBAAAAAABGTH0ru709ImJOg/tAVMrZt9FSDxYAAAAAAIMh4A4AAAAAADBi1jabyWM1AfeBSDe4dwpeCQAAAACcLALuAAAAAAAAI6ZXg7uA+2BUEgH3VluDOwAAAADkScAdAAAAAABgxNQ3swPuMxPVqFbc/hmEVMC90xVwBwAAAIA82eEEAAAAAAAYMWuJBvdZ7e0DU001uHcE3AEAAAAgTwLuAAAAAAAAI6aeCLjPTQu4D0qqwb0t4A4AAAAAuRJwBwAAAAAAGDFrmwLueUs2uLcF3AEAAAAgTwLuAAAAAAAAI6a+1cwcn5saL3glx1c51eDeFXAHAAAAgDwJuAMAAAAAAIyY+lZ2g/vslAb3QUk1uLc7Au4AAAAAkCcBdwAAAAAAgBGztpkdcJ+bFnAflEo5+zZaS8AdAAAAAHIl4A4AAAAAADBikgF3De4Dk25w7xS8EgAAAAA4WQTcAYOjJHAAACAASURBVAAAAAAARkx9KzvgXhNwH5hKIuDeamtwBwAAAIA8CbgDAAAAAACMmFTAfW5awH1QUgH3TlfAHQAAAADyJOAOAAAAAAAwQnbanbjZaGUeq02NF7ya4yvZ4N4RcAcAAACAPAm4AwAAAAAAjJD1RHt7RERtSoP7oFQTAfe2gDsAAAAA5ErAHQAAAAAAYISs9Qi4z00LuA9KssG9LeAOAAAAAHkScAcAAAAAABgha5sC7kVIBdw1uAMAAABAvgTcAQAAAAAARsh6osF9rFKKqbFKwas5vpIB966AOwAAAADkScAdAAAAAABghKxtNTPHa1PjUSplh7LZv2o5+zaaBncAAAAAyJeAOwAAAAAAwAhZ28xucJ+bHit4JcdbqsG91e4UvBIAAAAAOFkE3AEAAAAAAEZIfSs74F6bEnAfpGoi4K7BHQAAAADyJeAOAAAAAAAwQpIN7gLuA5VqcG93BdwBAAAAIE8C7gAAAAAAACMk2eA+LeA+SMmAuwZ3AAAAAMiVgDsAAAAAAMAISQXc56bGC17J8VZNBNxbAu4AAAAAkCsBdwAAAAAAgBGyttnMHK9NaXAfpFSDe7cb0RFyBwAAAIDcCLgDAAAAAACMkLVUg/u0gPsgVSvZAfcILe4AAAAAkCcBdwAAAAAAgBGyLuBeiHIpHXDvdAXcAQAAACAvAu4AAAAAAAAjotvtxtpmdsB9dkrAfZCq5fRtNA3uAAAAAJAfAXcAAAAAAIARcavZToar5wTcB6pSTje4t9sC7gAAAACQFwF3AAAAAACAEVHfym5vj4iYmx4vcCXHX7WSDri3Op0CVwIAAAAAJ4uAOwAAAAAAwIhY22wmj9U0uA9UudSjwT3Rog8AAAAAHJ6AOwAAAAAAwIiob6Yb3GcnqwWu5PirlnsE3LsC7gAAAACQFwF3AAAAAACAEVHfyg64z0xWo1px22eQKj0C7q22gDsAAAAA5MVOJwAAAAAAwIhYSwTca1NjBa/k+KtWejS4dwTcAQAAACAvAu4AAAAAAAAj4kp9O3NcwH3weja4C7gDAAAAQG4E3AEAAAAAAEbE1y/XM8cX7pkqeCXHX6WUDrh3ugLuAAAAAJAXAXcAAAAAAIAR0O12Y3llLfPY4sJcwas5/qrl9G20VlvAHQAAAADyIuAOAAAAAAAwAl6ub8f1m83MY4sLtYJXc/xVKukG93ZHwB0AAAAA8iLgDgAAAAAAMAKWL2W3t0dELD6owX3QquV0wL3V6RS4EgAAAAA4WQTcAQAAAAAARsDSSj1z/OH7pqM2PVbwao6/ckmDOwAAAAAcBQF3AAAAAACAEbC8kt3gvrigvT0PvRrcBdwBAAAAID8C7gAAAAAAAEOu0+nG1xMN7osLtYJXczKUy6VIlbgLuAMAAABAfgTcAQAAAAAAhtxLr96KjUYr89jFCxrc85JqcW8JuAMAAABAbgTcAQAAAAAAhtzyylrmeLkU8eT52YJXc3JUEgF3De4AAAAAkB8BdwAAAAAAgCG3dKmeOf7o/ExMj1cLXs3JUSlpcAcAAACAogm4AwAAAAAADLlUg/viQq3glZwsGtwBAAAAoHgC7gAAAAAAAENsp92JZ15ezzy2uDBX8GpOlmol+1aagDsAAAAA5EfAHQAAAAAAYIg9v7oRjVYn89hFAfdcpRrcW53szwMAAAAAODwBdwAAAAAAgCH29OV65vh4pRyPnZ0peDUnSzURcNfgDgAAAAD5EXAHAAAAAAAYYtc2Gpnjj549HeNVt3ryVC4JuAMAAABA0ex6AgAAAAAADLFGq5M5PjMxVvBKTp5qRcAdAAAAAIom4A4AAAAAADDEUgH3iTG3efJWKWcH3FsC7gAAAACQGzufAAAAAAAAQ6yZCLiPV9zmyVs1EXDX4A4AAAAA+bHzCQAAAAAAMMQarXbm+MRYpeCVnDzlkgZ3AAAAACiagDsAAAAAAMAQa+xkN7hPVN3myVu1kh1w7wi4AwAAAEBu7HwCAAAAAAAMsUY7O+A+LuCeu0o5+z3W4A4AAAAA+bHzCQAAAAAAMMQ0uB+dajm7wb3dyf5MAAAAAIDDs/MJAAAAAAAwxJoa3I9MJRFw1+AOAAAAAPmx8wkAAAAAADDEGjvtzPGJaqXglZw8lVKqwV3AHQAAAADyIuAOAAAAAAAwxFIN7hMa3HNXrQi4AwAAAEDR7HwCAAAAAAAMscaOgPtRqZQF3AEAAACgaHY+AQAAAAAAhlij1c4cF3DPXzURcG8JuAMAAABAbux8AgAAAAAADLFmO7vBfVzAPXflkgZ3AAAAACianU8AAAAAAIAh1tjJDrhPVCsFr+TkqVYE3AEAAACgaALuAAAAAAAAQ0yD+9GplLPf45aAOwAAAADkxs4nAAAAAADAEEs3uLvNk7dqOdXgnv2ZAAAAAACHZ+cTAAAAAABgiGlwPzqVRMBdgzsAAAAA5MfOJwAAAAAAwJBqtTvRToSpJ6qVgldz8lRKqQZ3AXcAAAAAyIuAOwAAAAAAwJBqtLLb2yM0uBehUhFwBwAAAICi2fkEAAAAAAAYUs0eAfcJAffcVcsC7gAAAABQNDufAAAAAAAAQ6pXg7uAe/4qiYB7S8AdAAAAAHJj5xMAAAAAAGBI9WpwHxdwz12lpMEdAAAAAIpm5xMAAAAAAGBINVrt5LGJaqXAlZxMlYoGdwAAAAAomoA7AAAAAADAkGpocD9S1XJ2wL0j4A4AAAAAubHzCQAAAAAAMKR6BdwnBNxzVylnv8etTvpzAQAAAAAOx84nAAAAAADAkGq02slj4xW3efKWanBva3AHAAAAgNzY+QQAAAAAABhSzUSD+3ilHOVE+JrBqSTe45aAOwAAAADkRsAdAAAAAABgSDUSAfeJqls8RUgF3DsC7gAAAACQG7ufAAAAAAAAQyrZ4C7gXoiqBncAAAAAKJzdTwAAAAAAgCGlwf1opRrc2wLuAAAAAJAbu58AAAAAAABDSoP70dLgDgAAAADFs/sJAAAAAAAwpBqtdub4RLVS8EpOprIGdwAAAAAonIA7AAAAAADAkGpocD9SqQZ3AXcAAAAAyI/dTwAAAAAAgCHVTATcJwTcC1EpZ7/PAu4AAAAAkB+7nwAAAAAAAEOq0Wpnjk+MucVThFSDe6uT/eABAAAAAHB4dj8BAAAAAACGVKrBfbziFk8RyomAuwZ3AAAAAMiP3U8AAAAAAIAh1UgE3CeqlYJXcjKlG9wF3AEAAAAgLwLuAAAAAAAAQyrZ4F51i6cIFQ3uAAAAAFA4u58AAAAAAABDKt3g7hZPEVIN7gLuAAAAAJAfu58AAAAAAABDqtFqZ45rcC9GqsG9JeAOAAAAALmx+wkAAAAAADCkmskG90rBKzmZUgF3De4AAAAAkB8BdwAAAAAAgCHVSATcNbgXo1fAvdsVcgcAAACAPNj9BAAAAAAAGFKpgPuEgHshquX0+6zEHQAAAADyYfcTAAAAAABgSCUD7mNu8RQh1eAeEdHqZH82AAAAAMDh2P0EAAAAAAAYUs1EwH284hZPEXoF3Nsq3AEAAAAgF3Y/AQAAAAAAhlSj1c4cnxirFLySk6nas8FdwB0AAAAA8iDgDgAAAAAAMKQaO9kN7hMa3AvRq8G9I+AOAAAAALmw+wkAAAAAADCkmu1EwH3MLZ4iaHAHAAAAgOLZ/QQAAAAAABhSjZ125vi4BvdC9Gpwbwu4AwAAAEAu7H4CAAAAAAAMKQ3uR6tXwF2DOwAAAADkw+4nAAAAAADAEOp2u9FoJQLu1UrBqzmZeja4twXcAQAAACAPAu4AAAAAAABDqNXpRjeRoR6vusVThGo5/T63Ux8OAAAAAHAodj8BAAAAAACGUKq9PSJiQsC9ED0b3DvpzwcAAAAAODi7nwAAAAAAAEOosdNOHtPgXoxqj4B7q6PBHQAAAADyUD3qBQAAAAAAALBbs92rwb1S4EpOrnKvgHtbwP22Rqsdf/vTL8Rnn7sW950ejz/3vofix9917qiXBQAAAMCIEnAHAAAAAAAYQo2ddMBdg3sxejW4d7oC7rf9/P/61fj0s6tv/PnfvHA9/u5//MfiP7h4/ghXBQAAAMCosvsJAAAAAAAwhHo3uLvFU4RKrwb3joB7RMS3r996U7j9to9//qUjWA0AAAAAx4HdTwAAAAAAgCHUq8FdwL0YvRrc2wLuERHxu0+/kjn+tUtr0fEeAQAAAHAAdj8BAAAAAACGULPdTh4bF3AvRM8G97bwdkTE81c2kseu32oUuBIAAAAAjgu7nwAAAAAAAEOoV4P7eMUtniKUSqVIZdw1uO/t6rqAOwAAAAD7Z/cTAAAAAABgCDVa2QH38Wo5SqV0sziDVS1n305rdwXcIyJ2ejTZX6lvF7gSAAAAAI4LAXcAAAAAAIAhlAq4T1Td3ilSJVHh3u6kG/ZPkqsb6RD7ao9jAAAAAJBiBxQAAAAAAGAINVrtzHEB92JVEwH3Vo/m8pPkynqPgLsGdwAAAAAOwA4oAAAAAADAEGomG9wrBa/kZCsnG9wF3LvdbqyuN5LHe4XfAQAAACBFwB0AAAAAAGAINRIB93EN7oVKNrgLuMfa5k7yQYyI6Bl+BwAAAIAUO6AAAAAAAABDKN3g7vZOkSqJgHunK+C+utG7oX1VgzsAAAAAB2AHFAAAAAAAYAilGtwF3IuVbHBvC7hfqQu4AwAAADB4dkABAAAAAACGUKPVzhwfF3AvVDkRcG93BNyvrjd6Hn9tcye2d7K/xwAAAACQUj3qBQAAAAAAALBbM9ngXil4JSdbssFdwD2u9NHQfm2jERfune4558atZnzl2zfitc3mG2Nvvf90XLxQ830HAAAAOIEE3AEAAAAAAIZQIxFw1+BerEqqwb0r4L7aR8D9yvp2z4D7Z567Gr/wv301bjZau449eX42Pv6fPhVna5OHWicAAAAAo8UOKAAAAAAAwBBKN7i7vVOkajn7/W63sz+fk6SfgHuvOds77fjFTyxlhtsjIp55eT3+h3/13IHXBwAAAMBosgMKAAAAAAAwhBqtdua4BvdipRrcWx0N7qvrjT3nXKmnA+6fe/5a3LjV7Pn6Ty69HDseJgAAAAA4UeyAAgAAAAAADCEN7sMhFXBvC7jHlT4a3K9upEPwyyv1PV/faHXiuSsb+1oXAAAAAKPNDigAAAAAAMAQaiQD7pWCV3KyaXDP1mp34vrNwzW4L62s9XWtfoLwAAAAABwfAu4AAAAAAABDKBVwH9fgXqhqIuDeOeEB92s3G9Ht4y1YTbS8d7vd+Prl/oLry30G4QEAAAA4HuyAAgAAAAAADKFmssHd7Z0iaXDP1quZ/U6pgPt3b2zG2uZOX+dY0uAOAAAAcKLYAQUAAAAAABhCjVY7c1yDe7GqleyAe/uEB9xX1xt9z+tmVL3vJ7T+/OpGbDWzfx4AAAAAOH7sgAIAAAAAAAyhdIN7peCVnGzlkgb3LKlm9rtt7bRjfbu1a3z50lrf12p3uvGNV7S4AwAAAJwUAu4AAAAAAABDqJEIuGtwL1a1nGpwz/58Top+A+4REVcz5i7vo8E9ImLpkoA7AAAAwElhBxQAAAAAAGAIpRvc3d4pUqWc/X63T3a+Pa7sI+B+99x2pxtPv7y/wPrySv+N7wAAAACMNjugAAAAAAAAQyjV4C7gXiwN7tmurjf6nrt619xvXr0Zm8125tw//tZ7M8eXL2twBwAAADgp7IACAAAAAAAMoUYrOwA8LuBeqEoi4N7qdAteyXDZT4P76l1zlxJt7NVyKf7sUxcyj7147Vasb+/0v0AAAAAARpYdUAAAAAAAgCGUbnCvFLySky0VcG+f8ID73aH1/cxdTgTcHz83E089nN3gHhHx9IoWdwAAAICToHrUCwAAAAAAABg2r95sxK/+3vPxpZduxGaj1ffrKpVSvPPsbPzCR94R716oHWoN6YC7/qIiVRMB9//9y5didX07/uIPvTV+5NEH9n3erWY7fu3Tz8fnnr8W61vfayYvlUrx2NmZ+NgH3hIfeuzModadh2arE3/391+I3/36K7Gx3f/PxSe+cik+/Y3VN/786q1m5rzFhblYuGcq7pkei9c2d7e1L63U44Nvv3//CwcAAABgpAi4AwAAAAAA3GGr2Y6f+ftfiG9du3Wg11+6sRWfff5a/PbP/1C889zsgc7R7XajKeA+FFIN7hERn3nuWnzuhevxj//CU/Hv7iPk3u124y/9xpfjCy++uuvY5bXvfX/+4cfeEx95fP5Aa87LL/zmv41PPbO698S7bO904uX63o3vFxdqUSqVYnFhLj77/LVdx1PN7wAAAAAcL3ZAAQAAAAAA7vCZ564eONx+W6PViY9//qUDv77Zzg63R0SMC7gXqlpJB9wjItqdbvzjfX7W//a7a5nh9jef89v7OmfeLt3YPFC4fT8WF+Yi4ntB9yzLK/Vcrw8AAADAcLADCgAAAAAAcIelAbVEf+Fb6QDzXlLt7RERE9XKgc/L/pVLvQPuEZHZNt7LF3uE229bujRcbeXPvJxvuHxqrBLvOHM6IiKefDA74L66vncLPAAAAACjT8AdAAAAAADgDvXNnYGc5/LaVrx6s3Gg1zZ6BNw1uBerWt474B4Rsb3T7vuc/YTXNxqtuNVo9X3OvN1q7P33+5n3LsQ902MHOv+f/oHzUa1877t9z/R45pxWpxs7PX67AQAAAADHgx1QAAAAAACAO9S3BhNwj4hYXjlY63WvgPuEgHuhKuX+3u9rG/0/zNDv92KYGsu39gjw/7GH5uKX/tQ749c/+oNxeqK6r3NfvDAX/8WPPfrGn6fH07+lYLPZ/4MEAAAAAIym/e0uAQAAAAAAHHNriQb3P/HO+fhT7zqbeey//5d/FNcz2tqXVtbiw4+f2fcamr0C7mMC7kWqVvprcF9d344L907vOe/q+nZc6TO4fmV9Ox554HRfc/O21SNY/sn/7IfjifOzUSmX4oNvvz++8Esfia9857W4cbO553kfeeBUvOvBWoxVvv+9nuoRcN9qtqM2dbCWeAAAAABGg4A7AAAAAADAHdYSDe5PPXxP/Jn3LGQe+9QzV+JffWN11/jBG9zTYeLxioB7kcql/gLu/YbWl/bxnbi63n8rfN5SDe7vfcs98e6F2pvGZibH4sOP7f/BjtumxnoE3PdokgcAAABg9NkBBQAAAAAAuMN6IuA+N51ujb54YS5zfHllLbrd7r7X0LvBPR3+ZfCq5X4b3PsLoy+vrPV97X5D80XYTDS492pbP6jpHufcbLYGfj0AAAAAhouAOwAAAAAAwB3WNpuZ47Wp8eRrFu9qsL7t+s1mvFzff0i50SPgrsG9WJW+A+6Db3Dv95xF2EoEy3u1rR/UZI9zbmtwBwAAADj27IACAAAAAAC8bqfdiVuJpuraVLrBffHB7Ab3iIjlS/03dt+WanAvlSLGKv0FrhmM/hvc9w6jd7vdfTW4D1XAPREs79W2flAT1XKk3vZUkzwAAAAAx4eAOwAAAAAAwOvqWzvJY3PT6YB7bXosHr5vOvPYfhq7b2u0skO845VylEoC7kWq9PlAwZU+mvov3diKtc30d+xuq+uNvufmLRUsn8oh4F4qlWJ6vLqvdQAAAABwfAi4AwAAAAAAvK5X+LhXwD0iYnEhu8V9P43dtzV2shvcJ6pu7RSt0ucDBVc39g6jL+3zu9BPaL4o24kG96mx7CD6YU2OZQfnU+sAAAAA4PiwCwoAAAAAAPC6+lYzeaw2tVfAvZY5/vWVenQ63X2to9lOBNwToV/yUyn33+De7fb+nPf7sMPVjb3PWZR0g3s+txunE83wGtwBAAAAjr98KhUAAAAAAABGUH0ru8F9vFKOqT3C5RcvZDe4bzRa8fHPv/RGA3ylXIonzs/GY/MzUXq9HfyV+lZ8faUeD99/Kt5x5nSywX28oruoaNU+A+5bO+3YaLRidjL9IMTSSj1z/O1nTsc3r97cNb7T7saNW8247/REf4vNUSpYPj2ez+3G1M/bloA7AAAAwLEn4A4AAAAAAPC6tc3sgHtteuyNMHrKk+dno1yKyCpr/5u/++yusZ9YPBe/+tMX4xNfuRT/3Se/Ea3XX/gT7z4X73nLPZnXmBgTcB9mq/XtZMC93enG05ezA+4/9sR8ZsA9ImJ1vTEUAfftnUSDe06/VWAq0eC+lVgHAAAAAMeHXVAAAAAAAIDXJQPuU+lW7tumx6vx6PxM39f6neVX4m996rn4b//FM2+E2yMifufrr8Rv/MG3M1+jwb14L16/1ffc1fVG8ti3rt1MtqB/5PEzkSqKX13f7vv6eUqtPRVEP6zpxHk3m61crgcAAADA8LALCgAAAAAA8Lr6VnbAfa6PgHtExOJCbV/X+/jnX8psfP/ujc3M+RNVt3aK9vYzp/uee6VHGH3p0lrmeLVcinc9WIsHZrJb2ocl4J5qTk8F0Q8r1Qy/1ezkcj0AAAAAhoddUAAAAAAAgNclA+7T/QXcP/i2+we5nIx1jOd6fnb7wYfu6XturzD68ko9c/yxszMxOVaJs7OTmcd7heaLtJVocJ9MBNEPK9UMv7WjwR0AAADguBNwBwAAAAAAeN3aZjNzfLbPBvd//93n4pH7Tw1ySW8yP5vd8k1+njg3Gx982319ze0dcM9ucF9cmIuIiDOJgPvqeqOva+ep2+3GZjM7WF58g3t20B4AAACA40PAHQAAAAAA4HXJBvep/prTx6vl+K2f+2B89H0PxaPzp+PBuak3/iuXDr++VMs3+SmXS/EPPvbe+LkPvS2ePD8bH3n8TDzyQPZDDKmAe7PViWdf2cg8dnGhFhHpz7ZXaL4ozXYnOt3sY3kF3FPn3RRwBwAAADj2qke9AAAAAAAAgGGxlgi41/pscI+IuOfUePzKT7171/h/+Ov/X3ztUnaLd79SLd/k6/RENf76jz8ef/3HH4+IiF/7vefj7/zrF3bNu5JoW/+jK+vRbHcyj91ucE+18w9DwL1Xa/pkomn9sKbGs29jbu0IuAMAAAAcdxrcAQAAAAAAXlffTDS4T/cfcE+53dR9GBrch8N84nO4mgijL63UM8cnx8rx6PzpiEg/vDAUAfceofLpRBD9sKYSwfleYXsAAAAAjgcBdwAAAAAAgNfVEw3ugwi4327qPoxUsJpina1lt61f3WhEu9PdNb6caO5/8nwtqpXv3a5LPbxw/WYzdhLt70XZ7BEqTwXRD2t6PPu8vdYCAAAAwPEg4A4AAAAAABAR3W431hIB99mpATS4Xzh8g/t8IlhNsc7MZIfR251uvHqrsWt8OdHgvnhHq3+vhxeubuw+Z5F6taZPJYLohzWZOO92jzZ5AAAAAI4HAXcAAAAAAICIuNloZbZvR0TMDSDg/sj9p+P0RPXAr6+US3HfKQH3YXC2lg6jr9bfHEbfbLbihasbmXMv3tHqn2pwj4hYXd/e5woHa6tHqDzVtH5Y04lmeA3uAAAAAMefgDsAAAAAAEBE1BPt7RERc9Pjhz5/uVyKdz04e+DXn5mZiEq5dOh1cHj3To/HWCX7s7g7jP705fVIPDfxpgb32alqTFSzb92t1o824J4KlVfLpRir5HO7MRWc32y2crkeAAAAAMNDwB0AAAAAACAi1jbTAffaABrcI97c2L1fZ3o0fFOscrkUZ2ayP4/VjTeH0ZdX1jLnzUxW4+H7Tr3x51KplGyGP/IG90TAfSqn9vaIiMnEubd3OrldEwAAAIDhIOAOAAAAAAAQvRvcZyerA7nG4iEC7mdnJwayBgbjTOLzuLttfWmlnjlvcaEW5bsa+ecTofkr640DrHBwtnayW9OnxvILuE8nzt1sd6LVFnIHAAAAOM4GsxsLAAAAAAAwZNY2m/E//t7z8dyVjbh/ZiL+yx97LN56/6nk/FTAfWayGtXKYDqDFhdqB37tvAb3oXI28Xms3hVGTzW4Zz3sMJ9ocL96xA3um4kG9+kcG9x7tcNv7bRjZkA/k4fV7nTj7332W/HpZ1fj+s3vf/aP3H86fvq9C/GTi+ePcHUAAAAAo0nAHQAAAAAAOHZ22p34qf/pD+Kl67feGPvXz67G7//ih+L83FTma9Y2swPutamxga1r4Z7sa/dDwH24pD6PK3eE0dc2m/GdVzcz513MeNhhfia7Ff7KEQfctxIB98k8G9x7Bdyb7ZiZHNzP5WH80v+5HJ/4ysqu8Us3tuKzz1+LzUY7fuapC0ewMgAAAIDRNRzVBgAAAAAAAAP021+9/KZwe0TE9k4n/t5nv5V8zdpWM3N8bnpwQdpSqRSzkwfrHxJwHy7JgHv9+2H05ZV68vVZDe5nEw3ud57zKKQC7vk2uKd/TlKN8kW7vLYV//wPd4fb7/SPPv9iQasBAAAAOD4E3AEAAAAAgGPnU8+sZo7/zvIrydfUt7Ib3Oemxgeyptv+4g+99UCvOyvgPlTO1rLb1l+6fiuarU5ERCyvrGXOuf/0RJzLCLOnAu7fubGZDJkXYWsnFXDP75dFT/Voh0+tp2hfeunV6HR7z3l+9eaRfnYAAAAAo0jAHQAAAAAAOHY+/Wx2wP3VW81Y384Ostc3s8drU4NrcI+I+I/esxBjldK+Xzc/mx2o5mg8Nj+bOd5sd+KPrqxHRMRSosH94kItSqXd34HHz85kzm93uvGNV9Jt8HlLNaZP9gihH1avdvhhaXBfutTfZ5J6eAYAAACAbALuAAAAAADAsbJXmPTpROh4LRVwnx5swP3CvdPxyz/5REyO7e82zXyi3Zuj8ej86eRneDvYnmpwX1yYyxx/5P7TcXoiuxW93zB1HlIN5L1C6Ic1US1HxjMAERGxPSQN7qnP925rW82cVwIAAABwvAi4AwAAAAAAx8rTl3sHgVOt2qlg/NyAG9wjIv78Bx6O3//FD8U//cvvi9/5z384fmLxXM/5U2OVmEkEnzka1Uo5njxfyzy2fGktVte3Y3W9heGTFgAAIABJREFUkXl88UL268rlUrzrwexm+H7D1HnYSgTKp3JscC+VSsnzD0OD+067E8+8vN7X3NTDMwAAAABkE3AHAAAAAACOlaU9gsCpoPBaIuBeyyHgHhFxfm4qfvgd98eT52sxP9O7nf1sbTJKqTprjsziQiLgvlKPpUvp7+HFRIN7r2PLiQczipAKlE/l2OAekW6I32y2cr1uP55f3YhGq9PX3L1+qwQAAAAAbybgDgAAAAAAHCvLl3oHgVNB4fpmM3N8bjqfgPudztYmeh4/M9P7OEcjFUZ/4epGfPHFG5nHFu6ZintPjSfPuZg454vXbx1ZUHo70eCeCqAPymSiwT21niLt54GDugZ3AAAAgH0RcAcAAAAAAI6VvRrcL69txbWNxq7xVHi4NpUOIw/K/OzeDe4Mn1SDe6cb8Ztf+u6+XtPP8acvH02Le6oxfSoRQB+UdIP7MATce/87c6e1reyHZwAAAADIJuAOAAAAAAAcG1c3tuOV+vae8+4OpzZbnbiVCM3WpvJvcD8z0zvAvlcAnqPx8H2nYmaymnlsK9Eynmpov61Xw/teD2/kJRUon8q5wT0VoE+9t0Va2uM3RdzpqJr3AQAAAEaVgDsAAAAAAHBsLPcZOl1aefO8XgHUuen8A+57NbQLuA+ncrm0ZyP73faaXyqlz9nv93vQthOB8twD7onzbx1xg/v2TjueW93oe/7apoA7AAAAwH4IuAMAAAAAAMfG3c3s/c476oD7/OzEoY5zdPZqZL9TqRTx7gf3DsSnztnv93vQUg3u0zkH3KfHs9vxU+spyjMvr0e70+17/poGdwAAAIB9EXAHAAAAAACOjbub2VOWV+rR7X4/oFrfaibn1qbyD7hPj1ejVEofP6vBfWhd3EeD+yP3n4qZyb2/T6lzvlzfjmsbjb6vNyhbqQb3sewA+qBMjSUa3BPrKcp+HzRYF3AHAAAA2BcBdwAAAAAAYORdqW/H//v0K/HZ56/1Nf/GrWasvLYVERHXNhrxiS+vZM4br5STIdsizQu4D639NLhf7HNur3MeRYv7VqIxfSrnBvfU+VPr6cetRiu++OKr8Yffee1ND7n0Y2N7Jz73/LX4G5/8xr5et7Yp4A4AAACwH/nWKgAAAAAAAOTsH37uxfiVf/ls7DOrGssr9fjMc1fjv/kXzyRfW5sei1KvavWCnJmdOOolkHCuNhn3n56I6zf3blZf7LPt/YGZiThfm4yX69u7ji2t1ONH3zm/73UeVLPViVYn+wdkOu+Ae6rB/YAB9y+++Gr8tX/2tXjl9ff1qYfviV//6A/GmT4eIPnSSzfir/6Tr8RrPcLqpyeqcbPR2jW+1uM3RAAAAACwmwZ3AAAAAABgZD37ynr8zd/df7g9IuL/+upK/PL/nQ63R0TUpsYOvrgBmqgefYs82UqlUlzsM7i+eKH/tvdUi3vRDe5bO+kwed6/3SAVoN/ssaaUnXYn/qvfWn4j3B4R8eVvvxa/9ukX+nrtX/tnX+sZbo+I+JFH788cr2twBwAAANgXAXcAAAAAAGBk/fZXLx/4tZ9+9uqec4oMuP8773igsGsxWKkw+p2q5VI8cW62/3NeyA7NL6/Uo3uQJzoOqFdb+lTeDe6J8281d7ek7+UL33o1vv3q5q7x3/rDlWi0egfmv/zSjbi8trXnNX4k8TO8vt2KdqIFHwAAAIDdBNwBAAAAAICR9bVL+bZZL/bZzD0If+59D2WO/+x7LxS2Bg7mA2+7b885P/jQPTG5j8bzi4nQ/I1bzVh5be+w9aAcZYN76vy91pTy+3+U/UBLs92JZ1/Z6Pnar/XRmv/g3FQ8eT7978X6lhZ3AAAAgH4JuAMAAAAAACOp3enG05frPedMjVXiFz7y9gOd//RENf7sU9mh8zx86LEH4u1nTr9pbHKsHP/J+99S2Bo4mKcevif++MP3Jo+XShE/9+G37euc73owHZZeXun9vR+kzR5t6dM5N7inzr/Zo1U+5bs3dre337a8R4B9+dLe7/fPf/jtMTed/o0PdQF3AAAAgL4JuAMAAAAAACPpxWs341aPoOuPPTEf//znPtBXu/bdfmLxXPzmX3l/PHZ25jBL3JeJaiX+j7/6gfjo+x6Kx+Zn4sefPBu/+VfeH+8usEWegymVSvEbf+mp+Ms//NZ4bH4mzs5OxtnZyThXm4wfefSB+J//wlPx4cfO7OuctamxeOT+U5nH9gpkD9JWj5+xqZwD7qnG++0DBNx7PQyztEeAvdf7/f5H7o2//bM/EB9930NR6xFwXxNwBwAAAOhb9agXAAAAAAAAcBBLiRbrarkUT/+Nf++NcOyL127u67y/+tMX48+8Z+HQ6zuIe06Nx6/81LuP5NoczvR4Nf7rn3xioOdcXKjFi9dv7RpfKjLgvpMdJi+XIsYr+XZpTY9n38rcTKwp5Up9O65uNJLHewXYr2004uX6duaxf/Sx98afeGL+jT/PTFSjUi5Fu9PdNXdts7mPFQMAAACcbBrcAQAAAACAkZQKpT46P/Om5uczs5P7Ou/8PudDXhYX5jLHn768Hp2MEHUeNhNt6dPj1SiVSrleezrREJ9aU8peDwR889rNuNloZR7rFX5fvPDm365QKpWiNpXd4l7X4A4AAADQNwF3AAAAAABgJKUa3C/eFTo9PVGN0xP9/1Lbs7WJQ60LBuXu7/JtNxutePH6/n4zwUFtJ9rS73yIJC+pazRbncyW9JReIfWIiG434pnL2f+epP6dOVebjDMzux+GEXAHAAAAODwBdwAAAAAAYOQ0W5149uX1zGNZrdfzs/2H1vfb+A55eeJcLSrl7Jb0pUvZwetBSze45x9w73WNrUTwPstyIqTez5xUOP5iol0/FXBf2xRwBwAAAOiXgDsAAAAAADBynruyEc12J/PY4sLu1uv5PkPr0+OVmNlH2zvkaWq8Eo/Oz2Qe26uVfFCOMuA+1SvgnljX3brdbl8B96WM97PXaxcT7fpz0xrcAQAAAA5LwB0AAAAAABg5WWHUiIiJajkzEHy2z4D7/OxklErZjdlwFC5mPLAREbHUR2h7ELYTTemTYwUE3Htco9+A+3de3ewrXJ4VZF95bStu3GpmztfgDgAAAJAfAXcAAAAAAGDkpNqrnzw/G2OV3bc/zvQdcJ841Lpg0BYTQepvvLIezVb2bzEYpM1mK3O8iAb3XtfY3Mle191SD8Pc7bs3NuO1u8LsvZrf3/VgosE9EXCvb2UH5QEAAADYTcAdAAAAAAAYOangaSoMfLbP4Pp8n0F4KMpiosG92erE86sbuV9/q5kdou/Vrj4oUz0C7v02uPcKqe+ae/nNc1MP0jxy/6lkU3ttejxzvJ8WeQAAAAC+p3rUC+D/b+/OoyzL6jrR/27Mc0RlZkVEZkbWPFdmBMVUIAiIUAwPVGjUdmQp3S1id9vKsx3e6259rdKy7H62A9qKruewWNIKKgICUkyWIDMRlTVXJVWVY+QY8xxx3x9pjXH2jXsj7r1xMvPz+avy7HP33nFj5bmVEd/zPQAAAAAAUL4TkwvxP/7+gRg9PBmLK+UFPJ+tubEhDuztjZ981fVx5c7OKu+wfKdnFuM373wovvTNs7GwXNnX8tjZuczjI/uyw8DlBtcHBdzJmRsHu6O1qSEWM9raR49MxA0D3fHeuw7FXQ+djvbmxviJV14Xz73islhaWYs/vOub8Q8PnYr25sZ4x7ddF8+78rKK159PNKWXCp9XS1tTNQLu5TW4R0SMHZ6Il163K37/c4fik/eNx1cfO5d5Xuqmg4hIBt8n5s4H3NfWivHeuw7Fx+8Zj+62pvie5++L1x/YXfYeAQAAAC4FAu4AAAAAAHCBmJxfjjf+9l1xanpxy3M9dHIm7rz/ZHz8P7wsBnvrH+qeXliO7/m9L8Sh07NVnTfV4D5Q5tfYL+BOzjQ3NsQte3ri64+vD2qPHZ6Mux46HX938MSTx+68/2S871/dHn/2xcfio3c/8/ifve32eOn1uypafy4RJK9Hg3tDQyHamhtiYXl9uH++jJtiVlbX4uDRqbLXGz0yGT/3gbH4i68eKXle6joTEdGXCrj/c4P7f/7Qwfizf3r8yeOfeeBU/Nq/OBDf+4Iryt4nAAAAwMWuYbs3AAAAAAAAlOf9X368KuH2J0zOL8cff+HRqs1XiU/eN171cHt3a1NcnWik1+DOhWwkEah+/1cOPyPc/oQf+9OvPiPc/oTf+OSDFa+dakrvqEOD+/l1svu6UsH7pzt0erasIPwTPnnfeHzga6XD7RHpJ0VERPR1ZAfcJ+eX49zsUvz5lw6vG/vNOx+OYrFY9j4BAAAALnYC7gAAAAAAcIH4x4fPVH3Ozz9S/TnLMXp4supzHhjqjYaGQuZYf3drWXMM9JR3HtTT8FA6UJ1lenEl8/hXHjsXs4mxlFRAvD0RPK+2VFN8Knj/dEfPzVe83toGOfPGhkLcsjv9/ehNNLgvrazFFw6diZWMBY5OzMfjZ+cq2icAAADAxUzAHQAAAAAALgDFYjHGjkxUfd77jk3F0spa1efdyMTcUtXn/K7b9ibHmhsbYldXy4ZzlNv0DvU0nGhw34yDRyu7uSQVJE8Fz6utPdEUX04z++T8cubxpsSNMOV47a2DyT1FpBvcIyLGjqTf+9ESYwAAAACXGgF3AAAAAAC4ABw5Nx/n5rLDmluxtLoWD5yYrvq8G5lIBE836zufsye+6znpgHtEeeH1fg3u5NA1uzqju7U6jemlQtZZ5hIB944SIe9qSq2T2tfTpW6kuXJnR1yxo6Pivdww0BU/97qbSp7T256+keboRLpRfuxw9W9gAgAAALhQ1efZgQAAAAAAwJaMlmhv/6/ftb+sRuJf/NA9sZjR1j52dCIODPVuaX+VmkiE9e+4ZSC+7ab+sudpbCjErXt64pbdPVEolH4PBnra4p5jU8nxHZ0t0dpUn9AuVKKhoRD79/bGFw6d2fJcpa4lWVJN6W11Cri3JZriy2lwT91I09fRErt72+Lxs3Nl7WFkX1/83Gtvituu6Evu5wm97ekG9wdOpK8/ld54AAAAAHAxE3AHAAAAAIALQCr8eM3lnfFDL7qyrDn+4iuH42uPrw+3jh2ejB+4fUvbq9hUInj60ut3xfe98IqarLlRg3t/t/Z28mt4X3UC7pUGqedTDe4bBL2rJdXgPr+0suFrJ1MB9/bmGBnqiw+PHS9rD7/6pv1x657ybgJqaWqIjpbGzIb5B8dnkq87eGwyVteK0VjGzUoAAAAAF7uG7d4AAAAAAACwsdHD2a3LI0N9Zc8xnDi30kbnakg1K5dqP96qgZ7SAfbB3tIBeNhOlfxdL+Xxs3Nxbnap7PPnEkHyVPC82lLrZAXIn20y8aSI3vbmGC7zqRWtTQ1xw0B3Wec+oW8T17G5pdV4+GQ6AA8AAABwKRFwBwAAAACAnFtdK8bBo9mty+WGNCMiRvZln/vQyZlkS3MtFIvFZLNyLQPugxs0uA90C7iTX5X8Xd/IWOJ6kmVheS3zeFudAu5tiab4+eWNr1nJG2k6mmP/3t4opyz91j090dxY2a9UezZ5HduOm40AAAAA8kjAHQAAAAAAcu7QqZmYTQTQU63slZy7ulaMe46VH3jdqpnFlVhdK2aO9XW01GzdgY0C7hrcybG9fe2xs7M6fz/GEk+EeLaV1bVYWs0OuHckgufVlmpwL+emnNSNNH3tLdHZ2hTX9XdtOEcl19gn5+/YXMB9TMAdAAAAICIE3AEAAAAAIPdGj2SHz5saCnHrnp6y57l6Z2d0tzZVtEYtTMxlh04jatvgvmHAvae1ZmvDVhUKhaq1uJf7932uREt6e50a3Nu30uA+t5R5vLf9/HWwnPB66skXpfS1b+5GhLE6XocBAAAA8kzAHQAAAAAAci7V6nvDQHe0VdCi3NBQiAOJgGw9m4NTrcoREX01DbiXDrAPbhCAh+22mTbxLOX+fV8o0ZKealavtvaW7Jty5rbS4P7PT4oYKeOGgc2855u9Uee+41OxuLLx1wUAAABwsRNwBwAAAACAnEu1LW+mWTgV1qxnc3CpgHtPDQPuOzpLtypv1PAO220zf+eznJxejBOTCxueVypEngqeV1sqSD+/QcC9WCwmrzW9HeevMxuF17tbm+LqnZ1l7PKZ+jo2dx1bXi3G/cenN/VaAAAAgItJfX7yBAAAAAAAVOzU9GJ88ZtnYvRwdtvyZpqFU43F3zw9G+//8uPx8hv6Y7C3tkHvibns0Gl3W1M0NhRqtm6hUHpuAXfyrloN7hERo0cmYrB3MDk+vbAcn7j3RHK8vYKnR2xFap355dIB97ml1VheLWaOPdGwftPu7mhuLCTPOzDUGw2buCb1bjLgHhHx/q8cjkfPzGaOXbGjI/bv7Y3mRh1mAAAAwMVNwB0AAAAAAHKmWCzG73z64fj1TzxY8rzhRFi95Gv2pQOyP/uBuyMi4l9/69XxC6+/ecNA+GZNzC9lHt9s63G17Nyg4R22266u1tjT2xbHymhf38jYkYl4za3ZAffPPXgqfuJ9X4vphZXk61PN6tXWvskG94kST4ro++eAe2tTY9y8uyf5BIvN3lDQu4UnUbzvi4/H+774eHL85t098d63Pj/29rVveg0AAACAvHN7PwAAAAAA5MwXv3l2w3B7a1ND3DDQXfHce3rbYldX6SD3H/zDN+Pj94xXPHe5JhPB07727Q2Yb6apGeqtt6M6f09Soe75pdX4yT//eslwe6Fw/hpUD5ttcJ9MPCki4pkB9Kt2dibPSz3xYiO1vJbdd3wqfvnD99ZsfgAAAIA8EHAHAAAAAICcufO+jcPlt+7piebGyn/MXygUymolLmcPm5UKnm6l9bhcIyUa7OFC8OpbBqoyz9iRySgWi+uOf+aBk3GuRDg84nzovFZPeHi2VFP89MJyLK+uJV+XelJExDOvNbdfsyN5XqknXpRS66dRfPyeEzG9UPp7BAAAAHAhE3AHAAAAAICcGZ9a3PCcF12zc9Pzv6hEoPPJPUxvvIfNmkgF3GscCo2I+JFvuSrz+FtffGXN14ZqeNXN/ZnHWyq84WVyfjkeOzO37vg3jkxs+Nr9ezfXbL4ZAz1tmceXV4vx4Ph08nWpG2m6W5ui6Wnv1bded3lkPbzhyp0dsac3e+2N7Olr39TryrVWjDh4dKqmawAAAABsJwF3AAAAAADImdnFlZLj3a1N8UNbCGR/7/OviJ2dLVvaw1ZMzmcHT/vq0OB+x60DsW/HM8OnHS2N8X23X1HztaEahof64hU3Xr7u+O//8PPilTetD7//9vffFqmy9dGMMPvY4cmS6xcKEW998VVl7bUabhjoTob3x46k95q6zvQ86zpzxc6OeNNtQ+vO+8lvv37TLfVX7uiI7tamTb22XGNl3IgAAAAAcKGq7U9WAAAAAACAis2UCJe/bv9gvPOOG2N37+Ybgns7muNv/u1L4tc+9kD87eixzHNqGXCfmF/K3lcdAu4dLU3xgR//lnj3xx6Irz9+Lq7r74qf+Lbr4qbBnpqvDdXyuz/wvPjtTz8Udz18JtqbG+Lfv/L6+JbrdsXtV++M93zm4fjcQ6ejvbkh/t0rr4+XXLcr/ucnH4qHTs6sm2fsyGR853P2PvnntbViHDyaDo1/6/W74gduvyJeu393Tb6uLC1NDXHznp4YPZwRxj8yEd/3wuybUyZSN9JkPCniXW8+ENf1d8XH7jkRLY2F+Nffek28+paBTe+5oaEQB4Z64/OPnNnw3BdevSNmFlbi1Ez2UzOm5pdjcWVt3fFS4X4AAACAC52AOwAAAAAA5MzsUna4/Oded1O8/eXXVmWNocs64re+77Z4ybU74+c+ePe68VIh+62amCs/eFoL/d1t8evfPVKXtaAW2lsa42dec1P8zGvWH3/nHTfGO++48RnHh4f6EgH3Z4bGD52ejenE3/2/fPuL4/lX7djaxjdpZKg3M+A+WqJtvpLrTEtTQ/z4K66NH39Fda6vEeff83IC7u9684G49vKu5Ph//8QD8Vufenjd8az2fQAAAICLRfbz/AAAAAAAgG0zs5AdMO1qrX5vTVdb9py1DLhPpZqV21tqtiZcykb29WYeP3h0KlZWn2oHf3bg/QmNDYW4dU/2HPUwPNSXefyB8elYWF7NHJtMXGfq8aSIiPOh/HIM9LSVHE997UfOzceZROs7AAAAwIVOwB0AAAAAAHJmZjE7sFmLgHtnYs7ZWja4J4KnPXUKnsKlJhWSnl9ejYdPPdXsPnYkuxH9+v6uaG9prMneypEKi6+uFeOeY1OZY5PzS5nHe+t0I83wvuz3/Om6Wps2vK6XCsqPHU032AMAAABcyATcAQAAAAAgZ1Lh8lQYfStS4crl1WIsrmQH7bdiaWUt5pay5+3rEHCHWrh5d3c0NxYyx8YOPxWSHk00uI8kAvL1cs3lXdGZCNinWucn5hJPiqjTdWZPb1vs6iodpu/vad1wnv6ethhMtLw//XsHAAAAcDERcAcAAAAAgBxZXSvG/HJ2ALyztfoNyp0t6dD8bKJJfismE+3tEQLuUCutTY1x02BP5tgTofbl1bW4N9GGPrwv3SJeD40Nhdi/N3sPqdb51LWmt05PiigUCsnm/CekguvPNpxocU+F+wEAAAAudALuAAAAAACQIzOJ9vaIiO7W6gczu9tKBdzTe9msyfml5Fi9gqdwKUqHpM8HxB84MR2LK2uZ52x3g3tExMi+7D2kWueTDe51vM6k3vMnDJQZcE9/7ZNRLBYr3hcAAABA3gm4AwAAAABAjpQKldekwb01HXCfXqh+wD0VOo2I6Gtvqfp6wHmpkPr9J6ZicWU12YTe0tQQNw5213JrZUmFxQ+dmo2phfXXlVSDez2fFLHRjQHlBtxTX/vpmcU4PrlQ8b4AAAAA8k7AHQAAAAAAcqRUwL2rRBh9s0qF5meXatHgnh06bWlqiLZmv7aAWhnelx2SXl4txn3Hp2Ms0YR+y+6eaG7c/r+bpcLiB58Vzl9eXUs+DaMnVw3urWXNc2Bvep7U9w0AAADgQrb9P40CAAAAAACelAplRpRuW9+s1qbGaG4sVLyXzUo1uPe2N0ehkL0PYOuuu7wr2puzb2j5sT/9SvzNN45ljo1sENKul6HL2uOyRPv66LMC7lOJG2ki6vukiJ1drbG3rz05Plhmg3tfR0tcubMjc+zZX/vTFYvF+OPPPxo/+N4vxlv/6Evx4bHs7zEAAABA3lT/J+EAAAAAAMCmpULlhUJER0u6bX0rulqb4lxG8LxUm/xmTSSCp311bFWGS1FTY0Ps39sTX3703Lqx8anF5OuGSzSn11OhUIjhob747IOn1o09u8U8dZ2JiOhLhORr5apdHXF0Yj5zrL/MgHvE+e/DY2fm1h0v1eD+Kx+5L9571zef/PNnHzwVk/PL8QO3X1n2ugAAAADbQYM7AAAAAADkSCpU3tXSVLOG81Qz/MxC9QPuk6mAe51Dp3Ap2kxYfWRfPhrcI9Jt8mPPajFPPSki4vzTIuppd2+JBvfe8gPupb72tbXiuuNnZhbjT77w2Lrjv/uZR6JYXH8+AAAAQJ4IuAMAAAAAQI7MLK5mHk+F0KuhKxVwr0GD++TcUubxeodO4VI0nAhJp3S1NsU1u7pqtJvKpQL6Ryfm4/TMUy30U4kbaZobCzV7EkbKm5+7N7mXy7tay54n9bVPL6zEo2dm1x2/8/6TsbS6tu74kXPzcXom+zoMAAAAkBcC7gAAAAAAkCOpBvfO1tqFMlPh+dlE2H4rJhLB0972lqqvBTzTK2/qj+4KbpZ548ieaGiozZMjNmO4RJv82JGJJ/97Yj51I01LzZ6EkfKCq3bE3r71Le6vuLE/WprK/1Xt/r09kfpWPLvBPiLiy988m5xrfGqh7HUBAAAAtoOAOwAAAAAA5EiqNb2rrXYN56kG99mlGjS4JwLufR0a3KHWutua491vGY625o1/RXhgb2/81Kuur8Ouytff3Ra7e9syx0YPPxXynphL3UhTuydhpDQ3NsS73zL8jGvcVTs74r+88ZaK5uloaYrr+7szx0afFu5/wtGJ+eRcAu4AAABA3tX/pzgAAAAAAEBSMuBewwb3VMB9eqH6Afd08FTAHerhdQd2x/OuvCy+9OjZOJfx97EQEdf1d8VtV/RFa1PtrjubNTzUG8cn1we0n97gnr6RZnueFPGS63bFp975ivjaY+eipakhbr9mx6be2+Gh3nhgfHrd8Wc3uBeLxTh4dH2r+xPGpxYrXhsAAACgngTcAQAAAAAgR2YTAffOltr9SL8zEZ5P7WUrNLjD9uvvaYs3DO/Z7m1syvBQX3z8nvF1x8eOTEaxWIxCoZC8kaZvG2+k2dHZEq+6ZWBLcwzv64u/+OqRdcfvOTYZK6tr0dR4vpn/0TNzMVXiBqUTGtwBAACAnNv4+YMAAAAAAEDdpBvcaxlwz567ngF3De5AOUaG+jKPn5ldiqMT8xFx8V5nRoZ6M48vLK/Fg+MzT/756W32WU4KuAMAAAA5J+AOAAAAAAA5MpNo3e1qq13AvTsRcE+F7Tdrba0YE3NLmWMXevAUqI8DiZB3xPkW94gSAfcL/EkRNw32REtj9q93nx5qf+J9SNHgDgAAAOSdgDsAAAAAAOTI7FJ2qDzVsl4NqbmrHXCfWVqJtWL2WF9HS1XXAi5Ove3NcfWuzsyx0X8OeadupOlrv7CvMy1NDXHz7u7MsdGnhdo3anAfn1qs6r4AAAAAqk3AHQAAAAAAcmRmcTXzeNc2BNxnqxxwn5zLblWOiOjT4A6UaTjR4j52+HzIeyLV4N5eu+tovQwP9WUefyLUvrK6FgePTpWcY1yDOwAAAJBzAu4AAAAAAJAjqVB5Z0tjzdZMhedTYfvNmkyETiPOtzIDlCMV8j54dDLW1ooxlbjWXAxPikiF+x84MR0Ly6vx8KnW0sxeAAAfzElEQVSZmF8ufe0+O7sUiyvVvb4DAAAAVJOAOwAAAAAA5MjMQnbAvautdgHwVMC92g3uEyUa3HsE3IEyjSRC3tOLK3Ho9GzyWtPbceFfZ0b2ZYf7V9aKce/xqSdb7DdycmqxmtsCAAAAqKoL/zl8AAAAAABwEUmFyrtaa9fg3pkIuM8vr8bqWjEaGwpVWSfV4N7d1lS1NYCL3617eqOxoRCra8V1Y3/yhUdjJeN4xMXxpIhrL++KjpbGmFta38D+l189EicmF8qa5+T0Quzb0VHt7VGmpZW1uOfYZBybyP5+Dfa2xv69vdHaVLvPfgAAAMgzAXcAAAAAAMiJYrEYs0vZAfdUCL0aUg3uEREziytVC4VOzC9lHu+7CFqVgfppb2mM6/u74v4T0+vG/uQLjyVf13cRBNwbGwqxf29vfOmbZ9eNve+Lj5c9z4lJDe7b5dHTs/G2P/5yPHJqtuR5+3a0x3t/+AVx42B3nXYGAAAA+dGw3RsAAAAAAADOm19ejUTxcE0D7p0l2uFTjfKbMTGX3eDe195StTWAS8PIUF/Fr+nruDiuNSNDvVueY3yqvKZ3qu///uuDG4bbIyIOn52P//iXo1EsJv7HAAAAAC5iAu4AAAAAAJATMwvpMHl3LRvc29JzVzPgPjmfHXCvVkM8cOkY3ld5yLunxLXuQjK8iXD/swm4b48Tkwtx18Onyz5/9MhkPHxypoY7AgAAgHwScAcAAAAAgJyYKREmr2WDe1eJuUvtqVKpQOWOzoujVRmon9uv3lnR+TcNdkdT48Xxq9EXXLUjGgpbm0PAfXuMHpnYxGsma7ATAAAAyLeL46c4AAAAAABwEZhdXE2O1TLg3t7cmAxL1iPgPtjbVrU1gEvDdf1dccctA2Wf/yMvuap2m6mzwd62ePNzh7Y0x/jUYpV2QyXGNhFw38xrAAAA4EJ3cTyHDwAAAAAALgIlG9xbGmu2bqFQiM6WppjOWH+2qgH37EDlQI+AO1C53/r+2+J/fOLBuPP+k3F2dinznOv7u+JfvnBfvOm2rQXC8+a/vflA7Olrj0/ccyJOTmdfW6/Y0RHTC8vxyKnZdWMa3LfHWKKNvbWpIQqFiIXltXVjGtwBAAC4FAm4AwAAAABATqQC7u3NjdHUWNuHsna1ZQfcZ0q0yleiWCwmA5UDPa1VWQO4tLQ2NcbPv/7m+PnX37zdW6m7psaG+OlX3xA//eobSp73kbHj8RPv+9q64wLu9VcsFpMB9//zjhujq60pfv6Dd68bu+/YVCytrEVLk4ezAwAAcOnwr2AAAAAAAMiJVFt6Z2vt+2pSa1SrwX16cSXmlrLD8oMa3AFqInUD0ezSakwvLNd5N5e2x87MxeR89ns+PNQbw0O9mWNLq2vxwInpWm4NAAAAckfAHQAAAAAAciLV4N7V2ljztVMB99SeKnWyRFvwgIA7QE2Uur6OTy3WcSeMHpnIPN5QiNi/tzduGOiO1kRLe+q1AAAAcLEScAcAAAAAgJzYzgb3VIi+WgH3E5PpIGV/omEYgK0pdX0dL3HjEdU3dmQy8/h1/V3R2doUzY0NceuensRrBdwBAAC4tAi4AwAAAABATqQb3OsRcM9eIxW6r1QqSHlZR3O0NtW+oR7gUtTa1Bg7OlsyxwTc6ysVUh8e6sv872e+NjscDwAAABcrAXcAAAAAAMiJ7Qy4p1riq9XgPj6dHaQc6GmryvwAZOvvzm5xPyHgXjcrq2tx8OhU5tjIUO9T/72vN/OcB8enY26pOp/HAAAAcCEQcAcAAAAAgJxItaWnwufVlArRzyxUKeA+KeAOsB0Ge7OvsyenFuu8k0vXw6dmYn55NXOsnAb3tWLEPceyA/IAAABwMRJwBwAAAACAnJhdzA6/1SPgnlpjtkqNseOJIOWggDtATQ10Z19nTyRuPKL6xg5PZh5vbizETbu7n/zz1Ts7ozvxeTx6eKImewMAAIA8qv1PxAEAAAAAgLJMJxrcu9u2scE9Ebqv1ImpVIN7a1XmByDbQKLB/WP3nIi3/X9fjrc8byhed2D3ltYoFovxt2PH44NfOxKNhUL84IuvjG+7sT+KxWL8+ZcPx0fvPh7jic+BlL197fFdt+2N73zO3i3trVqKxWJ84t7xeP+XD0exWIzvfcG+eM2tg1EoFJ5x3l9//Wj89TeOxrGJ+SePnZ5ZypzzpsGeaG1qfPLPDQ2FODDUG59/5My6c8eOZIfkAQAA4GIk4A4AAAAAADkxmwi4d7ZsX8A9tadKnUwF3BPBSwCqo9SNRHfefzLuvP9k/Mqb9scP3H7lptf4zTsfjv/3kw8+Y95ffdOBOD45H7/1qYc3NeeD4zPx6QdOxemZpXjbS6/e9N6q5Y/+8dH4rx++98k/f/qBU/ELr78p/s3Lrn3y2O9/7pH41Y/eX/acw0O9Gcf6EgF3De4AAABcOhq2ewMAAAAAAMB5yYB7a2Pm8WrqrGHAfW2tGCenFzPHBroF3AFqabBn4+vsb975UKyuFTc1/+T8cvz+5x5Zd/yXP3Jv/K/PHtrUnE/3O59+OJZW1rY8z1YsLK/Gb3/qoXXHf+fTj8Tc0sqT57znM+vfh1JGhvoyjq0PvUdEPHpmLibnliuaHwAAAC5UAu4AAAAAAJATM4kweapdvZq6EiH6mYWtB9zPzC7FSiI4OajBHaCm9l7WvuE541OLcejUzKbm/+pjZ2N2aXXd8bml1Vha3Xow/ezsUtx/YmrL82zFwaOTcS4jXD45vxxjRyYjIuLe41MxUWEAfXhfRoP7vvWh9yeMHdXiDgAAwKVBwB0AAAAAAHIiGXBvq0fAvTnz+OzSShSLm2v1fcL41EJyrL+ndUtzA1DajQPdceXOjg3PG/3noHalvvZY7UPXm91bPdYfPXz+6x87XNn7cNNgd9w40L3u+J7ettjV1ZL5mrFtfh8AAACgXgTcAQAAAAAgJ2YTAffOOjS4dyYa3NeKEfPL65t5K5EKuDc2FGJXp4A7QC0VCoX47989Er3t2TcyPWHsyOaC6vcdr327eqXh8Wq7u8R7c/fR86HzSsLnu7pa4l1vPhCFQmHdWKFQiOGh7Bb30W1+HwAAAKBeav8TcQAAAAAAYEOLK6uxvJrdlN5Vh4B7qTVmFleio2XzeziRCLj3d7dGQ8P6cB8A1fX8q3bEZ3/mFfFPh87G2//sq5nnbKYlvVgsVvy619w6EN9y7a7MsU/eNx7/8NDpdce3u7m81PpPjI0mQvAvv+HyeOVN/U/+ebC3LW6/ekf0dWS3tEdEDA/1xqfuP1nRPgAAAOBiIuAOAAAAAAA5MLuYbknv3EK4vFylWuJnFlaiv3vzc49PLWYeH+hp2/ykAFSkr6MlXrt/MN715gPx8x+8e934fcemYmllLVqayn8I+PHJhTg9k32NT/m+F14Rr7ixP3Ost705M+D+0MnpmFva2s1WmzU5vxyHTs8mxx8/OxeHz84lz3nL84bijSN7KlpzJNHgfmJqIU5OLUS/z08AAAAucuX/dAIAAAAAAKiZmYWV5Fh3Wx0a3EusUSp8X47xyewG94Ge1i3NC0Dlhod6M48vra7FAyemK5prLNFaXnr97PD2+bHsva0VIw4enap4rWo4eHTj1vT3fenxKGY/hCUZVi8l9T5EbK5pHwAAAC40Au4AAAAAAJADM4vpgHupdvVqKdUSX2pv5Rifzg64D2qgBai7Gwa6ozXR0j5aYWC90rD1vh3tsaOzJTl+1c7O5E1dmwnTV0M578mffeGxzOOXdTTHvh3tFa+5s6s19vZlv2673gcAAACoJwF3AAAAAADIgdmlUgH3xpqv39hQiPbm7HVmtxhwP5FocO8XcAeou+bGhrh1T0/mWKXh6UrPL9XeHhHR0FBItpdvV3P52OGN151OfE4eGOqLQqGwqXVH9uXrfQAAAIB6EnAHAAAAAIAcSLWkNzcWorWp9gH3iHRT/FYb3E9OL2Ye1+AOsD1SQfOxCsLTa2vFis6PiBhJhNefLr237Wku38q65Xy9KaXeh2KxuOl5AQAA4EIg4A4AAAAAADkws5AdIu9KhM5robut+gH3xZXVODu7lDk2IOAOsC1S7eAPjk/HXIknijzdo2dmYzrx2ZWyUYN7RDoU/tiZuZiYy/48qZVT04txLPEUknKU8/WmX5v9PkzMLcfhs/ObnhcAAAAuBALuAAAAAACQA7OJEHmqVb0WOluzm+JTeyvHyans9vaIiMHe1k3PC8DmpYLXa8WIe45NlTVHpe3thULE/r2bb3DfzJpbtdXW+K00uB/Y2xuFQvbY2NHtabMHAACAeqnfT8UBAAAAAIBM52aX4iN3H88cq2eDe2dL9lofGj0W3/mcvTHYW1nj+tnZpfjfXzmcHO/X4A6wLa7e2RndrU0xnXED07s/dn/8lzfeGjfv7onGhvMJ66WVtTh4bDJOTj3VZv53B7M/t1Kuu7yrrM+03b1tsaurNU7PrL9B6m++cayshvk9fe1xy+6eaGrcWt/b6BYC9YM9bVv6nOtua45rdnXGI6dm14199O7j0dTwVPq9v6ct9u/pjZYm/XYAAABcHATcAQAAAABgmxSLxfi9zx6KX/vY/clz6tngngoe3nNsKl70rjvjx152Tfzsa2+KhoZEpezT/NFd34xf/si9sVbMHu9oaYzuOn5tADyloaEQB4Z64/OPnFk39uVHz8UbfuuuuGV3T/zBW58f0wvL8a/++Ctx5Nz8ltYs1cz+dIVCIUaGeuPO+0+uG/vA147EB752pKx5ruvvij986/Pjyp2dFe3z6bbS4D68hfb2J4wM9SUC7ifio3efeMaxfTva4w/f+oK4YaB7y+sCAADAdnMLNwAAAAAAbJOvPHauZLg9or4N7l1tpdf6X587lBk4fLZ7j03F//PhdLg9ImKgpy0KhY2D8gDUxkaB83uPT8Uvfuie+On3j2453B4RMbKv/MB3uWH4Uh4+ORO/8Fd3b/r1xWIxxrbQ4D6yb+tfQyUh+cNn5+Od/3s0isUSH74AAABwgRBwBwAAAACAbfKRseMbnlPPgHs5bfF/+dXDG55TTrvuQE9rWXsCoDZGyghP//2943Hv8amqrFdJaH24gjB8Kf/48Jk4NrG5cP6Rc/NxdnZp02tXo8F9uMKQ/N1HJ+OhkzNbXhcAAAC2m4A7AAAAAABsk8fPzm14zi17euqwk/NuLWOt0cMbt9mOHp7Y8JwDe6sTXgRgc5531WXR2FD9J2lkPZyjt705bt7dXfYcz913WbQ0VedX2WNHNv5Myn7d5tvbW5saqtLgfsvunuiu8Ea3b5TxGQwAAAB5J+AOAAAAAADbZHxqoeR4X0dzfMfInjrtJuI1tw5Gf3fpZvUTUwtxssS+V1bX4uCx0qHAjpbG+N4X7NvUHgGojv7utnjLc4eqOudPv/qG+NGXXL3u+Ntffm20NjWWPU9vR3N8/wuvqMqeRjcZVE8F46/Z1Rlvf/m1JV/7gy+6Mnramje17tO1NTfGj7x0/ftZymYD/QAAAJAn9XuuKQAAAAAA8AylAu6vvXUwfurVN8S+HR1128+urtb4i7e/ON798Qfi7+8Zj6XVtczzRo9Mxqtvacsce+jkTCwsZ78uIuJVN/fHv//26+O6/vKbfAGojV950/4Y6GmNj91zIh4cnyn7da1NDdHW/FRgfd+O9njTbUPxoy+5KlbXirG7ty0++LWj0dAQ8cMvuire8rzKg/T/6Q23xM7OlvjI3cfj+GTpG8IiIuaXV2NpZf3nz2YD36OJ1w0P9cZ/fM2N0dfRHB/6xrE4OjH/5Nju3rZ448ie+PENAvCV+KlXXR89bU3xV18/GkfOPbXWwvJqLGZ+vZtvngcAAIC8KBSLxeJ2bwIAAAAAAC4kJ0+ejPe85z0lz3nHO94R/f39yfHl1bW4/v/6u8yxP/nRF8bLbrh8S3ushpf8t089I7j3hH/3yuvinXfcmPma93/58fjZD9y97nhLY0Mc/KXXREuTh8sC5NFvfPLB+I1PPlTWub/+3SObCq3X0nv/4VD88kfuW3e8u60pRv/zHdHQUCh7rrW1Ygz/0idiZnFl3dh/fsMt8aMVtqrXQurztrmxEAd/6TUVNeYDAABA3vgpMgAAAAAAbIOT04vJsYGe7Hb0ehvZ15t5fLREO2xq7Obd3cLtADk2MtRXwbnZnw/baTix/+mFlXj0zGxFcx06PZMZbo9IfzbWW+rrXV4txv3Hp+u8GwAAAKguP0kGAAAAAIBtMD61kBwbzEnAPRWeGzsyEakHxI4dmahoLgDyYbjM0HpnS2Ncc3lXjXdTuf17eyJV0j5W4sasLN84nH1+Y0Mhbtmdj4D79f1d0dac/ev+1GcxAAAAXCgE3AEAAAAAYBuMT2YH3FubGqKnvanOu8mWCjtOzC3H4bPz644vLK8mW2PLDU4CsD12drXG3r72Dc/bv7c3GlNJ8m3U0dIU1/d3Z46NVhj4TgXEbxjojvaWxor3VgtNjQ2xf0/lT1oBAACAC4GAOwAAAAAAbINUg/tgb1sUCvkIDh7Y2xuprWSFBe89PhUra9nN7iP7NLgD5N3Ivo1vRsrz9Tx1M1WlDe6pgPhIzm7WSj0dZfSwBncAAAAubALuAAAAAACwDcanFzOPD3S31Xknad1tzXHNrs7Msax227FEoK6jpTGuvbyrqnsDoPpSgelnnpOvkPfTDSfC9/ccm4yV1bWy5lhaWYv7jk1lz1/G+1NPqRsSHj41EzOLK3XeDQAAAFSPgDsAAAAAAGyD8cnsBveB3vwE3CMiRlLtsBnttqmG3P17e6OxIR+t9ACklRNeT30u5EGqYX1heS0eHJ8pa44HTkzHUiIMn7dwfypwXyxGHDxaWWs9AAAA5ImAOwAAAAAAbIPx6UTAvbu1zjspLRXmO3h0MlbXis84NprR6h6RDhwCkC8H9vZGocT9SJd1NMfQZe3121CFbhrsiZbG7F+BZz15JEvqs6y1qSFuHOze9N5q4aqdHdHT1pQ5Vu7XCwAAAHmU/a9dAAAAoKr+6utH4m9Hj8fxRFNrLQz2tMYbhvfEm5+7NwqlEgoAwLY4kfj/gsGcNbgP78tuh51bWo3X/c/PRWPDU0HCR07NZs+R47ZfAJ7S3dYc1+zqLHk9z/O/L1uaGuLm3d2ZTxn59U88EH/8hcc2nOPkVPbn8y17eqI5EZ7fLoVCIYaH+uKuh0+vG/vdzzwSf/X1Y0/+ub+7NV5/YDC+5/n7cv09BAAAgAgBdwAAAKi593zm4Xj3xx6o+7r3HY/49AOn4vjkfPzbV15f9/UBgNJOTi1mHu/vyVfA/ZbdPdHUUIiVZ7W1R0Q8OD5T1hwjAu4AF4yRob5kwP1CeCLH8FBfZsD99MxSnJ5Z2vS8ef0sGx7qzQy4n5tbjnNzy0/++b7jEZ998FQcOTcf77zjxnpuEQAAACqWr1vMAQAA4CIzv7Qav/uZR7Z1D7/32UMxu7iyrXsAAJ5pdnElphOfz4M5C7i3NTfGjYPdm359X0dz7NvRXsUdAVBLN5S45l8IT+QYrlEIv1bzblWl35M/+IdDMTm/vPGJAAAAsI0E3AEAAKCG7j46GdML2xsun1lcibGM9joAYPuMTy0kxwZ6Wuu4k/KM7Nt8oPHA3t4oFApV3A0AtXT71TuSY8P78hnyfrrnbOEzq5S8hvsr/XoXltfi64+fq9FuAAAAoDoE3AEAAKCGRg9PbPcWIiJi9Eg+9gEAnHeiZMA9Xw3uERHfMbJn06/9zufsreJOAKi14aG+uGGga93xV9x4efR35+8z6tmu6++Km7bw5JEst+7piWsv76zqnNUy2NsWL7wqfVNCltHDboIHAAAg3wTcAQAAoIbyEiwfy8k+AIDzTk4tZh7vbW+OtubGOu9mY7dfvSPe9tKrK37d/zG8e0vheADqr7GhEL/8XQfi8u6nnihy1c6O+IXX37yNuypfoVCId735QOzsbKnKfLu6WuNX3nQg108j+cXvuDV295Z/84GfEQAAAJB3Tdu9AQAAALiYjR3JbkV7xY2Xx7def3nV1/vHh0/Hp+4/ue64djYAyJdUg/tgDtvbI86HBf/TG26Jf/Hcofj64XOxsLxW8vzmxkLs39sbt+3ry3UgEIBsL7x6R9z5zpfH5x8+HQ2FQrzshstzeQNWym1XXBaf/OmXxz8dOhPHJtNPTdnInt62ePG1O6Ovozph+Vq5ZU9PfOw/vCy+eOhMHD43/+TxLx46E5+4d3zd+aNHJqNYLPqMBgAAILcE3AEAAKBGzs0uxeNn5zLH/uUL9sVr9++u+pr7LmvPDLgfnZiPMzOLsbOrNeNVAEC9jScC7v09+f6svmVPT9yyp2e7twFAHfS0Ndfk3631cllnS7zuwIW7/0r1tjfHHbcOPuPYdf1dmQH30zOLcXxyIfb0tddrewAAAFCRhu3eAAAAAFysxo6mW9OHh/pqsubIvvS8qTZ5AKD+UgH3vDa4AwAXnuG9vcmxsSMTddwJAAAAVEbAHQAAAGpk7HD2L4t3dbXG7t7ahNcGetpiINH8OuqX1wCQG+NTi5nHBwTcAYAquayzJa7Y0ZE5NuomeAAAAHJMwB0AAABqJPXL4pGh3igUCjVbN9UOr8EdAPLjxGR2g/tAjW6CAwAuTcND2S3uGtwBAADIMwF3AAAAqJHUL4tTAfRqGSnxy+tisVjTtQGAjRWLxTg5nQi4d2c/iQUAYDNGStwEv7bmZwQAAADkk4A7AAAA1MCJyYU4Ob2YOTa8LzuAXi2pAP3pmaU4lmiLBQDq5+zsUiyvZgfKBjW4AwBVlGpwn15YiUfPzNZ5NwAAAFAeAXcAAACogdESj/pOtadVS+qX1xERY4c9ghwAttv4VPZNcBERAz0C7gBA9ezf2xsNheyxsSOT9d0MAAAAlKnpE/ec2O49AAAAwEXno3cfzzw+dFl77OhsqenafR0tceXOjnjszNy6sY/cfTwaU7/ZBgDKNnHmdDxycqbkOZ+5/2T0nVpbd/ze41OZ5zcUInZ1tVZlfwAAERGdrU1xXX9XPDi+/v9bPnbwRHS0NG7DrgAAAKC0pn/zp1/d7j0AAADAJaPW7e1PGB7qywy4f3jseHx4LDt8DwCUb3V2IqbHjpU85zONo9HYWf5n/+XdrW5EAwCqbnioLzvgfs+J+JhCPAAAAHKoYbs3AAAAAJeS4aHeuqwzUqd1AIDqGexp2+4tAAAXIT8jAAAA4EIj4A4AAAB1NFzHBncA4MLSL+AOANSAnxEAAABwoRFwBwAAgDppb26MA3VqTdu/tyc6WhrrshYAUB0H9mpXBQCq76bd3dHd1rTd2wAAAICyCbgDAABAnfzQi6+Mrtb6/EK5o6Up3votV9VlLQBg67rbmuJNt+3d7m0AABeh1qbGeNtLr97ubQAAAEDZmrrr9It1AAAAuFTt6WuP73jOnvjxl19b13V/5o4bo7utKT70jWNx9Nx8XdcGgIvdykpTLDaW7pDpam2Kpg1+Bt/S1BDP2dcXP/PaG2Pfjo5qbhEA4Ek/+e3XR2dLU3zw60fjyNm57d4OAAAAlFQoFovF7d4EAAAAAABcSE6ePBnvec97Sp7zjne8I/r7++u0IwAAAAAAuDiUrpcBAAAAAAAAAAAAAIA6EXAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHLh/wcCPo7RZTv9/AAAAABJRU5ErkJggg==", "x": -1, "xref": "x", "y": 65.73420000000002, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [-3.1302000000000008, 65.73420000000002], "showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}}} \ No newline at end of file +{"data": [{"marker": {"opacity": 0}, "mode": "markers", "x": [-1, 1], "y": [-3.1302000000000008, 65.73420000000002], "type": "scatter", "uid": "88a4697d-d80e-4b18-a6ec-bbb017b33026"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 68.86440000000002, "sizing": "stretch", "source": "data:image/png;base64, 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VFx33XXdfn9HzJ07N/bbb7+YPXt2h8rtEX8rZJ9++ulx5plnxpYtW7r03lmzZsX2228f06ZNi6eeeqrT5faIiObm5pgxY0aMGTMmbrnlli7lyKelpSW+/vWvxz777BPTp0/vdLk9ImLdunVx6623xgEHHNBjuTpixYoVMWHChLzl9hNOOCHmzZvXK+V2AAAAAOhvmgtsX//UgTvGk5ceFT88Z1xUV5RHeVkqylKFzuizvU8AAAAAQBcpuEM/0tzcHGeddVZMnTo1NmzY0K2zHnvssTjkkENytpSXcp5bbrklPvvZz3apAJ7NZuPKK6+Mq666qsvv74i5c+fGxz/+8S7/fc2cOTNOPPHEaGxs7PSz69ati5aWli69970ymUxceuml8dnPfja6+4tC6urqYuLEifGNb3yjS6X7Ynr55Zfj8MMPj4ULF+ZcmzJlSvziF7+I2traIiQDAAAAgNKTbslfcJ+w58jYfdu232erLM//EVihkjwAAAAAkBwVxQ4A9IxMJhOf/vSn4+c//3nBe3bYYYcYP358bL/99jF06NBoaGiIt956K5566qmor6/Puf8vf/lLHH/88bFgwYJOl3CTlmfWrFnxpS99qeD1ESNGxDHHHBM77bRTbLPNNrF8+fJYsGBBvPzyy23uu/baa+PAAw/s1Ls7atmyZXHaaafllMx33HHHOPLII2PHHXeMioqKWL58ebzwwguxdOnSvOc8/fTTcc4558SsWbN6JNc222wT++23X+y1114xdOjQGDp0aGQymWhoaIglS5bEiy++WHC7/owZM2LfffeNSy+9tEvvrquri6OOOirn38M/q66ujvHjx8cuu+wSo0aNioqKiqirq4uVK1fG73//+1ixYkWX3t1dTz31VHzqU5/K+1sLrrrqqvjP//zPIqQCAAAAgNJVqOBeVV6eZ1YWTXnuTyu4AwAAAEDiKbhDH7jrrrvirrvuajObMmVK3H333W1m5557bs59HXXppZfmLZOXlZXF6aefHpdddlnBYnZLS0s8+OCDccUVV8Qbb7zR5tqSJUvioosuijvvvLNk86xZsyYuuOCCvJvEt99++/jud78bkydPjsrKypzrixYtiksvvTSeeOKJf8ymTZvWY5vO/9kXvvCFNpvb99xzz/je974Xxx13XJSV5W4bev755+OLX/xi/O53v8u5Nnv27LjvvvvizDPP7FKWAw88MD71qU/F5MmTY9999837/r/LZrPx+OOPx7e+9a349a9/nXP9iiuuiGOPPTY+9KEPdSpDS0tLnHLKKQXL7XvttVd84xvfiI9//OMxcODAgue8/fbbMXv27Lj//vtj/vz5ncrQVTNnzozzzjsv0ul0m3l5eXncfvvtcf755/dJDgAAAADoT5oz+X9bZGV5KndWURaR5xdCthQ4AwAAAABIjsKNRaBkPPbYY/Hd7343Z77tttvG3LlzY+bMme1uHa+oqIjTTz89Fi5cGMcff3zO9RkzZsQjjzxSsnkuueSSqKury5mPHz8+Xn755fiXf/mXvOX2iIixY8fG448/Hl//+tf/MVu1alXBjeXd8corr/zjv59yyinxxz/+MU444YSC5fLDDz88nnvuuZg6dWre6xdffHHef+5CysvL49RTT4358+fHggUL4qqrror999+/3XJ7REQqlYpJkybFE088EdOnT8+5v7m5Oa6//voO5/i7G264IZ555pm8166++up4+eWX4/TTT2+33B4RsfPOO8fFF18cL7zwQvzmN7+JE044odNZOuPGG2+Ms846K6fcPnDgwHj44YeV2wEAAACgiwpucK/I/R5mvtJ7RESzDe4AAAAAkHglv8G9paWlUwVO+ofhw4dHRUXJ/8+3RzQ3N8e0adNy5kOHDo1nnnkm9tlnnw6fNWjQoJgzZ0585CMfydkKft1118UnPvGJksvzhz/8Ie69996c+d577x2PPPJIDBs2bKtnpFKpuPrqq2PdunXxve99r8P5u2rChAkxc+bMqK6u3uq9FRUVceutt8aaNWti9uzZba6tWbMmbrjhhvjWt77Vofd+7nOf63b5eurUqdHS0hIXXXRRm/lPf/rTWLFiRey4444dOufNN9+M6667Lu+122+/PS644IIu5fvIRz4Sc+fO7dKzW5PJZOKiiy6K6dOn51wbNWpUzJkzJz784Q/3yrsBAAAAoL/LZrORLlBOz19wz7+4o9AZAAAAAEBylHxDuK6uLm+ZkP5t2rRpMWrUqGLHSIS77ror3njjjZz5Pffc06ky+d9VVVXF/fffH/vss0+bDdQvvPBCvPDCC3HooYeWVJ4f/vCHeed33HFHh8rt/+ymm26KRx99NF5//fVOPdcZ1dXVMWPGjA6V2/+urKwsfvCDH8STTz6Z8wM/d911V1x33XVRVVXVoXN6woUXXhj33ntvzJ8//x+zlpaW+MlPfhKXXHJJh864/vrro6kp9/cHn3/++V0ut/emzZs3xxlnnBE///nPc67tscce8dhjj8Xuu+9ehGQAAAAA0D80Z7IFr1XlKbMXKrjb4A4AAAAAydczbUagaPL9gMfxxx/foe3mhey+++5x5pln5szvvPPOksqzefPm+J//+Z+c+SmnnBLjx4/vdI6qqqq48cYbO/1cZ3zhC1/oUhF6+PDhceWVV+bM165dGz/96U97IlqHpVKp+NznPpcz/+1vf9uh599999247777cuY77LBD3Hzzzd3O19PWrFkTEydOzFtuP+yww+K5555TbgcAAACAbmpv83r+De6pvPc2tyi4AwAAAEDSKbhDCVu8eHH88Y9/zJn/x3/8R7fPPvfcc3Nmv/nNb0oqz5NPPhkNDQ058/PPP7/LOU4++eRe/e0B3cl27rnnRmVlZc78wQcf7E6kLjnmmGNyZi+88EKHnp0zZ05s2rQpZz516tQYNGhQt7P1pKVLl8YRRxyR95/t5JNPjieffDJGjhxZhGQAAAAA0L+0V0zPX3AvtMG98CZ4AAAAACAZFNyhhD322GM5syFDhsRxxx3X7bMPPfTQqKqqajN79dVXY/369SWTZ/78+TmzESNGdCtPRUVFnHbaaV1+vj1jx46Nvffeu8vPDx8+PD760Y/mzH/3u991J1aXbL/99jmzt956KzZu3LjVZ/P976i8vDzvVvhieuGFF+KII46IpUuX5lybNm1aPPTQQ1FTU1OEZAAAAADQ/7S3wT1fmb1Qwb29cwAAAACAZKgodgCg65577rmc2bhx43KK4F0xYMCA2HnnneP111//xyybzcYf/vCHmDhxYknkyVfsPuSQQ6Kionv/r2/8+PFx6623duuMQud21xFHHBGPPPJIm9myZctizZo1se2223b53JaWlnjttddiyZIl0dDQEO+++268++67kclkOnXO+vXro7a2tt178v1gwr777pu3NF8sDz/8cJxxxhnR2NjYZp5KpeK6666LK664okjJAAAAAKB/Sre3wT1PmT3fLCKiWcEdAAAAABJPwR1K2KJFi3Jm3dkA/l4jRoxoUyiPiFizZk1J5znggAO6naMnzuitcwudsXDhwk5vrn/zzTdj5syZ8dBDD8VLL70UTU1N3c5XX18fO++8c8Hrzc3N8ec//zlnfsghh3T73T1l+vTp8e///u/R2tr2g7DKysq4884746yzzipSMgAAAADov9rbvF5VkWeDe0Uq770tmWyPZQIAAAAAeoeCO5Swt956K2d22223xW233dZr71y/fn3J5Fm3bl3ObI899uj2O3vijN46t9AZ+f4uClmxYkVcfPHFMXv27Mhme/bDnoaGhnavr1y5Mqc4HvG3De5JcNVVV8W9996bMx88eHA89NBDceyxxxYhFQAAAAD0f53d4F5pgzsAAAAAlCwFdyhR9fX1sWXLlj5/b6FCedLybNmyJe/G8cGDB3f7nRUVFVFTUxONjY3dPuuf9US2QmfU19d36PnZs2fHeeedFxs3bux2lnxaWlravb527dq886FDh/ZGnE7LV27fYYcd4pe//GWMHTu2CIkAAAAA4P2hvWJ63g3uBQru7W2CBwAAAACSoeQL7sOHD49p06YVOwZ9bPjw4cWOUHSbN28uynvzlcYjkpenUKG7J0rkERFDhgxJZMF9yJAheecdKbg/8MADceaZZ261hN6bCv2dJqXgnk8x/74AAAAA4P2ivQ3u+crs+ba6R9jgDgAAAACloOQL7hUVFTFq1Khix4A+l8lkih2hjaTloXPeeuutOO+88wqWtffdd984+uij49BDD41ddtkldt555xg8eHAMGDAgampqoqws98OiVCrVY/l68qzuOPjgg+PFF19sM1u9enUcc8wx8fjjj8fBBx9cpGQAAAAA0L+1X3DP/f5hRZ5ZRERzS7bHMgEAAAAAvaPkC+7wfjVgwIC886OOOiqOO+64XnvvhAkTSiJPoU3mGzZs6JH3NjQ09Mg5/6wnshXKtbUN6JdddlneLfwHH3xwfPe7343x48d3Kkc6ne7U/X9XU1OTd96RDfR9YebMmXH55ZfHz372szbzurq6OPbYY+OXv/xlHH744UVKBwAAAAD9V7rA5vWqirK8CzLybXWPsMEdAAAAAEqBgjuUqCFDhkQqlYpstu22mbFjx8aVV175vs9TU1MT1dXV0dTU1GbeEyXylpaWaGxs7PY579UT2Qqd0V7Bva6uLh588MGc+YQJE2Lu3LkFf3ihPXV1dZ1+JiJi5MiReefr16/v0nk9raqqKmbNmhVnn3123H///W2uNTQ0xAknnBBz5syJo446qkgJAQAAAKB/KrTBvapAkb1Qwb1QUR4AAAAASI78390DEq+qqiq22267nPm6deuKkCZ5eSIihg8fnjNbsmRJt8/tiTN669xCZ4wYMaLgM48++mhkMpk2s7KyspgxY0aXyu0REWvXru3SczvuuGOUl5fnzF955ZUundcbKioq4r777ospU6bkXNu4cWOceOKJ8fjjj/d9MAAAAADox9rb4J53Xp671T3CBncAAAAAKAUK7lDCxowZkzN79dVXi5Dkb5KWZ//998+ZLVy4sNvn9sQZvXXuokWL8s7Hjh1b8Jnf//73ObPx48fH7rvv3uUcCxYs6NJzFRUVsddee+XM589PnTNMAAAgAElEQVSf3+UsvaGsrCzuvPPOuOCCC3KuNTY2xic/+cl45JFHipAMAAAAAPqnQsX0ygJF9kIb3Jsz2bxzAAAAACA5FNyhhB122GE5sz/+8Y/R0NBQhDTJy3PIIYfkzObPnx8tLS3dOvfZZ5/t1vO9eW6+Mz7wgQ/EqFGjCj6zatWqnNl+++3XrRzPPfdcl5899NBDc2Yvv/xyvPPOO92J1ONSqVTcfvvtcfHFF+dca2pqilNPPTVmz55dhGQAAAAA0P+kWzq3wb2ywNwGdwAAAABIPgV3KGEf+9jHcmatra3xs5/9rAhpkpcnX8F93bp18cQTT3T5zEwmEw888EB3YhW0aNGibm28r6uri7lz5+bM8/09/LN169blzIYNG9blHFu2bOlWsfujH/1oziyTycSPf/zjLp/Zm2655Zb4yle+kjNvbm6Oz3zmM3HfffcVIRUAAAAA9C/pApvXqwpsai+8wV3BHQAAAACSTsEdStjhhx8eu+22W878m9/8ZrS29v036ZOWZ+LEiTFo0KCc+Y9+9KMun/nwww/H6tWruxOrXd3Jds8990Q6nc6Zn3LKKe0+N3DgwJxZvtJ7R917773dev5jH/tY3n9vt99+e2zcuLHL5/am6667Lq699tqceSaTiXPOOSex5XwAAAAAKBWFNrgXKrJXlafyzpsLFOUBAAAAgORQcIcSlkql4sILL8yZv/rqq/Gtb33rfZ9n4MCBccYZZ+TMH3rooXj22Wc7fV46nY7LL7+8J6IVdNttt8Vf/vKXTj9XV1cX11xzTc58xIgRWy24b7vttjmz//3f/+10hoiIVatWxRVXXNGlZ/+utrY2zj777Jz5ihUr4ktf+lK3zu5NX/3qV+Pmm2/Ombe2tsb5558ft912WxFSAQAAAED/UKjgXl1hgzsAAAAA9DcK7lDipk6dGjvvvHPO/Ctf+Ur89Kc/7bH3rFixIlauXFlyef71X/817/zzn/98rF+/vlPvvOyyy2Lp0qWdeqazmpqa4rzzzoumpqYOP5PNZuOCCy6Iurq6nGvnnHNOVFdXt/v8QQcdlDP705/+FL/+9a87nCHib9nPOeecWLt2baeey+eKK66IAQMG5Mx/8IMfxB133NHt83vLJZdcErfddlukUm23Q2Wz2bjwwgvjpptuKlIyAAAAAChthYrpVQUK7hUFCu6FivIAAAAAQHIouEOJq6mpidtvvz1n3traGp/+9Kfj61//erS2dv0b9gsXLowpU6bEbrvtFosWLSq5PAcffHDeLe6vvvpqfOITn+hQyT2bzcY111wT//Vf/9WlzJ01b968OPPMM6OxsXGr92Yymbjwwgtj1qxZOddGjhwZX/3qV7d6xgknnJB3PmXKlHjrrbe2HjgiGhoa4qSTTorHH3+8Q/dvzU477RRXX3113mvnn39+XHvttZHJZDp97m9+85uYNGlSd+O1a9q0afHjH/84yspyv8RedtlleTftAwAAAADtK1RML7Spvao8lXdugzsAAAAAJJ+CO/QDJ510Ulx22WU589bW1vjGN74Re+21V3z/+9/vUJm7qakp5s+fH1dddVWMGTMmPvShD8Xdd98dzc3NJZvn29/+dgwbNixn/uyzz8Z+++0Xs2bNKnjeokWLYtKkSfG1r33tH7PRo0fHiBEjOvz+jhozZsw//vuDDz4YBx54YDz++OMFfyDgt7/9bRxxxBExffr0vNdvueWWDuXcfffd85a+ly9fHuPGjYv77rsvWlpa8j67adOmuOOOO2LPPfdss/F93LhxW33v1lx22WVx7LHH5r121VVXxf777x+zZs2KzZs3t3vO22+/Hd/5znfikEMOiQkTJvRYCb895513Xtx3331RUVGRc+1rX/tah37wAAAAAAD4/6U7ucG9UPG9OZPtsUwAAAAAQO/Ibd4BJenGG2+M1atXx913351zbenSpTF16tSYNm1a7LfffnHAAQfE8OHDY9iwYbFly5aor6+P9evXx+LFi2Px4sUFy8ylmmf06NExffr0vJvcV65cGaeddlqMHDkyjjnmmNh5551jwIABsXLlynjxxRfjpZde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AAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHJBwB0AAAAAAAAAAAAAgFwQcAcAAAAAAAAAAAAAIBcE3AEAAAAAAAAAAAAAyAUBdwAAAAAAAAAAAAAAckHAHQAAAAAAAAAAAACAXBBwBwAAAAAAAAAAAAAgFwTcAQAAAAAAAAAAAADIBQF3AAAAAAAAAAAAAAByQcAdAAAAAAAAAAAAAIBcEHAHAAAAAAAAAAAAACAXBNwBAAAAAAAAAAAAAMgFAXcAAAAAAAAAAAAAAHLh/wcCPo7RZTv9/AAAAABJRU5ErkJggg==", "x": -1, "xref": "x", "y": 65.73420000000002, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [-3.1302000000000008, 65.73420000000002], "showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}}} diff --git a/notebooks/notebooks_plotting/psth_combined.json b/notebooks/notebooks_plotting/psth_combined.json index 00f5ab5f..58414548 100644 --- a/notebooks/notebooks_plotting/psth_combined.json +++ b/notebooks/notebooks_plotting/psth_combined.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "green", "size": 6}, "mode": "lines", "name": "left trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "type": "scatter"}, {"marker": {"color": "blue", "size": 6}, "mode": "lines", "name": "right trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 4.028225806451613, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 4.028225806451613, 4.833870967741936, 4.028225806451613, 4.028225806451613, 4.028225806451613, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968], "type": "scatter"}, {"marker": {"color": "red", "size": 6}, "mode": "lines", "name": "incorrect trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 3.8423076923076924, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "type": "scatter"}, {"marker": {"color": "black", "size": 6}, "mode": "lines", "name": "all trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 2.356132075471698, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 3.2985849056603773, 2.827358490566038, 2.827358490566038, 2.827358490566038, 2.356132075471698, 2.356132075471698, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.827358490566038, 2.827358490566038, 2.827358490566038, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019], "type": "scatter"}], "layout": {"height": 370, "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "PSTH, aligned to ['stim on'] time", "x": 0.2, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"marker": {"color": "green", "size": 6}, "mode": "lines", "name": "left trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 9.99, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "type": "scatter"}, {"marker": {"color": "blue", "size": 6}, "mode": "lines", "name": "right trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 4.028225806451613, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 4.028225806451613, 4.833870967741936, 4.028225806451613, 4.028225806451613, 4.028225806451613, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 0.8056451612903226, 0.0, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 0.8056451612903226, 0.8056451612903226, 0.8056451612903226, 1.6112903225806452, 1.6112903225806452, 1.6112903225806452, 2.416935483870968, 2.416935483870968, 1.6112903225806452, 2.416935483870968, 3.2225806451612904, 3.2225806451612904, 3.2225806451612904, 2.416935483870968, 2.416935483870968, 2.416935483870968], "type": "scatter"}, {"marker": {"color": "red", "size": 6}, "mode": "lines", "name": "incorrect trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 3.8423076923076924, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 3.8423076923076924, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 2.5615384615384613, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 1.2807692307692307, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "type": "scatter"}, {"marker": {"color": "black", "size": 6}, "mode": "lines", "name": "all trials", "x": [-1.0, -0.997997997997998, -0.995995995995996, -0.993993993993994, -0.991991991991992, -0.98998998998999, -0.987987987987988, -0.985985985985986, -0.983983983983984, -0.9819819819819819, -0.97997997997998, -0.977977977977978, -0.975975975975976, -0.973973973973974, -0.9719719719719719, -0.96996996996997, -0.967967967967968, -0.965965965965966, -0.963963963963964, -0.9619619619619619, -0.95995995995996, -0.957957957957958, -0.955955955955956, -0.953953953953954, -0.9519519519519519, -0.94994994994995, -0.9479479479479479, -0.9459459459459459, -0.943943943943944, -0.9419419419419419, -0.93993993993994, -0.9379379379379379, -0.9359359359359359, -0.933933933933934, -0.9319319319319319, -0.92992992992993, -0.9279279279279279, -0.9259259259259259, -0.9239239239239239, -0.9219219219219219, -0.91991991991992, -0.9179179179179179, -0.9159159159159159, -0.9139139139139139, -0.9119119119119119, -0.9099099099099099, -0.9079079079079079, -0.9059059059059059, -0.9039039039039038, -0.9019019019019019, -0.8998998998998999, -0.8978978978978979, -0.8958958958958959, -0.8938938938938938, -0.8918918918918919, -0.8898898898898899, -0.8878878878878879, -0.8858858858858859, -0.8838838838838838, -0.8818818818818819, -0.8798798798798799, -0.8778778778778779, -0.8758758758758759, -0.8738738738738738, -0.8718718718718719, -0.8698698698698699, -0.8678678678678678, -0.8658658658658659, -0.8638638638638638, -0.8618618618618619, -0.8598598598598599, -0.8578578578578578, -0.8558558558558559, -0.8538538538538538, -0.8518518518518519, -0.8498498498498499, -0.8478478478478478, -0.8458458458458459, -0.8438438438438438, -0.8418418418418419, -0.8398398398398399, -0.8378378378378378, -0.8358358358358359, -0.8338338338338338, -0.8318318318318318, -0.8298298298298299, -0.8278278278278278, -0.8258258258258259, -0.8238238238238238, -0.8218218218218218, -0.8198198198198199, -0.8178178178178178, -0.8158158158158157, -0.8138138138138138, -0.8118118118118118, -0.8098098098098099, -0.8078078078078078, -0.8058058058058057, -0.8038038038038038, -0.8018018018018018, -0.7997997997997999, -0.7977977977977978, -0.7957957957957957, -0.7937937937937938, -0.7917917917917918, -0.7897897897897898, -0.7877877877877878, -0.7857857857857857, -0.7837837837837838, -0.7817817817817818, -0.7797797797797797, -0.7777777777777778, -0.7757757757757757, -0.7737737737737738, -0.7717717717717718, -0.7697697697697697, -0.7677677677677678, -0.7657657657657657, -0.7637637637637638, -0.7617617617617618, -0.7597597597597597, -0.7577577577577578, -0.7557557557557557, -0.7537537537537538, -0.7517517517517518, -0.7497497497497497, -0.7477477477477478, -0.7457457457457457, -0.7437437437437437, -0.7417417417417418, -0.7397397397397397, -0.7377377377377378, -0.7357357357357357, -0.7337337337337337, -0.7317317317317318, -0.7297297297297297, -0.7277277277277278, -0.7257257257257257, -0.7237237237237237, -0.7217217217217218, -0.7197197197197197, -0.7177177177177176, -0.7157157157157157, -0.7137137137137137, -0.7117117117117118, -0.7097097097097097, -0.7077077077077076, -0.7057057057057057, -0.7037037037037037, -0.7017017017017018, -0.6996996996996997, -0.6976976976976976, -0.6956956956956957, -0.6936936936936937, -0.6916916916916918, -0.6896896896896897, -0.6876876876876876, -0.6856856856856857, -0.6836836836836837, -0.6816816816816818, -0.6796796796796797, -0.6776776776776776, -0.6756756756756757, -0.6736736736736737, -0.6716716716716717, -0.6696696696696697, -0.6676676676676676, -0.6656656656656657, -0.6636636636636637, -0.6616616616616617, -0.6596596596596597, -0.6576576576576576, -0.6556556556556556, -0.6536536536536537, -0.6516516516516517, -0.6496496496496497, -0.6476476476476476, -0.6456456456456456, -0.6436436436436437, -0.6416416416416417, -0.6396396396396397, -0.6376376376376376, -0.6356356356356356, -0.6336336336336337, -0.6316316316316316, -0.6296296296296297, -0.6276276276276276, -0.6256256256256256, -0.6236236236236237, -0.6216216216216216, -0.6196196196196196, -0.6176176176176176, -0.6156156156156156, -0.6136136136136137, -0.6116116116116116, -0.6096096096096096, -0.6076076076076076, -0.6056056056056056, -0.6036036036036037, -0.6016016016016016, -0.5995995995995996, -0.5975975975975976, -0.5955955955955956, -0.5935935935935936, -0.5915915915915916, -0.5895895895895895, -0.5875875875875876, -0.5855855855855856, -0.5835835835835836, -0.5815815815815816, -0.5795795795795795, -0.5775775775775776, -0.5755755755755756, -0.5735735735735736, -0.5715715715715716, -0.5695695695695695, -0.5675675675675675, -0.5655655655655656, -0.5635635635635636, -0.5615615615615616, -0.5595595595595595, -0.5575575575575575, -0.5555555555555556, -0.5535535535535536, -0.5515515515515516, -0.5495495495495495, -0.5475475475475475, -0.5455455455455456, -0.5435435435435436, -0.5415415415415415, -0.5395395395395395, -0.5375375375375375, -0.5355355355355356, -0.5335335335335336, -0.5315315315315315, -0.5295295295295295, -0.5275275275275275, -0.5255255255255256, -0.5235235235235236, -0.5215215215215215, -0.5195195195195195, -0.5175175175175175, -0.5155155155155156, -0.5135135135135136, -0.5115115115115115, -0.5095095095095095, -0.5075075075075075, -0.5055055055055055, -0.5035035035035035, -0.5015015015015015, -0.49949949949949946, -0.4974974974974975, -0.49549549549549554, -0.4934934934934935, -0.4914914914914915, -0.48948948948948945, -0.4874874874874875, -0.48548548548548554, -0.48348348348348347, -0.4814814814814815, -0.47947947947947944, -0.4774774774774775, -0.47547547547547553, -0.47347347347347346, -0.4714714714714715, -0.46946946946946944, -0.4674674674674675, -0.4654654654654655, -0.46346346346346345, -0.4614614614614615, -0.45945945945945943, -0.4574574574574575, -0.4554554554554555, -0.45345345345345345, -0.4514514514514515, -0.4494494494494494, -0.44744744744744747, -0.4454454454454454, -0.44344344344344344, -0.4414414414414415, -0.4394394394394394, -0.43743743743743746, -0.4354354354354354, -0.43343343343343343, -0.4314314314314315, -0.4294294294294294, -0.42742742742742745, -0.4254254254254254, -0.42342342342342343, -0.42142142142142147, -0.4194194194194194, -0.41741741741741745, -0.4154154154154154, -0.4134134134134134, -0.41141141141141147, -0.4094094094094094, -0.40740740740740744, -0.4054054054054054, -0.4034034034034034, -0.40140140140140146, -0.3993993993993994, -0.39739739739739743, -0.39539539539539537, -0.3933933933933934, -0.39139139139139134, -0.3893893893893894, -0.3873873873873874, -0.38538538538538536, -0.3833833833833834, -0.38138138138138133, -0.3793793793793794, -0.3773773773773774, -0.37537537537537535, -0.3733733733733734, -0.37137137137137133, -0.36936936936936937, -0.3673673673673674, -0.36536536536536535, -0.3633633633633634, -0.3613613613613613, -0.35935935935935936, -0.3573573573573574, -0.35535535535535534, -0.3533533533533534, -0.3513513513513513, -0.34934934934934936, -0.3473473473473474, -0.34534534534534533, -0.3433433433433434, -0.3413413413413413, -0.33933933933933935, -0.3373373373373374, -0.3353353353353353, -0.33333333333333337, -0.3313313313313313, -0.32932932932932935, -0.3273273273273274, -0.3253253253253253, -0.32332332332332336, -0.3213213213213213, -0.31931931931931934, -0.31731731731731727, -0.3153153153153153, -0.31331331331331336, -0.3113113113113113, -0.30930930930930933, -0.30730730730730726, -0.3053053053053053, -0.30330330330330335, -0.3013013013013013, -0.2992992992992993, -0.29729729729729726, -0.2952952952952953, -0.29329329329329334, -0.2912912912912913, -0.2892892892892893, -0.28728728728728725, -0.2852852852852853, -0.28328328328328334, -0.28128128128128127, -0.2792792792792793, -0.27727727727727725, -0.2752752752752753, -0.27327327327327333, -0.27127127127127126, -0.2692692692692693, -0.26726726726726724, -0.2652652652652653, -0.2632632632632632, -0.26126126126126126, -0.2592592592592593, -0.25725725725725723, -0.2552552552552553, -0.2532532532532532, -0.25125125125125125, -0.2492492492492493, -0.24724724724724723, -0.24524524524524527, -0.2432432432432432, -0.24124124124124124, -0.2392392392392393, -0.23723723723723722, -0.23523523523523526, -0.2332332332332332, -0.23123123123123124, -0.22922922922922928, -0.2272272272272272, -0.22522522522522526, -0.2232232232232232, -0.22122122122122123, -0.21921921921921927, -0.2172172172172172, -0.21521521521521525, -0.21321321321321318, -0.21121121121121122, -0.20920920920920927, -0.2072072072072072, -0.20520520520520524, -0.20320320320320318, -0.20120120120120122, -0.19919919919919926, -0.1971971971971972, -0.19519519519519524, -0.19319319319319317, -0.1911911911911912, -0.18918918918918914, -0.1871871871871872, -0.18518518518518523, -0.18318318318318316, -0.1811811811811812, -0.17917917917917914, -0.17717717717717718, -0.17517517517517522, -0.17317317317317316, -0.1711711711711712, -0.16916916916916913, -0.16716716716716717, -0.16516516516516522, -0.16316316316316315, -0.1611611611611612, -0.15915915915915912, -0.15715715715715717, -0.1551551551551552, -0.15315315315315314, -0.1511511511511512, -0.14914914914914912, -0.14714714714714716, -0.1451451451451452, -0.14314314314314314, -0.14114114114114118, -0.1391391391391391, -0.13713713713713716, -0.1351351351351351, -0.13313313313313313, -0.13113113113113117, -0.1291291291291291, -0.12712712712712715, -0.12512512512512508, -0.12312312312312312, -0.12112112112112117, -0.1191191191191191, -0.11711711711711714, -0.11511511511511507, -0.11311311311311312, -0.11111111111111116, -0.10910910910910909, -0.10710710710710714, -0.10510510510510507, -0.10310310310310311, -0.10110110110110115, -0.09909909909909909, -0.09709709709709713, -0.09509509509509506, -0.0930930930930931, -0.09109109109109115, -0.08908908908908908, -0.08708708708708712, -0.08508508508508505, -0.0830830830830831, -0.08108108108108114, -0.07907907907907907, -0.07707707707707712, -0.07507507507507505, -0.07307307307307309, -0.07107107107107113, -0.06906906906906907, -0.06706706706706711, -0.06506506506506504, -0.06306306306306309, -0.06106106106106102, -0.05905905905905906, -0.0570570570570571, -0.055055055055055035, -0.05305305305305308, -0.05105105105105101, -0.049049049049049054, -0.0470470470470471, -0.04504504504504503, -0.04304304304304307, -0.041041041041041004, -0.03903903903903905, -0.03703703703703709, -0.03503503503503502, -0.033033033033033066, -0.031031031031030998, -0.02902902902902904, -0.027027027027027084, -0.025025025025025016, -0.02302302302302306, -0.02102102102102099, -0.019019019019019034, -0.017017017017017078, -0.01501501501501501, -0.013013013013013053, -0.011011011011010985, -0.009009009009009028, -0.00700700700700696, -0.005005005005005003, -0.0030030030030030463, -0.0010010010010009784, 0.0010010010010010895, 0.0030030030030030463, 0.005005005005005003, 0.00700700700700696, 0.009009009009008917, 0.011011011011011096, 0.013013013013013053, 0.01501501501501501, 0.017017017017016967, 0.019019019019018923, 0.021021021021021102, 0.02302302302302306, 0.025025025025025016, 0.027027027027026973, 0.02902902902902893, 0.03103103103103111, 0.033033033033033066, 0.03503503503503502, 0.03703703703703698, 0.039039039039038936, 0.041041041041041115, 0.04304304304304307, 0.04504504504504503, 0.047047047047046986, 0.04904904904904894, 0.05105105105105112, 0.05305305305305308, 0.055055055055055035, 0.05705705705705699, 0.05905905905905895, 0.06106106106106113, 0.06306306306306309, 0.06506506506506504, 0.067067067067067, 0.06906906906906896, 0.07107107107107113, 0.07307307307307309, 0.07507507507507505, 0.077077077077077, 0.07907907907907896, 0.08108108108108114, 0.0830830830830831, 0.08508508508508505, 0.08708708708708701, 0.08908908908908897, 0.09109109109109115, 0.0930930930930931, 0.09509509509509506, 0.09709709709709702, 0.0990990990990992, 0.10110110110110115, 0.10310310310310311, 0.10510510510510507, 0.10710710710710702, 0.1091091091091092, 0.11111111111111116, 0.11311311311311312, 0.11511511511511507, 0.11711711711711703, 0.11911911911911921, 0.12112112112112117, 0.12312312312312312, 0.12512512512512508, 0.12712712712712704, 0.12912912912912922, 0.13113113113113117, 0.13313313313313313, 0.1351351351351351, 0.13713713713713704, 0.13913913913913922, 0.14114114114114118, 0.14314314314314314, 0.1451451451451451, 0.14714714714714705, 0.14914914914914923, 0.1511511511511512, 0.15315315315315314, 0.1551551551551551, 0.15715715715715706, 0.15915915915915924, 0.1611611611611612, 0.16316316316316315, 0.1651651651651651, 0.16716716716716706, 0.16916916916916924, 0.1711711711711712, 0.17317317317317316, 0.1751751751751751, 0.17717717717717707, 0.17917917917917925, 0.1811811811811812, 0.18318318318318316, 0.18518518518518512, 0.18718718718718708, 0.18918918918918926, 0.1911911911911912, 0.19319319319319317, 0.19519519519519513, 0.19719719719719708, 0.19919919919919926, 0.20120120120120122, 0.20320320320320318, 0.20520520520520513, 0.2072072072072071, 0.20920920920920927, 0.21121121121121122, 0.21321321321321318, 0.21521521521521514, 0.21721721721721732, 0.21921921921921927, 0.22122122122122123, 0.2232232232232232, 0.22522522522522515, 0.22722722722722732, 0.22922922922922928, 0.23123123123123124, 0.2332332332332332, 0.23523523523523515, 0.23723723723723733, 0.2392392392392393, 0.24124124124124124, 0.2432432432432432, 0.24524524524524516, 0.24724724724724734, 0.2492492492492493, 0.25125125125125125, 0.2532532532532532, 0.25525525525525516, 0.25725725725725734, 0.2592592592592593, 0.26126126126126126, 0.2632632632632632, 0.26526526526526517, 0.26726726726726735, 0.2692692692692693, 0.27127127127127126, 0.2732732732732732, 0.2752752752752752, 0.27727727727727736, 0.2792792792792793, 0.28128128128128127, 0.2832832832832832, 0.2852852852852852, 0.28728728728728736, 0.2892892892892893, 0.2912912912912913, 0.29329329329329323, 0.2952952952952952, 0.29729729729729737, 0.2992992992992993, 0.3013013013013013, 0.30330330330330324, 0.3053053053053052, 0.3073073073073074, 0.30930930930930933, 0.3113113113113113, 0.31331331331331325, 0.3153153153153152, 0.3173173173173174, 0.31931931931931934, 0.3213213213213213, 0.32332332332332325, 0.3253253253253252, 0.3273273273273274, 0.32932932932932935, 0.3313313313313313, 0.33333333333333326, 0.3353353353353352, 0.3373373373373374, 0.33933933933933935, 0.3413413413413413, 0.34334334334334327, 0.3453453453453452, 0.3473473473473474, 0.34934934934934936, 0.3513513513513513, 0.35335335335335327, 0.35535535535535545, 0.3573573573573574, 0.35935935935935936, 0.3613613613613613, 0.3633633633633633, 0.36536536536536546, 0.3673673673673674, 0.36936936936936937, 0.37137137137137133, 0.3733733733733733, 0.37537537537537546, 0.3773773773773774, 0.3793793793793794, 0.38138138138138133, 0.3833833833833833, 0.38538538538538547, 0.3873873873873874, 0.3893893893893894, 0.39139139139139134, 0.3933933933933933, 0.3953953953953955, 0.39739739739739743, 0.3993993993993994, 0.40140140140140135, 0.4034034034034033, 0.4054054054054055, 0.40740740740740744, 0.4094094094094094, 0.41141141141141135, 0.4134134134134133, 0.4154154154154155, 0.41741741741741745, 0.4194194194194194, 0.42142142142142136, 0.4234234234234233, 0.4254254254254255, 0.42742742742742745, 0.4294294294294294, 0.43143143143143137, 0.4334334334334333, 0.4354354354354355, 0.43743743743743746, 0.4394394394394394, 0.4414414414414414, 0.44344344344344333, 0.4454454454454455, 0.44744744744744747, 0.4494494494494494, 0.4514514514514514, 0.45345345345345334, 0.4554554554554555, 0.4574574574574575, 0.45945945945945943, 0.4614614614614614, 0.46346346346346334, 0.4654654654654655, 0.4674674674674675, 0.46946946946946944, 0.4714714714714714, 0.47347347347347357, 0.47547547547547553, 0.4774774774774775, 0.47947947947947944, 0.4814814814814814, 0.4834834834834836, 0.48548548548548554, 0.4874874874874875, 0.48948948948948945, 0.4914914914914914, 0.4934934934934936, 0.49549549549549554, 0.4974974974974975, 0.49949949949949946, 0.5015015015015014, 0.5035035035035036, 0.5055055055055055, 0.5075075075075075, 0.5095095095095095, 0.5115115115115114, 0.5135135135135136, 0.5155155155155156, 0.5175175175175175, 0.5195195195195195, 0.5215215215215214, 0.5235235235235236, 0.5255255255255256, 0.5275275275275275, 0.5295295295295295, 0.5315315315315314, 0.5335335335335336, 0.5355355355355356, 0.5375375375375375, 0.5395395395395395, 0.5415415415415414, 0.5435435435435436, 0.5455455455455456, 0.5475475475475475, 0.5495495495495495, 0.5515515515515514, 0.5535535535535536, 0.5555555555555556, 0.5575575575575575, 0.5595595595595595, 0.5615615615615615, 0.5635635635635636, 0.5655655655655656, 0.5675675675675675, 0.5695695695695695, 0.5715715715715715, 0.5735735735735736, 0.5755755755755756, 0.5775775775775776, 0.5795795795795795, 0.5815815815815815, 0.5835835835835836, 0.5855855855855856, 0.5875875875875876, 0.5895895895895895, 0.5915915915915915, 0.5935935935935936, 0.5955955955955956, 0.5975975975975976, 0.5995995995995995, 0.6016016016016015, 0.6036036036036037, 0.6056056056056056, 0.6076076076076076, 0.6096096096096095, 0.6116116116116117, 0.6136136136136137, 0.6156156156156156, 0.6176176176176176, 0.6196196196196195, 0.6216216216216217, 0.6236236236236237, 0.6256256256256256, 0.6276276276276276, 0.6296296296296295, 0.6316316316316317, 0.6336336336336337, 0.6356356356356356, 0.6376376376376376, 0.6396396396396395, 0.6416416416416417, 0.6436436436436437, 0.6456456456456456, 0.6476476476476476, 0.6496496496496496, 0.6516516516516517, 0.6536536536536537, 0.6556556556556556, 0.6576576576576576, 0.6596596596596596, 0.6616616616616617, 0.6636636636636637, 0.6656656656656657, 0.6676676676676676, 0.6696696696696696, 0.6716716716716717, 0.6736736736736737, 0.6756756756756757, 0.6776776776776776, 0.6796796796796796, 0.6816816816816818, 0.6836836836836837, 0.6856856856856857, 0.6876876876876876, 0.6896896896896896, 0.6916916916916918, 0.6936936936936937, 0.6956956956956957, 0.6976976976976976, 0.6996996996996996, 0.7017017017017018, 0.7037037037037037, 0.7057057057057057, 0.7077077077077076, 0.7097097097097096, 0.7117117117117118, 0.7137137137137137, 0.7157157157157157, 0.7177177177177176, 0.7197197197197196, 0.7217217217217218, 0.7237237237237237, 0.7257257257257257, 0.7277277277277276, 0.7297297297297298, 0.7317317317317318, 0.7337337337337337, 0.7357357357357357, 0.7377377377377377, 0.7397397397397398, 0.7417417417417418, 0.7437437437437437, 0.7457457457457457, 0.7477477477477477, 0.7497497497497498, 0.7517517517517518, 0.7537537537537538, 0.7557557557557557, 0.7577577577577577, 0.7597597597597598, 0.7617617617617618, 0.7637637637637638, 0.7657657657657657, 0.7677677677677677, 0.7697697697697699, 0.7717717717717718, 0.7737737737737738, 0.7757757757757757, 0.7777777777777777, 0.7797797797797799, 0.7817817817817818, 0.7837837837837838, 0.7857857857857857, 0.7877877877877877, 0.7897897897897899, 0.7917917917917918, 0.7937937937937938, 0.7957957957957957, 0.7977977977977977, 0.7997997997997999, 0.8018018018018018, 0.8038038038038038, 0.8058058058058057, 0.8078078078078077, 0.8098098098098099, 0.8118118118118118, 0.8138138138138138, 0.8158158158158157, 0.8178178178178177, 0.8198198198198199, 0.8218218218218218, 0.8238238238238238, 0.8258258258258258, 0.8278278278278277, 0.8298298298298299, 0.8318318318318318, 0.8338338338338338, 0.8358358358358358, 0.8378378378378377, 0.8398398398398399, 0.8418418418418419, 0.8438438438438438, 0.8458458458458458, 0.8478478478478477, 0.8498498498498499, 0.8518518518518519, 0.8538538538538538, 0.8558558558558558, 0.8578578578578577, 0.8598598598598599, 0.8618618618618619, 0.8638638638638638, 0.8658658658658658, 0.867867867867868, 0.8698698698698699, 0.8718718718718719, 0.8738738738738738, 0.8758758758758758, 0.877877877877878, 0.8798798798798799, 0.8818818818818819, 0.8838838838838838, 0.8858858858858858, 0.887887887887888, 0.8898898898898899, 0.8918918918918919, 0.8938938938938938, 0.8958958958958958, 0.897897897897898, 0.8998998998998999, 0.9019019019019019, 0.9039039039039038, 0.9059059059059058, 0.907907907907908, 0.9099099099099099, 0.9119119119119119, 0.9139139139139139, 0.9159159159159158, 0.917917917917918, 0.91991991991992, 0.9219219219219219, 0.9239239239239239, 0.9259259259259258, 0.927927927927928, 0.92992992992993, 0.9319319319319319, 0.9339339339339339, 0.9359359359359358, 0.937937937937938, 0.93993993993994, 0.9419419419419419, 0.9439439439439439, 0.9459459459459458, 0.947947947947948, 0.94994994994995, 0.9519519519519519, 0.9539539539539539, 0.9559559559559558, 0.957957957957958, 0.95995995995996, 0.9619619619619619, 0.9639639639639639, 0.9659659659659658, 0.967967967967968, 0.96996996996997, 0.9719719719719719, 0.9739739739739739, 0.9759759759759759, 0.977977977977978, 0.97997997997998, 0.9819819819819819, 0.9839839839839839, 0.9859859859859861, 0.987987987987988, 0.98998998998999, 0.991991991991992, 0.9939939939939939, 0.9959959959959961, 0.997997997997998, 1.0], "y": [0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 2.356132075471698, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.8273584905660374, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 2.356132075471698, 3.2985849056603773, 2.827358490566038, 2.827358490566038, 2.827358490566038, 2.356132075471698, 2.356132075471698, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 2.827358490566038, 2.827358490566038, 2.827358490566038, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.8849056603773584, 2.356132075471698, 2.356132075471698, 2.356132075471698, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.0, 0.0, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.4712264150943396, 0.4712264150943396, 0.4712264150943396, 0.9424528301886792, 0.9424528301886792, 0.9424528301886792, 1.413679245283019, 1.413679245283019, 0.9424528301886792, 1.413679245283019, 1.8849056603773584, 1.8849056603773584, 1.8849056603773584, 1.413679245283019, 1.413679245283019, 1.413679245283019], "type": "scatter"}], "layout": {"height": 370, "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "PSTH, aligned to ['stim on'] time", "x": 0.2, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/psth_combined_with_errorbars.json b/notebooks/notebooks_plotting/psth_combined_with_errorbars.json index 4cd0f356..dc0f15e0 100644 --- a/notebooks/notebooks_plotting/psth_combined_with_errorbars.json +++ b/notebooks/notebooks_plotting/psth_combined_with_errorbars.json @@ -1 +1 @@ -{"data": [{"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.04884645647905743, 0.04321550744838653, 0.041718177601072874, 0.041033876819902546, 0.039281083540007554, 0.03620933500864907, 0.03210907278471239, 0.029044866775158527, 0.030934599209568175, 0.033951386818554516, 0.032518020352632224, 0.02661994228407876, 0.02010471969880384, 0.014416199066831566, 0.010651481835588825, 0.009603545576269959, 0.010212124595530472, 0.010926200807744722, 0.013109936689162759, 0.01466864811914599, 0.012726276234496132, 0.012065302127821835, 0.015051898259707586, 0.021362112888607187, 0.026853607553675933, 0.026073785726425696, 0.022694238375717744, 0.020828156404063936, 0.022280369177245324, 0.025200566711621797, 0.025413730292226974, 0.024130513712472386, 0.023974938224613628, 0.02373396590280963, 0.02141031378086712, 0.019599263687172807, 0.022863846103439122, 0.03167221268844345, 0.04367650821190515, 0.05769771750697004, 0.07001018813351265, 0.07632009640083437, 0.08419660244303433, 0.11477604646276592, 0.19006333542678738, 0.3157184724887997, 0.4674341477111997, 0.5824352633703361, 0.6100525101167633, 0.5622428623503862, 0.5046158112843904, 0.45978329146442826, 0.429469475097162, 0.40103803389775117, 0.3664508275363528, 0.31684894889742643, 0.2572623407708075, 0.22233192504851432, 0.21653733586314836, 0.21708331569906886, 0.2007113105583127, 0.17259097591481146, 0.14694219616309945, 0.12636650773014962, 0.12337221836059886, 0.13024900623296, 0.1274695614882861, 0.1207584448698442, 0.11309277038406577, 0.10041918066307629, 0.08677813936022885, 0.07027035988030828, 0.052698677103776466, 0.04820217056688959, 0.05569613605958394, 0.055524937318774926, 0.042164516891523944, 0.034989336742894166, 0.03838236316944051, 0.038292572560402735], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 255, 0, 0.2)", "marker": {"color": "green", "size": 6}, "mode": "lines", "name": "left trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.06349677516174375, 0.055164183262487614, 0.051575078593336154, 0.05080070317608229, 0.05002401829394985, 0.048288416057847734, 0.04357813280757436, 0.03987060412710056, 0.04188634958962173, 0.044033654487686154, 0.04152655439302429, 0.03534157905787802, 0.029602848301074645, 0.024005556153032813, 0.017762094585770216, 0.015068795486910962, 0.014351022784188457, 0.014522272936182084, 0.01677625846131874, 0.019326384428984916, 0.018308471956598855, 0.01748823338628165, 0.0198655370570587, 0.026956298790682683, 0.035093162122976855, 0.03383592421501711, 0.028980657099937773, 0.026184000006392733, 0.027318908982421317, 0.030776706850045427, 0.03105991765168676, 0.03114586966947354, 0.0325712529445065, 0.03140312792429545, 0.02651539535978936, 0.023956886228177154, 0.02815879541463682, 0.038346946209643545, 0.05331313517881735, 0.07056871565076045, 0.08493652713853471, 0.09121060579983942, 0.09877675449349022, 0.13166371531021126, 0.21275468523992952, 0.3440289714415146, 0.5005415204787876, 0.6174695136625296, 0.6444422181669521, 0.5945597663077807, 0.53576105024794, 0.4895434115661781, 0.4582641141853336, 0.4288423051072521, 0.3943102923408946, 0.3440635817764461, 0.28117239196613814, 0.24392090048323117, 0.23827768903929689, 0.23888615609322772, 0.22203893210458628, 0.19174638767770702, 0.16425594103049176, 0.14388274005383295, 0.1423306873495412, 0.1485439013098656, 0.1440153272177517, 0.13673118153252387, 0.13014126070127624, 0.11743436446528552, 0.10225195224710565, 0.08347661761198938, 0.06393692333447791, 0.05996052058204277, 0.06883850488512593, 0.06849963475288297, 0.05273412203919753, 0.044162371635162206, 0.04868009992932838, 0.04907705857201754], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 255, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.07814709384443007, 0.0671128590765887, 0.061431979585599435, 0.060567529532262035, 0.06076695304789214, 0.0603674971070464, 0.05504719283043633, 0.0506963414790426, 0.052838099969675284, 0.05411592215681779, 0.05053508843341635, 0.04406321583167728, 0.03910097690334545, 0.03359491323923406, 0.024872707335951608, 0.020534045397551964, 0.018489920972846442, 0.018118345064619446, 0.02044258023347472, 0.02398412073882384, 0.02389066767870158, 0.022911164644741466, 0.024679175854409815, 0.032550484692758175, 0.04333271669227778, 0.041598062703608524, 0.0352670758241578, 0.03153984360872153, 0.03235744878759731, 0.03635284698846906, 0.036706105011146545, 0.03816122562647469, 0.04116756766439938, 0.03907228994578127, 0.031620476938711596, 0.028314508769181502, 0.03345374472583451, 0.04502167973084364, 0.06294976214572955, 0.08343971379455085, 0.09986286614355677, 0.10610111519884446, 0.1133569065439461, 0.14855138415765662, 0.23544603505307166, 0.37233947039422954, 0.5336488932463755, 0.652503763954723, 0.678831926217141, 0.6268766702651752, 0.5669062892114896, 0.5193035316679279, 0.4870587532735052, 0.456646576316753, 0.4221697571454364, 0.37127821465546573, 0.30508244316146876, 0.26550987591794806, 0.26001804221544544, 0.2606889964873866, 0.24336655365085985, 0.21090179944060258, 0.18156968589788408, 0.16139897237751627, 0.16128915633848356, 0.1668387963867712, 0.16056109294721732, 0.15270391819520351, 0.1471897510184867, 0.13444954826749475, 0.11772576513398245, 0.09668287534367048, 0.07517516956517936, 0.07171887059719595, 0.08198087371066791, 0.08147433218699102, 0.0633037271868711, 0.05333540652743025, 0.05897783668921625, 0.05986154458363234], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.01093383243292511, 0.018037920881406412, 0.022560593485814025, 0.02155679357015803, 0.019610932952034678, 0.01824719910828939, 0.022597737019061127, 0.029393381475560774, 0.029274628523656938, 0.021760735545097946, 0.014054268815025256, 0.010982771705738869, 0.01267792407913048, 0.014072931936222976, 0.010715022535391566, 0.007397916302419337, 0.00639699331714333, 0.006210073869373154, 0.006696868822604809, 0.011869559355206616, 0.019446241005184377, 0.02201030014836513, 0.021945933014637688, 0.021299316034024733, 0.020948050597654783, 0.02162665336905633, 0.022035609233746867, 0.01874916373120392, 0.013531160449029161, 0.012640124190769767, 0.017014886122591277, 0.02130079084138934, 0.023082141046896626, 0.02407628850006834, 0.02905523146337958, 0.0303649588931256, 0.021859687617303253, 0.01617354451320347, 0.02112311297478661, 0.028853476797333542, 0.02957943391282602, 0.024983209943828598, 0.026135135074710582, 0.029787435769789393, 0.03052278451736218, 0.036750820051987626, 0.06374313353081548, 0.10399377713537705, 0.13524300702942194, 0.17622676211283347, 0.24985863752755125, 0.3336341137625372, 0.41243073439095745, 0.4657250029956145, 0.46024609242754333, 0.4180988256021274, 0.37118502172878076, 0.32206002700136604, 0.27628397080469647, 0.25178930431035107, 0.2447189535173047, 0.24107250616361955, 0.24741342990487825, 0.2551101334036592, 0.24620797413222384, 0.23979789321776324, 0.24290432955771082, 0.22296675391521042, 0.18341933343816763, 0.1437950000876457, 0.10948352100590993, 0.09095674330160891, 0.08665347750441055, 0.08462270885412139, 0.08288833982671202, 0.08351445997305876, 0.08480439389989346, 0.07618036193566798, 0.05999940961012113, 0.046661597593544935], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 255, 0.2)", "marker": {"color": "blue", "size": 6}, "mode": "lines", "name": "right trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.018117465965091208, 0.028251864278866397, 0.035781031215996566, 0.03469416809210023, 0.028500281808745885, 0.02720036708888659, 0.03440254571090815, 0.04565940249337651, 0.04611915159640052, 0.03321627867723299, 0.020524899993598043, 0.017680640885671672, 0.021938211773886655, 0.02261919873817047, 0.018222360261406154, 0.011751427373251685, 0.010446310807805543, 0.010591305040390395, 0.00985622021948128, 0.016698982215206153, 0.02643948348787051, 0.029271681998931976, 0.0291479244721679, 0.029559050274500086, 0.032442929456466076, 0.03355276687376666, 0.030998868148926186, 0.026391960097963272, 0.01928277387458746, 0.01894881140656091, 0.024255028307388904, 0.029353485801942004, 0.0324447133075722, 0.03368101857994058, 0.04001898599247093, 0.040402229224564754, 0.028998130637679, 0.022922117261600324, 0.029663350620622392, 0.03999948943282518, 0.040657079323499275, 0.03461984358616287, 0.036182416550723046, 0.043288925094566444, 0.04345579700984401, 0.049368382418971936, 0.08253793746353827, 0.13302714250487618, 0.1680978947645578, 0.2111737511668432, 0.2886423922299568, 0.3793770348999591, 0.4631377426840163, 0.5187835346997707, 0.5143262458261857, 0.4684024017453134, 0.4152521590530434, 0.3624379845222428, 0.31482079901888027, 0.2901097406378948, 0.2824601957280436, 0.2765618067932598, 0.2868366268329807, 0.29680407909397843, 0.28744384551777147, 0.278934417755636, 0.2814855765901302, 0.2601326677351989, 0.2162562800878747, 0.17097101126756747, 0.1325982759285394, 0.11125689573166832, 0.10696698863650096, 0.10659987622440284, 0.10382814331657678, 0.10242439296637844, 0.1038610897264853, 0.09463579294330796, 0.07403945649984832, 0.060164322776237844], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 255, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.025301099497257305, 0.03846580767632638, 0.04900146894617911, 0.047831542614042426, 0.03738963066545709, 0.03615353506948379, 0.046207354402755176, 0.06192542351119224, 0.06296367466914411, 0.04467182180936803, 0.02699553117217083, 0.024378510065604476, 0.03119849946864283, 0.03116546554011796, 0.02572969798742074, 0.016104938444084033, 0.014495628298467757, 0.014972536211407636, 0.01301557161635775, 0.02152840507520569, 0.033432725970556645, 0.03653306384949882, 0.036349915929698114, 0.03781878451497544, 0.04393780831527737, 0.04547888037847699, 0.039962127064105506, 0.03403475646472263, 0.02503438730014576, 0.02525749862235205, 0.03149517049218653, 0.03740618076249467, 0.04180728556824777, 0.04328574865981283, 0.050982740521562285, 0.05043949955600391, 0.03613657365805475, 0.029670690009997176, 0.03820358826645817, 0.05114550206831681, 0.05173472473417253, 0.04425647722849715, 0.04622969802673551, 0.056790414419343495, 0.056388809502325846, 0.061985944785956246, 0.10133274139626106, 0.16206050787437531, 0.20095278249969367, 0.24612074022085292, 0.3274261469323624, 0.425119956037381, 0.5138447509770752, 0.5718420664039269, 0.568406399224828, 0.5187059778884994, 0.45931929637730606, 0.40281594204311955, 0.3533576272330641, 0.3284301769654385, 0.3202014379387825, 0.3120511074229001, 0.3262598237610832, 0.3384980247842977, 0.3286797169033191, 0.31807094229350874, 0.3200668236225495, 0.29729858155518735, 0.24909322673758177, 0.19814702244748925, 0.1557130308511689, 0.13155704816172772, 0.12728049976859138, 0.1285770435946843, 0.12476794680644153, 0.12133432595969812, 0.12291778555307716, 0.11309122395094794, 0.08807950338957551, 0.07366704795893075], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.019984466596766448, 0.02248131540617786, 0.019160135399014303, 0.012942066277474478, 0.010827749048873002, 0.01615357287063314, 0.022211818442993338, 0.026593854570801396, 0.03220647545457134, 0.03750372916988326, 0.032626968933621915, 0.025360617530277657, 0.021290520326447057, 0.016268545016513827, 0.011982296253583203, 0.011139890450063064, 0.012243426368156465, 0.010883768248159592, 0.010867271417150604, 0.00950683335889628, 0.004997024475963384, 0.003592937050731496, 0.006992177240057165, 0.011173030081641997, 0.011164864341090323, 0.010597896114712648, 0.016112900234341063, 0.023543561953357505, 0.02323387242729017, 0.020996852945771933, 0.027086585569237952, 0.03879708727416524, 0.04456119098987719, 0.041235691859725684, 0.03410020922249701, 0.025202762259431185, 0.02328673378785779, 0.03156660003986975, 0.04349143540909195, 0.05355768929055622, 0.06061557413921194, 0.06980530793363132, 0.08817739476885, 0.10990448803784655, 0.11545989589126379, 0.10893034487219587, 0.10254584951437615, 0.10181153857110511, 0.12182566471039842, 0.13980122913618576, 0.12738343976444128, 0.10135954161475716, 0.08436262940737817, 0.08931540894991137, 0.09934443009296569, 0.09838638228290879, 0.09368707970515734, 0.08717289316579069, 0.08541942235253785, 0.08060601173470239, 0.06380600225546273, 0.05597359354174769, 0.06108816765393878, 0.060354002033403215, 0.05681357145695817, 0.056363088673651376, 0.05792120865573479, 0.05766585203983813, 0.05678428575353401, 0.05683134040830233, 0.05762906835498392, 0.05995839290859319, 0.06304070060932047, 0.062104271527467614, 0.050855211853204775, 0.036923264610538686, 0.03851319366554412, 0.04974102018706417, 0.04992859840229681, 0.04696218214578593], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(255, 0, 0, 0.2)", "marker": {"color": "red", "size": 6}, "mode": "lines", "name": "incorrect trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.030922678711676546, 0.0346870385730373, 0.02860853260969342, 0.01998048200525791, 0.020238302320337923, 0.024619733625993935, 0.0320760267279926, 0.037881640254269135, 0.04827104273293949, 0.057105476566568655, 0.05052115706416022, 0.03937373105717338, 0.03076624667928412, 0.02298929280348497, 0.017321760039356062, 0.017728171566545863, 0.019631883792327106, 0.019238574888715235, 0.01839558622930621, 0.015618287302083774, 0.008353426212052815, 0.006100563778725576, 0.011783527221267883, 0.01707114281454538, 0.0169788637090928, 0.016331822720154373, 0.0231022501883433, 0.03154389258099651, 0.03138755379682685, 0.02830744057339121, 0.037209315776600256, 0.054137390529318305, 0.05850418679344904, 0.054917461158075165, 0.048673022407435894, 0.03458864700851878, 0.03221096182760313, 0.044540238770558564, 0.057585545662417414, 0.0681100291131872, 0.07567591646499117, 0.09019121306354154, 0.11615487943828044, 0.14253996121696416, 0.14605614910429487, 0.13428008501049743, 0.1272410262292823, 0.12739942613447994, 0.1531094528611194, 0.17553229463564515, 0.15934828277082191, 0.1273587943571837, 0.10526357096961507, 0.11122395286487241, 0.1266713345089136, 0.12434652398725597, 0.11702426561344616, 0.11302884237253458, 0.11637584448673605, 0.11082481159195759, 0.08793415237816887, 0.0796172578288821, 0.0871450279610938, 0.08452338611610484, 0.07698040529809234, 0.07672898932481412, 0.07963191792356064, 0.07926923501051553, 0.07780584215483367, 0.07753844926813387, 0.07712705661461348, 0.08115290197307055, 0.08450678258453022, 0.08242301667363598, 0.07253904856035558, 0.060080593523811975, 0.06085949291985424, 0.06970897536736881, 0.0655544272275069, 0.06115245058623751], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(255, 0, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.041860890826586644, 0.046892761739896746, 0.03805692982037254, 0.027018897733041343, 0.029648855591802845, 0.03308589438135473, 0.04194023501299186, 0.04916942593773688, 0.06433561001130764, 0.07670722396325405, 0.06841534519469852, 0.0533868445840691, 0.04024197303212118, 0.029710040590456115, 0.02266122382512892, 0.024316452683028664, 0.027020341216497747, 0.027593381529270877, 0.02592390104146182, 0.02172974124527127, 0.011709827948142246, 0.008608190506719656, 0.0165748772024786, 0.02296925554744876, 0.022792863077095275, 0.022065749325596098, 0.030091600142345538, 0.039544223208635515, 0.039541235166363535, 0.03561802820101048, 0.04733204598396256, 0.06947769378447137, 0.0724471825970209, 0.06859923045642465, 0.06324583559237477, 0.04397453175760638, 0.041135189867348466, 0.05751387750124738, 0.07167965591574288, 0.08266236893581819, 0.0907362587907704, 0.11057711819345176, 0.14413236410771088, 0.17517543439608177, 0.17665240231732596, 0.159629825148799, 0.15193620294418844, 0.15298731369785476, 0.1843932410118404, 0.21126336013510455, 0.19131312577720255, 0.15335804709961023, 0.12616451253185199, 0.13313249677983346, 0.15399823892486153, 0.15030666569160317, 0.140361451521735, 0.13888479157927847, 0.14733226662093424, 0.1410436114492128, 0.11206230250087501, 0.10326092211601651, 0.11320188826824883, 0.10869277019880647, 0.09714723913922652, 0.09709488997597686, 0.1013426271913865, 0.10087261798119293, 0.09882739855613334, 0.09824555812796541, 0.09662504487424305, 0.10234741103754791, 0.10597286455973996, 0.10274176181980435, 0.09422288526750638, 0.08323792243708526, 0.08320579217416436, 0.08967693054767345, 0.08118025605271699, 0.07534271902668908], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.03591875486529934, 0.03614356538778558, 0.03569367448130006, 0.03327412158244427, 0.031243778359291537, 0.030461502357638663, 0.03154992393400879, 0.03351800110211423, 0.03643231185281783, 0.03663703321439933, 0.031562590387381156, 0.025775533597243386, 0.021978097619504384, 0.017817290917812326, 0.013483119510252953, 0.011419551978720174, 0.011595033680485194, 0.01165386192759087, 0.012627191210802665, 0.014766552895262243, 0.014773588406555184, 0.014669161902211136, 0.017245041488978836, 0.021601227319533577, 0.024961498288456747, 0.02459770915818824, 0.023913197679364066, 0.02358974793033823, 0.02256601918758593, 0.023360426636136092, 0.026466238580579175, 0.030396778713543113, 0.03240012709252579, 0.03167955959875518, 0.029985775478033255, 0.02667137203092665, 0.025431763694630953, 0.030764342874188434, 0.04164686598881372, 0.053902186563148415, 0.06213267985742862, 0.06653368919804034, 0.07572158842151722, 0.09842707520498839, 0.13824739567247948, 0.2013320818273865, 0.28476981026911125, 0.35533418368011427, 0.38374925727153475, 0.37587181389433677, 0.36398962769460863, 0.35783514021788676, 0.35925929245330995, 0.3604482442931696, 0.3447884153570835, 0.3075540169671528, 0.26224002917092837, 0.2296361905168302, 0.21468975509959978, 0.20723538600597816, 0.19223841480922124, 0.1745742101013132, 0.16471011363033636, 0.15606118853902998, 0.15102374178207245, 0.15246132271792748, 0.1520312986541058, 0.14302501991236422, 0.12818928362959014, 0.11059272549376849, 0.09382988428823687, 0.08054651717228835, 0.07082634458719689, 0.06793243918724426, 0.06906032099795122, 0.06590430835095169, 0.05929648717153553, 0.055251346988853325, 0.051919296424732156, 0.04745826702756823], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 0, 0.2)", "marker": {"color": "black", "size": 6}, "mode": "lines", "name": "all trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.044022633517488696, 0.04335565010952405, 0.04219496530431568, 0.03957930012919583, 0.037579482854753515, 0.037329651438684094, 0.038540544016896494, 0.04097994232798244, 0.04445160893369671, 0.04405401067660456, 0.03789990242051588, 0.031501546338640246, 0.02780507979661426, 0.02340588890631911, 0.017787152793070526, 0.01477309715322323, 0.014484209454388275, 0.014522080604777075, 0.015280449622242311, 0.01779113432312355, 0.01826420401444159, 0.018104140740456853, 0.02054955555094657, 0.025443229564825157, 0.030328171761887242, 0.029843078390738298, 0.028207199878244552, 0.02743919982005143, 0.026071479953602972, 0.027048161453006578, 0.030608701574842093, 0.03580928900855844, 0.03834016885696035, 0.037276478685067525, 0.03509947050175749, 0.030751785911079892, 0.02929090723360202, 0.03559093877812066, 0.04791874784393478, 0.06181014325898758, 0.07097447086155945, 0.07578683331227323, 0.08585763923878817, 0.11036717543205844, 0.1523699718268093, 0.21797259640691583, 0.30476807123367705, 0.37772702095728455, 0.4065916576092938, 0.39784965824144886, 0.3851769487366574, 0.3789173019439152, 0.3805834546058452, 0.38192118299915473, 0.366648451323616, 0.3282857751331598, 0.2804446159661093, 0.24645581436708452, 0.23155351261387389, 0.22398493504089428, 0.20825514631778225, 0.18943027517466143, 0.17991636839865574, 0.17166237997978157, 0.16667312349739916, 0.1674864748032784, 0.16652185351888782, 0.15700876849791598, 0.14155388058404467, 0.12288261884801707, 0.1047784189968866, 0.09041616950270054, 0.08009411616443096, 0.07751038140773975, 0.0790619245147258, 0.07572517017098927, 0.06828083678500506, 0.06343186677217963, 0.05926544792548018, 0.05475624964238204], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.05212651216967805, 0.05056773483126253, 0.0486962561273313, 0.045884478675947395, 0.04391518735021549, 0.044197800519729526, 0.0455311640997842, 0.048441883553850644, 0.05247090601457558, 0.05147098813880979, 0.0442372144536506, 0.0372275590800371, 0.033632061973724134, 0.028994486894825894, 0.0220911860758881, 0.018126642327726285, 0.017373385228291356, 0.01739029928196328, 0.01793370803368196, 0.020815715750984856, 0.021754819622327996, 0.02153911957870257, 0.023854069612914305, 0.029285231810116736, 0.03569484523531773, 0.03508844762328836, 0.032501202077125035, 0.03128865170976463, 0.029576940719620016, 0.030735896269877064, 0.034751164569105014, 0.04122179930357377, 0.04428021062139491, 0.04287339777137987, 0.04021316552548173, 0.034832199791233136, 0.03315005077257309, 0.040417534682052884, 0.054190629699055845, 0.06971809995482674, 0.07981626186569028, 0.08503997742650612, 0.09599369005605912, 0.1223072756591285, 0.16649254798113913, 0.23461311098644516, 0.32476633219824286, 0.40011985823445484, 0.4294340579470528, 0.41982750258856094, 0.4063642697787062, 0.39999946366994366, 0.40190761675838044, 0.4033941217051399, 0.38850848729014853, 0.34901753329916685, 0.29864920276129026, 0.26327543821733884, 0.248417270128148, 0.2407344840758104, 0.22427187782634325, 0.20428634024800968, 0.19512262316697512, 0.18726357142053315, 0.18232250521272586, 0.18251162688862935, 0.18101240838366983, 0.17099251708346774, 0.1549184775384992, 0.13517251220226564, 0.11572695370553633, 0.10028582183311273, 0.08936188774166504, 0.08708832362823524, 0.08906352803150037, 0.08554603199102685, 0.07726518639847459, 0.07161238655550593, 0.0666115994262282, 0.062054232257195856], "type": "scatter"}], "layout": {"height": 370, "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "PSTH, aligned to stim on time", "x": 0.17, "y": 0.87}, "width": 700, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.04884645647905743, 0.04321550744838653, 0.041718177601072874, 0.041033876819902546, 0.039281083540007554, 0.03620933500864907, 0.03210907278471239, 0.029044866775158527, 0.030934599209568175, 0.033951386818554516, 0.032518020352632224, 0.02661994228407876, 0.02010471969880384, 0.014416199066831566, 0.010651481835588825, 0.009603545576269959, 0.010212124595530472, 0.010926200807744722, 0.013109936689162759, 0.01466864811914599, 0.012726276234496132, 0.012065302127821835, 0.015051898259707586, 0.021362112888607187, 0.026853607553675933, 0.026073785726425696, 0.022694238375717744, 0.020828156404063936, 0.022280369177245324, 0.025200566711621797, 0.025413730292226974, 0.024130513712472386, 0.023974938224613628, 0.02373396590280963, 0.02141031378086712, 0.019599263687172807, 0.022863846103439122, 0.03167221268844345, 0.04367650821190515, 0.05769771750697004, 0.07001018813351265, 0.07632009640083437, 0.08419660244303433, 0.11477604646276592, 0.19006333542678738, 0.3157184724887997, 0.4674341477111997, 0.5824352633703361, 0.6100525101167633, 0.5622428623503862, 0.5046158112843904, 0.45978329146442826, 0.429469475097162, 0.40103803389775117, 0.3664508275363528, 0.31684894889742643, 0.2572623407708075, 0.22233192504851432, 0.21653733586314836, 0.21708331569906886, 0.2007113105583127, 0.17259097591481146, 0.14694219616309945, 0.12636650773014962, 0.12337221836059886, 0.13024900623296, 0.1274695614882861, 0.1207584448698442, 0.11309277038406577, 0.10041918066307629, 0.08677813936022885, 0.07027035988030828, 0.052698677103776466, 0.04820217056688959, 0.05569613605958394, 0.055524937318774926, 0.042164516891523944, 0.034989336742894166, 0.03838236316944051, 0.038292572560402735], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 255, 0, 0.2)", "marker": {"color": "green", "size": 6}, "mode": "lines", "name": "left trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.06349677516174375, 0.055164183262487614, 0.051575078593336154, 0.05080070317608229, 0.05002401829394985, 0.048288416057847734, 0.04357813280757436, 0.03987060412710056, 0.04188634958962173, 0.044033654487686154, 0.04152655439302429, 0.03534157905787802, 0.029602848301074645, 0.024005556153032813, 0.017762094585770216, 0.015068795486910962, 0.014351022784188457, 0.014522272936182084, 0.01677625846131874, 0.019326384428984916, 0.018308471956598855, 0.01748823338628165, 0.0198655370570587, 0.026956298790682683, 0.035093162122976855, 0.03383592421501711, 0.028980657099937773, 0.026184000006392733, 0.027318908982421317, 0.030776706850045427, 0.03105991765168676, 0.03114586966947354, 0.0325712529445065, 0.03140312792429545, 0.02651539535978936, 0.023956886228177154, 0.02815879541463682, 0.038346946209643545, 0.05331313517881735, 0.07056871565076045, 0.08493652713853471, 0.09121060579983942, 0.09877675449349022, 0.13166371531021126, 0.21275468523992952, 0.3440289714415146, 0.5005415204787876, 0.6174695136625296, 0.6444422181669521, 0.5945597663077807, 0.53576105024794, 0.4895434115661781, 0.4582641141853336, 0.4288423051072521, 0.3943102923408946, 0.3440635817764461, 0.28117239196613814, 0.24392090048323117, 0.23827768903929689, 0.23888615609322772, 0.22203893210458628, 0.19174638767770702, 0.16425594103049176, 0.14388274005383295, 0.1423306873495412, 0.1485439013098656, 0.1440153272177517, 0.13673118153252387, 0.13014126070127624, 0.11743436446528552, 0.10225195224710565, 0.08347661761198938, 0.06393692333447791, 0.05996052058204277, 0.06883850488512593, 0.06849963475288297, 0.05273412203919753, 0.044162371635162206, 0.04868009992932838, 0.04907705857201754], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 255, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.07814709384443007, 0.0671128590765887, 0.061431979585599435, 0.060567529532262035, 0.06076695304789214, 0.0603674971070464, 0.05504719283043633, 0.0506963414790426, 0.052838099969675284, 0.05411592215681779, 0.05053508843341635, 0.04406321583167728, 0.03910097690334545, 0.03359491323923406, 0.024872707335951608, 0.020534045397551964, 0.018489920972846442, 0.018118345064619446, 0.02044258023347472, 0.02398412073882384, 0.02389066767870158, 0.022911164644741466, 0.024679175854409815, 0.032550484692758175, 0.04333271669227778, 0.041598062703608524, 0.0352670758241578, 0.03153984360872153, 0.03235744878759731, 0.03635284698846906, 0.036706105011146545, 0.03816122562647469, 0.04116756766439938, 0.03907228994578127, 0.031620476938711596, 0.028314508769181502, 0.03345374472583451, 0.04502167973084364, 0.06294976214572955, 0.08343971379455085, 0.09986286614355677, 0.10610111519884446, 0.1133569065439461, 0.14855138415765662, 0.23544603505307166, 0.37233947039422954, 0.5336488932463755, 0.652503763954723, 0.678831926217141, 0.6268766702651752, 0.5669062892114896, 0.5193035316679279, 0.4870587532735052, 0.456646576316753, 0.4221697571454364, 0.37127821465546573, 0.30508244316146876, 0.26550987591794806, 0.26001804221544544, 0.2606889964873866, 0.24336655365085985, 0.21090179944060258, 0.18156968589788408, 0.16139897237751627, 0.16128915633848356, 0.1668387963867712, 0.16056109294721732, 0.15270391819520351, 0.1471897510184867, 0.13444954826749475, 0.11772576513398245, 0.09668287534367048, 0.07517516956517936, 0.07171887059719595, 0.08198087371066791, 0.08147433218699102, 0.0633037271868711, 0.05333540652743025, 0.05897783668921625, 0.05986154458363234], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.01093383243292511, 0.018037920881406412, 0.022560593485814025, 0.02155679357015803, 0.019610932952034678, 0.01824719910828939, 0.022597737019061127, 0.029393381475560774, 0.029274628523656938, 0.021760735545097946, 0.014054268815025256, 0.010982771705738869, 0.01267792407913048, 0.014072931936222976, 0.010715022535391566, 0.007397916302419337, 0.00639699331714333, 0.006210073869373154, 0.006696868822604809, 0.011869559355206616, 0.019446241005184377, 0.02201030014836513, 0.021945933014637688, 0.021299316034024733, 0.020948050597654783, 0.02162665336905633, 0.022035609233746867, 0.01874916373120392, 0.013531160449029161, 0.012640124190769767, 0.017014886122591277, 0.02130079084138934, 0.023082141046896626, 0.02407628850006834, 0.02905523146337958, 0.0303649588931256, 0.021859687617303253, 0.01617354451320347, 0.02112311297478661, 0.028853476797333542, 0.02957943391282602, 0.024983209943828598, 0.026135135074710582, 0.029787435769789393, 0.03052278451736218, 0.036750820051987626, 0.06374313353081548, 0.10399377713537705, 0.13524300702942194, 0.17622676211283347, 0.24985863752755125, 0.3336341137625372, 0.41243073439095745, 0.4657250029956145, 0.46024609242754333, 0.4180988256021274, 0.37118502172878076, 0.32206002700136604, 0.27628397080469647, 0.25178930431035107, 0.2447189535173047, 0.24107250616361955, 0.24741342990487825, 0.2551101334036592, 0.24620797413222384, 0.23979789321776324, 0.24290432955771082, 0.22296675391521042, 0.18341933343816763, 0.1437950000876457, 0.10948352100590993, 0.09095674330160891, 0.08665347750441055, 0.08462270885412139, 0.08288833982671202, 0.08351445997305876, 0.08480439389989346, 0.07618036193566798, 0.05999940961012113, 0.046661597593544935], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 255, 0.2)", "marker": {"color": "blue", "size": 6}, "mode": "lines", "name": "right trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.018117465965091208, 0.028251864278866397, 0.035781031215996566, 0.03469416809210023, 0.028500281808745885, 0.02720036708888659, 0.03440254571090815, 0.04565940249337651, 0.04611915159640052, 0.03321627867723299, 0.020524899993598043, 0.017680640885671672, 0.021938211773886655, 0.02261919873817047, 0.018222360261406154, 0.011751427373251685, 0.010446310807805543, 0.010591305040390395, 0.00985622021948128, 0.016698982215206153, 0.02643948348787051, 0.029271681998931976, 0.0291479244721679, 0.029559050274500086, 0.032442929456466076, 0.03355276687376666, 0.030998868148926186, 0.026391960097963272, 0.01928277387458746, 0.01894881140656091, 0.024255028307388904, 0.029353485801942004, 0.0324447133075722, 0.03368101857994058, 0.04001898599247093, 0.040402229224564754, 0.028998130637679, 0.022922117261600324, 0.029663350620622392, 0.03999948943282518, 0.040657079323499275, 0.03461984358616287, 0.036182416550723046, 0.043288925094566444, 0.04345579700984401, 0.049368382418971936, 0.08253793746353827, 0.13302714250487618, 0.1680978947645578, 0.2111737511668432, 0.2886423922299568, 0.3793770348999591, 0.4631377426840163, 0.5187835346997707, 0.5143262458261857, 0.4684024017453134, 0.4152521590530434, 0.3624379845222428, 0.31482079901888027, 0.2901097406378948, 0.2824601957280436, 0.2765618067932598, 0.2868366268329807, 0.29680407909397843, 0.28744384551777147, 0.278934417755636, 0.2814855765901302, 0.2601326677351989, 0.2162562800878747, 0.17097101126756747, 0.1325982759285394, 0.11125689573166832, 0.10696698863650096, 0.10659987622440284, 0.10382814331657678, 0.10242439296637844, 0.1038610897264853, 0.09463579294330796, 0.07403945649984832, 0.060164322776237844], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 255, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.025301099497257305, 0.03846580767632638, 0.04900146894617911, 0.047831542614042426, 0.03738963066545709, 0.03615353506948379, 0.046207354402755176, 0.06192542351119224, 0.06296367466914411, 0.04467182180936803, 0.02699553117217083, 0.024378510065604476, 0.03119849946864283, 0.03116546554011796, 0.02572969798742074, 0.016104938444084033, 0.014495628298467757, 0.014972536211407636, 0.01301557161635775, 0.02152840507520569, 0.033432725970556645, 0.03653306384949882, 0.036349915929698114, 0.03781878451497544, 0.04393780831527737, 0.04547888037847699, 0.039962127064105506, 0.03403475646472263, 0.02503438730014576, 0.02525749862235205, 0.03149517049218653, 0.03740618076249467, 0.04180728556824777, 0.04328574865981283, 0.050982740521562285, 0.05043949955600391, 0.03613657365805475, 0.029670690009997176, 0.03820358826645817, 0.05114550206831681, 0.05173472473417253, 0.04425647722849715, 0.04622969802673551, 0.056790414419343495, 0.056388809502325846, 0.061985944785956246, 0.10133274139626106, 0.16206050787437531, 0.20095278249969367, 0.24612074022085292, 0.3274261469323624, 0.425119956037381, 0.5138447509770752, 0.5718420664039269, 0.568406399224828, 0.5187059778884994, 0.45931929637730606, 0.40281594204311955, 0.3533576272330641, 0.3284301769654385, 0.3202014379387825, 0.3120511074229001, 0.3262598237610832, 0.3384980247842977, 0.3286797169033191, 0.31807094229350874, 0.3200668236225495, 0.29729858155518735, 0.24909322673758177, 0.19814702244748925, 0.1557130308511689, 0.13155704816172772, 0.12728049976859138, 0.1285770435946843, 0.12476794680644153, 0.12133432595969812, 0.12291778555307716, 0.11309122395094794, 0.08807950338957551, 0.07366704795893075], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.019984466596766448, 0.02248131540617786, 0.019160135399014303, 0.012942066277474478, 0.010827749048873002, 0.01615357287063314, 0.022211818442993338, 0.026593854570801396, 0.03220647545457134, 0.03750372916988326, 0.032626968933621915, 0.025360617530277657, 0.021290520326447057, 0.016268545016513827, 0.011982296253583203, 0.011139890450063064, 0.012243426368156465, 0.010883768248159592, 0.010867271417150604, 0.00950683335889628, 0.004997024475963384, 0.003592937050731496, 0.006992177240057165, 0.011173030081641997, 0.011164864341090323, 0.010597896114712648, 0.016112900234341063, 0.023543561953357505, 0.02323387242729017, 0.020996852945771933, 0.027086585569237952, 0.03879708727416524, 0.04456119098987719, 0.041235691859725684, 0.03410020922249701, 0.025202762259431185, 0.02328673378785779, 0.03156660003986975, 0.04349143540909195, 0.05355768929055622, 0.06061557413921194, 0.06980530793363132, 0.08817739476885, 0.10990448803784655, 0.11545989589126379, 0.10893034487219587, 0.10254584951437615, 0.10181153857110511, 0.12182566471039842, 0.13980122913618576, 0.12738343976444128, 0.10135954161475716, 0.08436262940737817, 0.08931540894991137, 0.09934443009296569, 0.09838638228290879, 0.09368707970515734, 0.08717289316579069, 0.08541942235253785, 0.08060601173470239, 0.06380600225546273, 0.05597359354174769, 0.06108816765393878, 0.060354002033403215, 0.05681357145695817, 0.056363088673651376, 0.05792120865573479, 0.05766585203983813, 0.05678428575353401, 0.05683134040830233, 0.05762906835498392, 0.05995839290859319, 0.06304070060932047, 0.062104271527467614, 0.050855211853204775, 0.036923264610538686, 0.03851319366554412, 0.04974102018706417, 0.04992859840229681, 0.04696218214578593], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(255, 0, 0, 0.2)", "marker": {"color": "red", "size": 6}, "mode": "lines", "name": "incorrect trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.030922678711676546, 0.0346870385730373, 0.02860853260969342, 0.01998048200525791, 0.020238302320337923, 0.024619733625993935, 0.0320760267279926, 0.037881640254269135, 0.04827104273293949, 0.057105476566568655, 0.05052115706416022, 0.03937373105717338, 0.03076624667928412, 0.02298929280348497, 0.017321760039356062, 0.017728171566545863, 0.019631883792327106, 0.019238574888715235, 0.01839558622930621, 0.015618287302083774, 0.008353426212052815, 0.006100563778725576, 0.011783527221267883, 0.01707114281454538, 0.0169788637090928, 0.016331822720154373, 0.0231022501883433, 0.03154389258099651, 0.03138755379682685, 0.02830744057339121, 0.037209315776600256, 0.054137390529318305, 0.05850418679344904, 0.054917461158075165, 0.048673022407435894, 0.03458864700851878, 0.03221096182760313, 0.044540238770558564, 0.057585545662417414, 0.0681100291131872, 0.07567591646499117, 0.09019121306354154, 0.11615487943828044, 0.14253996121696416, 0.14605614910429487, 0.13428008501049743, 0.1272410262292823, 0.12739942613447994, 0.1531094528611194, 0.17553229463564515, 0.15934828277082191, 0.1273587943571837, 0.10526357096961507, 0.11122395286487241, 0.1266713345089136, 0.12434652398725597, 0.11702426561344616, 0.11302884237253458, 0.11637584448673605, 0.11082481159195759, 0.08793415237816887, 0.0796172578288821, 0.0871450279610938, 0.08452338611610484, 0.07698040529809234, 0.07672898932481412, 0.07963191792356064, 0.07926923501051553, 0.07780584215483367, 0.07753844926813387, 0.07712705661461348, 0.08115290197307055, 0.08450678258453022, 0.08242301667363598, 0.07253904856035558, 0.060080593523811975, 0.06085949291985424, 0.06970897536736881, 0.0655544272275069, 0.06115245058623751], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(255, 0, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.041860890826586644, 0.046892761739896746, 0.03805692982037254, 0.027018897733041343, 0.029648855591802845, 0.03308589438135473, 0.04194023501299186, 0.04916942593773688, 0.06433561001130764, 0.07670722396325405, 0.06841534519469852, 0.0533868445840691, 0.04024197303212118, 0.029710040590456115, 0.02266122382512892, 0.024316452683028664, 0.027020341216497747, 0.027593381529270877, 0.02592390104146182, 0.02172974124527127, 0.011709827948142246, 0.008608190506719656, 0.0165748772024786, 0.02296925554744876, 0.022792863077095275, 0.022065749325596098, 0.030091600142345538, 0.039544223208635515, 0.039541235166363535, 0.03561802820101048, 0.04733204598396256, 0.06947769378447137, 0.0724471825970209, 0.06859923045642465, 0.06324583559237477, 0.04397453175760638, 0.041135189867348466, 0.05751387750124738, 0.07167965591574288, 0.08266236893581819, 0.0907362587907704, 0.11057711819345176, 0.14413236410771088, 0.17517543439608177, 0.17665240231732596, 0.159629825148799, 0.15193620294418844, 0.15298731369785476, 0.1843932410118404, 0.21126336013510455, 0.19131312577720255, 0.15335804709961023, 0.12616451253185199, 0.13313249677983346, 0.15399823892486153, 0.15030666569160317, 0.140361451521735, 0.13888479157927847, 0.14733226662093424, 0.1410436114492128, 0.11206230250087501, 0.10326092211601651, 0.11320188826824883, 0.10869277019880647, 0.09714723913922652, 0.09709488997597686, 0.1013426271913865, 0.10087261798119293, 0.09882739855613334, 0.09824555812796541, 0.09662504487424305, 0.10234741103754791, 0.10597286455973996, 0.10274176181980435, 0.09422288526750638, 0.08323792243708526, 0.08320579217416436, 0.08967693054767345, 0.08118025605271699, 0.07534271902668908], "type": "scatter"}, {"line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.03591875486529934, 0.03614356538778558, 0.03569367448130006, 0.03327412158244427, 0.031243778359291537, 0.030461502357638663, 0.03154992393400879, 0.03351800110211423, 0.03643231185281783, 0.03663703321439933, 0.031562590387381156, 0.025775533597243386, 0.021978097619504384, 0.017817290917812326, 0.013483119510252953, 0.011419551978720174, 0.011595033680485194, 0.01165386192759087, 0.012627191210802665, 0.014766552895262243, 0.014773588406555184, 0.014669161902211136, 0.017245041488978836, 0.021601227319533577, 0.024961498288456747, 0.02459770915818824, 0.023913197679364066, 0.02358974793033823, 0.02256601918758593, 0.023360426636136092, 0.026466238580579175, 0.030396778713543113, 0.03240012709252579, 0.03167955959875518, 0.029985775478033255, 0.02667137203092665, 0.025431763694630953, 0.030764342874188434, 0.04164686598881372, 0.053902186563148415, 0.06213267985742862, 0.06653368919804034, 0.07572158842151722, 0.09842707520498839, 0.13824739567247948, 0.2013320818273865, 0.28476981026911125, 0.35533418368011427, 0.38374925727153475, 0.37587181389433677, 0.36398962769460863, 0.35783514021788676, 0.35925929245330995, 0.3604482442931696, 0.3447884153570835, 0.3075540169671528, 0.26224002917092837, 0.2296361905168302, 0.21468975509959978, 0.20723538600597816, 0.19223841480922124, 0.1745742101013132, 0.16471011363033636, 0.15606118853902998, 0.15102374178207245, 0.15246132271792748, 0.1520312986541058, 0.14302501991236422, 0.12818928362959014, 0.11059272549376849, 0.09382988428823687, 0.08054651717228835, 0.07082634458719689, 0.06793243918724426, 0.06906032099795122, 0.06590430835095169, 0.05929648717153553, 0.055251346988853325, 0.051919296424732156, 0.04745826702756823], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 0, 0.2)", "marker": {"color": "black", "size": 6}, "mode": "lines", "name": "all trials, mean +/- s.e.m", "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.044022633517488696, 0.04335565010952405, 0.04219496530431568, 0.03957930012919583, 0.037579482854753515, 0.037329651438684094, 0.038540544016896494, 0.04097994232798244, 0.04445160893369671, 0.04405401067660456, 0.03789990242051588, 0.031501546338640246, 0.02780507979661426, 0.02340588890631911, 0.017787152793070526, 0.01477309715322323, 0.014484209454388275, 0.014522080604777075, 0.015280449622242311, 0.01779113432312355, 0.01826420401444159, 0.018104140740456853, 0.02054955555094657, 0.025443229564825157, 0.030328171761887242, 0.029843078390738298, 0.028207199878244552, 0.02743919982005143, 0.026071479953602972, 0.027048161453006578, 0.030608701574842093, 0.03580928900855844, 0.03834016885696035, 0.037276478685067525, 0.03509947050175749, 0.030751785911079892, 0.02929090723360202, 0.03559093877812066, 0.04791874784393478, 0.06181014325898758, 0.07097447086155945, 0.07578683331227323, 0.08585763923878817, 0.11036717543205844, 0.1523699718268093, 0.21797259640691583, 0.30476807123367705, 0.37772702095728455, 0.4065916576092938, 0.39784965824144886, 0.3851769487366574, 0.3789173019439152, 0.3805834546058452, 0.38192118299915473, 0.366648451323616, 0.3282857751331598, 0.2804446159661093, 0.24645581436708452, 0.23155351261387389, 0.22398493504089428, 0.20825514631778225, 0.18943027517466143, 0.17991636839865574, 0.17166237997978157, 0.16667312349739916, 0.1674864748032784, 0.16652185351888782, 0.15700876849791598, 0.14155388058404467, 0.12288261884801707, 0.1047784189968866, 0.09041616950270054, 0.08009411616443096, 0.07751038140773975, 0.0790619245147258, 0.07572517017098927, 0.06828083678500506, 0.06343186677217963, 0.05926544792548018, 0.05475624964238204], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(0, 0, 0, 0.2)", "line": {"width": 0}, "marker": {"color": "#444"}, "mode": "lines", "showlegend": false, "x": [-0.9875, -0.9625000000000001, -0.9375, -0.9125000000000001, -0.8875, -0.8625, -0.8375000000000001, -0.8125, -0.7875000000000001, -0.7625, -0.7375, -0.7125000000000001, -0.6875, -0.6625000000000001, -0.6375, -0.6125, -0.5875000000000001, -0.5625, -0.5375000000000001, -0.5125, -0.48750000000000004, -0.4625, -0.4375, -0.41250000000000003, -0.3875, -0.36250000000000004, -0.3375, -0.3125, -0.28750000000000003, -0.2625, -0.2375, -0.21250000000000002, -0.1875, -0.16250000000000003, -0.1375, -0.1125, -0.08750000000000001, -0.0625, -0.037500000000000006, -0.0125, 0.0125, 0.037500000000000006, 0.0625, 0.08750000000000001, 0.1125, 0.1375, 0.16250000000000003, 0.1875, 0.21250000000000002, 0.2375, 0.2625, 0.28750000000000003, 0.3125, 0.3375, 0.36250000000000004, 0.3875, 0.41250000000000003, 0.4375, 0.4625, 0.48750000000000004, 0.5125, 0.5375000000000001, 0.5625, 0.5875000000000001, 0.6125, 0.6375, 0.6625000000000001, 0.6875, 0.7125000000000001, 0.7375, 0.7625, 0.7875000000000001, 0.8125, 0.8375000000000001, 0.8625, 0.8875, 0.9125000000000001, 0.9375, 0.9625000000000001, 0.9875], "y": [0.05212651216967805, 0.05056773483126253, 0.0486962561273313, 0.045884478675947395, 0.04391518735021549, 0.044197800519729526, 0.0455311640997842, 0.048441883553850644, 0.05247090601457558, 0.05147098813880979, 0.0442372144536506, 0.0372275590800371, 0.033632061973724134, 0.028994486894825894, 0.0220911860758881, 0.018126642327726285, 0.017373385228291356, 0.01739029928196328, 0.01793370803368196, 0.020815715750984856, 0.021754819622327996, 0.02153911957870257, 0.023854069612914305, 0.029285231810116736, 0.03569484523531773, 0.03508844762328836, 0.032501202077125035, 0.03128865170976463, 0.029576940719620016, 0.030735896269877064, 0.034751164569105014, 0.04122179930357377, 0.04428021062139491, 0.04287339777137987, 0.04021316552548173, 0.034832199791233136, 0.03315005077257309, 0.040417534682052884, 0.054190629699055845, 0.06971809995482674, 0.07981626186569028, 0.08503997742650612, 0.09599369005605912, 0.1223072756591285, 0.16649254798113913, 0.23461311098644516, 0.32476633219824286, 0.40011985823445484, 0.4294340579470528, 0.41982750258856094, 0.4063642697787062, 0.39999946366994366, 0.40190761675838044, 0.4033941217051399, 0.38850848729014853, 0.34901753329916685, 0.29864920276129026, 0.26327543821733884, 0.248417270128148, 0.2407344840758104, 0.22427187782634325, 0.20428634024800968, 0.19512262316697512, 0.18726357142053315, 0.18232250521272586, 0.18251162688862935, 0.18101240838366983, 0.17099251708346774, 0.1549184775384992, 0.13517251220226564, 0.11572695370553633, 0.10028582183311273, 0.08936188774166504, 0.08708832362823524, 0.08906352803150037, 0.08554603199102685, 0.07726518639847459, 0.07161238655550593, 0.0666115994262282, 0.062054232257195856], "type": "scatter"}], "layout": {"height": 370, "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "PSTH, aligned to stim on time", "x": 0.17, "y": 0.87}, "width": 700, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"showgrid": false, "title": {"text": "Firing rate (spks/sec)"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/psych_results_date-Copy1.json b/notebooks/notebooks_plotting/psych_results_date-Copy1.json index 809d14e0..922f157f 100644 --- a/notebooks/notebooks_plotting/psych_results_date-Copy1.json +++ b/notebooks/notebooks_plotting/psych_results_date-Copy1.json @@ -1 +1 @@ -{"data": [{"error_y": {"array": [0.0, 0.0, -0.25, -0.23076923076923078, -0.35518873481714125, -0.3110268897594517, -0.3661515606106232, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.3282944887649286, -0.2505841217295865, -0.3551887348171412, -0.3110268897594517, -0.2857142857142857, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "3a7037cf-4902-400c-9aa6-f7f978af5c67"}, {"error_y": {"array": [0.0, -0.05454545454545454, -0.1187682088251601, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, 0.0, 0.0], "arrayminus": [-0.0, -0.06566383061785525, -0.11876820882516007, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, -0.0, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "322696ae-83ed-4107-898d-5b6b8cc0d63e"}, {"error_y": {"array": [0.0, -0.18181818181818182, -0.3390610900368658, -0.18587411845639557, -0.1763356717194452, -0.13289945533274472, -0.04513776784114376, 0.0, 0.0], "arrayminus": [-0.0, -0.24937629847580928, -0.3390610900368658, -0.09090909090909094, -0.1763356717194452, -0.13289945533274472, -0.021276595744680882, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "f5a462d3-2daf-4b96-8bba-bdd7a12b0317"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.148710000005551e-05, 5.1487100000166524e-05, 5.1487100000444066e-05, 5.1487100001110166e-05, 5.148710000283092e-05, 5.148710000710506e-05, 5.148710001731858e-05, 5.148710004190876e-05, 5.148710010002594e-05, 5.148710023557719e-05, 5.148710054747829e-05, 5.148710125587513e-05, 5.1487102843523326e-05, 5.148710635481142e-05, 5.148711401773128e-05, 5.148713052023579e-05, 5.148716558982027e-05, 5.148723913220267e-05, 5.148739131668088e-05, 5.1487702079082496e-05, 5.148832827823909e-05, 5.148957342966708e-05, 5.149201662158007e-05, 5.149674724885817e-05, 5.1505785941648665e-05, 5.152282785127366e-05, 5.155453496017167e-05, 5.1612748067837364e-05, 5.171821363310492e-05, 5.190676355215905e-05, 5.223939843114114e-05, 5.281847367163163e-05, 5.381325582621284e-05, 5.549960210755142e-05, 5.832052568651565e-05, 6.297704785773204e-05, 7.056208699522571e-05, 8.275422241290197e-05, 0.00010209293389813513, 0.0001323621447998328, 0.00017911417522482154, 0.00025037086945222905, 0.00035754172154909886, 0.0005165989900453897, 0.0007495454863251326, 0.0010862001808445913, 0.0015663082441106676, 0.0022419541671934396, 0.0031802183972048114, 0.004465969780993039, 0.006204629870257659, 0.008524684527102859, 0.01157965907687044, 0.01554922325900313, 0.020639060716709713, 0.02707913466914598, 0.035120016007007655, 0.04502701939193353, 0.05707202013137238, 0.0715229972586108, 0.08863155740249337, 0.10861892381432303, 0.13166110327152603, 0.15787414409132716, 0.1873005433077653, 0.21989792456464982, 0.2555310710256541, 0.2939682500146915, 0.33488251109981304, 0.3778582934709659, 0.4224032710975076, 0.46796493465141026, 0.5139510023847904, 0.5597524127058664, 0.6047674176143036, 0.6484251954878918, 0.6902074457418479, 0.7296666114468219, 0.7664396777185501, 0.8002568790255881, 0.8309450745793426, 0.8584259721959082, 0.8827097553054325, 0.9038849613802499, 0.9221056511414966, 0.9375769882141242, 0.9505403233230932, 0.9612587615986998, 0.9700040097382817, 0.9770450790986316, 0.9826391886454484, 0.9870249921213685, 0.9904180652715971, 0.9930084431941061, 0.9949598997503761, 0.9964106093749253, 0.9974748208619236, 0.9982451941839692, 0.9987954952662655, 0.9991834002290901, 0.9994532214722337, 0.9996384265001328, 0.9997638720426448, 0.9998477182687314, 0.999903019859815, 0.9999390128187432, 0.9999621293831195, 0.9999767799637589, 0.9999859424258711, 0.9999915969407187, 0.9999950404741534, 0.9999971098484649, 0.9999983370039505, 0.9999990551055896, 0.9999994697712045, 0.999999706056071, 0.9999998389176964, 0.999999912638317, 0.9999999530032436, 0.9999999748127134, 0.9999999864408949, 0.9999999925588212, 0.9999999957351279, 0.999999997362423, 0.9999999981851126, 0.9999999985955352, 0.9999999987975824, 0.9999999988957343, 0.9999999989427856, 0.9999999989650429, 0.9999999989754322, 0.999999998980218, 0.9999999989823932, 0.999999998983369, 0.9999999989838009, 0.9999999989839894, 0.9999999989840708, 0.9999999989841053, 0.9999999989841198, 0.9999999989841258, 0.9999999989841284, 0.9999999989841293, 0.9999999989841297, 0.9999999989841298, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413], "type": "scatter", "uid": "db314319-5d0f-41f9-830a-5c20ce0ff594"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.469223106871187e-10, 2.4694418208069666e-10, 2.4698242926388254e-10, 2.4704887611188464e-10, 2.4716378419489587e-10, 2.473614038932146e-10, 2.4769918924834655e-10, 2.482735631299489e-10, 2.4924445316466665e-10, 2.5087659203263534e-10, 2.53604687559005e-10, 2.581391714570014e-10, 2.656335654488335e-10, 2.779503241688532e-10, 2.980785010652833e-10, 3.307870036276932e-10, 3.836395037646289e-10, 4.685610735131503e-10, 6.042420399309649e-10, 8.198021651657044e-10, 1.1603403737974581e-09, 1.6952886259848386e-09, 2.530903092222112e-09, 3.828824473280767e-09, 5.8334770276918354e-09, 8.912253316153698e-09, 1.361406736383169e-08, 2.0754113859989333e-08, 3.1535756435197674e-08, 4.772464765747754e-08, 7.189581188639561e-08, 1.0778191690670518e-07, 1.6076086944770296e-07, 2.3853384253948997e-07, 3.5206166958605787e-07, 5.168491600742075e-07, 7.546943896191269e-07, 1.096054634522998e-06, 1.5832237285405396e-06, 2.274568699030637e-06, 3.2501381182378905e-06, 4.619032183114419e-06, 6.529016472440441e-06, 9.178968681574189e-06, 1.2834870979385407e-05, 1.785019981009563e-05, 2.4691718815512248e-05, 3.3971846586996595e-05, 4.6488945008279365e-05, 6.327704981927797e-05, 8.566673414545977e-05, 0.00011535894684242323, 0.00015451378646360139, 0.00020585624135346418, 0.0002728009268195138, 0.0003595977590334565, 0.00047150029784528085, 0.0006149581417380514, 0.0007978342427830351, 0.0010296473048919264, 0.0013218385163327787, 0.0016880607354193048, 0.002144486893754719, 0.0027101328135915306, 0.003407187878433448, 0.004261345089416883, 0.0053021200432018965, 0.006563146358312598, 0.008082433153380957, 0.009902568457231017, 0.012070851036046801, 0.014639332195157345, 0.017664748793166634, 0.021208329129830467, 0.02533545465713447, 0.03011516271147343, 0.035619478734416246, 0.041922570755789486, 0.04909972421739191, 0.057226141419867226, 0.06637557681647871, 0.07661882682932189, 0.08802210053997127, 0.10064530517116146, 0.11454028735509161, 0.12974907738378066, 0.14630218856528715, 0.16421702709865998, 0.18349646921107998, 0.2041276614259418, 0.22608109659734493, 0.24931001271205833, 0.2737501535042089, 0.29931991985734735, 0.32592092911359155, 0.353438986213345, 0.38174545658841713, 0.41069901653079466, 0.44014774299973586, 0.4699314921534094, 0.49988450490491293, 0.5298381690424713, 0.5596238613536766, 0.58907579005878, 0.618033757845909, 0.6463457689122885, 0.673870409493619, 0.7004789401048173, 0.7260570486864935, 0.7505062265172204, 0.7737447425053174, 0.7957082056735216, 0.8163497196545139, 0.8356396462198218, 0.8535650067317372, 0.8701285604936478, 0.8853476069472423, 0.8992525643178025, 0.9118853805605704, 0.9232978333535973, 0.9335497745680527, 0.9427073713718567, 0.9508413912053925, 0.9580255716765184, 0.9643351093483812, 0.9698452938311888, 0.9746303059121673, 0.9787621910032375, 0.9823100122398493, 0.9853391813538126, 0.9879109601310005, 0.9900821209506334, 0.9919047516252817, 0.9934261875045884, 0.9946890525105935, 0.9957313903426398, 0.9965868674044297, 0.9972850299293602, 0.9978515991718989, 0.9983087902542536, 0.9986756421799959, 0.9989683485348205, 0.9992005803918547, 0.9993837948464601, 0.9995275243642293, 0.9996396436952804, 0.9997266124641637, 0.9997936926784798, 0.9998451413132895, 0.9998843788344969, 0.999914135041131, 0.9999365739565955, 0.9999533997074109, 0.9999659454200855, 0.9999752471669089, 0.9999821049222269, 0.9999871323721072, 0.9999907972693873, 0.9999934538570808, 0.9999953687072556, 0.9999967411484126, 0.9999977192882791, 0.999998412484966, 0.9999989009801525, 0.9999992432844804, 0.9999994817978803, 0.9999996470554899, 0.9999997609121504, 0.9999998389137853, 0.9999998920508134, 0.9999999280455589, 0.9999999522909526, 0.9999999685302661, 0.9999999793459597, 0.999999986508868, 0.9999999912259417, 0.9999999943148447, 0.9999999963261783, 0.999999997628482, 0.9999999984669543, 0.9999999990037555, 0.9999999993454881, 0.9999999995618136, 0.9999999996979824, 0.999999999783213, 0.99999999983626, 0.9999999998690903, 0.9999999998892943, 0.9999999999016582, 0.9999999999091814, 0.9999999999137337, 0.9999999999164725, 0.9999999999181111, 0.9999999999190858, 0.9999999999196626, 0.9999999999200018, 0.9999999999202003, 0.9999999999203156, 0.9999999999203824, 0.9999999999204208], "type": "scatter", "uid": "84a35b8b-f972-4339-bbd3-a6542adb3037"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.07059640000000006, 0.0705964000000001, 0.07059640000000021, 0.07059640000000057, 0.07059640000000139, 0.07059640000000346, 0.07059640000000857, 0.0705964000000207, 0.07059640000004953, 0.07059640000011702, 0.07059640000027283, 0.07059640000062799, 0.07059640000142699, 0.07059640000320115, 0.0705964000070894, 0.07059640001549997, 0.07059640003345578, 0.07059640007129123, 0.07059640014997845, 0.07059640031149707, 0.07059640063872688, 0.07059640129305479, 0.07059640258442365, 0.07059640509988367, 0.0705964099360007, 0.07059641911274163, 0.07059643629943876, 0.07059646806881323, 0.07059652602999046, 0.0705966304005546, 0.07059681589511012, 0.07059714127942293, 0.07059770462432371, 0.07059866726551395, 0.07060029081987558, 0.07060299341851584, 0.07060743368057375, 0.07061463393733876, 0.07062615784321655, 0.07064436171474733, 0.07067274352980926, 0.07071641812796424, 0.07078275118630056, 0.07088218714826905, 0.07102930632841122, 0.07124414253422236, 0.07155378321657686, 0.07199425787271788, 0.07261269592637938, 0.07346970191567628, 0.07464185378618084, 0.07622418097612257, 0.07833242596755803, 0.08110484100924144, 0.0847032274420293, 0.08931289644472522, 0.09514122562521149, 0.10241451378206129, 0.11137290260699054, 0.1222632420686268, 0.13532992408160066, 0.15080388960937507, 0.16889021444636892, 0.18975488004325508, 0.21351151540941532, 0.240209030315453, 0.2698211261939858, 0.30223865163610864, 0.33726565457922786, 0.3746197740084916, 0.4139373226983092, 0.45478306284838954, 0.4966643011446535, 0.5390485669708984, 0.5813838261436506, 0.6231199572588505, 0.6637301041486846, 0.7027305291322817, 0.7396977264123373, 0.7742817976349344, 0.8062154147797587, 0.8353180634400349, 0.8614956330208395, 0.8847357619032687, 0.9050996238444643, 0.9227110350355942, 0.9377438589424945, 0.9504086894508089, 0.960939713178131, 0.9695825078661624, 0.9765833485661836, 0.9821803908452238, 0.986596902390483, 0.9900365388317038, 0.9926805184292617, 0.9946864496705812, 0.996188506511207, 0.9972986243274923, 0.9981083989373412, 0.9986914030432833, 0.9991056806356857, 0.9993962324847057, 0.9995973584818347, 0.9997347706337048, 0.9998274310894477, 0.9998891013922301, 0.9999296121235857, 0.9999558770650772, 0.9999726842562153, 0.999983299407409, 0.9999899165359281, 0.9999939877626779, 0.9999964600181431, 0.9999979417640231, 0.999998818293318, 0.9999993300593574, 0.9999996249688867, 0.9999997927018659, 0.9999998868605592, 0.9999999390298204, 0.9999999675584723, 0.9999999829563231, 0.9999999911589176, 0.9999999954716715, 0.9999999977097246, 0.9999999988560246, 0.9999999994355049, 0.9999999997246335, 0.9999999998670158, 0.9999999999362201, 0.9999999999694189, 0.9999999999851378, 0.9999999999924836, 0.9999999999958717, 0.9999999999974141, 0.9999999999981071, 0.9999999999984145, 0.999999999998549, 0.9999999999986071, 0.9999999999986319, 0.9999999999986424, 0.9999999999986467, 0.9999999999986484, 0.9999999999986492, 0.9999999999986494, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496], "type": "scatter", "uid": "e3367352-bc71-4d04-8285-3633466f3687"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "8a78ae72-bdbe-4988-89ff-6d20e178d9bf"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "c2a64b15-3492-4bda-b0b7-75429b801742"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "bc69accf-097f-4cc0-bd94-668061c3cb90"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} \ No newline at end of file +{"data": [{"error_y": {"array": [0.0, 0.0, -0.25, -0.23076923076923078, -0.35518873481714125, -0.3110268897594517, -0.3661515606106232, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.3282944887649286, -0.2505841217295865, -0.3551887348171412, -0.3110268897594517, -0.2857142857142857, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "3a7037cf-4902-400c-9aa6-f7f978af5c67"}, {"error_y": {"array": [0.0, -0.05454545454545454, -0.1187682088251601, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, 0.0, 0.0], "arrayminus": [-0.0, -0.06566383061785525, -0.11876820882516007, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, -0.0, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "322696ae-83ed-4107-898d-5b6b8cc0d63e"}, {"error_y": {"array": [0.0, -0.18181818181818182, -0.3390610900368658, -0.18587411845639557, -0.1763356717194452, -0.13289945533274472, -0.04513776784114376, 0.0, 0.0], "arrayminus": [-0.0, -0.24937629847580928, -0.3390610900368658, -0.09090909090909094, -0.1763356717194452, -0.13289945533274472, -0.021276595744680882, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "f5a462d3-2daf-4b96-8bba-bdd7a12b0317"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.148710000005551e-05, 5.1487100000166524e-05, 5.1487100000444066e-05, 5.1487100001110166e-05, 5.148710000283092e-05, 5.148710000710506e-05, 5.148710001731858e-05, 5.148710004190876e-05, 5.148710010002594e-05, 5.148710023557719e-05, 5.148710054747829e-05, 5.148710125587513e-05, 5.1487102843523326e-05, 5.148710635481142e-05, 5.148711401773128e-05, 5.148713052023579e-05, 5.148716558982027e-05, 5.148723913220267e-05, 5.148739131668088e-05, 5.1487702079082496e-05, 5.148832827823909e-05, 5.148957342966708e-05, 5.149201662158007e-05, 5.149674724885817e-05, 5.1505785941648665e-05, 5.152282785127366e-05, 5.155453496017167e-05, 5.1612748067837364e-05, 5.171821363310492e-05, 5.190676355215905e-05, 5.223939843114114e-05, 5.281847367163163e-05, 5.381325582621284e-05, 5.549960210755142e-05, 5.832052568651565e-05, 6.297704785773204e-05, 7.056208699522571e-05, 8.275422241290197e-05, 0.00010209293389813513, 0.0001323621447998328, 0.00017911417522482154, 0.00025037086945222905, 0.00035754172154909886, 0.0005165989900453897, 0.0007495454863251326, 0.0010862001808445913, 0.0015663082441106676, 0.0022419541671934396, 0.0031802183972048114, 0.004465969780993039, 0.006204629870257659, 0.008524684527102859, 0.01157965907687044, 0.01554922325900313, 0.020639060716709713, 0.02707913466914598, 0.035120016007007655, 0.04502701939193353, 0.05707202013137238, 0.0715229972586108, 0.08863155740249337, 0.10861892381432303, 0.13166110327152603, 0.15787414409132716, 0.1873005433077653, 0.21989792456464982, 0.2555310710256541, 0.2939682500146915, 0.33488251109981304, 0.3778582934709659, 0.4224032710975076, 0.46796493465141026, 0.5139510023847904, 0.5597524127058664, 0.6047674176143036, 0.6484251954878918, 0.6902074457418479, 0.7296666114468219, 0.7664396777185501, 0.8002568790255881, 0.8309450745793426, 0.8584259721959082, 0.8827097553054325, 0.9038849613802499, 0.9221056511414966, 0.9375769882141242, 0.9505403233230932, 0.9612587615986998, 0.9700040097382817, 0.9770450790986316, 0.9826391886454484, 0.9870249921213685, 0.9904180652715971, 0.9930084431941061, 0.9949598997503761, 0.9964106093749253, 0.9974748208619236, 0.9982451941839692, 0.9987954952662655, 0.9991834002290901, 0.9994532214722337, 0.9996384265001328, 0.9997638720426448, 0.9998477182687314, 0.999903019859815, 0.9999390128187432, 0.9999621293831195, 0.9999767799637589, 0.9999859424258711, 0.9999915969407187, 0.9999950404741534, 0.9999971098484649, 0.9999983370039505, 0.9999990551055896, 0.9999994697712045, 0.999999706056071, 0.9999998389176964, 0.999999912638317, 0.9999999530032436, 0.9999999748127134, 0.9999999864408949, 0.9999999925588212, 0.9999999957351279, 0.999999997362423, 0.9999999981851126, 0.9999999985955352, 0.9999999987975824, 0.9999999988957343, 0.9999999989427856, 0.9999999989650429, 0.9999999989754322, 0.999999998980218, 0.9999999989823932, 0.999999998983369, 0.9999999989838009, 0.9999999989839894, 0.9999999989840708, 0.9999999989841053, 0.9999999989841198, 0.9999999989841258, 0.9999999989841284, 0.9999999989841293, 0.9999999989841297, 0.9999999989841298, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413], "type": "scatter", "uid": "db314319-5d0f-41f9-830a-5c20ce0ff594"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.469223106871187e-10, 2.4694418208069666e-10, 2.4698242926388254e-10, 2.4704887611188464e-10, 2.4716378419489587e-10, 2.473614038932146e-10, 2.4769918924834655e-10, 2.482735631299489e-10, 2.4924445316466665e-10, 2.5087659203263534e-10, 2.53604687559005e-10, 2.581391714570014e-10, 2.656335654488335e-10, 2.779503241688532e-10, 2.980785010652833e-10, 3.307870036276932e-10, 3.836395037646289e-10, 4.685610735131503e-10, 6.042420399309649e-10, 8.198021651657044e-10, 1.1603403737974581e-09, 1.6952886259848386e-09, 2.530903092222112e-09, 3.828824473280767e-09, 5.8334770276918354e-09, 8.912253316153698e-09, 1.361406736383169e-08, 2.0754113859989333e-08, 3.1535756435197674e-08, 4.772464765747754e-08, 7.189581188639561e-08, 1.0778191690670518e-07, 1.6076086944770296e-07, 2.3853384253948997e-07, 3.5206166958605787e-07, 5.168491600742075e-07, 7.546943896191269e-07, 1.096054634522998e-06, 1.5832237285405396e-06, 2.274568699030637e-06, 3.2501381182378905e-06, 4.619032183114419e-06, 6.529016472440441e-06, 9.178968681574189e-06, 1.2834870979385407e-05, 1.785019981009563e-05, 2.4691718815512248e-05, 3.3971846586996595e-05, 4.6488945008279365e-05, 6.327704981927797e-05, 8.566673414545977e-05, 0.00011535894684242323, 0.00015451378646360139, 0.00020585624135346418, 0.0002728009268195138, 0.0003595977590334565, 0.00047150029784528085, 0.0006149581417380514, 0.0007978342427830351, 0.0010296473048919264, 0.0013218385163327787, 0.0016880607354193048, 0.002144486893754719, 0.0027101328135915306, 0.003407187878433448, 0.004261345089416883, 0.0053021200432018965, 0.006563146358312598, 0.008082433153380957, 0.009902568457231017, 0.012070851036046801, 0.014639332195157345, 0.017664748793166634, 0.021208329129830467, 0.02533545465713447, 0.03011516271147343, 0.035619478734416246, 0.041922570755789486, 0.04909972421739191, 0.057226141419867226, 0.06637557681647871, 0.07661882682932189, 0.08802210053997127, 0.10064530517116146, 0.11454028735509161, 0.12974907738378066, 0.14630218856528715, 0.16421702709865998, 0.18349646921107998, 0.2041276614259418, 0.22608109659734493, 0.24931001271205833, 0.2737501535042089, 0.29931991985734735, 0.32592092911359155, 0.353438986213345, 0.38174545658841713, 0.41069901653079466, 0.44014774299973586, 0.4699314921534094, 0.49988450490491293, 0.5298381690424713, 0.5596238613536766, 0.58907579005878, 0.618033757845909, 0.6463457689122885, 0.673870409493619, 0.7004789401048173, 0.7260570486864935, 0.7505062265172204, 0.7737447425053174, 0.7957082056735216, 0.8163497196545139, 0.8356396462198218, 0.8535650067317372, 0.8701285604936478, 0.8853476069472423, 0.8992525643178025, 0.9118853805605704, 0.9232978333535973, 0.9335497745680527, 0.9427073713718567, 0.9508413912053925, 0.9580255716765184, 0.9643351093483812, 0.9698452938311888, 0.9746303059121673, 0.9787621910032375, 0.9823100122398493, 0.9853391813538126, 0.9879109601310005, 0.9900821209506334, 0.9919047516252817, 0.9934261875045884, 0.9946890525105935, 0.9957313903426398, 0.9965868674044297, 0.9972850299293602, 0.9978515991718989, 0.9983087902542536, 0.9986756421799959, 0.9989683485348205, 0.9992005803918547, 0.9993837948464601, 0.9995275243642293, 0.9996396436952804, 0.9997266124641637, 0.9997936926784798, 0.9998451413132895, 0.9998843788344969, 0.999914135041131, 0.9999365739565955, 0.9999533997074109, 0.9999659454200855, 0.9999752471669089, 0.9999821049222269, 0.9999871323721072, 0.9999907972693873, 0.9999934538570808, 0.9999953687072556, 0.9999967411484126, 0.9999977192882791, 0.999998412484966, 0.9999989009801525, 0.9999992432844804, 0.9999994817978803, 0.9999996470554899, 0.9999997609121504, 0.9999998389137853, 0.9999998920508134, 0.9999999280455589, 0.9999999522909526, 0.9999999685302661, 0.9999999793459597, 0.999999986508868, 0.9999999912259417, 0.9999999943148447, 0.9999999963261783, 0.999999997628482, 0.9999999984669543, 0.9999999990037555, 0.9999999993454881, 0.9999999995618136, 0.9999999996979824, 0.999999999783213, 0.99999999983626, 0.9999999998690903, 0.9999999998892943, 0.9999999999016582, 0.9999999999091814, 0.9999999999137337, 0.9999999999164725, 0.9999999999181111, 0.9999999999190858, 0.9999999999196626, 0.9999999999200018, 0.9999999999202003, 0.9999999999203156, 0.9999999999203824, 0.9999999999204208], "type": "scatter", "uid": "84a35b8b-f972-4339-bbd3-a6542adb3037"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.07059640000000006, 0.0705964000000001, 0.07059640000000021, 0.07059640000000057, 0.07059640000000139, 0.07059640000000346, 0.07059640000000857, 0.0705964000000207, 0.07059640000004953, 0.07059640000011702, 0.07059640000027283, 0.07059640000062799, 0.07059640000142699, 0.07059640000320115, 0.0705964000070894, 0.07059640001549997, 0.07059640003345578, 0.07059640007129123, 0.07059640014997845, 0.07059640031149707, 0.07059640063872688, 0.07059640129305479, 0.07059640258442365, 0.07059640509988367, 0.0705964099360007, 0.07059641911274163, 0.07059643629943876, 0.07059646806881323, 0.07059652602999046, 0.0705966304005546, 0.07059681589511012, 0.07059714127942293, 0.07059770462432371, 0.07059866726551395, 0.07060029081987558, 0.07060299341851584, 0.07060743368057375, 0.07061463393733876, 0.07062615784321655, 0.07064436171474733, 0.07067274352980926, 0.07071641812796424, 0.07078275118630056, 0.07088218714826905, 0.07102930632841122, 0.07124414253422236, 0.07155378321657686, 0.07199425787271788, 0.07261269592637938, 0.07346970191567628, 0.07464185378618084, 0.07622418097612257, 0.07833242596755803, 0.08110484100924144, 0.0847032274420293, 0.08931289644472522, 0.09514122562521149, 0.10241451378206129, 0.11137290260699054, 0.1222632420686268, 0.13532992408160066, 0.15080388960937507, 0.16889021444636892, 0.18975488004325508, 0.21351151540941532, 0.240209030315453, 0.2698211261939858, 0.30223865163610864, 0.33726565457922786, 0.3746197740084916, 0.4139373226983092, 0.45478306284838954, 0.4966643011446535, 0.5390485669708984, 0.5813838261436506, 0.6231199572588505, 0.6637301041486846, 0.7027305291322817, 0.7396977264123373, 0.7742817976349344, 0.8062154147797587, 0.8353180634400349, 0.8614956330208395, 0.8847357619032687, 0.9050996238444643, 0.9227110350355942, 0.9377438589424945, 0.9504086894508089, 0.960939713178131, 0.9695825078661624, 0.9765833485661836, 0.9821803908452238, 0.986596902390483, 0.9900365388317038, 0.9926805184292617, 0.9946864496705812, 0.996188506511207, 0.9972986243274923, 0.9981083989373412, 0.9986914030432833, 0.9991056806356857, 0.9993962324847057, 0.9995973584818347, 0.9997347706337048, 0.9998274310894477, 0.9998891013922301, 0.9999296121235857, 0.9999558770650772, 0.9999726842562153, 0.999983299407409, 0.9999899165359281, 0.9999939877626779, 0.9999964600181431, 0.9999979417640231, 0.999998818293318, 0.9999993300593574, 0.9999996249688867, 0.9999997927018659, 0.9999998868605592, 0.9999999390298204, 0.9999999675584723, 0.9999999829563231, 0.9999999911589176, 0.9999999954716715, 0.9999999977097246, 0.9999999988560246, 0.9999999994355049, 0.9999999997246335, 0.9999999998670158, 0.9999999999362201, 0.9999999999694189, 0.9999999999851378, 0.9999999999924836, 0.9999999999958717, 0.9999999999974141, 0.9999999999981071, 0.9999999999984145, 0.999999999998549, 0.9999999999986071, 0.9999999999986319, 0.9999999999986424, 0.9999999999986467, 0.9999999999986484, 0.9999999999986492, 0.9999999999986494, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496], "type": "scatter", "uid": "e3367352-bc71-4d04-8285-3633466f3687"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "8a78ae72-bdbe-4988-89ff-6d20e178d9bf"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "c2a64b15-3492-4bda-b0b7-75429b801742"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "bc69accf-097f-4cc0-bd94-668061c3cb90"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} diff --git a/notebooks/notebooks_plotting/psych_results_date.json b/notebooks/notebooks_plotting/psych_results_date.json index 809d14e0..922f157f 100644 --- a/notebooks/notebooks_plotting/psych_results_date.json +++ b/notebooks/notebooks_plotting/psych_results_date.json @@ -1 +1 @@ -{"data": [{"error_y": {"array": [0.0, 0.0, -0.25, -0.23076923076923078, -0.35518873481714125, -0.3110268897594517, -0.3661515606106232, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.3282944887649286, -0.2505841217295865, -0.3551887348171412, -0.3110268897594517, -0.2857142857142857, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "3a7037cf-4902-400c-9aa6-f7f978af5c67"}, {"error_y": {"array": [0.0, -0.05454545454545454, -0.1187682088251601, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, 0.0, 0.0], "arrayminus": [-0.0, -0.06566383061785525, -0.11876820882516007, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, -0.0, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "322696ae-83ed-4107-898d-5b6b8cc0d63e"}, {"error_y": {"array": [0.0, -0.18181818181818182, -0.3390610900368658, -0.18587411845639557, -0.1763356717194452, -0.13289945533274472, -0.04513776784114376, 0.0, 0.0], "arrayminus": [-0.0, -0.24937629847580928, -0.3390610900368658, -0.09090909090909094, -0.1763356717194452, -0.13289945533274472, -0.021276595744680882, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "f5a462d3-2daf-4b96-8bba-bdd7a12b0317"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.148710000005551e-05, 5.1487100000166524e-05, 5.1487100000444066e-05, 5.1487100001110166e-05, 5.148710000283092e-05, 5.148710000710506e-05, 5.148710001731858e-05, 5.148710004190876e-05, 5.148710010002594e-05, 5.148710023557719e-05, 5.148710054747829e-05, 5.148710125587513e-05, 5.1487102843523326e-05, 5.148710635481142e-05, 5.148711401773128e-05, 5.148713052023579e-05, 5.148716558982027e-05, 5.148723913220267e-05, 5.148739131668088e-05, 5.1487702079082496e-05, 5.148832827823909e-05, 5.148957342966708e-05, 5.149201662158007e-05, 5.149674724885817e-05, 5.1505785941648665e-05, 5.152282785127366e-05, 5.155453496017167e-05, 5.1612748067837364e-05, 5.171821363310492e-05, 5.190676355215905e-05, 5.223939843114114e-05, 5.281847367163163e-05, 5.381325582621284e-05, 5.549960210755142e-05, 5.832052568651565e-05, 6.297704785773204e-05, 7.056208699522571e-05, 8.275422241290197e-05, 0.00010209293389813513, 0.0001323621447998328, 0.00017911417522482154, 0.00025037086945222905, 0.00035754172154909886, 0.0005165989900453897, 0.0007495454863251326, 0.0010862001808445913, 0.0015663082441106676, 0.0022419541671934396, 0.0031802183972048114, 0.004465969780993039, 0.006204629870257659, 0.008524684527102859, 0.01157965907687044, 0.01554922325900313, 0.020639060716709713, 0.02707913466914598, 0.035120016007007655, 0.04502701939193353, 0.05707202013137238, 0.0715229972586108, 0.08863155740249337, 0.10861892381432303, 0.13166110327152603, 0.15787414409132716, 0.1873005433077653, 0.21989792456464982, 0.2555310710256541, 0.2939682500146915, 0.33488251109981304, 0.3778582934709659, 0.4224032710975076, 0.46796493465141026, 0.5139510023847904, 0.5597524127058664, 0.6047674176143036, 0.6484251954878918, 0.6902074457418479, 0.7296666114468219, 0.7664396777185501, 0.8002568790255881, 0.8309450745793426, 0.8584259721959082, 0.8827097553054325, 0.9038849613802499, 0.9221056511414966, 0.9375769882141242, 0.9505403233230932, 0.9612587615986998, 0.9700040097382817, 0.9770450790986316, 0.9826391886454484, 0.9870249921213685, 0.9904180652715971, 0.9930084431941061, 0.9949598997503761, 0.9964106093749253, 0.9974748208619236, 0.9982451941839692, 0.9987954952662655, 0.9991834002290901, 0.9994532214722337, 0.9996384265001328, 0.9997638720426448, 0.9998477182687314, 0.999903019859815, 0.9999390128187432, 0.9999621293831195, 0.9999767799637589, 0.9999859424258711, 0.9999915969407187, 0.9999950404741534, 0.9999971098484649, 0.9999983370039505, 0.9999990551055896, 0.9999994697712045, 0.999999706056071, 0.9999998389176964, 0.999999912638317, 0.9999999530032436, 0.9999999748127134, 0.9999999864408949, 0.9999999925588212, 0.9999999957351279, 0.999999997362423, 0.9999999981851126, 0.9999999985955352, 0.9999999987975824, 0.9999999988957343, 0.9999999989427856, 0.9999999989650429, 0.9999999989754322, 0.999999998980218, 0.9999999989823932, 0.999999998983369, 0.9999999989838009, 0.9999999989839894, 0.9999999989840708, 0.9999999989841053, 0.9999999989841198, 0.9999999989841258, 0.9999999989841284, 0.9999999989841293, 0.9999999989841297, 0.9999999989841298, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413], "type": "scatter", "uid": "db314319-5d0f-41f9-830a-5c20ce0ff594"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.469223106871187e-10, 2.4694418208069666e-10, 2.4698242926388254e-10, 2.4704887611188464e-10, 2.4716378419489587e-10, 2.473614038932146e-10, 2.4769918924834655e-10, 2.482735631299489e-10, 2.4924445316466665e-10, 2.5087659203263534e-10, 2.53604687559005e-10, 2.581391714570014e-10, 2.656335654488335e-10, 2.779503241688532e-10, 2.980785010652833e-10, 3.307870036276932e-10, 3.836395037646289e-10, 4.685610735131503e-10, 6.042420399309649e-10, 8.198021651657044e-10, 1.1603403737974581e-09, 1.6952886259848386e-09, 2.530903092222112e-09, 3.828824473280767e-09, 5.8334770276918354e-09, 8.912253316153698e-09, 1.361406736383169e-08, 2.0754113859989333e-08, 3.1535756435197674e-08, 4.772464765747754e-08, 7.189581188639561e-08, 1.0778191690670518e-07, 1.6076086944770296e-07, 2.3853384253948997e-07, 3.5206166958605787e-07, 5.168491600742075e-07, 7.546943896191269e-07, 1.096054634522998e-06, 1.5832237285405396e-06, 2.274568699030637e-06, 3.2501381182378905e-06, 4.619032183114419e-06, 6.529016472440441e-06, 9.178968681574189e-06, 1.2834870979385407e-05, 1.785019981009563e-05, 2.4691718815512248e-05, 3.3971846586996595e-05, 4.6488945008279365e-05, 6.327704981927797e-05, 8.566673414545977e-05, 0.00011535894684242323, 0.00015451378646360139, 0.00020585624135346418, 0.0002728009268195138, 0.0003595977590334565, 0.00047150029784528085, 0.0006149581417380514, 0.0007978342427830351, 0.0010296473048919264, 0.0013218385163327787, 0.0016880607354193048, 0.002144486893754719, 0.0027101328135915306, 0.003407187878433448, 0.004261345089416883, 0.0053021200432018965, 0.006563146358312598, 0.008082433153380957, 0.009902568457231017, 0.012070851036046801, 0.014639332195157345, 0.017664748793166634, 0.021208329129830467, 0.02533545465713447, 0.03011516271147343, 0.035619478734416246, 0.041922570755789486, 0.04909972421739191, 0.057226141419867226, 0.06637557681647871, 0.07661882682932189, 0.08802210053997127, 0.10064530517116146, 0.11454028735509161, 0.12974907738378066, 0.14630218856528715, 0.16421702709865998, 0.18349646921107998, 0.2041276614259418, 0.22608109659734493, 0.24931001271205833, 0.2737501535042089, 0.29931991985734735, 0.32592092911359155, 0.353438986213345, 0.38174545658841713, 0.41069901653079466, 0.44014774299973586, 0.4699314921534094, 0.49988450490491293, 0.5298381690424713, 0.5596238613536766, 0.58907579005878, 0.618033757845909, 0.6463457689122885, 0.673870409493619, 0.7004789401048173, 0.7260570486864935, 0.7505062265172204, 0.7737447425053174, 0.7957082056735216, 0.8163497196545139, 0.8356396462198218, 0.8535650067317372, 0.8701285604936478, 0.8853476069472423, 0.8992525643178025, 0.9118853805605704, 0.9232978333535973, 0.9335497745680527, 0.9427073713718567, 0.9508413912053925, 0.9580255716765184, 0.9643351093483812, 0.9698452938311888, 0.9746303059121673, 0.9787621910032375, 0.9823100122398493, 0.9853391813538126, 0.9879109601310005, 0.9900821209506334, 0.9919047516252817, 0.9934261875045884, 0.9946890525105935, 0.9957313903426398, 0.9965868674044297, 0.9972850299293602, 0.9978515991718989, 0.9983087902542536, 0.9986756421799959, 0.9989683485348205, 0.9992005803918547, 0.9993837948464601, 0.9995275243642293, 0.9996396436952804, 0.9997266124641637, 0.9997936926784798, 0.9998451413132895, 0.9998843788344969, 0.999914135041131, 0.9999365739565955, 0.9999533997074109, 0.9999659454200855, 0.9999752471669089, 0.9999821049222269, 0.9999871323721072, 0.9999907972693873, 0.9999934538570808, 0.9999953687072556, 0.9999967411484126, 0.9999977192882791, 0.999998412484966, 0.9999989009801525, 0.9999992432844804, 0.9999994817978803, 0.9999996470554899, 0.9999997609121504, 0.9999998389137853, 0.9999998920508134, 0.9999999280455589, 0.9999999522909526, 0.9999999685302661, 0.9999999793459597, 0.999999986508868, 0.9999999912259417, 0.9999999943148447, 0.9999999963261783, 0.999999997628482, 0.9999999984669543, 0.9999999990037555, 0.9999999993454881, 0.9999999995618136, 0.9999999996979824, 0.999999999783213, 0.99999999983626, 0.9999999998690903, 0.9999999998892943, 0.9999999999016582, 0.9999999999091814, 0.9999999999137337, 0.9999999999164725, 0.9999999999181111, 0.9999999999190858, 0.9999999999196626, 0.9999999999200018, 0.9999999999202003, 0.9999999999203156, 0.9999999999203824, 0.9999999999204208], "type": "scatter", "uid": "84a35b8b-f972-4339-bbd3-a6542adb3037"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.07059640000000006, 0.0705964000000001, 0.07059640000000021, 0.07059640000000057, 0.07059640000000139, 0.07059640000000346, 0.07059640000000857, 0.0705964000000207, 0.07059640000004953, 0.07059640000011702, 0.07059640000027283, 0.07059640000062799, 0.07059640000142699, 0.07059640000320115, 0.0705964000070894, 0.07059640001549997, 0.07059640003345578, 0.07059640007129123, 0.07059640014997845, 0.07059640031149707, 0.07059640063872688, 0.07059640129305479, 0.07059640258442365, 0.07059640509988367, 0.0705964099360007, 0.07059641911274163, 0.07059643629943876, 0.07059646806881323, 0.07059652602999046, 0.0705966304005546, 0.07059681589511012, 0.07059714127942293, 0.07059770462432371, 0.07059866726551395, 0.07060029081987558, 0.07060299341851584, 0.07060743368057375, 0.07061463393733876, 0.07062615784321655, 0.07064436171474733, 0.07067274352980926, 0.07071641812796424, 0.07078275118630056, 0.07088218714826905, 0.07102930632841122, 0.07124414253422236, 0.07155378321657686, 0.07199425787271788, 0.07261269592637938, 0.07346970191567628, 0.07464185378618084, 0.07622418097612257, 0.07833242596755803, 0.08110484100924144, 0.0847032274420293, 0.08931289644472522, 0.09514122562521149, 0.10241451378206129, 0.11137290260699054, 0.1222632420686268, 0.13532992408160066, 0.15080388960937507, 0.16889021444636892, 0.18975488004325508, 0.21351151540941532, 0.240209030315453, 0.2698211261939858, 0.30223865163610864, 0.33726565457922786, 0.3746197740084916, 0.4139373226983092, 0.45478306284838954, 0.4966643011446535, 0.5390485669708984, 0.5813838261436506, 0.6231199572588505, 0.6637301041486846, 0.7027305291322817, 0.7396977264123373, 0.7742817976349344, 0.8062154147797587, 0.8353180634400349, 0.8614956330208395, 0.8847357619032687, 0.9050996238444643, 0.9227110350355942, 0.9377438589424945, 0.9504086894508089, 0.960939713178131, 0.9695825078661624, 0.9765833485661836, 0.9821803908452238, 0.986596902390483, 0.9900365388317038, 0.9926805184292617, 0.9946864496705812, 0.996188506511207, 0.9972986243274923, 0.9981083989373412, 0.9986914030432833, 0.9991056806356857, 0.9993962324847057, 0.9995973584818347, 0.9997347706337048, 0.9998274310894477, 0.9998891013922301, 0.9999296121235857, 0.9999558770650772, 0.9999726842562153, 0.999983299407409, 0.9999899165359281, 0.9999939877626779, 0.9999964600181431, 0.9999979417640231, 0.999998818293318, 0.9999993300593574, 0.9999996249688867, 0.9999997927018659, 0.9999998868605592, 0.9999999390298204, 0.9999999675584723, 0.9999999829563231, 0.9999999911589176, 0.9999999954716715, 0.9999999977097246, 0.9999999988560246, 0.9999999994355049, 0.9999999997246335, 0.9999999998670158, 0.9999999999362201, 0.9999999999694189, 0.9999999999851378, 0.9999999999924836, 0.9999999999958717, 0.9999999999974141, 0.9999999999981071, 0.9999999999984145, 0.999999999998549, 0.9999999999986071, 0.9999999999986319, 0.9999999999986424, 0.9999999999986467, 0.9999999999986484, 0.9999999999986492, 0.9999999999986494, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496], "type": "scatter", "uid": "e3367352-bc71-4d04-8285-3633466f3687"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "8a78ae72-bdbe-4988-89ff-6d20e178d9bf"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "c2a64b15-3492-4bda-b0b7-75429b801742"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "bc69accf-097f-4cc0-bd94-668061c3cb90"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} \ No newline at end of file +{"data": [{"error_y": {"array": [0.0, 0.0, -0.25, -0.23076923076923078, -0.35518873481714125, -0.3110268897594517, -0.3661515606106232, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.3282944887649286, -0.2505841217295865, -0.3551887348171412, -0.3110268897594517, -0.2857142857142857, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "3a7037cf-4902-400c-9aa6-f7f978af5c67"}, {"error_y": {"array": [0.0, -0.05454545454545454, -0.1187682088251601, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, 0.0, 0.0], "arrayminus": [-0.0, -0.06566383061785525, -0.11876820882516007, -0.1505663166616713, -0.1762014489033421, -0.2595395819444333, -0.27461367045796736, -0.0, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "322696ae-83ed-4107-898d-5b6b8cc0d63e"}, {"error_y": {"array": [0.0, -0.18181818181818182, -0.3390610900368658, -0.18587411845639557, -0.1763356717194452, -0.13289945533274472, -0.04513776784114376, 0.0, 0.0], "arrayminus": [-0.0, -0.24937629847580928, -0.3390610900368658, -0.09090909090909094, -0.1763356717194452, -0.13289945533274472, -0.021276595744680882, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "f5a462d3-2daf-4b96-8bba-bdd7a12b0317"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.14871e-05, 5.148710000005551e-05, 5.1487100000166524e-05, 5.1487100000444066e-05, 5.1487100001110166e-05, 5.148710000283092e-05, 5.148710000710506e-05, 5.148710001731858e-05, 5.148710004190876e-05, 5.148710010002594e-05, 5.148710023557719e-05, 5.148710054747829e-05, 5.148710125587513e-05, 5.1487102843523326e-05, 5.148710635481142e-05, 5.148711401773128e-05, 5.148713052023579e-05, 5.148716558982027e-05, 5.148723913220267e-05, 5.148739131668088e-05, 5.1487702079082496e-05, 5.148832827823909e-05, 5.148957342966708e-05, 5.149201662158007e-05, 5.149674724885817e-05, 5.1505785941648665e-05, 5.152282785127366e-05, 5.155453496017167e-05, 5.1612748067837364e-05, 5.171821363310492e-05, 5.190676355215905e-05, 5.223939843114114e-05, 5.281847367163163e-05, 5.381325582621284e-05, 5.549960210755142e-05, 5.832052568651565e-05, 6.297704785773204e-05, 7.056208699522571e-05, 8.275422241290197e-05, 0.00010209293389813513, 0.0001323621447998328, 0.00017911417522482154, 0.00025037086945222905, 0.00035754172154909886, 0.0005165989900453897, 0.0007495454863251326, 0.0010862001808445913, 0.0015663082441106676, 0.0022419541671934396, 0.0031802183972048114, 0.004465969780993039, 0.006204629870257659, 0.008524684527102859, 0.01157965907687044, 0.01554922325900313, 0.020639060716709713, 0.02707913466914598, 0.035120016007007655, 0.04502701939193353, 0.05707202013137238, 0.0715229972586108, 0.08863155740249337, 0.10861892381432303, 0.13166110327152603, 0.15787414409132716, 0.1873005433077653, 0.21989792456464982, 0.2555310710256541, 0.2939682500146915, 0.33488251109981304, 0.3778582934709659, 0.4224032710975076, 0.46796493465141026, 0.5139510023847904, 0.5597524127058664, 0.6047674176143036, 0.6484251954878918, 0.6902074457418479, 0.7296666114468219, 0.7664396777185501, 0.8002568790255881, 0.8309450745793426, 0.8584259721959082, 0.8827097553054325, 0.9038849613802499, 0.9221056511414966, 0.9375769882141242, 0.9505403233230932, 0.9612587615986998, 0.9700040097382817, 0.9770450790986316, 0.9826391886454484, 0.9870249921213685, 0.9904180652715971, 0.9930084431941061, 0.9949598997503761, 0.9964106093749253, 0.9974748208619236, 0.9982451941839692, 0.9987954952662655, 0.9991834002290901, 0.9994532214722337, 0.9996384265001328, 0.9997638720426448, 0.9998477182687314, 0.999903019859815, 0.9999390128187432, 0.9999621293831195, 0.9999767799637589, 0.9999859424258711, 0.9999915969407187, 0.9999950404741534, 0.9999971098484649, 0.9999983370039505, 0.9999990551055896, 0.9999994697712045, 0.999999706056071, 0.9999998389176964, 0.999999912638317, 0.9999999530032436, 0.9999999748127134, 0.9999999864408949, 0.9999999925588212, 0.9999999957351279, 0.999999997362423, 0.9999999981851126, 0.9999999985955352, 0.9999999987975824, 0.9999999988957343, 0.9999999989427856, 0.9999999989650429, 0.9999999989754322, 0.999999998980218, 0.9999999989823932, 0.999999998983369, 0.9999999989838009, 0.9999999989839894, 0.9999999989840708, 0.9999999989841053, 0.9999999989841198, 0.9999999989841258, 0.9999999989841284, 0.9999999989841293, 0.9999999989841297, 0.9999999989841298, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413, 0.99999999898413], "type": "scatter", "uid": "db314319-5d0f-41f9-830a-5c20ce0ff594"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.469223106871187e-10, 2.4694418208069666e-10, 2.4698242926388254e-10, 2.4704887611188464e-10, 2.4716378419489587e-10, 2.473614038932146e-10, 2.4769918924834655e-10, 2.482735631299489e-10, 2.4924445316466665e-10, 2.5087659203263534e-10, 2.53604687559005e-10, 2.581391714570014e-10, 2.656335654488335e-10, 2.779503241688532e-10, 2.980785010652833e-10, 3.307870036276932e-10, 3.836395037646289e-10, 4.685610735131503e-10, 6.042420399309649e-10, 8.198021651657044e-10, 1.1603403737974581e-09, 1.6952886259848386e-09, 2.530903092222112e-09, 3.828824473280767e-09, 5.8334770276918354e-09, 8.912253316153698e-09, 1.361406736383169e-08, 2.0754113859989333e-08, 3.1535756435197674e-08, 4.772464765747754e-08, 7.189581188639561e-08, 1.0778191690670518e-07, 1.6076086944770296e-07, 2.3853384253948997e-07, 3.5206166958605787e-07, 5.168491600742075e-07, 7.546943896191269e-07, 1.096054634522998e-06, 1.5832237285405396e-06, 2.274568699030637e-06, 3.2501381182378905e-06, 4.619032183114419e-06, 6.529016472440441e-06, 9.178968681574189e-06, 1.2834870979385407e-05, 1.785019981009563e-05, 2.4691718815512248e-05, 3.3971846586996595e-05, 4.6488945008279365e-05, 6.327704981927797e-05, 8.566673414545977e-05, 0.00011535894684242323, 0.00015451378646360139, 0.00020585624135346418, 0.0002728009268195138, 0.0003595977590334565, 0.00047150029784528085, 0.0006149581417380514, 0.0007978342427830351, 0.0010296473048919264, 0.0013218385163327787, 0.0016880607354193048, 0.002144486893754719, 0.0027101328135915306, 0.003407187878433448, 0.004261345089416883, 0.0053021200432018965, 0.006563146358312598, 0.008082433153380957, 0.009902568457231017, 0.012070851036046801, 0.014639332195157345, 0.017664748793166634, 0.021208329129830467, 0.02533545465713447, 0.03011516271147343, 0.035619478734416246, 0.041922570755789486, 0.04909972421739191, 0.057226141419867226, 0.06637557681647871, 0.07661882682932189, 0.08802210053997127, 0.10064530517116146, 0.11454028735509161, 0.12974907738378066, 0.14630218856528715, 0.16421702709865998, 0.18349646921107998, 0.2041276614259418, 0.22608109659734493, 0.24931001271205833, 0.2737501535042089, 0.29931991985734735, 0.32592092911359155, 0.353438986213345, 0.38174545658841713, 0.41069901653079466, 0.44014774299973586, 0.4699314921534094, 0.49988450490491293, 0.5298381690424713, 0.5596238613536766, 0.58907579005878, 0.618033757845909, 0.6463457689122885, 0.673870409493619, 0.7004789401048173, 0.7260570486864935, 0.7505062265172204, 0.7737447425053174, 0.7957082056735216, 0.8163497196545139, 0.8356396462198218, 0.8535650067317372, 0.8701285604936478, 0.8853476069472423, 0.8992525643178025, 0.9118853805605704, 0.9232978333535973, 0.9335497745680527, 0.9427073713718567, 0.9508413912053925, 0.9580255716765184, 0.9643351093483812, 0.9698452938311888, 0.9746303059121673, 0.9787621910032375, 0.9823100122398493, 0.9853391813538126, 0.9879109601310005, 0.9900821209506334, 0.9919047516252817, 0.9934261875045884, 0.9946890525105935, 0.9957313903426398, 0.9965868674044297, 0.9972850299293602, 0.9978515991718989, 0.9983087902542536, 0.9986756421799959, 0.9989683485348205, 0.9992005803918547, 0.9993837948464601, 0.9995275243642293, 0.9996396436952804, 0.9997266124641637, 0.9997936926784798, 0.9998451413132895, 0.9998843788344969, 0.999914135041131, 0.9999365739565955, 0.9999533997074109, 0.9999659454200855, 0.9999752471669089, 0.9999821049222269, 0.9999871323721072, 0.9999907972693873, 0.9999934538570808, 0.9999953687072556, 0.9999967411484126, 0.9999977192882791, 0.999998412484966, 0.9999989009801525, 0.9999992432844804, 0.9999994817978803, 0.9999996470554899, 0.9999997609121504, 0.9999998389137853, 0.9999998920508134, 0.9999999280455589, 0.9999999522909526, 0.9999999685302661, 0.9999999793459597, 0.999999986508868, 0.9999999912259417, 0.9999999943148447, 0.9999999963261783, 0.999999997628482, 0.9999999984669543, 0.9999999990037555, 0.9999999993454881, 0.9999999995618136, 0.9999999996979824, 0.999999999783213, 0.99999999983626, 0.9999999998690903, 0.9999999998892943, 0.9999999999016582, 0.9999999999091814, 0.9999999999137337, 0.9999999999164725, 0.9999999999181111, 0.9999999999190858, 0.9999999999196626, 0.9999999999200018, 0.9999999999202003, 0.9999999999203156, 0.9999999999203824, 0.9999999999204208], "type": "scatter", "uid": "84a35b8b-f972-4339-bbd3-a6542adb3037"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.0705964, 0.07059640000000006, 0.0705964000000001, 0.07059640000000021, 0.07059640000000057, 0.07059640000000139, 0.07059640000000346, 0.07059640000000857, 0.0705964000000207, 0.07059640000004953, 0.07059640000011702, 0.07059640000027283, 0.07059640000062799, 0.07059640000142699, 0.07059640000320115, 0.0705964000070894, 0.07059640001549997, 0.07059640003345578, 0.07059640007129123, 0.07059640014997845, 0.07059640031149707, 0.07059640063872688, 0.07059640129305479, 0.07059640258442365, 0.07059640509988367, 0.0705964099360007, 0.07059641911274163, 0.07059643629943876, 0.07059646806881323, 0.07059652602999046, 0.0705966304005546, 0.07059681589511012, 0.07059714127942293, 0.07059770462432371, 0.07059866726551395, 0.07060029081987558, 0.07060299341851584, 0.07060743368057375, 0.07061463393733876, 0.07062615784321655, 0.07064436171474733, 0.07067274352980926, 0.07071641812796424, 0.07078275118630056, 0.07088218714826905, 0.07102930632841122, 0.07124414253422236, 0.07155378321657686, 0.07199425787271788, 0.07261269592637938, 0.07346970191567628, 0.07464185378618084, 0.07622418097612257, 0.07833242596755803, 0.08110484100924144, 0.0847032274420293, 0.08931289644472522, 0.09514122562521149, 0.10241451378206129, 0.11137290260699054, 0.1222632420686268, 0.13532992408160066, 0.15080388960937507, 0.16889021444636892, 0.18975488004325508, 0.21351151540941532, 0.240209030315453, 0.2698211261939858, 0.30223865163610864, 0.33726565457922786, 0.3746197740084916, 0.4139373226983092, 0.45478306284838954, 0.4966643011446535, 0.5390485669708984, 0.5813838261436506, 0.6231199572588505, 0.6637301041486846, 0.7027305291322817, 0.7396977264123373, 0.7742817976349344, 0.8062154147797587, 0.8353180634400349, 0.8614956330208395, 0.8847357619032687, 0.9050996238444643, 0.9227110350355942, 0.9377438589424945, 0.9504086894508089, 0.960939713178131, 0.9695825078661624, 0.9765833485661836, 0.9821803908452238, 0.986596902390483, 0.9900365388317038, 0.9926805184292617, 0.9946864496705812, 0.996188506511207, 0.9972986243274923, 0.9981083989373412, 0.9986914030432833, 0.9991056806356857, 0.9993962324847057, 0.9995973584818347, 0.9997347706337048, 0.9998274310894477, 0.9998891013922301, 0.9999296121235857, 0.9999558770650772, 0.9999726842562153, 0.999983299407409, 0.9999899165359281, 0.9999939877626779, 0.9999964600181431, 0.9999979417640231, 0.999998818293318, 0.9999993300593574, 0.9999996249688867, 0.9999997927018659, 0.9999998868605592, 0.9999999390298204, 0.9999999675584723, 0.9999999829563231, 0.9999999911589176, 0.9999999954716715, 0.9999999977097246, 0.9999999988560246, 0.9999999994355049, 0.9999999997246335, 0.9999999998670158, 0.9999999999362201, 0.9999999999694189, 0.9999999999851378, 0.9999999999924836, 0.9999999999958717, 0.9999999999974141, 0.9999999999981071, 0.9999999999984145, 0.999999999998549, 0.9999999999986071, 0.9999999999986319, 0.9999999999986424, 0.9999999999986467, 0.9999999999986484, 0.9999999999986492, 0.9999999999986494, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496, 0.9999999999986496], "type": "scatter", "uid": "e3367352-bc71-4d04-8285-3633466f3687"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.25, 0.23076923076923078, 0.4444444444444444, 0.36363636363636365, 0.7142857142857143, 1.0, 1.0], "type": "scatter", "uid": "8a78ae72-bdbe-4988-89ff-6d20e178d9bf"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.05454545454545454, 0.23728813559322035, 0.40816326530612246, 0.5833333333333334, 0.625, 0.6428571428571429, 1.0, 1.0], "type": "scatter", "uid": "c2a64b15-3492-4bda-b0b7-75429b801742"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.18181818181818182, 0.5, 0.9090909090909091, 0.8181818181818182, 0.7777777777777778, 0.9787234042553191, 1.0, 1.0], "type": "scatter", "uid": "bc69accf-097f-4cc0-bd94-668061c3cb90"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} diff --git a/notebooks/notebooks_plotting/rasters.json b/notebooks/notebooks_plotting/rasters.json index 0e2d5599..9a6c3b14 100644 --- a/notebooks/notebooks_plotting/rasters.json +++ b/notebooks/notebooks_plotting/rasters.json @@ -1 +1 @@ -{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 692.58], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 692.58, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 692.58, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to stim on", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 692.58], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 692.58], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 692.58, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 692.58, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to stim on", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 692.58], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/rasters_contrast.json b/notebooks/notebooks_plotting/rasters_contrast.json index e5bf9414..acec363e 100644 --- a/notebooks/notebooks_plotting/rasters_contrast.json +++ b/notebooks/notebooks_plotting/rasters_contrast.json @@ -1 +1 @@ -{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 271.32], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 271.32, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 271.32, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 271.32], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 271.32], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 271.32, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 271.32, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 271.32], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/rasters_feedback.json b/notebooks/notebooks_plotting/rasters_feedback.json index e5bf9414..acec363e 100644 --- a/notebooks/notebooks_plotting/rasters_feedback.json +++ b/notebooks/notebooks_plotting/rasters_feedback.json @@ -1 +1 @@ -{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 271.32], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 271.32, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 271.32, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 271.32], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 271.32], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 271.32, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 271.32, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to feedback", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 271.32], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/rasters_feedback_type.json b/notebooks/notebooks_plotting/rasters_feedback_type.json index 0e2d5599..9a6c3b14 100644 --- a/notebooks/notebooks_plotting/rasters_feedback_type.json +++ b/notebooks/notebooks_plotting/rasters_feedback_type.json @@ -1 +1 @@ -{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 692.58], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 692.58, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 692.58, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to stim on", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 692.58], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} \ No newline at end of file +{"data": [{"marker": {"opacity": 0}, "mode": "markers", "showlegend": false, "x": [-1, 1], "y": [0, 692.58], "type": "scatter"}, {"fill": "tozeroy", "fillcolor": "rgba(218, 59, 70, 0.5)", "mode": "none", "name": "Incorrect", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}, {"fill": "tonexty", "fillcolor": "rgba(65, 124, 168, 0.5)", "mode": "none", "name": "Correct", "x": [-2, -1], "y": [-2, -1], "type": "scatter"}], "layout": {"height": 370, "images": [{"layer": "below", "sizex": 2, "sizey": 692.58, "sizing": "stretch", "source": "data:image/png;base64, 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", "x": -1, "xref": "x", "y": 692.58, "yref": "y"}], "margin": {"b": 40, "l": 50, "pad": 0, "r": 30, "t": 80}, "title": {"text": "Raster, aligned to stim on", "x": 0.21, "y": 0.87}, "width": 580, "xaxis": {"range": [-1, 1], "showgrid": false, "title": {"text": "Time (sec)"}}, "yaxis": {"range": [0, 692.58], "showgrid": false, "title": {"text": "Trial idx"}}, "template": {"data": {"barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2}}}}} diff --git a/notebooks/notebooks_plotting/reaction_time_contrast.json b/notebooks/notebooks_plotting/reaction_time_contrast.json index fd70981a..534ab78e 100644 --- a/notebooks/notebooks_plotting/reaction_time_contrast.json +++ b/notebooks/notebooks_plotting/reaction_time_contrast.json @@ -1 +1 @@ -{"data": [{"error_y": {"array": [0.007649999999991053, 0.005400000000001626, 0.0, 0.0, 0.04829999999999757, 0.049450000000000216, 0.017699999999990723, 0.0005999999999986017, 0.00409999999999755], "arrayminus": [0.01724999999998289, 0.015299999999996317, 0.008200000000016416, 0.05299999999999727, 0.08979999999999855, 0.056100000000000705, 0.05010000000001469, 0.006599999999998829, 0.015400000000003189], "type": "data", "visible": true}, "marker": {"color": "black", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.5", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.26574999999998994, 0.29939999999999856, 0.26660000000001105, 0.35540000000000305, 0.37684999999999746, 0.3288000000000011, 0.3030000000000115, 0.23440000000000083, 0.21240000000000236], "type": "scatter", "uid": "5a8e0351-5e8b-4bce-8607-98a16e1ac505"}, {"error_y": {"array": [0.0, 0.0027999999999792635, 0.08000000000004093, 0.06319999999993797, 0.03795000000005189, 0.008799999999780539, 0.005199999999945248, 0.013049999999992679, 0.0036000000001195076], "arrayminus": [0.022699999999815645, 0.030099999999947613, 0.042799999999942884, 0.07060000000006994, 0.020000000000010232, 0.02475000000026739, 0.010499999999979082, 0.0027000000000327873, 0.011999999999943611], "type": "data", "visible": true}, "marker": {"color": "cornflowerblue", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2687999999998283, 0.28890000000001237, 0.3614000000000033, 0.3905000000000314, 0.3476999999999464, 0.31825000000026193, 0.294399999999996, 0.273050000000012, 0.2647999999999229], "type": "scatter", "uid": "2bc04796-6c61-4b5f-9219-f782e5a8ccd5"}, {"error_y": {"array": [0.011799999999936972, 0.01965000000012651, 0.0050999999999703505, 0.027599999999893043, 0.09535000000005311, 0.10114999999993302, 0.008000000000038199, 0.036599999999907595, 0.03489999999987958], "arrayminus": [0.01850000000001728, 0.0034499999999582087, 0.05945000000019718, 0.0784000000001015, 0.05495000000001937, 0.06670000000002574, 0.011350000000049931, 0.07150000000012824, 0.021200000000135333], "type": "data", "visible": true}, "marker": {"color": "orange", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.283800000000042, 0.28174999999993133, 0.35610000000008313, 0.4170000000001437, 0.4442500000000109, 0.5112000000000307, 0.34225000000003547, 0.34260000000011814, 0.24510000000009313], "type": "scatter", "uid": "2b5a087c-e997-40b8-a969-1c19732ac3d9"}], "layout": {"height": 400, "title": {"text": "Reaction time - contrast"}, "width": 630, "xaxis": {"title": {"text": "Contrast(%)"}}, "yaxis": {"title": {"text": "Reaction time (s)"}}}} \ No newline at end of file +{"data": [{"error_y": {"array": [0.007649999999991053, 0.005400000000001626, 0.0, 0.0, 0.04829999999999757, 0.049450000000000216, 0.017699999999990723, 0.0005999999999986017, 0.00409999999999755], "arrayminus": [0.01724999999998289, 0.015299999999996317, 0.008200000000016416, 0.05299999999999727, 0.08979999999999855, 0.056100000000000705, 0.05010000000001469, 0.006599999999998829, 0.015400000000003189], "type": "data", "visible": true}, "marker": {"color": "black", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.5", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.26574999999998994, 0.29939999999999856, 0.26660000000001105, 0.35540000000000305, 0.37684999999999746, 0.3288000000000011, 0.3030000000000115, 0.23440000000000083, 0.21240000000000236], "type": "scatter", "uid": "5a8e0351-5e8b-4bce-8607-98a16e1ac505"}, {"error_y": {"array": [0.0, 0.0027999999999792635, 0.08000000000004093, 0.06319999999993797, 0.03795000000005189, 0.008799999999780539, 0.005199999999945248, 0.013049999999992679, 0.0036000000001195076], "arrayminus": [0.022699999999815645, 0.030099999999947613, 0.042799999999942884, 0.07060000000006994, 0.020000000000010232, 0.02475000000026739, 0.010499999999979082, 0.0027000000000327873, 0.011999999999943611], "type": "data", "visible": true}, "marker": {"color": "cornflowerblue", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2687999999998283, 0.28890000000001237, 0.3614000000000033, 0.3905000000000314, 0.3476999999999464, 0.31825000000026193, 0.294399999999996, 0.273050000000012, 0.2647999999999229], "type": "scatter", "uid": "2bc04796-6c61-4b5f-9219-f782e5a8ccd5"}, {"error_y": {"array": [0.011799999999936972, 0.01965000000012651, 0.0050999999999703505, 0.027599999999893043, 0.09535000000005311, 0.10114999999993302, 0.008000000000038199, 0.036599999999907595, 0.03489999999987958], "arrayminus": [0.01850000000001728, 0.0034499999999582087, 0.05945000000019718, 0.0784000000001015, 0.05495000000001937, 0.06670000000002574, 0.011350000000049931, 0.07150000000012824, 0.021200000000135333], "type": "data", "visible": true}, "marker": {"color": "orange", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.283800000000042, 0.28174999999993133, 0.35610000000008313, 0.4170000000001437, 0.4442500000000109, 0.5112000000000307, 0.34225000000003547, 0.34260000000011814, 0.24510000000009313], "type": "scatter", "uid": "2b5a087c-e997-40b8-a969-1c19732ac3d9"}], "layout": {"height": 400, "title": {"text": "Reaction time - contrast"}, "width": 630, "xaxis": {"title": {"text": "Contrast(%)"}}, "yaxis": {"title": {"text": "Reaction time (s)"}}}} diff --git a/notebooks/notebooks_plotting/reaction_time_trial_number.json b/notebooks/notebooks_plotting/reaction_time_trial_number.json index 3d23ac9e..c1acc700 100644 --- a/notebooks/notebooks_plotting/reaction_time_trial_number.json +++ b/notebooks/notebooks_plotting/reaction_time_trial_number.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "lightgray"}, "mode": "markers", "name": "data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [1.0378999999999996, 0.5363999999999995, 0.21280000000000143, 0.5754000000000001, 0.2237999999999989, 0.4792999999999985, 0.4103999999999992, 8.281399999999998, 0.26890000000000214, 5.083099999999995, 0.2220000000000013, 0.23999999999999488, 0.3763000000000005, 0.5259999999999962, 0.1880000000000024, 1.4342000000000041, 7.024099999999997, 0.1927000000000021, 0.18899999999999295, 0.227800000000002, 0.7036999999999978, 0.3885999999999967, 0.4239999999999924, 0.21229999999999905, 0.4222000000000037, 0.22299999999999898, 0.17379999999999995, 0.5754000000000019, 0.16900000000001114, 0.16549999999999443, 0.18120000000000402, 0.3032000000000039, 0.2254000000000076, 1.6178000000000026, 0.23980000000000246, 0.23000000000000398, 0.38769999999999527, 0.20179999999999154, 0.17430000000001655, 0.1991999999999905, 0.2289000000000101, 0.19619999999997617, 7.0434999999999945, 0.24660000000000082, 7.100200000000001, 0.1595000000000084, 0.16510000000002378, 0.18389999999999418, 0.2004000000000019, 0.5232999999999777, 4.7620000000000005, 0.3585999999999956, 0.2985999999999933, 0.1710999999999956, 0.44470000000001164, 0.28489999999999327, 0.377900000000011, 0.7081999999999766, 0.23490000000001032, 0.2715000000000032, 0.25620000000000687, 0.23029999999999973, 0.3977999999999895, 8.794000000000011, 0.20109999999999673, 0.535899999999998, 0.24139999999999873, 0.34950000000000614, 0.26780000000002246, 0.9699999999999989, 0.3611999999999682, 0.19709999999997763, 0.35240000000004557, 0.3727999999999838, 0.1524000000000001, 0.2850999999999999, 0.2458000000000311, 0.7078000000000202, 0.3365000000000009, 0.17789999999996553, 0.2185000000000059, 1.5932999999999993, 0.18810000000001992, 0.20830000000000837, 0.2939000000000078, 0.244199999999978, 0.47699999999997544, 4.169800000000009, 0.19650000000001455, 0.8175000000000523, 0.22340000000002647, 0.27359999999998763, 1.0647000000000162, 0.4581999999999766, 0.25230000000004793, 0.4837999999999738, 0.8208000000000197, 1.254600000000039, 0.1741999999999848, 0.9784999999999968, 0.21440000000001191, 0.6126999999999612, 0.6002000000000294, 0.24080000000003565, 0.4545999999999708, 0.2481999999999971, 0.19139999999998736, 2.5948999999999955, 0.469600000000014, 0.4993999999999801, 0.16470000000003893, 0.30759999999997945, 1.3038000000000238, 0.20750000000003865, 0.2563000000000102, 0.25099999999997635, 0.14680000000004156, 1.050200000000018, 0.36299999999999955, 0.2219000000000051, 0.2547000000000139, 0.34019999999998163, 0.16910000000001446, 0.07590000000004693, 0.3394000000000119, 0.202699999999993, 0.5809000000000424, 0.1694999999999709, 0.1775000000000091, 0.24689999999998236, 0.18549999999999045, 0.233600000000024, 0.35480000000001155, 0.4037999999999897, 0.32939999999996417, 0.2687999999999988, 0.22289999999998145, 1.3360999999999876, 0.8281999999999812, 0.6922999999999888, 0.19809999999995398, 0.6830999999999676, 0.3301000000000158, 0.26499999999998636, 0.29640000000000555, 0.21719999999999118, 0.6281000000000176, 0.1997000000000071, 0.1927000000000021, 0.32670000000001664, 0.19980000000003884, 2.1772000000000276, 0.5037999999999556, 0.21300000000007913, 0.08010000000001583, 0.26890000000003056, 0.19519999999999982, 0.2341000000000122, 0.4147000000000389, 0.2540000000000191, 0.26310000000000855, 0.42010000000004766, 0.18719999999996162, 1.9800000000000182, 0.2960000000000491, 0.865099999999984, 0.18610000000001037, 0.17589999999995598, 0.4540000000000646, 0.22910000000001673, 0.5388999999998987, 0.4315000000000282, 0.26329999999995835, 0.1855000000000473, 0.4056000000000495, 0.24939999999992324, 0.3341000000000349, 0.17860000000007403, 0.27760000000000673, 0.20990000000006148, 0.5129000000000588, 0.11899999999991451, 0.1813999999999396, 0.3106000000000222, 0.20879999999999654, 0.14379999999994197, 0.15829999999994016, 0.7638000000000602, 0.3771000000000413, 0.19590000000005148, 0.22429999999997108, 0.18479999999999563, 0.19690000000002783, 0.45079999999995835, 0.32970000000000255, 0.18679999999994834, 0.5495999999999412, 0.20709999999996853, 0.27129999999999654, 0.16499999999996362, 0.18409999999994398, 0.33350000000007185, 0.233600000000024, 0.2821999999999889, 1.2824999999999136, 0.21079999999994925, 0.20719999999994343, 0.39549999999997, 1.044300000000021, 0.1997000000000071, 0.07200000000000273, 0.24080000000003565, 0.6136000000000195, 0.2116999999999507, 0.22129999999992833, 0.5966999999999416, 0.20180000000004839, 0.3147000000000162, 0.1876999999999498, 0.1654999999999518, 0.2742999999999256, 0.5811999999999671, 0.3606999999999516, 0.19309999999995853, 0.2663000000000011, 0.1997000000000071, 1.2771999999999935, 0.29529999999999745, 0.2116999999999507, 0.445699999999988, 0.21920000000000073, 0.30179999999995744, 0.2141999999998916, 0.2539000000000442, 0.12229999999999563, 0.5413999999999533, 0.24239999999997508, 0.24109999999996035, 0.21050000000002456, 0.4400999999999158, 0.3755999999999631, 0.26070000000004256, 0.2742000000000644, 0.2798000000000229, 0.2702000000000453, 0.6286000000000058, 0.41679999999996653, 0.837099999999964, 0.35790000000008604, 0.2461999999999307, 0.23230000000000928, 0.0844000000000733, 0.2559999999999718, 0.3605000000000018, 0.19519999999999982, 0.22530000000006112, 0.24139999999999873, 0.24889999999993506, 0.2518000000000029, 0.20810000000005857, 0.2398999999999205, 0.5265000000000555, 0.23820000000000618, 0.7016999999999598, 0.17189999999993688, 0.18659999999999854, 0.12619999999992615, 0.3342000000000098, 0.6073999999999842, 0.22419999999999618, 0.5755000000000337, 0.4130999999999858, 0.30910000000005766, 0.18010000000003856, 0.2662000000000262, 0.21240000000000236, 0.20439999999996417, 0.19500000000005002, 0.17889999999999873, 0.20660000000009404, 0.47899999999992815, 0.5497000000000298, 0.1977000000000544, 0.18479999999999563, 0.2158000000000584, 0.18290000000001783, 0.42410000000006676, 0.399599999999964, 0.33140000000003056, 0.21339999999997872, 0.5024999999999409, 0.23070000000006985, 0.27499999999997726, 0.19640000000003965, 0.2078999999999951, 0.23569999999995161, 0.18089999999995143, 0.21029999999996107, 0.22659999999996217, 0.6989999999999554, 0.23569999999995161, 0.22429999999997108, 0.21059999999999945, 0.28340000000002874, 0.23909999999989395, 0.3023000000000593, 0.27529999999990196, 0.20109999999999673, 0.39049999999997453, 0.448099999999954, 0.18870000000003984, 0.25909999999998945, 0.2557999999999083, 0.233600000000024, 0.24680000000000746, 0.2236000000000331, 0.22529999999994743, 0.25709999999992306, 0.23249999999995907, 0.22820000000001528, 0.22239999999999327, 0.37009999999997945, 0.22550000000001091, 0.2074000000000069, 0.37980000000004566, 0.4518000000000484, 0.2015000000001237, 0.18059999999991305, 0.14980000000014115, 0.1898999999998523, 0.4068999999999505, 0.17799999999988358, 0.3552999999999429, 0.1697999999998956, 0.23869999999988067, 0.504799999999932, 0.2318000000000211, 0.1696999999999207, 0.1899999999998272, 0.18290000000001783, 0.18449999999984357, 0.19339999999988322, 0.2234000000000833, 0.20080000000007203, 0.20839999999998327, 0.19509999999991123, 0.15229999999996835, 0.22230000000013206, 0.22010000000000218, 0.2481999999999971, 0.3110999999998967, 0.38380000000006476, 0.5388000000000375, 0.233600000000024, 0.19879999999989195, 0.2357999999999265, 0.24989999999979773, 0.42200000000002547, 0.20269999999982247, 0.21849999999994907, 0.23870000000010805, 0.23730000000000473, 0.185799999999972, 0.21499999999991815, 0.23420000000010077, 0.2544000000000324, 0.46309999999994034, 0.27700000000004366, 0.27899999999999636, 0.22820000000001528, 0.26729999999997744, 0.20010000000002037, 0.20870000000013533, 0.2802000000001499, 0.1893000000000029, 0.29539999999997235, 0.6851999999998952, 0.26340000000004693, 0.25279999999997926, 0.20910000000003492, 0.3000000000001819, 0.3892000000000735, 0.24319999999988795, 0.2541000000001077, 0.2617000000000189, 0.22919999999999163, 0.23059999999986758, 0.22420000000010987, 0.23869999999988067, 0.2500999999999749, 0.1976999999999407, 0.1914999999999054, 0.2417000000000371, 0.21630000000004657, 0.20249999999987267, 0.19719999999983884, 0.5228000000001884, 0.2057999999999538, 0.19650000000001455, 0.2717999999999847, 0.23949999999990723, 0.17090000000007421, 0.2056999999999789, 0.3748000000000502, 0.4226000000001022, 0.24359999999978754, 0.9338999999999942, 0.20929999999998472, 0.2842000000000553, 0.07159999999998945, 0.20400000000017826, 0.20209999999997308, 0.2441999999998643, 0.22620000000006257, 0.20250000000010004, 0.2722000000001117, 0.23839999999995598, 0.46630000000004657, 3.1365999999998166, 0.20429999999987558, 0.22810000000004038, 0.5314999999998236, 0.32519999999999527, 0.5133999999998196, 0.30280000000016116, 0.20800000000008367, 0.3898999999998978, 0.2578000000000884, 0.2075999999999567, 0.20319999999992433, 0.24459999999999127, 0.31970000000001164, 0.6826000000000931, 0.3181999999999334, 0.19699999999988904, 0.23240000000009786, 0.20420000000012806, 0.3170000000000073, 0.26320000000009713, 0.40949999999998, 0.16630000000009204, 0.2820999999999003, 0.2693000000001575, 0.22859999999991487, 0.2500999999999749, 0.27650000000016917, 0.22100000000000364, 0.23630000000002838, 0.4155000000000655, 0.30110000000013315, 0.3319000000001324, 0.2861000000000331, 0.5201999999999316, 0.2798999999999978, 0.21469999999999345, 0.4941000000001168, 0.3019000000001597, 3.6475000000000364, 0.22669999999993706, 0.2235000000000582, 0.32560000000012224, 0.41439999999988686, 0.3650000000000091, 0.18290000000001783, 0.2647999999999229, 0.2457000000001699, 0.21920000000000073, 0.5204999999998563, 0.23949999999990723, 0.4193000000000211, 0.23860000000013315, 0.26870000000008076, 0.23499999999989996, 0.3341000000000349, 0.23669999999992797, 0.24050000000011096, 0.22000000000002728, 0.18360000000006949, 0.1270999999999276, 0.2861000000000331, 0.2136000000000422, 0.23739999999997963, 0.1876999999999498, 0.4307000000001153, 0.17390000000000327, 0.19280000000003383, 0.19499999999993634, 0.14959999999996398, 0.16699999999991633, 0.17780000000016116, 0.2134000000000924, 0.18820000000005166, 0.22550000000001091, 0.2219000000000051, 0.19260000000008404, 0.1994999999999436, 0.18389999999999418, 0.21969999999987522, 0.2016000000000986, 0.1812999999999647, 0.18390000000022155, 0.2395000000001346, 0.1914000000001579, 0.16889999999989413, 0.1879999999998745, 0.5153999999999996, 0.18899999999985084, 0.19470000000001164, 0.20689999999990505, 0.20640000000003056, 0.21050000000013824, 0.20090000000004693, 0.20640000000003056, 0.19280000000003383, 0.18840000000000146, 0.21249999999986358, 0.21739999999999782, 0.21000000000003638, 0.20719999999982974, 0.21050000000013824, 0.20129999999994652, 0.1958999999999378, 0.2300000000000182, 0.21100000000001273, 0.2746999999999389, 0.19499999999993634, 0.22040000000015425, 0.19000000000005457, 0.1714999999999236, 0.22919999999999163, 0.3280000000002019, 0.2658000000001266, 0.361299999999801, 0.2053000000000793, 0.20929999999998472, 0.056599999999889405, 0.15229999999996835, 0.19699999999988904, 0.1834000000001197, 0.19920000000001892, 0.2401999999999589, 0.1797999999998865, 0.18309999999996762, 0.2054000000000542, 0.24900000000002365, 0.20839999999998327, 0.24410000000011678, 0.2032000000001517, 0.24809999999979482, 0.1714999999999236, 0.47109999999997854, 0.18830000000002656, 0.2421999999999116, 0.20479999999997744, 0.2841999999998279, 0.218199999999797, 0.1776999999999589, 0.48499999999989996, 0.17660000000000764, 0.16360000000008768, 0.22869999999988977, 0.23270000000002256, 0.22289999999998145, 0.19630000000006476, 0.2195000000001528, 0.1795999999999367, 0.205600000000004, 0.2937000000001717, 0.20959999999990941, 0.2725000000000364, 0.43679999999994834, 0.17290000000002692, 0.21800000000007458, 0.2054000000000542, 0.17400000000020555, 0.1471999999998843, 0.1977999999999156, 0.18630000000007385, 0.21109999999998763, 0.16300000000001091, 0.47070000000007894, 2.1536000000000968, 0.43429999999989377, 0.33599999999978536, 0.2236000000000331, 0.1247000000000753, 0.1791000000000622, 0.47420000000010987, 0.24959999999987303, 4.469900000000052, 0.342200000000048, 0.2657000000001517, 12.426799999999957, 0.3207999999999629, 0.26510000000007494, 0.3375999999998385, 0.21250000000009095, 0.2636999999999716, 0.23329999999987194, 0.19659999999998945, 0.2598000000000411, 0.25040000000012697, 0.21909999999979846, 0.12049999999999272, 0.22260000000005675, 0.2859000000000833, 0.5489000000000033, 0.25509999999985666, 0.2415000000000873, 0.3220000000001164, 0.25929999999993925, 0.22149999999987813, 0.24459999999999127, 0.3423999999999978, 6.979900000000043, 0.2680000000000291, 59.956699999999955, 58.47219999999993, 56.48730000000023, 10.891299999999774, 0.3737999999998465, 0.9608000000002903, 0.22280000000000655, 41.21270000000004, 2.3718000000003485, 0.2909999999997126, 0.2626000000000204, 0.24959999999964566, 0.6748999999999796, 0.23660000000018044, 0.23460000000022774, 0.2498000000000502, 0.23939999999993233, 0.245600000000195, 0.23050000000012005, 0.2424999999998363, 0.25549999999975626, 0.29440000000022337, 0.40319999999974243, 0.6226999999998952, 0.3512999999998101, 0.24929999999994834, 0.2606999999998152, 0.17489999999997963, 0.23410000000012587, 0.17849999999998545, 0.1734999999998763, 0.23320000000012442, 0.2614000000003216, 0.29890000000023065, 0.3079000000002452, 0.22359999999980573, 0.23909999999978027, 0.20010000000002037, 0.43489999999974316, 0.010199999999713327, 0.20100000000002183, 0.22890000000006694, 0.25759999999991123, 0.24989999999979773, 0.24769999999989523, 0.24099999999998545, 0.20870000000013533, 0.2474000000001979, 0.20180000000027576, 0.3623999999999796, 0.21390000000019427, 0.21430000000009386, 0.22000000000025466, 0.4375, 0.610700000000179, 0.2185999999996966, 0.2481999999999971, 0.1869000000001506, 0.2418999999999869, 0.29579999999987194, 0.3413999999997941, 0.31539999999995416, 1.0481999999997242, 0.2500999999997475, 0.404700000000048, 59.94150000000036, 59.83040000000028, 0.29890000000023065, 25.176800000000185, 0.8398000000001957, 0.8426999999996951, 0.5783999999998741, 0.35390000000006694, 59.95520000000033, 39.49330000000009, 0.31790000000000873, 1.053899999999885, 0.36520000000018626, 59.949699999999666, 0.20780000000013388, 0.3079000000002452, 0.5414999999998145, 59.94870000000037, 0.14030000000002474, 0.3206999999997606, 59.92540000000008, 2.968199999999797, 59.944000000000415, 0.3568999999997686, 0.4893000000001848, 0.3459000000002561, 0.5953999999996995, 7.496799999999894, 59.944800000000214, 59.803100000000086, 25.128200000000106, 0.40610000000015134, 3.0812000000000808, 59.94470000000001, 59.85050000000001, 36.67089999999962, 0.22269999999980428, 0.4216999999998734, 0.25189999999975043, 0.37390000000004875, 0.253400000000056, 55.91840000000002, 0.24490000000014334, 0.22810000000026776, 0.22959999999966385, 0.2545000000000073, 0.1969000000003689, 0.21139999999968495, 0.2199999999997999, 0.2660000000000764, 0.20440000000007785, 30.50070000000005, 59.95039999999972, 59.80019999999968, 0.06710000000020955, 0.4569000000001324, 25.24270000000024, 59.94450000000006, 0.10320000000001528, 0.3704000000002452, 13.100100000000111, 27.171699999999873, 0.3063999999999396, 59.95310000000018, 0.06970000000001164, 0.24459999999999127, 0.962500000000091, 0.24070000000028813, 0.45959999999968204, 0.4962000000000444, 59.029199999999946, 59.954499999999825, 0.3441000000002532, 0.1578999999996995, 59.700700000000325, 0.1772000000000844, 0.40599999999994907, 0.3265000000001237, 0.24769999999989523, 0.2665999999999258, 0.22850000000016735, 0.29579999999987194, 0.21829999999999927, 0.22800000000006548, 0.25959999999986394, 0.21570000000019718, 0.23299999999971988, 2.7521999999999025, 0.2559999999998581, 0.5834999999997308, 0.278400000000147, 0.5468000000000757, 0.3269999999997708, 0.26769999999987704, 0.22360000000026048, 28.914700000000266, 13.87159999999949, 42.69970000000012, 0.28699999999935244, 0.2566999999999098, 0.3007999999999811, 24.60689999999977, 0.26670000000012806, 53.8715000000002, 0.2528999999994994, 59.9413999999997, 0.20079999999961728, 23.895799999999326, 0.3356000000003405, 0.5122000000001208, 0.3338999999996304, 59.95629999999983], "type": "scatter", "uid": "c76ae005-fd3e-4cf2-85e2-b7e4dc73b4ab"}, {"marker": {"color": "black"}, "name": "rolled data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [null, null, null, null, null, null, null, null, null, 0.507849999999999, 0.44484999999999886, 0.3396500000000007, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.4511499999999984, 0.32260000000000133, 0.3081499999999977, 0.23389999999999844, 0.3081499999999977, 0.3824499999999986, 0.40629999999999455, 0.30819999999999936, 0.4054000000000002, 0.30819999999999936, 0.2254000000000005, 0.30819999999999936, 0.30819999999999936, 0.30579999999999785, 0.217649999999999, 0.217649999999999, 0.217649999999999, 0.22420000000000329, 0.22420000000000329, 0.2277000000000058, 0.23490000000000322, 0.2277000000000058, 0.2277000000000058, 0.2277000000000058, 0.22945000000000704, 0.22715000000000884, 0.22945000000000704, 0.22945000000000704, 0.22945000000000704, 0.21535000000000082, 0.20049999999999102, 0.19769999999998333, 0.1997999999999962, 0.214650000000006, 0.22350000000000136, 0.3025999999999982, 0.27259999999999707, 0.2494999999999976, 0.2494999999999976, 0.2917499999999933, 0.32859999999999445, 0.3682500000000033, 0.3682500000000033, 0.32859999999999445, 0.2917499999999933, 0.2781999999999982, 0.2781999999999982, 0.33140000000000214, 0.2781999999999982, 0.3247000000000071, 0.263850000000005, 0.263850000000005, 0.2696500000000128, 0.3086500000000143, 0.3553499999999872, 0.3553499999999872, 0.35095000000002585, 0.35095000000002585, 0.35095000000002585, 0.317300000000003, 0.317300000000003, 0.31875000000002274, 0.34445000000002324, 0.3108000000000004, 0.2654500000000155, 0.3108000000000004, 0.2654500000000155, 0.2321500000000185, 0.2654500000000155, 0.24500000000000455, 0.2690499999999929, 0.2690499999999929, 0.23134999999999195, 0.2690499999999929, 0.2690499999999929, 0.2588999999999828, 0.2837499999999977, 0.3760499999999922, 0.36589999999998213, 0.46759999999997603, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.5482499999999675, 0.5420000000000016, 0.5420000000000016, 0.5420000000000016, 0.5274000000000001, 0.35139999999998395, 0.35139999999998395, 0.4620999999999924, 0.4620999999999924, 0.4620999999999924, 0.3810999999999751, 0.3810999999999751, 0.3810999999999751, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.25364999999999327, 0.25550000000001205, 0.25550000000001205, 0.25284999999999513, 0.25284999999999513, 0.25284999999999513, 0.2383000000000095, 0.2970500000000129, 0.2383000000000095, 0.21229999999999905, 0.22479999999998768, 0.19409999999999172, 0.19409999999999172, 0.2181500000000085, 0.24025000000000318, 0.24025000000000318, 0.2578499999999906, 0.24025000000000318, 0.2578499999999906, 0.2990999999999815, 0.34209999999998786, 0.34209999999998786, 0.37930000000000064, 0.3669500000000028, 0.32974999999999, 0.3132500000000107, 0.3132500000000107, 0.47910000000001673, 0.3132500000000107, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.25679999999999836, 0.21510000000003515, 0.24095000000005484, 0.20640000000005898, 0.22355000000004566, 0.2515000000000214, 0.24405000000001564, 0.2585500000000138, 0.2585500000000138, 0.24405000000001564, 0.2585500000000138, 0.26600000000001955, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.3580500000000484, 0.36375000000003865, 0.36375000000003865, 0.27965000000000373, 0.3344500000000039, 0.2563499999999408, 0.29869999999999663, 0.29869999999999663, 0.27044999999998254, 0.27044999999998254, 0.27044999999998254, 0.2563499999999408, 0.22964999999999236, 0.263499999999965, 0.22964999999999236, 0.209350000000029, 0.19509999999996808, 0.209350000000029, 0.209350000000029, 0.202350000000024, 0.202350000000024, 0.202350000000024, 0.2028500000000122, 0.2028500000000122, 0.21059999999999945, 0.21059999999999945, 0.2769999999999868, 0.2156999999999698, 0.2156999999999698, 0.2156999999999698, 0.20199999999999818, 0.23919999999998254, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.22219999999998663, 0.2524500000000103, 0.25790000000000646, 0.25790000000000646, 0.25790000000000646, 0.23720000000002983, 0.2615000000000123, 0.22624999999999318, 0.21649999999993952, 0.231049999999982, 0.231049999999982, 0.231049999999982, 0.21649999999993952, 0.21649999999993952, 0.231049999999982, 0.24779999999992697, 0.24779999999992697, 0.24779999999992697, 0.27029999999996335, 0.23405000000002474, 0.27029999999996335, 0.27029999999996335, 0.27029999999996335, 0.28479999999996153, 0.2807999999999993, 0.2807999999999993, 0.2427500000000009, 0.26010000000002265, 0.23655000000002246, 0.2746000000000208, 0.24815000000000964, 0.2417499999999677, 0.2417499999999677, 0.2417499999999677, 0.24815000000000964, 0.24815000000000964, 0.2573000000000434, 0.2674500000000535, 0.27220000000005484, 0.27220000000005484, 0.27700000000004366, 0.327699999999993, 0.36675000000002456, 0.3188500000000545, 0.27700000000004366, 0.27700000000004366, 0.2750000000000341, 0.31405000000006567, 0.3069500000000289, 0.25109999999995125, 0.2437999999999647, 0.2437999999999647, 0.2437999999999647, 0.236850000000004, 0.24064999999995962, 0.2451499999999669, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.286200000000008, 0.286200000000008, 0.32165000000003374, 0.2666500000000269, 0.2876500000000419, 0.2876500000000419, 0.2876500000000419, 0.2452000000000112, 0.21829999999999927, 0.2095000000000482, 0.2095000000000482, 0.2095000000000482, 0.2055000000000291, 0.2055000000000291, 0.2055000000000291, 0.20105000000000928, 0.20215000000007421, 0.21120000000007622, 0.2736000000000445, 0.2736000000000445, 0.2736000000000445, 0.22325000000006412, 0.25285000000002356, 0.25285000000002356, 0.25285000000002356, 0.25534999999996444, 0.23320000000001073, 0.22205000000002428, 0.21999999999997044, 0.228650000000016, 0.228650000000016, 0.22544999999996662, 0.21744999999998527, 0.22544999999996662, 0.2311499999999569, 0.2311499999999569, 0.23739999999992278, 0.23739999999992278, 0.25719999999989795, 0.25719999999989795, 0.25719999999989795, 0.2671999999999457, 0.2671999999999457, 0.2574499999999489, 0.2574499999999489, 0.2512999999999579, 0.24020000000001573, 0.2512999999999579, 0.24020000000001573, 0.23304999999999154, 0.23304999999999154, 0.23304999999999154, 0.23034999999998718, 0.2268500000000131, 0.2268500000000131, 0.23034999999998718, 0.23034999999998718, 0.2268500000000131, 0.2239500000000021, 0.2149000000000001, 0.2164500000000089, 0.2044500000000653, 0.2044500000000653, 0.195699999999988, 0.195699999999988, 0.195699999999988, 0.2108499999999367, 0.2108499999999367, 0.21089999999992415, 0.21089999999992415, 0.18724999999983538, 0.1916999999998552, 0.1916999999998552, 0.19709999999997763, 0.19709999999997763, 0.19424999999989723, 0.1916999999998552, 0.19424999999989723, 0.19794999999999163, 0.20460000000002765, 0.21424999999999272, 0.22120000000006712, 0.22120000000006712, 0.22795000000007803, 0.22795000000007803, 0.23469999999997526, 0.2419999999999618, 0.2490499999998974, 0.2490499999998974, 0.24284999999986212, 0.23725000000001728, 0.23654999999996562, 0.23469999999997526, 0.2271499999999378, 0.23500000000001364, 0.23575000000005275, 0.23575000000005275, 0.23575000000005275, 0.2380000000000564, 0.2380000000000564, 0.24585000000001855, 0.24430000000006658, 0.24430000000006658, 0.2608500000000049, 0.2608500000000049, 0.27215000000001055, 0.27215000000001055, 0.2653500000000122, 0.2581000000000131, 0.2581000000000131, 0.2581000000000131, 0.2718000000000984, 0.2718000000000984, 0.2587500000000773, 0.2625500000000329, 0.2579000000000633, 0.2534500000000435, 0.2479999999999336, 0.2409499999998843, 0.24664999999993142, 0.2409499999998843, 0.23464999999987413, 0.23464999999987413, 0.2298999999999296, 0.22670000000005075, 0.22025000000007822, 0.22025000000007822, 0.21105000000000018, 0.20414999999991323, 0.20414999999991323, 0.21105000000000018, 0.21105000000000018, 0.20574999999996635, 0.20574999999996635, 0.22264999999993051, 0.2415499999998474, 0.2415499999998474, 0.2415499999998474, 0.25769999999988613, 0.2415499999998474, 0.22644999999988613, 0.22644999999988613, 0.24389999999982592, 0.23489999999992506, 0.21775000000002365, 0.21775000000002365, 0.21775000000002365, 0.23230000000000928, 0.23230000000000928, 0.23230000000000928, 0.23324999999999818, 0.24129999999991014, 0.25530000000003383, 0.2987000000000535, 0.3140000000000782, 0.3140000000000782, 0.3575499999999465, 0.3140000000000782, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.25120000000003984, 0.25120000000003984, 0.23850000000004457, 0.23850000000004457, 0.2539000000000442, 0.2901000000000522, 0.2901000000000522, 0.2726499999999987, 0.26625000000012733, 0.2478000000000975, 0.256650000000036, 0.26625000000012733, 0.26625000000012733, 0.256650000000036, 0.2597000000000662, 0.2597000000000662, 0.27290000000016335, 0.27290000000016335, 0.28130000000010114, 0.28300000000001546, 0.28300000000001546, 0.29360000000008313, 0.30150000000014643, 0.31690000000014606, 0.30150000000014643, 0.2940000000000964, 0.2940000000000964, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.2833500000000413, 0.2552500000000464, 0.2552500000000464, 0.2552500000000464, 0.29520000000002256, 0.2552500000000464, 0.2552500000000464, 0.24260000000003856, 0.2552500000000464, 0.24260000000003856, 0.2400000000000091, 0.2400000000000091, 0.2390500000000202, 0.23765000000003056, 0.23765000000003056, 0.23584999999991396, 0.23584999999991396, 0.22834999999997763, 0.22834999999997763, 0.21680000000003474, 0.20320000000003802, 0.19389999999998508, 0.19389999999998508, 0.19389999999998508, 0.19024999999999181, 0.19024999999999181, 0.18795000000000073, 0.19050000000004275, 0.19050000000004275, 0.19270000000005894, 0.1938000000000102, 0.19040000000006785, 0.19605000000001382, 0.2005500000000211, 0.2005500000000211, 0.19605000000001382, 0.2005500000000211, 0.19605000000001382, 0.19200000000012096, 0.1897000000000162, 0.1897000000000162, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19305000000008476, 0.2005500000000211, 0.19780000000002929, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20640000000003056, 0.2066499999999678, 0.20679999999993015, 0.20859999999993306, 0.20679999999993015, 0.20679999999993015, 0.20859999999993306, 0.2102500000000873, 0.2107500000000755, 0.2102500000000873, 0.2102500000000873, 0.208849999999984, 0.20590000000004238, 0.20614999999997963, 0.2157000000000835, 0.22480000000007294, 0.22480000000007294, 0.22480000000007294, 0.21485000000006949, 0.21485000000006949, 0.20730000000003201, 0.20730000000003201, 0.20730000000003201, 0.2022500000000491, 0.2022500000000491, 0.19809999999995398, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19809999999995398, 0.20230000000003656, 0.20430000000010295, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.22529999999994743, 0.22529999999994743, 0.22529999999994743, 0.2301999999998543, 0.21149999999988722, 0.2301999999998543, 0.21149999999988722, 0.21149999999988722, 0.21149999999988722, 0.22344999999984339, 0.22054999999988922, 0.22054999999988922, 0.2188499999999749, 0.20790000000010878, 0.2125500000000784, 0.2125500000000784, 0.2145500000000311, 0.22120000000006712, 0.22120000000006712, 0.2145500000000311, 0.213799999999992, 0.213799999999992, 0.2075999999999567, 0.2075999999999567, 0.2074999999999818, 0.2015999999999849, 0.2015999999999849, 0.19204999999999472, 0.19204999999999472, 0.2015999999999849, 0.2015999999999849, 0.20444999999995161, 0.21735000000001037, 0.21735000000001037, 0.21735000000001037, 0.27979999999990923, 0.2927999999998292, 0.38514999999983957, 0.3390999999999167, 0.30084999999996853, 0.30084999999996853, 0.2932500000000573, 0.2932500000000573, 0.3291999999999007, 0.3291999999999007, 0.2932500000000573, 0.2932500000000573, 0.2654000000001133, 0.2644000000000233, 0.26175000000000637, 0.25510000000008404, 0.24184999999999945, 0.22794999999996435, 0.22794999999996435, 0.24184999999999945, 0.24184999999999945, 0.24595000000010714, 0.2527499999999918, 0.2527499999999918, 0.248299999999972, 0.24984999999992397, 0.25719999999989795, 0.2726000000000113, 0.2636499999999842, 0.2636499999999842, 0.29500000000007276, 0.3322000000000571, 3.6611500000000206, 3.676849999999945, 3.970350000000167, 3.970350000000167, 8.935599999999909, 6.631550000000061, 6.631550000000061, 1.6663000000003194, 0.6673000000000684, 0.524349999999913, 0.33239999999977954, 0.2767999999998665, 0.2562000000000353, 0.2562000000000353, 0.24969999999984793, 0.24759999999992033, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.2477000000001226, 0.25264999999990323, 0.2523999999998523, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.25499999999988177, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.23365000000012515, 0.23365000000012515, 0.23365000000012515, 0.23614999999995234, 0.23614999999995234, 0.23614999999995234, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.24004999999988286, 0.2349500000000262, 0.24420000000009168, 0.2349500000000262, 0.24420000000009168, 0.24420000000009168, 0.24420000000009168, 0.23050000000012005, 0.23050000000012005, 0.23050000000012005, 0.21929999999997563, 0.23370000000022628, 0.21929999999997563, 0.23095000000012078, 0.23095000000012078, 0.245049999999992, 0.2719999999999345, 0.30559999999991305, 0.27294999999980973, 0.27294999999980973, 0.30559999999991305, 0.3283999999998741, 0.3283999999998741, 0.37304999999992106, 0.6222500000001219, 0.8412499999999454, 0.8412499999999454, 0.7091000000000349, 0.8412499999999454, 13.00974999999994, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.7105499999997846, 0.4718000000000302, 0.45335000000000036, 0.7976999999998498, 0.45335000000000036, 0.34294999999997344, 0.45335000000000036, 0.45335000000000036, 1.7548499999998057, 0.44919999999979154, 0.5153999999999996, 0.5153999999999996, 0.5423499999999422, 0.5423499999999422, 1.7817999999997483, 5.232499999999845, 5.232499999999845, 4.046099999999797, 1.8382999999998901, 5.288999999999987, 16.3125, 30.899549999999863, 30.899549999999863, 30.899549999999863, 14.104700000000093, 1.751449999999977, 0.41390000000001237, 1.751449999999977, 0.3977999999999611, 0.3136500000000524, 0.25264999999990323, 0.25264999999990323, 0.25264999999990323, 0.24839999999994689, 0.2372499999999036, 0.2372499999999036, 0.2288499999999658, 0.2288499999999658, 0.2288499999999658, 0.24204999999983556, 0.2372499999999036, 0.24299999999993815, 0.3614500000001044, 12.849800000000187, 12.849800000000187, 12.849800000000187, 19.171400000000176, 19.171400000000176, 6.778500000000122, 6.778500000000122, 6.778500000000122, 6.735250000000178, 0.6664500000001681, 0.3384000000000924, 0.4149999999999636, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4018499999999676, 0.4778999999998632, 0.4778999999998632, 0.43279999999981555, 0.43279999999981555, 0.37505000000010114, 0.33530000000018845, 0.29655000000002474, 0.28119999999989886, 0.2571499999999105, 0.2571499999999105, 0.2536499999998796, 0.2536499999998796, 0.24034999999980755, 0.24034999999980755, 0.244499999999789, 0.244499999999789, 0.25779999999986103, 0.25779999999986103, 0.26900000000000546, 0.273050000000012, 0.273050000000012, 0.3026999999999589, 0.43689999999992324, 0.43689999999992324, 0.43689999999992324, 0.3069999999995616, 0.31389999999987594, 0.31389999999987594, 0.29389999999966676, 7.086199999999735, 7.086199999999735, 7.086199999999735, 0.29389999999966676, 0.29389999999966676, 0.3182000000001608, 0.42390000000023065, 0.42390000000023065, 0.42390000000023065], "type": "scatter", "uid": "5a0e7e67-38ba-4571-8317-d3af3b9f3c77"}], "layout": {"height": 400, "title": {"text": "Reaction time - trial number"}, "width": 630, "xaxis": {"title": {"text": "Trial number"}}, "yaxis": {"dtick": [-1.0, 0.0, 1.0, 2.0], "range": [-1.0, 2.0], "title": {"text": "Reaction time (s)"}, "type": "log"}}} \ No newline at end of file +{"data": [{"marker": {"color": "lightgray"}, "mode": "markers", "name": "data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [1.0378999999999996, 0.5363999999999995, 0.21280000000000143, 0.5754000000000001, 0.2237999999999989, 0.4792999999999985, 0.4103999999999992, 8.281399999999998, 0.26890000000000214, 5.083099999999995, 0.2220000000000013, 0.23999999999999488, 0.3763000000000005, 0.5259999999999962, 0.1880000000000024, 1.4342000000000041, 7.024099999999997, 0.1927000000000021, 0.18899999999999295, 0.227800000000002, 0.7036999999999978, 0.3885999999999967, 0.4239999999999924, 0.21229999999999905, 0.4222000000000037, 0.22299999999999898, 0.17379999999999995, 0.5754000000000019, 0.16900000000001114, 0.16549999999999443, 0.18120000000000402, 0.3032000000000039, 0.2254000000000076, 1.6178000000000026, 0.23980000000000246, 0.23000000000000398, 0.38769999999999527, 0.20179999999999154, 0.17430000000001655, 0.1991999999999905, 0.2289000000000101, 0.19619999999997617, 7.0434999999999945, 0.24660000000000082, 7.100200000000001, 0.1595000000000084, 0.16510000000002378, 0.18389999999999418, 0.2004000000000019, 0.5232999999999777, 4.7620000000000005, 0.3585999999999956, 0.2985999999999933, 0.1710999999999956, 0.44470000000001164, 0.28489999999999327, 0.377900000000011, 0.7081999999999766, 0.23490000000001032, 0.2715000000000032, 0.25620000000000687, 0.23029999999999973, 0.3977999999999895, 8.794000000000011, 0.20109999999999673, 0.535899999999998, 0.24139999999999873, 0.34950000000000614, 0.26780000000002246, 0.9699999999999989, 0.3611999999999682, 0.19709999999997763, 0.35240000000004557, 0.3727999999999838, 0.1524000000000001, 0.2850999999999999, 0.2458000000000311, 0.7078000000000202, 0.3365000000000009, 0.17789999999996553, 0.2185000000000059, 1.5932999999999993, 0.18810000000001992, 0.20830000000000837, 0.2939000000000078, 0.244199999999978, 0.47699999999997544, 4.169800000000009, 0.19650000000001455, 0.8175000000000523, 0.22340000000002647, 0.27359999999998763, 1.0647000000000162, 0.4581999999999766, 0.25230000000004793, 0.4837999999999738, 0.8208000000000197, 1.254600000000039, 0.1741999999999848, 0.9784999999999968, 0.21440000000001191, 0.6126999999999612, 0.6002000000000294, 0.24080000000003565, 0.4545999999999708, 0.2481999999999971, 0.19139999999998736, 2.5948999999999955, 0.469600000000014, 0.4993999999999801, 0.16470000000003893, 0.30759999999997945, 1.3038000000000238, 0.20750000000003865, 0.2563000000000102, 0.25099999999997635, 0.14680000000004156, 1.050200000000018, 0.36299999999999955, 0.2219000000000051, 0.2547000000000139, 0.34019999999998163, 0.16910000000001446, 0.07590000000004693, 0.3394000000000119, 0.202699999999993, 0.5809000000000424, 0.1694999999999709, 0.1775000000000091, 0.24689999999998236, 0.18549999999999045, 0.233600000000024, 0.35480000000001155, 0.4037999999999897, 0.32939999999996417, 0.2687999999999988, 0.22289999999998145, 1.3360999999999876, 0.8281999999999812, 0.6922999999999888, 0.19809999999995398, 0.6830999999999676, 0.3301000000000158, 0.26499999999998636, 0.29640000000000555, 0.21719999999999118, 0.6281000000000176, 0.1997000000000071, 0.1927000000000021, 0.32670000000001664, 0.19980000000003884, 2.1772000000000276, 0.5037999999999556, 0.21300000000007913, 0.08010000000001583, 0.26890000000003056, 0.19519999999999982, 0.2341000000000122, 0.4147000000000389, 0.2540000000000191, 0.26310000000000855, 0.42010000000004766, 0.18719999999996162, 1.9800000000000182, 0.2960000000000491, 0.865099999999984, 0.18610000000001037, 0.17589999999995598, 0.4540000000000646, 0.22910000000001673, 0.5388999999998987, 0.4315000000000282, 0.26329999999995835, 0.1855000000000473, 0.4056000000000495, 0.24939999999992324, 0.3341000000000349, 0.17860000000007403, 0.27760000000000673, 0.20990000000006148, 0.5129000000000588, 0.11899999999991451, 0.1813999999999396, 0.3106000000000222, 0.20879999999999654, 0.14379999999994197, 0.15829999999994016, 0.7638000000000602, 0.3771000000000413, 0.19590000000005148, 0.22429999999997108, 0.18479999999999563, 0.19690000000002783, 0.45079999999995835, 0.32970000000000255, 0.18679999999994834, 0.5495999999999412, 0.20709999999996853, 0.27129999999999654, 0.16499999999996362, 0.18409999999994398, 0.33350000000007185, 0.233600000000024, 0.2821999999999889, 1.2824999999999136, 0.21079999999994925, 0.20719999999994343, 0.39549999999997, 1.044300000000021, 0.1997000000000071, 0.07200000000000273, 0.24080000000003565, 0.6136000000000195, 0.2116999999999507, 0.22129999999992833, 0.5966999999999416, 0.20180000000004839, 0.3147000000000162, 0.1876999999999498, 0.1654999999999518, 0.2742999999999256, 0.5811999999999671, 0.3606999999999516, 0.19309999999995853, 0.2663000000000011, 0.1997000000000071, 1.2771999999999935, 0.29529999999999745, 0.2116999999999507, 0.445699999999988, 0.21920000000000073, 0.30179999999995744, 0.2141999999998916, 0.2539000000000442, 0.12229999999999563, 0.5413999999999533, 0.24239999999997508, 0.24109999999996035, 0.21050000000002456, 0.4400999999999158, 0.3755999999999631, 0.26070000000004256, 0.2742000000000644, 0.2798000000000229, 0.2702000000000453, 0.6286000000000058, 0.41679999999996653, 0.837099999999964, 0.35790000000008604, 0.2461999999999307, 0.23230000000000928, 0.0844000000000733, 0.2559999999999718, 0.3605000000000018, 0.19519999999999982, 0.22530000000006112, 0.24139999999999873, 0.24889999999993506, 0.2518000000000029, 0.20810000000005857, 0.2398999999999205, 0.5265000000000555, 0.23820000000000618, 0.7016999999999598, 0.17189999999993688, 0.18659999999999854, 0.12619999999992615, 0.3342000000000098, 0.6073999999999842, 0.22419999999999618, 0.5755000000000337, 0.4130999999999858, 0.30910000000005766, 0.18010000000003856, 0.2662000000000262, 0.21240000000000236, 0.20439999999996417, 0.19500000000005002, 0.17889999999999873, 0.20660000000009404, 0.47899999999992815, 0.5497000000000298, 0.1977000000000544, 0.18479999999999563, 0.2158000000000584, 0.18290000000001783, 0.42410000000006676, 0.399599999999964, 0.33140000000003056, 0.21339999999997872, 0.5024999999999409, 0.23070000000006985, 0.27499999999997726, 0.19640000000003965, 0.2078999999999951, 0.23569999999995161, 0.18089999999995143, 0.21029999999996107, 0.22659999999996217, 0.6989999999999554, 0.23569999999995161, 0.22429999999997108, 0.21059999999999945, 0.28340000000002874, 0.23909999999989395, 0.3023000000000593, 0.27529999999990196, 0.20109999999999673, 0.39049999999997453, 0.448099999999954, 0.18870000000003984, 0.25909999999998945, 0.2557999999999083, 0.233600000000024, 0.24680000000000746, 0.2236000000000331, 0.22529999999994743, 0.25709999999992306, 0.23249999999995907, 0.22820000000001528, 0.22239999999999327, 0.37009999999997945, 0.22550000000001091, 0.2074000000000069, 0.37980000000004566, 0.4518000000000484, 0.2015000000001237, 0.18059999999991305, 0.14980000000014115, 0.1898999999998523, 0.4068999999999505, 0.17799999999988358, 0.3552999999999429, 0.1697999999998956, 0.23869999999988067, 0.504799999999932, 0.2318000000000211, 0.1696999999999207, 0.1899999999998272, 0.18290000000001783, 0.18449999999984357, 0.19339999999988322, 0.2234000000000833, 0.20080000000007203, 0.20839999999998327, 0.19509999999991123, 0.15229999999996835, 0.22230000000013206, 0.22010000000000218, 0.2481999999999971, 0.3110999999998967, 0.38380000000006476, 0.5388000000000375, 0.233600000000024, 0.19879999999989195, 0.2357999999999265, 0.24989999999979773, 0.42200000000002547, 0.20269999999982247, 0.21849999999994907, 0.23870000000010805, 0.23730000000000473, 0.185799999999972, 0.21499999999991815, 0.23420000000010077, 0.2544000000000324, 0.46309999999994034, 0.27700000000004366, 0.27899999999999636, 0.22820000000001528, 0.26729999999997744, 0.20010000000002037, 0.20870000000013533, 0.2802000000001499, 0.1893000000000029, 0.29539999999997235, 0.6851999999998952, 0.26340000000004693, 0.25279999999997926, 0.20910000000003492, 0.3000000000001819, 0.3892000000000735, 0.24319999999988795, 0.2541000000001077, 0.2617000000000189, 0.22919999999999163, 0.23059999999986758, 0.22420000000010987, 0.23869999999988067, 0.2500999999999749, 0.1976999999999407, 0.1914999999999054, 0.2417000000000371, 0.21630000000004657, 0.20249999999987267, 0.19719999999983884, 0.5228000000001884, 0.2057999999999538, 0.19650000000001455, 0.2717999999999847, 0.23949999999990723, 0.17090000000007421, 0.2056999999999789, 0.3748000000000502, 0.4226000000001022, 0.24359999999978754, 0.9338999999999942, 0.20929999999998472, 0.2842000000000553, 0.07159999999998945, 0.20400000000017826, 0.20209999999997308, 0.2441999999998643, 0.22620000000006257, 0.20250000000010004, 0.2722000000001117, 0.23839999999995598, 0.46630000000004657, 3.1365999999998166, 0.20429999999987558, 0.22810000000004038, 0.5314999999998236, 0.32519999999999527, 0.5133999999998196, 0.30280000000016116, 0.20800000000008367, 0.3898999999998978, 0.2578000000000884, 0.2075999999999567, 0.20319999999992433, 0.24459999999999127, 0.31970000000001164, 0.6826000000000931, 0.3181999999999334, 0.19699999999988904, 0.23240000000009786, 0.20420000000012806, 0.3170000000000073, 0.26320000000009713, 0.40949999999998, 0.16630000000009204, 0.2820999999999003, 0.2693000000001575, 0.22859999999991487, 0.2500999999999749, 0.27650000000016917, 0.22100000000000364, 0.23630000000002838, 0.4155000000000655, 0.30110000000013315, 0.3319000000001324, 0.2861000000000331, 0.5201999999999316, 0.2798999999999978, 0.21469999999999345, 0.4941000000001168, 0.3019000000001597, 3.6475000000000364, 0.22669999999993706, 0.2235000000000582, 0.32560000000012224, 0.41439999999988686, 0.3650000000000091, 0.18290000000001783, 0.2647999999999229, 0.2457000000001699, 0.21920000000000073, 0.5204999999998563, 0.23949999999990723, 0.4193000000000211, 0.23860000000013315, 0.26870000000008076, 0.23499999999989996, 0.3341000000000349, 0.23669999999992797, 0.24050000000011096, 0.22000000000002728, 0.18360000000006949, 0.1270999999999276, 0.2861000000000331, 0.2136000000000422, 0.23739999999997963, 0.1876999999999498, 0.4307000000001153, 0.17390000000000327, 0.19280000000003383, 0.19499999999993634, 0.14959999999996398, 0.16699999999991633, 0.17780000000016116, 0.2134000000000924, 0.18820000000005166, 0.22550000000001091, 0.2219000000000051, 0.19260000000008404, 0.1994999999999436, 0.18389999999999418, 0.21969999999987522, 0.2016000000000986, 0.1812999999999647, 0.18390000000022155, 0.2395000000001346, 0.1914000000001579, 0.16889999999989413, 0.1879999999998745, 0.5153999999999996, 0.18899999999985084, 0.19470000000001164, 0.20689999999990505, 0.20640000000003056, 0.21050000000013824, 0.20090000000004693, 0.20640000000003056, 0.19280000000003383, 0.18840000000000146, 0.21249999999986358, 0.21739999999999782, 0.21000000000003638, 0.20719999999982974, 0.21050000000013824, 0.20129999999994652, 0.1958999999999378, 0.2300000000000182, 0.21100000000001273, 0.2746999999999389, 0.19499999999993634, 0.22040000000015425, 0.19000000000005457, 0.1714999999999236, 0.22919999999999163, 0.3280000000002019, 0.2658000000001266, 0.361299999999801, 0.2053000000000793, 0.20929999999998472, 0.056599999999889405, 0.15229999999996835, 0.19699999999988904, 0.1834000000001197, 0.19920000000001892, 0.2401999999999589, 0.1797999999998865, 0.18309999999996762, 0.2054000000000542, 0.24900000000002365, 0.20839999999998327, 0.24410000000011678, 0.2032000000001517, 0.24809999999979482, 0.1714999999999236, 0.47109999999997854, 0.18830000000002656, 0.2421999999999116, 0.20479999999997744, 0.2841999999998279, 0.218199999999797, 0.1776999999999589, 0.48499999999989996, 0.17660000000000764, 0.16360000000008768, 0.22869999999988977, 0.23270000000002256, 0.22289999999998145, 0.19630000000006476, 0.2195000000001528, 0.1795999999999367, 0.205600000000004, 0.2937000000001717, 0.20959999999990941, 0.2725000000000364, 0.43679999999994834, 0.17290000000002692, 0.21800000000007458, 0.2054000000000542, 0.17400000000020555, 0.1471999999998843, 0.1977999999999156, 0.18630000000007385, 0.21109999999998763, 0.16300000000001091, 0.47070000000007894, 2.1536000000000968, 0.43429999999989377, 0.33599999999978536, 0.2236000000000331, 0.1247000000000753, 0.1791000000000622, 0.47420000000010987, 0.24959999999987303, 4.469900000000052, 0.342200000000048, 0.2657000000001517, 12.426799999999957, 0.3207999999999629, 0.26510000000007494, 0.3375999999998385, 0.21250000000009095, 0.2636999999999716, 0.23329999999987194, 0.19659999999998945, 0.2598000000000411, 0.25040000000012697, 0.21909999999979846, 0.12049999999999272, 0.22260000000005675, 0.2859000000000833, 0.5489000000000033, 0.25509999999985666, 0.2415000000000873, 0.3220000000001164, 0.25929999999993925, 0.22149999999987813, 0.24459999999999127, 0.3423999999999978, 6.979900000000043, 0.2680000000000291, 59.956699999999955, 58.47219999999993, 56.48730000000023, 10.891299999999774, 0.3737999999998465, 0.9608000000002903, 0.22280000000000655, 41.21270000000004, 2.3718000000003485, 0.2909999999997126, 0.2626000000000204, 0.24959999999964566, 0.6748999999999796, 0.23660000000018044, 0.23460000000022774, 0.2498000000000502, 0.23939999999993233, 0.245600000000195, 0.23050000000012005, 0.2424999999998363, 0.25549999999975626, 0.29440000000022337, 0.40319999999974243, 0.6226999999998952, 0.3512999999998101, 0.24929999999994834, 0.2606999999998152, 0.17489999999997963, 0.23410000000012587, 0.17849999999998545, 0.1734999999998763, 0.23320000000012442, 0.2614000000003216, 0.29890000000023065, 0.3079000000002452, 0.22359999999980573, 0.23909999999978027, 0.20010000000002037, 0.43489999999974316, 0.010199999999713327, 0.20100000000002183, 0.22890000000006694, 0.25759999999991123, 0.24989999999979773, 0.24769999999989523, 0.24099999999998545, 0.20870000000013533, 0.2474000000001979, 0.20180000000027576, 0.3623999999999796, 0.21390000000019427, 0.21430000000009386, 0.22000000000025466, 0.4375, 0.610700000000179, 0.2185999999996966, 0.2481999999999971, 0.1869000000001506, 0.2418999999999869, 0.29579999999987194, 0.3413999999997941, 0.31539999999995416, 1.0481999999997242, 0.2500999999997475, 0.404700000000048, 59.94150000000036, 59.83040000000028, 0.29890000000023065, 25.176800000000185, 0.8398000000001957, 0.8426999999996951, 0.5783999999998741, 0.35390000000006694, 59.95520000000033, 39.49330000000009, 0.31790000000000873, 1.053899999999885, 0.36520000000018626, 59.949699999999666, 0.20780000000013388, 0.3079000000002452, 0.5414999999998145, 59.94870000000037, 0.14030000000002474, 0.3206999999997606, 59.92540000000008, 2.968199999999797, 59.944000000000415, 0.3568999999997686, 0.4893000000001848, 0.3459000000002561, 0.5953999999996995, 7.496799999999894, 59.944800000000214, 59.803100000000086, 25.128200000000106, 0.40610000000015134, 3.0812000000000808, 59.94470000000001, 59.85050000000001, 36.67089999999962, 0.22269999999980428, 0.4216999999998734, 0.25189999999975043, 0.37390000000004875, 0.253400000000056, 55.91840000000002, 0.24490000000014334, 0.22810000000026776, 0.22959999999966385, 0.2545000000000073, 0.1969000000003689, 0.21139999999968495, 0.2199999999997999, 0.2660000000000764, 0.20440000000007785, 30.50070000000005, 59.95039999999972, 59.80019999999968, 0.06710000000020955, 0.4569000000001324, 25.24270000000024, 59.94450000000006, 0.10320000000001528, 0.3704000000002452, 13.100100000000111, 27.171699999999873, 0.3063999999999396, 59.95310000000018, 0.06970000000001164, 0.24459999999999127, 0.962500000000091, 0.24070000000028813, 0.45959999999968204, 0.4962000000000444, 59.029199999999946, 59.954499999999825, 0.3441000000002532, 0.1578999999996995, 59.700700000000325, 0.1772000000000844, 0.40599999999994907, 0.3265000000001237, 0.24769999999989523, 0.2665999999999258, 0.22850000000016735, 0.29579999999987194, 0.21829999999999927, 0.22800000000006548, 0.25959999999986394, 0.21570000000019718, 0.23299999999971988, 2.7521999999999025, 0.2559999999998581, 0.5834999999997308, 0.278400000000147, 0.5468000000000757, 0.3269999999997708, 0.26769999999987704, 0.22360000000026048, 28.914700000000266, 13.87159999999949, 42.69970000000012, 0.28699999999935244, 0.2566999999999098, 0.3007999999999811, 24.60689999999977, 0.26670000000012806, 53.8715000000002, 0.2528999999994994, 59.9413999999997, 0.20079999999961728, 23.895799999999326, 0.3356000000003405, 0.5122000000001208, 0.3338999999996304, 59.95629999999983], "type": "scatter", "uid": "c76ae005-fd3e-4cf2-85e2-b7e4dc73b4ab"}, {"marker": {"color": "black"}, "name": "rolled data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [null, null, null, null, null, null, null, null, null, 0.507849999999999, 0.44484999999999886, 0.3396500000000007, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.4511499999999984, 0.32260000000000133, 0.3081499999999977, 0.23389999999999844, 0.3081499999999977, 0.3824499999999986, 0.40629999999999455, 0.30819999999999936, 0.4054000000000002, 0.30819999999999936, 0.2254000000000005, 0.30819999999999936, 0.30819999999999936, 0.30579999999999785, 0.217649999999999, 0.217649999999999, 0.217649999999999, 0.22420000000000329, 0.22420000000000329, 0.2277000000000058, 0.23490000000000322, 0.2277000000000058, 0.2277000000000058, 0.2277000000000058, 0.22945000000000704, 0.22715000000000884, 0.22945000000000704, 0.22945000000000704, 0.22945000000000704, 0.21535000000000082, 0.20049999999999102, 0.19769999999998333, 0.1997999999999962, 0.214650000000006, 0.22350000000000136, 0.3025999999999982, 0.27259999999999707, 0.2494999999999976, 0.2494999999999976, 0.2917499999999933, 0.32859999999999445, 0.3682500000000033, 0.3682500000000033, 0.32859999999999445, 0.2917499999999933, 0.2781999999999982, 0.2781999999999982, 0.33140000000000214, 0.2781999999999982, 0.3247000000000071, 0.263850000000005, 0.263850000000005, 0.2696500000000128, 0.3086500000000143, 0.3553499999999872, 0.3553499999999872, 0.35095000000002585, 0.35095000000002585, 0.35095000000002585, 0.317300000000003, 0.317300000000003, 0.31875000000002274, 0.34445000000002324, 0.3108000000000004, 0.2654500000000155, 0.3108000000000004, 0.2654500000000155, 0.2321500000000185, 0.2654500000000155, 0.24500000000000455, 0.2690499999999929, 0.2690499999999929, 0.23134999999999195, 0.2690499999999929, 0.2690499999999929, 0.2588999999999828, 0.2837499999999977, 0.3760499999999922, 0.36589999999998213, 0.46759999999997603, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.5482499999999675, 0.5420000000000016, 0.5420000000000016, 0.5420000000000016, 0.5274000000000001, 0.35139999999998395, 0.35139999999998395, 0.4620999999999924, 0.4620999999999924, 0.4620999999999924, 0.3810999999999751, 0.3810999999999751, 0.3810999999999751, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.25364999999999327, 0.25550000000001205, 0.25550000000001205, 0.25284999999999513, 0.25284999999999513, 0.25284999999999513, 0.2383000000000095, 0.2970500000000129, 0.2383000000000095, 0.21229999999999905, 0.22479999999998768, 0.19409999999999172, 0.19409999999999172, 0.2181500000000085, 0.24025000000000318, 0.24025000000000318, 0.2578499999999906, 0.24025000000000318, 0.2578499999999906, 0.2990999999999815, 0.34209999999998786, 0.34209999999998786, 0.37930000000000064, 0.3669500000000028, 0.32974999999999, 0.3132500000000107, 0.3132500000000107, 0.47910000000001673, 0.3132500000000107, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.25679999999999836, 0.21510000000003515, 0.24095000000005484, 0.20640000000005898, 0.22355000000004566, 0.2515000000000214, 0.24405000000001564, 0.2585500000000138, 0.2585500000000138, 0.24405000000001564, 0.2585500000000138, 0.26600000000001955, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.3580500000000484, 0.36375000000003865, 0.36375000000003865, 0.27965000000000373, 0.3344500000000039, 0.2563499999999408, 0.29869999999999663, 0.29869999999999663, 0.27044999999998254, 0.27044999999998254, 0.27044999999998254, 0.2563499999999408, 0.22964999999999236, 0.263499999999965, 0.22964999999999236, 0.209350000000029, 0.19509999999996808, 0.209350000000029, 0.209350000000029, 0.202350000000024, 0.202350000000024, 0.202350000000024, 0.2028500000000122, 0.2028500000000122, 0.21059999999999945, 0.21059999999999945, 0.2769999999999868, 0.2156999999999698, 0.2156999999999698, 0.2156999999999698, 0.20199999999999818, 0.23919999999998254, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.22219999999998663, 0.2524500000000103, 0.25790000000000646, 0.25790000000000646, 0.25790000000000646, 0.23720000000002983, 0.2615000000000123, 0.22624999999999318, 0.21649999999993952, 0.231049999999982, 0.231049999999982, 0.231049999999982, 0.21649999999993952, 0.21649999999993952, 0.231049999999982, 0.24779999999992697, 0.24779999999992697, 0.24779999999992697, 0.27029999999996335, 0.23405000000002474, 0.27029999999996335, 0.27029999999996335, 0.27029999999996335, 0.28479999999996153, 0.2807999999999993, 0.2807999999999993, 0.2427500000000009, 0.26010000000002265, 0.23655000000002246, 0.2746000000000208, 0.24815000000000964, 0.2417499999999677, 0.2417499999999677, 0.2417499999999677, 0.24815000000000964, 0.24815000000000964, 0.2573000000000434, 0.2674500000000535, 0.27220000000005484, 0.27220000000005484, 0.27700000000004366, 0.327699999999993, 0.36675000000002456, 0.3188500000000545, 0.27700000000004366, 0.27700000000004366, 0.2750000000000341, 0.31405000000006567, 0.3069500000000289, 0.25109999999995125, 0.2437999999999647, 0.2437999999999647, 0.2437999999999647, 0.236850000000004, 0.24064999999995962, 0.2451499999999669, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.286200000000008, 0.286200000000008, 0.32165000000003374, 0.2666500000000269, 0.2876500000000419, 0.2876500000000419, 0.2876500000000419, 0.2452000000000112, 0.21829999999999927, 0.2095000000000482, 0.2095000000000482, 0.2095000000000482, 0.2055000000000291, 0.2055000000000291, 0.2055000000000291, 0.20105000000000928, 0.20215000000007421, 0.21120000000007622, 0.2736000000000445, 0.2736000000000445, 0.2736000000000445, 0.22325000000006412, 0.25285000000002356, 0.25285000000002356, 0.25285000000002356, 0.25534999999996444, 0.23320000000001073, 0.22205000000002428, 0.21999999999997044, 0.228650000000016, 0.228650000000016, 0.22544999999996662, 0.21744999999998527, 0.22544999999996662, 0.2311499999999569, 0.2311499999999569, 0.23739999999992278, 0.23739999999992278, 0.25719999999989795, 0.25719999999989795, 0.25719999999989795, 0.2671999999999457, 0.2671999999999457, 0.2574499999999489, 0.2574499999999489, 0.2512999999999579, 0.24020000000001573, 0.2512999999999579, 0.24020000000001573, 0.23304999999999154, 0.23304999999999154, 0.23304999999999154, 0.23034999999998718, 0.2268500000000131, 0.2268500000000131, 0.23034999999998718, 0.23034999999998718, 0.2268500000000131, 0.2239500000000021, 0.2149000000000001, 0.2164500000000089, 0.2044500000000653, 0.2044500000000653, 0.195699999999988, 0.195699999999988, 0.195699999999988, 0.2108499999999367, 0.2108499999999367, 0.21089999999992415, 0.21089999999992415, 0.18724999999983538, 0.1916999999998552, 0.1916999999998552, 0.19709999999997763, 0.19709999999997763, 0.19424999999989723, 0.1916999999998552, 0.19424999999989723, 0.19794999999999163, 0.20460000000002765, 0.21424999999999272, 0.22120000000006712, 0.22120000000006712, 0.22795000000007803, 0.22795000000007803, 0.23469999999997526, 0.2419999999999618, 0.2490499999998974, 0.2490499999998974, 0.24284999999986212, 0.23725000000001728, 0.23654999999996562, 0.23469999999997526, 0.2271499999999378, 0.23500000000001364, 0.23575000000005275, 0.23575000000005275, 0.23575000000005275, 0.2380000000000564, 0.2380000000000564, 0.24585000000001855, 0.24430000000006658, 0.24430000000006658, 0.2608500000000049, 0.2608500000000049, 0.27215000000001055, 0.27215000000001055, 0.2653500000000122, 0.2581000000000131, 0.2581000000000131, 0.2581000000000131, 0.2718000000000984, 0.2718000000000984, 0.2587500000000773, 0.2625500000000329, 0.2579000000000633, 0.2534500000000435, 0.2479999999999336, 0.2409499999998843, 0.24664999999993142, 0.2409499999998843, 0.23464999999987413, 0.23464999999987413, 0.2298999999999296, 0.22670000000005075, 0.22025000000007822, 0.22025000000007822, 0.21105000000000018, 0.20414999999991323, 0.20414999999991323, 0.21105000000000018, 0.21105000000000018, 0.20574999999996635, 0.20574999999996635, 0.22264999999993051, 0.2415499999998474, 0.2415499999998474, 0.2415499999998474, 0.25769999999988613, 0.2415499999998474, 0.22644999999988613, 0.22644999999988613, 0.24389999999982592, 0.23489999999992506, 0.21775000000002365, 0.21775000000002365, 0.21775000000002365, 0.23230000000000928, 0.23230000000000928, 0.23230000000000928, 0.23324999999999818, 0.24129999999991014, 0.25530000000003383, 0.2987000000000535, 0.3140000000000782, 0.3140000000000782, 0.3575499999999465, 0.3140000000000782, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.25120000000003984, 0.25120000000003984, 0.23850000000004457, 0.23850000000004457, 0.2539000000000442, 0.2901000000000522, 0.2901000000000522, 0.2726499999999987, 0.26625000000012733, 0.2478000000000975, 0.256650000000036, 0.26625000000012733, 0.26625000000012733, 0.256650000000036, 0.2597000000000662, 0.2597000000000662, 0.27290000000016335, 0.27290000000016335, 0.28130000000010114, 0.28300000000001546, 0.28300000000001546, 0.29360000000008313, 0.30150000000014643, 0.31690000000014606, 0.30150000000014643, 0.2940000000000964, 0.2940000000000964, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.2833500000000413, 0.2552500000000464, 0.2552500000000464, 0.2552500000000464, 0.29520000000002256, 0.2552500000000464, 0.2552500000000464, 0.24260000000003856, 0.2552500000000464, 0.24260000000003856, 0.2400000000000091, 0.2400000000000091, 0.2390500000000202, 0.23765000000003056, 0.23765000000003056, 0.23584999999991396, 0.23584999999991396, 0.22834999999997763, 0.22834999999997763, 0.21680000000003474, 0.20320000000003802, 0.19389999999998508, 0.19389999999998508, 0.19389999999998508, 0.19024999999999181, 0.19024999999999181, 0.18795000000000073, 0.19050000000004275, 0.19050000000004275, 0.19270000000005894, 0.1938000000000102, 0.19040000000006785, 0.19605000000001382, 0.2005500000000211, 0.2005500000000211, 0.19605000000001382, 0.2005500000000211, 0.19605000000001382, 0.19200000000012096, 0.1897000000000162, 0.1897000000000162, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19305000000008476, 0.2005500000000211, 0.19780000000002929, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20640000000003056, 0.2066499999999678, 0.20679999999993015, 0.20859999999993306, 0.20679999999993015, 0.20679999999993015, 0.20859999999993306, 0.2102500000000873, 0.2107500000000755, 0.2102500000000873, 0.2102500000000873, 0.208849999999984, 0.20590000000004238, 0.20614999999997963, 0.2157000000000835, 0.22480000000007294, 0.22480000000007294, 0.22480000000007294, 0.21485000000006949, 0.21485000000006949, 0.20730000000003201, 0.20730000000003201, 0.20730000000003201, 0.2022500000000491, 0.2022500000000491, 0.19809999999995398, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19809999999995398, 0.20230000000003656, 0.20430000000010295, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.22529999999994743, 0.22529999999994743, 0.22529999999994743, 0.2301999999998543, 0.21149999999988722, 0.2301999999998543, 0.21149999999988722, 0.21149999999988722, 0.21149999999988722, 0.22344999999984339, 0.22054999999988922, 0.22054999999988922, 0.2188499999999749, 0.20790000000010878, 0.2125500000000784, 0.2125500000000784, 0.2145500000000311, 0.22120000000006712, 0.22120000000006712, 0.2145500000000311, 0.213799999999992, 0.213799999999992, 0.2075999999999567, 0.2075999999999567, 0.2074999999999818, 0.2015999999999849, 0.2015999999999849, 0.19204999999999472, 0.19204999999999472, 0.2015999999999849, 0.2015999999999849, 0.20444999999995161, 0.21735000000001037, 0.21735000000001037, 0.21735000000001037, 0.27979999999990923, 0.2927999999998292, 0.38514999999983957, 0.3390999999999167, 0.30084999999996853, 0.30084999999996853, 0.2932500000000573, 0.2932500000000573, 0.3291999999999007, 0.3291999999999007, 0.2932500000000573, 0.2932500000000573, 0.2654000000001133, 0.2644000000000233, 0.26175000000000637, 0.25510000000008404, 0.24184999999999945, 0.22794999999996435, 0.22794999999996435, 0.24184999999999945, 0.24184999999999945, 0.24595000000010714, 0.2527499999999918, 0.2527499999999918, 0.248299999999972, 0.24984999999992397, 0.25719999999989795, 0.2726000000000113, 0.2636499999999842, 0.2636499999999842, 0.29500000000007276, 0.3322000000000571, 3.6611500000000206, 3.676849999999945, 3.970350000000167, 3.970350000000167, 8.935599999999909, 6.631550000000061, 6.631550000000061, 1.6663000000003194, 0.6673000000000684, 0.524349999999913, 0.33239999999977954, 0.2767999999998665, 0.2562000000000353, 0.2562000000000353, 0.24969999999984793, 0.24759999999992033, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.2477000000001226, 0.25264999999990323, 0.2523999999998523, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.25499999999988177, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.23365000000012515, 0.23365000000012515, 0.23365000000012515, 0.23614999999995234, 0.23614999999995234, 0.23614999999995234, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.24004999999988286, 0.2349500000000262, 0.24420000000009168, 0.2349500000000262, 0.24420000000009168, 0.24420000000009168, 0.24420000000009168, 0.23050000000012005, 0.23050000000012005, 0.23050000000012005, 0.21929999999997563, 0.23370000000022628, 0.21929999999997563, 0.23095000000012078, 0.23095000000012078, 0.245049999999992, 0.2719999999999345, 0.30559999999991305, 0.27294999999980973, 0.27294999999980973, 0.30559999999991305, 0.3283999999998741, 0.3283999999998741, 0.37304999999992106, 0.6222500000001219, 0.8412499999999454, 0.8412499999999454, 0.7091000000000349, 0.8412499999999454, 13.00974999999994, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.7105499999997846, 0.4718000000000302, 0.45335000000000036, 0.7976999999998498, 0.45335000000000036, 0.34294999999997344, 0.45335000000000036, 0.45335000000000036, 1.7548499999998057, 0.44919999999979154, 0.5153999999999996, 0.5153999999999996, 0.5423499999999422, 0.5423499999999422, 1.7817999999997483, 5.232499999999845, 5.232499999999845, 4.046099999999797, 1.8382999999998901, 5.288999999999987, 16.3125, 30.899549999999863, 30.899549999999863, 30.899549999999863, 14.104700000000093, 1.751449999999977, 0.41390000000001237, 1.751449999999977, 0.3977999999999611, 0.3136500000000524, 0.25264999999990323, 0.25264999999990323, 0.25264999999990323, 0.24839999999994689, 0.2372499999999036, 0.2372499999999036, 0.2288499999999658, 0.2288499999999658, 0.2288499999999658, 0.24204999999983556, 0.2372499999999036, 0.24299999999993815, 0.3614500000001044, 12.849800000000187, 12.849800000000187, 12.849800000000187, 19.171400000000176, 19.171400000000176, 6.778500000000122, 6.778500000000122, 6.778500000000122, 6.735250000000178, 0.6664500000001681, 0.3384000000000924, 0.4149999999999636, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4018499999999676, 0.4778999999998632, 0.4778999999998632, 0.43279999999981555, 0.43279999999981555, 0.37505000000010114, 0.33530000000018845, 0.29655000000002474, 0.28119999999989886, 0.2571499999999105, 0.2571499999999105, 0.2536499999998796, 0.2536499999998796, 0.24034999999980755, 0.24034999999980755, 0.244499999999789, 0.244499999999789, 0.25779999999986103, 0.25779999999986103, 0.26900000000000546, 0.273050000000012, 0.273050000000012, 0.3026999999999589, 0.43689999999992324, 0.43689999999992324, 0.43689999999992324, 0.3069999999995616, 0.31389999999987594, 0.31389999999987594, 0.29389999999966676, 7.086199999999735, 7.086199999999735, 7.086199999999735, 0.29389999999966676, 0.29389999999966676, 0.3182000000001608, 0.42390000000023065, 0.42390000000023065, 0.42390000000023065], "type": "scatter", "uid": "5a0e7e67-38ba-4571-8317-d3af3b9f3c77"}], "layout": {"height": 400, "title": {"text": "Reaction time - trial number"}, "width": 630, "xaxis": {"title": {"text": "Trial number"}}, "yaxis": {"dtick": [-1.0, 0.0, 1.0, 2.0], "range": [-1.0, 2.0], "title": {"text": "Reaction time (s)"}, "type": "log"}}} diff --git a/notebooks/notebooks_plotting/session_psych_results.json b/notebooks/notebooks_plotting/session_psych_results.json index 647dcd04..33b50267 100644 --- a/notebooks/notebooks_plotting/session_psych_results.json +++ b/notebooks/notebooks_plotting/session_psych_results.json @@ -1 +1 @@ -{"data": [{"error_y": {"array": [0.0, 0.0, -0.3836038336025125, -0.46427851846370377, -0.2879549461090419, -0.20924750055216734, -0.1381131653607266, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.19999999999999996, -0.25, -0.2727272727272727, -0.1875, -0.06666666666666665, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.8, 0.75, 0.7272727272727273, 0.8125, 0.9333333333333333, 1.0, 1.0], "type": "scatter", "uid": "4f191ad1-f0df-497c-9c62-8afe0546c5dc"}, {"error_y": {"array": [0.0, 0.0, -0.15384615384615385, -0.25, -0.3670443967584608, -0.2727272727272727, -0.296495131306036, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.21458742160913824, -0.26805132761398, -0.3670443967584608, -0.2879549461090418, -0.296495131306036, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.15384615384615385, 0.25, 0.625, 0.2727272727272727, 0.46153846153846156, 1.0, 1.0], "type": "scatter", "uid": "33bc087d-9acf-4f85-8956-c74ea387e55c"}, {"error_y": {"array": [0.0, -0.04081632653061224, -0.13177561391379378, -0.11094209387617218, -0.1941811885873566, -0.22061561047027944, -0.3836038336025125, -0.2034366540221194, 0.0], "arrayminus": [-0.0, -0.060614671562821985, -0.1317756139137938, -0.11094209387617218, -0.1941811885873566, -0.22061561047027944, -0.19999999999999996, -0.09999999999999998, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.04081632653061224, 0.1794871794871795, 0.13636363636363635, 0.35714285714285715, 0.23529411764705882, 0.8, 0.9, 1.0], "type": "scatter", "uid": "6dc8e21b-3086-446c-bdd8-ac7a626c018e"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.1750305540280344e-10, 2.1750305540280344e-10, 2.1750322161121377e-10, 2.17503498625231e-10, 2.175042742644792e-10, 2.1750621336259975e-10, 2.175109226008925e-10, 2.1752216936999163e-10, 2.1754892892405506e-10, 2.176115894947502e-10, 2.177564124229528e-10, 2.180866685342824e-10, 2.1883028496210762e-10, 2.2048295058884176e-10, 2.2410801142098534e-10, 2.3195659416807442e-10, 2.487292388827073e-10, 2.8410813949475524e-10, 3.5776622207634045e-10, 5.091325537824801e-10, 8.161559427102826e-10, 1.430832428829832e-09, 2.6454927992067985e-09, 5.014662660858792e-09, 9.575773746794965e-09, 1.8242961502615548e-08, 3.449915518964722e-08, 6.459403719102752e-08, 1.1958604081448368e-07, 2.1876957225640767e-07, 3.9533786632470657e-07, 7.055930232175925e-07, 1.2436873773737786e-06, 2.16483875231221e-06, 3.7212942982809804e-06, 6.317120364791331e-06, 1.0590265192858506e-05, 1.753335519580364e-05, 2.86683787684596e-05, 4.629473947910489e-05, 7.38349551256484e-05, 0.00011630719780379618, 0.00018095834395851285, 0.00027809439510897505, 0.00042214591469183125, 0.0006330031126426098, 0.0009376468174294332, 0.0013720861908919847, 0.001983590251465019, 0.0028331671810377236, 0.003998202998249774, 0.005575120770993185, 0.007681866028585271, 0.010459968179281362, 0.014075878137231084, 0.018721247131883702, 0.024611799775001147, 0.03198447466080575, 0.04109256529230323, 0.05219869712182512, 0.06556562260568011, 0.0814449993745941, 0.1000645246724583, 0.12161401395242392, 0.14623121013170617, 0.17398826729684064, 0.20487994409447854, 0.23881454728957505, 0.27560857229104113, 0.31498579252797304, 0.35658126315294497, 0.39995034848454963, 0.44458248905663295, 0.4899190322278104, 0.5353741013886454, 0.5803572112109288, 0.6242961802791633, 0.6666588656956928, 0.7069723499380114, 0.7448384362311206, 0.7799446293188768, 0.812070158139591, 0.8410869947386267, 0.8669561991576368, 0.8897202375816408, 0.9094921544210707, 0.9264426135794952, 0.9407858575055231, 0.9527655735912658, 0.9626415237513224, 0.9706776078790373, 0.9771318206612662, 0.9822483480266375, 0.9862518545382729, 0.9893438510194621, 0.9917009111102385, 0.9934744288123452, 0.9947915738745674, 0.9957571019207271, 0.9964557032075113, 0.9969546187906162, 0.997306307117557, 0.9975510003921054, 0.997719042957675, 0.997832949786845, 0.997909160040483, 0.9979594881055504, 0.9979922931204371, 0.9980133989982786, 0.9980268019290105, 0.9980352028963138, 0.998040400366184, 0.9980435742266319, 0.9980454872348293, 0.9980466253310674, 0.9980472936354258, 0.9980476809846974, 0.998047902581931, 0.9980480277112441, 0.9980480974520433, 0.9980481358181653, 0.998048156650695, 0.9980481678159653, 0.9980481737224566, 0.998048176806518, 0.9980481783959778, 0.9980481792045323, 0.9980481796105096, 0.9980481798117096, 0.9980481799101304, 0.9980481799576505, 0.9980481799802972, 0.99804817999095, 0.9980481799958959, 0.9980481799981625, 0.9980481799991877, 0.9980481799996456, 0.9980481799998473, 0.998048179999935, 0.9980481799999726, 0.9980481799999886, 0.9980481799999953, 0.9980481799999981, 0.9980481799999993, 0.9980481799999997, 0.9980481799999998, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818], "type": "scatter", "uid": "58f6eee9-78ab-449e-afff-d1704a85e2e2"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668000000000006, 0.11668000000000016, 0.1166800000000004, 0.11668000000000099, 0.1166800000000024, 0.11668000000000595, 0.11668000000001433, 0.11668000000003428, 0.11668000000008107, 0.11668000000018913, 0.11668000000043573, 0.11668000000099109, 0.11668000000222577, 0.1166800000049352, 0.11668000001080443, 0.11668000002335456, 0.1166800000498447, 0.11668000010503783, 0.11668000021855249, 0.11668000044900707, 0.11668000091084027, 0.11668000182443014, 0.11668000360838438, 0.11668000704699112, 0.11668001358955041, 0.1166800258774932, 0.1166800486587175, 0.11668009034962104, 0.11668016566296471, 0.11668029996077432, 0.11668053635252247, 0.1166809470878728, 0.11668165155096381, 0.1166828442223534, 0.11668483741721211, 0.11668812551798326, 0.11669347986959618, 0.11670208653792412, 0.11671574273142468, 0.11673713174102333, 0.11677020051631833, 0.11682066803731436, 0.11689669580912686, 0.11700975320682636, 0.11717570889492371, 0.11741617382011389, 0.11776010993003659, 0.11824570051270158, 0.1189224519440761, 0.11985346240250636, 0.12111775148583434, 0.12281249769245306, 0.1250549819836944, 0.12798399031568564, 0.1317603927203149, 0.13656659878006386, 0.14260459688686214, 0.15009232428416916, 0.1592581911603968, 0.17033369611176208, 0.18354421867317722, 0.19909824863787137, 0.21717549760799837, 0.23791451723839996, 0.26140059974224494, 0.2876548378016395, 0.3166252539469298, 0.34818086012600796, 0.3821093711336339, 0.4181190753320089, 0.4558450777115338, 0.494859798453764, 0.5346872665867579, 0.574820428417173, 0.6147404286617565, 0.6539366476728253, 0.6919262106254948, 0.7282717317296159, 0.7625962130463538, 0.7945942655587201, 0.8240391320839016, 0.8507853335848097, 0.8747670969084396, 0.8959930202006112, 0.914537666079184, 0.9305309252179947, 0.9441460578975099, 0.9555873020792264, 0.9650778459844319, 0.9728488193569312, 0.9791297819581128, 0.9841410018610193, 0.9880876388268848, 0.9911557942858823, 0.9935102688530595, 0.9952937852455008, 0.9966273885529908, 0.9976117229852243, 0.9983288979858047, 0.9988446893392315, 0.9992108649542211, 0.9994674735654057, 0.9996449821963154, 0.9997661909990191, 0.9998478897249685, 0.9999022476461166, 0.9999379483537224, 0.9999610933563878, 0.9999759050278005, 0.9999852616118264, 0.9999910960224448, 0.9999946872512174, 0.9999968692553117, 0.9999981779382935, 0.9999989527206976, 0.9999994055050808, 0.9999996667028854, 0.9999998154381645, 0.9999998990417392, 0.9999999454293582, 0.9999999708359079, 0.999999984571762, 0.9999999919022351, 0.9999999957639012, 0.9999999977719939, 0.9999999988027578, 0.9999999993250348, 0.9999999995862564, 0.9999999997152249, 0.9999999997780776, 0.9999999998083141, 0.9999999998226724, 0.9999999998294029, 0.9999999998325171, 0.9999999998339395, 0.9999999998345808, 0.9999999998348662, 0.9999999998349917, 0.9999999998350461, 0.9999999998350693, 0.9999999998350791, 0.9999999998350831, 0.9999999998350848, 0.9999999998350856, 0.9999999998350858, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086], "type": "scatter", "uid": "b7e6c533-5710-4cf1-a31e-d75060a12b6c"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.014622700000000656, 0.014622700000001205, 0.014622700000002134, 0.01462270000000383, 0.014622700000006839, 0.014622700000012144, 0.014622700000021388, 0.01462270000003758, 0.014622700000065585, 0.014622700000113939, 0.014622700000196864, 0.014622700000338317, 0.014622700000578283, 0.014622700000983278, 0.014622700001662919, 0.014622700002797548, 0.014622700004681287, 0.014622700007791988, 0.014622700012900806, 0.014622700021246134, 0.014622700034804426, 0.01462270005671297, 0.014622700091923211, 0.014622700148205202, 0.014622700237683185, 0.014622700379167521, 0.014622700601675935, 0.01462270094971691, 0.014622701491168937, 0.014622702328959495, 0.014622703618267577, 0.014622705591706659, 0.014622708595959969, 0.01462271314474222, 0.014622719994883729, 0.014622730254939681, 0.014622745539244896, 0.014622768185034348, 0.014622801556479919, 0.014622850467685076, 0.014622921767351641, 0.014623025141614229, 0.014623174209173846, 0.0146233880052104, 0.014623692978601967, 0.014624125661809758, 0.014624736215589223, 0.014625593102678238, 0.014626789207019741, 0.014628449789022373, 0.014630742753777699, 0.014633891808624566, 0.014638193199041721, 0.014644036836911347, 0.014651932771099198, 0.014662544094198876, 0.01467672752684384, 0.01469558306606793, 0.014720514218661288, 0.014753300453945553, 0.014796183590193416, 0.014851969860015378, 0.014924149365266514, 0.015017034512435938, 0.015135918794962294, 0.015287256939070324, 0.01547886693503502, 0.015720153819072567, 0.016022354239208243, 0.016398799824327185, 0.016865196180068945, 0.01743991296927731, 0.01814427902141163, 0.019002874791416356, 0.0200438128056121, 0.021298995057067876, 0.022804334727324405, 0.024599928210202474, 0.026730162302253287, 0.029243740715187344, 0.032193613871619, 0.035636796374758854, 0.039634057690841884, 0.04424947352523498, 0.04954982815599064, 0.05560386162266043, 0.06248136012128974, 0.070252093148807, 0.07898460674118082, 0.08874488837904779, 0.09959492556417528, 0.11159118643178761, 0.12478305675875838, 0.13921127304010664, 0.15490639561911762, 0.17188736886932354, 0.19016021687446943, 0.2097169227241439, 0.2305345372973478, 0.2525745591879451, 0.2757826212735063, 0.30008851148105475, 0.3254065457972316, 0.3516363008362155, 0.3786637017255449, 0.40636244916801467, 0.4345957577953415, 0.46321836686638185, 0.49207877448319987, 0.5210216382619146, 0.549890279191449, 0.5785292215387877, 0.6067867003008462, 0.6345170689262575, 0.6615830437761366, 0.6878577278806207, 0.7132263646863793, 0.7375877822942689, 0.7608554996992283, 0.7829584782641782, 0.803841513566159, 0.8234652743366327, 0.8418060060059874, 0.8588549259418639, 0.8746173455076903, 0.8891115603190519, 0.9023675543974525, 0.9144255662696494, 0.9253345654872362, 0.9351506866820165, 0.9439356653359298, 0.9517553151925598, 0.9586780819695756, 0.9647737020644436, 0.9701119885957291, 0.9747617606892082, 0.9787899256720828, 0.9822607180099616, 0.9852350935932416, 0.9877702734851028, 0.9899194275649764, 0.9917314856736489, 0.9932510618806532, 0.9945184763063191, 0.9955698584659693, 0.9964373162675696, 0.997149155479054, 0.9977301355744062, 0.9982017492561508, 0.9985825145302792, 0.998888269882176, 0.9991324647864394, 0.9993264394119248, 0.9994796889035013, 0.9996001089964093, 0.9996942209239855, 0.9997673746033159, 0.9998239299247015, 0.9998674166364594, 0.9999006738194003, 0.9999259703023119, 0.9999451076003972, 0.9999595070832095, 0.9999702831173805, 0.9999783039013573, 0.9999842416317338, 0.999988613528715, 0.9999918151146228, 0.999994146994596, 0.9999958362410595, 0.9999970533393062, 0.9999979255151372, 0.9999985471398204, 0.9999989877943574, 0.9999992984748844, 0.9999995163339377, 0.9999996682777373, 0.9999997736766532, 0.9999998463935097, 0.9999998962911307, 0.9999999303453065, 0.9999999534609879, 0.9999999690668877, 0.9999999795458123, 0.9999999865440777, 0.9999999911925463, 0.9999999942635135, 0.9999999962813512, 0.9999999976000422, 0.9999999984571704, 0.999999999011278, 0.9999999993675555, 0.9999999995953945, 0.99999999974031, 0.9999999998319838, 0.9999999998896635, 0.9999999999257585, 0.999999999948224, 0.9999999999621308, 0.999999999970693], "type": "scatter", "uid": "68bf32bd-214b-40e5-96d7-1508a1eb31df"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.8, 0.75, 0.7272727272727273, 0.8125, 0.9333333333333333, 1.0, 1.0], "type": "scatter", "uid": "e1c63c60-e25e-477d-82e5-31b6513ffe08"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.15384615384615385, 0.25, 0.625, 0.2727272727272727, 0.46153846153846156, 1.0, 1.0], "type": "scatter", "uid": "94f706db-f1a6-44bb-baeb-d441ccd9e23b"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.04081632653061224, 0.1794871794871795, 0.13636363636363635, 0.35714285714285715, 0.23529411764705882, 0.8, 0.9, 1.0], "type": "scatter", "uid": "808ffe9e-03a8-4301-9723-0184be40cf2b"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast(%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} \ No newline at end of file +{"data": [{"error_y": {"array": [0.0, 0.0, -0.3836038336025125, -0.46427851846370377, -0.2879549461090419, -0.20924750055216734, -0.1381131653607266, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.19999999999999996, -0.25, -0.2727272727272727, -0.1875, -0.06666666666666665, -0.0, -0.0], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.8, 0.75, 0.7272727272727273, 0.8125, 0.9333333333333333, 1.0, 1.0], "type": "scatter", "uid": "4f191ad1-f0df-497c-9c62-8afe0546c5dc"}, {"error_y": {"array": [0.0, 0.0, -0.15384615384615385, -0.25, -0.3670443967584608, -0.2727272727272727, -0.296495131306036, 0.0, 0.0], "arrayminus": [-0.0, -0.0, -0.21458742160913824, -0.26805132761398, -0.3670443967584608, -0.2879549461090418, -0.296495131306036, -0.0, -0.0], "color": "rgba(0.133, 0.133, 0.133, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.15384615384615385, 0.25, 0.625, 0.2727272727272727, 0.46153846153846156, 1.0, 1.0], "type": "scatter", "uid": "33bc087d-9acf-4f85-8956-c74ea387e55c"}, {"error_y": {"array": [0.0, -0.04081632653061224, -0.13177561391379378, -0.11094209387617218, -0.1941811885873566, -0.22061561047027944, -0.3836038336025125, -0.2034366540221194, 0.0], "arrayminus": [-0.0, -0.060614671562821985, -0.1317756139137938, -0.11094209387617218, -0.1941811885873566, -0.22061561047027944, -0.19999999999999996, -0.09999999999999998, -0.0], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "showlegend": false, "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.04081632653061224, 0.1794871794871795, 0.13636363636363635, 0.35714285714285715, 0.23529411764705882, 0.8, 0.9, 1.0], "type": "scatter", "uid": "6dc8e21b-3086-446c-bdd8-ac7a626c018e"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)"}, "name": "p_left = 0.2 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.17503e-10, 2.1750305540280344e-10, 2.1750305540280344e-10, 2.1750322161121377e-10, 2.17503498625231e-10, 2.175042742644792e-10, 2.1750621336259975e-10, 2.175109226008925e-10, 2.1752216936999163e-10, 2.1754892892405506e-10, 2.176115894947502e-10, 2.177564124229528e-10, 2.180866685342824e-10, 2.1883028496210762e-10, 2.2048295058884176e-10, 2.2410801142098534e-10, 2.3195659416807442e-10, 2.487292388827073e-10, 2.8410813949475524e-10, 3.5776622207634045e-10, 5.091325537824801e-10, 8.161559427102826e-10, 1.430832428829832e-09, 2.6454927992067985e-09, 5.014662660858792e-09, 9.575773746794965e-09, 1.8242961502615548e-08, 3.449915518964722e-08, 6.459403719102752e-08, 1.1958604081448368e-07, 2.1876957225640767e-07, 3.9533786632470657e-07, 7.055930232175925e-07, 1.2436873773737786e-06, 2.16483875231221e-06, 3.7212942982809804e-06, 6.317120364791331e-06, 1.0590265192858506e-05, 1.753335519580364e-05, 2.86683787684596e-05, 4.629473947910489e-05, 7.38349551256484e-05, 0.00011630719780379618, 0.00018095834395851285, 0.00027809439510897505, 0.00042214591469183125, 0.0006330031126426098, 0.0009376468174294332, 0.0013720861908919847, 0.001983590251465019, 0.0028331671810377236, 0.003998202998249774, 0.005575120770993185, 0.007681866028585271, 0.010459968179281362, 0.014075878137231084, 0.018721247131883702, 0.024611799775001147, 0.03198447466080575, 0.04109256529230323, 0.05219869712182512, 0.06556562260568011, 0.0814449993745941, 0.1000645246724583, 0.12161401395242392, 0.14623121013170617, 0.17398826729684064, 0.20487994409447854, 0.23881454728957505, 0.27560857229104113, 0.31498579252797304, 0.35658126315294497, 0.39995034848454963, 0.44458248905663295, 0.4899190322278104, 0.5353741013886454, 0.5803572112109288, 0.6242961802791633, 0.6666588656956928, 0.7069723499380114, 0.7448384362311206, 0.7799446293188768, 0.812070158139591, 0.8410869947386267, 0.8669561991576368, 0.8897202375816408, 0.9094921544210707, 0.9264426135794952, 0.9407858575055231, 0.9527655735912658, 0.9626415237513224, 0.9706776078790373, 0.9771318206612662, 0.9822483480266375, 0.9862518545382729, 0.9893438510194621, 0.9917009111102385, 0.9934744288123452, 0.9947915738745674, 0.9957571019207271, 0.9964557032075113, 0.9969546187906162, 0.997306307117557, 0.9975510003921054, 0.997719042957675, 0.997832949786845, 0.997909160040483, 0.9979594881055504, 0.9979922931204371, 0.9980133989982786, 0.9980268019290105, 0.9980352028963138, 0.998040400366184, 0.9980435742266319, 0.9980454872348293, 0.9980466253310674, 0.9980472936354258, 0.9980476809846974, 0.998047902581931, 0.9980480277112441, 0.9980480974520433, 0.9980481358181653, 0.998048156650695, 0.9980481678159653, 0.9980481737224566, 0.998048176806518, 0.9980481783959778, 0.9980481792045323, 0.9980481796105096, 0.9980481798117096, 0.9980481799101304, 0.9980481799576505, 0.9980481799802972, 0.99804817999095, 0.9980481799958959, 0.9980481799981625, 0.9980481799991877, 0.9980481799996456, 0.9980481799998473, 0.998048179999935, 0.9980481799999726, 0.9980481799999886, 0.9980481799999953, 0.9980481799999981, 0.9980481799999993, 0.9980481799999997, 0.9980481799999998, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818, 0.99804818], "type": "scatter", "uid": "58f6eee9-78ab-449e-afff-d1704a85e2e2"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)"}, "name": "p_left = 0.5 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668, 0.11668000000000006, 0.11668000000000016, 0.1166800000000004, 0.11668000000000099, 0.1166800000000024, 0.11668000000000595, 0.11668000000001433, 0.11668000000003428, 0.11668000000008107, 0.11668000000018913, 0.11668000000043573, 0.11668000000099109, 0.11668000000222577, 0.1166800000049352, 0.11668000001080443, 0.11668000002335456, 0.1166800000498447, 0.11668000010503783, 0.11668000021855249, 0.11668000044900707, 0.11668000091084027, 0.11668000182443014, 0.11668000360838438, 0.11668000704699112, 0.11668001358955041, 0.1166800258774932, 0.1166800486587175, 0.11668009034962104, 0.11668016566296471, 0.11668029996077432, 0.11668053635252247, 0.1166809470878728, 0.11668165155096381, 0.1166828442223534, 0.11668483741721211, 0.11668812551798326, 0.11669347986959618, 0.11670208653792412, 0.11671574273142468, 0.11673713174102333, 0.11677020051631833, 0.11682066803731436, 0.11689669580912686, 0.11700975320682636, 0.11717570889492371, 0.11741617382011389, 0.11776010993003659, 0.11824570051270158, 0.1189224519440761, 0.11985346240250636, 0.12111775148583434, 0.12281249769245306, 0.1250549819836944, 0.12798399031568564, 0.1317603927203149, 0.13656659878006386, 0.14260459688686214, 0.15009232428416916, 0.1592581911603968, 0.17033369611176208, 0.18354421867317722, 0.19909824863787137, 0.21717549760799837, 0.23791451723839996, 0.26140059974224494, 0.2876548378016395, 0.3166252539469298, 0.34818086012600796, 0.3821093711336339, 0.4181190753320089, 0.4558450777115338, 0.494859798453764, 0.5346872665867579, 0.574820428417173, 0.6147404286617565, 0.6539366476728253, 0.6919262106254948, 0.7282717317296159, 0.7625962130463538, 0.7945942655587201, 0.8240391320839016, 0.8507853335848097, 0.8747670969084396, 0.8959930202006112, 0.914537666079184, 0.9305309252179947, 0.9441460578975099, 0.9555873020792264, 0.9650778459844319, 0.9728488193569312, 0.9791297819581128, 0.9841410018610193, 0.9880876388268848, 0.9911557942858823, 0.9935102688530595, 0.9952937852455008, 0.9966273885529908, 0.9976117229852243, 0.9983288979858047, 0.9988446893392315, 0.9992108649542211, 0.9994674735654057, 0.9996449821963154, 0.9997661909990191, 0.9998478897249685, 0.9999022476461166, 0.9999379483537224, 0.9999610933563878, 0.9999759050278005, 0.9999852616118264, 0.9999910960224448, 0.9999946872512174, 0.9999968692553117, 0.9999981779382935, 0.9999989527206976, 0.9999994055050808, 0.9999996667028854, 0.9999998154381645, 0.9999998990417392, 0.9999999454293582, 0.9999999708359079, 0.999999984571762, 0.9999999919022351, 0.9999999957639012, 0.9999999977719939, 0.9999999988027578, 0.9999999993250348, 0.9999999995862564, 0.9999999997152249, 0.9999999997780776, 0.9999999998083141, 0.9999999998226724, 0.9999999998294029, 0.9999999998325171, 0.9999999998339395, 0.9999999998345808, 0.9999999998348662, 0.9999999998349917, 0.9999999998350461, 0.9999999998350693, 0.9999999998350791, 0.9999999998350831, 0.9999999998350848, 0.9999999998350856, 0.9999999998350858, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086, 0.999999999835086], "type": "scatter", "uid": "b7e6c533-5710-4cf1-a31e-d75060a12b6c"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)"}, "name": "p_left = 0.8 model fits", "x": [-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], "y": [0.014622700000000656, 0.014622700000001205, 0.014622700000002134, 0.01462270000000383, 0.014622700000006839, 0.014622700000012144, 0.014622700000021388, 0.01462270000003758, 0.014622700000065585, 0.014622700000113939, 0.014622700000196864, 0.014622700000338317, 0.014622700000578283, 0.014622700000983278, 0.014622700001662919, 0.014622700002797548, 0.014622700004681287, 0.014622700007791988, 0.014622700012900806, 0.014622700021246134, 0.014622700034804426, 0.01462270005671297, 0.014622700091923211, 0.014622700148205202, 0.014622700237683185, 0.014622700379167521, 0.014622700601675935, 0.01462270094971691, 0.014622701491168937, 0.014622702328959495, 0.014622703618267577, 0.014622705591706659, 0.014622708595959969, 0.01462271314474222, 0.014622719994883729, 0.014622730254939681, 0.014622745539244896, 0.014622768185034348, 0.014622801556479919, 0.014622850467685076, 0.014622921767351641, 0.014623025141614229, 0.014623174209173846, 0.0146233880052104, 0.014623692978601967, 0.014624125661809758, 0.014624736215589223, 0.014625593102678238, 0.014626789207019741, 0.014628449789022373, 0.014630742753777699, 0.014633891808624566, 0.014638193199041721, 0.014644036836911347, 0.014651932771099198, 0.014662544094198876, 0.01467672752684384, 0.01469558306606793, 0.014720514218661288, 0.014753300453945553, 0.014796183590193416, 0.014851969860015378, 0.014924149365266514, 0.015017034512435938, 0.015135918794962294, 0.015287256939070324, 0.01547886693503502, 0.015720153819072567, 0.016022354239208243, 0.016398799824327185, 0.016865196180068945, 0.01743991296927731, 0.01814427902141163, 0.019002874791416356, 0.0200438128056121, 0.021298995057067876, 0.022804334727324405, 0.024599928210202474, 0.026730162302253287, 0.029243740715187344, 0.032193613871619, 0.035636796374758854, 0.039634057690841884, 0.04424947352523498, 0.04954982815599064, 0.05560386162266043, 0.06248136012128974, 0.070252093148807, 0.07898460674118082, 0.08874488837904779, 0.09959492556417528, 0.11159118643178761, 0.12478305675875838, 0.13921127304010664, 0.15490639561911762, 0.17188736886932354, 0.19016021687446943, 0.2097169227241439, 0.2305345372973478, 0.2525745591879451, 0.2757826212735063, 0.30008851148105475, 0.3254065457972316, 0.3516363008362155, 0.3786637017255449, 0.40636244916801467, 0.4345957577953415, 0.46321836686638185, 0.49207877448319987, 0.5210216382619146, 0.549890279191449, 0.5785292215387877, 0.6067867003008462, 0.6345170689262575, 0.6615830437761366, 0.6878577278806207, 0.7132263646863793, 0.7375877822942689, 0.7608554996992283, 0.7829584782641782, 0.803841513566159, 0.8234652743366327, 0.8418060060059874, 0.8588549259418639, 0.8746173455076903, 0.8891115603190519, 0.9023675543974525, 0.9144255662696494, 0.9253345654872362, 0.9351506866820165, 0.9439356653359298, 0.9517553151925598, 0.9586780819695756, 0.9647737020644436, 0.9701119885957291, 0.9747617606892082, 0.9787899256720828, 0.9822607180099616, 0.9852350935932416, 0.9877702734851028, 0.9899194275649764, 0.9917314856736489, 0.9932510618806532, 0.9945184763063191, 0.9955698584659693, 0.9964373162675696, 0.997149155479054, 0.9977301355744062, 0.9982017492561508, 0.9985825145302792, 0.998888269882176, 0.9991324647864394, 0.9993264394119248, 0.9994796889035013, 0.9996001089964093, 0.9996942209239855, 0.9997673746033159, 0.9998239299247015, 0.9998674166364594, 0.9999006738194003, 0.9999259703023119, 0.9999451076003972, 0.9999595070832095, 0.9999702831173805, 0.9999783039013573, 0.9999842416317338, 0.999988613528715, 0.9999918151146228, 0.999994146994596, 0.9999958362410595, 0.9999970533393062, 0.9999979255151372, 0.9999985471398204, 0.9999989877943574, 0.9999992984748844, 0.9999995163339377, 0.9999996682777373, 0.9999997736766532, 0.9999998463935097, 0.9999998962911307, 0.9999999303453065, 0.9999999534609879, 0.9999999690668877, 0.9999999795458123, 0.9999999865440777, 0.9999999911925463, 0.9999999942635135, 0.9999999962813512, 0.9999999976000422, 0.9999999984571704, 0.999999999011278, 0.9999999993675555, 0.9999999995953945, 0.99999999974031, 0.9999999998319838, 0.9999999998896635, 0.9999999999257585, 0.999999999948224, 0.9999999999621308, 0.999999999970693], "type": "scatter", "uid": "68bf32bd-214b-40e5-96d7-1508a1eb31df"}, {"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.2, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.8, 0.75, 0.7272727272727273, 0.8125, 0.9333333333333333, 1.0, 1.0], "type": "scatter", "uid": "e1c63c60-e25e-477d-82e5-31b6513ffe08"}, {"marker": {"color": "rgba(0.133, 0.133, 0.133, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.5, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.0, 0.15384615384615385, 0.25, 0.625, 0.2727272727272727, 0.46153846153846156, 1.0, 1.0], "type": "scatter", "uid": "94f706db-f1a6-44bb-baeb-d441ccd9e23b"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers", "name": "p_left = 0.8, data", "x": [-100.0, -25.0, -5.999999865889549, -1.9999999552965164, 0.0, 1.9999999552965164, 5.999999865889549, 25.0, 100.0], "y": [0.0, 0.04081632653061224, 0.1794871794871795, 0.13636363636363635, 0.35714285714285715, 0.23529411764705882, 0.8, 0.9, 1.0], "type": "scatter", "uid": "808ffe9e-03a8-4301-9723-0184be40cf2b"}], "layout": {"height": 400, "title": {"text": "Psychometric Curve"}, "width": 630, "xaxis": {"title": {"text": "Contrast(%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} diff --git a/notebooks/notebooks_plotting/session_reaction_time_contrast.json b/notebooks/notebooks_plotting/session_reaction_time_contrast.json index 91208ee9..525b0d3e 100644 --- a/notebooks/notebooks_plotting/session_reaction_time_contrast.json +++ b/notebooks/notebooks_plotting/session_reaction_time_contrast.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.23060000000009495, 0.2359999999998763, 0.2676000000000158, 0.33960000000001855, 0.39765000000005557, 0.3428000000000111, 0.31379999999990105, 0.27539999999999054, 0.227800000000002], "type": "scatter", "uid": "6ffb4a35-51b7-491f-b18d-68cff37f0e3c"}, {"error_y": {"array": [0.0030999999999039574, 0.006900000000143791, 0.01059999999995398, 0.038399999999910506, 0.3212499999999636, 0.01989999999995007, 0.013600000000110413, 0.011100000000055843, 0.011700000000033128], "arrayminus": [0.010600000000067666, 0.0043999999998902695, 0.011100000000027421, 0.03849999999999909, 0.08015000000000327, 0.04379999999997608, 0.02819999999974243, 0.012499999999988631, 0.009300000000052933], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "name": "bootstrapped 68% CI of median", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.23060000000009495, 0.2359999999998763, 0.2676000000000158, 0.33960000000001855, 0.39765000000005557, 0.3428000000000111, 0.31379999999990105, 0.27539999999999054, 0.227800000000002], "type": "scatter", "uid": "b45a8245-a057-4142-9335-1cb13fa0421b"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2308500000000464, 0.2518000000000029, 0.3400500000000193, 0.4973500000000115, 0.4855999999999767, 0.4112000000001217, 0.30535000000000423, 0.2825000000000273, 0.2587500000000773], "type": "scatter", "uid": "ff16fa46-0df5-46b9-bddc-69e581292b44"}, {"error_y": {"array": [0.005249999999890065, 9.999999997489795e-05, 0.060949999999934334, 0.43474999999997976, 0.12350000000003547, 0.03194999999988113, 0.008950000000027103, 0.0029999999999290594, 0.013799999999836388], "arrayminus": [0.004950000000022214, 0.009700000000002262, 0.04235000000005584, 0.1044499999999573, 0.059700000000020736, 0.01719999999988886, 0.011149999999958027, 0.008299999999962893, 0.012700000000064549], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "name": "bootstrapped 68% CI of median", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2308500000000464, 0.2518000000000029, 0.3400500000000193, 0.4973500000000115, 0.4855999999999767, 0.4112000000001217, 0.30535000000000423, 0.2825000000000273, 0.2587500000000773], "type": "scatter", "uid": "b5569aef-87ec-4dca-a5ae-48634437425a"}], "layout": {"height": 350, "legend": {"orientation": "v", "x": 1.1, "y": 0.9}, "title": {"text": "Reaction time - Contrast", "x": 0.29, "y": 0.85}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} \ No newline at end of file +{"data": [{"marker": {"color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.2", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.23060000000009495, 0.2359999999998763, 0.2676000000000158, 0.33960000000001855, 0.39765000000005557, 0.3428000000000111, 0.31379999999990105, 0.27539999999999054, 0.227800000000002], "type": "scatter", "uid": "6ffb4a35-51b7-491f-b18d-68cff37f0e3c"}, {"error_y": {"array": [0.0030999999999039574, 0.006900000000143791, 0.01059999999995398, 0.038399999999910506, 0.3212499999999636, 0.01989999999995007, 0.013600000000110413, 0.011100000000055843, 0.011700000000033128], "arrayminus": [0.010600000000067666, 0.0043999999998902695, 0.011100000000027421, 0.03849999999999909, 0.08015000000000327, 0.04379999999997608, 0.02819999999974243, 0.012499999999988631, 0.009300000000052933], "color": "rgba(0.7634747047461135, 0.3348456555528834, 0.225892295531744, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "name": "bootstrapped 68% CI of median", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.23060000000009495, 0.2359999999998763, 0.2676000000000158, 0.33960000000001855, 0.39765000000005557, 0.3428000000000111, 0.31379999999990105, 0.27539999999999054, 0.227800000000002], "type": "scatter", "uid": "b45a8245-a057-4142-9335-1cb13fa0421b"}, {"marker": {"color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 1.0)", "size": 6}, "mode": "markers+lines", "name": "p_left = 0.8", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2308500000000464, 0.2518000000000029, 0.3400500000000193, 0.4973500000000115, 0.4855999999999767, 0.4112000000001217, 0.30535000000000423, 0.2825000000000273, 0.2587500000000773], "type": "scatter", "uid": "ff16fa46-0df5-46b9-bddc-69e581292b44"}, {"error_y": {"array": [0.005249999999890065, 9.999999997489795e-05, 0.060949999999934334, 0.43474999999997976, 0.12350000000003547, 0.03194999999988113, 0.008950000000027103, 0.0029999999999290594, 0.013799999999836388], "arrayminus": [0.004950000000022214, 0.009700000000002262, 0.04235000000005584, 0.1044499999999573, 0.059700000000020736, 0.01719999999988886, 0.011149999999958027, 0.008299999999962893, 0.012700000000064549], "color": "rgba(0.24715576253545807, 0.49918708160096675, 0.5765599057376697, 0.3)", "type": "data", "visible": true}, "marker": {"size": 6}, "mode": "none", "name": "bootstrapped 68% CI of median", "x": [-100.0, -25.0, -12.5, -6.25, 0.0, 6.25, 12.5, 25.0, 100.0], "y": [0.2308500000000464, 0.2518000000000029, 0.3400500000000193, 0.4973500000000115, 0.4855999999999767, 0.4112000000001217, 0.30535000000000423, 0.2825000000000273, 0.2587500000000773], "type": "scatter", "uid": "b5569aef-87ec-4dca-a5ae-48634437425a"}], "layout": {"height": 350, "legend": {"orientation": "v", "x": 1.1, "y": 0.9}, "title": {"text": "Reaction time - Contrast", "x": 0.29, "y": 0.85}, "width": 630, "xaxis": {"title": {"text": "Contrast (%)"}}, "yaxis": {"range": [-0.05, 1.05], "title": {"text": "Probability choosing right"}}}} diff --git a/notebooks/notebooks_plotting/session_reaction_time_trial_number.json b/notebooks/notebooks_plotting/session_reaction_time_trial_number.json index 22dda3a4..21da20ba 100644 --- a/notebooks/notebooks_plotting/session_reaction_time_trial_number.json +++ b/notebooks/notebooks_plotting/session_reaction_time_trial_number.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "lightgray"}, "mode": "markers", "name": "data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [1.0378999999999996, 0.5363999999999995, 0.21280000000000143, 0.5754000000000001, 0.2237999999999989, 0.4792999999999985, 0.4103999999999992, 8.281399999999998, 0.26890000000000214, 5.083099999999995, 0.2220000000000013, 0.23999999999999488, 0.3763000000000005, 0.5259999999999962, 0.1880000000000024, 1.4342000000000041, 7.024099999999997, 0.1927000000000021, 0.18899999999999295, 0.227800000000002, 0.7036999999999978, 0.3885999999999967, 0.4239999999999924, 0.21229999999999905, 0.4222000000000037, 0.22299999999999898, 0.17379999999999995, 0.5754000000000019, 0.16900000000001114, 0.16549999999999443, 0.18120000000000402, 0.3032000000000039, 0.2254000000000076, 1.6178000000000026, 0.23980000000000246, 0.23000000000000398, 0.38769999999999527, 0.20179999999999154, 0.17430000000001655, 0.1991999999999905, 0.2289000000000101, 0.19619999999997617, 7.0434999999999945, 0.24660000000000082, 7.100200000000001, 0.1595000000000084, 0.16510000000002378, 0.18389999999999418, 0.2004000000000019, 0.5232999999999777, 4.7620000000000005, 0.3585999999999956, 0.2985999999999933, 0.1710999999999956, 0.44470000000001164, 0.28489999999999327, 0.377900000000011, 0.7081999999999766, 0.23490000000001032, 0.2715000000000032, 0.25620000000000687, 0.23029999999999973, 0.3977999999999895, 8.794000000000011, 0.20109999999999673, 0.535899999999998, 0.24139999999999873, 0.34950000000000614, 0.26780000000002246, 0.9699999999999989, 0.3611999999999682, 0.19709999999997763, 0.35240000000004557, 0.3727999999999838, 0.1524000000000001, 0.2850999999999999, 0.2458000000000311, 0.7078000000000202, 0.3365000000000009, 0.17789999999996553, 0.2185000000000059, 1.5932999999999993, 0.18810000000001992, 0.20830000000000837, 0.2939000000000078, 0.244199999999978, 0.47699999999997544, 4.169800000000009, 0.19650000000001455, 0.8175000000000523, 0.22340000000002647, 0.27359999999998763, 1.0647000000000162, 0.4581999999999766, 0.25230000000004793, 0.4837999999999738, 0.8208000000000197, 1.254600000000039, 0.1741999999999848, 0.9784999999999968, 0.21440000000001191, 0.6126999999999612, 0.6002000000000294, 0.24080000000003565, 0.4545999999999708, 0.2481999999999971, 0.19139999999998736, 2.5948999999999955, 0.469600000000014, 0.4993999999999801, 0.16470000000003893, 0.30759999999997945, 1.3038000000000238, 0.20750000000003865, 0.2563000000000102, 0.25099999999997635, 0.14680000000004156, 1.050200000000018, 0.36299999999999955, 0.2219000000000051, 0.2547000000000139, 0.34019999999998163, 0.16910000000001446, 0.07590000000004693, 0.3394000000000119, 0.202699999999993, 0.5809000000000424, 0.1694999999999709, 0.1775000000000091, 0.24689999999998236, 0.18549999999999045, 0.233600000000024, 0.35480000000001155, 0.4037999999999897, 0.32939999999996417, 0.2687999999999988, 0.22289999999998145, 1.3360999999999876, 0.8281999999999812, 0.6922999999999888, 0.19809999999995398, 0.6830999999999676, 0.3301000000000158, 0.26499999999998636, 0.29640000000000555, 0.21719999999999118, 0.6281000000000176, 0.1997000000000071, 0.1927000000000021, 0.32670000000001664, 0.19980000000003884, 2.1772000000000276, 0.5037999999999556, 0.21300000000007913, 0.08010000000001583, 0.26890000000003056, 0.19519999999999982, 0.2341000000000122, 0.4147000000000389, 0.2540000000000191, 0.26310000000000855, 0.42010000000004766, 0.18719999999996162, 1.9800000000000182, 0.2960000000000491, 0.865099999999984, 0.18610000000001037, 0.17589999999995598, 0.4540000000000646, 0.22910000000001673, 0.5388999999998987, 0.4315000000000282, 0.26329999999995835, 0.1855000000000473, 0.4056000000000495, 0.24939999999992324, 0.3341000000000349, 0.17860000000007403, 0.27760000000000673, 0.20990000000006148, 0.5129000000000588, 0.11899999999991451, 0.1813999999999396, 0.3106000000000222, 0.20879999999999654, 0.14379999999994197, 0.15829999999994016, 0.7638000000000602, 0.3771000000000413, 0.19590000000005148, 0.22429999999997108, 0.18479999999999563, 0.19690000000002783, 0.45079999999995835, 0.32970000000000255, 0.18679999999994834, 0.5495999999999412, 0.20709999999996853, 0.27129999999999654, 0.16499999999996362, 0.18409999999994398, 0.33350000000007185, 0.233600000000024, 0.2821999999999889, 1.2824999999999136, 0.21079999999994925, 0.20719999999994343, 0.39549999999997, 1.044300000000021, 0.1997000000000071, 0.07200000000000273, 0.24080000000003565, 0.6136000000000195, 0.2116999999999507, 0.22129999999992833, 0.5966999999999416, 0.20180000000004839, 0.3147000000000162, 0.1876999999999498, 0.1654999999999518, 0.2742999999999256, 0.5811999999999671, 0.3606999999999516, 0.19309999999995853, 0.2663000000000011, 0.1997000000000071, 1.2771999999999935, 0.29529999999999745, 0.2116999999999507, 0.445699999999988, 0.21920000000000073, 0.30179999999995744, 0.2141999999998916, 0.2539000000000442, 0.12229999999999563, 0.5413999999999533, 0.24239999999997508, 0.24109999999996035, 0.21050000000002456, 0.4400999999999158, 0.3755999999999631, 0.26070000000004256, 0.2742000000000644, 0.2798000000000229, 0.2702000000000453, 0.6286000000000058, 0.41679999999996653, 0.837099999999964, 0.35790000000008604, 0.2461999999999307, 0.23230000000000928, 0.0844000000000733, 0.2559999999999718, 0.3605000000000018, 0.19519999999999982, 0.22530000000006112, 0.24139999999999873, 0.24889999999993506, 0.2518000000000029, 0.20810000000005857, 0.2398999999999205, 0.5265000000000555, 0.23820000000000618, 0.7016999999999598, 0.17189999999993688, 0.18659999999999854, 0.12619999999992615, 0.3342000000000098, 0.6073999999999842, 0.22419999999999618, 0.5755000000000337, 0.4130999999999858, 0.30910000000005766, 0.18010000000003856, 0.2662000000000262, 0.21240000000000236, 0.20439999999996417, 0.19500000000005002, 0.17889999999999873, 0.20660000000009404, 0.47899999999992815, 0.5497000000000298, 0.1977000000000544, 0.18479999999999563, 0.2158000000000584, 0.18290000000001783, 0.42410000000006676, 0.399599999999964, 0.33140000000003056, 0.21339999999997872, 0.5024999999999409, 0.23070000000006985, 0.27499999999997726, 0.19640000000003965, 0.2078999999999951, 0.23569999999995161, 0.18089999999995143, 0.21029999999996107, 0.22659999999996217, 0.6989999999999554, 0.23569999999995161, 0.22429999999997108, 0.21059999999999945, 0.28340000000002874, 0.23909999999989395, 0.3023000000000593, 0.27529999999990196, 0.20109999999999673, 0.39049999999997453, 0.448099999999954, 0.18870000000003984, 0.25909999999998945, 0.2557999999999083, 0.233600000000024, 0.24680000000000746, 0.2236000000000331, 0.22529999999994743, 0.25709999999992306, 0.23249999999995907, 0.22820000000001528, 0.22239999999999327, 0.37009999999997945, 0.22550000000001091, 0.2074000000000069, 0.37980000000004566, 0.4518000000000484, 0.2015000000001237, 0.18059999999991305, 0.14980000000014115, 0.1898999999998523, 0.4068999999999505, 0.17799999999988358, 0.3552999999999429, 0.1697999999998956, 0.23869999999988067, 0.504799999999932, 0.2318000000000211, 0.1696999999999207, 0.1899999999998272, 0.18290000000001783, 0.18449999999984357, 0.19339999999988322, 0.2234000000000833, 0.20080000000007203, 0.20839999999998327, 0.19509999999991123, 0.15229999999996835, 0.22230000000013206, 0.22010000000000218, 0.2481999999999971, 0.3110999999998967, 0.38380000000006476, 0.5388000000000375, 0.233600000000024, 0.19879999999989195, 0.2357999999999265, 0.24989999999979773, 0.42200000000002547, 0.20269999999982247, 0.21849999999994907, 0.23870000000010805, 0.23730000000000473, 0.185799999999972, 0.21499999999991815, 0.23420000000010077, 0.2544000000000324, 0.46309999999994034, 0.27700000000004366, 0.27899999999999636, 0.22820000000001528, 0.26729999999997744, 0.20010000000002037, 0.20870000000013533, 0.2802000000001499, 0.1893000000000029, 0.29539999999997235, 0.6851999999998952, 0.26340000000004693, 0.25279999999997926, 0.20910000000003492, 0.3000000000001819, 0.3892000000000735, 0.24319999999988795, 0.2541000000001077, 0.2617000000000189, 0.22919999999999163, 0.23059999999986758, 0.22420000000010987, 0.23869999999988067, 0.2500999999999749, 0.1976999999999407, 0.1914999999999054, 0.2417000000000371, 0.21630000000004657, 0.20249999999987267, 0.19719999999983884, 0.5228000000001884, 0.2057999999999538, 0.19650000000001455, 0.2717999999999847, 0.23949999999990723, 0.17090000000007421, 0.2056999999999789, 0.3748000000000502, 0.4226000000001022, 0.24359999999978754, 0.9338999999999942, 0.20929999999998472, 0.2842000000000553, 0.07159999999998945, 0.20400000000017826, 0.20209999999997308, 0.2441999999998643, 0.22620000000006257, 0.20250000000010004, 0.2722000000001117, 0.23839999999995598, 0.46630000000004657, 3.1365999999998166, 0.20429999999987558, 0.22810000000004038, 0.5314999999998236, 0.32519999999999527, 0.5133999999998196, 0.30280000000016116, 0.20800000000008367, 0.3898999999998978, 0.2578000000000884, 0.2075999999999567, 0.20319999999992433, 0.24459999999999127, 0.31970000000001164, 0.6826000000000931, 0.3181999999999334, 0.19699999999988904, 0.23240000000009786, 0.20420000000012806, 0.3170000000000073, 0.26320000000009713, 0.40949999999998, 0.16630000000009204, 0.2820999999999003, 0.2693000000001575, 0.22859999999991487, 0.2500999999999749, 0.27650000000016917, 0.22100000000000364, 0.23630000000002838, 0.4155000000000655, 0.30110000000013315, 0.3319000000001324, 0.2861000000000331, 0.5201999999999316, 0.2798999999999978, 0.21469999999999345, 0.4941000000001168, 0.3019000000001597, 3.6475000000000364, 0.22669999999993706, 0.2235000000000582, 0.32560000000012224, 0.41439999999988686, 0.3650000000000091, 0.18290000000001783, 0.2647999999999229, 0.2457000000001699, 0.21920000000000073, 0.5204999999998563, 0.23949999999990723, 0.4193000000000211, 0.23860000000013315, 0.26870000000008076, 0.23499999999989996, 0.3341000000000349, 0.23669999999992797, 0.24050000000011096, 0.22000000000002728, 0.18360000000006949, 0.1270999999999276, 0.2861000000000331, 0.2136000000000422, 0.23739999999997963, 0.1876999999999498, 0.4307000000001153, 0.17390000000000327, 0.19280000000003383, 0.19499999999993634, 0.14959999999996398, 0.16699999999991633, 0.17780000000016116, 0.2134000000000924, 0.18820000000005166, 0.22550000000001091, 0.2219000000000051, 0.19260000000008404, 0.1994999999999436, 0.18389999999999418, 0.21969999999987522, 0.2016000000000986, 0.1812999999999647, 0.18390000000022155, 0.2395000000001346, 0.1914000000001579, 0.16889999999989413, 0.1879999999998745, 0.5153999999999996, 0.18899999999985084, 0.19470000000001164, 0.20689999999990505, 0.20640000000003056, 0.21050000000013824, 0.20090000000004693, 0.20640000000003056, 0.19280000000003383, 0.18840000000000146, 0.21249999999986358, 0.21739999999999782, 0.21000000000003638, 0.20719999999982974, 0.21050000000013824, 0.20129999999994652, 0.1958999999999378, 0.2300000000000182, 0.21100000000001273, 0.2746999999999389, 0.19499999999993634, 0.22040000000015425, 0.19000000000005457, 0.1714999999999236, 0.22919999999999163, 0.3280000000002019, 0.2658000000001266, 0.361299999999801, 0.2053000000000793, 0.20929999999998472, 0.056599999999889405, 0.15229999999996835, 0.19699999999988904, 0.1834000000001197, 0.19920000000001892, 0.2401999999999589, 0.1797999999998865, 0.18309999999996762, 0.2054000000000542, 0.24900000000002365, 0.20839999999998327, 0.24410000000011678, 0.2032000000001517, 0.24809999999979482, 0.1714999999999236, 0.47109999999997854, 0.18830000000002656, 0.2421999999999116, 0.20479999999997744, 0.2841999999998279, 0.218199999999797, 0.1776999999999589, 0.48499999999989996, 0.17660000000000764, 0.16360000000008768, 0.22869999999988977, 0.23270000000002256, 0.22289999999998145, 0.19630000000006476, 0.2195000000001528, 0.1795999999999367, 0.205600000000004, 0.2937000000001717, 0.20959999999990941, 0.2725000000000364, 0.43679999999994834, 0.17290000000002692, 0.21800000000007458, 0.2054000000000542, 0.17400000000020555, 0.1471999999998843, 0.1977999999999156, 0.18630000000007385, 0.21109999999998763, 0.16300000000001091, 0.47070000000007894, 2.1536000000000968, 0.43429999999989377, 0.33599999999978536, 0.2236000000000331, 0.1247000000000753, 0.1791000000000622, 0.47420000000010987, 0.24959999999987303, 4.469900000000052, 0.342200000000048, 0.2657000000001517, 12.426799999999957, 0.3207999999999629, 0.26510000000007494, 0.3375999999998385, 0.21250000000009095, 0.2636999999999716, 0.23329999999987194, 0.19659999999998945, 0.2598000000000411, 0.25040000000012697, 0.21909999999979846, 0.12049999999999272, 0.22260000000005675, 0.2859000000000833, 0.5489000000000033, 0.25509999999985666, 0.2415000000000873, 0.3220000000001164, 0.25929999999993925, 0.22149999999987813, 0.24459999999999127, 0.3423999999999978, 6.979900000000043, 0.2680000000000291, 59.956699999999955, 58.47219999999993, 56.48730000000023, 10.891299999999774, 0.3737999999998465, 0.9608000000002903, 0.22280000000000655, 41.21270000000004, 2.3718000000003485, 0.2909999999997126, 0.2626000000000204, 0.24959999999964566, 0.6748999999999796, 0.23660000000018044, 0.23460000000022774, 0.2498000000000502, 0.23939999999993233, 0.245600000000195, 0.23050000000012005, 0.2424999999998363, 0.25549999999975626, 0.29440000000022337, 0.40319999999974243, 0.6226999999998952, 0.3512999999998101, 0.24929999999994834, 0.2606999999998152, 0.17489999999997963, 0.23410000000012587, 0.17849999999998545, 0.1734999999998763, 0.23320000000012442, 0.2614000000003216, 0.29890000000023065, 0.3079000000002452, 0.22359999999980573, 0.23909999999978027, 0.20010000000002037, 0.43489999999974316, 0.010199999999713327, 0.20100000000002183, 0.22890000000006694, 0.25759999999991123, 0.24989999999979773, 0.24769999999989523, 0.24099999999998545, 0.20870000000013533, 0.2474000000001979, 0.20180000000027576, 0.3623999999999796, 0.21390000000019427, 0.21430000000009386, 0.22000000000025466, 0.4375, 0.610700000000179, 0.2185999999996966, 0.2481999999999971, 0.1869000000001506, 0.2418999999999869, 0.29579999999987194, 0.3413999999997941, 0.31539999999995416, 1.0481999999997242, 0.2500999999997475, 0.404700000000048, 59.94150000000036, 59.83040000000028, 0.29890000000023065, 25.176800000000185, 0.8398000000001957, 0.8426999999996951, 0.5783999999998741, 0.35390000000006694, 59.95520000000033, 39.49330000000009, 0.31790000000000873, 1.053899999999885, 0.36520000000018626, 59.949699999999666, 0.20780000000013388, 0.3079000000002452, 0.5414999999998145, 59.94870000000037, 0.14030000000002474, 0.3206999999997606, 59.92540000000008, 2.968199999999797, 59.944000000000415, 0.3568999999997686, 0.4893000000001848, 0.3459000000002561, 0.5953999999996995, 7.496799999999894, 59.944800000000214, 59.803100000000086, 25.128200000000106, 0.40610000000015134, 3.0812000000000808, 59.94470000000001, 59.85050000000001, 36.67089999999962, 0.22269999999980428, 0.4216999999998734, 0.25189999999975043, 0.37390000000004875, 0.253400000000056, 55.91840000000002, 0.24490000000014334, 0.22810000000026776, 0.22959999999966385, 0.2545000000000073, 0.1969000000003689, 0.21139999999968495, 0.2199999999997999, 0.2660000000000764, 0.20440000000007785, 30.50070000000005, 59.95039999999972, 59.80019999999968, 0.06710000000020955, 0.4569000000001324, 25.24270000000024, 59.94450000000006, 0.10320000000001528, 0.3704000000002452, 13.100100000000111, 27.171699999999873, 0.3063999999999396, 59.95310000000018, 0.06970000000001164, 0.24459999999999127, 0.962500000000091, 0.24070000000028813, 0.45959999999968204, 0.4962000000000444, 59.029199999999946, 59.954499999999825, 0.3441000000002532, 0.1578999999996995, 59.700700000000325, 0.1772000000000844, 0.40599999999994907, 0.3265000000001237, 0.24769999999989523, 0.2665999999999258, 0.22850000000016735, 0.29579999999987194, 0.21829999999999927, 0.22800000000006548, 0.25959999999986394, 0.21570000000019718, 0.23299999999971988, 2.7521999999999025, 0.2559999999998581, 0.5834999999997308, 0.278400000000147, 0.5468000000000757, 0.3269999999997708, 0.26769999999987704, 0.22360000000026048, 28.914700000000266, 13.87159999999949, 42.69970000000012, 0.28699999999935244, 0.2566999999999098, 0.3007999999999811, 24.60689999999977, 0.26670000000012806, 53.8715000000002, 0.2528999999994994, 59.9413999999997, 0.20079999999961728, 23.895799999999326, 0.3356000000003405, 0.5122000000001208, 0.3338999999996304, 59.95629999999983], "type": "scatter", "uid": "d3fb8fb0-0712-4808-86a2-0bc546c77972"}, {"marker": {"color": "black"}, "name": "rolled data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [null, null, null, null, null, null, null, null, null, 0.507849999999999, 0.44484999999999886, 0.3396500000000007, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.4511499999999984, 0.32260000000000133, 0.3081499999999977, 0.23389999999999844, 0.3081499999999977, 0.3824499999999986, 0.40629999999999455, 0.30819999999999936, 0.4054000000000002, 0.30819999999999936, 0.2254000000000005, 0.30819999999999936, 0.30819999999999936, 0.30579999999999785, 0.217649999999999, 0.217649999999999, 0.217649999999999, 0.22420000000000329, 0.22420000000000329, 0.2277000000000058, 0.23490000000000322, 0.2277000000000058, 0.2277000000000058, 0.2277000000000058, 0.22945000000000704, 0.22715000000000884, 0.22945000000000704, 0.22945000000000704, 0.22945000000000704, 0.21535000000000082, 0.20049999999999102, 0.19769999999998333, 0.1997999999999962, 0.214650000000006, 0.22350000000000136, 0.3025999999999982, 0.27259999999999707, 0.2494999999999976, 0.2494999999999976, 0.2917499999999933, 0.32859999999999445, 0.3682500000000033, 0.3682500000000033, 0.32859999999999445, 0.2917499999999933, 0.2781999999999982, 0.2781999999999982, 0.33140000000000214, 0.2781999999999982, 0.3247000000000071, 0.263850000000005, 0.263850000000005, 0.2696500000000128, 0.3086500000000143, 0.3553499999999872, 0.3553499999999872, 0.35095000000002585, 0.35095000000002585, 0.35095000000002585, 0.317300000000003, 0.317300000000003, 0.31875000000002274, 0.34445000000002324, 0.3108000000000004, 0.2654500000000155, 0.3108000000000004, 0.2654500000000155, 0.2321500000000185, 0.2654500000000155, 0.24500000000000455, 0.2690499999999929, 0.2690499999999929, 0.23134999999999195, 0.2690499999999929, 0.2690499999999929, 0.2588999999999828, 0.2837499999999977, 0.3760499999999922, 0.36589999999998213, 0.46759999999997603, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.5482499999999675, 0.5420000000000016, 0.5420000000000016, 0.5420000000000016, 0.5274000000000001, 0.35139999999998395, 0.35139999999998395, 0.4620999999999924, 0.4620999999999924, 0.4620999999999924, 0.3810999999999751, 0.3810999999999751, 0.3810999999999751, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.25364999999999327, 0.25550000000001205, 0.25550000000001205, 0.25284999999999513, 0.25284999999999513, 0.25284999999999513, 0.2383000000000095, 0.2970500000000129, 0.2383000000000095, 0.21229999999999905, 0.22479999999998768, 0.19409999999999172, 0.19409999999999172, 0.2181500000000085, 0.24025000000000318, 0.24025000000000318, 0.2578499999999906, 0.24025000000000318, 0.2578499999999906, 0.2990999999999815, 0.34209999999998786, 0.34209999999998786, 0.37930000000000064, 0.3669500000000028, 0.32974999999999, 0.3132500000000107, 0.3132500000000107, 0.47910000000001673, 0.3132500000000107, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.25679999999999836, 0.21510000000003515, 0.24095000000005484, 0.20640000000005898, 0.22355000000004566, 0.2515000000000214, 0.24405000000001564, 0.2585500000000138, 0.2585500000000138, 0.24405000000001564, 0.2585500000000138, 0.26600000000001955, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.3580500000000484, 0.36375000000003865, 0.36375000000003865, 0.27965000000000373, 0.3344500000000039, 0.2563499999999408, 0.29869999999999663, 0.29869999999999663, 0.27044999999998254, 0.27044999999998254, 0.27044999999998254, 0.2563499999999408, 0.22964999999999236, 0.263499999999965, 0.22964999999999236, 0.209350000000029, 0.19509999999996808, 0.209350000000029, 0.209350000000029, 0.202350000000024, 0.202350000000024, 0.202350000000024, 0.2028500000000122, 0.2028500000000122, 0.21059999999999945, 0.21059999999999945, 0.2769999999999868, 0.2156999999999698, 0.2156999999999698, 0.2156999999999698, 0.20199999999999818, 0.23919999999998254, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.22219999999998663, 0.2524500000000103, 0.25790000000000646, 0.25790000000000646, 0.25790000000000646, 0.23720000000002983, 0.2615000000000123, 0.22624999999999318, 0.21649999999993952, 0.231049999999982, 0.231049999999982, 0.231049999999982, 0.21649999999993952, 0.21649999999993952, 0.231049999999982, 0.24779999999992697, 0.24779999999992697, 0.24779999999992697, 0.27029999999996335, 0.23405000000002474, 0.27029999999996335, 0.27029999999996335, 0.27029999999996335, 0.28479999999996153, 0.2807999999999993, 0.2807999999999993, 0.2427500000000009, 0.26010000000002265, 0.23655000000002246, 0.2746000000000208, 0.24815000000000964, 0.2417499999999677, 0.2417499999999677, 0.2417499999999677, 0.24815000000000964, 0.24815000000000964, 0.2573000000000434, 0.2674500000000535, 0.27220000000005484, 0.27220000000005484, 0.27700000000004366, 0.327699999999993, 0.36675000000002456, 0.3188500000000545, 0.27700000000004366, 0.27700000000004366, 0.2750000000000341, 0.31405000000006567, 0.3069500000000289, 0.25109999999995125, 0.2437999999999647, 0.2437999999999647, 0.2437999999999647, 0.236850000000004, 0.24064999999995962, 0.2451499999999669, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.286200000000008, 0.286200000000008, 0.32165000000003374, 0.2666500000000269, 0.2876500000000419, 0.2876500000000419, 0.2876500000000419, 0.2452000000000112, 0.21829999999999927, 0.2095000000000482, 0.2095000000000482, 0.2095000000000482, 0.2055000000000291, 0.2055000000000291, 0.2055000000000291, 0.20105000000000928, 0.20215000000007421, 0.21120000000007622, 0.2736000000000445, 0.2736000000000445, 0.2736000000000445, 0.22325000000006412, 0.25285000000002356, 0.25285000000002356, 0.25285000000002356, 0.25534999999996444, 0.23320000000001073, 0.22205000000002428, 0.21999999999997044, 0.228650000000016, 0.228650000000016, 0.22544999999996662, 0.21744999999998527, 0.22544999999996662, 0.2311499999999569, 0.2311499999999569, 0.23739999999992278, 0.23739999999992278, 0.25719999999989795, 0.25719999999989795, 0.25719999999989795, 0.2671999999999457, 0.2671999999999457, 0.2574499999999489, 0.2574499999999489, 0.2512999999999579, 0.24020000000001573, 0.2512999999999579, 0.24020000000001573, 0.23304999999999154, 0.23304999999999154, 0.23304999999999154, 0.23034999999998718, 0.2268500000000131, 0.2268500000000131, 0.23034999999998718, 0.23034999999998718, 0.2268500000000131, 0.2239500000000021, 0.2149000000000001, 0.2164500000000089, 0.2044500000000653, 0.2044500000000653, 0.195699999999988, 0.195699999999988, 0.195699999999988, 0.2108499999999367, 0.2108499999999367, 0.21089999999992415, 0.21089999999992415, 0.18724999999983538, 0.1916999999998552, 0.1916999999998552, 0.19709999999997763, 0.19709999999997763, 0.19424999999989723, 0.1916999999998552, 0.19424999999989723, 0.19794999999999163, 0.20460000000002765, 0.21424999999999272, 0.22120000000006712, 0.22120000000006712, 0.22795000000007803, 0.22795000000007803, 0.23469999999997526, 0.2419999999999618, 0.2490499999998974, 0.2490499999998974, 0.24284999999986212, 0.23725000000001728, 0.23654999999996562, 0.23469999999997526, 0.2271499999999378, 0.23500000000001364, 0.23575000000005275, 0.23575000000005275, 0.23575000000005275, 0.2380000000000564, 0.2380000000000564, 0.24585000000001855, 0.24430000000006658, 0.24430000000006658, 0.2608500000000049, 0.2608500000000049, 0.27215000000001055, 0.27215000000001055, 0.2653500000000122, 0.2581000000000131, 0.2581000000000131, 0.2581000000000131, 0.2718000000000984, 0.2718000000000984, 0.2587500000000773, 0.2625500000000329, 0.2579000000000633, 0.2534500000000435, 0.2479999999999336, 0.2409499999998843, 0.24664999999993142, 0.2409499999998843, 0.23464999999987413, 0.23464999999987413, 0.2298999999999296, 0.22670000000005075, 0.22025000000007822, 0.22025000000007822, 0.21105000000000018, 0.20414999999991323, 0.20414999999991323, 0.21105000000000018, 0.21105000000000018, 0.20574999999996635, 0.20574999999996635, 0.22264999999993051, 0.2415499999998474, 0.2415499999998474, 0.2415499999998474, 0.25769999999988613, 0.2415499999998474, 0.22644999999988613, 0.22644999999988613, 0.24389999999982592, 0.23489999999992506, 0.21775000000002365, 0.21775000000002365, 0.21775000000002365, 0.23230000000000928, 0.23230000000000928, 0.23230000000000928, 0.23324999999999818, 0.24129999999991014, 0.25530000000003383, 0.2987000000000535, 0.3140000000000782, 0.3140000000000782, 0.3575499999999465, 0.3140000000000782, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.25120000000003984, 0.25120000000003984, 0.23850000000004457, 0.23850000000004457, 0.2539000000000442, 0.2901000000000522, 0.2901000000000522, 0.2726499999999987, 0.26625000000012733, 0.2478000000000975, 0.256650000000036, 0.26625000000012733, 0.26625000000012733, 0.256650000000036, 0.2597000000000662, 0.2597000000000662, 0.27290000000016335, 0.27290000000016335, 0.28130000000010114, 0.28300000000001546, 0.28300000000001546, 0.29360000000008313, 0.30150000000014643, 0.31690000000014606, 0.30150000000014643, 0.2940000000000964, 0.2940000000000964, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.2833500000000413, 0.2552500000000464, 0.2552500000000464, 0.2552500000000464, 0.29520000000002256, 0.2552500000000464, 0.2552500000000464, 0.24260000000003856, 0.2552500000000464, 0.24260000000003856, 0.2400000000000091, 0.2400000000000091, 0.2390500000000202, 0.23765000000003056, 0.23765000000003056, 0.23584999999991396, 0.23584999999991396, 0.22834999999997763, 0.22834999999997763, 0.21680000000003474, 0.20320000000003802, 0.19389999999998508, 0.19389999999998508, 0.19389999999998508, 0.19024999999999181, 0.19024999999999181, 0.18795000000000073, 0.19050000000004275, 0.19050000000004275, 0.19270000000005894, 0.1938000000000102, 0.19040000000006785, 0.19605000000001382, 0.2005500000000211, 0.2005500000000211, 0.19605000000001382, 0.2005500000000211, 0.19605000000001382, 0.19200000000012096, 0.1897000000000162, 0.1897000000000162, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19305000000008476, 0.2005500000000211, 0.19780000000002929, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20640000000003056, 0.2066499999999678, 0.20679999999993015, 0.20859999999993306, 0.20679999999993015, 0.20679999999993015, 0.20859999999993306, 0.2102500000000873, 0.2107500000000755, 0.2102500000000873, 0.2102500000000873, 0.208849999999984, 0.20590000000004238, 0.20614999999997963, 0.2157000000000835, 0.22480000000007294, 0.22480000000007294, 0.22480000000007294, 0.21485000000006949, 0.21485000000006949, 0.20730000000003201, 0.20730000000003201, 0.20730000000003201, 0.2022500000000491, 0.2022500000000491, 0.19809999999995398, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19809999999995398, 0.20230000000003656, 0.20430000000010295, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.22529999999994743, 0.22529999999994743, 0.22529999999994743, 0.2301999999998543, 0.21149999999988722, 0.2301999999998543, 0.21149999999988722, 0.21149999999988722, 0.21149999999988722, 0.22344999999984339, 0.22054999999988922, 0.22054999999988922, 0.2188499999999749, 0.20790000000010878, 0.2125500000000784, 0.2125500000000784, 0.2145500000000311, 0.22120000000006712, 0.22120000000006712, 0.2145500000000311, 0.213799999999992, 0.213799999999992, 0.2075999999999567, 0.2075999999999567, 0.2074999999999818, 0.2015999999999849, 0.2015999999999849, 0.19204999999999472, 0.19204999999999472, 0.2015999999999849, 0.2015999999999849, 0.20444999999995161, 0.21735000000001037, 0.21735000000001037, 0.21735000000001037, 0.27979999999990923, 0.2927999999998292, 0.38514999999983957, 0.3390999999999167, 0.30084999999996853, 0.30084999999996853, 0.2932500000000573, 0.2932500000000573, 0.3291999999999007, 0.3291999999999007, 0.2932500000000573, 0.2932500000000573, 0.2654000000001133, 0.2644000000000233, 0.26175000000000637, 0.25510000000008404, 0.24184999999999945, 0.22794999999996435, 0.22794999999996435, 0.24184999999999945, 0.24184999999999945, 0.24595000000010714, 0.2527499999999918, 0.2527499999999918, 0.248299999999972, 0.24984999999992397, 0.25719999999989795, 0.2726000000000113, 0.2636499999999842, 0.2636499999999842, 0.29500000000007276, 0.3322000000000571, 3.6611500000000206, 3.676849999999945, 3.970350000000167, 3.970350000000167, 8.935599999999909, 6.631550000000061, 6.631550000000061, 1.6663000000003194, 0.6673000000000684, 0.524349999999913, 0.33239999999977954, 0.2767999999998665, 0.2562000000000353, 0.2562000000000353, 0.24969999999984793, 0.24759999999992033, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.2477000000001226, 0.25264999999990323, 0.2523999999998523, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.25499999999988177, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.23365000000012515, 0.23365000000012515, 0.23365000000012515, 0.23614999999995234, 0.23614999999995234, 0.23614999999995234, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.24004999999988286, 0.2349500000000262, 0.24420000000009168, 0.2349500000000262, 0.24420000000009168, 0.24420000000009168, 0.24420000000009168, 0.23050000000012005, 0.23050000000012005, 0.23050000000012005, 0.21929999999997563, 0.23370000000022628, 0.21929999999997563, 0.23095000000012078, 0.23095000000012078, 0.245049999999992, 0.2719999999999345, 0.30559999999991305, 0.27294999999980973, 0.27294999999980973, 0.30559999999991305, 0.3283999999998741, 0.3283999999998741, 0.37304999999992106, 0.6222500000001219, 0.8412499999999454, 0.8412499999999454, 0.7091000000000349, 0.8412499999999454, 13.00974999999994, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.7105499999997846, 0.4718000000000302, 0.45335000000000036, 0.7976999999998498, 0.45335000000000036, 0.34294999999997344, 0.45335000000000036, 0.45335000000000036, 1.7548499999998057, 0.44919999999979154, 0.5153999999999996, 0.5153999999999996, 0.5423499999999422, 0.5423499999999422, 1.7817999999997483, 5.232499999999845, 5.232499999999845, 4.046099999999797, 1.8382999999998901, 5.288999999999987, 16.3125, 30.899549999999863, 30.899549999999863, 30.899549999999863, 14.104700000000093, 1.751449999999977, 0.41390000000001237, 1.751449999999977, 0.3977999999999611, 0.3136500000000524, 0.25264999999990323, 0.25264999999990323, 0.25264999999990323, 0.24839999999994689, 0.2372499999999036, 0.2372499999999036, 0.2288499999999658, 0.2288499999999658, 0.2288499999999658, 0.24204999999983556, 0.2372499999999036, 0.24299999999993815, 0.3614500000001044, 12.849800000000187, 12.849800000000187, 12.849800000000187, 19.171400000000176, 19.171400000000176, 6.778500000000122, 6.778500000000122, 6.778500000000122, 6.735250000000178, 0.6664500000001681, 0.3384000000000924, 0.4149999999999636, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4018499999999676, 0.4778999999998632, 0.4778999999998632, 0.43279999999981555, 0.43279999999981555, 0.37505000000010114, 0.33530000000018845, 0.29655000000002474, 0.28119999999989886, 0.2571499999999105, 0.2571499999999105, 0.2536499999998796, 0.2536499999998796, 0.24034999999980755, 0.24034999999980755, 0.244499999999789, 0.244499999999789, 0.25779999999986103, 0.25779999999986103, 0.26900000000000546, 0.273050000000012, 0.273050000000012, 0.3026999999999589, 0.43689999999992324, 0.43689999999992324, 0.43689999999992324, 0.3069999999995616, 0.31389999999987594, 0.31389999999987594, 0.29389999999966676, 7.086199999999735, 7.086199999999735, 7.086199999999735, 0.29389999999966676, 0.29389999999966676, 0.3182000000001608, 0.42390000000023065, 0.42390000000023065, 0.42390000000023065], "type": "scatter", "uid": "ce122e3d-c7e5-44c4-94d6-c31db6c7e64e"}], "layout": {"height": 400, "title": {"text": "Reaction time - trial number"}, "width": 630, "xaxis": {"title": {"text": "Trial number"}}, "yaxis": {"dtick": [-1.0, 0.0, 1.0, 2.0], "range": [-1.0, 2.0], "title": {"text": "Reaction time (s)"}, "type": "log"}}} \ No newline at end of file +{"data": [{"marker": {"color": "lightgray"}, "mode": "markers", "name": "data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [1.0378999999999996, 0.5363999999999995, 0.21280000000000143, 0.5754000000000001, 0.2237999999999989, 0.4792999999999985, 0.4103999999999992, 8.281399999999998, 0.26890000000000214, 5.083099999999995, 0.2220000000000013, 0.23999999999999488, 0.3763000000000005, 0.5259999999999962, 0.1880000000000024, 1.4342000000000041, 7.024099999999997, 0.1927000000000021, 0.18899999999999295, 0.227800000000002, 0.7036999999999978, 0.3885999999999967, 0.4239999999999924, 0.21229999999999905, 0.4222000000000037, 0.22299999999999898, 0.17379999999999995, 0.5754000000000019, 0.16900000000001114, 0.16549999999999443, 0.18120000000000402, 0.3032000000000039, 0.2254000000000076, 1.6178000000000026, 0.23980000000000246, 0.23000000000000398, 0.38769999999999527, 0.20179999999999154, 0.17430000000001655, 0.1991999999999905, 0.2289000000000101, 0.19619999999997617, 7.0434999999999945, 0.24660000000000082, 7.100200000000001, 0.1595000000000084, 0.16510000000002378, 0.18389999999999418, 0.2004000000000019, 0.5232999999999777, 4.7620000000000005, 0.3585999999999956, 0.2985999999999933, 0.1710999999999956, 0.44470000000001164, 0.28489999999999327, 0.377900000000011, 0.7081999999999766, 0.23490000000001032, 0.2715000000000032, 0.25620000000000687, 0.23029999999999973, 0.3977999999999895, 8.794000000000011, 0.20109999999999673, 0.535899999999998, 0.24139999999999873, 0.34950000000000614, 0.26780000000002246, 0.9699999999999989, 0.3611999999999682, 0.19709999999997763, 0.35240000000004557, 0.3727999999999838, 0.1524000000000001, 0.2850999999999999, 0.2458000000000311, 0.7078000000000202, 0.3365000000000009, 0.17789999999996553, 0.2185000000000059, 1.5932999999999993, 0.18810000000001992, 0.20830000000000837, 0.2939000000000078, 0.244199999999978, 0.47699999999997544, 4.169800000000009, 0.19650000000001455, 0.8175000000000523, 0.22340000000002647, 0.27359999999998763, 1.0647000000000162, 0.4581999999999766, 0.25230000000004793, 0.4837999999999738, 0.8208000000000197, 1.254600000000039, 0.1741999999999848, 0.9784999999999968, 0.21440000000001191, 0.6126999999999612, 0.6002000000000294, 0.24080000000003565, 0.4545999999999708, 0.2481999999999971, 0.19139999999998736, 2.5948999999999955, 0.469600000000014, 0.4993999999999801, 0.16470000000003893, 0.30759999999997945, 1.3038000000000238, 0.20750000000003865, 0.2563000000000102, 0.25099999999997635, 0.14680000000004156, 1.050200000000018, 0.36299999999999955, 0.2219000000000051, 0.2547000000000139, 0.34019999999998163, 0.16910000000001446, 0.07590000000004693, 0.3394000000000119, 0.202699999999993, 0.5809000000000424, 0.1694999999999709, 0.1775000000000091, 0.24689999999998236, 0.18549999999999045, 0.233600000000024, 0.35480000000001155, 0.4037999999999897, 0.32939999999996417, 0.2687999999999988, 0.22289999999998145, 1.3360999999999876, 0.8281999999999812, 0.6922999999999888, 0.19809999999995398, 0.6830999999999676, 0.3301000000000158, 0.26499999999998636, 0.29640000000000555, 0.21719999999999118, 0.6281000000000176, 0.1997000000000071, 0.1927000000000021, 0.32670000000001664, 0.19980000000003884, 2.1772000000000276, 0.5037999999999556, 0.21300000000007913, 0.08010000000001583, 0.26890000000003056, 0.19519999999999982, 0.2341000000000122, 0.4147000000000389, 0.2540000000000191, 0.26310000000000855, 0.42010000000004766, 0.18719999999996162, 1.9800000000000182, 0.2960000000000491, 0.865099999999984, 0.18610000000001037, 0.17589999999995598, 0.4540000000000646, 0.22910000000001673, 0.5388999999998987, 0.4315000000000282, 0.26329999999995835, 0.1855000000000473, 0.4056000000000495, 0.24939999999992324, 0.3341000000000349, 0.17860000000007403, 0.27760000000000673, 0.20990000000006148, 0.5129000000000588, 0.11899999999991451, 0.1813999999999396, 0.3106000000000222, 0.20879999999999654, 0.14379999999994197, 0.15829999999994016, 0.7638000000000602, 0.3771000000000413, 0.19590000000005148, 0.22429999999997108, 0.18479999999999563, 0.19690000000002783, 0.45079999999995835, 0.32970000000000255, 0.18679999999994834, 0.5495999999999412, 0.20709999999996853, 0.27129999999999654, 0.16499999999996362, 0.18409999999994398, 0.33350000000007185, 0.233600000000024, 0.2821999999999889, 1.2824999999999136, 0.21079999999994925, 0.20719999999994343, 0.39549999999997, 1.044300000000021, 0.1997000000000071, 0.07200000000000273, 0.24080000000003565, 0.6136000000000195, 0.2116999999999507, 0.22129999999992833, 0.5966999999999416, 0.20180000000004839, 0.3147000000000162, 0.1876999999999498, 0.1654999999999518, 0.2742999999999256, 0.5811999999999671, 0.3606999999999516, 0.19309999999995853, 0.2663000000000011, 0.1997000000000071, 1.2771999999999935, 0.29529999999999745, 0.2116999999999507, 0.445699999999988, 0.21920000000000073, 0.30179999999995744, 0.2141999999998916, 0.2539000000000442, 0.12229999999999563, 0.5413999999999533, 0.24239999999997508, 0.24109999999996035, 0.21050000000002456, 0.4400999999999158, 0.3755999999999631, 0.26070000000004256, 0.2742000000000644, 0.2798000000000229, 0.2702000000000453, 0.6286000000000058, 0.41679999999996653, 0.837099999999964, 0.35790000000008604, 0.2461999999999307, 0.23230000000000928, 0.0844000000000733, 0.2559999999999718, 0.3605000000000018, 0.19519999999999982, 0.22530000000006112, 0.24139999999999873, 0.24889999999993506, 0.2518000000000029, 0.20810000000005857, 0.2398999999999205, 0.5265000000000555, 0.23820000000000618, 0.7016999999999598, 0.17189999999993688, 0.18659999999999854, 0.12619999999992615, 0.3342000000000098, 0.6073999999999842, 0.22419999999999618, 0.5755000000000337, 0.4130999999999858, 0.30910000000005766, 0.18010000000003856, 0.2662000000000262, 0.21240000000000236, 0.20439999999996417, 0.19500000000005002, 0.17889999999999873, 0.20660000000009404, 0.47899999999992815, 0.5497000000000298, 0.1977000000000544, 0.18479999999999563, 0.2158000000000584, 0.18290000000001783, 0.42410000000006676, 0.399599999999964, 0.33140000000003056, 0.21339999999997872, 0.5024999999999409, 0.23070000000006985, 0.27499999999997726, 0.19640000000003965, 0.2078999999999951, 0.23569999999995161, 0.18089999999995143, 0.21029999999996107, 0.22659999999996217, 0.6989999999999554, 0.23569999999995161, 0.22429999999997108, 0.21059999999999945, 0.28340000000002874, 0.23909999999989395, 0.3023000000000593, 0.27529999999990196, 0.20109999999999673, 0.39049999999997453, 0.448099999999954, 0.18870000000003984, 0.25909999999998945, 0.2557999999999083, 0.233600000000024, 0.24680000000000746, 0.2236000000000331, 0.22529999999994743, 0.25709999999992306, 0.23249999999995907, 0.22820000000001528, 0.22239999999999327, 0.37009999999997945, 0.22550000000001091, 0.2074000000000069, 0.37980000000004566, 0.4518000000000484, 0.2015000000001237, 0.18059999999991305, 0.14980000000014115, 0.1898999999998523, 0.4068999999999505, 0.17799999999988358, 0.3552999999999429, 0.1697999999998956, 0.23869999999988067, 0.504799999999932, 0.2318000000000211, 0.1696999999999207, 0.1899999999998272, 0.18290000000001783, 0.18449999999984357, 0.19339999999988322, 0.2234000000000833, 0.20080000000007203, 0.20839999999998327, 0.19509999999991123, 0.15229999999996835, 0.22230000000013206, 0.22010000000000218, 0.2481999999999971, 0.3110999999998967, 0.38380000000006476, 0.5388000000000375, 0.233600000000024, 0.19879999999989195, 0.2357999999999265, 0.24989999999979773, 0.42200000000002547, 0.20269999999982247, 0.21849999999994907, 0.23870000000010805, 0.23730000000000473, 0.185799999999972, 0.21499999999991815, 0.23420000000010077, 0.2544000000000324, 0.46309999999994034, 0.27700000000004366, 0.27899999999999636, 0.22820000000001528, 0.26729999999997744, 0.20010000000002037, 0.20870000000013533, 0.2802000000001499, 0.1893000000000029, 0.29539999999997235, 0.6851999999998952, 0.26340000000004693, 0.25279999999997926, 0.20910000000003492, 0.3000000000001819, 0.3892000000000735, 0.24319999999988795, 0.2541000000001077, 0.2617000000000189, 0.22919999999999163, 0.23059999999986758, 0.22420000000010987, 0.23869999999988067, 0.2500999999999749, 0.1976999999999407, 0.1914999999999054, 0.2417000000000371, 0.21630000000004657, 0.20249999999987267, 0.19719999999983884, 0.5228000000001884, 0.2057999999999538, 0.19650000000001455, 0.2717999999999847, 0.23949999999990723, 0.17090000000007421, 0.2056999999999789, 0.3748000000000502, 0.4226000000001022, 0.24359999999978754, 0.9338999999999942, 0.20929999999998472, 0.2842000000000553, 0.07159999999998945, 0.20400000000017826, 0.20209999999997308, 0.2441999999998643, 0.22620000000006257, 0.20250000000010004, 0.2722000000001117, 0.23839999999995598, 0.46630000000004657, 3.1365999999998166, 0.20429999999987558, 0.22810000000004038, 0.5314999999998236, 0.32519999999999527, 0.5133999999998196, 0.30280000000016116, 0.20800000000008367, 0.3898999999998978, 0.2578000000000884, 0.2075999999999567, 0.20319999999992433, 0.24459999999999127, 0.31970000000001164, 0.6826000000000931, 0.3181999999999334, 0.19699999999988904, 0.23240000000009786, 0.20420000000012806, 0.3170000000000073, 0.26320000000009713, 0.40949999999998, 0.16630000000009204, 0.2820999999999003, 0.2693000000001575, 0.22859999999991487, 0.2500999999999749, 0.27650000000016917, 0.22100000000000364, 0.23630000000002838, 0.4155000000000655, 0.30110000000013315, 0.3319000000001324, 0.2861000000000331, 0.5201999999999316, 0.2798999999999978, 0.21469999999999345, 0.4941000000001168, 0.3019000000001597, 3.6475000000000364, 0.22669999999993706, 0.2235000000000582, 0.32560000000012224, 0.41439999999988686, 0.3650000000000091, 0.18290000000001783, 0.2647999999999229, 0.2457000000001699, 0.21920000000000073, 0.5204999999998563, 0.23949999999990723, 0.4193000000000211, 0.23860000000013315, 0.26870000000008076, 0.23499999999989996, 0.3341000000000349, 0.23669999999992797, 0.24050000000011096, 0.22000000000002728, 0.18360000000006949, 0.1270999999999276, 0.2861000000000331, 0.2136000000000422, 0.23739999999997963, 0.1876999999999498, 0.4307000000001153, 0.17390000000000327, 0.19280000000003383, 0.19499999999993634, 0.14959999999996398, 0.16699999999991633, 0.17780000000016116, 0.2134000000000924, 0.18820000000005166, 0.22550000000001091, 0.2219000000000051, 0.19260000000008404, 0.1994999999999436, 0.18389999999999418, 0.21969999999987522, 0.2016000000000986, 0.1812999999999647, 0.18390000000022155, 0.2395000000001346, 0.1914000000001579, 0.16889999999989413, 0.1879999999998745, 0.5153999999999996, 0.18899999999985084, 0.19470000000001164, 0.20689999999990505, 0.20640000000003056, 0.21050000000013824, 0.20090000000004693, 0.20640000000003056, 0.19280000000003383, 0.18840000000000146, 0.21249999999986358, 0.21739999999999782, 0.21000000000003638, 0.20719999999982974, 0.21050000000013824, 0.20129999999994652, 0.1958999999999378, 0.2300000000000182, 0.21100000000001273, 0.2746999999999389, 0.19499999999993634, 0.22040000000015425, 0.19000000000005457, 0.1714999999999236, 0.22919999999999163, 0.3280000000002019, 0.2658000000001266, 0.361299999999801, 0.2053000000000793, 0.20929999999998472, 0.056599999999889405, 0.15229999999996835, 0.19699999999988904, 0.1834000000001197, 0.19920000000001892, 0.2401999999999589, 0.1797999999998865, 0.18309999999996762, 0.2054000000000542, 0.24900000000002365, 0.20839999999998327, 0.24410000000011678, 0.2032000000001517, 0.24809999999979482, 0.1714999999999236, 0.47109999999997854, 0.18830000000002656, 0.2421999999999116, 0.20479999999997744, 0.2841999999998279, 0.218199999999797, 0.1776999999999589, 0.48499999999989996, 0.17660000000000764, 0.16360000000008768, 0.22869999999988977, 0.23270000000002256, 0.22289999999998145, 0.19630000000006476, 0.2195000000001528, 0.1795999999999367, 0.205600000000004, 0.2937000000001717, 0.20959999999990941, 0.2725000000000364, 0.43679999999994834, 0.17290000000002692, 0.21800000000007458, 0.2054000000000542, 0.17400000000020555, 0.1471999999998843, 0.1977999999999156, 0.18630000000007385, 0.21109999999998763, 0.16300000000001091, 0.47070000000007894, 2.1536000000000968, 0.43429999999989377, 0.33599999999978536, 0.2236000000000331, 0.1247000000000753, 0.1791000000000622, 0.47420000000010987, 0.24959999999987303, 4.469900000000052, 0.342200000000048, 0.2657000000001517, 12.426799999999957, 0.3207999999999629, 0.26510000000007494, 0.3375999999998385, 0.21250000000009095, 0.2636999999999716, 0.23329999999987194, 0.19659999999998945, 0.2598000000000411, 0.25040000000012697, 0.21909999999979846, 0.12049999999999272, 0.22260000000005675, 0.2859000000000833, 0.5489000000000033, 0.25509999999985666, 0.2415000000000873, 0.3220000000001164, 0.25929999999993925, 0.22149999999987813, 0.24459999999999127, 0.3423999999999978, 6.979900000000043, 0.2680000000000291, 59.956699999999955, 58.47219999999993, 56.48730000000023, 10.891299999999774, 0.3737999999998465, 0.9608000000002903, 0.22280000000000655, 41.21270000000004, 2.3718000000003485, 0.2909999999997126, 0.2626000000000204, 0.24959999999964566, 0.6748999999999796, 0.23660000000018044, 0.23460000000022774, 0.2498000000000502, 0.23939999999993233, 0.245600000000195, 0.23050000000012005, 0.2424999999998363, 0.25549999999975626, 0.29440000000022337, 0.40319999999974243, 0.6226999999998952, 0.3512999999998101, 0.24929999999994834, 0.2606999999998152, 0.17489999999997963, 0.23410000000012587, 0.17849999999998545, 0.1734999999998763, 0.23320000000012442, 0.2614000000003216, 0.29890000000023065, 0.3079000000002452, 0.22359999999980573, 0.23909999999978027, 0.20010000000002037, 0.43489999999974316, 0.010199999999713327, 0.20100000000002183, 0.22890000000006694, 0.25759999999991123, 0.24989999999979773, 0.24769999999989523, 0.24099999999998545, 0.20870000000013533, 0.2474000000001979, 0.20180000000027576, 0.3623999999999796, 0.21390000000019427, 0.21430000000009386, 0.22000000000025466, 0.4375, 0.610700000000179, 0.2185999999996966, 0.2481999999999971, 0.1869000000001506, 0.2418999999999869, 0.29579999999987194, 0.3413999999997941, 0.31539999999995416, 1.0481999999997242, 0.2500999999997475, 0.404700000000048, 59.94150000000036, 59.83040000000028, 0.29890000000023065, 25.176800000000185, 0.8398000000001957, 0.8426999999996951, 0.5783999999998741, 0.35390000000006694, 59.95520000000033, 39.49330000000009, 0.31790000000000873, 1.053899999999885, 0.36520000000018626, 59.949699999999666, 0.20780000000013388, 0.3079000000002452, 0.5414999999998145, 59.94870000000037, 0.14030000000002474, 0.3206999999997606, 59.92540000000008, 2.968199999999797, 59.944000000000415, 0.3568999999997686, 0.4893000000001848, 0.3459000000002561, 0.5953999999996995, 7.496799999999894, 59.944800000000214, 59.803100000000086, 25.128200000000106, 0.40610000000015134, 3.0812000000000808, 59.94470000000001, 59.85050000000001, 36.67089999999962, 0.22269999999980428, 0.4216999999998734, 0.25189999999975043, 0.37390000000004875, 0.253400000000056, 55.91840000000002, 0.24490000000014334, 0.22810000000026776, 0.22959999999966385, 0.2545000000000073, 0.1969000000003689, 0.21139999999968495, 0.2199999999997999, 0.2660000000000764, 0.20440000000007785, 30.50070000000005, 59.95039999999972, 59.80019999999968, 0.06710000000020955, 0.4569000000001324, 25.24270000000024, 59.94450000000006, 0.10320000000001528, 0.3704000000002452, 13.100100000000111, 27.171699999999873, 0.3063999999999396, 59.95310000000018, 0.06970000000001164, 0.24459999999999127, 0.962500000000091, 0.24070000000028813, 0.45959999999968204, 0.4962000000000444, 59.029199999999946, 59.954499999999825, 0.3441000000002532, 0.1578999999996995, 59.700700000000325, 0.1772000000000844, 0.40599999999994907, 0.3265000000001237, 0.24769999999989523, 0.2665999999999258, 0.22850000000016735, 0.29579999999987194, 0.21829999999999927, 0.22800000000006548, 0.25959999999986394, 0.21570000000019718, 0.23299999999971988, 2.7521999999999025, 0.2559999999998581, 0.5834999999997308, 0.278400000000147, 0.5468000000000757, 0.3269999999997708, 0.26769999999987704, 0.22360000000026048, 28.914700000000266, 13.87159999999949, 42.69970000000012, 0.28699999999935244, 0.2566999999999098, 0.3007999999999811, 24.60689999999977, 0.26670000000012806, 53.8715000000002, 0.2528999999994994, 59.9413999999997, 0.20079999999961728, 23.895799999999326, 0.3356000000003405, 0.5122000000001208, 0.3338999999996304, 59.95629999999983], "type": "scatter", "uid": "d3fb8fb0-0712-4808-86a2-0bc546c77972"}, {"marker": {"color": "black"}, "name": "rolled data", "x": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793], "y": [null, null, null, null, null, null, null, null, null, 0.507849999999999, 0.44484999999999886, 0.3396500000000007, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.39334999999999987, 0.4511499999999984, 0.32260000000000133, 0.3081499999999977, 0.23389999999999844, 0.3081499999999977, 0.3824499999999986, 0.40629999999999455, 0.30819999999999936, 0.4054000000000002, 0.30819999999999936, 0.2254000000000005, 0.30819999999999936, 0.30819999999999936, 0.30579999999999785, 0.217649999999999, 0.217649999999999, 0.217649999999999, 0.22420000000000329, 0.22420000000000329, 0.2277000000000058, 0.23490000000000322, 0.2277000000000058, 0.2277000000000058, 0.2277000000000058, 0.22945000000000704, 0.22715000000000884, 0.22945000000000704, 0.22945000000000704, 0.22945000000000704, 0.21535000000000082, 0.20049999999999102, 0.19769999999998333, 0.1997999999999962, 0.214650000000006, 0.22350000000000136, 0.3025999999999982, 0.27259999999999707, 0.2494999999999976, 0.2494999999999976, 0.2917499999999933, 0.32859999999999445, 0.3682500000000033, 0.3682500000000033, 0.32859999999999445, 0.2917499999999933, 0.2781999999999982, 0.2781999999999982, 0.33140000000000214, 0.2781999999999982, 0.3247000000000071, 0.263850000000005, 0.263850000000005, 0.2696500000000128, 0.3086500000000143, 0.3553499999999872, 0.3553499999999872, 0.35095000000002585, 0.35095000000002585, 0.35095000000002585, 0.317300000000003, 0.317300000000003, 0.31875000000002274, 0.34445000000002324, 0.3108000000000004, 0.2654500000000155, 0.3108000000000004, 0.2654500000000155, 0.2321500000000185, 0.2654500000000155, 0.24500000000000455, 0.2690499999999929, 0.2690499999999929, 0.23134999999999195, 0.2690499999999929, 0.2690499999999929, 0.2588999999999828, 0.2837499999999977, 0.3760499999999922, 0.36589999999998213, 0.46759999999997603, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.4709999999999752, 0.5482499999999675, 0.5420000000000016, 0.5420000000000016, 0.5420000000000016, 0.5274000000000001, 0.35139999999998395, 0.35139999999998395, 0.4620999999999924, 0.4620999999999924, 0.4620999999999924, 0.3810999999999751, 0.3810999999999751, 0.3810999999999751, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.2819499999999948, 0.25364999999999327, 0.25550000000001205, 0.25550000000001205, 0.25284999999999513, 0.25284999999999513, 0.25284999999999513, 0.2383000000000095, 0.2970500000000129, 0.2383000000000095, 0.21229999999999905, 0.22479999999998768, 0.19409999999999172, 0.19409999999999172, 0.2181500000000085, 0.24025000000000318, 0.24025000000000318, 0.2578499999999906, 0.24025000000000318, 0.2578499999999906, 0.2990999999999815, 0.34209999999998786, 0.34209999999998786, 0.37930000000000064, 0.3669500000000028, 0.32974999999999, 0.3132500000000107, 0.3132500000000107, 0.47910000000001673, 0.3132500000000107, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.28069999999999595, 0.25679999999999836, 0.21510000000003515, 0.24095000000005484, 0.20640000000005898, 0.22355000000004566, 0.2515000000000214, 0.24405000000001564, 0.2585500000000138, 0.2585500000000138, 0.24405000000001564, 0.2585500000000138, 0.26600000000001955, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.27955000000002883, 0.3580500000000484, 0.36375000000003865, 0.36375000000003865, 0.27965000000000373, 0.3344500000000039, 0.2563499999999408, 0.29869999999999663, 0.29869999999999663, 0.27044999999998254, 0.27044999999998254, 0.27044999999998254, 0.2563499999999408, 0.22964999999999236, 0.263499999999965, 0.22964999999999236, 0.209350000000029, 0.19509999999996808, 0.209350000000029, 0.209350000000029, 0.202350000000024, 0.202350000000024, 0.202350000000024, 0.2028500000000122, 0.2028500000000122, 0.21059999999999945, 0.21059999999999945, 0.2769999999999868, 0.2156999999999698, 0.2156999999999698, 0.2156999999999698, 0.20199999999999818, 0.23919999999998254, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.2524500000000103, 0.22219999999998663, 0.2524500000000103, 0.25790000000000646, 0.25790000000000646, 0.25790000000000646, 0.23720000000002983, 0.2615000000000123, 0.22624999999999318, 0.21649999999993952, 0.231049999999982, 0.231049999999982, 0.231049999999982, 0.21649999999993952, 0.21649999999993952, 0.231049999999982, 0.24779999999992697, 0.24779999999992697, 0.24779999999992697, 0.27029999999996335, 0.23405000000002474, 0.27029999999996335, 0.27029999999996335, 0.27029999999996335, 0.28479999999996153, 0.2807999999999993, 0.2807999999999993, 0.2427500000000009, 0.26010000000002265, 0.23655000000002246, 0.2746000000000208, 0.24815000000000964, 0.2417499999999677, 0.2417499999999677, 0.2417499999999677, 0.24815000000000964, 0.24815000000000964, 0.2573000000000434, 0.2674500000000535, 0.27220000000005484, 0.27220000000005484, 0.27700000000004366, 0.327699999999993, 0.36675000000002456, 0.3188500000000545, 0.27700000000004366, 0.27700000000004366, 0.2750000000000341, 0.31405000000006567, 0.3069500000000289, 0.25109999999995125, 0.2437999999999647, 0.2437999999999647, 0.2437999999999647, 0.236850000000004, 0.24064999999995962, 0.2451499999999669, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.24064999999995962, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.23904999999996335, 0.286200000000008, 0.286200000000008, 0.32165000000003374, 0.2666500000000269, 0.2876500000000419, 0.2876500000000419, 0.2876500000000419, 0.2452000000000112, 0.21829999999999927, 0.2095000000000482, 0.2095000000000482, 0.2095000000000482, 0.2055000000000291, 0.2055000000000291, 0.2055000000000291, 0.20105000000000928, 0.20215000000007421, 0.21120000000007622, 0.2736000000000445, 0.2736000000000445, 0.2736000000000445, 0.22325000000006412, 0.25285000000002356, 0.25285000000002356, 0.25285000000002356, 0.25534999999996444, 0.23320000000001073, 0.22205000000002428, 0.21999999999997044, 0.228650000000016, 0.228650000000016, 0.22544999999996662, 0.21744999999998527, 0.22544999999996662, 0.2311499999999569, 0.2311499999999569, 0.23739999999992278, 0.23739999999992278, 0.25719999999989795, 0.25719999999989795, 0.25719999999989795, 0.2671999999999457, 0.2671999999999457, 0.2574499999999489, 0.2574499999999489, 0.2512999999999579, 0.24020000000001573, 0.2512999999999579, 0.24020000000001573, 0.23304999999999154, 0.23304999999999154, 0.23304999999999154, 0.23034999999998718, 0.2268500000000131, 0.2268500000000131, 0.23034999999998718, 0.23034999999998718, 0.2268500000000131, 0.2239500000000021, 0.2149000000000001, 0.2164500000000089, 0.2044500000000653, 0.2044500000000653, 0.195699999999988, 0.195699999999988, 0.195699999999988, 0.2108499999999367, 0.2108499999999367, 0.21089999999992415, 0.21089999999992415, 0.18724999999983538, 0.1916999999998552, 0.1916999999998552, 0.19709999999997763, 0.19709999999997763, 0.19424999999989723, 0.1916999999998552, 0.19424999999989723, 0.19794999999999163, 0.20460000000002765, 0.21424999999999272, 0.22120000000006712, 0.22120000000006712, 0.22795000000007803, 0.22795000000007803, 0.23469999999997526, 0.2419999999999618, 0.2490499999998974, 0.2490499999998974, 0.24284999999986212, 0.23725000000001728, 0.23654999999996562, 0.23469999999997526, 0.2271499999999378, 0.23500000000001364, 0.23575000000005275, 0.23575000000005275, 0.23575000000005275, 0.2380000000000564, 0.2380000000000564, 0.24585000000001855, 0.24430000000006658, 0.24430000000006658, 0.2608500000000049, 0.2608500000000049, 0.27215000000001055, 0.27215000000001055, 0.2653500000000122, 0.2581000000000131, 0.2581000000000131, 0.2581000000000131, 0.2718000000000984, 0.2718000000000984, 0.2587500000000773, 0.2625500000000329, 0.2579000000000633, 0.2534500000000435, 0.2479999999999336, 0.2409499999998843, 0.24664999999993142, 0.2409499999998843, 0.23464999999987413, 0.23464999999987413, 0.2298999999999296, 0.22670000000005075, 0.22025000000007822, 0.22025000000007822, 0.21105000000000018, 0.20414999999991323, 0.20414999999991323, 0.21105000000000018, 0.21105000000000018, 0.20574999999996635, 0.20574999999996635, 0.22264999999993051, 0.2415499999998474, 0.2415499999998474, 0.2415499999998474, 0.25769999999988613, 0.2415499999998474, 0.22644999999988613, 0.22644999999988613, 0.24389999999982592, 0.23489999999992506, 0.21775000000002365, 0.21775000000002365, 0.21775000000002365, 0.23230000000000928, 0.23230000000000928, 0.23230000000000928, 0.23324999999999818, 0.24129999999991014, 0.25530000000003383, 0.2987000000000535, 0.3140000000000782, 0.3140000000000782, 0.3575499999999465, 0.3140000000000782, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.2803000000001248, 0.25120000000003984, 0.25120000000003984, 0.23850000000004457, 0.23850000000004457, 0.2539000000000442, 0.2901000000000522, 0.2901000000000522, 0.2726499999999987, 0.26625000000012733, 0.2478000000000975, 0.256650000000036, 0.26625000000012733, 0.26625000000012733, 0.256650000000036, 0.2597000000000662, 0.2597000000000662, 0.27290000000016335, 0.27290000000016335, 0.28130000000010114, 0.28300000000001546, 0.28300000000001546, 0.29360000000008313, 0.30150000000014643, 0.31690000000014606, 0.30150000000014643, 0.2940000000000964, 0.2940000000000964, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.31375000000014097, 0.2833500000000413, 0.2552500000000464, 0.2552500000000464, 0.2552500000000464, 0.29520000000002256, 0.2552500000000464, 0.2552500000000464, 0.24260000000003856, 0.2552500000000464, 0.24260000000003856, 0.2400000000000091, 0.2400000000000091, 0.2390500000000202, 0.23765000000003056, 0.23765000000003056, 0.23584999999991396, 0.23584999999991396, 0.22834999999997763, 0.22834999999997763, 0.21680000000003474, 0.20320000000003802, 0.19389999999998508, 0.19389999999998508, 0.19389999999998508, 0.19024999999999181, 0.19024999999999181, 0.18795000000000073, 0.19050000000004275, 0.19050000000004275, 0.19270000000005894, 0.1938000000000102, 0.19040000000006785, 0.19605000000001382, 0.2005500000000211, 0.2005500000000211, 0.19605000000001382, 0.2005500000000211, 0.19605000000001382, 0.19200000000012096, 0.1897000000000162, 0.1897000000000162, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19305000000008476, 0.2005500000000211, 0.19780000000002929, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20365000000003874, 0.20640000000003056, 0.2066499999999678, 0.20679999999993015, 0.20859999999993306, 0.20679999999993015, 0.20679999999993015, 0.20859999999993306, 0.2102500000000873, 0.2107500000000755, 0.2102500000000873, 0.2102500000000873, 0.208849999999984, 0.20590000000004238, 0.20614999999997963, 0.2157000000000835, 0.22480000000007294, 0.22480000000007294, 0.22480000000007294, 0.21485000000006949, 0.21485000000006949, 0.20730000000003201, 0.20730000000003201, 0.20730000000003201, 0.2022500000000491, 0.2022500000000491, 0.19809999999995398, 0.19020000000000437, 0.19020000000000437, 0.19020000000000437, 0.19809999999995398, 0.20230000000003656, 0.20430000000010295, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.20690000000001874, 0.22529999999994743, 0.22529999999994743, 0.22529999999994743, 0.2301999999998543, 0.21149999999988722, 0.2301999999998543, 0.21149999999988722, 0.21149999999988722, 0.21149999999988722, 0.22344999999984339, 0.22054999999988922, 0.22054999999988922, 0.2188499999999749, 0.20790000000010878, 0.2125500000000784, 0.2125500000000784, 0.2145500000000311, 0.22120000000006712, 0.22120000000006712, 0.2145500000000311, 0.213799999999992, 0.213799999999992, 0.2075999999999567, 0.2075999999999567, 0.2074999999999818, 0.2015999999999849, 0.2015999999999849, 0.19204999999999472, 0.19204999999999472, 0.2015999999999849, 0.2015999999999849, 0.20444999999995161, 0.21735000000001037, 0.21735000000001037, 0.21735000000001037, 0.27979999999990923, 0.2927999999998292, 0.38514999999983957, 0.3390999999999167, 0.30084999999996853, 0.30084999999996853, 0.2932500000000573, 0.2932500000000573, 0.3291999999999007, 0.3291999999999007, 0.2932500000000573, 0.2932500000000573, 0.2654000000001133, 0.2644000000000233, 0.26175000000000637, 0.25510000000008404, 0.24184999999999945, 0.22794999999996435, 0.22794999999996435, 0.24184999999999945, 0.24184999999999945, 0.24595000000010714, 0.2527499999999918, 0.2527499999999918, 0.248299999999972, 0.24984999999992397, 0.25719999999989795, 0.2726000000000113, 0.2636499999999842, 0.2636499999999842, 0.29500000000007276, 0.3322000000000571, 3.6611500000000206, 3.676849999999945, 3.970350000000167, 3.970350000000167, 8.935599999999909, 6.631550000000061, 6.631550000000061, 1.6663000000003194, 0.6673000000000684, 0.524349999999913, 0.33239999999977954, 0.2767999999998665, 0.2562000000000353, 0.2562000000000353, 0.24969999999984793, 0.24759999999992033, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.24405000000001564, 0.2477000000001226, 0.25264999999990323, 0.2523999999998523, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.2580999999997857, 0.25499999999988177, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.2417000000000371, 0.23365000000012515, 0.23365000000012515, 0.23365000000012515, 0.23614999999995234, 0.23614999999995234, 0.23614999999995234, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.2339999999999236, 0.24004999999988286, 0.2349500000000262, 0.24420000000009168, 0.2349500000000262, 0.24420000000009168, 0.24420000000009168, 0.24420000000009168, 0.23050000000012005, 0.23050000000012005, 0.23050000000012005, 0.21929999999997563, 0.23370000000022628, 0.21929999999997563, 0.23095000000012078, 0.23095000000012078, 0.245049999999992, 0.2719999999999345, 0.30559999999991305, 0.27294999999980973, 0.27294999999980973, 0.30559999999991305, 0.3283999999998741, 0.3283999999998741, 0.37304999999992106, 0.6222500000001219, 0.8412499999999454, 0.8412499999999454, 0.7091000000000349, 0.8412499999999454, 13.00974999999994, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.8412499999999454, 0.7105499999997846, 0.4718000000000302, 0.45335000000000036, 0.7976999999998498, 0.45335000000000036, 0.34294999999997344, 0.45335000000000036, 0.45335000000000036, 1.7548499999998057, 0.44919999999979154, 0.5153999999999996, 0.5153999999999996, 0.5423499999999422, 0.5423499999999422, 1.7817999999997483, 5.232499999999845, 5.232499999999845, 4.046099999999797, 1.8382999999998901, 5.288999999999987, 16.3125, 30.899549999999863, 30.899549999999863, 30.899549999999863, 14.104700000000093, 1.751449999999977, 0.41390000000001237, 1.751449999999977, 0.3977999999999611, 0.3136500000000524, 0.25264999999990323, 0.25264999999990323, 0.25264999999990323, 0.24839999999994689, 0.2372499999999036, 0.2372499999999036, 0.2288499999999658, 0.2288499999999658, 0.2288499999999658, 0.24204999999983556, 0.2372499999999036, 0.24299999999993815, 0.3614500000001044, 12.849800000000187, 12.849800000000187, 12.849800000000187, 19.171400000000176, 19.171400000000176, 6.778500000000122, 6.778500000000122, 6.778500000000122, 6.735250000000178, 0.6664500000001681, 0.3384000000000924, 0.4149999999999636, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4778999999998632, 0.4018499999999676, 0.4778999999998632, 0.4778999999998632, 0.43279999999981555, 0.43279999999981555, 0.37505000000010114, 0.33530000000018845, 0.29655000000002474, 0.28119999999989886, 0.2571499999999105, 0.2571499999999105, 0.2536499999998796, 0.2536499999998796, 0.24034999999980755, 0.24034999999980755, 0.244499999999789, 0.244499999999789, 0.25779999999986103, 0.25779999999986103, 0.26900000000000546, 0.273050000000012, 0.273050000000012, 0.3026999999999589, 0.43689999999992324, 0.43689999999992324, 0.43689999999992324, 0.3069999999995616, 0.31389999999987594, 0.31389999999987594, 0.29389999999966676, 7.086199999999735, 7.086199999999735, 7.086199999999735, 0.29389999999966676, 0.29389999999966676, 0.3182000000001608, 0.42390000000023065, 0.42390000000023065, 0.42390000000023065], "type": "scatter", "uid": "ce122e3d-c7e5-44c4-94d6-c31db6c7e64e"}], "layout": {"height": 400, "title": {"text": "Reaction time - trial number"}, "width": 630, "xaxis": {"title": {"text": "Trial number"}}, "yaxis": {"dtick": [-1.0, 0.0, 1.0, 2.0], "range": [-1.0, 2.0], "title": {"text": "Reaction time (s)"}, "type": "log"}}} diff --git a/notebooks/notebooks_plotting/trial_counts_session_duration.json b/notebooks/notebooks_plotting/trial_counts_session_duration.json index 25fd9411..e6eb0f62 100644 --- a/notebooks/notebooks_plotting/trial_counts_session_duration.json +++ b/notebooks/notebooks_plotting/trial_counts_session_duration.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "trial counts", "showlegend": false, "x": ["2019-08-10", "2019-08-12", "2019-08-13", "2019-08-14", "2019-08-14", "2019-08-15", "2019-08-16", "2019-08-19", "2019-08-20", "2019-08-21", "2019-08-22", "2019-08-23", "2019-08-26", "2019-08-27", "2019-08-28", "2019-08-29", "2019-08-30", "2019-08-31", "2019-09-10", "2019-09-11", "2019-09-12", "2019-09-13", "2019-09-16", "2019-09-17", "2019-09-18", "2019-09-19", "2019-09-20", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-30", "2019-10-01", "2019-10-04", "2019-10-07", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-11", "2019-11-12", "2019-11-14", "2019-11-15", "2019-11-18", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-11-29", "2019-12-02", "2019-12-05", "2019-12-09", "2019-12-10", "2019-12-12", "2019-12-13", "2020-01-06", "2020-01-07", "2020-01-09", "2020-01-10", "2020-01-13", "2020-01-14", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28", "2020-02-18", "2020-02-19", "2020-02-21", "2020-02-24", "2020-02-25", "2020-02-27", "2020-03-02", "2020-03-04", "2020-03-05"], "y": [196, 140, 223, 55, 289, 141, 340, 224, 252, 269, 640, 521, 807, 869, 743, 683, 799, 759, 462, 717, 972, 349, 659, 1011, 1145, 914, 1053, 1087, 929, 999, 1215, 941, 983, 967, 859, 992, 1043, 1134, 1190, 941, 755, 1028, 959, 985, 1039, 1075, 1174, 57, 974, 1232, 873, 1175, 1041, 1087, 659, 642, 421, 429, 763, 530, 932, 819, 994, 516, 916, 860, 709, 909, 811, 864, 864, 984, 811, 683, 577, 442, 402, 505, 416, 512, 718, 704, 642, 611, 467, 312, 191, 643, 481, 616, 789, 599, 371, 524, 640, 195, 225], "yaxis": "y", "type": "scatter"}, {"marker": {"color": "red", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "session duration", "showlegend": false, "x": ["2019-08-10", "2019-08-12", "2019-08-13", "2019-08-14", "2019-08-14", "2019-08-15", "2019-08-16", "2019-08-19", "2019-08-20", "2019-08-21", "2019-08-22", "2019-08-23", "2019-08-26", "2019-08-27", "2019-08-28", "2019-08-29", "2019-08-30", "2019-08-31", "2019-09-10", "2019-09-11", "2019-09-12", "2019-09-13", "2019-09-16", "2019-09-17", "2019-09-18", "2019-09-19", "2019-09-20", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-30", "2019-10-01", "2019-10-04", "2019-10-07", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-11", "2019-11-12", "2019-11-14", "2019-11-15", "2019-11-18", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-11-29", "2019-12-02", "2019-12-05", "2019-12-09", "2019-12-10", "2019-12-12", "2019-12-13", "2020-01-06", "2020-01-07", "2020-01-09", "2020-01-10", "2020-01-13", "2020-01-14", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28", "2020-02-18", "2020-02-19", "2020-02-21", "2020-02-24", "2020-02-25", "2020-02-27", "2020-03-02", "2020-03-04", "2020-03-05"], "y": [46, 46, 54, 21, 45, 45, 44, 44, 48, 45, 77, 53, 73, 79, 61, 59, 69, 63, 43, 61, 81, 44, 50, 89, 92, 78, 89, 89, 72, 78, 91, 66, 79, 78, 65, 75, 84, 85, 90, 78, 60, 87, 77, 79, 82, 77, 88, 4, 82, 90, 64, 86, 76, 77, 59, 47, 38, 31, 55, 38, 68, 58, 69, 34, 64, 58, 54, 62, 56, 62, 68, 77, 69, 75, 46, 37, 37, 45, 36, 38, 59, 67, 68, 61, 47, 45, 44, 62, 55, 62, 89, 68, 44, 51, 79, 30, 43], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-07-29", "2019-07-29"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-05", "2019-08-05"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-12", "2019-08-12"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-19", "2019-08-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-26", "2019-08-26"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-02", "2019-09-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-09", "2019-09-09"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-16", "2019-09-16"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-23", "2019-09-23"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-30", "2019-09-30"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-07", "2019-10-07"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-21", "2019-10-21"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-28", "2019-10-28"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-17", "2020-02-17"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-24", "2020-02-24"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-03-02", "2020-03-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-09-19", "2019-09-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-09-25", "2019-09-25"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(0, 0, 0, 1)"}, "mode": "lines", "name": "mouse became seven months", "showlegend": true, "x": ["2020-01-14", "2020-01-14"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2019-09-19", "2019-09-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Trial counts and session duration", "x": 0.18, "y": 0.85}, "width": 700, "xaxis": {"range": ["2019-07-25", "2020-03-08"], "showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 1282], "title": {"text": "Trial counts"}}, "yaxis2": {"color": "red", "overlaying": "y", "side": "right", "title": {"text": "Session duration (mins)"}}}} \ No newline at end of file +{"data": [{"marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "trial counts", "showlegend": false, "x": ["2019-08-10", "2019-08-12", "2019-08-13", "2019-08-14", "2019-08-14", "2019-08-15", "2019-08-16", "2019-08-19", "2019-08-20", "2019-08-21", "2019-08-22", "2019-08-23", "2019-08-26", "2019-08-27", "2019-08-28", "2019-08-29", "2019-08-30", "2019-08-31", "2019-09-10", "2019-09-11", "2019-09-12", "2019-09-13", "2019-09-16", "2019-09-17", "2019-09-18", "2019-09-19", "2019-09-20", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-30", "2019-10-01", "2019-10-04", "2019-10-07", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-11", "2019-11-12", "2019-11-14", "2019-11-15", "2019-11-18", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-11-29", "2019-12-02", "2019-12-05", "2019-12-09", "2019-12-10", "2019-12-12", "2019-12-13", "2020-01-06", "2020-01-07", "2020-01-09", "2020-01-10", "2020-01-13", "2020-01-14", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28", "2020-02-18", "2020-02-19", "2020-02-21", "2020-02-24", "2020-02-25", "2020-02-27", "2020-03-02", "2020-03-04", "2020-03-05"], "y": [196, 140, 223, 55, 289, 141, 340, 224, 252, 269, 640, 521, 807, 869, 743, 683, 799, 759, 462, 717, 972, 349, 659, 1011, 1145, 914, 1053, 1087, 929, 999, 1215, 941, 983, 967, 859, 992, 1043, 1134, 1190, 941, 755, 1028, 959, 985, 1039, 1075, 1174, 57, 974, 1232, 873, 1175, 1041, 1087, 659, 642, 421, 429, 763, 530, 932, 819, 994, 516, 916, 860, 709, 909, 811, 864, 864, 984, 811, 683, 577, 442, 402, 505, 416, 512, 718, 704, 642, 611, 467, 312, 191, 643, 481, 616, 789, 599, 371, 524, 640, 195, 225], "yaxis": "y", "type": "scatter"}, {"marker": {"color": "red", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "markers+lines", "name": "session duration", "showlegend": false, "x": ["2019-08-10", "2019-08-12", "2019-08-13", "2019-08-14", "2019-08-14", "2019-08-15", "2019-08-16", "2019-08-19", "2019-08-20", "2019-08-21", "2019-08-22", "2019-08-23", "2019-08-26", "2019-08-27", "2019-08-28", "2019-08-29", "2019-08-30", "2019-08-31", "2019-09-10", "2019-09-11", "2019-09-12", "2019-09-13", "2019-09-16", "2019-09-17", "2019-09-18", "2019-09-19", "2019-09-20", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-30", "2019-10-01", "2019-10-04", "2019-10-07", "2019-10-08", "2019-10-10", "2019-10-11", "2019-10-14", "2019-10-15", "2019-10-17", "2019-10-18", "2019-10-21", "2019-10-22", "2019-10-24", "2019-10-25", "2019-10-29", "2019-10-29", "2019-10-31", "2019-11-01", "2019-11-04", "2019-11-05", "2019-11-07", "2019-11-11", "2019-11-12", "2019-11-14", "2019-11-15", "2019-11-18", "2019-11-19", "2019-11-21", "2019-11-22", "2019-11-25", "2019-11-26", "2019-11-27", "2019-11-28", "2019-11-29", "2019-12-02", "2019-12-05", "2019-12-09", "2019-12-10", "2019-12-12", "2019-12-13", "2020-01-06", "2020-01-07", "2020-01-09", "2020-01-10", "2020-01-13", "2020-01-14", "2020-01-16", "2020-01-17", "2020-01-20", "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28", "2020-02-18", "2020-02-19", "2020-02-21", "2020-02-24", "2020-02-25", "2020-02-27", "2020-03-02", "2020-03-04", "2020-03-05"], "y": [46, 46, 54, 21, 45, 45, 44, 44, 48, 45, 77, 53, 73, 79, 61, 59, 69, 63, 43, 61, 81, 44, 50, 89, 92, 78, 89, 89, 72, 78, 91, 66, 79, 78, 65, 75, 84, 85, 90, 78, 60, 87, 77, 79, 82, 77, 88, 4, 82, 90, 64, 86, 76, 77, 59, 47, 38, 31, 55, 38, 68, 58, 69, 34, 64, 58, 54, 62, 56, 62, 68, 77, 69, 75, 46, 37, 37, 45, 36, 38, 59, 67, 68, 61, 47, 45, 44, 62, 55, 62, 89, 68, 44, 51, 79, 30, 43], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-07-29", "2019-07-29"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-05", "2019-08-05"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-12", "2019-08-12"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-19", "2019-08-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-08-26", "2019-08-26"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-02", "2019-09-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-09", "2019-09-09"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-16", "2019-09-16"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-23", "2019-09-23"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-09-30", "2019-09-30"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-07", "2019-10-07"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-14", "2019-10-14"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-21", "2019-10-21"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-10-28", "2019-10-28"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-04", "2019-11-04"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-11", "2019-11-11"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-18", "2019-11-18"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-11-25", "2019-11-25"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-02", "2019-12-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-09", "2019-12-09"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-16", "2019-12-16"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-23", "2019-12-23"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-12-30", "2019-12-30"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-06", "2020-01-06"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-13", "2020-01-13"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-20", "2020-01-20"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-01-27", "2020-01-27"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-03", "2020-02-03"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-10", "2020-02-10"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-17", "2020-02-17"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-02-24", "2020-02-24"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2020-03-02", "2020-03-02"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(195, 90, 80, 1)"}, "mode": "lines", "name": "first day got trained 1a", "showlegend": true, "x": ["2019-09-19", "2019-09-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(255, 153, 20, 1)"}, "mode": "lines", "name": "first day got trained 1b", "showlegend": true, "x": ["2019-09-25", "2019-09-25"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "marker": {"color": "rgba(0, 0, 0, 1)"}, "mode": "lines", "name": "mouse became seven months", "showlegend": true, "x": ["2020-01-14", "2020-01-14"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "x", "line": {"color": "rgba(5, 142, 255, 1)", "dash": "dashdot", "width": 2}, "mode": "lines", "name": "good enough for brainwide map", "showlegend": true, "x": ["2019-09-19", "2019-09-19"], "xaxis": "x", "y": [0, 1282], "yaxis": "y", "type": "scatter"}], "layout": {"height": 400, "legend": {"orientation": "v", "x": 1.2, "y": 0.8}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Trial counts and session duration", "x": 0.18, "y": 0.85}, "width": 700, "xaxis": {"range": ["2019-07-25", "2020-03-08"], "showgrid": false, "title": {"text": "Date"}}, "yaxis": {"range": [0, 1282], "title": {"text": "Trial counts"}}, "yaxis2": {"color": "red", "overlaying": "y", "side": "right", "title": {"text": "Session duration (mins)"}}}} diff --git a/notebooks/notebooks_plotting/water_weight.json b/notebooks/notebooks_plotting/water_weight.json index b24f9ea4..3bbc1bb1 100644 --- a/notebooks/notebooks_plotting/water_weight.json +++ b/notebooks/notebooks_plotting/water_weight.json @@ -1 +1 @@ -{"data": [{"marker": {"color": "purple"}, "name": "Water 10% Sucrose", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [0.297, 0.573, 0.867, 0.231, 0.3596, 0.4026, 1.0778, 1.02, 0.9234, 1.0176, 2.0, 2.0, 0.2275, 1.1248, 2.232, 1.8375, 2.5602, null, null, 2.0427, 1.552, 2.5668, 2.04, 2.349, null, null, null, 0.5376, 0.2001, 0.384, 0.2511, null, null, 2.4888, 1.4656, 1.829, 1.818, 1.8299, 0.602, 0.0899, 2.061, 1.3862, 1.736, 1.4553, 0.8476, 1.655, 1.7232, 1.8216, 1.5906, 1.1487, 1.53, 1.4706, 1.5066, 1.7082, 1.4224, 1.2435, 1.1355, 1.143, 0.954, 2.172, 1.776, 2.274, 1.86, 2.034, 1.872, 2.058, 1.017, 0.534, 0.789, 1.0185, 0.894, 0.6135, 0.7545, 0.1425, 0.846, 1.05, 2.289, 1.0425, 1.0995, 1.026, 1.125, 0.387], "yaxis": "y", "type": "bar"}, {"marker": {"color": "rgba(50, 171, 96, 0.9)"}, "name": "Water 15% Sucrose", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, 0.8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "yaxis": "y", "type": "bar"}, {"marker": {"color": "red"}, "name": "Water 2% Citric Acid", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.0, 0.0, 0.0, null, null, null, null, 0.0, 0.0, 0.0, 0.0, null, null, null, 0.0, 0.0, 0.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "yaxis": "y", "type": "bar"}, {"marker": {"color": "rgba(55, 128, 191, 0.7)"}, "name": "Water", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.5, 0.8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.15, 0.5, 0.4, null, 0.15, 0.4, 0.3, 0.85, 0.15, null, null, null, null, null, null, 0.65], "yaxis": "y", "type": "bar"}, {"legendgroup": "weight", "marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "lines+markers", "name": "Weight", "x": ["2019-02-04", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-11", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [20.1, 18.5, 17.1, 15.7, 16.7, 16.6, 16.3, 17.2, 16.6, 15.7, 18.5, 16.4, 16.0, 16.5, 17.1, 15.3, 15.3, 15.24, 15.94, 16.03, 16.49, 18.75, 17.7, 17.7, 17.75, 17.75, 16.2, 15.39, 15.5, 15.5, 15.5, 14.5, 17.0, 16.3, 17.4, 17.6, 19.4, 18.74, 18.3, 18.21, 18.16, 18.42, 17.73, 17.48, 17.68, 17.46, 17.46, 17.79, 16.9, 17.2, 17.7, 17.7, 18.0, 17.9, 17.7, 16.8, 16.4, 17.1, 16.9, 16.7, 16.7, 18.1, 18.3, 17.8, 19.9, 20.4, 19.3, 19.3, 19.4, 18.7, 18.3, 20.6, 18.1, 21.1, 19.9, 19.4, 19.9, 19.6, 20.0, 19.5, 18.9], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-02-04", "2019-02-04"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-11", "2019-02-11"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-18", "2019-02-18"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-25", "2019-02-25"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-04", "2019-03-04"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-11", "2019-03-11"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-18", "2019-03-18"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-25", "2019-03-25"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-01", "2019-04-01"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-08", "2019-04-08"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-15", "2019-04-15"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-22", "2019-04-22"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-29", "2019-04-29"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-06", "2019-05-06"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-13", "2019-05-13"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-20", "2019-05-20"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-27", "2019-05-27"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-03", "2019-06-03"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-10", "2019-06-10"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-17", "2019-06-17"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-24", "2019-06-24"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-01", "2019-07-01"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-08", "2019-07-08"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-15", "2019-07-15"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-22", "2019-07-22"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "restriction", "line": {"color": "red", "width": 1}, "mode": "lines", "name": "Water restriction start", "showlegend": true, "x": ["2019-02-04", "2019-02-04"], "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "restriction", "line": {"color": "darkgreen", "width": 1}, "mode": "lines", "name": "Water restriction end", "showlegend": true, "x": ["2019-04-26", "2019-04-26"], "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "weight_ref", "line": {"color": "orange", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "85% reference weight", "showlegend": true, "x": ["2019-02-04", "2019-04-26"], "y": [15.725, 15.725], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "weight_ref", "line": {"color": "red", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "75% reference weight", "showlegend": true, "x": ["2019-02-04", "2019-04-26"], "y": [13.875, 13.875], "yaxis": "y2", "type": "scatter"}], "layout": {"barmode": "stack", "height": 500, "legend": {"orientation": "v", "x": 1.1, "y": 0.9}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Water intake and weight", "x": 0.3, "y": 0.9}, "width": 1000, "xaxis": {"range": ["2019-02-01", "2019-07-27"], "title": {"text": "Date"}}, "yaxis": {"range": [0, 2.7668000000000004], "title": {"text": "Water intake (mL)"}}, "yaxis2": {"overlaying": "y", "side": "right", "title": {"text": "Weight (g)"}}}} \ No newline at end of file +{"data": [{"marker": {"color": "purple"}, "name": "Water 10% Sucrose", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [0.297, 0.573, 0.867, 0.231, 0.3596, 0.4026, 1.0778, 1.02, 0.9234, 1.0176, 2.0, 2.0, 0.2275, 1.1248, 2.232, 1.8375, 2.5602, null, null, 2.0427, 1.552, 2.5668, 2.04, 2.349, null, null, null, 0.5376, 0.2001, 0.384, 0.2511, null, null, 2.4888, 1.4656, 1.829, 1.818, 1.8299, 0.602, 0.0899, 2.061, 1.3862, 1.736, 1.4553, 0.8476, 1.655, 1.7232, 1.8216, 1.5906, 1.1487, 1.53, 1.4706, 1.5066, 1.7082, 1.4224, 1.2435, 1.1355, 1.143, 0.954, 2.172, 1.776, 2.274, 1.86, 2.034, 1.872, 2.058, 1.017, 0.534, 0.789, 1.0185, 0.894, 0.6135, 0.7545, 0.1425, 0.846, 1.05, 2.289, 1.0425, 1.0995, 1.026, 1.125, 0.387], "yaxis": "y", "type": "bar"}, {"marker": {"color": "rgba(50, 171, 96, 0.9)"}, "name": "Water 15% Sucrose", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, 0.8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "yaxis": "y", "type": "bar"}, {"marker": {"color": "red"}, "name": "Water 2% Citric Acid", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.0, 0.0, 0.0, null, null, null, null, 0.0, 0.0, 0.0, 0.0, null, null, null, 0.0, 0.0, 0.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "yaxis": "y", "type": "bar"}, {"marker": {"color": "rgba(55, 128, 191, 0.7)"}, "name": "Water", "x": ["2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-23", "2019-02-24", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-02", "2019-03-03", "2019-03-04", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-09", "2019-03-10", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.5, 0.8, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0.15, 0.5, 0.4, null, 0.15, 0.4, 0.3, 0.85, 0.15, null, null, null, null, null, null, 0.65], "yaxis": "y", "type": "bar"}, {"legendgroup": "weight", "marker": {"color": "black", "line": {"color": "white", "width": 1}, "size": 6}, "mode": "lines+markers", "name": "Weight", "x": ["2019-02-04", "2019-02-06", "2019-02-07", "2019-02-08", "2019-02-09", "2019-02-10", "2019-02-11", "2019-02-12", "2019-02-13", "2019-02-14", "2019-02-14", "2019-02-15", "2019-02-16", "2019-02-17", "2019-02-18", "2019-02-19", "2019-02-19", "2019-02-20", "2019-02-21", "2019-02-22", "2019-02-25", "2019-02-26", "2019-02-27", "2019-02-28", "2019-03-01", "2019-03-05", "2019-03-06", "2019-03-07", "2019-03-08", "2019-03-11", "2019-03-11", "2019-03-12", "2019-03-13", "2019-03-14", "2019-03-15", "2019-03-18", "2019-03-19", "2019-03-20", "2019-03-21", "2019-03-22", "2019-03-25", "2019-03-26", "2019-03-27", "2019-03-28", "2019-03-29", "2019-04-01", "2019-04-02", "2019-04-03", "2019-04-04", "2019-04-05", "2019-04-08", "2019-04-08", "2019-04-09", "2019-04-10", "2019-04-11", "2019-04-12", "2019-04-15", "2019-04-17", "2019-04-18", "2019-04-19", "2019-04-22", "2019-04-23", "2019-04-24", "2019-04-25", "2019-07-01", "2019-07-02", "2019-07-03", "2019-07-03", "2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-15", "2019-07-16", "2019-07-17", "2019-07-18", "2019-07-19", "2019-07-22", "2019-07-23", "2019-07-24", "2019-07-25"], "y": [20.1, 18.5, 17.1, 15.7, 16.7, 16.6, 16.3, 17.2, 16.6, 15.7, 18.5, 16.4, 16.0, 16.5, 17.1, 15.3, 15.3, 15.24, 15.94, 16.03, 16.49, 18.75, 17.7, 17.7, 17.75, 17.75, 16.2, 15.39, 15.5, 15.5, 15.5, 14.5, 17.0, 16.3, 17.4, 17.6, 19.4, 18.74, 18.3, 18.21, 18.16, 18.42, 17.73, 17.48, 17.68, 17.46, 17.46, 17.79, 16.9, 17.2, 17.7, 17.7, 18.0, 17.9, 17.7, 16.8, 16.4, 17.1, 16.9, 16.7, 16.7, 18.1, 18.3, 17.8, 19.9, 20.4, 19.3, 19.3, 19.4, 18.7, 18.3, 20.6, 18.1, 21.1, 19.9, 19.4, 19.9, 19.6, 20.0, 19.5, 18.9], "yaxis": "y2", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": true, "x": ["2019-02-04", "2019-02-04"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-11", "2019-02-11"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-18", "2019-02-18"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-02-25", "2019-02-25"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-04", "2019-03-04"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-11", "2019-03-11"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-18", "2019-03-18"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-03-25", "2019-03-25"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-01", "2019-04-01"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-08", "2019-04-08"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-15", "2019-04-15"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-22", "2019-04-22"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-04-29", "2019-04-29"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-06", "2019-05-06"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-13", "2019-05-13"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-20", "2019-05-20"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-05-27", "2019-05-27"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-03", "2019-06-03"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-10", "2019-06-10"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-17", "2019-06-17"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-06-24", "2019-06-24"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-01", "2019-07-01"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-08", "2019-07-08"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-15", "2019-07-15"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"hoverinfo": "skip", "legendgroup": "monday", "line": {"color": "gray", "dash": "dot", "width": 0.5}, "mode": "lines", "name": "Mondays", "showlegend": false, "x": ["2019-07-22", "2019-07-22"], "xaxis": "x", "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "restriction", "line": {"color": "red", "width": 1}, "mode": "lines", "name": "Water restriction start", "showlegend": true, "x": ["2019-02-04", "2019-02-04"], "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "restriction", "line": {"color": "darkgreen", "width": 1}, "mode": "lines", "name": "Water restriction end", "showlegend": true, "x": ["2019-04-26", "2019-04-26"], "y": [0, 2.7668000000000004], "yaxis": "y", "type": "scatter"}, {"legendgroup": "weight_ref", "line": {"color": "orange", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "85% reference weight", "showlegend": true, "x": ["2019-02-04", "2019-04-26"], "y": [15.725, 15.725], "yaxis": "y2", "type": "scatter"}, {"legendgroup": "weight_ref", "line": {"color": "red", "dash": "dashdot", "width": 1}, "mode": "lines", "name": "75% reference weight", "showlegend": true, "x": ["2019-02-04", "2019-04-26"], "y": [13.875, 13.875], "yaxis": "y2", "type": "scatter"}], "layout": {"barmode": "stack", "height": 500, "legend": {"orientation": "v", "x": 1.1, "y": 0.9}, "template": {"layout": {"plot_bgcolor": "white"}}, "title": {"text": "Water intake and weight", "x": 0.3, "y": 0.9}, "width": 1000, "xaxis": {"range": ["2019-02-01", "2019-07-27"], "title": {"text": "Date"}}, "yaxis": {"range": [0, 2.7668000000000004], "title": {"text": "Water intake (mL)"}}, "yaxis2": {"overlaying": "y", "side": "right", "title": {"text": "Weight (g)"}}}} diff --git a/notebooks/notebooks_qc/brainwidemap_sessions.txt b/notebooks/notebooks_qc/brainwidemap_sessions.txt index 6530961b..b31a7e95 100644 --- a/notebooks/notebooks_qc/brainwidemap_sessions.txt +++ b/notebooks/notebooks_qc/brainwidemap_sessions.txt @@ -760,4 +760,4 @@ a52f5a1b-7f45-4f2c-89a9-fb199d2a0d63 acec3169-b220-4abe-8365-ee89ffb5cc07 acec3169-b220-4abe-8365-ee89ffb5cc07 5285c561-80da-4563-8694-739da92e5dd0 -5285c561-80da-4563-8694-739da92e5dd0 \ No newline at end of file +5285c561-80da-4563-8694-739da92e5dd0 diff --git a/notebooks/notebooks_tutorial/201904_tutorial/Check_tables.ipynb b/notebooks/notebooks_tutorial/201904_tutorial/Check_tables.ipynb index 876a68bc..5651e38f 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/Check_tables.ipynb +++ b/notebooks/notebooks_tutorial/201904_tutorial/Check_tables.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -39,38 +39,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Allele\n", - "AlleleSequence\n", - "BreedingPair\n", - "Caging\n", - "Death\n", - "GenotypeTest\n", - "Implant\n", - "Line\n", - "LineAllele\n", - "Litter\n", - "LitterSubject\n", - "Sequence\n", - "Source\n", - "Species\n", - "Strain\n", - "Subject\n", - "SubjectLab\n", - "SubjectProject\n", - "SubjectUser\n", - "UserHistory\n", - "Weaning\n", - "Zygosity\n" - ] - } - ], + "outputs": [], "source": [ "list_tables.list_tables(subject)" ] @@ -84,37 +55,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "subject_uuid : uuid \n", - "---\n", - "subject_nickname : varchar(255) # nickname\n", - "sex : enum('M','F','U') # sex\n", - "subject_birth_date=null : date # birth date\n", - "ear_mark=null : varchar(255) # ear mark\n", - "-> [nullable] subject.Line.proj(subject_line=\"line_name\")\n", - "-> [nullable] subject.Source.proj(subject_source=\"source_name\")\n", - "protocol_number : tinyint # protocol number\n", - "subject_description=null : varchar(1024) \n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "'subject_uuid : uuid \\n---\\nsubject_nickname : varchar(255) # nickname\\nsex : enum(\\'M\\',\\'F\\',\\'U\\') # sex\\nsubject_birth_date=null : date # birth date\\near_mark=null : varchar(255) # ear mark\\n-> [nullable] subject.Line.proj(subject_line=\"line_name\")\\n-> [nullable] subject.Source.proj(subject_source=\"source_name\")\\nprotocol_number : tinyint # protocol number\\nsubject_description=null : varchar(1024) \\n'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject.describe()" ] diff --git a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_subject.ipynb b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_subject.ipynb index 9aeed30d..f6f53c9b 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_subject.ipynb +++ b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_subject.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -33,220 +33,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "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", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
0026c82d-39e4-4c6b-acb3-303eb4b24f05IBL_32M2018-04-23NoneNoneCharles River1None
00c60db3-74c3-4ee2-9df9-2c84acf84e92ibl_witten_10F2018-11-13notagNoneJax3None
0124f697-16ce-4f59-b87c-e53fcb3a27ac6867M2018-06-25NoneNoneNone1None
02120449-9b19-4276-a434-513886c2fb19ibl_witten_07F2018-11-13NoneNoneJax3None
034c07c5-69b0-48c7-ab3e-e491e4dbb725IBL_25M2018-04-23NoneNoneCharles River1None
034fd43f-ee35-450b-99ef-25475ce25fdcZM_1092M2018-10-23RLFC57BL/6JNone3None
037d8473-8309-4d7a-96fb-f943be8e8df3ZM_328M2018-08-07LFVglut2-CreNone3None
03956b1f-6836-4c5f-9dea-b57b5292b1776870M2018-06-25NoneNoneNone1None
04514b76-e878-40a5-b6cd-2c6a205bafb3ZM_1088M2018-10-23RFC57BL/6JNone3None
05821271-3125-48dc-855b-4165900622af6814M2018-06-17NoneDat-CreNone3When removed the head plate when the mouse was sached, the skull was mushy
05e97eea-64e2-4e52-a78a-5b78875b4fa3KS004F2018-12-04NoneC57BL/6JNone3None
062cf8a2-96db-4766-9ff3-eb52bf56fff86513M2018-04-20NoneDat-CreNone1None
\n", - "

...

\n", - "

Total: 212

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+\n", - "0026c82d-39e4- IBL_32 M 2018-04-23 None None Charles River 1 None \n", - "00c60db3-74c3- ibl_witten_10 F 2018-11-13 notag None Jax 3 None \n", - "0124f697-16ce- 6867 M 2018-06-25 None None None 1 None \n", - "02120449-9b19- ibl_witten_07 F 2018-11-13 None None Jax 3 None \n", - "034c07c5-69b0- IBL_25 M 2018-04-23 None None Charles River 1 None \n", - "034fd43f-ee35- ZM_1092 M 2018-10-23 RLF C57BL/6J None 3 None \n", - "037d8473-8309- ZM_328 M 2018-08-07 LF Vglut2-Cre None 3 None \n", - "03956b1f-6836- 6870 M 2018-06-25 None None None 1 None \n", - "04514b76-e878- ZM_1088 M 2018-10-23 RF C57BL/6J None 3 None \n", - "05821271-3125- 6814 M 2018-06-17 None Dat-Cre None 3 When removed t\n", - "05e97eea-64e2- KS004 F 2018-12-04 None C57BL/6J None 3 None \n", - "062cf8a2-96db- 6513 M 2018-04-20 None Dat-Cre None 1 None \n", - " ...\n", - " (Total: 212)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject()" ] @@ -260,240 +49,18 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
063bc242-80a7-4356-abfe-bc9d475fa8e1IBL_16M2018-04-23NoneNoneCharles River1None
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+\n", - "063bc242-80a7- IBL_16 M 2018-04-23 None None Charles River 1 None \n", - " (Total: 1)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & 'subject_nickname=\"IBL_16\"'" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
063bc242-80a7-4356-abfe-bc9d475fa8e1IBL_16M2018-04-23NoneNoneCharles River1None
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+\n", - "063bc242-80a7- IBL_16 M 2018-04-23 None None Charles River 1 None \n", - " (Total: 1)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & {'subject_nickname': 'IBL_16'}" ] @@ -507,220 +74,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "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", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
00c60db3-74c3-4ee2-9df9-2c84acf84e92ibl_witten_10F2018-11-13notagNoneJax3None
02120449-9b19-4276-a434-513886c2fb19ibl_witten_07F2018-11-13NoneNoneJax3None
034fd43f-ee35-450b-99ef-25475ce25fdcZM_1092M2018-10-23RLFC57BL/6JNone3None
04514b76-e878-40a5-b6cd-2c6a205bafb3ZM_1088M2018-10-23RFC57BL/6JNone3None
05e97eea-64e2-4e52-a78a-5b78875b4fa3KS004F2018-12-04NoneC57BL/6JNone3None
0936a724-2151-446f-98b2-92c3e9dd36dcCSHL_007F2018-11-27LC57BL/6JJax3None
09857e7a-ce23-4abf-acb7-cbf1988a6f69CSK-IBL-005M2018-12-11left leftC57BL/6JJax3None
0ed938a2-dd07-4742-b282-34674f5474datest_mouse1F2018-11-13NoneVip-IRES-CreJax1None
13bb1517-5bc6-47fa-b2ce-a9194d338efbKS007M2018-12-10NoneC57BL/6JNone3implantation headbar (posterior)+ 3d printed guide; cut back muscles; recovery after 30 min;
13e59361-a2e8-4e2d-8636-ae0961fd941cZM_1093M2018-10-23NoneC57BL/6JNone3None
19614813-ce3b-4b7d-bf52-562d2a304754CSK-IBL-004M2018-12-11right rightC57BL/6JJax3None
19cf7867-e2d2-4a12-93be-9371fe1a293cCSHL_010F2018-11-27left, leftC57BL/6JJax3None
\n", - "

...

\n", - "

Total: 86

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "00c60db3-74c3- ibl_witten_10 F 2018-11-13 notag None Jax 3 None \n", - "02120449-9b19- ibl_witten_07 F 2018-11-13 None None Jax 3 None \n", - "034fd43f-ee35- ZM_1092 M 2018-10-23 RLF C57BL/6J None 3 None \n", - "04514b76-e878- ZM_1088 M 2018-10-23 RF C57BL/6J None 3 None \n", - "05e97eea-64e2- KS004 F 2018-12-04 None C57BL/6J None 3 None \n", - "0936a724-2151- CSHL_007 F 2018-11-27 L C57BL/6J Jax 3 None \n", - "09857e7a-ce23- CSK-IBL-005 M 2018-12-11 left left C57BL/6J Jax 3 None \n", - "0ed938a2-dd07- test_mouse1 F 2018-11-13 None Vip-IRES-Cre Jax 1 None \n", - "13bb1517-5bc6- KS007 M 2018-12-10 None C57BL/6J None 3 implantation h\n", - "13e59361-a2e8- ZM_1093 M 2018-10-23 None C57BL/6J None 3 None \n", - "19614813-ce3b- CSK-IBL-004 M 2018-12-11 right right C57BL/6J Jax 3 None \n", - "19cf7867-e2d2- CSHL_010 F 2018-11-27 left, left C57BL/6J Jax 3 None \n", - " ...\n", - " (Total: 86)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & 'subject_birth_date > \"2018-08-23\"'" ] @@ -734,220 +90,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "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", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
00c60db3-74c3-4ee2-9df9-2c84acf84e92ibl_witten_10F2018-11-13notagNoneJax3None
02120449-9b19-4276-a434-513886c2fb19ibl_witten_07F2018-11-13NoneNoneJax3None
034fd43f-ee35-450b-99ef-25475ce25fdcZM_1092M2018-10-23RLFC57BL/6JNone3None
04514b76-e878-40a5-b6cd-2c6a205bafb3ZM_1088M2018-10-23RFC57BL/6JNone3None
05e97eea-64e2-4e52-a78a-5b78875b4fa3KS004F2018-12-04NoneC57BL/6JNone3None
0936a724-2151-446f-98b2-92c3e9dd36dcCSHL_007F2018-11-27LC57BL/6JJax3None
09857e7a-ce23-4abf-acb7-cbf1988a6f69CSK-IBL-005M2018-12-11left leftC57BL/6JJax3None
0ed938a2-dd07-4742-b282-34674f5474datest_mouse1F2018-11-13NoneVip-IRES-CreJax1None
13bb1517-5bc6-47fa-b2ce-a9194d338efbKS007M2018-12-10NoneC57BL/6JNone3implantation headbar (posterior)+ 3d printed guide; cut back muscles; recovery after 30 min;
13e59361-a2e8-4e2d-8636-ae0961fd941cZM_1093M2018-10-23NoneC57BL/6JNone3None
19614813-ce3b-4b7d-bf52-562d2a304754CSK-IBL-004M2018-12-11right rightC57BL/6JJax3None
19cf7867-e2d2-4a12-93be-9371fe1a293cCSHL_010F2018-11-27left, leftC57BL/6JJax3None
\n", - "

...

\n", - "

Total: 77

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "00c60db3-74c3- ibl_witten_10 F 2018-11-13 notag None Jax 3 None \n", - "02120449-9b19- ibl_witten_07 F 2018-11-13 None None Jax 3 None \n", - "034fd43f-ee35- ZM_1092 M 2018-10-23 RLF C57BL/6J None 3 None \n", - "04514b76-e878- ZM_1088 M 2018-10-23 RF C57BL/6J None 3 None \n", - "05e97eea-64e2- KS004 F 2018-12-04 None C57BL/6J None 3 None \n", - "0936a724-2151- CSHL_007 F 2018-11-27 L C57BL/6J Jax 3 None \n", - "09857e7a-ce23- CSK-IBL-005 M 2018-12-11 left left C57BL/6J Jax 3 None \n", - "0ed938a2-dd07- test_mouse1 F 2018-11-13 None Vip-IRES-Cre Jax 1 None \n", - "13bb1517-5bc6- KS007 M 2018-12-10 None C57BL/6J None 3 implantation h\n", - "13e59361-a2e8- ZM_1093 M 2018-10-23 None C57BL/6J None 3 None \n", - "19614813-ce3b- CSK-IBL-004 M 2018-12-11 right right C57BL/6J Jax 3 None \n", - "19cf7867-e2d2- CSHL_010 F 2018-11-27 left, left C57BL/6J Jax 3 None \n", - " ...\n", - " (Total: 77)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & 'subject_birth_date between \"2018-08-13\" and \"2018-12-31\"'" ] @@ -961,195 +106,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

subject_uuid

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

responsible_user

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

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
cortexlabALK081c68cf5d5-e75a-46f1-8eda-a2db78cf4743F2018-04-13MLPvalb-IRES-CreNonearmin3perfused by HF
cortexlabALK08264c1bdd9-d82f-435f-ac30-fc8032c6e119M2018-07-16TRPvalb-IRES-CreNonearmin3None
cortexlabCR_IBL1ff1d0657-a5fa-4042-be77-b63758c8cb11F2018-10-07NoneSst-IRES-CreCruciform BSUnick3culled by HF
cortexlabCR_IBL29317beff-b3c3-42d2-8c3c-85b2f63b68f3F2018-10-07NoneSst-IRES-CreCruciform BSUnick3culled by HF
cortexlabKS001a4ec3fa0-5415-490a-bf2b-cbf07b017733M2018-10-16TLTetO-GCaMP6sJaxKarolina_Socha3None
cortexlabLEW008faf159e2-1f4e-4477-8079-1a55fe5386a9M2018-05-01TRtetO-G6s x CaMK-tTACruciform BSUlauren3MISSING END OF TAIL
cortexlabLEW0098e181135-7106-43c1-9cda-d854856e6d95M2018-05-01TLtetO-G6s x CaMK-tTACruciform BSUlauren1None
\n", - "

...

\n", - "

8 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn subject_uuid sex subject_birth_ ear_mark subject_line subject_source responsible_us protocol_numbe subject_descri\n", - "+-----------+ +------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "cortexlab ALK081 c68cf5d5-e75a- F 2018-04-13 ML Pvalb-IRES-Cre None armin 3 perfused by HF\n", - "cortexlab ALK082 64c1bdd9-d82f- M 2018-07-16 TR Pvalb-IRES-Cre None armin 3 None \n", - "cortexlab CR_IBL1 ff1d0657-a5fa- F 2018-10-07 None Sst-IRES-Cre Cruciform BSU nick 3 culled by HF \n", - "cortexlab CR_IBL2 9317beff-b3c3- F 2018-10-07 None Sst-IRES-Cre Cruciform BSU nick 3 culled by HF \n", - "cortexlab KS001 a4ec3fa0-5415- M 2018-10-16 TL TetO-GCaMP6s Jax Karolina_Socha 3 None \n", - "cortexlab LEW008 faf159e2-1f4e- M 2018-05-01 TR tetO-G6s x CaM Cruciform BSU lauren 3 MISSING END OF\n", - "cortexlab LEW009 8e181135-7106- M 2018-05-01 TL tetO-G6s x CaM Cruciform BSU lauren 1 None \n", - " ...\n", - " (8 tuples)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & subject.GenotypeTest" ] @@ -1163,195 +122,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

subject_uuid

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

responsible_user

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

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
angelakilabIBL-T1cff66dc1-765e-4e04-abef-92de05bf4f19M2018-11-271NoneNonejeanpaul1None
angelakilabIBL-T2f498ba9d-d983-43fd-b8c1-b22ec919018eF2018-11-272NoneNonejeanpaul1None
angelakilabIBL-T395241a9c-481b-443c-83a7-462165f729ecF2018-11-273NoneNonejeanpaul1None
angelakilabIBL-T434ff50d4-42cf-41f7-8c38-ab631ca84d74F2018-11-274NoneNonejeanpaul1None
churchlandlabCSHL_001ecba4914-30c3-4a0b-9d65-1ef5d80ca5f2M2018-11-20right earNoneNonechrisk3None
churchlandlabCSHL_0024c9577b3-bdd5-4a15-b15b-5bc24a4439d3M2018-11-20left earNoneNonechrisk3None
churchlandlabCSHL_0036e1e46eb-a742-4385-926c-db14a8f9347fM2018-11-20LRC57BL/6JJaxanneu3None
\n", - "

...

\n", - "

205 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn subject_uuid sex subject_birth_ ear_mark subject_line subject_source responsible_us protocol_numbe subject_descri\n", - "+------------+ +------------+ +------------+ +-----+ +------------+ +-----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "angelakilab IBL-T1 cff66dc1-765e- M 2018-11-27 1 None None jeanpaul 1 None \n", - "angelakilab IBL-T2 f498ba9d-d983- F 2018-11-27 2 None None jeanpaul 1 None \n", - "angelakilab IBL-T3 95241a9c-481b- F 2018-11-27 3 None None jeanpaul 1 None \n", - "angelakilab IBL-T4 34ff50d4-42cf- F 2018-11-27 4 None None jeanpaul 1 None \n", - "churchlandlab CSHL_001 ecba4914-30c3- M 2018-11-20 right ear None None chrisk 3 None \n", - "churchlandlab CSHL_002 4c9577b3-bdd5- M 2018-11-20 left ear None None chrisk 3 None \n", - "churchlandlab CSHL_003 6e1e46eb-a742- M 2018-11-20 LR C57BL/6J Jax anneu 3 None \n", - " ...\n", - " (205 tuples)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject - subject.GenotypeTest" ] @@ -1365,195 +138,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

subject_uuid

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

responsible_user

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

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
angelakilabIBL-T1cff66dc1-765e-4e04-abef-92de05bf4f19M2018-11-271NoneNonejeanpaul1None
angelakilabIBL-T2f498ba9d-d983-43fd-b8c1-b22ec919018eF2018-11-272NoneNonejeanpaul1None
angelakilabIBL-T395241a9c-481b-443c-83a7-462165f729ecF2018-11-273NoneNonejeanpaul1None
angelakilabIBL-T434ff50d4-42cf-41f7-8c38-ab631ca84d74F2018-11-274NoneNonejeanpaul1None
churchlandlabCSHL_001ecba4914-30c3-4a0b-9d65-1ef5d80ca5f2M2018-11-20right earNoneNonechrisk3None
churchlandlabCSHL_0024c9577b3-bdd5-4a15-b15b-5bc24a4439d3M2018-11-20left earNoneNonechrisk3None
churchlandlabCSHL_0036e1e46eb-a742-4385-926c-db14a8f9347fM2018-11-20LRC57BL/6JJaxanneu3None
\n", - "

...

\n", - "

126 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn subject_uuid sex subject_birth_ ear_mark subject_line subject_source responsible_us protocol_numbe subject_descri\n", - "+------------+ +------------+ +------------+ +-----+ +------------+ +-----------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "angelakilab IBL-T1 cff66dc1-765e- M 2018-11-27 1 None None jeanpaul 1 None \n", - "angelakilab IBL-T2 f498ba9d-d983- F 2018-11-27 2 None None jeanpaul 1 None \n", - "angelakilab IBL-T3 95241a9c-481b- F 2018-11-27 3 None None jeanpaul 1 None \n", - "angelakilab IBL-T4 34ff50d4-42cf- F 2018-11-27 4 None None jeanpaul 1 None \n", - "churchlandlab CSHL_001 ecba4914-30c3- M 2018-11-20 right ear None None chrisk 3 None \n", - "churchlandlab CSHL_002 4c9577b3-bdd5- M 2018-11-20 left ear None None chrisk 3 None \n", - "churchlandlab CSHL_003 6e1e46eb-a742- M 2018-11-20 LR C57BL/6J Jax anneu 3 None \n", - " ...\n", - " (126 tuples)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.Subject & action.WaterRestriction" ] @@ -1567,124 +154,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
217d49ae-ada9-48be-a77e-9704c9e57855angelakilabNYU-01M2018-12-181NoneNone1None
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject_uuid lab_name subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+\n", - "217d49ae-ada9- angelakilab NYU-01 M 2018-12-18 1 None None 1 None \n", - " (Total: 1)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subject.SubjectLab * subject.Subject & 'subject_nickname=\"NYU-01\"'" ] diff --git a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_training_summary.ipynb b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_training_summary.ipynb index 7c5276c9..0db76d07 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_training_summary.ipynb +++ b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_training_summary.ipynb @@ -9,17 +9,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting zoe.ashwood@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "from ibl_pipeline import subject, action, acquisition, behavior\n", @@ -36,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -46,235 +38,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "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", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
0936a724-2151-446f-98b2-92c3e9dd36dcchurchlandlabCSHL_007F2018-11-27LC57BL/6JJax3None
1208c089-8b8e-4a87-98f0-05a68fb18370churchlandlabIBL_13M2018-04-23NoneNoneCharles River1None
19cf7867-e2d2-4a12-93be-9371fe1a293cchurchlandlabCSHL_010F2018-11-27left, leftC57BL/6JJax3None
3e97e1d3-2a0f-44e5-b63f-36196d78457achurchlandlabIBL_34M2018-05-24NoneNoneCharles River1None
3f854f88-7879-4368-9e0d-41edea3bfab9churchlandlabIBL_11M2018-04-02NoneNoneCharles River1None
4c9577b3-bdd5-4a15-b15b-5bc24a4439d3churchlandlabCSHL_002M2018-11-20left earC57BL/6JJax3None
4f091667-90b9-4469-88f4-542c1ec07891churchlandlabCSHL_008F2018-11-27left rightC57BL/6JJax3None
52a800fc-cbbc-45e9-97b1-ad6f6166e9afchurchlandlabIBL_1M2018-04-02NoneNoneCharles River1None
55381f61-4e47-4baa-beb9-70068c0ad62cchurchlandlabIBL_46M2018-07-16NoneNoneCharles River3None
5848e7f4-447d-42eb-9676-c914740df807churchlandlabCSHL_006F2018-11-27RC57BL/6JJax3None
6e1e46eb-a742-4385-926c-db14a8f9347fchurchlandlabCSHL_003M2018-11-20LRC57BL/6JJax3None
7c751b49-55a6-4eac-9bdb-367faf2a18eechurchlandlabIBL_10M2018-04-02NoneNoneCharles River1None
\n", - "

...

\n", - "

Total: 15

\n", - " " - ], - "text/plain": [ - "*subject_uuid lab_name subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +------------+ +-----+ +------------+ +------------+ +------------+ +------------+ +------------+ +------------+\n", - "0936a724-2151- churchlandlab CSHL_007 F 2018-11-27 L C57BL/6J Jax 3 None \n", - "1208c089-8b8e- churchlandlab IBL_13 M 2018-04-23 None None Charles River 1 None \n", - "19cf7867-e2d2- churchlandlab CSHL_010 F 2018-11-27 left, left C57BL/6J Jax 3 None \n", - "3e97e1d3-2a0f- churchlandlab IBL_34 M 2018-05-24 None None Charles River 1 None \n", - "3f854f88-7879- churchlandlab IBL_11 M 2018-04-02 None None Charles River 1 None \n", - "4c9577b3-bdd5- churchlandlab CSHL_002 M 2018-11-20 left ear C57BL/6J Jax 3 None \n", - "4f091667-90b9- churchlandlab CSHL_008 F 2018-11-27 left right C57BL/6J Jax 3 None \n", - "52a800fc-cbbc- churchlandlab IBL_1 M 2018-04-02 None None Charles River 1 None \n", - "55381f61-4e47- churchlandlab IBL_46 M 2018-07-16 None None Charles River 3 None \n", - "5848e7f4-447d- churchlandlab CSHL_006 F 2018-11-27 R C57BL/6J Jax 3 None \n", - "6e1e46eb-a742- churchlandlab CSHL_003 M 2018-11-20 LR C57BL/6J Jax 3 None \n", - "7c751b49-55a6- churchlandlab IBL_10 M 2018-04-02 None None Charles River 1 None \n", - " ...\n", - " (Total: 15)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subjects" ] @@ -298,130 +64,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "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", - "

subject_uuid

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

task_protocol

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

session_start_time

\n", - " calculated attribute\n", - "
0936a724-2151-446f-98b2-92c3e9dd36dc_iblrig_tasks_habituationChoiceWorld3.7.42019-05-28 16:08:38
1208c089-8b8e-4a87-98f0-05a68fb18370_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 12:35:50
19cf7867-e2d2-4a12-93be-9371fe1a293c_iblrig_tasks_habituationChoiceWorld3.7.42019-05-28 17:53:00
3e97e1d3-2a0f-44e5-b63f-36196d78457a_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 15:33:10
3f854f88-7879-4368-9e0d-41edea3bfab9_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 11:48:49
4c9577b3-bdd5-4a15-b15b-5bc24a4439d3_iblrig_tasks_habituationChoiceWorld3.7.32019-05-28 14:10:33
4f091667-90b9-4469-88f4-542c1ec07891_iblrig_tasks_habituationChoiceWorld3.7.42019-05-28 16:59:19
52a800fc-cbbc-45e9-97b1-ad6f6166e9af_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 14:14:25
55381f61-4e47-4baa-beb9-70068c0ad62c_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 16:51:04
5848e7f4-447d-42eb-9676-c914740df807_iblrig_tasks_habituationChoiceWorld3.7.42019-05-28 15:06:10
6e1e46eb-a742-4385-926c-db14a8f9347f_iblrig_tasks_habituationChoiceWorld3.7.32019-05-28 15:13:05
7c751b49-55a6-4eac-9bdb-367faf2a18ee_iblrig_tasks_trainingChoiceWorld3.5.22019-05-28 13:24:11
\n", - "

...

\n", - "

Total: 15

\n", - " " - ], - "text/plain": [ - "*subject_uuid task_protocol session_start_\n", - "+------------+ +------------+ +------------+\n", - "0936a724-2151- _iblrig_tasks_ 2019-05-28 16:\n", - "1208c089-8b8e- _iblrig_tasks_ 2019-05-28 12:\n", - "19cf7867-e2d2- _iblrig_tasks_ 2019-05-28 17:\n", - "3e97e1d3-2a0f- _iblrig_tasks_ 2019-05-28 15:\n", - "3f854f88-7879- _iblrig_tasks_ 2019-05-28 11:\n", - "4c9577b3-bdd5- _iblrig_tasks_ 2019-05-28 14:\n", - "4f091667-90b9- _iblrig_tasks_ 2019-05-28 16:\n", - "52a800fc-cbbc- _iblrig_tasks_ 2019-05-28 14:\n", - "55381f61-4e47- _iblrig_tasks_ 2019-05-28 16:\n", - "5848e7f4-447d- _iblrig_tasks_ 2019-05-28 15:\n", - "6e1e46eb-a742- _iblrig_tasks_ 2019-05-28 15:\n", - "7c751b49-55a6- _iblrig_tasks_ 2019-05-28 13:\n", - " ...\n", - " (Total: 15)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "last_sessions = subjects.aggr(acquisition.Session & 'task_protocol!=\"NULL\"', \n", " 'task_protocol', session_start_time='max(session_start_time)')\n", @@ -437,136 +82,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "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", - "

subject_uuid

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

session_start_time

\n", - " start time\n", - "
\n", - "

task_protocol

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

training_status

\n", - " \n", - "
0936a724-2151-446f-98b2-92c3e9dd36dc2019-05-28 16:08:38_iblrig_tasks_habituationChoiceWorld3.7.4ready for ephys
1208c089-8b8e-4a87-98f0-05a68fb183702019-05-28 12:35:50_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
19cf7867-e2d2-4a12-93be-9371fe1a293c2019-05-28 17:53:00_iblrig_tasks_habituationChoiceWorld3.7.4ready for ephys
3e97e1d3-2a0f-44e5-b63f-36196d78457a2019-05-28 15:33:10_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
3f854f88-7879-4368-9e0d-41edea3bfab92019-05-28 11:48:49_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
4f091667-90b9-4469-88f4-542c1ec078912019-05-28 16:59:19_iblrig_tasks_habituationChoiceWorld3.7.4ready for ephys
52a800fc-cbbc-45e9-97b1-ad6f6166e9af2019-05-28 14:14:25_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
55381f61-4e47-4baa-beb9-70068c0ad62c2019-05-28 16:51:04_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
5848e7f4-447d-42eb-9676-c914740df8072019-05-28 15:06:10_iblrig_tasks_habituationChoiceWorld3.7.4over40days
7c751b49-55a6-4eac-9bdb-367faf2a18ee2019-05-28 13:24:11_iblrig_tasks_trainingChoiceWorld3.5.2ready for ephys
\n", - " \n", - "

Total: 10

\n", - " " - ], - "text/plain": [ - "*subject_uuid *session_start task_protocol training_statu\n", - "+------------+ +------------+ +------------+ +------------+\n", - "0936a724-2151- 2019-05-28 16: _iblrig_tasks_ ready for ephy\n", - "1208c089-8b8e- 2019-05-28 12: _iblrig_tasks_ ready for ephy\n", - "19cf7867-e2d2- 2019-05-28 17: _iblrig_tasks_ ready for ephy\n", - "3e97e1d3-2a0f- 2019-05-28 15: _iblrig_tasks_ ready for ephy\n", - "3f854f88-7879- 2019-05-28 11: _iblrig_tasks_ ready for ephy\n", - "4f091667-90b9- 2019-05-28 16: _iblrig_tasks_ ready for ephy\n", - "52a800fc-cbbc- 2019-05-28 14: _iblrig_tasks_ ready for ephy\n", - "55381f61-4e47- 2019-05-28 16: _iblrig_tasks_ ready for ephy\n", - "5848e7f4-447d- 2019-05-28 15: _iblrig_tasks_ over40days \n", - "7c751b49-55a6- 2019-05-28 13: _iblrig_tasks_ ready for ephy\n", - " (Total: 10)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "last_sessions * behavior_analyses.SessionTrainingStatus" ] diff --git a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_water_info.ipynb b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_water_info.ipynb index 7cc34141..98b21f26 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/Query_example_water_info.ipynb +++ b/notebooks/notebooks_tutorial/201904_tutorial/Query_example_water_info.ipynb @@ -2,17 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "from ibl_pipeline import reference, subject, action, acquisition, data, behavior\n", @@ -28,120 +20,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "

subject_uuid

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

subject_nickname

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

sex

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

subject_birth_date

\n", - " birth date\n", - "
\n", - "

ear_mark

\n", - " ear mark\n", - "
\n", - "

subject_line

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

subject_source

\n", - " name of source\n", - "
\n", - "

protocol_number

\n", - " protocol number\n", - "
\n", - "

subject_description

\n", - " \n", - "
cff66dc1-765e-4e04-abef-92de05bf4f19IBL-T1M2018-11-271NoneNone1None
\n", - " \n", - "

Total: 1

\n", - " " - ], - "text/plain": [ - "*subject_uuid subject_nickna sex subject_birth_ ear_mark subject_line subject_source protocol_numbe subject_descri\n", - "+------------+ +------------+ +-----+ +------------+ +----------+ +------------+ +------------+ +------------+ +------------+\n", - "cff66dc1-765e- IBL-T1 M 2018-11-27 1 None None 1 None \n", - " (Total: 1)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subj = subject.Subject & 'subject_nickname=\"IBL-T1\"'\n", "subj" @@ -149,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -167,34 +48,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([737091., 737098., 737105., 737112., 737119., 737126., 737133.,\n", - " 737140., 737147., 737150., 737157.]),\n", - " )" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(weighing_date, weight, 'o-')\n", "plt.xticks(rotation='vertical')" @@ -202,130 +58,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "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", - "

subject_uuid

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

weighing_time

\n", - " date time\n", - "
\n", - "

weighing_date

\n", - " calculated attribute\n", - "
3e97e1d3-2a0f-44e5-b63f-36196d78457a2018-10-29 16:28:472018-10-29
3e97e1d3-2a0f-44e5-b63f-36196d78457a2018-10-29 16:28:482018-10-29
55381f61-4e47-4baa-beb9-70068c0ad62c2018-11-01 20:49:492018-11-01
64c1bdd9-d82f-435f-ac30-fc8032c6e1192018-10-01 16:00:172018-10-01
64c1bdd9-d82f-435f-ac30-fc8032c6e1192018-11-01 10:38:422018-11-01
8e181135-7106-43c1-9cda-d854856e6d952018-09-03 16:58:212018-09-03
9540b01b-fa1e-4d1e-872b-0b4ccaae38882018-09-03 16:51:092018-09-03
a4ec3fa0-5415-490a-bf2b-cbf07b0177332018-12-14 15:39:362018-12-14
a4ec3fa0-5415-490a-bf2b-cbf07b0177332018-12-19 15:26:142018-12-19
c68cf5d5-e75a-46f1-8eda-a2db78cf47432018-09-03 17:06:092018-09-03
c68cf5d5-e75a-46f1-8eda-a2db78cf47432018-11-01 10:44:012018-11-01
c68cf5d5-e75a-46f1-8eda-a2db78cf47432018-11-15 16:31:042018-11-15
\n", - "

...

\n", - "

Total: 8420

\n", - " " - ], - "text/plain": [ - "*subject_uuid *weighing_time weighing_date \n", - "+------------+ +------------+ +------------+\n", - "3e97e1d3-2a0f- 2018-10-29 16: 2018-10-29 \n", - "3e97e1d3-2a0f- 2018-10-29 16: 2018-10-29 \n", - "55381f61-4e47- 2018-11-01 20: 2018-11-01 \n", - "64c1bdd9-d82f- 2018-10-01 16: 2018-10-01 \n", - "64c1bdd9-d82f- 2018-11-01 10: 2018-11-01 \n", - "8e181135-7106- 2018-09-03 16: 2018-09-03 \n", - "9540b01b-fa1e- 2018-09-03 16: 2018-09-03 \n", - "a4ec3fa0-5415- 2018-12-14 15: 2018-12-14 \n", - "a4ec3fa0-5415- 2018-12-19 15: 2018-12-19 \n", - "c68cf5d5-e75a- 2018-09-03 17: 2018-09-03 \n", - "c68cf5d5-e75a- 2018-11-01 10: 2018-11-01 \n", - "c68cf5d5-e75a- 2018-11-15 16: 2018-11-15 \n", - " ...\n", - " (Total: 8420)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "weighing_with_date = action.Weighing.proj(weighing_date='DATE(weighing_time)')\n", "weighing_with_date" @@ -333,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -342,34 +77,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([737091., 737098., 737105., 737112., 737119., 737126., 737133.,\n", - " 737140., 737147., 737150., 737157.]),\n", - "
)" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.plot(weighing_date, weight, 'o-')\n", "plt.xticks(rotation='vertical')" @@ -377,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -386,20 +96,9 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "21.9" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "weight = (action.Weighing & {'weighing_time': last_time}).fetch1('weight')\n", "weight" @@ -422,135 +121,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

water_admin_dow

\n", - " calculated attribute\n", - "
churchlandlabCSHL_0012019-02-20 18:00:00Hydrogel4
churchlandlabCSHL_0012019-02-25 17:36:00Hydrogel2
churchlandlabCSHL_0012019-02-26 17:12:00Hydrogel3
churchlandlabCSHL_0022019-02-20 18:00:00Hydrogel4
churchlandlabCSHL_0032019-02-20 18:00:00Hydrogel4
churchlandlabCSHL_0032019-02-25 17:49:00Hydrogel2
churchlandlabCSHL_0032019-02-26 18:08:00Hydrogel3
\n", - "

...

\n", - "

6770 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name water_admin_do\n", - "+------------+ +------------+ +------------+ +------------+ +------------+\n", - "churchlandlab CSHL_001 2019-02-20 18: Hydrogel 4 \n", - "churchlandlab CSHL_001 2019-02-25 17: Hydrogel 2 \n", - "churchlandlab CSHL_001 2019-02-26 17: Hydrogel 3 \n", - "churchlandlab CSHL_002 2019-02-20 18: Hydrogel 4 \n", - "churchlandlab CSHL_003 2019-02-20 18: Hydrogel 4 \n", - "churchlandlab CSHL_003 2019-02-25 17: Hydrogel 2 \n", - "churchlandlab CSHL_003 2019-02-26 18: Hydrogel 3 \n", - " ...\n", - " (6770 tuples)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "water_admin = action.WaterAdministration.proj(\n", " 'watertype_name', water_admin_dow='dayofweek(administration_time)')\n", @@ -566,135 +139,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

water_admin_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-08 11:22:31Water 10% Sucrose6
angelakilabIBL-T12019-02-09 11:19:01Water 10% Sucrose7
angelakilabIBL-T12019-02-15 11:34:33Water 10% Sucrose6
angelakilabIBL-T12019-02-16 22:54:23Water 10% Sucrose7
angelakilabIBL-T12019-02-22 11:15:07Water 10% Sucrose6
angelakilabIBL-T12019-02-22 20:00:39Water 2% Citric Acid6
angelakilabIBL-T12019-02-23 20:00:54Water 2% Citric Acid7
\n", - "

...

\n", - "

14 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name water_admin_do\n", - "+------------+ +------------+ +------------+ +------------+ +------------+\n", - "angelakilab IBL-T1 2019-02-08 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-09 11: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-15 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-16 22: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-22 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-22 20: Water 2% Citri 6 \n", - "angelakilab IBL-T1 2019-02-23 20: Water 2% Citri 7 \n", - " ...\n", - " (14 tuples)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "water_admin_weekend = water_admin & 'administration_time>\"2018-08-31\"' & \\\n", " 'water_admin_dow in (6,7)' & subj\n", @@ -710,135 +157,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

water_admin_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-08 11:22:31Water 10% Sucrose6
angelakilabIBL-T12019-02-09 11:19:01Water 10% Sucrose7
angelakilabIBL-T12019-02-15 11:34:33Water 10% Sucrose6
angelakilabIBL-T12019-02-16 22:54:23Water 10% Sucrose7
angelakilabIBL-T12019-02-22 11:15:07Water 10% Sucrose6
angelakilabIBL-T12019-02-22 20:00:39Water 2% Citric Acid6
angelakilabIBL-T12019-02-23 20:00:54Water 2% Citric Acid7
\n", - "

...

\n", - "

14 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name water_admin_do\n", - "+------------+ +------------+ +------------+ +------------+ +------------+\n", - "angelakilab IBL-T1 2019-02-08 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-09 11: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-15 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-16 22: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-22 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-22 20: Water 2% Citri 6 \n", - "angelakilab IBL-T1 2019-02-23 20: Water 2% Citri 7 \n", - " ...\n", - " (14 tuples)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subj.proj('subject_nickname') * water_admin_weekend" ] @@ -852,135 +173,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-08 11:22:31Water 10% Sucrose6
angelakilabIBL-T12019-02-09 11:19:01Water 10% Sucrose7
angelakilabIBL-T12019-02-15 11:34:33Water 10% Sucrose6
angelakilabIBL-T12019-02-16 22:54:23Water 10% Sucrose7
angelakilabIBL-T12019-02-22 11:15:07Water 10% Sucrose6
angelakilabIBL-T12019-02-22 20:00:39Water 2% Citric Acid6
angelakilabIBL-T12019-02-23 20:00:54Water 2% Citric Acid7
\n", - "

...

\n", - "

14 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name dow \n", - "+------------+ +------------+ +------------+ +------------+ +-----+\n", - "angelakilab IBL-T1 2019-02-08 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-09 11: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-15 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-16 22: Water 10% Sucr 7 \n", - "angelakilab IBL-T1 2019-02-22 11: Water 10% Sucr 6 \n", - "angelakilab IBL-T1 2019-02-22 20: Water 2% Citri 6 \n", - "angelakilab IBL-T1 2019-02-23 20: Water 2% Citri 7 \n", - " ...\n", - " (14 tuples)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(subject.Subject & 'subject_nickname=\"IBL-T1\"').proj('subject_nickname') * (action.WaterAdministration.proj('watertype_name', dow='dayofweek(administration_time)') & 'administration_time>\"2018-08-31\"' & 'dow in (6,7)')" ] @@ -1001,135 +196,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

water_admin_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-07 11:32:43Water 10% Sucrose5
angelakilabIBL-T12019-02-10 11:01:28Water 10% Sucrose1
angelakilabIBL-T12019-02-11 10:10:47Water 10% Sucrose2
angelakilabIBL-T12019-02-14 10:12:29Water 10% Sucrose5
angelakilabIBL-T12019-02-17 22:55:40Water 15% Sucrose1
angelakilabIBL-T12019-02-18 09:21:18Water 10% Sucrose2
angelakilabIBL-T12019-02-18 22:44:13Water 15% Sucrose2
\n", - "

...

\n", - "

18 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name water_admin_do\n", - "+------------+ +------------+ +------------+ +------------+ +------------+\n", - "angelakilab IBL-T1 2019-02-07 11: Water 10% Sucr 5 \n", - "angelakilab IBL-T1 2019-02-10 11: Water 10% Sucr 1 \n", - "angelakilab IBL-T1 2019-02-11 10: Water 10% Sucr 2 \n", - "angelakilab IBL-T1 2019-02-14 10: Water 10% Sucr 5 \n", - "angelakilab IBL-T1 2019-02-17 22: Water 15% Sucr 1 \n", - "angelakilab IBL-T1 2019-02-18 09: Water 10% Sucr 2 \n", - "angelakilab IBL-T1 2019-02-18 22: Water 15% Sucr 2 \n", - " ...\n", - " (18 tuples)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subj.proj('subject_nickname') * \\\n", " (action.WaterAdministration.proj('watertype_name', water_admin_dow='dayofweek(administration_time)') & \\\n", @@ -1159,135 +228,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

weighing_time

\n", - " date time\n", - "
\n", - "

weight

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

wt_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-04 17:09:3424.22
angelakilabIBL-T12019-02-05 17:11:0622.13
angelakilabIBL-T12019-02-06 10:26:4722.14
angelakilabIBL-T12019-02-07 10:53:2220.05
angelakilabIBL-T12019-02-08 10:41:3619.56
angelakilabIBL-T12019-02-09 09:56:2119.37
angelakilabIBL-T12019-02-10 09:45:0118.31
\n", - "

...

\n", - "

7554 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *weighing_time weight wt_dow \n", - "+------------+ +------------+ +------------+ +--------+ +--------+\n", - "angelakilab IBL-T1 2019-02-04 17: 24.2 2 \n", - "angelakilab IBL-T1 2019-02-05 17: 22.1 3 \n", - "angelakilab IBL-T1 2019-02-06 10: 22.1 4 \n", - "angelakilab IBL-T1 2019-02-07 10: 20.0 5 \n", - "angelakilab IBL-T1 2019-02-08 10: 19.5 6 \n", - "angelakilab IBL-T1 2019-02-09 09: 19.3 7 \n", - "angelakilab IBL-T1 2019-02-10 09: 18.3 1 \n", - " ...\n", - " (7554 tuples)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "weight = action.Weighing.proj('weight', wt_dow='dayofweek(weighing_time)')\n", "weight" @@ -1302,135 +245,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

weighing_time

\n", - " date time\n", - "
\n", - "

weight

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

wt_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-04 17:09:3424.22
angelakilabIBL-T12019-02-07 10:53:2220.05
angelakilabIBL-T12019-02-10 09:45:0118.31
angelakilabIBL-T12019-02-11 09:17:0018.42
angelakilabIBL-T12019-02-14 08:46:2617.75
angelakilabIBL-T12019-02-17 08:28:2319.41
angelakilabIBL-T12019-02-18 22:46:4019.22
\n", - "

...

\n", - "

13 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *weighing_time weight wt_dow \n", - "+------------+ +------------+ +------------+ +--------+ +--------+\n", - "angelakilab IBL-T1 2019-02-04 17: 24.2 2 \n", - "angelakilab IBL-T1 2019-02-07 10: 20.0 5 \n", - "angelakilab IBL-T1 2019-02-10 09: 18.3 1 \n", - "angelakilab IBL-T1 2019-02-11 09: 18.4 2 \n", - "angelakilab IBL-T1 2019-02-14 08: 17.7 5 \n", - "angelakilab IBL-T1 2019-02-17 08: 19.4 1 \n", - "angelakilab IBL-T1 2019-02-18 22: 19.2 2 \n", - " ...\n", - " (13 tuples)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "weight_interest = weight & subj & 'weighing_time>\"2018-08-31\"' & 'wt_dow in (1, 2, 5)'\n", "weight_interest" @@ -1445,135 +262,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

weighing_time

\n", - " date time\n", - "
\n", - "

weight

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

wt_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-04 17:09:3424.22
angelakilabIBL-T12019-02-07 10:53:2220.05
angelakilabIBL-T12019-02-10 09:45:0118.31
angelakilabIBL-T12019-02-11 09:17:0018.42
angelakilabIBL-T12019-02-14 08:46:2617.75
angelakilabIBL-T12019-02-17 08:28:2319.41
angelakilabIBL-T12019-02-18 22:46:4019.22
\n", - "

...

\n", - "

13 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *weighing_time weight wt_dow \n", - "+------------+ +------------+ +------------+ +--------+ +--------+\n", - "angelakilab IBL-T1 2019-02-04 17: 24.2 2 \n", - "angelakilab IBL-T1 2019-02-07 10: 20.0 5 \n", - "angelakilab IBL-T1 2019-02-10 09: 18.3 1 \n", - "angelakilab IBL-T1 2019-02-11 09: 18.4 2 \n", - "angelakilab IBL-T1 2019-02-14 08: 17.7 5 \n", - "angelakilab IBL-T1 2019-02-17 08: 19.4 1 \n", - "angelakilab IBL-T1 2019-02-18 22: 19.2 2 \n", - " ...\n", - " (13 tuples)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "subj.proj('subject_nickname') * weight_interest" ] @@ -1587,135 +278,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

weighing_time

\n", - " date time\n", - "
\n", - "

weight

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

wt_dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-04 17:09:3424.22
angelakilabIBL-T12019-02-07 10:53:2220.05
angelakilabIBL-T12019-02-10 09:45:0118.31
angelakilabIBL-T12019-02-11 09:17:0018.42
angelakilabIBL-T12019-02-14 08:46:2617.75
angelakilabIBL-T12019-02-17 08:28:2319.41
angelakilabIBL-T12019-02-18 22:46:4019.22
\n", - "

...

\n", - "

13 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *weighing_time weight wt_dow \n", - "+------------+ +------------+ +------------+ +--------+ +--------+\n", - "angelakilab IBL-T1 2019-02-04 17: 24.2 2 \n", - "angelakilab IBL-T1 2019-02-07 10: 20.0 5 \n", - "angelakilab IBL-T1 2019-02-10 09: 18.3 1 \n", - "angelakilab IBL-T1 2019-02-11 09: 18.4 2 \n", - "angelakilab IBL-T1 2019-02-14 08: 17.7 5 \n", - "angelakilab IBL-T1 2019-02-17 08: 19.4 1 \n", - "angelakilab IBL-T1 2019-02-18 22: 19.2 2 \n", - " ...\n", - " (13 tuples)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(subject.Subject & 'subject_nickname=\"IBL-T1\"').proj('subject_nickname') * (action.Weighing.proj('weight', wt_dow='dayofweek(weighing_time)') & 'weighing_time>\"2018-08-31\"' & 'wt_dow in (1, 2, 5)')" ] @@ -1729,145 +294,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "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", - "

lab_name

\n", - " name of lab\n", - "
\n", - "

subject_nickname

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

administration_time

\n", - " date time\n", - "
\n", - "

watertype_name

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

water_intake

\n", - " water administered\n", - "
\n", - "

dow

\n", - " calculated attribute\n", - "
angelakilabIBL-T12019-02-07 11:32:43Water 10% Sucrose0.5615
angelakilabIBL-T12019-02-10 11:01:28Water 10% Sucrose0.7441
angelakilabIBL-T12019-02-11 10:10:47Water 10% Sucrose0.7322
angelakilabIBL-T12019-02-14 10:12:29Water 10% Sucrose2.39835
angelakilabIBL-T12019-02-17 22:55:40Water 15% Sucrose2.01
angelakilabIBL-T12019-02-18 09:21:18Water 10% Sucrose0.67772
angelakilabIBL-T12019-02-18 22:44:13Water 15% Sucrose1.02
\n", - "

...

\n", - "

18 tuples

\n", - " " - ], - "text/plain": [ - "*lab_name *subject_nickn *administratio watertype_name water_intake dow \n", - "+------------+ +------------+ +------------+ +------------+ +------------+ +-----+\n", - "angelakilab IBL-T1 2019-02-07 11: Water 10% Sucr 0.561 5 \n", - "angelakilab IBL-T1 2019-02-10 11: Water 10% Sucr 0.744 1 \n", - "angelakilab IBL-T1 2019-02-11 10: Water 10% Sucr 0.732 2 \n", - "angelakilab IBL-T1 2019-02-14 10: Water 10% Sucr 2.3983 5 \n", - "angelakilab IBL-T1 2019-02-17 22: Water 15% Sucr 2.0 1 \n", - "angelakilab IBL-T1 2019-02-18 09: Water 10% Sucr 0.6777 2 \n", - "angelakilab IBL-T1 2019-02-18 22: Water 15% Sucr 1.0 2 \n", - " ...\n", - " (18 tuples)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(subject.Subject & 'subject_nickname=\"IBL-T1\"').proj('subject_nickname') * (action.WaterAdministration.proj('watertype_name', water_intake=\"water_administered\", dow='dayofweek(administration_time)') & 'administration_time>\"2018-08-31\"' & 'dow in (1, 2, 5)')" ] diff --git a/notebooks/notebooks_tutorial/201904_tutorial/erd.ipynb b/notebooks/notebooks_tutorial/201904_tutorial/erd.ipynb index 8c110613..7bae91f1 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/erd.ipynb +++ b/notebooks/notebooks_tutorial/201904_tutorial/erd.ipynb @@ -2,17 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting shan@datajoint.internationalbrainlab.org:3306\n" - ] - } - ], + "outputs": [], "source": [ "import datajoint as dj\n", "import matplotlib.pyplot as plt\n", @@ -28,163 +20,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.LabMembership\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(reference) - 1)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -201,467 +46,16 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "24\n", - "\n", - "24\n", - "\n", - "\n", - "subject.Source->24\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "26\n", - "\n", - "26\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "26->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "31\n", - "\n", - "31\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "31->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "29\n", - "\n", - "29\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "\n", - "\n", - "29->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "24->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Line->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "28\n", - "\n", - "28\n", - "\n", - "\n", - "28->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Subject->26\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Subject->28\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "25\n", - "\n", - "25\n", - "\n", - "\n", - "subject.Subject->25\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "25->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(subject) - 1)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -678,577 +72,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "50\n", - "\n", - "50\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "50->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Line->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "48\n", - "\n", - "48\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "48->subject.Subject\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.LabMembership\n", - "\n", - "\n", - "\n", - "55\n", - "\n", - "55\n", - "\n", - "\n", - "reference.LabMember->55\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "\n", - "\n", - "53\n", - "\n", - "53\n", - "\n", - "\n", - "reference.Severity->53\n", - "\n", - "\n", - "\n", - "49\n", - "\n", - "49\n", - "\n", - "\n", - "49->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "53->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->48\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "subject.Subject->50\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Subject->49\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "52\n", - "\n", - "52\n", - "\n", - "\n", - "subject.Subject->52\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.Lab->subject.Subject\n", - "\n", - "\n", - "\n", - "55->subject.Subject\n", - "\n", - "\n", - "\n", - "52->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(subject) + dj.ERD(reference) - 1)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1265,282 +98,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "\n", - "\n", - "103\n", - "\n", - "103\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "103->subject.Subject\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "reference.LabMember->103\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.Weighing\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Surgery\n", - "\n", - "\n", - "\n", - "subject.Subject->action.OtherAction\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Weighing\n", - "\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.VirusInjection\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.Surgery\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.OtherAction\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(action) - 1)" ] @@ -1554,690 +114,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "104\n", - "\n", - "104\n", - "\n", - "\n", - "subject.Source->104\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "106\n", - "\n", - "106\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "106->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.Weighing\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "111\n", - "\n", - "111\n", - "\n", - "\n", - "reference.LabMember->111\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "108\n", - "\n", - "108\n", - "\n", - "\n", - "108->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.Surgery\n", - "\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.OtherAction\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "\n", - "\n", - "105\n", - "\n", - "105\n", - "\n", - "\n", - "105->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Line->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "111->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Surgery\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Subject->106\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Weighing\n", - "\n", - "\n", - "\n", - "subject.Subject->108\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Subject->action.VirusInjection\n", - "\n", - "\n", - "\n", - "subject.Subject->105\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Subject->action.OtherAction\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "reference.Lab->subject.Subject\n", - "\n", - "\n", - "\n", - "109\n", - "\n", - "109\n", - "\n", - "\n", - "109->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "104->subject.Subject\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(subject) + dj.ERD(action) - 1)" ] @@ -2251,220 +130,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->acquisition.Session\n", - "\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->acquisition.Session\n", - "\n", - "\n", - "\n", - "127\n", - "\n", - "127\n", - "\n", - "\n", - "127->subject.Subject\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->acquisition.Session\n", - "\n", - "\n", - "\n", - "123\n", - "\n", - "123\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "\n", - "123->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "acquisition.Session->123\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->127\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(acquisition) - 1)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2481,223 +156,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->acquisition.Session\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType->data.DataRepository\n", - "\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSet->data.FileRecord\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.FileRecord\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSetType->data.DataSet\n", - "\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "\n", - "\n", - "data.DataFormat->data.DataSet\n", - "\n", - "\n", - "\n", - "acquisition.Session->data.DataSet\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->data.DataSet\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(data) - 1)" ] @@ -2711,989 +172,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "\n", - "241\n", - "\n", - "241\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "241->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSet->data.FileRecord\n", - "\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "243\n", - "\n", - "243\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "\n", - "243->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.Surgery\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->acquisition.Session\n", - "\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.OtherAction\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "acquisition.Session->data.DataSet\n", - "\n", - "\n", - "\n", - "acquisition.Session->243\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->acquisition.Session\n", - "\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Line->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "\n", - "\n", - "245\n", - "\n", - "245\n", - "\n", - "\n", - "reference.Severity->245\n", - "\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.FileRecord\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "247\n", - "\n", - "247\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "247->subject.Subject\n", - "\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType->data.DataRepository\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "subject.Subject->241\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Surgery\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Subject->acquisition.Session\n", - "\n", - "\n", - "\n", - "subject.Subject->action.OtherAction\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "242\n", - "\n", - "242\n", - "\n", - "\n", - "subject.Subject->242\n", - "\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Weighing\n", - "\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.VirusInjection\n", - "\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Implant\n", - "\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "244\n", - "\n", - "244\n", - "\n", - "\n", - "subject.Subject->244\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "\n", - "\n", - "data.DataFormat->data.DataSet\n", - "\n", - "\n", - "\n", - "240\n", - "\n", - "240\n", - "\n", - "\n", - "240->subject.Subject\n", - "\n", - "\n", - "\n", - "245->subject.Implant\n", - "\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->240\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSetType->data.DataSet\n", - "\n", - "\n", - "\n", - "242->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->data.DataSet\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->247\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.Weighing\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.Lab->subject.Subject\n", - "\n", - "\n", - "\n", - "244->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "alyx_erd = dj.ERD(reference) + dj.ERD(subject) + dj.ERD(action) + dj.ERD(acquisition) + dj.ERD(data)\n", "alyx_erd" @@ -3701,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3717,344 +198,16 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet->behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.SparseNoise\n", - "\n", - "\n", - "behavior.SparseNoise\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Wheel\n", - "\n", - "\n", - "behavior.Wheel\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Wheel->behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Lick\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.SparseNoise\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Wheel\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Eye\n", - "\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.TrialSet\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet->behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(behavior) - 1)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4071,271 +224,16 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "ephys.ProbeSet\n", - "\n", - "\n", - "ephys.ProbeSet\n", - "\n", - "\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.LFP\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe\n", - "\n", - "\n", - "ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup\n", - "\n", - "\n", - "ephys.ClusterGroup\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.ClusterGroup\n", - "\n", - "\n", - "\n", - "182\n", - "\n", - "182\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "182->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "ephys.ClusterSpikes\n", - "\n", - "\n", - "ephys.ClusterSpikes\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Ephys->ephys.ProbeSet\n", - "\n", - "\n", - "\n", - "ephys.Channel\n", - "\n", - "\n", - "ephys.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Channel->182\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel.Channel\n", - "\n", - "\n", - "ephys.ProbeModel.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel.Channel->ephys.Channel\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe->ephys.Channel\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym->ephys.Channel\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel\n", - "\n", - "\n", - "ephys.ProbeModel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel->ephys.ProbeModel.Channel\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel->ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->ephys.Ephys\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster->ephys.ClusterSpikes\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "(dj.ERD(ephys) - 1)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4352,1487 +250,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "%3\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "action.Surgery\n", - "\n", - "\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "\n", - "action.Surgery->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "data.DataSet\n", - "\n", - "\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "data.FileRecord\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSet->data.FileRecord\n", - "\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "action.ProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.SurgeryProcedure\n", - "\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "action.WaterRestriction\n", - "\n", - "\n", - "\n", - "\n", - "action.ProcedureType->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "behavior.Wheel\n", - "\n", - "\n", - "behavior.Wheel\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "\n", - "behavior.Wheel->behavior.WheelMoveSet\n", - "\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "subject.LineAllele\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe\n", - "\n", - "\n", - "ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "ephys.Channel\n", - "\n", - "\n", - "ephys.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet.Probe->ephys.Channel\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "\n", - "behavior.TrialSet.Trial->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "subject.LitterSubject\n", - "\n", - "\n", - "\n", - "\n", - "285\n", - "\n", - "285\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "subject.Implant\n", - "\n", - "\n", - "\n", - "\n", - "285->subject.Implant\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "subject.Litter\n", - "\n", - "\n", - "\n", - "\n", - "subject.Litter->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "284\n", - "\n", - "284\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "subject.BreedingPair\n", - "\n", - "\n", - "\n", - "\n", - "284->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "282\n", - "\n", - "282\n", - "\n", - "\n", - "282->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "reference.LabLocation\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.Surgery\n", - "\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "acquisition.Session\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->acquisition.Session\n", - "\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "action.OtherAction\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.OtherAction\n", - "\n", - "\n", - "\n", - "reference.LabLocation->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "acquisition.Session->data.DataSet\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Wheel\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveTrialSet\n", - "\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.PassiveRecordings\n", - "\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "ephys.Ephys\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->ephys.Ephys\n", - "\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "behavior.SparseNoise\n", - "\n", - "\n", - "behavior.SparseNoise\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.SparseNoise\n", - "\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "behavior.Lick\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Lick\n", - "\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "behavior.TrialSet\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.TrialSet\n", - "\n", - "\n", - "\n", - "acquisition.Session->acquisition.SessionProcedureType\n", - "\n", - "\n", - "\n", - "283\n", - "\n", - "283\n", - "\n", - "\n", - "acquisition.Session->283\n", - "\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.ExtraRewards\n", - "\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "behavior.Eye\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.Eye\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "\n", - "acquisition.Session->behavior.SpontaneousTimeSet\n", - "\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "subject.Strain\n", - "\n", - "\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "subject.Line\n", - "\n", - "\n", - "\n", - "\n", - "subject.Strain->subject.Line\n", - "\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "reference.Project\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->acquisition.Session\n", - "\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "subject.SubjectProject\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "data.ProjectRepository\n", - "\n", - "\n", - "\n", - "\n", - "reference.Project->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "behavior.PassiveTrialSet->behavior.PassiveTrialSet.PassiveTrial\n", - "\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "reference.Severity\n", - "\n", - "\n", - "\n", - "\n", - "reference.Severity->285\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel\n", - "\n", - "\n", - "ephys.ProbeModel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel->ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel.Channel\n", - "\n", - "\n", - "ephys.ProbeModel.Channel\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel->ephys.ProbeModel.Channel\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "data.DataRepositoryType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "data.DataRepository\n", - "\n", - "\n", - "\n", - "\n", - "data.DataRepositoryType->data.DataRepository\n", - "\n", - "\n", - "\n", - "287\n", - "\n", - "287\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "subject.Subject\n", - "\n", - "\n", - "\n", - "\n", - "287->subject.Subject\n", - "\n", - "\n", - "\n", - "ephys.ClusterSpikes\n", - "\n", - "\n", - "ephys.ClusterSpikes\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup.Cluster->ephys.ClusterSpikes\n", - "\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "reference.LabMembership\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "behavior.WheelMoveType\n", - "\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveType->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "286\n", - "\n", - "286\n", - "\n", - "\n", - "ephys.Channel->286\n", - "\n", - "\n", - "\n", - "subject.BreedingPair->subject.Litter\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Surgery\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.LitterSubject\n", - "\n", - "\n", - "\n", - "subject.Subject->284\n", - "\n", - "\n", - "\n", - "subject.Subject->282\n", - "\n", - "\n", - "\n", - "subject.Subject->acquisition.Session\n", - "\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "subject.Caging\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Caging\n", - "\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "subject.Weaning\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Weaning\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Implant\n", - "\n", - "\n", - "\n", - "281\n", - "\n", - "281\n", - "\n", - "\n", - "subject.Subject->281\n", - "\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "subject.Zygosity\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Zygosity\n", - "\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "action.Weighing\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.Weighing\n", - "\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "subject.Death\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.Death\n", - "\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "action.VirusInjection\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.VirusInjection\n", - "\n", - "\n", - "\n", - "subject.Subject->action.OtherAction\n", - "\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "action.WaterAdministration\n", - "\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "subject.Subject->subject.SubjectProject\n", - "\n", - "\n", - "\n", - "subject.Subject->action.WaterRestriction\n", - "\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "data.DataFormat\n", - "\n", - "\n", - "\n", - "\n", - "data.DataFormat->data.DataSet\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet\n", - "\n", - "\n", - "ephys.ProbeSet\n", - "\n", - "\n", - "\n", - "\n", - "ephys.Ephys->ephys.ProbeSet\n", - "\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "subject.Source\n", - "\n", - "\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "subject.Allele\n", - "\n", - "\n", - "\n", - "\n", - "subject.Source->subject.Allele\n", - "\n", - "\n", - "\n", - "280\n", - "\n", - "280\n", - "\n", - "\n", - "subject.Source->280\n", - "\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "reference.Lab\n", - "\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabLocation\n", - "\n", - "\n", - "\n", - "reference.Lab->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.Lab->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.Line->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Line->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "data.DataSetType\n", - "\n", - "\n", - "\n", - "\n", - "data.DataSetType->data.DataSet\n", - "\n", - "\n", - "\n", - "281->subject.BreedingPair\n", - "\n", - "\n", - "\n", - "behavior.WheelMoveSet->behavior.WheelMoveSet.WheelMove\n", - "\n", - "\n", - "\n", - "ephys.ProbeModel.Channel->ephys.Channel\n", - "\n", - "\n", - "\n", - "286->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "reference.LabMember\n", - "\n", - "\n", - "\n", - "\n", - "reference.LabMember->data.DataSet\n", - "\n", - "\n", - "\n", - "reference.LabMember->acquisition.SessionLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->287\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.LabMembership\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.Weighing\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.SurgeryLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->reference.ProjectLabMember\n", - "\n", - "\n", - "\n", - "reference.LabMember->action.WaterAdministration\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.LineAllele\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "subject.Allele->subject.Zygosity\n", - "\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "ephys.LFP\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup\n", - "\n", - "\n", - "ephys.ClusterGroup\n", - "\n", - "\n", - "\n", - "\n", - "ephys.ClusterGroup->ephys.ClusterGroup.Cluster\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.Trial\n", - "\n", - "\n", - "\n", - "behavior.TrialSet->behavior.TrialSet.ExcludedTrial\n", - "\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "subject.Species\n", - "\n", - "\n", - "\n", - "\n", - "subject.Species->subject.Line\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.FileRecord\n", - "\n", - "\n", - "\n", - "data.DataRepository->data.ProjectRepository\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.ProbeSet.Probe\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.LFP\n", - "\n", - "\n", - "\n", - "ephys.ProbeSet->ephys.ClusterGroup\n", - "\n", - "\n", - "\n", - "280->subject.Subject\n", - "\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "subject.Sequence\n", - "\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.GenotypeTest\n", - "\n", - "\n", - "\n", - "subject.Sequence->subject.AlleleSequence\n", - "\n", - "\n", - "\n", - "283->acquisition.ChildSession\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "reference.BrainLocationAcronym\n", - "\n", - "\n", - "\n", - "\n", - "reference.BrainLocationAcronym->ephys.Channel\n", - "\n", - "\n", - "\n", - "behavior.SpontaneousTimeSet->behavior.SpontaneousTimeSet.SpontaneousTime\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "all_erd = dj.ERD(reference) + dj.ERD(subject) + dj.ERD(action) + dj.ERD(acquisition) + dj.ERD(data) + dj.ERD(behavior) + dj.ERD(ephys)\n", "all_erd" @@ -5850,21 +270,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'subject' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msubject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSubject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescribe\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'subject' is not defined" - ] - } - ], + "outputs": [], "source": [ "subject.Subject.describe()" ] diff --git a/notebooks/notebooks_tutorial/201904_tutorial/list_tables.py b/notebooks/notebooks_tutorial/201904_tutorial/list_tables.py index 51b9439e..98c614dc 100644 --- a/notebooks/notebooks_tutorial/201904_tutorial/list_tables.py +++ b/notebooks/notebooks_tutorial/201904_tutorial/list_tables.py @@ -1,8 +1,10 @@ -from datajoint.user_tables import UserTable import inspect +from datajoint.user_tables import UserTable + + def list_tables(schema): for k in dir(schema): t = getattr(schema, k) if inspect.isclass(t) and issubclass(t, UserTable): - print(k) \ No newline at end of file + print(k) diff --git a/notebooks/notebooks_tutorial/202001_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202001_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py index 46217415..de8c0e0b 100644 --- a/notebooks/notebooks_tutorial/202001_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202001_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py @@ -5,13 +5,16 @@ 16 Jan 2020 """ -from ibl_pipeline import subject, acquisition, reference -import seaborn as sns -import matplotlib import os -import numpy as np + import datajoint as dj +import matplotlib +import numpy as np +import seaborn as sns + +from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis + # from IPython import embed as shell # for debugging @@ -20,9 +23,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -33,24 +52,24 @@ def seaborn_style(): """ sns.set(style="ticks", context="paper", font_scale=1.4) sns.despine(trim=True) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # Announce save location - print('Figure save path: ' + fig_dir) + print("Figure save path: " + fig_dir) # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) return fig_dir -def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=True, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -63,47 +82,75 @@ def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they were flagged as trained_1a - if criterion == 'trained': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + if criterion == "trained": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'biased': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "biased": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'task_protocol LIKE "%biased%"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'ready4ephysrig': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "ready4ephysrig": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="ready4ephysrig"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) if from_list is True: - ids = np.load('uuids_trained1.npy', allow_pickle=True) - subj_query = (subj_query & [{'subject_uuid': u_id} for u_id in ids]).proj( - 'subject_nickname', 'date_trained', 'institution_short') + ids = np.load("uuids_trained1.npy", allow_pickle=True) + subj_query = (subj_query & [{"subject_uuid": u_id} for u_id in ids]).proj( + "subject_nickname", "date_trained", "institution_short" + ) # Select subjects that reached trained_1a criterium before November 30th if as_dataframe is True: - subjects = ( - subj_query & 'date_trained < "2019-11-30"').fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = (subj_query & 'date_trained < "2019-11-30"').fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() else: - subjects = (subj_query & 'date_trained < "2019-11-30"') + subjects = subj_query & 'date_trained < "2019-11-30"' return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_30nov=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_30nov=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -119,31 +166,64 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'training': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'biased': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') + if task == "all": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "training": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "biased": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) else: - raise Exception('task must be all, training or biased') + raise Exception("task must be all, training or biased") # Only use sessions up until the end of December sessions = sessions & 'date(session_start_time) < "2019-12-31"' @@ -155,14 +235,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, 0], - as_dataframe=False, force_30nov=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=[2, 0], + as_dataframe=False, + force_30nov=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -186,52 +272,66 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, # Query all included subjects if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached - if criterion == 'trained': + if criterion == "trained": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'biased': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="trained_1a" OR training_status="trained_1b"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "biased": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'task_protocol LIKE "%biased%"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'ephys': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'task_protocol LIKE "%biased%"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "ephys": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="ready4ephysrig" OR training_status="ready4recording"', - 'subject_nickname', date_criterion='min(date(session_start_time))') + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="ready4ephysrig" OR training_status="ready4recording"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) else: - raise Exception('criterion must be trained, biased or ephys') + raise Exception("criterion must be trained, biased or ephys") # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use days before the 30th of Novemeber # Use dates to query sessions ses_query = (acquisition.Session).aggr( - days, from_date='min(session_date)', to_date='max(session_date)') - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + days, from_date="min(session_date)", to_date="max(session_date)" + ) + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame') + sessions = sessions.fetch(format="frame") sessions = sessions.reset_index() - days = days.fetch(format='frame') + days = days.fetch(format="frame") days = days.reset_index() - return sessions, days \ No newline at end of file + return sessions, days diff --git a/notebooks/notebooks_tutorial/202001_behavior_paper/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202001_behavior_paper/paper_behavior_functions.py index 46217415..de8c0e0b 100644 --- a/notebooks/notebooks_tutorial/202001_behavior_paper/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202001_behavior_paper/paper_behavior_functions.py @@ -5,13 +5,16 @@ 16 Jan 2020 """ -from ibl_pipeline import subject, acquisition, reference -import seaborn as sns -import matplotlib import os -import numpy as np + import datajoint as dj +import matplotlib +import numpy as np +import seaborn as sns + +from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis + # from IPython import embed as shell # for debugging @@ -20,9 +23,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -33,24 +52,24 @@ def seaborn_style(): """ sns.set(style="ticks", context="paper", font_scale=1.4) sns.despine(trim=True) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # Announce save location - print('Figure save path: ' + fig_dir) + print("Figure save path: " + fig_dir) # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) return fig_dir -def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=True, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -63,47 +82,75 @@ def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they were flagged as trained_1a - if criterion == 'trained': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + if criterion == "trained": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'biased': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "biased": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'task_protocol LIKE "%biased%"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'ready4ephysrig': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "ready4ephysrig": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="ready4ephysrig"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) if from_list is True: - ids = np.load('uuids_trained1.npy', allow_pickle=True) - subj_query = (subj_query & [{'subject_uuid': u_id} for u_id in ids]).proj( - 'subject_nickname', 'date_trained', 'institution_short') + ids = np.load("uuids_trained1.npy", allow_pickle=True) + subj_query = (subj_query & [{"subject_uuid": u_id} for u_id in ids]).proj( + "subject_nickname", "date_trained", "institution_short" + ) # Select subjects that reached trained_1a criterium before November 30th if as_dataframe is True: - subjects = ( - subj_query & 'date_trained < "2019-11-30"').fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = (subj_query & 'date_trained < "2019-11-30"').fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() else: - subjects = (subj_query & 'date_trained < "2019-11-30"') + subjects = subj_query & 'date_trained < "2019-11-30"' return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_30nov=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_30nov=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -119,31 +166,64 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'training': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'biased': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') + if task == "all": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "training": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "biased": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) else: - raise Exception('task must be all, training or biased') + raise Exception("task must be all, training or biased") # Only use sessions up until the end of December sessions = sessions & 'date(session_start_time) < "2019-12-31"' @@ -155,14 +235,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, 0], - as_dataframe=False, force_30nov=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=[2, 0], + as_dataframe=False, + force_30nov=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -186,52 +272,66 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, # Query all included subjects if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached - if criterion == 'trained': + if criterion == "trained": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'biased': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="trained_1a" OR training_status="trained_1b"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "biased": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'task_protocol LIKE "%biased%"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'ephys': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'task_protocol LIKE "%biased%"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "ephys": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="ready4ephysrig" OR training_status="ready4recording"', - 'subject_nickname', date_criterion='min(date(session_start_time))') + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="ready4ephysrig" OR training_status="ready4recording"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) else: - raise Exception('criterion must be trained, biased or ephys') + raise Exception("criterion must be trained, biased or ephys") # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use days before the 30th of Novemeber # Use dates to query sessions ses_query = (acquisition.Session).aggr( - days, from_date='min(session_date)', to_date='max(session_date)') - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + days, from_date="min(session_date)", to_date="max(session_date)" + ) + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame') + sessions = sessions.fetch(format="frame") sessions = sessions.reset_index() - days = days.fetch(format='frame') + days = days.fetch(format="frame") days = days.reset_index() - return sessions, days \ No newline at end of file + return sessions, days diff --git a/notebooks/notebooks_tutorial/202007_neuro_match_academy/01-Explore IBL behavior data pipeline.ipynb b/notebooks/notebooks_tutorial/202007_neuro_match_academy/01-Explore IBL behavior data pipeline.ipynb index 601d197f..4c13cd3f 100755 --- a/notebooks/notebooks_tutorial/202007_neuro_match_academy/01-Explore IBL behavior data pipeline.ipynb +++ b/notebooks/notebooks_tutorial/202007_neuro_match_academy/01-Explore IBL behavior data pipeline.ipynb @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/notebooks/notebooks_tutorial/202007_neuro_match_academy/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202007_neuro_match_academy/paper_behavior_functions.py index 46217415..de8c0e0b 100755 --- a/notebooks/notebooks_tutorial/202007_neuro_match_academy/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202007_neuro_match_academy/paper_behavior_functions.py @@ -5,13 +5,16 @@ 16 Jan 2020 """ -from ibl_pipeline import subject, acquisition, reference -import seaborn as sns -import matplotlib import os -import numpy as np + import datajoint as dj +import matplotlib +import numpy as np +import seaborn as sns + +from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis + # from IPython import embed as shell # for debugging @@ -20,9 +23,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -33,24 +52,24 @@ def seaborn_style(): """ sns.set(style="ticks", context="paper", font_scale=1.4) sns.despine(trim=True) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # Announce save location - print('Figure save path: ' + fig_dir) + print("Figure save path: " + fig_dir) # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) return fig_dir -def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=True, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -63,47 +82,75 @@ def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they were flagged as trained_1a - if criterion == 'trained': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + if criterion == "trained": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'biased': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "biased": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'task_protocol LIKE "%biased%"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'ready4ephysrig': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "ready4ephysrig": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="ready4ephysrig"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) if from_list is True: - ids = np.load('uuids_trained1.npy', allow_pickle=True) - subj_query = (subj_query & [{'subject_uuid': u_id} for u_id in ids]).proj( - 'subject_nickname', 'date_trained', 'institution_short') + ids = np.load("uuids_trained1.npy", allow_pickle=True) + subj_query = (subj_query & [{"subject_uuid": u_id} for u_id in ids]).proj( + "subject_nickname", "date_trained", "institution_short" + ) # Select subjects that reached trained_1a criterium before November 30th if as_dataframe is True: - subjects = ( - subj_query & 'date_trained < "2019-11-30"').fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = (subj_query & 'date_trained < "2019-11-30"').fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() else: - subjects = (subj_query & 'date_trained < "2019-11-30"') + subjects = subj_query & 'date_trained < "2019-11-30"' return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_30nov=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_30nov=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -119,31 +166,64 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'training': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'biased': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') + if task == "all": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "training": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "biased": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) else: - raise Exception('task must be all, training or biased') + raise Exception("task must be all, training or biased") # Only use sessions up until the end of December sessions = sessions & 'date(session_start_time) < "2019-12-31"' @@ -155,14 +235,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, 0], - as_dataframe=False, force_30nov=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=[2, 0], + as_dataframe=False, + force_30nov=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -186,52 +272,66 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, # Query all included subjects if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached - if criterion == 'trained': + if criterion == "trained": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'biased': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="trained_1a" OR training_status="trained_1b"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "biased": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'task_protocol LIKE "%biased%"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'ephys': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'task_protocol LIKE "%biased%"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "ephys": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="ready4ephysrig" OR training_status="ready4recording"', - 'subject_nickname', date_criterion='min(date(session_start_time))') + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="ready4ephysrig" OR training_status="ready4recording"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) else: - raise Exception('criterion must be trained, biased or ephys') + raise Exception("criterion must be trained, biased or ephys") # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use days before the 30th of Novemeber # Use dates to query sessions ses_query = (acquisition.Session).aggr( - days, from_date='min(session_date)', to_date='max(session_date)') - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + days, from_date="min(session_date)", to_date="max(session_date)" + ) + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame') + sessions = sessions.fetch(format="frame") sessions = sessions.reset_index() - days = days.fetch(format='frame') + days = days.fetch(format="frame") days = days.reset_index() - return sessions, days \ No newline at end of file + return sessions, days diff --git a/notebooks/notebooks_tutorial/202102_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202102_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py index 46217415..de8c0e0b 100644 --- a/notebooks/notebooks_tutorial/202102_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202102_behavior_paper/Explore IBL pipeline/paper_behavior_functions.py @@ -5,13 +5,16 @@ 16 Jan 2020 """ -from ibl_pipeline import subject, acquisition, reference -import seaborn as sns -import matplotlib import os -import numpy as np + import datajoint as dj +import matplotlib +import numpy as np +import seaborn as sns + +from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis + # from IPython import embed as shell # for debugging @@ -20,9 +23,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -33,24 +52,24 @@ def seaborn_style(): """ sns.set(style="ticks", context="paper", font_scale=1.4) sns.despine(trim=True) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # Announce save location - print('Figure save path: ' + fig_dir) + print("Figure save path: " + fig_dir) # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) return fig_dir -def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=True, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -63,47 +82,75 @@ def query_subjects(as_dataframe=False, from_list=True, criterion='trained'): # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they were flagged as trained_1a - if criterion == 'trained': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + if criterion == "trained": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'biased': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "biased": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'task_protocol LIKE "%biased%"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') - - if criterion == 'ready4ephysrig': - subj_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr( + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) + + if criterion == "ready4ephysrig": + subj_query = ( + subject.Subject + * subject.SubjectLab + * reference.Lab + * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ).aggr( (acquisition.Session * behavior_analysis.SessionTrainingStatus()) & 'training_status="ready4ephysrig"', - 'subject_nickname', 'sex', 'subject_birth_date', 'institution_short', - date_trained='min(date(session_start_time))') + "subject_nickname", + "sex", + "subject_birth_date", + "institution_short", + date_trained="min(date(session_start_time))", + ) if from_list is True: - ids = np.load('uuids_trained1.npy', allow_pickle=True) - subj_query = (subj_query & [{'subject_uuid': u_id} for u_id in ids]).proj( - 'subject_nickname', 'date_trained', 'institution_short') + ids = np.load("uuids_trained1.npy", allow_pickle=True) + subj_query = (subj_query & [{"subject_uuid": u_id} for u_id in ids]).proj( + "subject_nickname", "date_trained", "institution_short" + ) # Select subjects that reached trained_1a criterium before November 30th if as_dataframe is True: - subjects = ( - subj_query & 'date_trained < "2019-11-30"').fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = (subj_query & 'date_trained < "2019-11-30"').fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() else: - subjects = (subj_query & 'date_trained < "2019-11-30"') + subjects = subj_query & 'date_trained < "2019-11-30"' return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_30nov=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_30nov=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -119,31 +166,64 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'training': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%training%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') - elif task == 'biased': - sessions = (acquisition.Session * subject.Subject * subject.SubjectLab * reference.Lab - * use_subjects * behavior_analysis.SessionTrainingStatus - & 'task_protocol LIKE "%biased%"').proj( - 'session_uuid', 'subject_uuid', 'subject_nickname', 'institution_short', - 'task_protocol', 'training_status') + if task == "all": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%" OR task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "training": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%training%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) + elif task == "biased": + sessions = ( + acquisition.Session + * subject.Subject + * subject.SubjectLab + * reference.Lab + * use_subjects + * behavior_analysis.SessionTrainingStatus + & 'task_protocol LIKE "%biased%"' + ).proj( + "session_uuid", + "subject_uuid", + "subject_nickname", + "institution_short", + "task_protocol", + "training_status", + ) else: - raise Exception('task must be all, training or biased') + raise Exception("task must be all, training or biased") # Only use sessions up until the end of December sessions = sessions & 'date(session_start_time) < "2019-12-31"' @@ -155,14 +235,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, 0], - as_dataframe=False, force_30nov=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=[2, 0], + as_dataframe=False, + force_30nov=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -186,52 +272,66 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=[2, # Query all included subjects if force_30nov is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached - if criterion == 'trained': + if criterion == "trained": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="trained_1a" OR training_status="trained_1b"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'biased': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="trained_1a" OR training_status="trained_1b"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "biased": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'task_protocol LIKE "%biased%"', - 'subject_nickname', date_criterion='min(date(session_start_time))') - elif criterion == 'ephys': + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'task_protocol LIKE "%biased%"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) + elif criterion == "ephys": subj_crit = (subject.Subject * use_subjects).aggr( - (acquisition.Session * behavior_analysis.SessionTrainingStatus) - & 'training_status="ready4ephysrig" OR training_status="ready4recording"', - 'subject_nickname', date_criterion='min(date(session_start_time))') + (acquisition.Session * behavior_analysis.SessionTrainingStatus) + & 'training_status="ready4ephysrig" OR training_status="ready4recording"', + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) else: - raise Exception('criterion must be trained, biased or ephys') + raise Exception("criterion must be trained, biased or ephys") # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use days before the 30th of Novemeber # Use dates to query sessions ses_query = (acquisition.Session).aggr( - days, from_date='min(session_date)', to_date='max(session_date)') - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + days, from_date="min(session_date)", to_date="max(session_date)" + ) + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame') + sessions = sessions.fetch(format="frame") sessions = sessions.reset_index() - days = days.fetch(format='frame') + days = days.fetch(format="frame") days = days.reset_index() - return sessions, days \ No newline at end of file + return sessions, days diff --git a/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/05-Access the database locally.ipynb b/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/05-Access the database locally.ipynb index af06bfdd..5e03bc4b 100644 --- a/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/05-Access the database locally.ipynb +++ b/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/05-Access the database locally.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "55e601a7", "metadata": {}, "outputs": [], @@ -36,35 +36,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "4a957ca4", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{ 'connection.charset': '',\n", - " 'connection.init_function': None,\n", - " 'database.host': 'localhost',\n", - " 'database.password': None,\n", - " 'database.port': 3306,\n", - " 'database.reconnect': True,\n", - " 'database.use_tls': None,\n", - " 'database.user': None,\n", - " 'display.limit': 12,\n", - " 'display.show_tuple_count': True,\n", - " 'display.width': 14,\n", - " 'enable_python_native_blobs': True,\n", - " 'fetch_format': 'array',\n", - " 'loglevel': 'INFO',\n", - " 'safemode': True}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dj.config" ] @@ -110,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "72529d9c", "metadata": {}, "outputs": [], @@ -122,6 +97,7 @@ }, { "cell_type": "markdown", + "id": "dcc3e0e1", "metadata": {}, "source": [ "Then save the changes to a local JSON configuration file (`dj_local_conf.json`) by running:" @@ -129,6 +105,7 @@ }, { "cell_type": "markdown", + "id": "4995bc79", "metadata": {}, "source": [ "```python\n", @@ -144,6 +121,7 @@ }, { "cell_type": "markdown", + "id": "beb27f76", "metadata": {}, "source": [ "To test whether your credentials work, try connecting to the database by running:" @@ -151,33 +129,17 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "id": "4d764659", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting ibl-public@datajoint-public.internationalbrainlab.org:3306\n" - ] - }, - { - "data": { - "text/plain": [ - "DataJoint connection (connected) ibl-public@datajoint-public.internationalbrainlab.org:3306" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dj.conn()" ] }, { "cell_type": "markdown", + "id": "c9ace647", "metadata": {}, "source": [ "You should find that DataJoint automatically connects to the database! To see which schemas you have access to, run:" @@ -185,35 +147,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "id": "c223ab59", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['ibl_acquisition',\n", - " 'ibl_action',\n", - " 'ibl_analyses_behavior',\n", - " 'ibl_behavior',\n", - " 'ibl_data',\n", - " 'ibl_ephys',\n", - " 'ibl_histology',\n", - " 'ibl_reference',\n", - " 'ibl_storage',\n", - " 'ibl_subject']" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "dj.list_schemas()" ] }, { "cell_type": "markdown", + "id": "80d19481", "metadata": {}, "source": [ "You should have access to the following _public_ schemas:\n", @@ -238,7 +182,8 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, + "id": "0ae085a6", "metadata": {}, "outputs": [], "source": [ @@ -255,6 +200,7 @@ }, { "cell_type": "markdown", + "id": "1fa91193", "metadata": {}, "source": [ "Use `VirtualModule()` so you don't have to obtain the [IBL-pipeline](https://github.com/int-brain-lab/IBL-pipeline) source code and import these modules directly from the `ibl_pipeline` package. The `VirtualModule` method is equivalent (in terms of public data read access features) to doing the following if you have access to the source code:\n", diff --git a/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/paper_behavior_functions.py index 9e6c163e..64154e4b 100644 --- a/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202105_public_data_release/Explore IBL pipeline/paper_behavior_functions.py @@ -4,37 +4,38 @@ Guido Meijer, Anne Urai, Alejandro Pan Vazquez & Miles Wells 16 Jan 2020 """ -import warnings import os +import warnings from io import BytesIO -from zipfile import ZipFile from urllib.request import urlopen +from zipfile import ZipFile -import seaborn as sns +import brainbox.behavior.pyschofit as psy +import datajoint as dj import matplotlib +import matplotlib.pyplot as plt import numpy as np -import datajoint as dj import pandas as pd -import matplotlib.pyplot as plt - -import brainbox.behavior.pyschofit as psy +import seaborn as sns # Supress seaborn future warnings -warnings.simplefilter(action='ignore', category=FutureWarning) +warnings.simplefilter(action="ignore", category=FutureWarning) # Some constants -URL = 'http://ibl.flatironinstitute.org/public/behavior_paper_data.zip' +URL = "http://ibl.flatironinstitute.org/public/behavior_paper_data.zip" QUERY = True # Whether to query data through DataJoint (True) or use downloaded csv files (False) -EXAMPLE_MOUSE = 'KS014' # Mouse nickname used as an example -CUTOFF_DATE = '2020-03-23' # Date after which sessions are excluded, previously 30th Nov -STABLE_HW_DATE = '2019-06-10' # Date after which hardware was deemed stable +EXAMPLE_MOUSE = "KS014" # Mouse nickname used as an example +CUTOFF_DATE = ( + "2020-03-23" # Date after which sessions are excluded, previously 30th Nov +) +STABLE_HW_DATE = "2019-06-10" # Date after which hardware was deemed stable # LAYOUT FIGURE_HEIGHT = 2 # inch FIGURE_WIDTH = 8 # inch # EXCLUDED SESSIONS -EXCLUDED_SESSIONS = ['a9fb578a-9d7d-42b4-8dbc-3b419ce9f424'] # Session UUID +EXCLUDED_SESSIONS = ["a9fb578a-9d7d-42b4-8dbc-3b419ce9f424"] # Session UUID def group_colors(): @@ -42,9 +43,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -53,29 +70,33 @@ def seaborn_style(): """ Set seaborn style for plotting figures """ - sns.set(style="ticks", context="paper", - font="Arial", - rc={"font.size": 9, - "axes.titlesize": 9, - "axes.labelsize": 9, - "lines.linewidth": 1, - "xtick.labelsize": 7, - "ytick.labelsize": 7, - "savefig.transparent": True, - "xtick.major.size": 2.5, - "ytick.major.size": 2.5, - "xtick.minor.size": 2, - "ytick.minor.size": 2, - }) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + sns.set( + style="ticks", + context="paper", + font="Arial", + rc={ + "font.size": 9, + "axes.titlesize": 9, + "axes.labelsize": 9, + "lines.linewidth": 1, + "xtick.labelsize": 7, + "ytick.labelsize": 7, + "savefig.transparent": True, + "xtick.major.size": 2.5, + "ytick.major.size": 2.5, + "xtick.minor.size": 2, + "ytick.minor.size": 2, + }, + ) + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) @@ -86,10 +107,10 @@ def datapath(): """ Return the location of data directory """ - # Retrieve absolute path of paper-behavior dir + # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - data_dir = os.path.join(repo_dir, 'data') + data_dir = os.path.join(repo_dir, "data") # If doesn't already exist, create if not os.path.exists(data_dir): os.mkdir(data_dir) @@ -102,19 +123,19 @@ def load_csv(*args, **kwargs): http server and returned as a pandas DataFrame. """ repo_dir = os.path.dirname(os.path.realpath(__file__)) - local = os.path.join(repo_dir, 'data', *args) + local = os.path.join(repo_dir, "data", *args) if not os.path.exists(local): resp = urlopen(URL) zipfile = ZipFile(BytesIO(resp.read())) files = zipfile.namelist() if not any(x.endswith(args[-1]) for x in files): - raise FileNotFoundError(f'{args[-1]} not found in {URL}') - local = zipfile.extract('/'.join(('data', *args)), repo_dir) - loader = pd.read_pickle if local.endswith('.pkl') else pd.read_csv + raise FileNotFoundError(f"{args[-1]} not found in {URL}") + local = zipfile.extract("/".join(("data", *args)), repo_dir) + loader = pd.read_pickle if local.endswith(".pkl") else pd.read_csv return loader(local, **kwargs) -def query_subjects(as_dataframe=False, from_list=False, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=False, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -126,48 +147,55 @@ def query_subjects(as_dataframe=False, from_list=False, criterion='trained'): all mice that completed a training session are returned, with date_trained being the date of their first training session. """ - from ibl_pipeline import subject, acquisition, reference + from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they reached a given training status - all_subjects = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"') + all_subjects = ( + subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ) sessions = acquisition.Session * behavior_analysis.SessionTrainingStatus() - fields = ('subject_nickname', 'sex', 'subject_birth_date', 'institution_short') + fields = ("subject_nickname", "sex", "subject_birth_date", "institution_short") if criterion is None: # Find first session of all mice; date_trained = date of first training session subj_query = all_subjects.aggr( - sessions, *fields, date_trained='min(date(session_start_time))') + sessions, *fields, date_trained="min(date(session_start_time))" + ) else: # date_trained = date of first session when criterion was reached - if criterion == 'trained': + if criterion == "trained": restriction = 'training_status="trained_1a" OR training_status="trained_1b"' - elif criterion == 'biased': + elif criterion == "biased": restriction = 'task_protocol LIKE "%biased%"' - elif criterion == 'ephys': + elif criterion == "ephys": restriction = 'training_status LIKE "ready%"' else: raise ValueError('criterion must be "trained", "biased" or "ephys"') subj_query = all_subjects.aggr( - sessions & restriction, *fields, date_trained='min(date(session_start_time))') + sessions & restriction, + *fields, + date_trained="min(date(session_start_time))", + ) if from_list is True: - data_path = os.path.join(datapath(), 'uuids_trained.npy') + data_path = os.path.join(datapath(), "uuids_trained.npy") ids = np.load(data_path, allow_pickle=True) - subj_query = subj_query & [{'subject_uuid': u_id} for u_id in ids] + subj_query = subj_query & [{"subject_uuid": u_id} for u_id in ids] # Select subjects that reached criterion before cutoff date - subjects = (subj_query & 'date_trained <= "%s"' % CUTOFF_DATE) + subjects = subj_query & 'date_trained <= "%s"' % CUTOFF_DATE if as_dataframe is True: - subjects = subjects.fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = subjects.fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_cutoff=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_cutoff=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -188,18 +216,23 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_cutoff is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = acquisition.Session * use_subjects & 'task_protocol NOT LIKE "%habituation%"' - elif task == 'training': - sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%training%"' - elif task == 'biased': + if task == "all": + sessions = ( + acquisition.Session * use_subjects + & 'task_protocol NOT LIKE "%habituation%"' + ) + elif task == "training": + sessions = ( + acquisition.Session * use_subjects & 'task_protocol LIKE "%training%"' + ) + elif task == "biased": sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%biased%"' - elif task == 'ephys': + elif task == "ephys": sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%ephys%"' else: raise ValueError('task must be "all", "training", "biased" or "ephys"') @@ -208,7 +241,7 @@ def query_sessions(task='all', stable=False, as_dataframe=False, sessions = sessions & 'date(session_start_time) <= "%s"' % CUTOFF_DATE # Exclude weird sessions - sessions = sessions & dj.Not([{'session_uuid': u_id} for u_id in EXCLUDED_SESSIONS]) + sessions = sessions & dj.Not([{"session_uuid": u_id} for u_id in EXCLUDED_SESSIONS]) # If required only output sessions with stable hardware if stable is True: @@ -217,14 +250,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=(2, 0), - as_dataframe=False, force_cutoff=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=(2, 0), + as_dataframe=False, + force_cutoff=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -246,60 +285,71 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=(2, behavior_analysis.BehavioralSummaryByDate) """ - from ibl_pipeline import subject, acquisition + from ibl_pipeline import acquisition, subject from ibl_pipeline.analyses import behavior as behavior_analysis # Query all included subjects if force_cutoff is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached sessions = acquisition.Session * behavior_analysis.SessionTrainingStatus - if criterion == 'trained': + if criterion == "trained": restriction = 'training_status="trained_1a" OR training_status="trained_1b"' - elif criterion == 'biased': + elif criterion == "biased": restriction = 'task_protocol LIKE "%biased%" AND training_status="trained_1b"' - elif criterion == 'ephys': + elif criterion == "ephys": restriction = 'training_status LIKE "ready%"' else: raise ValueError('criterion must be "trained", "biased" or "ephys"') subj_crit = (subject.Subject * use_subjects).aggr( - sessions & restriction, 'subject_nickname', date_criterion='min(date(session_start_time))') + sessions & restriction, + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use dates to query sessions ses_query = acquisition.Session.aggr( - days, from_date='min(session_date)', to_date='max(session_date)') + days, from_date="min(session_date)", to_date="max(session_date)" + ) - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Exclude weird sessions - sessions = sessions & dj.Not([{'session_uuid': u_id} for u_id in EXCLUDED_SESSIONS]) + sessions = sessions & dj.Not([{"session_uuid": u_id} for u_id in EXCLUDED_SESSIONS]) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame').reset_index() - days = days.fetch(format='frame').reset_index() + sessions = sessions.fetch(format="frame").reset_index() + days = days.fetch(format="frame").reset_index() return sessions, days -def query_session_around_performance(perform_thres=0.8, stage='training'): - ''' +def query_session_around_performance(perform_thres=0.8, stage="training"): + """ Parameters ---------- perform_thres : float, optional @@ -313,195 +363,285 @@ def query_session_around_performance(perform_thres=0.8, stage='training'): selection : dataframe DESCRIPTION. Dataframe with all trials from mice reaching performance criterion - ''' - from ibl_pipeline import behavior, subject, reference - use_sessions = query_sessions(task='all', stable=False, as_dataframe=False, - force_cutoff=True, criterion=None) - behav = dj2pandas( - ((use_sessions & 'task_protocol LIKE "%' + stage + '%"') # only get training sessions - * subject.Subject * subject.SubjectLab * reference.Lab * behavior.TrialSet.Trial) + """ + from ibl_pipeline import behavior, reference, subject + use_sessions = query_sessions( + task="all", stable=False, as_dataframe=False, force_cutoff=True, criterion=None + ) + behav = dj2pandas( + ( + ( + use_sessions & 'task_protocol LIKE "%' + stage + '%"' + ) # only get training sessions + * subject.Subject + * subject.SubjectLab + * reference.Lab + * behavior.TrialSet.Trial + ) # Query only the fields we require, reducing the size of the fetch - .proj('institution_short', 'subject_nickname', 'task_protocol', 'session_uuid', - 'trial_stim_contrast_left', 'trial_stim_contrast_right', 'trial_response_choice', - 'task_protocol', 'trial_stim_prob_left', 'trial_feedback_type', - 'trial_response_time', 'trial_stim_on_time', 'session_end_time', 'time_zone') - + .proj( + "institution_short", + "subject_nickname", + "task_protocol", + "session_uuid", + "trial_stim_contrast_left", + "trial_stim_contrast_right", + "trial_response_choice", + "task_protocol", + "trial_stim_prob_left", + "trial_feedback_type", + "trial_response_time", + "trial_stim_on_time", + "session_end_time", + "time_zone", + ) # Fetch as a pandas DataFrame, ordered by institute - .fetch(order_by='institution_short, subject_nickname, session_start_time, trial_id', - format='frame') + .fetch( + order_by="institution_short, subject_nickname, session_start_time, trial_id", + format="frame", + ).reset_index() + ) + behav_ses = ( + behav.groupby(["subject_nickname", "session_start_time"]) + .mean()["correct_easy"] .reset_index() ) - behav_ses = behav.groupby(['subject_nickname', - 'session_start_time']).mean()['correct_easy'].reset_index() - behav_ses['above_criterion'] = behav_ses['correct_easy']>perform_thres + behav_ses["above_criterion"] = behav_ses["correct_easy"] > perform_thres # Check rolling sum of sessions above 0.8, must be 3 - behav_ses['met_session_criterion'] = \ - behav_ses.groupby(['subject_nickname'] - )['above_criterion'].rolling(3).sum().to_numpy() + behav_ses["met_session_criterion"] = ( + behav_ses.groupby(["subject_nickname"])["above_criterion"] + .rolling(3) + .sum() + .to_numpy() + ) # Select trials from sessions where criterion was first met selection = pd.DataFrame() - for mouse in behav_ses['subject_nickname'].unique(): - mouse_ses = behav_ses[behav_ses['subject_nickname']==mouse] - if any(mouse_ses['met_session_criterion']==3): - mouse_ses_select = mouse_ses.iloc[np.where( - mouse_ses['met_session_criterion']==3)[0][0]-2:\ - np.where(mouse_ses['met_session_criterion']==3)[0][0]+1,:] - trial_select = behav.loc[(behav['subject_nickname']==mouse) & - (behav['session_start_time'].isin( - mouse_ses_select['session_start_time']))] - selection = pd.concat([selection,trial_select]) + for mouse in behav_ses["subject_nickname"].unique(): + mouse_ses = behav_ses[behav_ses["subject_nickname"] == mouse] + if any(mouse_ses["met_session_criterion"] == 3): + mouse_ses_select = mouse_ses.iloc[ + np.where(mouse_ses["met_session_criterion"] == 3)[0][0] + - 2 : np.where(mouse_ses["met_session_criterion"] == 3)[0][0] + + 1, + :, + ] + trial_select = behav.loc[ + (behav["subject_nickname"] == mouse) + & ( + behav["session_start_time"].isin( + mouse_ses_select["session_start_time"] + ) + ) + ] + selection = pd.concat([selection, trial_select]) return selection + # ================================================================== # # DEFINE PSYCHFUNCFIT TO WORK WITH FACETGRID IN SEABORN # ================================================================== # def fit_psychfunc(df): - choicedat = df.groupby('signed_contrast').agg( - {'choice': 'count', 'choice2': 'mean'}).reset_index() - if len(choicedat) >= 4: # need some minimum number of unique x-values - pars, L = psy.mle_fit_psycho(choicedat.values.transpose(), P_model='erf_psycho_2gammas', - parstart=np.array( - [0, 20., 0.05, 0.05]), - parmin=np.array( - [choicedat['signed_contrast'].min(), 5, 0., 0.]), - parmax=np.array([choicedat['signed_contrast'].max(), 40., 1, 1])) + choicedat = ( + df.groupby("signed_contrast") + .agg({"choice": "count", "choice2": "mean"}) + .reset_index() + ) + if len(choicedat) >= 4: # need some minimum number of unique x-values + pars, L = psy.mle_fit_psycho( + choicedat.values.transpose(), + P_model="erf_psycho_2gammas", + parstart=np.array([0, 20.0, 0.05, 0.05]), + parmin=np.array([choicedat["signed_contrast"].min(), 5, 0.0, 0.0]), + parmax=np.array([choicedat["signed_contrast"].max(), 40.0, 1, 1]), + ) else: pars = [np.nan, np.nan, np.nan, np.nan] - df2 = {'bias': pars[0], 'threshold': pars[1], - 'lapselow': pars[2], 'lapsehigh': pars[3]} + df2 = { + "bias": pars[0], + "threshold": pars[1], + "lapselow": pars[2], + "lapsehigh": pars[3], + } df2 = pd.DataFrame(df2, index=[0]) - df2['ntrials'] = df['choice'].count() + df2["ntrials"] = df["choice"].count() return df2 def plot_psychometric(x, y, subj, **kwargs): # summary stats - average psychfunc over observers - df = pd.DataFrame({'signed_contrast': x, 'choice': y, - 'choice2': y, 'subject_nickname': subj}) - df2 = df.groupby(['signed_contrast', 'subject_nickname']).agg( - {'choice2': 'count', 'choice': 'mean'}).reset_index() - df2.rename(columns={"choice2": "ntrials", - "choice": "fraction"}, inplace=True) - df2 = df2.groupby(['signed_contrast']).mean().reset_index() - df2 = df2[['signed_contrast', 'ntrials', 'fraction']] + df = pd.DataFrame( + {"signed_contrast": x, "choice": y, "choice2": y, "subject_nickname": subj} + ) + df2 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"choice2": "count", "choice": "mean"}) + .reset_index() + ) + df2.rename(columns={"choice2": "ntrials", "choice": "fraction"}, inplace=True) + df2 = df2.groupby(["signed_contrast"]).mean().reset_index() + df2 = df2[["signed_contrast", "ntrials", "fraction"]] # only 'break' the x-axis and remove 50% contrast when 0% is present # print(df2.signed_contrast.unique()) - if 0. in df2.signed_contrast.values: + if 0.0 in df2.signed_contrast.values: brokenXaxis = True else: brokenXaxis = False # fit psychfunc - pars, L = psy.mle_fit_psycho(df2.transpose().values, # extract the data from the df - P_model='erf_psycho_2gammas', - parstart=np.array( - [0, 20., 0.05, 0.05]), - parmin=np.array( - [df2['signed_contrast'].min(), 5, 0., 0.]), - parmax=np.array([df2['signed_contrast'].max(), 40., 1, 1])) + pars, L = psy.mle_fit_psycho( + df2.transpose().values, # extract the data from the df + P_model="erf_psycho_2gammas", + parstart=np.array([0, 20.0, 0.05, 0.05]), + parmin=np.array([df2["signed_contrast"].min(), 5, 0.0, 0.0]), + parmax=np.array([df2["signed_contrast"].max(), 40.0, 1, 1]), + ) if brokenXaxis: # plot psychfunc - g = sns.lineplot(np.arange(-27, 27), - psy.erf_psycho_2gammas(pars, np.arange(-27, 27)), **kwargs) + g = sns.lineplot( + np.arange(-27, 27), + psy.erf_psycho_2gammas(pars, np.arange(-27, 27)), + **kwargs, + ) # plot psychfunc: -100, +100 - sns.lineplot(np.arange(-36, -31), - psy.erf_psycho_2gammas(pars, np.arange(-103, -98)), **kwargs) - sns.lineplot(np.arange(31, 36), - psy.erf_psycho_2gammas(pars, np.arange(98, 103)), **kwargs) + sns.lineplot( + np.arange(-36, -31), + psy.erf_psycho_2gammas(pars, np.arange(-103, -98)), + **kwargs, + ) + sns.lineplot( + np.arange(31, 36), + psy.erf_psycho_2gammas(pars, np.arange(98, 103)), + **kwargs, + ) # if there are any points at -50, 50 left, remove those if 50 in df.signed_contrast.values or -50 in df.signed_contrast.values: - df.drop(df[(df['signed_contrast'] == -50.) | (df['signed_contrast'] == 50)].index, - inplace=True) + df.drop( + df[ + (df["signed_contrast"] == -50.0) | (df["signed_contrast"] == 50) + ].index, + inplace=True, + ) # now break the x-axis - df['signed_contrast'] = df['signed_contrast'].replace(-100, -35) - df['signed_contrast'] = df['signed_contrast'].replace(100, 35) + df["signed_contrast"] = df["signed_contrast"].replace(-100, -35) + df["signed_contrast"] = df["signed_contrast"].replace(100, 35) else: # plot psychfunc - g = sns.lineplot(np.arange(-103, 103), - psy.erf_psycho_2gammas(pars, np.arange(-103, 103)), **kwargs) - - df3 = df.groupby(['signed_contrast', 'subject_nickname']).agg( - {'choice2': 'count', 'choice': 'mean'}).reset_index() + g = sns.lineplot( + np.arange(-103, 103), + psy.erf_psycho_2gammas(pars, np.arange(-103, 103)), + **kwargs, + ) + + df3 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"choice2": "count", "choice": "mean"}) + .reset_index() + ) # plot datapoints with errorbars on top - if df['subject_nickname'].nunique() > 1: + if df["subject_nickname"].nunique() > 1: # put the kwargs into a merged dict, so that overriding does not cause an error - sns.lineplot(df3['signed_contrast'], df3['choice'], - **{**{'err_style':"bars", - 'linewidth':0, 'linestyle':'None', 'mew':0.5, - 'marker':'o', 'ci':68}, **kwargs}) + sns.lineplot( + df3["signed_contrast"], + df3["choice"], + **{ + **{ + "err_style": "bars", + "linewidth": 0, + "linestyle": "None", + "mew": 0.5, + "marker": "o", + "ci": 68, + }, + **kwargs, + }, + ) if brokenXaxis: g.set_xticks([-35, -25, -12.5, 0, 12.5, 25, 35]) - g.set_xticklabels(['-100', '-25', '-12.5', '0', '12.5', '25', '100'], - size='small', rotation=60) + g.set_xticklabels( + ["-100", "-25", "-12.5", "0", "12.5", "25", "100"], + size="small", + rotation=60, + ) g.set_xlim([-40, 40]) break_xaxis(y=-0.004) else: g.set_xticks([-100, -50, 0, 50, 100]) - g.set_xticklabels(['-100', '-50', '0', '50', '100'], - size='small', rotation=60) + g.set_xticklabels(["-100", "-50", "0", "50", "100"], size="small", rotation=60) g.set_xlim([-110, 110]) g.set_ylim([0, 1.02]) g.set_yticks([0, 0.25, 0.5, 0.75, 1]) - g.set_yticklabels(['0', '25', '50', '75', '100']) + g.set_yticklabels(["0", "25", "50", "75", "100"]) def plot_chronometric(x, y, subj, **kwargs): - df = pd.DataFrame( - {'signed_contrast': x, 'rt': y, 'subject_nickname': subj}) + df = pd.DataFrame({"signed_contrast": x, "rt": y, "subject_nickname": subj}) df.dropna(inplace=True) # ignore NaN RTs - df2 = df.groupby(['signed_contrast', 'subject_nickname'] - ).agg({'rt': 'median'}).reset_index() + df2 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"rt": "median"}) + .reset_index() + ) # df2 = df2.groupby(['signed_contrast']).mean().reset_index() - df2 = df2[['signed_contrast', 'rt', 'subject_nickname']] + df2 = df2[["signed_contrast", "rt", "subject_nickname"]] # if 100 in df.signed_contrast.values and not 50 in # df.signed_contrast.values: - df2['signed_contrast'] = df2['signed_contrast'].replace(-100, -35) - df2['signed_contrast'] = df2['signed_contrast'].replace(100, 35) - df2 = df2.loc[np.abs(df2.signed_contrast) != 50, :] # remove those - - ax = sns.lineplot(x='signed_contrast', y='rt', err_style="bars", mew=0.5, - ci=68, data=df2, **kwargs) + df2["signed_contrast"] = df2["signed_contrast"].replace(-100, -35) + df2["signed_contrast"] = df2["signed_contrast"].replace(100, 35) + df2 = df2.loc[np.abs(df2.signed_contrast) != 50, :] # remove those + + ax = sns.lineplot( + x="signed_contrast", + y="rt", + err_style="bars", + mew=0.5, + ci=68, + data=df2, + **kwargs, + ) # all the points - if df['subject_nickname'].nunique() > 1: + if df["subject_nickname"].nunique() > 1: sns.lineplot( - x='signed_contrast', - y='rt', + x="signed_contrast", + y="rt", err_style="bars", mew=0.5, linewidth=0, - marker='o', + marker="o", ci=68, data=df2, - **kwargs) + **kwargs, + ) ax.set_xticks([-35, -25, -12.5, 0, 12.5, 25, 35]) - ax.set_xticklabels(['-100', '-25', '-12.5', '0', '12.5', '25', '100'], - size='small', rotation=45) + ax.set_xticklabels( + ["-100", "-25", "-12.5", "0", "12.5", "25", "100"], size="small", rotation=45 + ) ax.set_xlim([-40, 40]) - if df['signed_contrast'].min() >= 0: + if df["signed_contrast"].min() >= 0: ax.set_xlim([-5, 40]) ax.set_xticks([0, 6, 12.5, 25, 35]) - ax.set_xticklabels(['0', '6.25', '12.5', '25', '100'], - size='small', rotation=45) + ax.set_xticklabels( + ["0", "6.25", "12.5", "25", "100"], size="small", rotation=45 + ) def break_xaxis(y=-0.004, **kwargs): @@ -509,87 +649,116 @@ def break_xaxis(y=-0.004, **kwargs): # axisgate: show axis discontinuities with a quick hack # https://twitter.com/StevenDakin/status/1313744930246811653?s=19 # first, white square for discontinuous axis - plt.text(-30, y, '-', fontsize=14, fontweight='bold', - horizontalalignment='center', verticalalignment='center', - color='w') - plt.text(30, y, '-', fontsize=14, fontweight='bold', - horizontalalignment='center', verticalalignment='center', - color='w') + plt.text( + -30, + y, + "-", + fontsize=14, + fontweight="bold", + horizontalalignment="center", + verticalalignment="center", + color="w", + ) + plt.text( + 30, + y, + "-", + fontsize=14, + fontweight="bold", + horizontalalignment="center", + verticalalignment="center", + color="w", + ) # put little dashes to cut axes - plt.text(-30, y, '/ /', horizontalalignment='center', - verticalalignment='center', fontsize=6, fontweight='bold') - plt.text(30, y, '/ /', horizontalalignment='center', - verticalalignment='center', fontsize=6, fontweight='bold') + plt.text( + -30, + y, + "/ /", + horizontalalignment="center", + verticalalignment="center", + fontsize=6, + fontweight="bold", + ) + plt.text( + 30, + y, + "/ /", + horizontalalignment="center", + verticalalignment="center", + fontsize=6, + fontweight="bold", + ) def add_n(x, y, sj, **kwargs): - df = pd.DataFrame({'signed_contrast': x, 'choice': y, - 'choice2': y, 'subject_nickname': sj}) + df = pd.DataFrame( + {"signed_contrast": x, "choice": y, "choice2": y, "subject_nickname": sj} + ) # ADD TEXT ABOUT NUMBER OF ANIMALS AND TRIALS plt.text( 15, 0.2, - '%d mice, %d trials' % - (df.subject_nickname.nunique(), - df.choice.count()), - fontweight='normal', + "%d mice, %d trials" % (df.subject_nickname.nunique(), df.choice.count()), + fontweight="normal", fontsize=6, - color='k') + color="k", + ) def dj2pandas(behav): # make sure all contrasts are positive - behav['trial_stim_contrast_right'] = np.abs( - behav['trial_stim_contrast_right']) - behav['trial_stim_contrast_left'] = np.abs( - behav['trial_stim_contrast_left']) + behav["trial_stim_contrast_right"] = np.abs(behav["trial_stim_contrast_right"]) + behav["trial_stim_contrast_left"] = np.abs(behav["trial_stim_contrast_left"]) - behav['signed_contrast'] = ( - behav['trial_stim_contrast_right'] - behav['trial_stim_contrast_left']) * 100 + behav["signed_contrast"] = ( + behav["trial_stim_contrast_right"] - behav["trial_stim_contrast_left"] + ) * 100 # behav['signed_contrast'] = behav.signed_contrast.astype(int) - behav['trial'] = behav.trial_id # for psychfuncfit - val_map = {'CCW': 1, 'No Go': 0, 'CW': -1} - behav['choice'] = behav['trial_response_choice'].map(val_map) - behav['correct'] = np.where( - np.sign(behav['signed_contrast']) == behav['choice'], 1, 0) - behav.loc[behav['signed_contrast'] == 0, 'correct'] = np.NaN - - behav['choice_right'] = behav.choice.replace( - [-1, 0, 1], [0, np.nan, 1]) # code as 0, 100 for percentages - behav['choice2'] = behav.choice_right # for psychfuncfit - behav['correct_easy'] = behav.correct - behav.loc[np.abs(behav['signed_contrast']) < 50, 'correct_easy'] = np.NaN - behav.rename( - columns={'trial_stim_prob_left': 'probabilityLeft'}, inplace=True) - behav['probabilityLeft'] = behav['probabilityLeft'] * 100 - behav['probabilityLeft'] = behav.probabilityLeft.astype(int) + behav["trial"] = behav.trial_id # for psychfuncfit + val_map = {"CCW": 1, "No Go": 0, "CW": -1} + behav["choice"] = behav["trial_response_choice"].map(val_map) + behav["correct"] = np.where( + np.sign(behav["signed_contrast"]) == behav["choice"], 1, 0 + ) + behav.loc[behav["signed_contrast"] == 0, "correct"] = np.NaN + + behav["choice_right"] = behav.choice.replace( + [-1, 0, 1], [0, np.nan, 1] + ) # code as 0, 100 for percentages + behav["choice2"] = behav.choice_right # for psychfuncfit + behav["correct_easy"] = behav.correct + behav.loc[np.abs(behav["signed_contrast"]) < 50, "correct_easy"] = np.NaN + behav.rename(columns={"trial_stim_prob_left": "probabilityLeft"}, inplace=True) + behav["probabilityLeft"] = behav["probabilityLeft"] * 100 + behav["probabilityLeft"] = behav.probabilityLeft.astype(int) # compute rt - if 'trial_response_time' in behav.columns: - behav['rt'] = behav['trial_response_time'] - \ - behav['trial_stim_on_time'] + if "trial_response_time" in behav.columns: + behav["rt"] = behav["trial_response_time"] - behav["trial_stim_on_time"] # ignore a bunch of things for missed trials # don't count RT if there was no response - behav.loc[behav.choice == 0, 'rt'] = np.nan + behav.loc[behav.choice == 0, "rt"] = np.nan # don't count RT if there was no response - behav.loc[behav.choice == 0, 'trial_feedback_type'] = np.nan + behav.loc[behav.choice == 0, "trial_feedback_type"] = np.nan # CODE FOR HISTORY - behav['previous_choice'] = behav.choice.shift(1) - behav.loc[behav.previous_choice == 0, 'previous_choice'] = np.nan - behav['previous_outcome'] = behav.trial_feedback_type.shift(1) - behav.loc[behav.previous_outcome == 0, 'previous_outcome'] = np.nan - behav['previous_contrast'] = np.abs(behav.signed_contrast.shift(1)) - behav['previous_choice_name'] = behav['previous_choice'].map( - {-1: 'left', 1: 'right'}) - behav['previous_outcome_name'] = behav['previous_outcome'].map( - {-1: 'post_error', 1: 'post_correct'}) - behav['repeat'] = (behav.choice == behav.previous_choice) + behav["previous_choice"] = behav.choice.shift(1) + behav.loc[behav.previous_choice == 0, "previous_choice"] = np.nan + behav["previous_outcome"] = behav.trial_feedback_type.shift(1) + behav.loc[behav.previous_outcome == 0, "previous_outcome"] = np.nan + behav["previous_contrast"] = np.abs(behav.signed_contrast.shift(1)) + behav["previous_choice_name"] = behav["previous_choice"].map( + {-1: "left", 1: "right"} + ) + behav["previous_outcome_name"] = behav["previous_outcome"].map( + {-1: "post_error", 1: "post_correct"} + ) + behav["repeat"] = behav.choice == behav.previous_choice # # to more easily retrieve specific training days # behav['days'] = (behav['session_start_time'] - @@ -600,13 +769,13 @@ def dj2pandas(behav): def num_star(pvalue): if pvalue < 0.05: - stars = '* p < 0.05' + stars = "* p < 0.05" elif pvalue < 0.01: - stars = '** p < 0.01' + stars = "** p < 0.01" elif pvalue < 0.001: - stars = '*** p < 0.001' + stars = "*** p < 0.001" elif pvalue < 0.0001: - stars = '**** p < 0.0001' + stars = "**** p < 0.0001" else: - stars = '' - return stars \ No newline at end of file + stars = "" + return stars diff --git a/notebooks/notebooks_tutorial/202105_public_data_release/Replication of Figure 2a and b.ipynb b/notebooks/notebooks_tutorial/202105_public_data_release/Replication of Figure 2a and b.ipynb index ec2331e1..90ea617f 100644 --- a/notebooks/notebooks_tutorial/202105_public_data_release/Replication of Figure 2a and b.ipynb +++ b/notebooks/notebooks_tutorial/202105_public_data_release/Replication of Figure 2a and b.ipynb @@ -2,19 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connecting dbadmin@datajoint-rds.cyuksi65nrdq.us-east-1.rds.amazonaws.com:3306\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n", - "Connected to https://alyx.internationalbrainlab.org as vathes\n" - ] - } - ], + "outputs": [], "source": [ "\"\"\"\n", "Learning curves for all labs\n", @@ -100,28 +90,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "findfont: Font family ['Arial'] not found. Falling back to DejaVu Sans.\n", - "findfont: Font family ['Arial'] not found. Falling back to DejaVu Sans.\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAALoAAACKCAYAAAAddFBcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAy0ElEQVR4nO2dd2AUVdeHn63Z9AoJIYU0QmIghNAVkRpQBEWQolEUBAWDirwqIiJF9HuVrlIERECQIoggvRl66D2E9N7rZpNsm++PvCxGCEkgFGGef2Bmbjmz+8vdO3fOPUciCIKAiMgjjvRBGyAicj8QhS7yWCAKXeSxQBS6yGOBKHSRxwJR6CKPBaLQa8mkSZMIDw+vcq5Hjx4AbNy4kR9++OGmOtevV0d4eDiZmZl3bNPu3bvp3bs3zZs3v+maTqejZ8+eVexauHAhgwcP5rXXXiM1NfWO+vzwww/v2N4HiSj0WqDVaomOjsbS0pL09PQHbY6J1q1b8/vvv+Pi4nLTtbVr1+Lt7W06jouL49ixY/z6669EREQwc+bMO+rzTus9aOQP2oB/A3/99Rddu3bFy8uLrVu3MnLkyDrVj42NZerUqRiNRmQyGbNnz8bBwQGoHGUTExMxMzNj1qxZaDQa3n//faTSyjFowYIFpKSkcPjwYUaMGFGlXXt7+1v2V1paSmRkJL169TL9Ypw4cYJnnnkGgDZt2vD555/fVO+TTz5BKpWSnZ1NaWkpQ4cOZdOmTRQWFrJgwQKcnZ3p0aMHu3fvRqvVMnnyZJKSkpDJZEycOBEfHx+++OILkpOT0ev1TJgwgRYtWtTps7pXiCN6Ldi6dSv9+vWja9euREZG1rm+m5sby5cvZ9WqVYSFhbF69WrTtdatW7N8+XJatmzJ+vXrOXPmDKGhoaxcuZIVK1ZgaWlJQEDATSK/HUuXLuX111+vcq6wsBAbGxvTsdFovGXdZs2asWTJEvz8/Dh37hzLli2jb9++bN++vUq59evX4+TkxOrVq1m5ciV+fn5s2LABT09PVq5cyfz585kxY0atbb7XiCN6DZSUlHD69GkmTZoEQFpaGtHR0TRr1qzWbWRmZvL111+jVqspKSmpMqe+PuIFBwezc+dOhg4dSnR0NOPHj6dRo0ZERESgVCpr3Vdubi6XL19m7NixbNy40XTe1taW4uJi0/H1X4x/EhgYCICLiwvOzs6m/0dHR1cpd+3atSrPIDKZjJiYGM6cOcPBgwcBUKvVtbb7XiMKvQZ27NjBqFGjePXVVwE4evQof/zxR52EvmrVKvr06UOfPn345ZdfuHz5sunaxYsX8fDw4MKFC3h5eWEwGBg7diwAEydO5NChQ3Tt2rXWfcXExFBQUMDw4cPJzs5Gq9XSrFkz2rZty4wZMxg2bBinT5+ulf0SicT0/3+6RPn5+REVFcWTTz4JVP5C+Pr64unpybBhw4DKZ5uHBXHqUgNbtmyhU6dOpuPQ0FD27dtX7U//rejevTsLFizg7bffJiYmpsq1M2fO8Prrr3PixAkGDBhAVFQUQ4YMMa3IhIaGcuXKFZYsWXJTuydPnmTYsGFkZ2czbNgwdu3aRceOHVm7di1Lly7ljTfeME25fHx8aNWqFYMHD2b27NmMGzfuzj8UYODAgWRnZzNkyBBee+01rl69yssvv0x8fDzh4eGEh4cze/bsu+qjPpGI3osijwPiiC7yWCAKXeSxQBS6yGPBA111SUlJYcGCBajVaubNm8eWLVs4fvw4Wq2WL774AoApU6agUCho27Ytffv2fZDmivyLeaAjuru7e5WXCrt372b69On07t2bXbt2sWvXLsLCwpg+fTr79u27ZRvz58/H398ff3//+2W2yANErysnL/UccVFr6lTvoVpHv75u6+rqalqGuy5gmUx2yzoRERFERESIQv8XY9RVYCjKBIkEmXUDpEpzLu2bz7WjKwCQyhTIzaww6ivQFKZj3cAbu0aB+LQdUus+HiqhXycjI8P0Vi4zM5OAgIA6rVuLPDxk//I+xnI1Zp4hKOwbI7VyQGZhh8TMCs35HRTs/QFddixy28rv21CcTZ5SSZqFFQESFeaNg5C7NEVi2xAMBog/jjbpLMZrp2BQ7dfpH+g6ekFBAbNnz+bIkSMMHDgQV1dXTp48SUVFhcnpaNq0aSiVSkJDQ287R/f39+fq1av3y/R/BUbBSFZxHHG5J9EZtNhbuOBhH4SDZeNbli8uzyU68zAVeg0V+lLKyvIR8tPwbdgOH+8wFBaVTmRSSe1mvGkJB9i37hUK/ALJLcvAuUJOQKECl8IyzNQlmHu3JdnKBqmNM21e/BKJREJ2QhSHVo7k6fDFWCutqUg5izbtMrrsOJBIsGwehsrvKWQWdsisHGr9WTwyL4xEoVelQJPJDwdHUFpRgLdtEIqKcgrLc0iqSMHR2oOWbmG0dAvDxcaborIcopI2s+vSQrwNAdi4N4aseIxxJzDYOJCkUJOl0iNBgkJmxhOuXWjbpB8hbr2RSCToCtLIXfcJ5i168afsEjnqJNQV+eQXxtECD5o/+QGOlu7E557iZPJWMoqvoTdokSAh5HwpRqmEMicbjJYW2Cdkk+hrTbpKTTPnp3i38zJk0rufeIhCv8+UxUdRdvUQEoUZUjMLZJYOKF0DULo0veu2NdF/URK1jsSEvWzw1tHBqi3ts6RoLuzEzKMlUjNLypLOkO5iT7yXK9GSDIoMxdionPCybUnnhT44lijRZxRCq0wcPnkHlV9LAPTFORTtX0jGXz+Q/EQgUU46vJzbMqDJcLJnPo9lSF8O5e4lTlJMK+cwjOXluJ3ei3vPX1DYuCOxUGDIUmNIKsCsmx+GJuaU5icT+WM4XSN+568fhyIIAk+8NAVHl0CszOxZcPAtGlg1YUjrqXf92YhCr2f0hZmUHP+V0nPbMGrLsAh4BrmDG/qCdDSX9qAvysSqZR8EwYhQrsZQmk953DGchy/DquVzd9SnoNeSu/5TSk7+hrzLm2y99DONVW40V7lh594S284jkFnaVZY1GtBc3ofmyn400RfQXUrFzM8N+algdLo4JF0zsQz8D2VbSpFcyKC4R1MS2nsilUnp1sMPqV5D8tZFRB5NJN19C1YaPT2C36JR19HMW9UZ/2QDTuVGSmV2eJwPxNWsC1JHC4RSLdKGVsicrSn78wo2n3Un3fEMWXFH6ThkHnqtBolUhkxuZrqvMm0xX23tQ6PiRlhYOaBzlFBgyEEpU/FMg0EEB/Wp9WdUK6GXlJQAYG1tXcev4P7xMAi9LPYo6d8NxLJ5GFYhfZGYWVJ25QD64izk9m6omoSgDOpOiTYfR0u3G/XijpM+9wWchy3EqlW/W7YtCAK5iSfQlhVhNOgozomnMDOa4rR48nLUOFk2pev7X/Hz9jexjk+hefsRXD28DI8WfWj57KfIFSoMGcVgqWT3wUTOHEygz/5rSBUy7HUVyN2lFE0I4+w1LRcvZOLkZIGj3kCb7dGUBzpzMrgx0qJyunjbs+p8Jt5ecsovf4pgXoFgyCe9YQO8swrp7DIN2fIk4n22UdHcCfMuM2ke7Iql1Q1XY93lLArG/s7lVjtx7fYcTcOGV7lXTamWy5eyaJheTPmCzcT306DPLEUoFGg09gWSy+M5fmIx//fGsVp/N9UKPSsri2XLlnH06FHMzc0RBIHy8nI6dOjAm2++aVoVeVh4kEI3lORSFLmM7F2ziOrdkxTysDSzp32T/rT36m8qpzOU833kCGJzThAW8A69A0cjl1UKoDz+BKkzn8X+o51cOvADBr2eohIpvm0H0jSkI/vWfkhqwkns7PxQV2RRJC8h3ywfSUVjfCXekHeWuIahNMmNxNr/S1r7PYni2+1ctvmNUttCPDLaYV5oRbFZHnG+ifhU+OFn35fEF4L44/fLKBQyFEoZoW3caNXaDVtbFQDGwjLyh/2KxMGCsrPplEokaDsqSPJYR+Pm/Si37k9e8iqKzy3BJeZ5bNSBnOrsQWnpZeyNv6P3nIlarWXU6PaYWyhITCjg2JEkYs+m4Wf8mJbHXyS+ZSsyW7ph0BuxuJZDg5gcbB00NFL8hc3L7uBYTGb8Gawzc4nBj1iJO08dtyZg1bxaf0fVCv3TTz9l0KBBBAcHVzl/9uxZ1q9fz5dffllnQdxL7qfQBUGgIvkcZVf2o7myj7KYw5S36sZvzjk0dmxOt2bDKS7L4ZeTnxLe9v9o7toVnaGCRYfexkxuyYvBH7Pm1CTic09jJ1jTpNiSdgFvkbFtFvmSIp7o+TGHj5UgNeQhKdiFQsggW2hHhvACBb6/YG+nJbi0JQ6ZJchfaM1fcctRpubjk1hErk0QbVUf47zqNGfaOpPp5YBlaiQSVTQGWT5mgjWBae7Eue7juQmRxBi1bLtyloYGFW927lbFB/06+pwSkjedwv2FUKLP/MqVPTOxS+2Ire1TeFjaU5yUgywxn42hAtltm1Im13OhIpF3kpfRf8Jxdu9N59rVXGQyCWVlOjo+1QRvu8NEbZpKu6AsJEmN2S37CJVZQzqtiMd8WCu0dhGkFZnjGNgRa0cvVmwoomlhDn4+FZSoUmmoPk/jsQm1/s7EOXotMeoq0FzajfrU75Se345UZYVFYDcsmnUm392L76PG8OwTEXT2DTeJJT73ND9EjqBdkxc5kfwHTRu25432s5BJFQiCQHZeDAcXvUG6UIxMa4lZhT1qSU9U7h2wsFSQEpjNn/Hn8dSk0MXfjaKy0xTrIDKnCfOOLOHKqwuJEqSU7onhGX1DglTF6PaXoZRZ80c/S64KZhQIpTzZrgnjWnenpFCLpZUSpUzKyc2fcawgg7W2/gxLjaSoKJPB4/fS2Ormfag7ki7x1r5VvCDX0jrhAKvduzFR1o2r6amcz0ujgbcLoW2C6dqyFeZyBQBHMuI4uPRVXuo3CZ+g3hw/koiNjYKmTa0ovfgJcWe2U0oQHV9ZQvKuT1Bkb0Oz6RUaThiD0v0QmriFxChXEx9XSLIil8TUAmaFPUnZxztQ9vbn/NFkOq19tdbfX62EfuHCBebPn09xcTFDhw59KH1O7pXQDWXFFO39gYKdc1A2aoZV6ItYhvRB2dAHgMS8c3wfOZyXW02mjefzpnrpacVkZhajtblESkkUT/oMwtW2KVmaYn65GsXu2BOEnd8E2iAaPD+E09kf8XbIt6TM/BJt73mslEVhoZAQpDhJfskVnmj0DK62TWnXuA/xs8eQqdSyNbQ/AzeV4X6tHKuuTZFYKNG2dmFo+hZaNHBnWvu+lGjLGX1gNY0sbZnT6WXTH+H2y5FkrBqOT2B3jBVqknKTSPPoyMQhX5vuQTDqMeoKGHloO11cfZH9Pp4YvzDefvYDnC1u7D/VFZ5HHf0VFk3ewMylp+n8N0tHYiHoGN5nEEWnRmIsz6RCKyNP34GU5BJC+kzCvUUf+m5dwOSCZJxUi7jm+DzBmr04PLUFg3kwU6fsotRQwbDhbWjZtDG5fZZhzFFjPv9FbNp51Pp7rFbocXFx+PhUfpkzZszgo48+wmg08sorr7B+/fpad3C/uBdC1+UmkTKjM+ZNn8Kh70TMXANM17T6MrZenMvh+LWEt/2alm5hpmvnz6azacNFmnjZkxCfj4OjBW07enBCEs/q81H0M2hwT95EiT4UXa9wdmuiKSw6TjPpEcx1OnQyFQazxrgrFdjbNub1oM8wxhyl9MJOyvddQVXYBppfBt8YlAnjsJ8UgdTyxsOeIAhVpiBlei0Dti+mu3szPmjZnaSSPF74cwEzpMVIMy/RddQ60pPPsuPnEbQZ/QfKnFg0sb/jaIzEXJbGnIrOvO45kIzzm3nqhVEYNYkYKnKRmjlirMhDc20uFj6jKUteicIuBAvvkSidnib29DKitn1Dy6AS/nIcS6cmfYj7ZSTO/l04Yt2EawobDAjklKnZ+OwoUnMucebAANr7Potzq9msiTnBHxsvEiL35KPxldsJ1QuPoll/ngZ7Rt5ymlUd1Qr9+jaoUaNGsW7dOpKSktBqtRQXFzN//vxad3C/qG+h64tzSJnxNHZd38G+Z+UeTnVFAbujf+Rq1hHSi67SonF3BoZMwta8oaneocgE/tofR/jrwbg4myE3s2Zn1BU277qIkzoXP+kmrCoKCTjfBUezpjT8czgSiYS8cjWRqRcoP7oS16NpyHT+lOtKCbzQGIN1LNIQMGtuiy5/J1JfNeberyMUC2jLd+PU7QgSya19ga6TrSmh75/fo5TKyS1XM65ld94M6ACCEamscrqx/rve6DIvo5LpUdqAXutCWXkZNpallJdA86YlOLoHI7PyQWrWEKM2FwzlWAVORm7lg2AoozT2B8rTfkNXeAZUXhw8XI7jS99wRa9E2Pop5kF92GzhRkNza/p6BZNTVkIvzydw+9+UaWrUVlbHnKChuTU6o4HlnV/HRWmLrZ05AMZSLYakAhSBdVsMue3UJSEhgcWLF/Pkk08SFBREWVkZAQEB1RV/oNSn0MvijpO9/B0sg3vjNKDyoftQ3Bo2nfsvrdyfpY1nX9ztAjBX2pB6aReWDu7YNwog6lgye3dd49Whzpzf/B6lBSlorV1I0Bvxk0tRatV4Z3XG06EH1qOepGDEemy/fhZlsKup79INURR/u40K7+3oLC5i0/4NpFbR6I0noFiFhfu72PT+GIlUiSAI5P/VDZVbfyx93wVAMOpQX56KVNUIC++3kEgVprYzz02ktCwPzzbfI/+bk5yxIo+SS5MoSvyDCuv+NGkXwaqUbH6+egzbihLGONjgRg7Nun6KVFG7JWajrgSJ3IpLe+cSf3IdZcVZOLcezE/WfrRz8eKdoKdvOSILgkBhhYaccjXO5jbYmpnf0Xf4T24r9OjoaFQqFbGxsezdu5c333wTPz+/ahtLSkrC09MTtVrN5s2beeaZZ2jc+NZ+FfVNfQhdMBrI/PENNNEHsH52PA26RyCRSCgpzebn+R3wd+6Au09nPIKfx8LWhcQzmzm6YRJGo4DUZzqxySr6dskh7uC3tAj7iK1yR84f28FYlyA82rdDfliDdl00jmteQaKQoV58DENaEbZTKqc9xuJycp9fht28F1AGu1KRe4zC4y9j4TUCC68RSOXOSBRVR259cTR5Bzpj3eK/mDXsQuHJt5BI5SAY0ZfGY99+LQq7lhh1RWRv80GmcsG8yetY+f8HvToOTdwPaBJ/xtxjMNZPTEeqtDO1/fmxP9iVcpkjAz6qtX9LdVRoClGa29ZpulGfVCv0iIgI7OzsqKiowNfXl2HDhvHTTz+h0Wj44IMPbtnYa6+9xooVK5gxYwb29vYcOXKElStX3tMbuM7dCN2gryAn8QSZkUspSDhBiaUtZcVZeAQ/T+jzk9m6dAAlgpqnn/qInITjpFzYhrNvJ1KuHKK0wUSe8Csj9dAcLOSOyBuY0+rFL5mXlsSRjDh+2eaK5EIW8qYN0Mfl4fDTIBRNG1T2m1VCzgvLsP2lEdrCA1ScP40s/xns3h6DOmYW5cmrsW39IyrX2z/8l2fuQBO/iIrMXVg0eR2blvOQSOVoEpZQGvs9Tt2iKI2dj67gFDYt/kve/qeQyK0wVuRh7jEUS7/3kVm43dSuUTBSWFGGg8ryjj7Xh4lqvWUyMjKYPn06xcXFzJ07F6VSyahRo8jIyKi2set/MwUFBXz66accOXKk/i2uJwRBIDfpJNeOrSI9ei/W9h7Iks7SqNu7tAx5AStHT05t/pzfZ7SjxE5J60Ez8XLviVer/jzRfTxbfppLicPHDHvnJZRmci6sPosgE2gY3ZLpNsfIdVWwzuFZjMmROO1/h/LdMSCVmEQOIHO2RjpgL8UnY5EXd8N4LBDZ0BNk72iGhfdInHqeR6aqeS6qcumFyqUXgmCoMlc3bzKcstQNlF79Fk3CYuzar0dm3hjHZyIxaJJQOHa47dxeKpE+EiKH2wj9/fffZ8KECVhYWDB69GjT+UaNGlXbmEqlYvz48QQFBQFgMBjq0dT6o1ydS+TPI6gozaNpx2G0fPZTCpa+harzaByf+9RUrv3LM7EN6Mjya18xrHHlU39JSQUrf47B0rofr70SgtJMjj42F+d0f7LX9mHBzDW8v0CO8/Tn0Mw5ivWHTyMxV2De94mb7NAkrURoch7jjDeQhbXBbtpTyBrZ3CTY2vLPOhKJBNuQ78nZHYzSvjVKh9YAyCzckVm417n9fzP1+sKovLyc+Ph4AgMD0Wq1xMbGmkKc1Zb09HSmT5+Ora0tXl5eNGrUqMo+UgsLi1vWq+3URRAEIpe/gXUDH1o++ylSqQz1mS3krvsEz2lnkMirhn/bcOZLpBIZ/Vt+gl5vZN6sgzwR5EKPXk2RSivnm+oFR4hLSiG8RQxfduhHWLEThWN/R+Zuh8PKIUgkEowVeegKz6Bs8DQIRjSJy1Ffmoz903uQlXkia2RzK3PrhbLkNcgsvVA6tr9nfTzsVDuiv/feezz//PM89dRTqFSVfg/l5eVERkaydetW5s274WewZcuWKnXj4uJM/6+r0GNiYggLC6Nfv368//77XLx4kXnz5rF//3527drFCy+8UKf2/sm1oz9Trs6j02s/IpXKMOoqyFnzIQ3D55tELggCe64u4XjCRgrLsvioR2UMw8j9cdjZm9Ozd9MqD1V5f17kv52y+bXXCAIdKn/xnDYNQzDeWM8uPvcB2txDGHVFSKRmKOxDsX/qT5R2zcHurm6pRsw9ar/l7FGlWqHPmDGDdevWMWzYMIqKigCws7OjZ8+eN0VJTUpKqjeDgoODGTt2LL/99hv9+vUzRa/9+z7SvzN//ny+++67WrVdkpvIxT1z6DF6k2ntuHDXXJSNA7FsfuOFz96ryziWsJHBoVPwdmqFTConN6eUyL/iGTuuUxWRx1+IpTy7kHeGDjKJHEDqcOOXR1dwmorsvTQIi0YwlCLoipFb373/uUgdEB4ylixZIkRFRQmCIAgRERHC2LFjBUEQhP379wubNm2qtl7Tpk1rbPvQqtHCxb3zTMf6kjzh2pgGQkXmNdO56MzDwviNoUJOSbLpXFmZTlj0fweEg5svCUaj0XT+RFq88MMbXwknx/1SbZ9Go1HIPdBdUMcuqNE+kXtHvW6OPnfuHLNmzaqSrmTnzp11aqNTp0589913bNmyhcaNGxMYGMjkyZOr7CO9E/JTz5OTcJx2A78xnSs6+BOWLXqjdPYFIK80lSVHxvJmhzk4WVU+rKlLKvj5+6P02XQelURC9pRdyP2cSHORIj2RQlgjJzw+71VtvxVZOzGUp2HhVfv45iL3gPr8qxk4cKAQGxsrvPrqq0JsbKwwb968mivVEzWN6Pt+HCrEHFlhOjYa9EL8eB9BE3dcEARBqNBphGnbewu7riw2lSksLBP+O2OfcOa9zULBh38IgiAIhqIyIS3yivDZe9OFq/vO1mhX7oHuQmniyju5JZF6pF4DGKlUKnx8fBAEAR8fH86cOVOfzd8x+WkXKclNwKftYNO50vPbkVo5Ye7dFqNgZGXUxzSy8aW7f+XIW1RUzqLvj9LWvwGNjidh9X5l6GipjYpp+tPYvNaGpl2Cb9nfdXRFF9GXXMbc/eV7d3MitaJGoaekpDB27FiGDx+OXq/np59+qrasQqGgvLycJk2aMHnyZNMWvAdNTmIULn5Pmx5AAQr3fI9999Fo9WUsOvQ2BZpMwtv+HxKJBIPByNJFx2nd1p2WF9Ix7/cEcjc7AA6mX+Nsbgrvtnimxn41sd9h4f02EmntM1aI3BtqFPqkSZMYPXo0Op0OuVzOgQMHqi27dOlSVCoVkyZNolOnTixYsKA+bb1jcpNO4+QZajrW5aVQnnASs1YvMHPvIFRyK97rshKlvNKB6MypNCwslbTPU6M9nIjV2x2AylfiU6L+5PO2z2Euv714jdp8ylLXY+Fdt8ReIveGGh9GJRJJjWlArl27hp+fH6dPnzadc3BwIDk5GScnp7u38i7JSz5N8x43/HM0l/dg8UQ3TqRvw1xpw7D2M01LhgaDkT27rjHEzRr1wqM4/DwY6f9cRPemRCOTSOjlcfNbzuto846iiV+MLv8EKtd+tXqFL3LvqVHotra2bNu2Da1Wy549e24p3P379+Pn53fLDRmtWrWqH0vvkLLiLHQVaqydbuTc1Fzai3lgN3ZdWcwrbaZXWRc/fTIVD4mAavFx7JcPQu5R6SctCALfnT/Auy26VOuBZ9QVUXBsEJZ+72Ph9RYK+9BblhO5/9Qo9OnTp7No0SJsbW05e/YsU6ZMuanMyJEjMRqN+Pv7mxI1PSzkJp/GyaOVSZyCIKC5vJf0Tr1QVVjStGEHU1mNRsue7TG8dj4NqzEdqzhgHctKIL9Cw7OeQVXaFwxlgASJTEXJhQmoXJ7Fqund5QcSqX9qFHpFRQXjxo1DIpFUOvrn52NlZXVTOalUakoe9TCRm3waR48bvyra1ItIVdbsTd9IWMDbVaYsq5afoltpOSpLJRZDQkx19EYD357exejmnZH9LW2hXh1PfmR3BIMGM9e+VGRsp0HPC/fv5kRqTY0Po9dFDpXz9dvlgpfJZIwcOZLvv/+ehQsXsnDhwvqz9A7JSzqNk8cN0Wou7yUuKACNtogQtxsvejZtuIiFQcDzUAK203ohkd6Ynkw7sQ0zmYKBvjf+YPTqOPIju2Hp/x8cuxxCqrDHrvXSKhsXRB4eahzR/xmu+Xaut9dTcF/nQe0muY5Br6Ug/RKO7i1N5zKubGObaxrvdfgVqbTSrTUluZCY6GxGO5kj6eKLvMmNkA+rY6LYn3qVP/qMRv6/8oIgUHj8VSz9PsDS5x0AbFr83/27MZE6U6PQ7e3tWbduHe3bt+f48ePY2tpWW9ZoNPLSSy+Zjrdt21Y/Vt4BBr2Wqwd/xMrRE4Wqcp+jQVfORrNLdPN7H0+HG9mbIw/E81QHD7TT92C/9MbLnYzSImac3MHm597BzuyGk5Y25wBGfREW/9unKfLwU+PUZfr06SQlJZn+vV1+982bN1c5/mf++PuFOi+JbTO7kh1/nI6Db7gTX7u4jlJzM3oH33hYLCgo49rVHIJz1CgCnVH43VhVmnlmN0P82uBj26BK+6VXv8Gq6YdI7nIfpcj9o8YR3cbGhv/85z+3LbNy5UpWrlxJVlYWYWFhCIKAVColJCTktvXuFZnXDuLoGUrHwXOrnI9L2ouXws00ZYHK8BStW7uh/fEoNl/cCL4TXZDJ7pQrRPYfX6UNXeF5dEUXsO+46d7ehEi9UqPQf/75Z1asWIFcLjcFxvmnR+L1lNjLly9/KFZdSnITsXO+2d87Of8C3m5Pm47Ly3Wcikrh3VBXJNYqlG1ubC/76uQOIlp0qRJuQRAE1FemYuk3FonMDJF/DzUKffPmzWzfvh2lsmZ/jYdB5AAleQk4eVZ9USUIAmnGHHr4Pms6d+pEKj6+jvDLaSzHPGl6eL6cn87FvDQWd60a26/02mz0pQnYtvn53t+ESL1So9B9fX3vhx0mjEYjc+fORa1WExQUhFwur9We0b9TkpuAlZNXlXOlGZcoUEnx9OwMVAr/6OEkBnjZgcGI2TM+prKLLx7ijcAnMZPd+HjKM3dQGjMLp65HkMofjZ3xjxM1Cj02Npbu3bub4jBKJBKWLVt2zwzau3cvmZmZ2NnZ4eLiwpo1a+q0Z9RoNKDOT8HasUmV8/HRv9NAsETxvylHXGweEsD6j8tYvNXetG6eXlrE7pQrfNHuRjaFiuwDFEW9jn3H35BZ1D6wpcjDQ41Cr0ucxTfffJMBAwbQo0cPFApFzRVuQUJCAiEhIQwePJixY8feMvfoP+37+55RTWEaKksH5MqqocwSUg/hbn1j1D5yKJEurtYY96lRhd3IUfrT5SMM8G1lWk6syNxF4YnXsGu/FqXTU3d0TyIPnhrXxxo3boxMJiM7O5usrCyysrKqLTt9+nTi4+MZNGgQX3/9dZVoALXF2dkZG5vK0A/Sv71u/3vu0b8TERFRJcxFSW7iTdMWgOTSWLwadawsU1xO3LU8PE+lYhEeikRe2U+ZXsuaaycYHvgkABU5kRSeeA37Dhswa/hMne9F5OGhxhH9u+++49ChQ6SmpuLm5oalpSVLly69ZVlXV1feffddRowYwZQpU+jXrx+tW7fmnXfeoV27drUyqGfPnkybNo1Tp07Rpk0bbGxs6rRntCQ34aZpi6G0kAxFOX19egNw+XI2zRtZo18dg/mM3qZy25Iu0dLJDQ9rB3SFZyk89jJ2bVeJI/kjQI1C/+uvv1i/fj3h4eGsWLGC8ePHV1s2Ojqa9evXc/78ecLCwoiMjMRoNDJmzBjWrl1bK4PMzc1vein1/PPPV1P6ZkpyE7D+x4ief3o9RRZyGjtUxpi5fDGLTkn56Hr7cKAggS4WlXFafo05wesBHTBq88k/3BebkO8wc+5e675FHl5qFPr1VQ5BENDpdCQkVJ83ZtGiRQwaNIhJkyZVOf/ee+/dpZm1pyQ3AWefjlXORR9bhKuvB3KZEq3WQPKVLIQDV3hrhJa8I+d4L7gbTzbyIaYwi57uARSfGo6qcX/M3QbcN7tF7i01Cr1Lly6Ul5czYMAAevXqRY8ePaot+95779GkSZObwkZ37Nix2jr1zT9H9PKksyRKcvD3fAuAy9FZhMakkPNkA/58+zXii3Lpv20R7Vya8KJ3S4zZO9HmHcGpx9n7ZrPIvafGh9Fhw4ahUql44YUX2LdvHxMmTKi27PU59Lx58yguLuaTTz6pP0trgdGgQ1OYjpXjjSXAov2LSHdvhL9z5QaLg6sjaZpVRrvpg5FKpPjaNeSLdn3YnnSJIe7OFJ16G9vQxeJa+SNGjSP6sWPHWLFiBcXFxaaw0L/88sstywoPOGx0aUEq5jbOpuzDhrJiCk6sI7WTE7ZvXiC2SSbdT+Wg+qgzMhsVglGHJn4RzzfoQlCvgdidHYRlwKeYNexyX+0WuffUKPQvv/ySb775plYJdB902OiS3ESsnZqYjov2LaSwRXsaFBch69KCPdFJNGjpzEsvV+7lLI2ZRVnyKtRX/4uNtgCLJ6aZ/MtFHi1qFLqbm1uNUQCuM3/+/Cphoz/77LO7NrAuOLg1p0XYR8D/RvMds8js/RruB2JZiIbE9lJ+GlHpb64viUEdMxOnblHILNwxlCYht/K+XfMi/2JqFHr//v3p378//v433h5+9dVXtywrlUq5du0aBw8eNE1j6ho2+m5QWTmhsnIiqSSPkys/wMUjhItJp2hQ3pYTQYlM7dcHuVyGIBgpOjUS64BJyC2bAIgif8SpUehz585l9OjRtZq6fPDBB3h5ebFv3z66dOlCfn5+vRhZVxZFbeXlc5vZ13kKWbrvKHJ9jefbe9LWuQkAmvhFCEY9Fr6jb9+QyCNDjUL38vLi2WefrakYAEVFRYwfP55z587xn//8h4iIiLs2sK7klqkRjq3GLvhZWiVJybJx5POIIVj+L+GsQZOC+tIXODyz/47Sp4j8O6lR6AaDgbFjxxIQEGBysHr77bdvWfa6b4pSqeTcuXPEx8fXo6m1Y8WVo7yYfZnMoOWczv6Ktk0GmEQuCAJFp0dj4RuBwub+TalEHjw1Cv12L4j+yZgxYygvL+e9995j4cKFVZJ83Q/K9TpOHltLiDKYa3viSQ5NZXTPG6so5Sm/YtAkY9/xt/tql8iD57ZCNxqN7Ny5s9bxWdq1a0dRURFKpZIffvjhplAZ95rzeWkMyIkmwfFdZNottLPohUpRGWzJUJFD8bkPsX/ydzG67WPIbd+MSqVSXF1db+ua+3c2bNjAqFGj+OijjzAYDLzzzv1dkw61tKFpZhLZ2VIuup2ie9cbPjbFZz/A3GMoSoe299UmkYeDGqcuBw4cYN26dbi4uCCVSm+5Ofo6GzZsYPXq1bz++uvIZDLKysrq3eDbocuOI73ZBzQoPIKVPhAbQyy5ewdj0CQhUTpi2y3qvtoj8vBQo9D37dtX68ZkMpnpjwFujvJ1r1F5t+GqUUO68wqG+z1PYdRr2IYuQmHfBqnKWYzD8hhTo9C1Wi3r1q0jPj4eLy8vBg0aVG1EgN69ezNq1CjS0tIYO3ZsrZcl/4lGo+HVV18lIiKChIQEUlNT0ev1TJky5bZh7rKz1VTkROLlqcNavQyHp7ahsH8wsWVEHi5qzBw9btw4fHx8aNWqFadPnyYmJoa5c+dWWz4uLo5r167h4+ODn5/fHRk1d+5cLCws8Pb2Ztu2bcycOZNVq1bRrFkzWrduXaXs3/eMHjl8mkXr+jLQMRfXNqOx9B51R/2LPHrUOKLn5OQwa9YsADp06EB4ePhty/v4+JgiBtwJhw8fxtfXl4qKCkpKSnBwcAAqt+n9Pa3jdSIiIoiIiMDf358yXQIVyhSszXIxdx96xzaIPHrUKs/oqVOnCAkJqZK65V4RFRWFRqMhLi4OqVRqCmqakZFRxd/mVqhSjbyi98PcoxtShfU9t1Xk30ONU5fExES++eYbEhMT8fLyYty4cXh733sHqI0bN2Jvb09iYiJpaWlotdrbztH9/f2Jjr5M9jYfHDpuEufmIlWodkSfOnUqn3/+OYcPH+b777+vVWP5+fls376dwsJCk/fiu+/eWWjl/v3717mOLvcIMpWLKHKRm6hW6OfPnycqKorffvuNwMBA/j7wV5eAa/To0XTp0gV3d/dbXr/XKBzb4fDU1gfSt8jDTbVC//DDD9m6dSvZ2dmsW7euyrXqhG5ra8uoUQ9upUMiVSIxe/DpHkUePqoVeocOHWjXrh1t2rSpdVyVhg0bsmLFCp544gnTXPpBp18UEYEaVl2kUinbt2+vtdD1ej1XrlzhypUrpnOi0EUeBmpcdZkwYQJKpZKQkBBkssqNCnWJnHW/8Pf3rxKDUUTk79S4jt64cWMAUlNTa2zswoULTJ06leLiYmxsbJg0aRItWrS4eytFRO4WoZYUFBTUWGbw4MFCcnKyIAiCkJycLAwaNKi2zd81TZs2vW99ifz7qNGd76+//qJfv3688sor6PV6Pv7442rLSiQS09Kiu7t7lbDPIiIPkhqnLgsWLGDt2rW89dZbyOVyMjIyqi3r6+vLxIkTTe4Cd+PzIiJSn9QodIVCgUqlMi0XCrd5dp06dSp79uwhISGBrl270q1bt/qzVETkLqhR6CEhIUyePJnc3FxmzJhBaGjobct37y7GExd5+Khxc/SwYcO4cOECHh4e+Pr60rlz5/tlm4hIvVGt0Ldu3cqsWbNo2LAh+fn5TJ06lfbt299P20RE6o1qhb58+XL++OMPrKysyMrK4uOPPxaFLvKvpVqhW1hYYGVVGRPF2dn5tg+h9cmePXs4cOAAarWaAQMGEBMTU+s9oyIi1VGtC0Dbtm1Ncc4FQeDSpUum43uZUPc6RUVFfP3112i12tvuGb2O6AIgcjuqHdE3bdp0P+24iQULFjBgwAB27NgBVL9n9J8JdUVEbkW1Qr/u43K/EQSBb7/9lqeffprmzZuzZs0aoPo9o9c3R4uI3I4avRfvNytWrOD3338nKCiIgIAAysvLa7VnVETkdjx0QhcRuReIXlcijwW1iuvyb6Km2C8ijxa1XWl75IQOtb/52lLfS5f3Yin0cbWxtohTF5HHgkdO6HcaMOl+tinaeP/bE1ddRB4LHrkRXUTkVohCF3kseGRWXTQaDVOmTEGhUNC2bVv69u17x22lpKSwYMEC1Go18+bNY8uWLRw/fhytVssXX3yBhYVFndq7Fx6ZcXFx/PzzzxQWFtK+fXusra3vyka480wj1XH8+HHmzp2Lr68vzz33HJcuXbqrNo1GI3PnzkWtVhMUFIRcLq/1PT8yI/quXbsICwtj+vTpdcq7dCvc3d2ZMWOG6Xj37t1Mnz6d3r17s2vXrjq31717d6ZPn86UKVP4888/uXTpEp9//jlNmzbl1KlTd2Sjj48PU6dOZc6cOZw+ffqubQT48ccf6d27N0ajsV5slEgkWFhYoNVqadiw4V23uXfvXjIzM5HL5bi4uNTpnh8ZoWdlZdGoUSMAU0Sx+uL6yFOXVJS34rpHZk1ZPGrL3r17GTlyJJ07d75rG69nGnF0dKxVppHa0Lp1a5YsWcL48eP54osv7rrNhIQEQkJCmDBhAmvWrKnTPT8yUxdnZ2cyMzMJCAi4Z9nwMjIycHZ2rnO9unpk1pZu3brRrVs3Ro4cibm5+V3ZeDeZRqrjelwfGxsbrK2tKSgouKs2nZ2dUSgUpravLxjW5p4fmeVFjUbDtGnTUCqVhIaG3tUcvaCggNmzZ3PkyBEGDhyIq6srJ0+epKKigs8//7zO89974ZF5/Phxdu/ejVarxd/fHxsbm7uy8Tp1zTRyO3bt2sWhQ4coLi5myJAhXL58+a7aLCsrY9q0aZibm+Pt7V2ne35khC4icjsemTm6iMjtEIUu8lggCl3ksUAUushjgSj0e0BJSQnh4eGEh4fTunVrBg0aRHh4uCmiQXV8+OGHt72+ceNGDh8+XG92bt68mfnz59dbew8z4qrLPSY8PJxvvvkGFxcXAAwGQ72/0LpTNm/eTHJy8mMRReGReWH0MJOamsqYMWPw9vZGLpfTr18/vv/+ewwGA7a2tsyZMwczMzN69OjB7t27OX78OD/88AN2dnbEx8czevRoevfuzfz58/Hw8KBfv3706NGDnj17cu7cORo0aMDs2bMxGAx89NFHZGVl0bJlS3bu3Mnu3bur2BIbG8snn3yCg4MD5ubm+Pr6AvDNN99w/vx51Go1gwcPZtCgQbz//vuMHDmSwMBA0tLS+Oyzz/jpp58exEd414hTl/tEWloakydP5quvvqJFixasXLmS1atX4+3tzfbt228qX1JSwqxZs1iyZAk//vjjTdcNBgN9+vRh1apVFBUVERMTw969e7G0tGTVqlV06dIFg8FwU72ZM2cyceJEFi9ejLW1ten8mDFjWLlyJWvXrmXZsmXodDoGDRrEhg0bgMpp04ABA+rxE7m/iCP6fcLPz88UyzI2NpY5c+ag1WrJzc01nf87zZo1QyaT4ezsTElJyU3XZTIZAQEBADRq1IjCwkISExNp3rw5AMHBwbe0IykpyZRALTg42ORzsmbNGvbs2YNMJiMvL4/8/Hzat2/Pt99+S1lZGfv373+gyZLvFnFEv0/8fV6+YMECIiIiWLVqFV27dr1lANe6vh4XBAFPT08uXrwIVGYIvBUeHh43lSkqKmLjxo2sWrWKpUuXYm1tjSAISCQSwsLCmDJlCq1bt0apVNbJpocJcUR/ADz33HNMnDgRLy8vrK2tbzmi3wndu3dnx44dvPrqqzRv3tzkAPV3xo0bx6effoqdnR329vZApdOVj48PQ4cOxdvbGzs7O1P5l156ic6dOz/wWJx3i7jq8oih0+lQKBScOnWKxYsXs2jRortqLzc3l3HjxrFixYp6svDBII7ojxjjxo2joKAArVbL1KlT76qtw4cPM2fOHMaNG1dP1j04xBFd5LFAfBgVeSwQhS7yWCAKXeSxQBS6yGOBKHSRx4L/BxNQAKu87JRMAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot all labs\n", "fig, ax1 = plt.subplots(1, 1, figsize=(FIGURE_WIDTH/3, FIGURE_HEIGHT))\n", @@ -138,27 +109,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "findfont: Font family ['Arial'] not found. Falling back to DejaVu Sans.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "\n", "###############\n", @@ -196,20 +149,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot all labs\n", "d = behav.groupby(['institution_code', 'training_day']).mean() # Binned by day\n", @@ -228,20 +170,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "number of days to reach 80% accuracy on easy trials: \n", - "12\n", - "number of trials to reach 80% accuracy on easy trials: \n", - "7375.0\n" - ] - } - ], + "outputs": [], "source": [ "# ================================= #\n", "# print some stats\n", diff --git a/notebooks/notebooks_tutorial/202105_public_data_release/one_example.ipynb b/notebooks/notebooks_tutorial/202105_public_data_release/one_example.ipynb index 5e6af5c1..ea2cedf6 100644 --- a/notebooks/notebooks_tutorial/202105_public_data_release/one_example.ipynb +++ b/notebooks/notebooks_tutorial/202105_public_data_release/one_example.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "66075ed9", "metadata": {}, "outputs": [], @@ -42,28 +42,17 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "0a8afc16", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'/src/IBL-pipeline/notebooks/notebooks_tutorial/202105_public_data_release'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pwd" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "c0771e0f", "metadata": {}, "outputs": [], @@ -81,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "6a30808d", "metadata": {}, "outputs": [], @@ -99,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "334bea32", "metadata": {}, "outputs": [], @@ -117,18 +106,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "5f77feac", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading session angelakilab/Subjects/IBL-T1/2019-02-20/001.\n" - ] - } - ], + "outputs": [], "source": [ "eid = eids[10]\n", "print(f\"Loading session {eid}.\")" @@ -144,18 +125,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "294ab7a4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Available dataset types: _ibl_trials.choice, _ibl_trials.contrastLeft, _ibl_trials.contrastRight, _ibl_trials.feedbackType, _ibl_trials.feedback_times, _ibl_trials.goCueTrigger_times, _ibl_trials.goCue_times, _ibl_trials.included, _ibl_trials.intervals, _ibl_trials.itiDuration, _ibl_trials.probabilityLeft, _ibl_trials.repNum, _ibl_trials.response_times, _ibl_trials.rewardVolume, _ibl_trials.stimOn_times\n" - ] - } - ], + "outputs": [], "source": [ "dset_types = one.list(eid)\n", "print(f\"Available dataset types: {', '.join(dset_types)}\")" @@ -171,19 +144,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "2583a373", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading _ibl_trials.choice\n", - "(1330,)\n" - ] - } - ], + "outputs": [], "source": [ "print(f\"Loading {dset_types[0]}\")\n", "choice = one.load_dataset(eid, dset_types[0])\n", @@ -200,33 +164,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "e6eb5cba", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading the _ibl_trials object.\n", - "choice (1330,)\n", - "contrastLeft (1330,)\n", - "contrastRight (1330,)\n", - "feedbackType (1330,)\n", - "feedback_times (1330,)\n", - "goCueTrigger_times (1330,)\n", - "goCue_times (1330,)\n", - "included (1330,)\n", - "intervals (1330, 2)\n", - "itiDuration (1330,)\n", - "probabilityLeft (1330,)\n", - "repNum (1330,)\n", - "response_times (1330,)\n", - "rewardVolume (1330,)\n", - "stimOn_times (1330,)\n" - ] - } - ], + "outputs": [], "source": [ "print(\"Loading the _ibl_trials object.\")\n", "trials = one.load_object(eid, \"_ibl_trials\")\n", @@ -244,23 +185,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "e80e6e6a", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "out = []\n", "for sgn, contrast in ((-1, trials.contrastRight), (+1, trials.contrastLeft)):\n", diff --git a/notebooks/notebooks_tutorial/202105_public_data_release/paper_behavior_functions.py b/notebooks/notebooks_tutorial/202105_public_data_release/paper_behavior_functions.py index 9e6c163e..64154e4b 100644 --- a/notebooks/notebooks_tutorial/202105_public_data_release/paper_behavior_functions.py +++ b/notebooks/notebooks_tutorial/202105_public_data_release/paper_behavior_functions.py @@ -4,37 +4,38 @@ Guido Meijer, Anne Urai, Alejandro Pan Vazquez & Miles Wells 16 Jan 2020 """ -import warnings import os +import warnings from io import BytesIO -from zipfile import ZipFile from urllib.request import urlopen +from zipfile import ZipFile -import seaborn as sns +import brainbox.behavior.pyschofit as psy +import datajoint as dj import matplotlib +import matplotlib.pyplot as plt import numpy as np -import datajoint as dj import pandas as pd -import matplotlib.pyplot as plt - -import brainbox.behavior.pyschofit as psy +import seaborn as sns # Supress seaborn future warnings -warnings.simplefilter(action='ignore', category=FutureWarning) +warnings.simplefilter(action="ignore", category=FutureWarning) # Some constants -URL = 'http://ibl.flatironinstitute.org/public/behavior_paper_data.zip' +URL = "http://ibl.flatironinstitute.org/public/behavior_paper_data.zip" QUERY = True # Whether to query data through DataJoint (True) or use downloaded csv files (False) -EXAMPLE_MOUSE = 'KS014' # Mouse nickname used as an example -CUTOFF_DATE = '2020-03-23' # Date after which sessions are excluded, previously 30th Nov -STABLE_HW_DATE = '2019-06-10' # Date after which hardware was deemed stable +EXAMPLE_MOUSE = "KS014" # Mouse nickname used as an example +CUTOFF_DATE = ( + "2020-03-23" # Date after which sessions are excluded, previously 30th Nov +) +STABLE_HW_DATE = "2019-06-10" # Date after which hardware was deemed stable # LAYOUT FIGURE_HEIGHT = 2 # inch FIGURE_WIDTH = 8 # inch # EXCLUDED SESSIONS -EXCLUDED_SESSIONS = ['a9fb578a-9d7d-42b4-8dbc-3b419ce9f424'] # Session UUID +EXCLUDED_SESSIONS = ["a9fb578a-9d7d-42b4-8dbc-3b419ce9f424"] # Session UUID def group_colors(): @@ -42,9 +43,25 @@ def group_colors(): def institution_map(): - institution_map = {'UCL': 'Lab 1', 'CCU': 'Lab 2', 'CSHL': 'Lab 3', 'NYU': 'Lab 4', - 'Princeton': 'Lab 5', 'SWC': 'Lab 6', 'Berkeley': 'Lab 7'} - col_names = ['Lab 1', 'Lab 2', 'Lab 3', 'Lab 4', 'Lab 5', 'Lab 6', 'Lab 7', 'All labs'] + institution_map = { + "UCL": "Lab 1", + "CCU": "Lab 2", + "CSHL": "Lab 3", + "NYU": "Lab 4", + "Princeton": "Lab 5", + "SWC": "Lab 6", + "Berkeley": "Lab 7", + } + col_names = [ + "Lab 1", + "Lab 2", + "Lab 3", + "Lab 4", + "Lab 5", + "Lab 6", + "Lab 7", + "All labs", + ] return institution_map, col_names @@ -53,29 +70,33 @@ def seaborn_style(): """ Set seaborn style for plotting figures """ - sns.set(style="ticks", context="paper", - font="Arial", - rc={"font.size": 9, - "axes.titlesize": 9, - "axes.labelsize": 9, - "lines.linewidth": 1, - "xtick.labelsize": 7, - "ytick.labelsize": 7, - "savefig.transparent": True, - "xtick.major.size": 2.5, - "ytick.major.size": 2.5, - "xtick.minor.size": 2, - "ytick.minor.size": 2, - }) - matplotlib.rcParams['pdf.fonttype'] = 42 - matplotlib.rcParams['ps.fonttype'] = 42 + sns.set( + style="ticks", + context="paper", + font="Arial", + rc={ + "font.size": 9, + "axes.titlesize": 9, + "axes.labelsize": 9, + "lines.linewidth": 1, + "xtick.labelsize": 7, + "ytick.labelsize": 7, + "savefig.transparent": True, + "xtick.major.size": 2.5, + "ytick.major.size": 2.5, + "xtick.minor.size": 2, + "ytick.minor.size": 2, + }, + ) + matplotlib.rcParams["pdf.fonttype"] = 42 + matplotlib.rcParams["ps.fonttype"] = 42 def figpath(): # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - fig_dir = os.path.join(repo_dir, 'exported_figs') + fig_dir = os.path.join(repo_dir, "exported_figs") # If doesn't already exist, create if not os.path.exists(fig_dir): os.mkdir(fig_dir) @@ -86,10 +107,10 @@ def datapath(): """ Return the location of data directory """ - # Retrieve absolute path of paper-behavior dir + # Retrieve absolute path of paper-behavior dir repo_dir = os.path.dirname(os.path.realpath(__file__)) # Make figure directory - data_dir = os.path.join(repo_dir, 'data') + data_dir = os.path.join(repo_dir, "data") # If doesn't already exist, create if not os.path.exists(data_dir): os.mkdir(data_dir) @@ -102,19 +123,19 @@ def load_csv(*args, **kwargs): http server and returned as a pandas DataFrame. """ repo_dir = os.path.dirname(os.path.realpath(__file__)) - local = os.path.join(repo_dir, 'data', *args) + local = os.path.join(repo_dir, "data", *args) if not os.path.exists(local): resp = urlopen(URL) zipfile = ZipFile(BytesIO(resp.read())) files = zipfile.namelist() if not any(x.endswith(args[-1]) for x in files): - raise FileNotFoundError(f'{args[-1]} not found in {URL}') - local = zipfile.extract('/'.join(('data', *args)), repo_dir) - loader = pd.read_pickle if local.endswith('.pkl') else pd.read_csv + raise FileNotFoundError(f"{args[-1]} not found in {URL}") + local = zipfile.extract("/".join(("data", *args)), repo_dir) + loader = pd.read_pickle if local.endswith(".pkl") else pd.read_csv return loader(local, **kwargs) -def query_subjects(as_dataframe=False, from_list=False, criterion='trained'): +def query_subjects(as_dataframe=False, from_list=False, criterion="trained"): """ Query all mice for analysis of behavioral data Parameters @@ -126,48 +147,55 @@ def query_subjects(as_dataframe=False, from_list=False, criterion='trained'): all mice that completed a training session are returned, with date_trained being the date of their first training session. """ - from ibl_pipeline import subject, acquisition, reference + from ibl_pipeline import acquisition, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis # Query all subjects with project ibl_neuropixel_brainwide_01 and get the date at which # they reached a given training status - all_subjects = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject - & 'subject_project = "ibl_neuropixel_brainwide_01"') + all_subjects = ( + subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject + & 'subject_project = "ibl_neuropixel_brainwide_01"' + ) sessions = acquisition.Session * behavior_analysis.SessionTrainingStatus() - fields = ('subject_nickname', 'sex', 'subject_birth_date', 'institution_short') + fields = ("subject_nickname", "sex", "subject_birth_date", "institution_short") if criterion is None: # Find first session of all mice; date_trained = date of first training session subj_query = all_subjects.aggr( - sessions, *fields, date_trained='min(date(session_start_time))') + sessions, *fields, date_trained="min(date(session_start_time))" + ) else: # date_trained = date of first session when criterion was reached - if criterion == 'trained': + if criterion == "trained": restriction = 'training_status="trained_1a" OR training_status="trained_1b"' - elif criterion == 'biased': + elif criterion == "biased": restriction = 'task_protocol LIKE "%biased%"' - elif criterion == 'ephys': + elif criterion == "ephys": restriction = 'training_status LIKE "ready%"' else: raise ValueError('criterion must be "trained", "biased" or "ephys"') subj_query = all_subjects.aggr( - sessions & restriction, *fields, date_trained='min(date(session_start_time))') + sessions & restriction, + *fields, + date_trained="min(date(session_start_time))", + ) if from_list is True: - data_path = os.path.join(datapath(), 'uuids_trained.npy') + data_path = os.path.join(datapath(), "uuids_trained.npy") ids = np.load(data_path, allow_pickle=True) - subj_query = subj_query & [{'subject_uuid': u_id} for u_id in ids] + subj_query = subj_query & [{"subject_uuid": u_id} for u_id in ids] # Select subjects that reached criterion before cutoff date - subjects = (subj_query & 'date_trained <= "%s"' % CUTOFF_DATE) + subjects = subj_query & 'date_trained <= "%s"' % CUTOFF_DATE if as_dataframe is True: - subjects = subjects.fetch(format='frame') - subjects = subjects.sort_values(by=['lab_name']).reset_index() + subjects = subjects.fetch(format="frame") + subjects = subjects.sort_values(by=["lab_name"]).reset_index() return subjects -def query_sessions(task='all', stable=False, as_dataframe=False, - force_cutoff=False, criterion='biased'): +def query_sessions( + task="all", stable=False, as_dataframe=False, force_cutoff=False, criterion="biased" +): """ Query all sessions for analysis of behavioral data Parameters @@ -188,18 +216,23 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Query sessions if force_cutoff is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query all sessions or only training or biased if required - if task == 'all': - sessions = acquisition.Session * use_subjects & 'task_protocol NOT LIKE "%habituation%"' - elif task == 'training': - sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%training%"' - elif task == 'biased': + if task == "all": + sessions = ( + acquisition.Session * use_subjects + & 'task_protocol NOT LIKE "%habituation%"' + ) + elif task == "training": + sessions = ( + acquisition.Session * use_subjects & 'task_protocol LIKE "%training%"' + ) + elif task == "biased": sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%biased%"' - elif task == 'ephys': + elif task == "ephys": sessions = acquisition.Session * use_subjects & 'task_protocol LIKE "%ephys%"' else: raise ValueError('task must be "all", "training", "biased" or "ephys"') @@ -208,7 +241,7 @@ def query_sessions(task='all', stable=False, as_dataframe=False, sessions = sessions & 'date(session_start_time) <= "%s"' % CUTOFF_DATE # Exclude weird sessions - sessions = sessions & dj.Not([{'session_uuid': u_id} for u_id in EXCLUDED_SESSIONS]) + sessions = sessions & dj.Not([{"session_uuid": u_id} for u_id in EXCLUDED_SESSIONS]) # If required only output sessions with stable hardware if stable is True: @@ -217,14 +250,20 @@ def query_sessions(task='all', stable=False, as_dataframe=False, # Transform into pandas Dataframe if requested if as_dataframe is True: sessions = sessions.fetch( - order_by='institution_short, subject_nickname, session_start_time', format='frame') + order_by="institution_short, subject_nickname, session_start_time", + format="frame", + ) sessions = sessions.reset_index() return sessions -def query_sessions_around_criterion(criterion='trained', days_from_criterion=(2, 0), - as_dataframe=False, force_cutoff=False): +def query_sessions_around_criterion( + criterion="trained", + days_from_criterion=(2, 0), + as_dataframe=False, + force_cutoff=False, +): """ Query all sessions for analysis of behavioral data Parameters @@ -246,60 +285,71 @@ def query_sessions_around_criterion(criterion='trained', days_from_criterion=(2, behavior_analysis.BehavioralSummaryByDate) """ - from ibl_pipeline import subject, acquisition + from ibl_pipeline import acquisition, subject from ibl_pipeline.analyses import behavior as behavior_analysis # Query all included subjects if force_cutoff is True: - use_subjects = query_subjects(criterion=criterion).proj('subject_uuid') + use_subjects = query_subjects(criterion=criterion).proj("subject_uuid") else: - use_subjects = query_subjects().proj('subject_uuid') + use_subjects = query_subjects().proj("subject_uuid") # Query per subject the date at which the criterion is reached sessions = acquisition.Session * behavior_analysis.SessionTrainingStatus - if criterion == 'trained': + if criterion == "trained": restriction = 'training_status="trained_1a" OR training_status="trained_1b"' - elif criterion == 'biased': + elif criterion == "biased": restriction = 'task_protocol LIKE "%biased%" AND training_status="trained_1b"' - elif criterion == 'ephys': + elif criterion == "ephys": restriction = 'training_status LIKE "ready%"' else: raise ValueError('criterion must be "trained", "biased" or "ephys"') subj_crit = (subject.Subject * use_subjects).aggr( - sessions & restriction, 'subject_nickname', date_criterion='min(date(session_start_time))') + sessions & restriction, + "subject_nickname", + date_criterion="min(date(session_start_time))", + ) # Query the training day at which criterion is reached - subj_crit_day = (dj.U('subject_uuid', 'day_of_crit') - & (behavior_analysis.BehavioralSummaryByDate * subj_crit - & 'session_date=date_criterion').proj(day_of_crit='training_day')) + subj_crit_day = dj.U("subject_uuid", "day_of_crit") & ( + behavior_analysis.BehavioralSummaryByDate * subj_crit + & "session_date=date_criterion" + ).proj(day_of_crit="training_day") # Query days around the day at which criterion is reached - days = (behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day - & ('training_day - day_of_crit between %d and %d' - % (-days_from_criterion[0], days_from_criterion[1]))).proj( - 'subject_uuid', 'subject_nickname', 'session_date') + days = ( + behavior_analysis.BehavioralSummaryByDate * subject.Subject * subj_crit_day + & ( + "training_day - day_of_crit between %d and %d" + % (-days_from_criterion[0], days_from_criterion[1]) + ) + ).proj("subject_uuid", "subject_nickname", "session_date") # Use dates to query sessions ses_query = acquisition.Session.aggr( - days, from_date='min(session_date)', to_date='max(session_date)') + days, from_date="min(session_date)", to_date="max(session_date)" + ) - sessions = (acquisition.Session * ses_query & 'date(session_start_time) >= from_date' - & 'date(session_start_time) <= to_date') + sessions = ( + acquisition.Session * ses_query + & "date(session_start_time) >= from_date" + & "date(session_start_time) <= to_date" + ) # Exclude weird sessions - sessions = sessions & dj.Not([{'session_uuid': u_id} for u_id in EXCLUDED_SESSIONS]) + sessions = sessions & dj.Not([{"session_uuid": u_id} for u_id in EXCLUDED_SESSIONS]) # Transform to pandas dataframe if necessary if as_dataframe is True: - sessions = sessions.fetch(format='frame').reset_index() - days = days.fetch(format='frame').reset_index() + sessions = sessions.fetch(format="frame").reset_index() + days = days.fetch(format="frame").reset_index() return sessions, days -def query_session_around_performance(perform_thres=0.8, stage='training'): - ''' +def query_session_around_performance(perform_thres=0.8, stage="training"): + """ Parameters ---------- perform_thres : float, optional @@ -313,195 +363,285 @@ def query_session_around_performance(perform_thres=0.8, stage='training'): selection : dataframe DESCRIPTION. Dataframe with all trials from mice reaching performance criterion - ''' - from ibl_pipeline import behavior, subject, reference - use_sessions = query_sessions(task='all', stable=False, as_dataframe=False, - force_cutoff=True, criterion=None) - behav = dj2pandas( - ((use_sessions & 'task_protocol LIKE "%' + stage + '%"') # only get training sessions - * subject.Subject * subject.SubjectLab * reference.Lab * behavior.TrialSet.Trial) + """ + from ibl_pipeline import behavior, reference, subject + use_sessions = query_sessions( + task="all", stable=False, as_dataframe=False, force_cutoff=True, criterion=None + ) + behav = dj2pandas( + ( + ( + use_sessions & 'task_protocol LIKE "%' + stage + '%"' + ) # only get training sessions + * subject.Subject + * subject.SubjectLab + * reference.Lab + * behavior.TrialSet.Trial + ) # Query only the fields we require, reducing the size of the fetch - .proj('institution_short', 'subject_nickname', 'task_protocol', 'session_uuid', - 'trial_stim_contrast_left', 'trial_stim_contrast_right', 'trial_response_choice', - 'task_protocol', 'trial_stim_prob_left', 'trial_feedback_type', - 'trial_response_time', 'trial_stim_on_time', 'session_end_time', 'time_zone') - + .proj( + "institution_short", + "subject_nickname", + "task_protocol", + "session_uuid", + "trial_stim_contrast_left", + "trial_stim_contrast_right", + "trial_response_choice", + "task_protocol", + "trial_stim_prob_left", + "trial_feedback_type", + "trial_response_time", + "trial_stim_on_time", + "session_end_time", + "time_zone", + ) # Fetch as a pandas DataFrame, ordered by institute - .fetch(order_by='institution_short, subject_nickname, session_start_time, trial_id', - format='frame') + .fetch( + order_by="institution_short, subject_nickname, session_start_time, trial_id", + format="frame", + ).reset_index() + ) + behav_ses = ( + behav.groupby(["subject_nickname", "session_start_time"]) + .mean()["correct_easy"] .reset_index() ) - behav_ses = behav.groupby(['subject_nickname', - 'session_start_time']).mean()['correct_easy'].reset_index() - behav_ses['above_criterion'] = behav_ses['correct_easy']>perform_thres + behav_ses["above_criterion"] = behav_ses["correct_easy"] > perform_thres # Check rolling sum of sessions above 0.8, must be 3 - behav_ses['met_session_criterion'] = \ - behav_ses.groupby(['subject_nickname'] - )['above_criterion'].rolling(3).sum().to_numpy() + behav_ses["met_session_criterion"] = ( + behav_ses.groupby(["subject_nickname"])["above_criterion"] + .rolling(3) + .sum() + .to_numpy() + ) # Select trials from sessions where criterion was first met selection = pd.DataFrame() - for mouse in behav_ses['subject_nickname'].unique(): - mouse_ses = behav_ses[behav_ses['subject_nickname']==mouse] - if any(mouse_ses['met_session_criterion']==3): - mouse_ses_select = mouse_ses.iloc[np.where( - mouse_ses['met_session_criterion']==3)[0][0]-2:\ - np.where(mouse_ses['met_session_criterion']==3)[0][0]+1,:] - trial_select = behav.loc[(behav['subject_nickname']==mouse) & - (behav['session_start_time'].isin( - mouse_ses_select['session_start_time']))] - selection = pd.concat([selection,trial_select]) + for mouse in behav_ses["subject_nickname"].unique(): + mouse_ses = behav_ses[behav_ses["subject_nickname"] == mouse] + if any(mouse_ses["met_session_criterion"] == 3): + mouse_ses_select = mouse_ses.iloc[ + np.where(mouse_ses["met_session_criterion"] == 3)[0][0] + - 2 : np.where(mouse_ses["met_session_criterion"] == 3)[0][0] + + 1, + :, + ] + trial_select = behav.loc[ + (behav["subject_nickname"] == mouse) + & ( + behav["session_start_time"].isin( + mouse_ses_select["session_start_time"] + ) + ) + ] + selection = pd.concat([selection, trial_select]) return selection + # ================================================================== # # DEFINE PSYCHFUNCFIT TO WORK WITH FACETGRID IN SEABORN # ================================================================== # def fit_psychfunc(df): - choicedat = df.groupby('signed_contrast').agg( - {'choice': 'count', 'choice2': 'mean'}).reset_index() - if len(choicedat) >= 4: # need some minimum number of unique x-values - pars, L = psy.mle_fit_psycho(choicedat.values.transpose(), P_model='erf_psycho_2gammas', - parstart=np.array( - [0, 20., 0.05, 0.05]), - parmin=np.array( - [choicedat['signed_contrast'].min(), 5, 0., 0.]), - parmax=np.array([choicedat['signed_contrast'].max(), 40., 1, 1])) + choicedat = ( + df.groupby("signed_contrast") + .agg({"choice": "count", "choice2": "mean"}) + .reset_index() + ) + if len(choicedat) >= 4: # need some minimum number of unique x-values + pars, L = psy.mle_fit_psycho( + choicedat.values.transpose(), + P_model="erf_psycho_2gammas", + parstart=np.array([0, 20.0, 0.05, 0.05]), + parmin=np.array([choicedat["signed_contrast"].min(), 5, 0.0, 0.0]), + parmax=np.array([choicedat["signed_contrast"].max(), 40.0, 1, 1]), + ) else: pars = [np.nan, np.nan, np.nan, np.nan] - df2 = {'bias': pars[0], 'threshold': pars[1], - 'lapselow': pars[2], 'lapsehigh': pars[3]} + df2 = { + "bias": pars[0], + "threshold": pars[1], + "lapselow": pars[2], + "lapsehigh": pars[3], + } df2 = pd.DataFrame(df2, index=[0]) - df2['ntrials'] = df['choice'].count() + df2["ntrials"] = df["choice"].count() return df2 def plot_psychometric(x, y, subj, **kwargs): # summary stats - average psychfunc over observers - df = pd.DataFrame({'signed_contrast': x, 'choice': y, - 'choice2': y, 'subject_nickname': subj}) - df2 = df.groupby(['signed_contrast', 'subject_nickname']).agg( - {'choice2': 'count', 'choice': 'mean'}).reset_index() - df2.rename(columns={"choice2": "ntrials", - "choice": "fraction"}, inplace=True) - df2 = df2.groupby(['signed_contrast']).mean().reset_index() - df2 = df2[['signed_contrast', 'ntrials', 'fraction']] + df = pd.DataFrame( + {"signed_contrast": x, "choice": y, "choice2": y, "subject_nickname": subj} + ) + df2 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"choice2": "count", "choice": "mean"}) + .reset_index() + ) + df2.rename(columns={"choice2": "ntrials", "choice": "fraction"}, inplace=True) + df2 = df2.groupby(["signed_contrast"]).mean().reset_index() + df2 = df2[["signed_contrast", "ntrials", "fraction"]] # only 'break' the x-axis and remove 50% contrast when 0% is present # print(df2.signed_contrast.unique()) - if 0. in df2.signed_contrast.values: + if 0.0 in df2.signed_contrast.values: brokenXaxis = True else: brokenXaxis = False # fit psychfunc - pars, L = psy.mle_fit_psycho(df2.transpose().values, # extract the data from the df - P_model='erf_psycho_2gammas', - parstart=np.array( - [0, 20., 0.05, 0.05]), - parmin=np.array( - [df2['signed_contrast'].min(), 5, 0., 0.]), - parmax=np.array([df2['signed_contrast'].max(), 40., 1, 1])) + pars, L = psy.mle_fit_psycho( + df2.transpose().values, # extract the data from the df + P_model="erf_psycho_2gammas", + parstart=np.array([0, 20.0, 0.05, 0.05]), + parmin=np.array([df2["signed_contrast"].min(), 5, 0.0, 0.0]), + parmax=np.array([df2["signed_contrast"].max(), 40.0, 1, 1]), + ) if brokenXaxis: # plot psychfunc - g = sns.lineplot(np.arange(-27, 27), - psy.erf_psycho_2gammas(pars, np.arange(-27, 27)), **kwargs) + g = sns.lineplot( + np.arange(-27, 27), + psy.erf_psycho_2gammas(pars, np.arange(-27, 27)), + **kwargs, + ) # plot psychfunc: -100, +100 - sns.lineplot(np.arange(-36, -31), - psy.erf_psycho_2gammas(pars, np.arange(-103, -98)), **kwargs) - sns.lineplot(np.arange(31, 36), - psy.erf_psycho_2gammas(pars, np.arange(98, 103)), **kwargs) + sns.lineplot( + np.arange(-36, -31), + psy.erf_psycho_2gammas(pars, np.arange(-103, -98)), + **kwargs, + ) + sns.lineplot( + np.arange(31, 36), + psy.erf_psycho_2gammas(pars, np.arange(98, 103)), + **kwargs, + ) # if there are any points at -50, 50 left, remove those if 50 in df.signed_contrast.values or -50 in df.signed_contrast.values: - df.drop(df[(df['signed_contrast'] == -50.) | (df['signed_contrast'] == 50)].index, - inplace=True) + df.drop( + df[ + (df["signed_contrast"] == -50.0) | (df["signed_contrast"] == 50) + ].index, + inplace=True, + ) # now break the x-axis - df['signed_contrast'] = df['signed_contrast'].replace(-100, -35) - df['signed_contrast'] = df['signed_contrast'].replace(100, 35) + df["signed_contrast"] = df["signed_contrast"].replace(-100, -35) + df["signed_contrast"] = df["signed_contrast"].replace(100, 35) else: # plot psychfunc - g = sns.lineplot(np.arange(-103, 103), - psy.erf_psycho_2gammas(pars, np.arange(-103, 103)), **kwargs) - - df3 = df.groupby(['signed_contrast', 'subject_nickname']).agg( - {'choice2': 'count', 'choice': 'mean'}).reset_index() + g = sns.lineplot( + np.arange(-103, 103), + psy.erf_psycho_2gammas(pars, np.arange(-103, 103)), + **kwargs, + ) + + df3 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"choice2": "count", "choice": "mean"}) + .reset_index() + ) # plot datapoints with errorbars on top - if df['subject_nickname'].nunique() > 1: + if df["subject_nickname"].nunique() > 1: # put the kwargs into a merged dict, so that overriding does not cause an error - sns.lineplot(df3['signed_contrast'], df3['choice'], - **{**{'err_style':"bars", - 'linewidth':0, 'linestyle':'None', 'mew':0.5, - 'marker':'o', 'ci':68}, **kwargs}) + sns.lineplot( + df3["signed_contrast"], + df3["choice"], + **{ + **{ + "err_style": "bars", + "linewidth": 0, + "linestyle": "None", + "mew": 0.5, + "marker": "o", + "ci": 68, + }, + **kwargs, + }, + ) if brokenXaxis: g.set_xticks([-35, -25, -12.5, 0, 12.5, 25, 35]) - g.set_xticklabels(['-100', '-25', '-12.5', '0', '12.5', '25', '100'], - size='small', rotation=60) + g.set_xticklabels( + ["-100", "-25", "-12.5", "0", "12.5", "25", "100"], + size="small", + rotation=60, + ) g.set_xlim([-40, 40]) break_xaxis(y=-0.004) else: g.set_xticks([-100, -50, 0, 50, 100]) - g.set_xticklabels(['-100', '-50', '0', '50', '100'], - size='small', rotation=60) + g.set_xticklabels(["-100", "-50", "0", "50", "100"], size="small", rotation=60) g.set_xlim([-110, 110]) g.set_ylim([0, 1.02]) g.set_yticks([0, 0.25, 0.5, 0.75, 1]) - g.set_yticklabels(['0', '25', '50', '75', '100']) + g.set_yticklabels(["0", "25", "50", "75", "100"]) def plot_chronometric(x, y, subj, **kwargs): - df = pd.DataFrame( - {'signed_contrast': x, 'rt': y, 'subject_nickname': subj}) + df = pd.DataFrame({"signed_contrast": x, "rt": y, "subject_nickname": subj}) df.dropna(inplace=True) # ignore NaN RTs - df2 = df.groupby(['signed_contrast', 'subject_nickname'] - ).agg({'rt': 'median'}).reset_index() + df2 = ( + df.groupby(["signed_contrast", "subject_nickname"]) + .agg({"rt": "median"}) + .reset_index() + ) # df2 = df2.groupby(['signed_contrast']).mean().reset_index() - df2 = df2[['signed_contrast', 'rt', 'subject_nickname']] + df2 = df2[["signed_contrast", "rt", "subject_nickname"]] # if 100 in df.signed_contrast.values and not 50 in # df.signed_contrast.values: - df2['signed_contrast'] = df2['signed_contrast'].replace(-100, -35) - df2['signed_contrast'] = df2['signed_contrast'].replace(100, 35) - df2 = df2.loc[np.abs(df2.signed_contrast) != 50, :] # remove those - - ax = sns.lineplot(x='signed_contrast', y='rt', err_style="bars", mew=0.5, - ci=68, data=df2, **kwargs) + df2["signed_contrast"] = df2["signed_contrast"].replace(-100, -35) + df2["signed_contrast"] = df2["signed_contrast"].replace(100, 35) + df2 = df2.loc[np.abs(df2.signed_contrast) != 50, :] # remove those + + ax = sns.lineplot( + x="signed_contrast", + y="rt", + err_style="bars", + mew=0.5, + ci=68, + data=df2, + **kwargs, + ) # all the points - if df['subject_nickname'].nunique() > 1: + if df["subject_nickname"].nunique() > 1: sns.lineplot( - x='signed_contrast', - y='rt', + x="signed_contrast", + y="rt", err_style="bars", mew=0.5, linewidth=0, - marker='o', + marker="o", ci=68, data=df2, - **kwargs) + **kwargs, + ) ax.set_xticks([-35, -25, -12.5, 0, 12.5, 25, 35]) - ax.set_xticklabels(['-100', '-25', '-12.5', '0', '12.5', '25', '100'], - size='small', rotation=45) + ax.set_xticklabels( + ["-100", "-25", "-12.5", "0", "12.5", "25", "100"], size="small", rotation=45 + ) ax.set_xlim([-40, 40]) - if df['signed_contrast'].min() >= 0: + if df["signed_contrast"].min() >= 0: ax.set_xlim([-5, 40]) ax.set_xticks([0, 6, 12.5, 25, 35]) - ax.set_xticklabels(['0', '6.25', '12.5', '25', '100'], - size='small', rotation=45) + ax.set_xticklabels( + ["0", "6.25", "12.5", "25", "100"], size="small", rotation=45 + ) def break_xaxis(y=-0.004, **kwargs): @@ -509,87 +649,116 @@ def break_xaxis(y=-0.004, **kwargs): # axisgate: show axis discontinuities with a quick hack # https://twitter.com/StevenDakin/status/1313744930246811653?s=19 # first, white square for discontinuous axis - plt.text(-30, y, '-', fontsize=14, fontweight='bold', - horizontalalignment='center', verticalalignment='center', - color='w') - plt.text(30, y, '-', fontsize=14, fontweight='bold', - horizontalalignment='center', verticalalignment='center', - color='w') + plt.text( + -30, + y, + "-", + fontsize=14, + fontweight="bold", + horizontalalignment="center", + verticalalignment="center", + color="w", + ) + plt.text( + 30, + y, + "-", + fontsize=14, + fontweight="bold", + horizontalalignment="center", + verticalalignment="center", + color="w", + ) # put little dashes to cut axes - plt.text(-30, y, '/ /', horizontalalignment='center', - verticalalignment='center', fontsize=6, fontweight='bold') - plt.text(30, y, '/ /', horizontalalignment='center', - verticalalignment='center', fontsize=6, fontweight='bold') + plt.text( + -30, + y, + "/ /", + horizontalalignment="center", + verticalalignment="center", + fontsize=6, + fontweight="bold", + ) + plt.text( + 30, + y, + "/ /", + horizontalalignment="center", + verticalalignment="center", + fontsize=6, + fontweight="bold", + ) def add_n(x, y, sj, **kwargs): - df = pd.DataFrame({'signed_contrast': x, 'choice': y, - 'choice2': y, 'subject_nickname': sj}) + df = pd.DataFrame( + {"signed_contrast": x, "choice": y, "choice2": y, "subject_nickname": sj} + ) # ADD TEXT ABOUT NUMBER OF ANIMALS AND TRIALS plt.text( 15, 0.2, - '%d mice, %d trials' % - (df.subject_nickname.nunique(), - df.choice.count()), - fontweight='normal', + "%d mice, %d trials" % (df.subject_nickname.nunique(), df.choice.count()), + fontweight="normal", fontsize=6, - color='k') + color="k", + ) def dj2pandas(behav): # make sure all contrasts are positive - behav['trial_stim_contrast_right'] = np.abs( - behav['trial_stim_contrast_right']) - behav['trial_stim_contrast_left'] = np.abs( - behav['trial_stim_contrast_left']) + behav["trial_stim_contrast_right"] = np.abs(behav["trial_stim_contrast_right"]) + behav["trial_stim_contrast_left"] = np.abs(behav["trial_stim_contrast_left"]) - behav['signed_contrast'] = ( - behav['trial_stim_contrast_right'] - behav['trial_stim_contrast_left']) * 100 + behav["signed_contrast"] = ( + behav["trial_stim_contrast_right"] - behav["trial_stim_contrast_left"] + ) * 100 # behav['signed_contrast'] = behav.signed_contrast.astype(int) - behav['trial'] = behav.trial_id # for psychfuncfit - val_map = {'CCW': 1, 'No Go': 0, 'CW': -1} - behav['choice'] = behav['trial_response_choice'].map(val_map) - behav['correct'] = np.where( - np.sign(behav['signed_contrast']) == behav['choice'], 1, 0) - behav.loc[behav['signed_contrast'] == 0, 'correct'] = np.NaN - - behav['choice_right'] = behav.choice.replace( - [-1, 0, 1], [0, np.nan, 1]) # code as 0, 100 for percentages - behav['choice2'] = behav.choice_right # for psychfuncfit - behav['correct_easy'] = behav.correct - behav.loc[np.abs(behav['signed_contrast']) < 50, 'correct_easy'] = np.NaN - behav.rename( - columns={'trial_stim_prob_left': 'probabilityLeft'}, inplace=True) - behav['probabilityLeft'] = behav['probabilityLeft'] * 100 - behav['probabilityLeft'] = behav.probabilityLeft.astype(int) + behav["trial"] = behav.trial_id # for psychfuncfit + val_map = {"CCW": 1, "No Go": 0, "CW": -1} + behav["choice"] = behav["trial_response_choice"].map(val_map) + behav["correct"] = np.where( + np.sign(behav["signed_contrast"]) == behav["choice"], 1, 0 + ) + behav.loc[behav["signed_contrast"] == 0, "correct"] = np.NaN + + behav["choice_right"] = behav.choice.replace( + [-1, 0, 1], [0, np.nan, 1] + ) # code as 0, 100 for percentages + behav["choice2"] = behav.choice_right # for psychfuncfit + behav["correct_easy"] = behav.correct + behav.loc[np.abs(behav["signed_contrast"]) < 50, "correct_easy"] = np.NaN + behav.rename(columns={"trial_stim_prob_left": "probabilityLeft"}, inplace=True) + behav["probabilityLeft"] = behav["probabilityLeft"] * 100 + behav["probabilityLeft"] = behav.probabilityLeft.astype(int) # compute rt - if 'trial_response_time' in behav.columns: - behav['rt'] = behav['trial_response_time'] - \ - behav['trial_stim_on_time'] + if "trial_response_time" in behav.columns: + behav["rt"] = behav["trial_response_time"] - behav["trial_stim_on_time"] # ignore a bunch of things for missed trials # don't count RT if there was no response - behav.loc[behav.choice == 0, 'rt'] = np.nan + behav.loc[behav.choice == 0, "rt"] = np.nan # don't count RT if there was no response - behav.loc[behav.choice == 0, 'trial_feedback_type'] = np.nan + behav.loc[behav.choice == 0, "trial_feedback_type"] = np.nan # CODE FOR HISTORY - behav['previous_choice'] = behav.choice.shift(1) - behav.loc[behav.previous_choice == 0, 'previous_choice'] = np.nan - behav['previous_outcome'] = behav.trial_feedback_type.shift(1) - behav.loc[behav.previous_outcome == 0, 'previous_outcome'] = np.nan - behav['previous_contrast'] = np.abs(behav.signed_contrast.shift(1)) - behav['previous_choice_name'] = behav['previous_choice'].map( - {-1: 'left', 1: 'right'}) - behav['previous_outcome_name'] = behav['previous_outcome'].map( - {-1: 'post_error', 1: 'post_correct'}) - behav['repeat'] = (behav.choice == behav.previous_choice) + behav["previous_choice"] = behav.choice.shift(1) + behav.loc[behav.previous_choice == 0, "previous_choice"] = np.nan + behav["previous_outcome"] = behav.trial_feedback_type.shift(1) + behav.loc[behav.previous_outcome == 0, "previous_outcome"] = np.nan + behav["previous_contrast"] = np.abs(behav.signed_contrast.shift(1)) + behav["previous_choice_name"] = behav["previous_choice"].map( + {-1: "left", 1: "right"} + ) + behav["previous_outcome_name"] = behav["previous_outcome"].map( + {-1: "post_error", 1: "post_correct"} + ) + behav["repeat"] = behav.choice == behav.previous_choice # # to more easily retrieve specific training days # behav['days'] = (behav['session_start_time'] - @@ -600,13 +769,13 @@ def dj2pandas(behav): def num_star(pvalue): if pvalue < 0.05: - stars = '* p < 0.05' + stars = "* p < 0.05" elif pvalue < 0.01: - stars = '** p < 0.01' + stars = "** p < 0.01" elif pvalue < 0.001: - stars = '*** p < 0.001' + stars = "*** p < 0.001" elif pvalue < 0.0001: - stars = '**** p < 0.0001' + stars = "**** p < 0.0001" else: - stars = '' - return stars \ No newline at end of file + stars = "" + return stars diff --git a/prelim_analyses/behavioral_snapshots/README.md b/prelim_analyses/behavioral_snapshots/README.md index bf369fe8..16035bf2 100644 --- a/prelim_analyses/behavioral_snapshots/README.md +++ b/prelim_analyses/behavioral_snapshots/README.md @@ -15,4 +15,3 @@ For each day of the behavioral task, performance (only on easy trials, i.e. 50% ### 4th panel from top: contrast/choice heatmap ### For each day of the behavioral task (x-axis) and each contrast level (y-axis), the fraction of rightward choices. Ideal performance would be dark blue bars at the top half, and dark red bars at the bottom half. This plot is basically a flattened psychometric function into a heatmap, over days. You can see when additional, more difficult contrasts are introduced over training. - diff --git a/prelim_analyses/behavioral_snapshots/behavior_plots.py b/prelim_analyses/behavioral_snapshots/behavior_plots.py index f0717217..6bfb3dee 100644 --- a/prelim_analyses/behavioral_snapshots/behavior_plots.py +++ b/prelim_analyses/behavioral_snapshots/behavior_plots.py @@ -5,35 +5,35 @@ @author: Miles, Anne @editor: Gaelle """ -import numpy as np -import matplotlib.pyplot as plt +# import from same parent folder +import datajoint as dj # noqa import matplotlib as mpl import matplotlib.dates as mdates -import seaborn as sns +import matplotlib.pyplot as plt +import numpy as np import pandas as pd +import seaborn as sns +from load_mouse_data_datajoint import * # noqa # this has all plotting functions +from mpl_toolkits.axes_grid1.inset_locator import inset_axes -# import from same parent folder -import datajoint as dj # noqa -from ibl_pipeline import reference, subject, action, acquisition, data, behavior # noqa -from ibl_pipeline.utils import psychofit as psy # https://github.com/cortex-lab/psychofit +from ibl_pipeline import acquisition, action, behavior, data, reference, subject # noqa from ibl_pipeline.analyses import behavior as behavior_analysis -from load_mouse_data_datajoint import * # noqa # this has all plotting functions - -from mpl_toolkits.axes_grid1.inset_locator import inset_axes +from ibl_pipeline.utils import ( + psychofit as psy, # https://github.com/cortex-lab/psychofit +) def plot_water_weight_curve(weight_water, baseline, ax, xlims): - weight_water.loc[weight_water['adlib'] == 1, 'water_administered'] = 1 + weight_water.loc[weight_water["adlib"] == 1, "water_administered"] = 1 # ################################################### # # use pandas plot for a stacked bar - water types # ################################################### # - wa_unstacked = weight_water.pivot_table(index='days', - columns='water_type', - values='water_administered', - aggfunc='sum').reset_index() + wa_unstacked = weight_water.pivot_table( + index="days", columns="water_type", values="water_administered", aggfunc="sum" + ).reset_index() # shorten names for legend wa_unstacked.columns = wa_unstacked.columns.str.replace("Water", "Wa") @@ -46,29 +46,41 @@ def plot_water_weight_curve(weight_water, baseline, ax, xlims): # if duplicate, merge colnames = list(wa_unstacked) - if colnames.count('Wa 2% CA') > 1: - tmp = wa_unstacked[['Wa 2% CA']].sum(axis=1).copy() - wa_unstacked = wa_unstacked.drop('Wa 2% CA', 1) - wa_unstacked['Wa 2% CA'] = tmp + if colnames.count("Wa 2% CA") > 1: + tmp = wa_unstacked[["Wa 2% CA"]].sum(axis=1).copy() + wa_unstacked = wa_unstacked.drop("Wa 2% CA", 1) + wa_unstacked["Wa 2% CA"] = tmp # order in a fixed way - wa_unstacked = wa_unstacked.reindex(columns=['days', 'Wa 10% Sucr', 'Wa', 'Wa 2% CA', 'Hdrg', - 'Wa 15% Sucr']) + wa_unstacked = wa_unstacked.reindex( + columns=["days", "Wa 10% Sucr", "Wa", "Wa 2% CA", "Hdrg", "Wa 15% Sucr"] + ) # https://stackoverflow.com/questions/44250445/pandas-bar-plot-with-continuous-x-axis plotvar = wa_unstacked.copy() plotvar.index = plotvar.days - plotvar = plotvar.reindex(np.arange(weight_water.days.min(), weight_water.days.max() + 1)) - plotvar.drop(columns='days', inplace=True) + plotvar = plotvar.reindex( + np.arange(weight_water.days.min(), weight_water.days.max() + 1) + ) + plotvar.drop(columns="days", inplace=True) # sort the columns by possible water types - plotvar.plot(kind='bar', style='.', stacked=True, ax=ax, edgecolor="none") - llegend = ax.legend(loc='lower left', prop={'size': 'xx-small'}, - bbox_to_anchor=(0., 1.02, 1., .102), - ncol=2, mode="expand", borderaxespad=0., frameon=False) - llegend.set_title('') - ax.set(ylabel="Water intake (mL)", xlabel='', - xlim=[weight_water.days.min() - 2, weight_water.days.max() + 2]) + plotvar.plot(kind="bar", style=".", stacked=True, ax=ax, edgecolor="none") + llegend = ax.legend( + loc="lower left", + prop={"size": "xx-small"}, + bbox_to_anchor=(0.0, 1.02, 1.0, 0.102), + ncol=2, + mode="expand", + borderaxespad=0.0, + frameon=False, + ) + llegend.set_title("") + ax.set( + ylabel="Water intake (mL)", + xlabel="", + xlim=[weight_water.days.min() - 2, weight_water.days.max() + 2], + ) ax.yaxis.label.set_color("#0072B2") # ################################################### # @@ -76,41 +88,75 @@ def plot_water_weight_curve(weight_water, baseline, ax, xlims): # ################################################### # righty = ax.twinx() - weight_water2 = weight_water.groupby('days').mean().reset_index() - weight_water2 = weight_water2.dropna(subset=['weight']) + weight_water2 = weight_water.groupby("days").mean().reset_index() + weight_water2 = weight_water2.dropna(subset=["weight"]) # plot weight curve - sns.lineplot(x=weight_water2.days, y=weight_water2.weight, ax=righty, color='.15', marker='o') + sns.lineplot( + x=weight_water2.days, y=weight_water2.weight, ax=righty, color=".15", marker="o" + ) # show the start of each water restriction - sns.scatterplot(x=baseline.day_start, y=baseline.reference_weight, ax=righty, marker='D', - facecolor='white', edgecolor='black', s=10, zorder=100, legend=False) + sns.scatterplot( + x=baseline.day_start, + y=baseline.reference_weight, + ax=righty, + marker="D", + facecolor="white", + edgecolor="black", + s=10, + zorder=100, + legend=False, + ) for d in range(len(baseline)): # add a line for 85% of baseline weight - righty.plot((baseline.day_start[d], baseline.day_end[d]), - (baseline.reference_weight[d] * 0.85, baseline.reference_weight[d] * 0.85), - 'k--', linewidth=0.5) + righty.plot( + (baseline.day_start[d], baseline.day_end[d]), + (baseline.reference_weight[d] * 0.85, baseline.reference_weight[d] * 0.85), + "k--", + linewidth=0.5, + ) # another line for 75% baseline weight - righty.plot((baseline.day_start[d], baseline.day_end[d]), - (baseline.reference_weight[d] * 0.75, baseline.reference_weight[d] * 0.75), - 'k-.', linewidth=0.5) + righty.plot( + (baseline.day_start[d], baseline.day_end[d]), + (baseline.reference_weight[d] * 0.75, baseline.reference_weight[d] * 0.75), + "k-.", + linewidth=0.5, + ) righty.grid(False) - righty.set(xlabel='', ylabel="Weight (g)", - xlim=[weight_water.days.min() - 2, weight_water.days.max() + 2]) + righty.set( + xlabel="", + ylabel="Weight (g)", + xlim=[weight_water.days.min() - 2, weight_water.days.max() + 2], + ) # correct the ticks to show dates, not days # also indicate Mondays by grid lines if (weight_water.days.max() - weight_water.days.min()) > 6: - ax.set_xticks([weight_water.days[i] - for i, dt in enumerate(weight_water.date) if dt.weekday() == 0]) - ax.set_xticklabels([weight_water.date[i].strftime('%b-%d') - for i, dt in enumerate(weight_water.date) if dt.weekday() == 0]) + ax.set_xticks( + [ + weight_water.days[i] + for i, dt in enumerate(weight_water.date) + if dt.weekday() == 0 + ] + ) + ax.set_xticklabels( + [ + weight_water.date[i].strftime("%b-%d") + for i, dt in enumerate(weight_water.date) + if dt.weekday() == 0 + ] + ) else: ax.set_xticks([weight_water.days[i] for i, dt in enumerate(weight_water.date)]) - ax.set_xticklabels([weight_water.date[i].strftime('%b-%d') - for i, dt in enumerate(weight_water.date)]) + ax.set_xticklabels( + [ + weight_water.date[i].strftime("%b-%d") + for i, dt in enumerate(weight_water.date) + ] + ) for item in ax.get_xticklabels(): item.set_rotation(60) @@ -119,34 +165,60 @@ def plot_water_weight_curve(weight_water, baseline, ax, xlims): def plot_trialcounts_sessionlength(mouse, lab, ax, xlims): # GET THE NUMBER OF TRIALS PER DAY - n_trials = pd.DataFrame((behavior.TrialSet.proj(session_date='DATE(session_start_time)') * - behavior.TrialSet * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"' % mouse & - 'lab_name="%s"' % lab).proj( - 'session_date', 'n_trials').fetch(as_dict=True)) + n_trials = pd.DataFrame( + ( + behavior.TrialSet.proj(session_date="DATE(session_start_time)") + * behavior.TrialSet + * subject.Subject + * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ) + .proj("session_date", "n_trials") + .fetch(as_dict=True) + ) if not len(n_trials): return - n_trials = n_trials.groupby(['session_date'])['n_trials'].sum().reset_index() + n_trials = n_trials.groupby(["session_date"])["n_trials"].sum().reset_index() - sns.lineplot(x="session_date", y="n_trials", marker='o', color=".15", data=n_trials, ax=ax) - ax.set(xlabel='', ylabel="Trial count", xlim=xlims) + sns.lineplot( + x="session_date", y="n_trials", marker="o", color=".15", data=n_trials, ax=ax + ) + ax.set(xlabel="", ylabel="Trial count", xlim=xlims) # GET SESSION DURATION PER DAY - duration = pd.DataFrame((acquisition.Session * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"' % mouse & 'lab_name="%s"' % lab).proj( - session_duration='TIMEDIFF(session_end_time, session_start_time)', - session_date='DATE(session_start_time)').proj('session_date', 'session_duration').fetch()) - duration['session_duration_minutes'] = duration.session_duration.dt.total_seconds() / 60 + duration = pd.DataFrame( + ( + acquisition.Session * subject.Subject * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ) + .proj( + session_duration="TIMEDIFF(session_end_time, session_start_time)", + session_date="DATE(session_start_time)", + ) + .proj("session_date", "session_duration") + .fetch() + ) + duration["session_duration_minutes"] = ( + duration.session_duration.dt.total_seconds() / 60 + ) # convert to minutes righty = ax.twinx() - sns.lineplot(x="session_date", y="session_duration_minutes", marker='o', color="firebrick", - data=duration, ax=righty) + sns.lineplot( + x="session_date", + y="session_duration_minutes", + marker="o", + color="firebrick", + data=duration, + ax=righty, + ) righty.yaxis.label.set_color("firebrick") - righty.tick_params(axis='y', colors='firebrick') - righty.set(xlabel='', ylabel="Session (min)", ylim=[0, 90], xlim=xlims) + righty.tick_params(axis="y", colors="firebrick") + righty.set(xlabel="", ylabel="Session (min)", ylim=[0, 90], xlim=xlims) righty.grid(False) fix_date_axis(righty) @@ -156,37 +228,74 @@ def plot_trialcounts_sessionlength(mouse, lab, ax, xlims): def plot_performance_rt(mouse, lab, ax, xlims): # performance on easy contrasts - behav = pd.DataFrame((behavior_analysis.BehavioralSummaryByDate * subject.Subject * - subject.SubjectLab & 'subject_nickname="%s"' % mouse & - 'lab_name="%s"' % lab).proj('session_date', 'performance_easy').fetch( - as_dict=True, order_by='session_date')) + behav = pd.DataFrame( + ( + behavior_analysis.BehavioralSummaryByDate + * subject.Subject + * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ) + .proj("session_date", "performance_easy") + .fetch(as_dict=True, order_by="session_date") + ) if not len(behav): return - sns.lineplot(x="session_date", y="performance_easy", marker='o', color=".15", data=behav, - ax=ax) - ax.set(xlabel='', ylabel="Performance (easy trials)", - xlim=xlims, yticks=[0.5, 0.75, 1], ylim=[0.4, 1.01]) + sns.lineplot( + x="session_date", + y="performance_easy", + marker="o", + color=".15", + data=behav, + ax=ax, + ) + ax.set( + xlabel="", + ylabel="Performance (easy trials)", + xlim=xlims, + yticks=[0.5, 0.75, 1], + ylim=[0.4, 1.01], + ) # RTs on right y-axis righty = ax.twinx() - rt = pd.DataFrame(((behavior_analysis.BehavioralSummaryByDate.ReactionTimeByDate * - subject.Subject * subject.SubjectLab & 'subject_nickname="%s"' % mouse & - 'lab_name="%s"' % lab)).proj('session_date', 'median_reaction_time').fetch( - as_dict=True, order_by='session_date')) - sns.lineplot(x="session_date", y="median_reaction_time", marker='o', color="firebrick", - data=rt, ax=righty) + rt = pd.DataFrame( + ( + ( + behavior_analysis.BehavioralSummaryByDate.ReactionTimeByDate + * subject.Subject + * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ) + ) + .proj("session_date", "median_reaction_time") + .fetch(as_dict=True, order_by="session_date") + ) + sns.lineplot( + x="session_date", + y="median_reaction_time", + marker="o", + color="firebrick", + data=rt, + ax=righty, + ) # layout righty.yaxis.label.set_color("firebrick") - righty.tick_params(axis='y', colors='firebrick') - righty.set(xlabel='', ylabel="RT (s)", ylim=[0.1, 10], xlim=xlims) + righty.tick_params(axis="y", colors="firebrick") + righty.set(xlabel="", ylabel="RT (s)", ylim=[0.1, 10], xlim=xlims) righty.set_yscale("log") righty.yaxis.set_major_formatter( - mpl.ticker.FuncFormatter(lambda y, pos: ( - '{{:.{:1d}f}}'.format(int(np.maximum(-np.log10(y), 0)))).format(y))) + mpl.ticker.FuncFormatter( + lambda y, pos: ( + "{{:.{:1d}f}}".format(int(np.maximum(-np.log10(y), 0))) + ).format(y) + ) + ) righty.grid(False) fix_date_axis(righty) fix_date_axis(ax) @@ -195,14 +304,25 @@ def plot_performance_rt(mouse, lab, ax, xlims): def plot_contrast_heatmap(mouse, lab, ax, xlims): import copy - cmap = copy.copy(plt.get_cmap('vlag')) + + cmap = copy.copy(plt.get_cmap("vlag")) cmap.set_bad(color="w") # remove rectangles without data, should be white session_date, signed_contrasts, prob_choose_right, prob_left_block = ( - behavior_analysis.BehavioralSummaryByDate.PsychResults * subject.Subject * - subject.SubjectLab & 'subject_nickname="%s"' % mouse & 'lab_name="%s"' % lab).proj( - 'signed_contrasts', 'prob_choose_right', 'session_date', 'prob_left_block').fetch( - 'session_date', 'signed_contrasts', 'prob_choose_right', 'prob_left_block') + ( + behavior_analysis.BehavioralSummaryByDate.PsychResults + * subject.Subject + * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ) + .proj( + "signed_contrasts", "prob_choose_right", "session_date", "prob_left_block" + ) + .fetch( + "session_date", "signed_contrasts", "prob_choose_right", "prob_left_block" + ) + ) if not len(session_date): return @@ -214,16 +334,21 @@ def plot_contrast_heatmap(mouse, lab, ax, xlims): session_date[i] = np.repeat(date, len(signed_contrasts[i])) prob_left_block2[i] = np.repeat(prob_left_block[i], len(signed_contrasts[i])) - result = pd.DataFrame({'session_date': np.concatenate(session_date), - 'signed_contrasts': np.concatenate(signed_contrasts), - 'prob_choose_right': np.concatenate(prob_choose_right), - 'prob_left_block': np.concatenate(prob_left_block2)}) + result = pd.DataFrame( + { + "session_date": np.concatenate(session_date), + "signed_contrasts": np.concatenate(signed_contrasts), + "prob_choose_right": np.concatenate(prob_choose_right), + "prob_left_block": np.concatenate(prob_left_block2), + } + ) # only use the unbiased block for now result = result[result.prob_left_block == 0] - result = result.round({'signed_contrasts': 2}) - pp2 = result.pivot("signed_contrasts", "session_date", "prob_choose_right").sort_values( - by='signed_contrasts', ascending=False) + result = result.round({"signed_contrasts": 2}) + pp2 = result.pivot( + "signed_contrasts", "session_date", "prob_choose_right" + ).sort_values(by="signed_contrasts", ascending=False) pp2 = pp2.reindex(sorted(result.signed_contrasts.unique())) # evenly spaced date axis @@ -232,31 +357,56 @@ def plot_contrast_heatmap(mouse, lab, ax, xlims): pp2 = pp2.iloc[::-1] # reverse, red on top # inset axes for colorbar, to the right of plot - axins1 = inset_axes(ax, width="5%", height="90%", loc='right', - bbox_to_anchor=(0.15, 0., 1, 1), - bbox_transform=ax.transAxes, borderpad=0,) + axins1 = inset_axes( + ax, + width="5%", + height="90%", + loc="right", + bbox_to_anchor=(0.15, 0.0, 1, 1), + bbox_transform=ax.transAxes, + borderpad=0, + ) # now heatmap - sns.heatmap(pp2, linewidths=0, ax=ax, vmin=0, vmax=1, cmap=cmap, cbar=True, - cbar_ax=axins1, cbar_kws={'label': 'Choose right (%)', 'shrink': 0.8, 'ticks': []}) - ax.set(ylabel="Contrast (%)", xlabel='') + sns.heatmap( + pp2, + linewidths=0, + ax=ax, + vmin=0, + vmax=1, + cmap=cmap, + cbar=True, + cbar_ax=axins1, + cbar_kws={"label": "Choose right (%)", "shrink": 0.8, "ticks": []}, + ) + ax.set(ylabel="Contrast (%)", xlabel="") fix_date_axis(ax) def fit_psychfunc(df): - choicedat = df.groupby( - 'signedContrast').agg({'trial': 'count', 'choice2': 'mean'}).reset_index() - pars, L = psy.mle_fit_psycho(choicedat.values.transpose(), P_model='erf_psycho_2gammas', - parstart=np.array([choicedat['signedContrast'].mean(), 20., 0.05, - 0.05]), - parmin=np.array([choicedat['signedContrast'].min(), 0., 0., 0.]), - parmax=np.array([choicedat['signedContrast'].max(), 100., 1, 1])) - df2 = {'bias': pars[0], 'threshold': pars[1], 'lapselow': pars[2], 'lapsehigh': pars[3]} + choicedat = ( + df.groupby("signedContrast") + .agg({"trial": "count", "choice2": "mean"}) + .reset_index() + ) + pars, L = psy.mle_fit_psycho( + choicedat.values.transpose(), + P_model="erf_psycho_2gammas", + parstart=np.array([choicedat["signedContrast"].mean(), 20.0, 0.05, 0.05]), + parmin=np.array([choicedat["signedContrast"].min(), 0.0, 0.0, 0.0]), + parmax=np.array([choicedat["signedContrast"].max(), 100.0, 1, 1]), + ) + df2 = { + "bias": pars[0], + "threshold": pars[1], + "lapselow": pars[2], + "lapsehigh": pars[3], + } return pd.DataFrame(df2, index=[0]) -def plot_psychometric(df, color='black', ax=None, **kwargs): +def plot_psychometric(df, color="black", ax=None, **kwargs): """ Plots psychometric data for a given DataFrame of behavioural trials @@ -277,47 +427,68 @@ def plot_psychometric(df, color='black', ax=None, **kwargs): ax (Axes): The plot axes """ - if len(df['signedContrast'].unique()) > 4: - df2 = df.groupby(['signedContrast']).agg( - {'choice': 'count', 'choice2': 'mean'}).reset_index() + if len(df["signedContrast"].unique()) > 4: + df2 = ( + df.groupby(["signedContrast"]) + .agg({"choice": "count", "choice2": "mean"}) + .reset_index() + ) df2.rename(columns={"choice2": "fraction", "choice": "ntrials"}, inplace=True) - pars, L = psy.mle_fit_psycho(df2.transpose().values, # extract the data from the df - P_model='erf_psycho_2gammas', - parstart=np.array([df2['signedContrast'].mean(), 20., 0.05, - 0.05]), - parmin=np.array([df2['signedContrast'].min(), 0., 0., 0.]), - parmax=np.array([df2['signedContrast'].max(), 100., 1, 1])) - sns.lineplot(np.arange(-100, 100), psy.erf_psycho_2gammas(pars, np.arange(-100, 100)), - color=color, ax=ax) + pars, L = psy.mle_fit_psycho( + df2.transpose().values, # extract the data from the df + P_model="erf_psycho_2gammas", + parstart=np.array([df2["signedContrast"].mean(), 20.0, 0.05, 0.05]), + parmin=np.array([df2["signedContrast"].min(), 0.0, 0.0, 0.0]), + parmax=np.array([df2["signedContrast"].max(), 100.0, 1, 1]), + ) + sns.lineplot( + np.arange(-100, 100), + psy.erf_psycho_2gammas(pars, np.arange(-100, 100)), + color=color, + ax=ax, + ) if 100 in df.signedContrast.values and not 50 in df.signedContrast.values: - df['signedContrast'] = df.signedContrast.replace(-100, -35) - df['signedContrast'] = df.signedContrast.replace(100, 35) + df["signedContrast"] = df.signedContrast.replace(-100, -35) + df["signedContrast"] = df.signedContrast.replace(100, 35) brokenXaxis = True else: brokenXaxis = False # plot datapoints on top - sns.lineplot(x='signedContrast', y='choice2', err_style="bars", linewidth=0, linestyle='None', - mew=0.5, - marker='.', ci=68, data=df, color=color, ax=ax) + sns.lineplot( + x="signedContrast", + y="choice2", + err_style="bars", + linewidth=0, + linestyle="None", + mew=0.5, + marker=".", + ci=68, + data=df, + color=color, + ax=ax, + ) if not brokenXaxis: # Reduce the clutter ax.set_xticks([-100, -50, 0, 50, 100]) - ax.set_xticklabels(['-100', '-50', '0', '50', '100']) + ax.set_xticklabels(["-100", "-50", "0", "50", "100"]) ax.set_xlim([-110, 110]) else: ax.set_xticks([-35, -25, -12.5, -6, 0, 6, 12.5, 25, 35]) - ax.set_xticklabels(['-100', '-25', '-12.5', '-6.25', '0', '6.25', '12.5', '25', '100'], - size='x-small', rotation=-90) + ax.set_xticklabels( + ["-100", "-25", "-12.5", "-6.25", "0", "6.25", "12.5", "25", "100"], + size="x-small", + rotation=-90, + ) ax.set_xlim([-40, 40]) - ax.set_yticks([0, .5, 1]) + ax.set_yticks([0, 0.5, 1]) ax.set_ylim([-0.03, 1.03]) - ax.set_xlabel('Contrast (%)') + ax.set_xlabel("Contrast (%)") return ax @@ -325,26 +496,39 @@ def plot_psychometric(df, color='black', ax=None, **kwargs): def plot_chronometric(df, ax, color): if 100 in df.signedContrast.values and not 50 in df.signedContrast.values: - df['signedContrast'] = df['signedContrast'].replace(-100, -35) - df['signedContrast'] = df['signedContrast'].replace(100, 35) + df["signedContrast"] = df["signedContrast"].replace(-100, -35) + df["signedContrast"] = df["signedContrast"].replace(100, 35) brokenXaxis = True else: brokenXaxis = False - sns.lineplot(x='signedContrast', y='rt', err_style="bars", mew=0.5, - estimator=np.median, marker='.', ci=68, data=df, color=color, ax=ax) + sns.lineplot( + x="signedContrast", + y="rt", + err_style="bars", + mew=0.5, + estimator=np.median, + marker=".", + ci=68, + data=df, + color=color, + ax=ax, + ) ax.set(xlabel="Contrast (%)", ylabel="RT (s)") ax.grid(True) if not brokenXaxis: # Reduce the clutter ax.set_xticks([-100, -50, 0, 50, 100]) - ax.set_xticklabels(['-100', '-50', '0', '50', '100']) + ax.set_xticklabels(["-100", "-50", "0", "50", "100"]) ax.set_xlim([-110, 110]) else: ax.set_xticks([-35, -25, -12.5, -6, 0, 6, 12.5, 25, 35]) - ax.set_xticklabels(['-100', '-25', '-12.5', '-6.25', '0', '6.25', '12.5', '25', '100'], - size='x-small', rotation=-90) + ax.set_xticklabels( + ["-100", "-25", "-12.5", "-6.25", "0", "6.25", "12.5", "25", "100"], + size="x-small", + rotation=-90, + ) ax.set_xlim([-40, 40]) @@ -352,6 +536,6 @@ def fix_date_axis(ax): # deal with date axis and make nice looking ax.xaxis_date() ax.xaxis.set_major_locator(mdates.WeekdayLocator(byweekday=mdates.MONDAY)) - ax.xaxis.set_major_formatter(mdates.DateFormatter('%b-%d')) + ax.xaxis.set_major_formatter(mdates.DateFormatter("%b-%d")) for item in ax.get_xticklabels(): item.set_rotation(60) diff --git a/prelim_analyses/behavioral_snapshots/behavioral_overview_perlab.py b/prelim_analyses/behavioral_snapshots/behavioral_overview_perlab.py index 806a789b..c78f8937 100644 --- a/prelim_analyses/behavioral_snapshots/behavioral_overview_perlab.py +++ b/prelim_analyses/behavioral_snapshots/behavioral_overview_perlab.py @@ -1,48 +1,59 @@ # Anne Urai, CSHL, 2018 # see https://github.com/int-brain-lab/ibllib/tree/master/python/oneibl/examples -import time, re, datetime, os, glob +import datetime +import glob +import os +import re +import time from datetime import timedelta + import seaborn as sns ## INITIALIZE A FEW THINGS -sns.set_style("darkgrid", {'xtick.bottom': True,'ytick.left': True, 'lines.markeredgewidth':0}) +sns.set_style( + "darkgrid", {"xtick.bottom": True, "ytick.left": True, "lines.markeredgewidth": 0} +) sns.set_context(context="paper") +## CONNECT TO datajoint +import datajoint as dj import matplotlib as mpl import matplotlib.pyplot as plt - import numpy as np import pandas as pd -from IPython import embed as shell - -## CONNECT TO datajoint -import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition, data, behavior -from ibl_pipeline.analyses import behavior as behavior_analysis -from ibl_pipeline.utils import psychofit as psy # https://github.com/cortex-lab/psychofit # loading and plotting functions from behavior_plots import * -from load_mouse_data_datajoint import * # this has all plotting functions +from IPython import embed as shell +from load_mouse_data_datajoint import * # this has all plotting functions + +from ibl_pipeline import acquisition, action, behavior, data, reference, subject +from ibl_pipeline.analyses import behavior as behavior_analysis +from ibl_pipeline.utils import ( + psychofit as psy, # https://github.com/cortex-lab/psychofit +) # folder to save plots, from DataJoint -path = '/Figures_DataJoint_shortcuts/' +path = "/Figures_DataJoint_shortcuts/" # ============================================= # # START BIG OVERVIEW PLOT # ============================================= # allsubjects = pd.DataFrame.from_dict( - ((subject.Subject - subject.Death) * subject.SubjectLab & 'sex!="U"' & - action.Weighing & action.WaterAdministration).fetch( - as_dict=True, order_by=['lab_name', 'subject_nickname']) + ( + (subject.Subject - subject.Death) * subject.SubjectLab + & 'sex!="U"' + & action.Weighing + & action.WaterAdministration + ).fetch(as_dict=True, order_by=["lab_name", "subject_nickname"]) ) if allsubjects.empty: - raise ValueError('DataJoint seems to be down, please try again later') + raise ValueError("DataJoint seems to be down, please try again later") -users = allsubjects['lab_name'].unique() +users = allsubjects["lab_name"].unique() print(users) # from guido: make sure max 5 mice are plotted on a single figure @@ -53,184 +64,245 @@ for lidx, lab in enumerate(users): - # take mice from this lab only - subjects = pd.DataFrame.from_dict( - ((subject.Subject - subject.Death) * subject.SubjectLab & 'sex!="U"' & - 'lab_name="%s"'%lab & action.Weighing & action.WaterAdministration).fetch( - as_dict=True, order_by=['subject_nickname'])) - - # group by batches: mice that were born on the same day - batches = subjects.subject_birth_date.unique() - - for birth_date in batches: - - mice = subjects.loc[subjects['subject_birth_date'] == birth_date]['subject_nickname'].unique() - print(mice) - - # TODO: need a better way to define batches! litter mates? - for sub_batch in np.arange(0,len(mice),sub_batch_size): - - fig = plt.figure(figsize=(13.69, 8.27), constrained_layout=True) - axes = [] - sns.set_palette("colorblind") # palette for water types - - for i, mouse in enumerate(mice[sub_batch:sub_batch+sub_batch_size]): - print(mouse) - - # WEIGHT CURVE AND WATER INTAKE - t = time.time() - weight_water, baseline = get_water_weight(mouse, lab) - - # determine x limits - xlims = [weight_water.date.min() - timedelta(days=2), weight_water.date.max() + timedelta(days=2)] - ax = plt.subplot2grid((4, sub_batch_size), (0, i)) - plot_water_weight_curve(weight_water, baseline, ax, xlims) - axes.append(ax) - - # check whether the subject is trained based the the lastest session - subj = subject.Subject & 'subject_nickname="{}"'.format(mouse) - last_session = subj.aggr( - behavior.TrialSet, session_start_time='max(session_start_time)') - - if not len(last_session): - training_status = 'traing in progress' - else: - training_status = \ - (behavior_analysis.SessionTrainingStatus & last_session).fetch1( - 'training_status') - - days_intraining = (subj * behavior.TrialSet.proj(session_date='DATE(session_start_time)')).fetch('session_start_time') - - if training_status in ['trained', 'ready for ephys']: - first_trained_session = subj.aggr( - behavior_analysis.SessionTrainingStatus & - 'training_status="trained"', - first_trained='min(session_start_time)') - first_trained_session_time = first_trained_session.fetch1( - 'first_trained') - # convert to timestamp - trained_date = pd.DatetimeIndex([first_trained_session_time])[0] - - # how many days to training? - days_to_trained = sum(days_intraining < trained_date.to_pydatetime()) - - if training_status == 'ready for ephys': - first_biased_session = subj.aggr( - behavior_analysis.SessionTrainingStatus & - 'training_status="ready for ephys"', - first_biased='min(session_start_time)') - first_biased_session_time = first_biased_session.fetch1( - 'first_biased') - # convert to timestamp - biased_date = pd.DatetimeIndex([first_biased_session_time])[0] - - # how many days from trained to biased? - days_to_biased = sum( - (days_intraining < biased_date.to_pydatetime()) & - (days_intraining > trained_date.to_pydatetime()) - ) - - else: - days_to_biased = np.nan - else: - days_to_trained = np.nan - days_to_biased = np.nan - - # keep track - training_review = training_review.append( - pd.DataFrame({ - 'subject_nickname': mouse, - 'lab_name': lab, - 'training_status': training_status, - 'days_to_trained': days_to_trained, - 'days_to_biased': days_to_biased}, - index=[0]), - ignore_index=True) - - # MAIN PLOTS - if len(last_session): - ax = plt.subplot2grid((4, sub_batch_size), (1, i)) - if training_status == 'trained': - # indicate date at which the animal is 'trained' - # shell() - ax.axvline(trained_date, color="orange") - elif training_status == 'ready for ephys': - # indicate date at which the animal is 'ready for ephys' - ax.axvline(trained_date, color="orange") - ax.axvline(biased_date, color="forestgreen") - - plot_trialcounts_sessionlength(mouse, lab, ax, xlims) - fix_date_axis(ax) - axes.append(ax) - - # PERFORMANCE AND MEDIAN RT - ax = plt.subplot2grid((4, sub_batch_size), (2, i)) - plot_performance_rt(mouse, lab, ax, xlims) - if training_status == 'trained': - # indicate date at which the animal is 'trained' - # shell() - ax.axvline(trained_date, color="orange") - elif training_status == 'ready for ephys': - # indicate date at which the animal is 'ready for ephys' - ax.axvline(trained_date, color="orange") - ax.axvline(biased_date, color="forestgreen") - - fix_date_axis(ax) - axes.append(ax) - - # CONTRAST/CHOICE HEATMAP - ax = plt.subplot2grid((4, sub_batch_size), (3, i)) - plot_contrast_heatmap(mouse, lab, ax, xlims) - - elapsed = time.time() - t - print( "Elapsed time: %f seconds.\n" %elapsed) - - # add an xlabel with the mouse's name and sex - ax.set_xlabel('Mouse %s (%s)'%(mouse, - subjects.loc[subjects['subject_nickname'] == mouse]['sex'].item()), fontweight="bold") - - if training_status == 'trained': - ax.xaxis.label.set_color('orange') - elif training_status == 'ready for ephys': - ax.xaxis.label.set_color('forestgreen') - elif training_status == 'over40days': - ax.xaxis.label.set_color('red') - - # FIX: after creating the whole plot, make sure xticklabels are shown - # https://stackoverflow.com/questions/46824263/x-ticks-disappear-when-plotting-on-subplots-sharing-x-axis - for i, ax in enumerate(axes): - [t.set_visible(True) for t in ax.get_xticklabels()] - - # SAVE FIGURE PER BATCH - fig.suptitle('Mice born on %s, %s' %(birth_date, lab)) - try: - plt.tight_layout(rect=[0, 0.03, 1, 0.95]) - except: - pass - - mice_sub = mice[sub_batch:sub_batch+sub_batch_size] - mice_str = '"' + mice[0] + '"' - for imouse in mice_sub[1:]: - mice_str = mice_str + ', "' + imouse + '"' - - mice_sub = subject.Subject & 'subject_nickname in ({})'.format(mice_str) - last_behavior = mice_sub.aggr(behavior.TrialSet, - last_behavior = 'max(session_start_time)').fetch('last_behavior') - - # include date of last change in data - last_weighing = mice_sub.aggr(action.Weighing, - last_weighing = 'max(weighing_time)').fetch('last_weighing') - last_water = mice_sub.aggr(action.WaterAdministration, - last_water = 'max(administration_time)').fetch('last_water') - - if last_behavior.size: - last_behavior = max(last_behavior) - last_date = last_behavior.date().strftime("%Y-%m-%d") - else: - last_date = max(np.hstack([last_weighing, last_water])).date().strftime("%Y-%m-%d") - - fig.savefig(os.path.join(path + '%s_%s_batch_%s_%s.pdf'%(last_date, lab, birth_date, str(int(sub_batch/sub_batch_size)+1)))) - fig.savefig(os.path.join(path + '%s_%s_batch_%s_%s.png'%(last_date, lab, birth_date, str(int(sub_batch/sub_batch_size)+1)))) - plt.close(fig) - -training_review.to_csv(os.path.join(path + 'training_review.csv')) + # take mice from this lab only + subjects = pd.DataFrame.from_dict( + ( + (subject.Subject - subject.Death) * subject.SubjectLab + & 'sex!="U"' + & 'lab_name="%s"' % lab + & action.Weighing + & action.WaterAdministration + ).fetch(as_dict=True, order_by=["subject_nickname"]) + ) + + # group by batches: mice that were born on the same day + batches = subjects.subject_birth_date.unique() + + for birth_date in batches: + + mice = subjects.loc[subjects["subject_birth_date"] == birth_date][ + "subject_nickname" + ].unique() + print(mice) + + # TODO: need a better way to define batches! litter mates? + for sub_batch in np.arange(0, len(mice), sub_batch_size): + + fig = plt.figure(figsize=(13.69, 8.27), constrained_layout=True) + axes = [] + sns.set_palette("colorblind") # palette for water types + + for i, mouse in enumerate(mice[sub_batch : sub_batch + sub_batch_size]): + print(mouse) + + # WEIGHT CURVE AND WATER INTAKE + t = time.time() + weight_water, baseline = get_water_weight(mouse, lab) + + # determine x limits + xlims = [ + weight_water.date.min() - timedelta(days=2), + weight_water.date.max() + timedelta(days=2), + ] + ax = plt.subplot2grid((4, sub_batch_size), (0, i)) + plot_water_weight_curve(weight_water, baseline, ax, xlims) + axes.append(ax) + + # check whether the subject is trained based the the lastest session + subj = subject.Subject & 'subject_nickname="{}"'.format(mouse) + last_session = subj.aggr( + behavior.TrialSet, session_start_time="max(session_start_time)" + ) + + if not len(last_session): + training_status = "traing in progress" + else: + training_status = ( + behavior_analysis.SessionTrainingStatus & last_session + ).fetch1("training_status") + + days_intraining = ( + subj + * behavior.TrialSet.proj(session_date="DATE(session_start_time)") + ).fetch("session_start_time") + + if training_status in ["trained", "ready for ephys"]: + first_trained_session = subj.aggr( + behavior_analysis.SessionTrainingStatus + & 'training_status="trained"', + first_trained="min(session_start_time)", + ) + first_trained_session_time = first_trained_session.fetch1( + "first_trained" + ) + # convert to timestamp + trained_date = pd.DatetimeIndex([first_trained_session_time])[0] + + # how many days to training? + days_to_trained = sum( + days_intraining < trained_date.to_pydatetime() + ) + + if training_status == "ready for ephys": + first_biased_session = subj.aggr( + behavior_analysis.SessionTrainingStatus + & 'training_status="ready for ephys"', + first_biased="min(session_start_time)", + ) + first_biased_session_time = first_biased_session.fetch1( + "first_biased" + ) + # convert to timestamp + biased_date = pd.DatetimeIndex([first_biased_session_time])[0] + + # how many days from trained to biased? + days_to_biased = sum( + (days_intraining < biased_date.to_pydatetime()) + & (days_intraining > trained_date.to_pydatetime()) + ) + + else: + days_to_biased = np.nan + else: + days_to_trained = np.nan + days_to_biased = np.nan + + # keep track + training_review = training_review.append( + pd.DataFrame( + { + "subject_nickname": mouse, + "lab_name": lab, + "training_status": training_status, + "days_to_trained": days_to_trained, + "days_to_biased": days_to_biased, + }, + index=[0], + ), + ignore_index=True, + ) + + # MAIN PLOTS + if len(last_session): + ax = plt.subplot2grid((4, sub_batch_size), (1, i)) + if training_status == "trained": + # indicate date at which the animal is 'trained' + # shell() + ax.axvline(trained_date, color="orange") + elif training_status == "ready for ephys": + # indicate date at which the animal is 'ready for ephys' + ax.axvline(trained_date, color="orange") + ax.axvline(biased_date, color="forestgreen") + + plot_trialcounts_sessionlength(mouse, lab, ax, xlims) + fix_date_axis(ax) + axes.append(ax) + + # PERFORMANCE AND MEDIAN RT + ax = plt.subplot2grid((4, sub_batch_size), (2, i)) + plot_performance_rt(mouse, lab, ax, xlims) + if training_status == "trained": + # indicate date at which the animal is 'trained' + # shell() + ax.axvline(trained_date, color="orange") + elif training_status == "ready for ephys": + # indicate date at which the animal is 'ready for ephys' + ax.axvline(trained_date, color="orange") + ax.axvline(biased_date, color="forestgreen") + + fix_date_axis(ax) + axes.append(ax) + + # CONTRAST/CHOICE HEATMAP + ax = plt.subplot2grid((4, sub_batch_size), (3, i)) + plot_contrast_heatmap(mouse, lab, ax, xlims) + + elapsed = time.time() - t + print("Elapsed time: %f seconds.\n" % elapsed) + + # add an xlabel with the mouse's name and sex + ax.set_xlabel( + "Mouse %s (%s)" + % ( + mouse, + subjects.loc[subjects["subject_nickname"] == mouse][ + "sex" + ].item(), + ), + fontweight="bold", + ) + + if training_status == "trained": + ax.xaxis.label.set_color("orange") + elif training_status == "ready for ephys": + ax.xaxis.label.set_color("forestgreen") + elif training_status == "over40days": + ax.xaxis.label.set_color("red") + + # FIX: after creating the whole plot, make sure xticklabels are shown + # https://stackoverflow.com/questions/46824263/x-ticks-disappear-when-plotting-on-subplots-sharing-x-axis + for i, ax in enumerate(axes): + [t.set_visible(True) for t in ax.get_xticklabels()] + + # SAVE FIGURE PER BATCH + fig.suptitle("Mice born on %s, %s" % (birth_date, lab)) + try: + plt.tight_layout(rect=[0, 0.03, 1, 0.95]) + except: + pass + + mice_sub = mice[sub_batch : sub_batch + sub_batch_size] + mice_str = '"' + mice[0] + '"' + for imouse in mice_sub[1:]: + mice_str = mice_str + ', "' + imouse + '"' + + mice_sub = subject.Subject & "subject_nickname in ({})".format(mice_str) + last_behavior = mice_sub.aggr( + behavior.TrialSet, last_behavior="max(session_start_time)" + ).fetch("last_behavior") + + # include date of last change in data + last_weighing = mice_sub.aggr( + action.Weighing, last_weighing="max(weighing_time)" + ).fetch("last_weighing") + last_water = mice_sub.aggr( + action.WaterAdministration, last_water="max(administration_time)" + ).fetch("last_water") + + if last_behavior.size: + last_behavior = max(last_behavior) + last_date = last_behavior.date().strftime("%Y-%m-%d") + else: + last_date = ( + max(np.hstack([last_weighing, last_water])) + .date() + .strftime("%Y-%m-%d") + ) + + fig.savefig( + os.path.join( + path + + "%s_%s_batch_%s_%s.pdf" + % ( + last_date, + lab, + birth_date, + str(int(sub_batch / sub_batch_size) + 1), + ) + ) + ) + fig.savefig( + os.path.join( + path + + "%s_%s_batch_%s_%s.png" + % ( + last_date, + lab, + birth_date, + str(int(sub_batch / sub_batch_size) + 1), + ) + ) + ) + plt.close(fig) + +training_review.to_csv(os.path.join(path + "training_review.csv")) diff --git a/prelim_analyses/behavioral_snapshots/behavioral_snapshot.py b/prelim_analyses/behavioral_snapshots/behavioral_snapshot.py index 7bcc87ee..0aee516a 100644 --- a/prelim_analyses/behavioral_snapshots/behavioral_snapshot.py +++ b/prelim_analyses/behavioral_snapshots/behavioral_snapshot.py @@ -1,34 +1,40 @@ # Anne Urai, CSHL, 2018 # see https://github.com/int-brain-lab/ibllib/tree/master/python/oneibl/examples -import time, re, datetime, os, glob +import datetime +import glob +import os +import re +import time from datetime import timedelta + import seaborn as sns ## INITIALIZE A FEW THINGS -sns.set_style("darkgrid", {'xtick.bottom': True,'ytick.left': True, 'lines.markeredgewidth':0}) +sns.set_style( + "darkgrid", {"xtick.bottom": True, "ytick.left": True, "lines.markeredgewidth": 0} +) sns.set_context(context="paper") +## CONNECT TO datajoint +import datajoint as dj import matplotlib as mpl import matplotlib.pyplot as plt - import numpy as np import pandas as pd + +# loading and plotting functions +from behavior_plots import * from IPython import embed as shell +from load_mouse_data_datajoint import * # this has all plotting functions -## CONNECT TO datajoint -import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition, data, behavior +from ibl_pipeline import acquisition, action, behavior, data, reference, subject from ibl_pipeline.analyses import behavior as behavior_analysis from ibl_pipeline.utils import psychofit as psy -# loading and plotting functions -from behavior_plots import * -from load_mouse_data_datajoint import * # this has all plotting functions - # folder to save plots, from DataJoint -path = '/Figures_DataJoint_shortcuts/' -datapath = '/Data_shortcut/' +path = "/Figures_DataJoint_shortcuts/" +datapath = "/Data_shortcut/" # ============================================= # # START BIG OVERVIEW PLOT @@ -42,21 +48,23 @@ # as_dict=True, order_by=['lab_name', 'subject_nickname'])) allsubjects = pd.DataFrame.from_dict( - ((subject.Subject & - 'subject_nickname="KS014"') * subject.SubjectLab).fetch(as_dict=True)) + ((subject.Subject & 'subject_nickname="KS014"') * subject.SubjectLab).fetch( + as_dict=True + ) +) if allsubjects.empty: - raise ValueError('DataJoint seems to be down, please try again later') + raise ValueError("DataJoint seems to be down, please try again later") -users = allsubjects['lab_name'].unique() +users = allsubjects["lab_name"].unique() print(users) for lidx, lab in enumerate(users): # take mice from this lab only - subjects = allsubjects[allsubjects['lab_name'].str.contains(lab)].reset_index() + subjects = allsubjects[allsubjects["lab_name"].str.contains(lab)].reset_index() - for i, mouse in enumerate(subjects['subject_nickname']): + for i, mouse in enumerate(subjects["subject_nickname"]): try: # get all this mouse's data print(mouse) @@ -67,58 +75,81 @@ # ============================================= # # MAKE THE FIGURE, divide subplots using gridspec - fig, axes = plt.subplots(ncols=5, nrows=4, - gridspec_kw=dict(width_ratios=[2, 2, 1, 1, 1], height_ratios=[1, 1, 1, 1]), - figsize=(13.69, 8.27)) + fig, axes = plt.subplots( + ncols=5, + nrows=4, + gridspec_kw=dict( + width_ratios=[2, 2, 1, 1, 1], height_ratios=[1, 1, 1, 1] + ), + figsize=(13.69, 8.27), + ) sns.set_palette("colorblind") # palette for water types - fig.suptitle('Mouse %s (%s), born %s, %s, %s' %(subjects['subject_nickname'][i], - subjects['sex'][i], subjects['subject_birth_date'][i], subjects['lab_name'][i], - subjects['subject_description'][i])) + fig.suptitle( + "Mouse %s (%s), born %s, %s, %s" + % ( + subjects["subject_nickname"][i], + subjects["sex"][i], + subjects["subject_birth_date"][i], + subjects["lab_name"][i], + subjects["subject_description"][i], + ) + ) # ============================================= # # WEIGHT CURVE AND WATER INTAKE # ============================================= # # determine x limits - xlims = [weight_water.date.min()-timedelta(days=2), weight_water.date.max()+timedelta(days=2)] - plot_water_weight_curve(weight_water, baseline, axes[0,0], xlims) + xlims = [ + weight_water.date.min() - timedelta(days=2), + weight_water.date.max() + timedelta(days=2), + ] + plot_water_weight_curve(weight_water, baseline, axes[0, 0], xlims) # ============================================= # # check whether the subject is trained based the the lastest session # ============================================= # - subj = subject.Subject & 'subject_nickname="{}"'.format(mouse) & \ - (subject.SubjectLab & 'lab_name="{}"'.format(lab)) + subj = ( + subject.Subject + & 'subject_nickname="{}"'.format(mouse) + & (subject.SubjectLab & 'lab_name="{}"'.format(lab)) + ) subj_sessions = behavior.TrialSet & subj if not len(subj_sessions): continue last_session = subj.aggr( - behavior.TrialSet, session_start_time='max(session_start_time)') + behavior.TrialSet, session_start_time="max(session_start_time)" + ) if not len(last_session): - traing_status = 'training in progress' + traing_status = "training in progress" else: - training_status = \ - (behavior_analysis.SessionTrainingStatus & last_session).fetch1( - 'training_status') - if training_status in ['trained', 'ready for ephys']: + training_status = ( + behavior_analysis.SessionTrainingStatus & last_session + ).fetch1("training_status") + if training_status in ["trained", "ready for ephys"]: first_trained_session = subj.aggr( - behavior_analysis.SessionTrainingStatus & - 'training_status="trained"', - first_trained='min(session_start_time)') + behavior_analysis.SessionTrainingStatus + & 'training_status="trained"', + first_trained="min(session_start_time)", + ) first_trained_session_time = first_trained_session.fetch1( - 'first_trained') + "first_trained" + ) # convert to timestamp trained_date = pd.DatetimeIndex([first_trained_session_time])[0] - if training_status == 'ready for ephys': + if training_status == "ready for ephys": first_biased_session = subj.aggr( - behavior_analysis.SessionTrainingStatus & - 'training_status="ready for ephys"', - first_biased='min(session_start_time)') + behavior_analysis.SessionTrainingStatus + & 'training_status="ready for ephys"', + first_biased="min(session_start_time)", + ) first_biased_session_time = first_biased_session.fetch1( - 'first_biased') + "first_biased" + ) biased_date = pd.DatetimeIndex([first_biased_session_time])[0] # ============================================= # @@ -126,10 +157,10 @@ # ============================================= # plot_trialcounts_sessionlength(mouse, lab, axes[1, 0], xlims) - if training_status == 'trained': + if training_status == "trained": # indicate date at which the animal is 'trained' axes[1, 0].axvline(trained_date, color="orange") - elif training_status == 'ready for ephys': + elif training_status == "ready for ephys": # indicate date at which the animal is 'ready for ephys' axes[1, 0].axvline(trained_date, color="orange") axes[1, 0].axvline(biased_date, color="forestgreen") @@ -139,10 +170,10 @@ # ==== ========================================= # plot_performance_rt(mouse, lab, axes[2, 0], xlims) - if training_status == 'trained': + if training_status == "trained": # indicate date at which the animal is 'trained' axes[2, 0].axvline(trained_date, color="orange") - elif training_status == 'ready for ephys': + elif training_status == "ready for ephys": # indicate date at which the animal is 'ready for ephys' axes[2, 0].axvline(trained_date, color="orange") axes[2, 0].axvline(biased_date, color="forestgreen") @@ -151,25 +182,41 @@ # CONTRAST/CHOICE HEATMAP # ============================================= # - plot_contrast_heatmap(mouse, lab, axes[3,0], xlims) + plot_contrast_heatmap(mouse, lab, axes[3, 0], xlims) # ============================================= # # PSYCHOMETRIC FUNCTION FITS OVER TIME # ============================================= # # grab values from precomputed - pars = pd.DataFrame((behavior_analysis.BehavioralSummaryByDate.PsychResults * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"'%mouse & 'lab_name="%s"'%lab).fetch(as_dict=True)) + pars = pd.DataFrame( + ( + behavior_analysis.BehavioralSummaryByDate.PsychResults + * subject.Subject + * subject.SubjectLab + & 'subject_nickname="%s"' % mouse + & 'lab_name="%s"' % lab + ).fetch(as_dict=True) + ) # link to their descriptions - ylabels = {'threshold': r'Threshold $(\sigma)$', 'bias': r'Bias $(\mu)$', - 'lapse_low': r'Lapse low $(\gamma)$', 'lapse_high': r'Lapse high $(\lambda)$'} + ylabels = { + "threshold": r"Threshold $(\sigma)$", + "bias": r"Bias $(\mu)$", + "lapse_low": r"Lapse low $(\gamma)$", + "lapse_high": r"Lapse high $(\lambda)$", + } ylims = [[-5, 105], [-105, 105], [-0.05, 1.05], [-0.05, 1.05]] - yticks = [[0, 19, 100], [-100, -16, 0, 16, 100], [-0, 0.2, 0.5, 1], [-0, 0.2, 0.5, 1]] + yticks = [ + [0, 19, 100], + [-100, -16, 0, 16, 100], + [-0, 0.2, 0.5, 1], + [-0, 0.2, 0.5, 1], + ] # pick a good-looking diverging colormap with black in the middle cmap = sns.diverging_palette(20, 220, n=3, center="dark") - left_blocks = pars['prob_left_block'].unique() + left_blocks = pars["prob_left_block"].unique() if len(left_blocks) == 1: cmap = "gist_gray" @@ -177,23 +224,42 @@ # plot the fitted parameters for pidx, (var, labelname) in enumerate(ylabels.items()): - ax = axes[pidx,1] - - sns.lineplot(x="session_date", y=var, marker='o', hue="prob_left_block", - hue_order=[1, 0, 2], linestyle='', lw=0, - palette=cmap, data=pars, legend=None, ax=ax) - ax.set(xlabel='', ylabel=labelname, ylim=ylims[pidx], + ax = axes[pidx, 1] + + sns.lineplot( + x="session_date", + y=var, + marker="o", + hue="prob_left_block", + hue_order=[1, 0, 2], + linestyle="", + lw=0, + palette=cmap, + data=pars, + legend=None, + ax=ax, + ) + ax.set( + xlabel="", + ylabel=labelname, + ylim=ylims[pidx], yticks=yticks[pidx], - xlim=[pars.session_date.min()-timedelta(days=1), pars.session_date.max()+timedelta(days=1)]) + xlim=[ + pars.session_date.min() - timedelta(days=1), + pars.session_date.max() + timedelta(days=1), + ], + ) fix_date_axis(ax) if pidx == 0: - ax.set(title=r'$\gamma + (1 -\gamma-\lambda) (erf(\frac{x-\mu}{\sigma} + 1)/2$') + ax.set( + title=r"$\gamma + (1 -\gamma-\lambda) (erf(\frac{x-\mu}{\sigma} + 1)/2$" + ) - if training_status == 'trained': + if training_status == "trained": # indicate date at which the animal is 'trained' ax.axvline(trained_date, color="orange") - elif training_status == 'ready for ephys': + elif training_status == "ready for ephys": # indicate date at which the animal is 'ready for ephys' ax.axvline(trained_date, color="orange") ax.axvline(biased_date, color="forestgreen") @@ -205,8 +271,8 @@ behav = get_behavior(mouse, lab) didx = 1 - sorteddays = behav['days'].sort_values(ascending=True).unique() - for day in behav['days'].unique(): + sorteddays = behav["days"].sort_values(ascending=True).unique() + for day in behav["days"].unique(): # use only the last three days if len(sorteddays) >= 3: @@ -214,53 +280,98 @@ continue # grab only that day - dat = behav.loc[behav['days'] == day, :] - print(dat['date'].unique()) + dat = behav.loc[behav["days"] == day, :] + print(dat["date"].unique()) didx += 1 # colormap for the asymmetric blocks cmap = sns.diverging_palette(20, 220, n=3, center="dark") - if len(dat['probabilityLeft_block'].unique()) == 1: - cmap = [np.array([0,0,0,1])] + if len(dat["probabilityLeft_block"].unique()) == 1: + cmap = [np.array([0, 0, 0, 1])] # PSYCHOMETRIC FUNCTION ax = axes[0, didx] - for ix, probLeft in enumerate(dat['probabilityLeft_block'].sort_values().unique()): - plot_psychometric(dat.loc[dat['probabilityLeft_block'] == probLeft, :], ax=ax, color=cmap[ix]) + for ix, probLeft in enumerate( + dat["probabilityLeft_block"].sort_values().unique() + ): + plot_psychometric( + dat.loc[dat["probabilityLeft_block"] == probLeft, :], + ax=ax, + color=cmap[ix], + ) ax.set(xlabel="Contrast (%)", ylabel="Choose right (%)") - ax.set(title=pd.to_datetime(dat['start_time'].unique()[0]).strftime('%b-%d, %A')) + ax.set( + title=pd.to_datetime(dat["start_time"].unique()[0]).strftime( + "%b-%d, %A" + ) + ) # CHRONOMETRIC FUNCTION ax = axes[1, didx] - for ix, probLeft in enumerate(dat['probabilityLeft_block'].sort_values().unique()): - plot_chronometric(dat.loc[dat['probabilityLeft_block'] == probLeft, :], ax, cmap[ix]) - ax.set(ylim=[0.1,1.5], yticks=[0.1, 1.5]) + for ix, probLeft in enumerate( + dat["probabilityLeft_block"].sort_values().unique() + ): + plot_chronometric( + dat.loc[dat["probabilityLeft_block"] == probLeft, :], + ax, + cmap[ix], + ) + ax.set(ylim=[0.1, 1.5], yticks=[0.1, 1.5]) ax.set_yscale("log") - ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(lambda y,pos: - ('{{:.{:1d}f}}'.format(int(np.maximum(-np.log10(y),0)))).format(y))) + ax.yaxis.set_major_formatter( + mpl.ticker.FuncFormatter( + lambda y, pos: ( + "{{:.{:1d}f}}".format(int(np.maximum(-np.log10(y), 0))) + ).format(y) + ) + ) # RTS THROUGHOUT SESSION ax = axes[2, didx] - sns.scatterplot(x='trial', y='rt', style='correct', hue='correct', - palette={1:"#009E73", 0:"#D55E00"}, # from https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/mpl-data/stylelib/seaborn-colorblind.mplstyle - markers={1:'o', 0:'X'}, s=10, edgecolors='face', - alpha=.5, data=dat, ax=ax, legend=False) + sns.scatterplot( + x="trial", + y="rt", + style="correct", + hue="correct", + palette={ + 1: "#009E73", + 0: "#D55E00", + }, # from https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/mpl-data/stylelib/seaborn-colorblind.mplstyle + markers={1: "o", 0: "X"}, + s=10, + edgecolors="face", + alpha=0.5, + data=dat, + ax=ax, + legend=False, + ) # running median overlaid - sns.lineplot(x='trial', y='rt', color='black', ci=None, - data=dat[['trial', 'rt']].rolling(10).median(), ax=ax) + sns.lineplot( + x="trial", + y="rt", + color="black", + ci=None, + data=dat[["trial", "rt"]].rolling(10).median(), + ax=ax, + ) ax.set(xlabel="Trial number", ylabel="RT (s)", ylim=[0.02, 60]) ax.set_yscale("log") - ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(lambda y,pos: - ('{{:.{:1d}f}}'.format(int(np.maximum(-np.log10(y),0)))).format(y))) - - # ============================ # - # WHEEL ANALYSIS - TODO - # ============================ # + ax.yaxis.set_major_formatter( + mpl.ticker.FuncFormatter( + lambda y, pos: ( + "{{:.{:1d}f}}".format(int(np.maximum(-np.log10(y), 0))) + ).format(y) + ) + ) + + # ============================ # + # WHEEL ANALYSIS - TODO + # ============================ # # clean up layout for j in range(3): - axes[j,3].set(ylabel='') - axes[j,4].set(ylabel='') + axes[j, 3].set(ylabel="") + axes[j, 4].set(ylabel="") # ============================================= # # SAVE WHETHER THERE ARE DATA OR NOT! @@ -270,18 +381,18 @@ # get most recent session_date for the naming of the plot subj_with_last_session = subj.aggr( - behavior.TrialSet, last_behavior='max(session_start_time)' + behavior.TrialSet, last_behavior="max(session_start_time)" ) - last_behavior_time = subj_with_last_session.fetch('last_behavior') + last_behavior_time = subj_with_last_session.fetch("last_behavior") subj_with_last_weighing_water = subj.aggr( action.Weighing * action.WaterAdministration, - last_weighing='max(weighing_time)', - last_water='max(administration_time)' + last_weighing="max(weighing_time)", + last_water="max(administration_time)", + ) + last_weighing_time, last_water_time = subj_with_last_weighing_water.fetch1( + "last_weighing", "last_water" ) - last_weighing_time, last_water_time = \ - subj_with_last_weighing_water.fetch1( - 'last_weighing', 'last_water') if last_behavior_time.size: last_time = last_behavior_time[0] @@ -290,16 +401,33 @@ last_date = last_time.date().strftime("%Y-%m-%d") - - fig.savefig(os.path.join(path + '%s_%s_mouse_%s_snapshot.pdf' % (last_date, - subjects.loc[subjects['subject_nickname'] == mouse]['lab_name'].item(), - mouse))) - print('saving figure...') - fig.savefig(os.path.join(path + '%s_%s_mouse_%s_snapshot.png' % (last_date, - subjects.loc[ - subjects['subject_nickname'] == mouse][ - 'lab_name'].item(), - mouse))) + fig.savefig( + os.path.join( + path + + "%s_%s_mouse_%s_snapshot.pdf" + % ( + last_date, + subjects.loc[subjects["subject_nickname"] == mouse][ + "lab_name" + ].item(), + mouse, + ) + ) + ) + print("saving figure...") + fig.savefig( + os.path.join( + path + + "%s_%s_mouse_%s_snapshot.png" + % ( + last_date, + subjects.loc[subjects["subject_nickname"] == mouse][ + "lab_name" + ].item(), + mouse, + ) + ) + ) plt.close(fig) except Exception as e: print(e) diff --git a/prelim_analyses/behavioral_snapshots/load_mouse_data_datajoint.py b/prelim_analyses/behavioral_snapshots/load_mouse_data_datajoint.py index fa86d5fc..55674dd3 100644 --- a/prelim_analyses/behavioral_snapshots/load_mouse_data_datajoint.py +++ b/prelim_analyses/behavioral_snapshots/load_mouse_data_datajoint.py @@ -1,62 +1,85 @@ # from oneibl.one import ONE -import pandas as pd -import numpy as np -from os import listdir, getcwd -from os.path import isfile, join import re -from IPython import embed as shell +from os import getcwd, listdir +from os.path import isfile, join import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition, data, behavior +import numpy as np +import pandas as pd +from IPython import embed as shell +from ibl_pipeline import acquisition, action, behavior, data, reference, subject # ==================== # # DATAJOINT # ==================== # + def get_weights(mousename, labname): wei = {} - wei['date_time'], wei['weight'] = (action.Weighing * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"'%mousename & 'lab_name="%s"'%labname).fetch('weighing_time', - 'weight', order_by='weighing_time') + wei["date_time"], wei["weight"] = ( + action.Weighing * subject.Subject * subject.SubjectLab + & 'subject_nickname="%s"' % mousename + & 'lab_name="%s"' % labname + ).fetch("weighing_time", "weight", order_by="weighing_time") wei = pd.DataFrame.from_dict(wei) # ensure that the reference weight is also added - restrictions = pd.DataFrame.from_dict((action.WaterRestriction * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"'%mousename & 'lab_name="%s"'%labname).fetch(as_dict=True)) - restr_summary = restrictions[['restriction_start_time', 'reference_weight']].copy() - restr_summary = restr_summary.rename(columns = {'restriction_start_time':'date_time', 'reference_weight':'weight'}) + restrictions = pd.DataFrame.from_dict( + ( + action.WaterRestriction * subject.Subject * subject.SubjectLab + & 'subject_nickname="%s"' % mousename + & 'lab_name="%s"' % labname + ).fetch(as_dict=True) + ) + restr_summary = restrictions[["restriction_start_time", "reference_weight"]].copy() + restr_summary = restr_summary.rename( + columns={"restriction_start_time": "date_time", "reference_weight": "weight"} + ) wei = pd.concat([wei, restr_summary], ignore_index=True) if not wei.empty: # now organize in a pandas dataframe - wei['date_time'] = pd.to_datetime(wei.date_time) - wei.sort_values('date_time', inplace=True) + wei["date_time"] = pd.to_datetime(wei.date_time) + wei.sort_values("date_time", inplace=True) wei.reset_index(drop=True, inplace=True) - wei['date'] = wei['date_time'].dt.floor('D') - wei['days'] = wei.date - wei.date[0] - wei['days'] = wei.days.dt.days # convert to number of days from start of the experiment + wei["date"] = wei["date_time"].dt.floor("D") + wei["days"] = wei.date - wei.date[0] + wei[ + "days" + ] = wei.days.dt.days # convert to number of days from start of the experiment return wei def get_water(mousename, labname): - wei = (action.WaterAdministration * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"'%mousename & 'lab_name="%s"'%labname).fetch(as_dict=True) + wei = ( + action.WaterAdministration * subject.Subject * subject.SubjectLab + & 'subject_nickname="%s"' % mousename + & 'lab_name="%s"' % labname + ).fetch(as_dict=True) wei = pd.DataFrame(wei) if not wei.empty: - wei.rename(columns={'administration_time': 'date_time', 'watertype_name': 'water_type'}, inplace=True) - - wei['date_time'] = pd.to_datetime(wei.date_time) - wei.sort_values('date_time', inplace=True) + wei.rename( + columns={ + "administration_time": "date_time", + "watertype_name": "water_type", + }, + inplace=True, + ) + + wei["date_time"] = pd.to_datetime(wei.date_time) + wei.sort_values("date_time", inplace=True) wei.reset_index(drop=True, inplace=True) - wei['date'] = wei['date_time'].dt.floor('D') + wei["date"] = wei["date_time"].dt.floor("D") - wei['days'] = wei.date - wei.date[0] - wei['days'] = wei.days.dt.days # convert to number of days from start of the experiment + wei["days"] = wei.date - wei.date[0] + wei[ + "days" + ] = wei.days.dt.days # convert to number of days from start of the experiment return wei @@ -64,116 +87,159 @@ def get_water(mousename, labname): def get_water_weight(mousename, labname): wei = get_weights(mousename, labname) - wa = get_water(mousename, labname) + wa = get_water(mousename, labname) if not (wei.empty or wa.empty): # AVERAGE WEIGHT WITHIN EACH DAY - wei = wei.groupby(['date']).mean().reset_index() - wa = wa.groupby(['date', 'water_type']).mean().reset_index() + wei = wei.groupby(["date"]).mean().reset_index() + wa = wa.groupby(["date", "water_type"]).mean().reset_index() # make sure that NaNs are entered for days with only water or weight but not both - combined = pd.merge(wei, wa, on="date", how='outer') - combined = combined[['date', 'weight', 'water_administered', 'water_type', 'adlib']] - combined['date'] = combined['date'].dt.floor("D") + combined = pd.merge(wei, wa, on="date", how="outer") + combined = combined[ + ["date", "weight", "water_administered", "water_type", "adlib"] + ] + combined["date"] = combined["date"].dt.floor("D") # continuous date range - add missing dates to make my life easier later! - missingdates = np.setdiff1d(pd.date_range(combined.date.min(), combined.date.max()), combined['date']) - combined = pd.merge(combined, pd.DataFrame(missingdates, columns=['date']), how='outer') - combined.sort_values(by='date', inplace=True) + missingdates = np.setdiff1d( + pd.date_range(combined.date.min(), combined.date.max()), combined["date"] + ) + combined = pd.merge( + combined, pd.DataFrame(missingdates, columns=["date"]), how="outer" + ) + combined.sort_values(by="date", inplace=True) combined.reset_index(inplace=True) # also indicate all the dates as days from the start of water restriction (for easier plotting) - combined['days'] = combined.date - combined.date[0] - combined['days'] = combined.days.dt.days # convert to number of days from start of the experiment + combined["days"] = combined.date - combined.date[0] + combined[ + "days" + ] = ( + combined.days.dt.days + ) # convert to number of days from start of the experiment # ALSO GET INFO ABOUT WATER RESTRICTIONS - restrictions = pd.DataFrame.from_dict((action.WaterRestriction * subject.Subject * subject.SubjectLab & - 'subject_nickname="%s"'%mousename & 'lab_name="%s"'%labname).fetch(as_dict=True)) + restrictions = pd.DataFrame.from_dict( + ( + action.WaterRestriction * subject.Subject * subject.SubjectLab + & 'subject_nickname="%s"' % mousename + & 'lab_name="%s"' % labname + ).fetch(as_dict=True) + ) # ensure that start and end times are pandas datetimes - restrictions['restriction_start_time'] = pd.to_datetime(restrictions['restriction_start_time']) - restrictions['restriction_end_time'] = pd.to_datetime(restrictions['restriction_end_time']) + restrictions["restriction_start_time"] = pd.to_datetime( + restrictions["restriction_start_time"] + ) + restrictions["restriction_end_time"] = pd.to_datetime( + restrictions["restriction_end_time"] + ) # round down to the date - restrictions['date_start'] = restrictions['restriction_start_time'].dt.floor('D') - restrictions['date_end'] = restrictions['restriction_end_time'].dt.floor('D') + restrictions["date_start"] = restrictions["restriction_start_time"].dt.floor( + "D" + ) + restrictions["date_end"] = restrictions["restriction_end_time"].dt.floor("D") # fill to the appropriate day - restrictions['day_start'] = combined['days'].max() * np.ones(restrictions['date_start'].shape) - restrictions['day_end'] = combined['days'].max() * np.ones(restrictions['date_end'].shape) - combined['water_restricted'] = np.zeros(combined['days'].shape, dtype=bool) + restrictions["day_start"] = combined["days"].max() * np.ones( + restrictions["date_start"].shape + ) + restrictions["day_end"] = combined["days"].max() * np.ones( + restrictions["date_end"].shape + ) + combined["water_restricted"] = np.zeros(combined["days"].shape, dtype=bool) # recode dates into days datedict = pd.Series(combined.days.values, index=combined.date).to_dict() for d in range(len(restrictions)): - restrictions.loc[d, 'day_start'] = datedict[restrictions.loc[d, 'date_start']] + restrictions.loc[d, "day_start"] = datedict[ + restrictions.loc[d, "date_start"] + ] # only do this for dates that are not NaT try: - restrictions.loc[d, 'day_end'] = datedict[restrictions.loc[d, 'date_end']] + restrictions.loc[d, "day_end"] = datedict[ + restrictions.loc[d, "date_end"] + ] except: pass # for each day, mark if the animal was on WR or not - combined['water_restricted'] = combined['water_restricted'] | \ - combined['days'].between(restrictions['day_start'][d], - restrictions['day_end'][d], inclusive=True) + combined["water_restricted"] = combined["water_restricted"] | combined[ + "days" + ].between( + restrictions["day_start"][d], restrictions["day_end"][d], inclusive=True + ) else: - combined = pd.DataFrame() + combined = pd.DataFrame() restrictions = pd.DataFrame() return combined, restrictions + def get_behavior(mousename, labname, **kwargs): - b = (subject.Subject & 'subject_nickname = "%s"' % mousename) \ - * (subject.SubjectLab & 'lab_name="%s"' % labname)\ - * subject.SubjectLab.proj(ac_lab='lab_name') \ - * behavior.TrialSet.Trial * acquisition.Session.proj( - 'session_end_time', 'task_protocol') - behav = pd.DataFrame(b.fetch(order_by='session_start_time, trial_id')) + b = ( + (subject.Subject & 'subject_nickname = "%s"' % mousename) + * (subject.SubjectLab & 'lab_name="%s"' % labname) + * subject.SubjectLab.proj(ac_lab="lab_name") + * behavior.TrialSet.Trial + * acquisition.Session.proj("session_end_time", "task_protocol") + ) + behav = pd.DataFrame(b.fetch(order_by="session_start_time, trial_id")) if not behav.empty: # https://github.com/shenshan/IBL-pipeline/blob/master/notebooks/Behavioral%20overview%20snapshot.ipynb - behav['start_time'] = pd.to_datetime(behav['session_start_time']) + behav["start_time"] = pd.to_datetime(behav["session_start_time"]) # DJ doesn't return session_end_time - behav['end_time'] = pd.to_datetime(behav['session_end_time']) - behav['trial'] = behav['trial_id'] - 1 - behav['date'] = behav['session_start_time'].dt.floor("D") + behav["end_time"] = pd.to_datetime(behav["session_end_time"]) + behav["trial"] = behav["trial_id"] - 1 + behav["date"] = behav["session_start_time"].dt.floor("D") - behav['days'] = behav.date - behav.date[0] - behav['days'] = behav.days.dt.days + behav["days"] = behav.date - behav.date[0] + behav["days"] = behav.days.dt.days # check that the contrasts are correctly extracted - assert(all(behav['trial_stim_contrast_right']) >= 0) - assert(all(behav['trial_stim_contrast_left']) >= 0) - - behav['signedContrast'] = (behav['trial_stim_contrast_right'] - behav['trial_stim_contrast_left']) * 100 - behav['signedContrast'] = behav.signedContrast.astype(int) - - val_map = {'CCW': 1, 'No Go': 0, 'CW': -1} - behav['choice'] = behav['trial_response_choice'].map(val_map) - behav['correct'] = np.where(np.sign(behav['signedContrast']) == behav['choice'], 1, 0) - behav.loc[behav['signedContrast'] == 0, 'correct'] = np.NaN - - behav['choice2'] = behav.choice.replace([-1, 0, 1], [0, np.nan, 1]) # code as 0, 100 for percentages - behav['correct_easy'] = behav.correct - behav.loc[np.abs(behav['signedContrast']) < 50, 'correct_easy'] = np.NaN - behav.rename(columns={'trial_stim_prob_left': 'probabilityLeft'}, inplace=True) - - behav['rt'] = behav['trial_response_time'] - behav['trial_stim_on_time'] - behav['included'] = behav['trial_included'] + assert all(behav["trial_stim_contrast_right"]) >= 0 + assert all(behav["trial_stim_contrast_left"]) >= 0 + + behav["signedContrast"] = ( + behav["trial_stim_contrast_right"] - behav["trial_stim_contrast_left"] + ) * 100 + behav["signedContrast"] = behav.signedContrast.astype(int) + + val_map = {"CCW": 1, "No Go": 0, "CW": -1} + behav["choice"] = behav["trial_response_choice"].map(val_map) + behav["correct"] = np.where( + np.sign(behav["signedContrast"]) == behav["choice"], 1, 0 + ) + behav.loc[behav["signedContrast"] == 0, "correct"] = np.NaN + + behav["choice2"] = behav.choice.replace( + [-1, 0, 1], [0, np.nan, 1] + ) # code as 0, 100 for percentages + behav["correct_easy"] = behav.correct + behav.loc[np.abs(behav["signedContrast"]) < 50, "correct_easy"] = np.NaN + behav.rename(columns={"trial_stim_prob_left": "probabilityLeft"}, inplace=True) + + behav["rt"] = behav["trial_response_time"] - behav["trial_stim_on_time"] + behav["included"] = behav["trial_included"] # don't count RT if there was no response - behav.loc[behav.choice == 0, 'rt'] = np.nan + behav.loc[behav.choice == 0, "rt"] = np.nan # for trainingChoiceWorld, make sure all probabilityLeft = 0.5 - behav['probabilityLeft_block'] = behav['probabilityLeft'] - behav.fillna({'task_protocol':'unknown'}, inplace=True) - behav.loc[behav['task_protocol'].str.contains("trainingChoiceWorld"), 'probabilityLeft_block'] = 0.5 + behav["probabilityLeft_block"] = behav["probabilityLeft"] + behav.fillna({"task_protocol": "unknown"}, inplace=True) + behav.loc[ + behav["task_protocol"].str.contains("trainingChoiceWorld"), + "probabilityLeft_block", + ] = 0.5 return behav diff --git a/scripts/analyses_behavior.py b/scripts/analyses_behavior.py index 542fc653..70f743ed 100755 --- a/scripts/analyses_behavior.py +++ b/scripts/analyses_behavior.py @@ -1,18 +1,17 @@ from ibl_pipeline.analyses import behavior - -if __name__ == '__main__': +if __name__ == "__main__": kwargs = dict(display_progress=True, suppress_errors=True) - print('----------- Populating PsychResults ------------') + print("----------- Populating PsychResults ------------") behavior.PsychResults.populate(**kwargs) - print('--------- Populating PsychResultsBlock ---------') + print("--------- Populating PsychResultsBlock ---------") behavior.PsychResultsBlock.populate(**kwargs) - print('----------- Populating ReactionTime ------------') + print("----------- Populating ReactionTime ------------") behavior.ReactionTime.populate(**kwargs) - print('----- Populating ReactionTimeContrastBlock -----') + print("----- Populating ReactionTimeContrastBlock -----") behavior.ReactionTimeContrastBlock.populate(**kwargs) - print('------- Populating SessionTrainingStatus -------') + print("------- Populating SessionTrainingStatus -------") behavior.SessionTrainingStatus.populate(**kwargs) - print('------ Populating BehavioralSummaryByDate ------') + print("------ Populating BehavioralSummaryByDate ------") behavior.BehavioralSummaryByDate.populate(**kwargs) diff --git a/scripts/auto_update_subject_fields.py b/scripts/auto_update_subject_fields.py index 4ad4ce8f..8b5dd09f 100755 --- a/scripts/auto_update_subject_fields.py +++ b/scripts/auto_update_subject_fields.py @@ -1,181 +1,214 @@ -from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import alyxraw -from ibl_pipeline import subject -import datajoint as dj import datetime +import datajoint as dj from tqdm import tqdm -if __name__ == '__main__': +from ibl_pipeline import subject +from ibl_pipeline.ingest import alyxraw +from ibl_pipeline.ingest import subject as subject_ingest + +if __name__ == "__main__": # ========= update all subjects fields in the subject shadow table ============== - for subj in tqdm((subject_ingest.Subject).fetch('KEY'), position=0): + for subj in tqdm((subject_ingest.Subject).fetch("KEY"), position=0): # fetch corresponding entry in alyxraw table - alyxraw.AlyxRaw & dict(uuid=subj['subject_uuid']) - subj_ingest = subject_ingest.Subject & \ - dict(subject_uuid=subj['subject_uuid']) + alyxraw.AlyxRaw & dict(uuid=subj["subject_uuid"]) + subj_ingest = subject_ingest.Subject & dict(subject_uuid=subj["subject_uuid"]) sex, dob, line, strain, source = subj_ingest.fetch1( - 'sex', 'subject_birth_date', 'subject_line', - 'subject_strain', 'subject_source') + "sex", + "subject_birth_date", + "subject_line", + "subject_strain", + "subject_source", + ) # ---------------- sex update ------------------- try: - sex_new = (alyxraw.AlyxRaw.Field & - dict(uuid=subj['subject_uuid'], - fname='sex')).fetch1('fvalue') + sex_new = ( + alyxraw.AlyxRaw.Field & dict(uuid=subj["subject_uuid"], fname="sex") + ).fetch1("fvalue") except Exception: continue - if sex_new == 'None': + if sex_new == "None": sex_new = None if sex != sex_new: - dj.Table._update(subj_ingest, 'sex', sex_new) - if sex and sex != 'U': - print(f'updated field "sex" for one entry {subj}, \ - original: {sex}, new: {sex_new}') + dj.Table._update(subj_ingest, "sex", sex_new) + if sex and sex != "U": + print( + f'updated field "sex" for one entry {subj}, \ + original: {sex}, new: {sex_new}' + ) # ---------------- dob update ------------------ - dob_new = (alyxraw.AlyxRaw.Field & - dict(uuid=subj['subject_uuid'], - fname='birth_date')).fetch1('fvalue') + dob_new = ( + alyxraw.AlyxRaw.Field & dict(uuid=subj["subject_uuid"], fname="birth_date") + ).fetch1("fvalue") - if dob_new == 'None': + if dob_new == "None": dob_new = None else: - dob_new = datetime.datetime.strptime(dob_new, '%Y-%m-%d').date() + dob_new = datetime.datetime.strptime(dob_new, "%Y-%m-%d").date() if dob != dob_new: if dob_new: - dj.Table._update(subj_ingest, 'subject_birth_date', dob_new) + dj.Table._update(subj_ingest, "subject_birth_date", dob_new) if dob: - dob_str = dob.strftime('%Y-%m-%d') + dob_str = dob.strftime("%Y-%m-%d") else: dob_str = None if dob_new: - dob_new_str = dob_new.strftime('%Y-%m-%d') + dob_new_str = dob_new.strftime("%Y-%m-%d") else: dob_new_str = None if dob: - print(f'updated field "birth date" for one entry {subj}, \ - original: {dob_str}, new: {dob_new_str}') + print( + f'updated field "birth date" for one entry {subj}, \ + original: {dob_str}, new: {dob_new_str}' + ) # --------------- line update ------------------- - line_uuid = (alyxraw.AlyxRaw.Field & - dict(uuid=subj['subject_uuid'], - fname='line')).fetch1('fvalue') + line_uuid = ( + alyxraw.AlyxRaw.Field & dict(uuid=subj["subject_uuid"], fname="line") + ).fetch1("fvalue") # fetch actual line - if line_uuid == 'None': + if line_uuid == "None": line_new = None else: line_new = (subject_ingest.Line & dict(line_uuid=line_uuid)).fetch1( - 'line_name') + "line_name" + ) if line_new != line: if line_new: - dj.Table._update(subj_ingest, 'subject_line', line_new) + dj.Table._update(subj_ingest, "subject_line", line_new) if line: - print(f'updated field "line" for one subject {subj}, \ - original: {line}, new: {line_new}') + print( + f'updated field "line" for one subject {subj}, \ + original: {line}, new: {line_new}' + ) # ---------------- strain update ---------------- - strain_uuid = (alyxraw.AlyxRaw.Field & - dict(uuid=subj['subject_uuid'], - fname='strain')).fetch1('fvalue') - if strain_uuid == 'None': + strain_uuid = ( + alyxraw.AlyxRaw.Field & dict(uuid=subj["subject_uuid"], fname="strain") + ).fetch1("fvalue") + if strain_uuid == "None": strain_new = None else: # fetch actual strain - strain_new = (subject_ingest.Strain & - dict(strain_uuid=strain_uuid)).fetch1( - 'strain_name') + strain_new = (subject_ingest.Strain & dict(strain_uuid=strain_uuid)).fetch1( + "strain_name" + ) if strain != strain_new: - dj.Table._update(subj_ingest, 'subject_strain', strain_new) + dj.Table._update(subj_ingest, "subject_strain", strain_new) if strain: - print(f'updated field "strain" for one subject {subj}, \ - original: {strain}, new: {strain_new}') + print( + f'updated field "strain" for one subject {subj}, \ + original: {strain}, new: {strain_new}' + ) # ----------------- source update ---------------- - source_uuid = (alyxraw.AlyxRaw.Field & - dict(uuid=subj['subject_uuid'], - fname='source')).fetch1('fvalue') + source_uuid = ( + alyxraw.AlyxRaw.Field & dict(uuid=subj["subject_uuid"], fname="source") + ).fetch1("fvalue") - if source_uuid == 'None': + if source_uuid == "None": source_new = None else: # fetch actual source - source_new = (subject_ingest.Source & - dict(source_uuid=source_uuid)).fetch1( - 'source_name') + source_new = (subject_ingest.Source & dict(source_uuid=source_uuid)).fetch1( + "source_name" + ) if source != source_new: - dj.Table._update(subj_ingest, 'subject_source', source_new) + dj.Table._update(subj_ingest, "subject_source", source_new) if source: - print(f'updated field "source" for one subject {subj}, \ - original: {source}, new: {source_new}') - + print( + f'updated field "source" for one subject {subj}, \ + original: {source}, new: {source_new}' + ) # =========== update all subjects in the subject real table ================== # find out the overlap of shadow subject table and main subject table - for subj in tqdm((subject.Subject & - subject_ingest.Subject.proj()).fetch('KEY'), - position=0): + for subj in tqdm( + (subject.Subject & subject_ingest.Subject.proj()).fetch("KEY"), position=0 + ): subj_real = subject.Subject & subj sex, dob, line, strain, source = subj_real.fetch1( - 'sex', 'subject_birth_date', 'subject_line', - 'subject_strain', 'subject_source') - - sex_new, dob_new, line_new, strain_new, source_new = \ - (subject_ingest.Subject & subj).fetch1( - 'sex', 'subject_birth_date', 'subject_line', - 'subject_strain', 'subject_source') + "sex", + "subject_birth_date", + "subject_line", + "subject_strain", + "subject_source", + ) + + sex_new, dob_new, line_new, strain_new, source_new = ( + subject_ingest.Subject & subj + ).fetch1( + "sex", + "subject_birth_date", + "subject_line", + "subject_strain", + "subject_source", + ) if sex_new != sex: - dj.Table._update(subj_real, 'sex', sex_new) - if sex and sex != 'U': - print(f'updated field "sex" for one entry {subj}, \ - original: {sex}, new: {sex_new}') + dj.Table._update(subj_real, "sex", sex_new) + if sex and sex != "U": + print( + f'updated field "sex" for one entry {subj}, \ + original: {sex}, new: {sex_new}' + ) if dob != dob_new: if dob_new: - dj.Table._update(subj_real, 'subject_birth_date', dob_new) + dj.Table._update(subj_real, "subject_birth_date", dob_new) if dob: - dob_str = dob.strftime('%Y-%m-%d') + dob_str = dob.strftime("%Y-%m-%d") else: dob_str = None if dob_new: - dob_new_str = dob_new.strftime('%Y-%m-%d') + dob_new_str = dob_new.strftime("%Y-%m-%d") else: dob_new_str = None if dob: - print(f'updated field "birth date" for one entry {subj}, \ - original: {dob_str}, new: {dob_new_str}') + print( + f'updated field "birth date" for one entry {subj}, \ + original: {dob_str}, new: {dob_new_str}' + ) if line_new != line: if line_new: - dj.Table._update(subj_real, 'subject_line', line_new) + dj.Table._update(subj_real, "subject_line", line_new) if line: - print(f'updated field "line" for one subject {subj}, \ - original: {line}, new: {line_new}') + print( + f'updated field "line" for one subject {subj}, \ + original: {line}, new: {line_new}' + ) if strain != strain_new: - dj.Table._update(subj_real, 'subject_strain', strain_new) + dj.Table._update(subj_real, "subject_strain", strain_new) if strain: - print(f'updated field "strain" for one subject {subj}, \ - original: {strain}, new: {strain_new}') + print( + f'updated field "strain" for one subject {subj}, \ + original: {strain}, new: {strain_new}' + ) if source != source_new: - dj.Table._update(subj_real, 'subject_source', source_new) + dj.Table._update(subj_real, "subject_source", source_new) if source: - print(f'updated field "source" for one subject {subj}, \ - original: {source}, new: {source_new}') + print( + f'updated field "source" for one subject {subj}, \ + original: {source}, new: {source_new}' + ) diff --git a/scripts/auto_update_trajectories.py b/scripts/auto_update_trajectories.py index bff645a5..695c16fa 100755 --- a/scripts/auto_update_trajectories.py +++ b/scripts/auto_update_trajectories.py @@ -1,41 +1,50 @@ - import datajoint as dj +from ingest_alyx_raw import get_alyx_entries, insert_to_alyxraw +from tqdm import tqdm + from ibl_pipeline import histology -from ibl_pipeline.ingest import histology as histology_ingest from ibl_pipeline.ingest import alyxraw -from ingest_alyx_raw import get_alyx_entries, insert_to_alyxraw +from ibl_pipeline.ingest import histology as histology_ingest from ibl_pipeline.ingest.ingest_utils import copy_table -from tqdm import tqdm - -if __name__ == '__main__': +if __name__ == "__main__": kwargs = dict(display_progress=True, suppress_errors=True) with dj.config(safemode=False): # Get the entries whose timestamp has changed - changed = histology_ingest.ProbeTrajectory.proj( - 'trajectory_ts', uuid='probe_trajectory_uuid') * \ - (alyxraw.AlyxRaw.Field & 'fname="datetime"').proj( - ts='cast(fvalue as datetime)') & 'ts!=trajectory_ts' - - print('Deleting alyxraw entries for histology...') + changed = ( + histology_ingest.ProbeTrajectory.proj( + "trajectory_ts", uuid="probe_trajectory_uuid" + ) + * (alyxraw.AlyxRaw.Field & 'fname="datetime"').proj( + ts="cast(fvalue as datetime)" + ) + & "ts!=trajectory_ts" + ) + + print("Deleting alyxraw entries for histology...") (alyxraw.AlyxRaw & changed).delete() - print('Repopulate alyxraw.AlyxRaw for updates...') - insert_to_alyxraw(get_alyx_entries(models='experiments.trajectoryestimate')) + print("Repopulate alyxraw.AlyxRaw for updates...") + insert_to_alyxraw(get_alyx_entries(models="experiments.trajectoryestimate")) - print('Repopulate shadow histology.ProbeTrajectory and ChannelBrainRegion...') + print("Repopulate shadow histology.ProbeTrajectory and ChannelBrainRegion...") histology_ingest.ProbeTrajectory.populate(**kwargs) histology_ingest.ChannelBrainRegion.populate(**kwargs) - print('Updating and populate real histology.ProbeTrajectory and ChannelBrainRegion...') - for key in tqdm((histology.ProbeTrajectory & - changed.proj(probe_trajectory_uuid='uuid')).fetch('KEY'), - position=0): + print( + "Updating and populate real histology.ProbeTrajectory and ChannelBrainRegion..." + ) + for key in tqdm( + ( + histology.ProbeTrajectory & changed.proj(probe_trajectory_uuid="uuid") + ).fetch("KEY"), + position=0, + ): (histology.ProbeTrajectory & key).delete() histology.ProbeTrajectory.populate(key, **kwargs) - copy_table(histology, histology_ingest, 'ChannelBrainRegion') + copy_table(histology, histology_ingest, "ChannelBrainRegion") (histology.ClusterBrainRegion & key).delete() histology.ClusterBrainRegion.populate(key, **kwargs) (histology.SessionBrainRegion & key).delete() diff --git a/scripts/behavior_ingest_analyses.py b/scripts/behavior_ingest_analyses.py index d6d19110..2bbe0252 100755 --- a/scripts/behavior_ingest_analyses.py +++ b/scripts/behavior_ingest_analyses.py @@ -1,9 +1,9 @@ import time -from ibl_pipeline import subject, acquisition, data, behavior -from ibl_pipeline.analyses import behavior as behavior_analyses +from ibl_pipeline import acquisition, behavior, data, subject +from ibl_pipeline.analyses import behavior as behavior_analyses -if __name__ == '__main__': +if __name__ == "__main__": kwargs = dict(display_progress=True, suppress_errors=True) start = time.time() behavior.CompleteTrialSession.populate(**kwargs) @@ -14,4 +14,4 @@ behavior_analyses.BehavioralSummaryByDate.populate(**kwargs) end = time.time() - print(end-start) + print(end - start) diff --git a/scripts/compute_latest_date.py b/scripts/compute_latest_date.py index 5d325fee..e049d4c6 100755 --- a/scripts/compute_latest_date.py +++ b/scripts/compute_latest_date.py @@ -1,18 +1,19 @@ -''' +""" This script computes the latest event date happen to individual subject and manually insert into the table behavior_plotting.LatestDate -''' +""" + +from datetime import datetime import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition, data, behavior -from ibl_pipeline.analyses import behavior as behavior_analyses -from ibl_pipeline.plotting import behavior as behavior_plotting import numpy as np -from datetime import datetime from tqdm import tqdm +from ibl_pipeline import acquisition, action, behavior, data, reference, subject +from ibl_pipeline.analyses import behavior as behavior_analyses +from ibl_pipeline.plotting import behavior as behavior_plotting -if __name__ == '__main__': - print('Populating latest date...') - for key in tqdm(subject.Subject.fetch('KEY'), position=0): +if __name__ == "__main__": + print("Populating latest date...") + for key in tqdm(subject.Subject.fetch("KEY"), position=0): behavior_plotting.SubjectLatestEvent.create_entry(key) diff --git a/scripts/create_summary_csv.py b/scripts/create_summary_csv.py index 979092f0..c056c27f 100755 --- a/scripts/create_summary_csv.py +++ b/scripts/create_summary_csv.py @@ -1,62 +1,83 @@ -''' +""" This script creates a summary of the training status of animals in each lab. -''' +""" + +from datetime import datetime import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition, data, behavior -from ibl_pipeline.analyses import behavior as behavior_analyses -import pandas as pd import numpy as np -from datetime import datetime +import pandas as pd + +from ibl_pipeline import acquisition, action, behavior, data, reference, subject +from ibl_pipeline.analyses import behavior as behavior_analyses -if __name__ == '__main__': +if __name__ == "__main__": for ilab in reference.Lab: - ingested_sessions = acquisition.Session & 'task_protocol is not NULL' \ - & behavior.TrialSet - subjects = ((subject.Subject*subject.SubjectLab & ilab) - subject.Death) \ - & 'sex != "U"' & \ - action.Weighing & action.WaterAdministration & ingested_sessions + ingested_sessions = ( + acquisition.Session & "task_protocol is not NULL" & behavior.TrialSet + ) + subjects = ( + ((subject.Subject * subject.SubjectLab & ilab) - subject.Death) + & 'sex != "U"' + & action.Weighing + & action.WaterAdministration + & ingested_sessions + ) if not len(subjects): continue - last_sessions = subjects.aggr( - ingested_sessions, - 'subject_nickname', session_start_time='max(session_start_time)') \ - * acquisition.Session \ + last_sessions = ( + subjects.aggr( + ingested_sessions, + "subject_nickname", + session_start_time="max(session_start_time)", + ) + * acquisition.Session * behavior_analyses.SessionTrainingStatus + ) filerecord = data.FileRecord & subjects & 'relative_path LIKE "%alf%"' last_filerecord = subjects.aggr( - filerecord, latest_session_on_flatiron='max(session_start_time)') + filerecord, latest_session_on_flatiron="max(session_start_time)" + ) - summary = (last_sessions*last_filerecord).proj( - 'subject_nickname', 'task_protocol', 'training_status', - 'latest_session_on_flatiron').fetch( - as_dict=True) + summary = ( + (last_sessions * last_filerecord) + .proj( + "subject_nickname", + "task_protocol", + "training_status", + "latest_session_on_flatiron", + ) + .fetch(as_dict=True) + ) for entry in summary: subj = subject.Subject & entry - protocol = entry['task_protocol'].partition('ChoiseWorld')[0] - entry['latest_session_ingested'] = entry.pop('session_start_time') - entry['latest_task_protocol'] = entry.pop('task_protocol') - entry['latest_training_status'] = entry.pop('training_status') + protocol = entry["task_protocol"].partition("ChoiseWorld")[0] + entry["latest_session_ingested"] = entry.pop("session_start_time") + entry["latest_task_protocol"] = entry.pop("task_protocol") + entry["latest_training_status"] = entry.pop("training_status") # get all sessions with this protocol - entry['n_sessions'] = len( - ingested_sessions & subj & - 'task_protocol LIKE "{}%"'.format(protocol)) + entry["n_sessions"] = len( + ingested_sessions & subj & 'task_protocol LIKE "{}%"'.format(protocol) + ) summary = pd.DataFrame(summary) - summary.sort_values('subject_nickname', inplace=True, ascending=True) - summary.pop('subject_uuid') + summary.sort_values("subject_nickname", inplace=True, ascending=True) + summary.pop("subject_uuid") summary.index += 1 cols = summary.columns.tolist() cols = cols[-1:] + cols[:-1] summary = summary[cols] - last_session_date = \ - np.max(summary['latest_session_ingested']).date().strftime( - '%Y-%m-%d') + last_session_date = ( + np.max(summary["latest_session_ingested"]).date().strftime("%Y-%m-%d") + ) summary.to_csv( - '/src/IBL-pipeline/snapshots/{}_{}_summary.csv'.format( - last_session_date, ilab['lab_name']), index=False) - print('Saved {} current training status summary.'.format(ilab['lab_name'])) + "/src/IBL-pipeline/snapshots/{}_{}_summary.csv".format( + last_session_date, ilab["lab_name"] + ), + index=False, + ) + print("Saved {} current training status summary.".format(ilab["lab_name"])) diff --git a/scripts/dbtest/ingest_alyx_raw_dbtest.py b/scripts/dbtest/ingest_alyx_raw_dbtest.py index 0d4de871..3ef4c53c 100755 --- a/scripts/dbtest/ingest_alyx_raw_dbtest.py +++ b/scripts/dbtest/ingest_alyx_raw_dbtest.py @@ -1,12 +1,15 @@ -''' +""" This script ingest alyxraw for test database, ignoring the data tables. -''' +""" -from ibl_pipeline.ingest.ingest_alyx_raw import (get_alyx_entries, - insert_to_alyxraw) +from ibl_pipeline.ingest.ingest_alyx_raw import get_alyx_entries, insert_to_alyxraw -exclude_list = {'data.dataformat', 'data.datarepositorytype', - 'data.datasettype', 'data.dataset', - 'data.filerecord'} +exclude_list = { + "data.dataformat", + "data.datarepositorytype", + "data.datasettype", + "data.dataset", + "data.filerecord", +} insert_to_alyxraw(get_alyx_entries(exclude=exclude_list)) diff --git a/scripts/dbtest/ingest_alyx_real.py b/scripts/dbtest/ingest_alyx_real.py index 30f7b499..8d74f8e3 100755 --- a/scripts/dbtest/ingest_alyx_real.py +++ b/scripts/dbtest/ingest_alyx_real.py @@ -1,24 +1,25 @@ -''' +""" This script copies tuples in the shadow tables into the real tables for alyx. -''' +""" import datajoint as dj +from table_names import * + +from ibl_pipeline import acquisition, action, reference, subject +from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import action as action_ingest from ibl_pipeline.ingest import reference as reference_ingest from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import action as action_ingest -from ibl_pipeline.ingest import acquisition as acquisition_ingest -from ibl_pipeline import reference, subject, action, acquisition from ibl_pipeline.ingest.ingest_utils import copy_table -from table_names import * -if __name__ = '__main__': +if __name__ == "__main__": mods = [ [reference, reference_ingest, REF_TABLES], [subject, subject_ingest, SUBJECT_TABLES], [action, action_ingest, ACTION_TABLES], [acquisition, acquisition_ingest, ACQUISITION_TABLES], - [data, data_ingest, DATA_TABLES] + [data, data_ingest, DATA_TABLES], ] for (target, source, table_list) in mods: diff --git a/scripts/dbtest/ingest_alyx_shadow.py b/scripts/dbtest/ingest_alyx_shadow.py index 38f6e144..9db8f7ba 100755 --- a/scripts/dbtest/ingest_alyx_shadow.py +++ b/scripts/dbtest/ingest_alyx_shadow.py @@ -1,16 +1,14 @@ -''' +""" This script inserts tuples in the alyxraw table into the shadow tables \ via auto-populating. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import \ - (alyxraw, reference, subject, action, acquisition) -if __name__ == '__main__': - kwargs = dict( - display_progress=True, - suppress_errors=True) +from ibl_pipeline.ingest import acquisition, action, alyxraw, reference, subject + +if __name__ == "__main__": + kwargs = dict(display_progress=True, suppress_errors=True) tables = [ reference.Lab, @@ -45,8 +43,8 @@ action.Surgery, action.OtherAction, acquisition.Session, - ] + ] for table in tables: - print('Populating {}...'.format(table.__name__)) + print("Populating {}...".format(table.__name__)) table.populate(**kwargs) diff --git a/scripts/dbtest/ingest_alyx_shadow_membership.py b/scripts/dbtest/ingest_alyx_shadow_membership.py index cfe116d8..5cfe2fae 100755 --- a/scripts/dbtest/ingest_alyx_shadow_membership.py +++ b/scripts/dbtest/ingest_alyx_shadow_membership.py @@ -1,417 +1,430 @@ -''' +""" This script inserts membership tuples into the membership shadow tables, \ which cannot be inserted with auto-population. -''' +""" -import datajoint as dj import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition + +import datajoint as dj + +from ibl_pipeline.ingest import acquisition, action, alyxraw from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject -if __name__ == '__main__': +if __name__ == "__main__": # reference.ProjectLabMember - print('Ingesting reference.ProjectLabMember...') + print("Ingesting reference.ProjectLabMember...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' users = alyxraw.AlyxRaw.Field & projects & 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & users).proj(project_uuid='uuid') + keys = (alyxraw.AlyxRaw & users).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') + key_p["project_name"] = (reference.Project & key).fetch1("project_name") - user_uuids = grf(key, 'users', multiple_entries=True, - model='subjects.project') + user_uuids = grf(key, "users", multiple_entries=True, model="subjects.project") if len(user_uuids): for user_uuid in user_uuids: - if user_uuid == 'None': + if user_uuid == "None": continue key_pl = key_p.copy() - key_pl['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + key_pl["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") reference.ProjectLabMember.insert1(key_pl, skip_duplicates=True) # subject.AlleleSequence - print('Ingesting subject.AlleleSequence...') - keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid='uuid') + print("Ingesting subject.AlleleSequence...") + keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid="uuid") for key in keys: key_a = dict() - key_a['allele_name'] = (subject.Allele & key).fetch1('allele_name') - key['uuid'] = key['allele_uuid'] - sequences = grf(key, 'sequences', multiple_entries=True, - model="subjects.allele") + key_a["allele_name"] = (subject.Allele & key).fetch1("allele_name") + key["uuid"] = key["allele_uuid"] + sequences = grf( + key, "sequences", multiple_entries=True, model="subjects.allele" + ) for sequence in sequences: - if sequence != 'None': + if sequence != "None": key_as = key_a.copy() - key_as['sequence_name'] = \ - (subject.Sequence & - dict(sequence_uuid=uuid.UUID(sequence))).fetch1( - 'sequence_name') + key_as["sequence_name"] = ( + subject.Sequence & dict(sequence_uuid=uuid.UUID(sequence)) + ).fetch1("sequence_name") subject.AlleleSequence.insert1(key_as, skip_duplicates=True) # subject.LineAllele - print('Ingesting subject.LineAllele...') - keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid='uuid') + print("Ingesting subject.LineAllele...") + keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid="uuid") for key in keys: key_l = dict() - key_l['line_name'] = (subject.Line & key).fetch1('line_name') - key['uuid'] = key['line_uuid'] - alleles = grf(key, 'alleles', multiple_entries=True, model='subjects.line') + key_l["line_name"] = (subject.Line & key).fetch1("line_name") + key["uuid"] = key["line_uuid"] + alleles = grf(key, "alleles", multiple_entries=True, model="subjects.line") for allele in alleles: - if allele != 'None': + if allele != "None": key_la = key_l.copy() - key_la['allele_name'] = \ - (subject.Allele & - dict(allele_uuid=uuid.UUID(allele))).fetch1('allele_name') + key_la["allele_name"] = ( + subject.Allele & dict(allele_uuid=uuid.UUID(allele)) + ).fetch1("allele_name") subject.LineAllele.insert1(key_la, skip_duplicates=True) - # action.WaterRestrictionUser - print('Ingesting action.WaterRestrictionUser...') + print("Ingesting action.WaterRestrictionUser...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_users = alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & \ - 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_users).proj( - restriction_uuid='uuid') + restr_with_users = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_users).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ru = key_r.copy() - key_ru['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ru["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.WaterRestrictionUser.insert1(key_ru, skip_duplicates=True) - # action.WaterRestrictionProcedure - print('Ingesting action.WaterRestrictionProcedure...') + print("Ingesting action.WaterRestrictionProcedure...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_procedures = alyxraw.AlyxRaw.Field & restrictions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_procedures).proj( - restriction_uuid='uuid') + restr_with_procedures = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_procedures).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_rp = key_r.copy() - key_rp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_rp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.WaterRestrictionProcedure.insert1(key_rp, skip_duplicates=True) - # action.SurgeryUser - print('Ingesting action.SurgeryUser...') + print("Ingesting action.SurgeryUser...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_users = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="users"' & 'fvalue!="None"' - keys = (surgeries & surgeries_with_users).proj( - surgery_uuid='uuid') + surgeries_with_users = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="users"' & 'fvalue!="None"' + ) + keys = (surgeries & surgeries_with_users).proj(surgery_uuid="uuid") for key in keys: - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["surgery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.SurgeryUser.insert1(key_su, skip_duplicates=True) - # action.SurgeryProcedure - print('Ingesting action.SurgeryProcedure...') + print("Ingesting action.SurgeryProcedure...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_procedures = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="procedures"' & 'fvalue!="None"' + surgeries_with_procedures = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="procedures"' & 'fvalue!="None"' + ) - keys = (surgeries & surgeries_with_procedures).proj( - surgery_uuid='uuid') + keys = (surgeries & surgeries_with_procedures).proj(surgery_uuid="uuid") for key in keys: key_s = dict() - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["surgery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') - procedures = grf(key, 'procedures', multiple_entries=True) + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.SurgeryProcedure.insert1(key_sp, skip_duplicates=True) - # action.OtherActionUser - print('Ingesting action.OtherActionUser...') + print("Ingesting action.OtherActionUser...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_users = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (other_actions & other_actions_with_users).proj( - other_action_uuid='uuid') + other_actions_with_users = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (other_actions & other_actions_with_users).proj(other_action_uuid="uuid") for key in keys: - key['uuid'] = key['other_action_uuid'] + key["uuid"] = key["other_action_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['suggery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["suggery_uuid"]) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ou = key_o.copy() - key_ou['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ou["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.OtherActionUser.insert1(key_ou, skip_duplicates=True) - # action.OtherActionProcedure - print('Ingesting action.OtherActionProcedure...') + print("Ingesting action.OtherActionProcedure...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_procedures = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="procedures"' & 'fvalue!="None"' + other_actions_with_procedures = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="procedures"' & 'fvalue!="None"' + ) keys = (other_actions & other_actions_with_procedures).proj( - other_action_uuid='uuid') + other_action_uuid="uuid" + ) for key in keys: - key['uuid'] = key['other_action_uuid'] - key['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["other_action_uuid"] + key["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(action.OtherAction & key): - print('OtherAction {} not in the table action.OtherAction'.format( - key['other_action_uuid'])) + print( + "OtherAction {} not in the table action.OtherAction".format( + key["other_action_uuid"] + ) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_op = key_o.copy() - key_op['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_op["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.OtherActionProcedure.insert1(key_op, skip_duplicates=True) - # acquisition.ChildSession - print('Ingesting acquisition.ChildSession...') + print("Ingesting acquisition.ChildSession...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_parents = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="parent_session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_parents).proj( - session_uuid='uuid') + sessions_with_parents = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="parent_session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_parents).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_cs = dict() - key_cs['subject_uuid'], key_cs['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') - parent_session = grf(key, 'parent_session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))): - print('Parent session {} is not in \ - the table acquisition.Session'.format( - parent_session)) + key_cs["subject_uuid"], key_cs["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") + parent_session = grf(key, "parent_session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(parent_session))): + print( + "Parent session {} is not in \ + the table acquisition.Session".format( + parent_session + ) + ) continue - key_cs['parent_session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))).fetch1( - 'session_start_time') + key_cs["parent_session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(parent_session)) + ).fetch1("session_start_time") acquisition.ChildSession.insert1(key_cs, skip_duplicates=True) - # acquisition.SessionUser - print('Ingesting acquisition.SessionUser...') + print("Ingesting acquisition.SessionUser...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_users = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_users).proj( - session_uuid='uuid') + sessions_with_users = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_users).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") acquisition.SessionUser.insert1(key_su, skip_duplicates=True) - # acquisition.SessionProcedure - print('Ingesting acquisition.SessionProcedure...') + print("Ingesting acquisition.SessionProcedure...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") acquisition.SessionProcedure.insert1(key_sp, skip_duplicates=True) # acquisition.SessionProject - print('Ingesting acquisition.SessionProject...') + print("Ingesting acquisition.SessionProject...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="project"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="project"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - project = grf(key, 'project') + project = grf(key, "project") key_sp = key_s.copy() - key_sp['session_project'] = \ - (reference.Project & - dict(project_uuid=uuid.UUID(project))).fetch1( - 'project_name') + key_sp["session_project"] = ( + reference.Project & dict(project_uuid=uuid.UUID(project)) + ).fetch1("project_name") acquisition.SessionProject.insert1(key_sp, skip_duplicates=True) - # acquisition.WaterAdminstrationSession - print('Ingesting acquisition.WaterAdministrationSession...') + print("Ingesting acquisition.WaterAdministrationSession...") admin = alyxraw.AlyxRaw & 'model="actions.wateradministration"' - admin_with_session = alyxraw.AlyxRaw.Field & admin & \ - 'fname="session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid='uuid') + admin_with_session = ( + alyxraw.AlyxRaw.Field & admin & 'fname="session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid="uuid") for key in keys: - key['uuid'] = key['wateradmin_uuid'] + key["uuid"] = key["wateradmin_uuid"] if not len(action.WaterAdministration & key): - print('Water admin {} is not in the \ - table action.WaterAdministration'.format( - key['uuid'])) + print( + "Water admin {} is not in the \ + table action.WaterAdministration".format( + key["uuid"] + ) + ) continue key_ws = dict() - key_ws['subject_uuid'], key_ws['administration_time'] = \ - (action.WaterAdministration & key).fetch1( - 'subject_uuid', 'administration_time') + key_ws["subject_uuid"], key_ws["administration_time"] = ( + action.WaterAdministration & key + ).fetch1("subject_uuid", "administration_time") - session = grf(key, 'session') + session = grf(key, "session") - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - print('Session {} is not in the table acquisition.Session'.format( - session)) + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + print("Session {} is not in the table acquisition.Session".format(session)) continue - key_ws['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'session_start_time') + key_ws["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("session_start_time") - acquisition.WaterAdministrationSession.insert1(key_ws, - skip_duplicates=True) + acquisition.WaterAdministrationSession.insert1(key_ws, skip_duplicates=True) diff --git a/scripts/dbtest/table_names.py b/scripts/dbtest/table_names.py index 1597347e..f772caf6 100755 --- a/scripts/dbtest/table_names.py +++ b/scripts/dbtest/table_names.py @@ -1,68 +1,67 @@ -''' +""" table names -''' +""" REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabMembership', - 'LabLocation', - 'Project', - 'ProjectLabMember' + "Lab", + "LabMember", + "LabMembership", + "LabLocation", + "Project", + "ProjectLabMember", ) SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'SubjectUser', - 'SubjectProject', - 'SubjectLab', - 'BreedingPair', - 'Litter', - 'LitterSubject', - 'Weaning', - 'Death', - 'SubjectCullMethod', - 'Caging', - 'GenotypeTest', - 'Zygosity', - 'Implant', - 'Food', - 'CageType', - 'Enrichment', - 'Housing', - 'SubjectHousing' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "SubjectUser", + "SubjectProject", + "SubjectLab", + "BreedingPair", + "Litter", + "LitterSubject", + "Weaning", + "Death", + "SubjectCullMethod", + "Caging", + "GenotypeTest", + "Zygosity", + "Implant", + "Food", + "CageType", + "Enrichment", + "Housing", + "SubjectHousing", ) ACTION_TABLES = ( - 'ProcedureType', - 'Weighing', - 'WaterType', - 'WaterAdministration', - 'WaterRestriction', - 'WaterRestrictionUser', - 'WaterRestrictionProcedure', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', - 'OtherAction', - 'OtherActionUser', - 'OtherActionProcedure' - + "ProcedureType", + "Weighing", + "WaterType", + "WaterAdministration", + "WaterRestriction", + "WaterRestrictionUser", + "WaterRestrictionProcedure", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", + "OtherAction", + "OtherActionUser", + "OtherActionProcedure", ) ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', - 'WaterAdministrationSession' + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", + "WaterAdministrationSession", ) diff --git a/scripts/delete_real_tables_for_updates.py b/scripts/delete_real_tables_for_updates.py index 64718895..f3a31d34 100755 --- a/scripts/delete_real_tables_for_updates.py +++ b/scripts/delete_real_tables_for_updates.py @@ -1,12 +1,13 @@ - import datajoint as dj -from ibl_pipeline import reference, action, subject + +from ibl_pipeline import action +from ibl_pipeline import reference from ibl_pipeline import reference as reference_ingest +from ibl_pipeline import subject from ibl_pipeline.ingest import action as action_ingest from ibl_pipeline.ingest import subject as subject_ingest - -if __name__ == '__main__': +if __name__ == "__main__": with dj.config(safemode=False): diff --git a/scripts/delete_shadow_tables_for_updates.py b/scripts/delete_shadow_tables_for_updates.py index 0848a546..b23c2e37 100755 --- a/scripts/delete_shadow_tables_for_updates.py +++ b/scripts/delete_shadow_tables_for_updates.py @@ -1,51 +1,60 @@ import datajoint as dj -from ibl_pipeline.ingest import alyxraw, data -from ibl_pipeline.ingest import subject, action, acquisition, ephys from tqdm import tqdm -if __name__ == '__main__': +from ibl_pipeline.ingest import acquisition, action, alyxraw, data, ephys, subject + +if __name__ == "__main__": with dj.config(safemode=False): # delete alyxraw for data.filerecord if exists = 0 - print('Deleting alyxraw entries corresponding to file records...') - file_record_fields = alyxraw.AlyxRaw.Field & \ - 'fname = "exists"' & 'fvalue = "False"' + print("Deleting alyxraw entries corresponding to file records...") + file_record_fields = ( + alyxraw.AlyxRaw.Field & 'fname = "exists"' & 'fvalue = "False"' + ) for key in tqdm(file_record_fields): (alyxraw.AlyxRaw.Field & key).delete_quick() # delete water tables and related alyxraw entries - print('Deleting alyxraw entries of shadow weighing and water tables...') - (alyxraw.AlyxRaw & 'model in ("actions.weighing", "actions.waterrestriction", \ - "actions.wateradministration")').delete() + print("Deleting alyxraw entries of shadow weighing and water tables...") + ( + alyxraw.AlyxRaw + & 'model in ("actions.weighing", "actions.waterrestriction", \ + "actions.wateradministration")' + ).delete() # delete the lab, user, user_history, death_date, # and caging field of the subject - print('Deleting subject fields lab, user, user_hisotry and death date...') - subject_fields = alyxraw.AlyxRaw.Field & \ - (alyxraw.AlyxRaw & 'model="subjects.subject"') & \ - 'fname in ("projects", "sex", "birth_date", "source", \ + print("Deleting subject fields lab, user, user_hisotry and death date...") + subject_fields = ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="subjects.subject"') + & 'fname in ("projects", "sex", "birth_date", "source", \ "strain", "line", "lab", \ "death_date", "responsible_user", "json")' + ) subject_fields.delete_quick() - print('Deleting project records...') - projects = (alyxraw.AlyxRaw & 'model="subjects.project"') + print("Deleting project records...") + projects = alyxraw.AlyxRaw & 'model="subjects.project"' projects.delete() - session_project = alyxraw.AlyxRaw.Field & \ - (alyxraw.AlyxRaw & 'model="actions.session"') & \ - 'fname in ("project")' + session_project = ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="actions.session"') + & 'fname in ("project")' + ) session_project.delete_quick() - print('Deleting trajectories estimates time stamp...') - (alyxraw.AlyxRaw.Field & - (alyxraw.AlyxRaw & 'model="experiments.trajectoryestimate"') & - 'fname="datetime"').delete(force=True) - + print("Deleting trajectories estimates time stamp...") + ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="experiments.trajectoryestimate"') + & 'fname="datetime"' + ).delete(force=True) # delete some shadow membership tables - print('Deleting shadow membership tables...') + print("Deleting shadow membership tables...") subject.Death.delete() action.WaterRestrictionProcedure.delete() action.WaterRestrictionUser.delete() diff --git a/scripts/ibl-shell.py b/scripts/ibl-shell.py index e53d94cf..fae30e05 100755 --- a/scripts/ibl-shell.py +++ b/scripts/ibl-shell.py @@ -1,63 +1,60 @@ #! /usr/bin/env python3 +import logging import os import sys -import logging - - from code import interact # BOOKMARK: ensure loading -from ibl_pipeline import reference -from ibl_pipeline import subject -from ibl_pipeline import acquisition -from ibl_pipeline import behavior -from ibl_pipeline import ephys - +from ibl_pipeline import acquisition, behavior, ephys, reference, subject log = logging.getLogger(__name__) __all__ = [reference, subject, acquisition, behavior, ephys] def usage_exit(): - print("usage: {p} [{c}]" - .format(p=os.path.basename(sys.argv[0]), - c='|'.join(list(actions.keys())))) + print( + "usage: {p} [{c}]".format( + p=os.path.basename(sys.argv[0]), c="|".join(list(actions.keys())) + ) + ) sys.exit(0) def logsetup(*args): logging.basicConfig(level=logging.ERROR) log.setLevel(logging.DEBUG) - logging.getLogger('ibl').setLevel(logging.DEBUG) - logging.getLogger('ibl.ingest').setLevel(logging.DEBUG) + logging.getLogger("ibl").setLevel(logging.DEBUG) + logging.getLogger("ibl.ingest").setLevel(logging.DEBUG) def shell(*args): - interact('ibl shell.\n\nschema modules:\n\n - {m}\n' - .format(m='\n - '.join( - '.'.join(m.__name__.split('.')[1:]) for m in __all__)), - local=globals()) + interact( + "ibl shell.\n\nschema modules:\n\n - {m}\n".format( + m="\n - ".join(".".join(m.__name__.split(".")[1:]) for m in __all__) + ), + local=globals(), + ) return 0 def ingest(*args): # local import so db is only created created/accessed if/when ingesting - #from ibl_pipeline.ingest import (reference as ingest_reference, + # from ibl_pipeline.ingest import (reference as ingest_reference, # subject as ingest_subject, # acquisition as ingest_acquisition) - #for mod in [ingest_reference, ingest_subject, ingest_acquisition]: + # for mod in [ingest_reference, ingest_subject, ingest_acquisition]: # pass - return os.system('ingest_alyx.sh') + return os.system("ingest_alyx.sh") actions = { - 'shell': shell, - 'ingest': ingest, + "shell": shell, + "ingest": ingest, } -if __name__ == '__main__': +if __name__ == "__main__": if len(sys.argv) < 2 or sys.argv[1] not in actions: usage_exit() diff --git a/scripts/ingest_alyx_raw.py b/scripts/ingest_alyx_raw.py index 9e27a005..15062e44 100755 --- a/scripts/ingest_alyx_raw.py +++ b/scripts/ingest_alyx_raw.py @@ -1,20 +1,21 @@ -''' +""" This script load the json dump and insert the tuples into the alyxraw table. -''' +""" -import datajoint as dj +import collections import json import logging import math -import collections import os.path as path -from ibl_pipeline.ingest import alyxraw, QueryBuffer +import re import sys import uuid -import re -from tqdm import tqdm + +import datajoint as dj import numpy as np +from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, alyxraw logger = logging.getLogger(__name__) @@ -24,25 +25,32 @@ def get_alyx_entries(filename=None, models=None): dir_name = path.dirname(__file__) if len(sys.argv) < 2: # no arguments given # if no argument given, assume a canonical file location and name - filename = path.join('/', 'data', 'alyxfull.json') + filename = path.join("/", "data", "alyxfull.json") else: filename = path.join(dir_name, sys.argv[1]) - with open(filename, 'r') as fid: + with open(filename, "r") as fid: keys_all = json.load(fid) if not models: - return [key for key in keys_all - if key['model'] not in - ['auth.group', 'sessions.session', 'authtoken.token', - 'experiments.brainregion']] + return [ + key + for key in keys_all + if key["model"] + not in [ + "auth.group", + "sessions.session", + "authtoken.token", + "experiments.brainregion", + ] + ] elif isinstance(models, str): - return [key for key in keys_all if key['model'] == models] + return [key for key in keys_all if key["model"] == models] elif isinstance(models, list): - return [key for key in keys_all if key['model'] in models] + return [key for key in keys_all if key["model"] in models] else: - raise ValueError('models should be a str, list or numpy array') + raise ValueError("models should be a str, list or numpy array") def insert_to_alyxraw(keys): @@ -54,84 +62,91 @@ def insert_to_alyxraw(keys): # insert into AlyxRaw table for key in tqdm(keys, position=0): try: - pk = uuid.UUID(key['pk']) + pk = uuid.UUID(key["pk"]) except Exception: - print('Error for key: {}'.format(key)) + print("Error for key: {}".format(key)) continue - ib_main.add_to_queue1(dict(uuid=pk, model=key['model'])) + ib_main.add_to_queue1(dict(uuid=pk, model=key["model"])) if ib_main.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw tuples.') + logger.debug("Inserted 10000 raw tuples.") # print('Inserted 10000 raw tuples.') if ib_main.flush_insert(skip_duplicates=True): - logger.debug('Inserted remaining raw tuples') + logger.debug("Inserted remaining raw tuples") # print('Inserted remaining raw tuples') # insert into the part table AlyxRaw.Field for ikey, key in tqdm(enumerate(keys), position=0): try: try: - pk = uuid.UUID(key['pk']) + pk = uuid.UUID(key["pk"]) except ValueError: - print('Error for key: {}'.format(key)) + print("Error for key: {}".format(key)) continue - key_field = dict(uuid=uuid.UUID(key['pk'])) - for field_name, field_value in key['fields'].items(): + key_field = dict(uuid=uuid.UUID(key["pk"])) + for field_name, field_value in key["fields"].items(): key_field = dict(key_field, fname=field_name) - if field_name == 'json' and field_value is not None: + if field_name == "json" and field_value is not None: - key_field['value_idx'] = 0 - key_field['fvalue'] = json.dumps(field_value) - if len(key_field['fvalue']) < 10000: + key_field["value_idx"] = 0 + key_field["fvalue"] = json.dumps(field_value) + if len(key_field["fvalue"]) < 10000: ib_part.add_to_queue1(key_field) else: continue - if field_name == 'narrative' and field_value is not None: + if field_name == "narrative" and field_value is not None: # filter out emoji emoji_pattern = re.compile( "[" - u"\U0001F600-\U0001F64F" # emoticons - u"\U0001F300-\U0001F5FF" # symbols & pictographs - u"\U0001F680-\U0001F6FF" # transport & map symbols - u"\U0001F1E0-\U0001F1FF" # flags (iOS) - u"\U00002702-\U000027B0" - u"\U000024C2-\U0001F251" - "]+", flags=re.UNICODE) - - key_field['value_idx'] = 0 - key_field['fvalue'] = emoji_pattern.sub(r'', field_value) - - elif field_value is None or field_value == '' or field_value == [] or \ - (isinstance(field_value, float) and math.isnan(field_value)): - key_field['value_idx'] = 0 - key_field['fvalue'] = 'None' + "\U0001F600-\U0001F64F" # emoticons + "\U0001F300-\U0001F5FF" # symbols & pictographs + "\U0001F680-\U0001F6FF" # transport & map symbols + "\U0001F1E0-\U0001F1FF" # flags (iOS) + "\U00002702-\U000027B0" + "\U000024C2-\U0001F251" + "]+", + flags=re.UNICODE, + ) + + key_field["value_idx"] = 0 + key_field["fvalue"] = emoji_pattern.sub(r"", field_value) + + elif ( + field_value is None + or field_value == "" + or field_value == [] + or (isinstance(field_value, float) and math.isnan(field_value)) + ): + key_field["value_idx"] = 0 + key_field["fvalue"] = "None" ib_part.add_to_queue1(key_field) - elif type(field_value) is list and \ - (type(field_value[0]) is dict or type(field_value[0]) is str): + elif type(field_value) is list and ( + type(field_value[0]) is dict or type(field_value[0]) is str + ): for value_idx, value in enumerate(field_value): - key_field['value_idx'] = value_idx - key_field['fvalue'] = str(value) + key_field["value_idx"] = value_idx + key_field["fvalue"] = str(value) ib_part.add_to_queue1(key_field) else: - key_field['value_idx'] = 0 - key_field['fvalue'] = str(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = str(field_value) ib_part.add_to_queue1(key_field) if ib_part.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw field tuples') + logger.debug("Inserted 10000 raw field tuples") # print('Inserted 10000 raw field tuples') except Exception as e: - print('Problematic entry:{}'.format(ikey)) + print("Problematic entry:{}".format(ikey)) raise if ib_part.flush_insert(skip_duplicates=True): - logger.debug('Inserted all remaining raw field tuples') + logger.debug("Inserted all remaining raw field tuples") # print('Inserted all remaining raw field tuples') -if __name__ == '__main__': +if __name__ == "__main__": insert_to_alyxraw(get_alyx_entries()) diff --git a/scripts/ingest_alyx_real.py b/scripts/ingest_alyx_real.py index 12002b89..eae62c79 100755 --- a/scripts/ingest_alyx_real.py +++ b/scripts/ingest_alyx_real.py @@ -1,28 +1,28 @@ -''' +""" This script copies tuples in the shadow tables into the real tables for alyx. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import reference as reference_ingest -from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import action as action_ingest +from ingest_utils import copy_table +from table_names import * + +from ibl_pipeline import acquisition, action, data, ephys, histology, reference, subject from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import action as action_ingest from ibl_pipeline.ingest import data as data_ingest from ibl_pipeline.ingest import ephys as ephys_ingest from ibl_pipeline.ingest import histology as histology_ingest -from ibl_pipeline import reference, subject, action, acquisition, data, ephys, histology -from ingest_utils import copy_table -from table_names import * - +from ibl_pipeline.ingest import reference as reference_ingest +from ibl_pipeline.ingest import subject as subject_ingest -if __name__ == '__main__': +if __name__ == "__main__": mods = [ [reference, reference_ingest, REF_TABLES], [subject, subject_ingest, SUBJECT_TABLES], [action, action_ingest, ACTION_TABLES], [acquisition, acquisition_ingest, ACQUISITION_TABLES], - [data, data_ingest, DATA_TABLES] + [data, data_ingest, DATA_TABLES], ] for (target, source, table_list) in mods: @@ -31,18 +31,19 @@ copy_table(target, source, table) # ephys tables - table = 'ProbeModel' + table = "ProbeModel" print(table) copy_table(ephys, ephys_ingest, table) - table = 'ProbeInsertion' + table = "ProbeInsertion" print(table) copy_table(ephys, ephys_ingest, table, allow_direct_insert=True) # histology tables - print('ProbeTrajectory') + print("ProbeTrajectory") histology.ProbeTrajectory.populate(suppress_errors=True, display_progress=True) - print('ChannelBrainLocation') - copy_table(histology, histology_ingest, 'ChannelBrainLocation', - allow_direct_insert=True) + print("ChannelBrainLocation") + copy_table( + histology, histology_ingest, "ChannelBrainLocation", allow_direct_insert=True + ) diff --git a/scripts/ingest_alyx_shadow.py b/scripts/ingest_alyx_shadow.py index 2c1c98dc..e1925504 100755 --- a/scripts/ingest_alyx_shadow.py +++ b/scripts/ingest_alyx_shadow.py @@ -1,19 +1,26 @@ -''' +""" This script inserts tuples in the alyxraw table into the shadow tables \ via auto-populating. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import \ - (alyxraw, reference, subject, action, acquisition, data, ephys, histology) -if __name__ == '__main__': - kargs = dict( - display_progress=True, - suppress_errors=True) +from ibl_pipeline.ingest import ( + acquisition, + action, + alyxraw, + data, + ephys, + histology, + reference, + subject, +) + +if __name__ == "__main__": + kargs = dict(display_progress=True, suppress_errors=True) # reference tables - print('---------- Ingesting reference tables ---------') + print("---------- Ingesting reference tables ---------") reference.Lab.populate(**kargs) reference.LabMember.populate(**kargs) reference.LabMembership.populate(**kargs) @@ -22,7 +29,7 @@ reference.CoordinateSystem.populate(**kargs) # subject tables - print('---------- Ingesting subject tables ---------') + print("---------- Ingesting subject tables ---------") subject.Species.populate(**kargs) subject.Source.populate(**kargs) subject.Strain.populate(**kargs) @@ -45,7 +52,7 @@ subject.Zygosity.populate(**kargs) # action tables - print('---------- Ingesting action tables ---------') + print("---------- Ingesting action tables ---------") action.ProcedureType.populate(**kargs) action.Weighing.populate(**kargs) action.WaterType.populate(**kargs) @@ -55,11 +62,11 @@ action.OtherAction.populate(**kargs) # acquisition tables - print('---------- Ingesting acquisition tables ---------') + print("---------- Ingesting acquisition tables ---------") acquisition.Session.populate(**kargs) # data tables - print('---------- Ingesting data tables ---------') + print("---------- Ingesting data tables ---------") data.DataFormat.populate(**kargs) data.DataRepositoryType.populate(**kargs) data.DataRepository.populate(**kargs) @@ -68,10 +75,10 @@ # data.FileRecord.populate(**kargs) # ephys tables - print('------------ Ingesting ephys tables -----------') + print("------------ Ingesting ephys tables -----------") ephys.ProbeModel.populate(**kargs) ephys.ProbeInsertion.populate(**kargs) # histology tables - print('------------ Ingesting histology tables -----------') + print("------------ Ingesting histology tables -----------") histology.ProbeTrajectory.populate(**kargs) diff --git a/scripts/ingest_alyx_shadow_membership.py b/scripts/ingest_alyx_shadow_membership.py index 128b1326..bcb093ba 100755 --- a/scripts/ingest_alyx_shadow_membership.py +++ b/scripts/ingest_alyx_shadow_membership.py @@ -1,439 +1,451 @@ -''' +""" This script inserts membership tuples into the membership shadow tables, \ which cannot be inserted with auto-population. -''' +""" -import datajoint as dj import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, data + +import datajoint as dj + +from ibl_pipeline.ingest import acquisition, action, alyxraw, data from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject -if __name__ == '__main__': +if __name__ == "__main__": # reference.ProjectLabMember - print('Ingesting reference.ProjectLabMember...') + print("Ingesting reference.ProjectLabMember...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' users = alyxraw.AlyxRaw.Field & projects & 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & users).proj(project_uuid='uuid') + keys = (alyxraw.AlyxRaw & users).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') + key_p["project_name"] = (reference.Project & key).fetch1("project_name") - user_uuids = grf(key, 'users', multiple_entries=True, - model='subjects.project') + user_uuids = grf(key, "users", multiple_entries=True, model="subjects.project") if len(user_uuids): for user_uuid in user_uuids: - if user_uuid == 'None': + if user_uuid == "None": continue key_pl = key_p.copy() - key_pl['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + key_pl["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") reference.ProjectLabMember.insert1(key_pl, skip_duplicates=True) # subject.AlleleSequence - print('Ingesting subject.AlleleSequence...') - keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid='uuid') + print("Ingesting subject.AlleleSequence...") + keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid="uuid") for key in keys: key_a = dict() - key_a['allele_name'] = (subject.Allele & key).fetch1('allele_name') - key['uuid'] = key['allele_uuid'] - sequences = grf(key, 'sequences', multiple_entries=True, - model="subjects.allele") + key_a["allele_name"] = (subject.Allele & key).fetch1("allele_name") + key["uuid"] = key["allele_uuid"] + sequences = grf( + key, "sequences", multiple_entries=True, model="subjects.allele" + ) for sequence in sequences: - if sequence != 'None': + if sequence != "None": key_as = key_a.copy() - key_as['sequence_name'] = \ - (subject.Sequence & - dict(sequence_uuid=uuid.UUID(sequence))).fetch1( - 'sequence_name') + key_as["sequence_name"] = ( + subject.Sequence & dict(sequence_uuid=uuid.UUID(sequence)) + ).fetch1("sequence_name") subject.AlleleSequence.insert1(key_as, skip_duplicates=True) # subject.LineAllele - print('Ingesting subject.LineAllele...') - keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid='uuid') + print("Ingesting subject.LineAllele...") + keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid="uuid") for key in keys: key_l = dict() - key_l['line_name'] = (subject.Line & key).fetch1('line_name') - key['uuid'] = key['line_uuid'] - alleles = grf(key, 'alleles', multiple_entries=True, model='subjects.line') + key_l["line_name"] = (subject.Line & key).fetch1("line_name") + key["uuid"] = key["line_uuid"] + alleles = grf(key, "alleles", multiple_entries=True, model="subjects.line") for allele in alleles: - if allele != 'None': + if allele != "None": key_la = key_l.copy() - key_la['allele_name'] = \ - (subject.Allele & - dict(allele_uuid=uuid.UUID(allele))).fetch1('allele_name') + key_la["allele_name"] = ( + subject.Allele & dict(allele_uuid=uuid.UUID(allele)) + ).fetch1("allele_name") subject.LineAllele.insert1(key_la, skip_duplicates=True) - # action.WaterRestrictionUser - print('Ingesting action.WaterRestrictionUser...') + print("Ingesting action.WaterRestrictionUser...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_users = alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & \ - 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_users).proj( - restriction_uuid='uuid') + restr_with_users = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_users).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ru = key_r.copy() - key_ru['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ru["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.WaterRestrictionUser.insert1(key_ru, skip_duplicates=True) - # action.WaterRestrictionProcedure - print('Ingesting action.WaterRestrictionProcedure...') + print("Ingesting action.WaterRestrictionProcedure...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_procedures = alyxraw.AlyxRaw.Field & restrictions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_procedures).proj( - restriction_uuid='uuid') + restr_with_procedures = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_procedures).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_rp = key_r.copy() - key_rp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_rp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.WaterRestrictionProcedure.insert1(key_rp, skip_duplicates=True) - # action.SurgeryUser - print('Ingesting action.SurgeryUser...') + print("Ingesting action.SurgeryUser...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_users = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="users"' & 'fvalue!="None"' - keys = (surgeries & surgeries_with_users).proj( - surgery_uuid='uuid') + surgeries_with_users = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="users"' & 'fvalue!="None"' + ) + keys = (surgeries & surgeries_with_users).proj(surgery_uuid="uuid") for key in keys: - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["surgery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.SurgeryUser.insert1(key_su, skip_duplicates=True) - # action.SurgeryProcedure - print('Ingesting action.SurgeryProcedure...') + print("Ingesting action.SurgeryProcedure...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_procedures = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="procedures"' & 'fvalue!="None"' + surgeries_with_procedures = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="procedures"' & 'fvalue!="None"' + ) - keys = (surgeries & surgeries_with_procedures).proj( - surgery_uuid='uuid') + keys = (surgeries & surgeries_with_procedures).proj(surgery_uuid="uuid") for key in keys: key_s = dict() - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["surgery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') - procedures = grf(key, 'procedures', multiple_entries=True) + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.SurgeryProcedure.insert1(key_sp, skip_duplicates=True) - # action.OtherActionUser - print('Ingesting action.OtherActionUser...') + print("Ingesting action.OtherActionUser...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_users = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (other_actions & other_actions_with_users).proj( - other_action_uuid='uuid') + other_actions_with_users = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (other_actions & other_actions_with_users).proj(other_action_uuid="uuid") for key in keys: - key['uuid'] = key['other_action_uuid'] + key["uuid"] = key["other_action_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['suggery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["suggery_uuid"]) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ou = key_o.copy() - key_ou['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ou["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.OtherActionUser.insert1(key_ou, skip_duplicates=True) - # action.OtherActionProcedure - print('Ingesting action.OtherActionProcedure...') + print("Ingesting action.OtherActionProcedure...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_procedures = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="procedures"' & 'fvalue!="None"' + other_actions_with_procedures = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="procedures"' & 'fvalue!="None"' + ) keys = (other_actions & other_actions_with_procedures).proj( - other_action_uuid='uuid') + other_action_uuid="uuid" + ) for key in keys: - key['uuid'] = key['other_action_uuid'] - key['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["other_action_uuid"] + key["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(action.OtherAction & key): - print('OtherAction {} not in the table action.OtherAction'.format( - key['other_action_uuid'])) + print( + "OtherAction {} not in the table action.OtherAction".format( + key["other_action_uuid"] + ) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_op = key_o.copy() - key_op['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_op["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.OtherActionProcedure.insert1(key_op, skip_duplicates=True) - # acquisition.ChildSession - print('Ingesting acquisition.ChildSession...') + print("Ingesting acquisition.ChildSession...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_parents = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="parent_session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_parents).proj( - session_uuid='uuid') + sessions_with_parents = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="parent_session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_parents).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_cs = dict() - key_cs['subject_uuid'], key_cs['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') - parent_session = grf(key, 'parent_session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))): - print('Parent session {} is not in \ - the table acquisition.Session'.format( - parent_session)) + key_cs["subject_uuid"], key_cs["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") + parent_session = grf(key, "parent_session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(parent_session))): + print( + "Parent session {} is not in \ + the table acquisition.Session".format( + parent_session + ) + ) continue - key_cs['parent_session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))).fetch1( - 'session_start_time') + key_cs["parent_session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(parent_session)) + ).fetch1("session_start_time") acquisition.ChildSession.insert1(key_cs, skip_duplicates=True) - # acquisition.SessionUser - print('Ingesting acquisition.SessionUser...') + print("Ingesting acquisition.SessionUser...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_users = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_users).proj( - session_uuid='uuid') + sessions_with_users = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_users).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") acquisition.SessionUser.insert1(key_su, skip_duplicates=True) - # acquisition.SessionProcedure - print('Ingesting acquisition.SessionProcedure...') + print("Ingesting acquisition.SessionProcedure...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") acquisition.SessionProcedure.insert1(key_sp, skip_duplicates=True) # acquisition.SessionProject - print('Ingesting acquisition.SessionProject...') + print("Ingesting acquisition.SessionProject...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="project"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="project"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - project = grf(key, 'project') + project = grf(key, "project") key_sp = key_s.copy() - key_sp['session_project'] = \ - (reference.Project & - dict(project_uuid=uuid.UUID(project))).fetch1( - 'project_name') + key_sp["session_project"] = ( + reference.Project & dict(project_uuid=uuid.UUID(project)) + ).fetch1("project_name") acquisition.SessionProject.insert1(key_sp, skip_duplicates=True) - # acquisition.WaterAdminstrationSession - print('Ingesting acquisition.WaterAdministrationSession...') + print("Ingesting acquisition.WaterAdministrationSession...") admin = alyxraw.AlyxRaw & 'model="actions.wateradministration"' - admin_with_session = alyxraw.AlyxRaw.Field & admin & \ - 'fname="session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid='uuid') + admin_with_session = ( + alyxraw.AlyxRaw.Field & admin & 'fname="session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid="uuid") for key in keys: - key['uuid'] = key['wateradmin_uuid'] + key["uuid"] = key["wateradmin_uuid"] if not len(action.WaterAdministration & key): - print('Water admin {} is not in the \ - table action.WaterAdministration'.format( - key['uuid'])) + print( + "Water admin {} is not in the \ + table action.WaterAdministration".format( + key["uuid"] + ) + ) continue key_ws = dict() - key_ws['subject_uuid'], key_ws['administration_time'] = \ - (action.WaterAdministration & key).fetch1( - 'subject_uuid', 'administration_time') + key_ws["subject_uuid"], key_ws["administration_time"] = ( + action.WaterAdministration & key + ).fetch1("subject_uuid", "administration_time") - session = grf(key, 'session') + session = grf(key, "session") - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - print('Session {} is not in the table acquisition.Session'.format( - session)) + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + print("Session {} is not in the table acquisition.Session".format(session)) continue - key_ws['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'session_start_time') - - acquisition.WaterAdministrationSession.insert1(key_ws, - skip_duplicates=True) + key_ws["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("session_start_time") + acquisition.WaterAdministrationSession.insert1(key_ws, skip_duplicates=True) # data.ProjectRepository - print('Ingesting data.ProjectRespository...') + print("Ingesting data.ProjectRespository...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' - projects_with_repos = alyxraw.AlyxRaw.Field & projects & \ - 'fname="repositories"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid='uuid') + projects_with_repos = ( + alyxraw.AlyxRaw.Field & projects & 'fname="repositories"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') - key['uuid'] = key['project_uuid'] + key_p["project_name"] = (reference.Project & key).fetch1("project_name") + key["uuid"] = key["project_uuid"] - repos = grf(key, 'repositories', multiple_entries=True) + repos = grf(key, "repositories", multiple_entries=True) for repo in repos: key_pr = key_p.copy() - key_pr['repo_name'] = \ - (data.DataRepository & - dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + key_pr["repo_name"] = ( + data.DataRepository & dict(repo_uuid=uuid.UUID(repo)) + ).fetch1("repo_name") data.ProjectRepository.insert1(key_pr, skip_duplicates=True) diff --git a/scripts/ingest_alyx_shadow_membership_updates.py b/scripts/ingest_alyx_shadow_membership_updates.py index b1e81df2..7acaa4fb 100755 --- a/scripts/ingest_alyx_shadow_membership_updates.py +++ b/scripts/ingest_alyx_shadow_membership_updates.py @@ -1,439 +1,448 @@ -''' +""" This script inserts membership tuples into the membership shadow tables, \ which cannot be inserted with auto-population, to detect updates. -''' -import datajoint as dj +""" import json import uuid -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, data -from ibl_pipeline.ingest import get_raw_field as grf +import datajoint as dj + +from ibl_pipeline.ingest import acquisition, action, alyxraw, data +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject -if __name__ == '__main__': +if __name__ == "__main__": # reference.ProjectLabMember - print('Ingesting reference.ProjectLabMember...') + print("Ingesting reference.ProjectLabMember...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' users = alyxraw.AlyxRaw.Field & projects & 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & users).proj(project_uuid='uuid') + keys = (alyxraw.AlyxRaw & users).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') + key_p["project_name"] = (reference.Project & key).fetch1("project_name") - user_uuids = grf(key, 'users', multiple_entries=True, - model='subjects.project') + user_uuids = grf(key, "users", multiple_entries=True, model="subjects.project") if len(user_uuids): for user_uuid in user_uuids: - if user_uuid == 'None': + if user_uuid == "None": continue key_pl = key_p.copy() - key_pl['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + key_pl["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") reference.ProjectLabMember.insert1(key_pl, skip_duplicates=True) # subject.AlleleSequence - print('Ingesting subject.AlleleSequence...') - keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid='uuid') + print("Ingesting subject.AlleleSequence...") + keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid="uuid") for key in keys: key_a = dict() - key_a['allele_name'] = (subject.Allele & key).fetch1('allele_name') - key['uuid'] = key['allele_uuid'] - sequences = grf(key, 'sequences', multiple_entries=True, - model="subjects.allele") + key_a["allele_name"] = (subject.Allele & key).fetch1("allele_name") + key["uuid"] = key["allele_uuid"] + sequences = grf( + key, "sequences", multiple_entries=True, model="subjects.allele" + ) for sequence in sequences: - if sequence != 'None': + if sequence != "None": key_as = key_a.copy() - key_as['sequence_name'] = \ - (subject.Sequence & - dict(sequence_uuid=uuid.UUID(sequence))).fetch1( - 'sequence_name') + key_as["sequence_name"] = ( + subject.Sequence & dict(sequence_uuid=uuid.UUID(sequence)) + ).fetch1("sequence_name") subject.AlleleSequence.insert1(key_as, skip_duplicates=True) # subject.LineAllele - print('Ingesting subject.LineAllele...') - keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid='uuid') + print("Ingesting subject.LineAllele...") + keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid="uuid") for key in keys: key_l = dict() - key_l['line_name'] = (subject.Line & key).fetch1('line_name') - key['uuid'] = key['line_uuid'] - alleles = grf(key, 'alleles', multiple_entries=True, model='subjects.line') + key_l["line_name"] = (subject.Line & key).fetch1("line_name") + key["uuid"] = key["line_uuid"] + alleles = grf(key, "alleles", multiple_entries=True, model="subjects.line") for allele in alleles: - if allele != 'None': + if allele != "None": key_la = key_l.copy() - key_la['allele_name'] = \ - (subject.Allele & - dict(allele_uuid=uuid.UUID(allele))).fetch1('allele_name') + key_la["allele_name"] = ( + subject.Allele & dict(allele_uuid=uuid.UUID(allele)) + ).fetch1("allele_name") subject.LineAllele.insert1(key_la, skip_duplicates=True) - # action.WaterRestrictionUser - print('Ingesting action.WaterRestrictionUser...') + print("Ingesting action.WaterRestrictionUser...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_users = alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & \ - 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_users).proj( - restriction_uuid='uuid') + restr_with_users = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_users).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ru = key_r.copy() - key_ru['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ru["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.WaterRestrictionUser.insert1(key_ru, skip_duplicates=True) - # action.WaterRestrictionProcedure - print('Ingesting action.WaterRestrictionProcedure...') + print("Ingesting action.WaterRestrictionProcedure...") restrictions = alyxraw.AlyxRaw & 'model = "actions.waterrestriction"' - restr_with_procedures = alyxraw.AlyxRaw.Field & restrictions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & restr_with_procedures).proj( - restriction_uuid='uuid') + restr_with_procedures = ( + alyxraw.AlyxRaw.Field & restrictions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & restr_with_procedures).proj(restriction_uuid="uuid") for key in keys: - key['uuid'] = key['restriction_uuid'] + key["uuid"] = key["restriction_uuid"] if not len(action.WaterRestriction & key): - print('Restriction {} not in the water restriction table'.format( - key['restriction_uuid'])) + print( + "Restriction {} not in the water restriction table".format( + key["restriction_uuid"] + ) + ) continue key_r = dict() - key_r['subject_uuid'], key_r['restriction_start_time'] = \ - (action.WaterRestriction & key).fetch1( - 'subject_uuid', 'restriction_start_time') + key_r["subject_uuid"], key_r["restriction_start_time"] = ( + action.WaterRestriction & key + ).fetch1("subject_uuid", "restriction_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_rp = key_r.copy() - key_rp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_rp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.WaterRestrictionProcedure.insert1(key_rp, skip_duplicates=True) - # action.SurgeryUser - print('Ingesting action.SurgeryUser...') + print("Ingesting action.SurgeryUser...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_users = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="users"' & 'fvalue!="None"' - keys = (surgeries & surgeries_with_users).proj( - surgery_uuid='uuid') + surgeries_with_users = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="users"' & 'fvalue!="None"' + ) + keys = (surgeries & surgeries_with_users).proj(surgery_uuid="uuid") for key in keys: - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["surgery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.SurgeryUser.insert1(key_su, skip_duplicates=True) - # action.SurgeryProcedure - print('Ingesting action.SurgeryProcedure...') + print("Ingesting action.SurgeryProcedure...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' - surgeries_with_procedures = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="procedures"' & 'fvalue!="None"' + surgeries_with_procedures = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="procedures"' & 'fvalue!="None"' + ) - keys = (surgeries & surgeries_with_procedures).proj( - surgery_uuid='uuid') + keys = (surgeries & surgeries_with_procedures).proj(surgery_uuid="uuid") for key in keys: key_s = dict() - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['suggery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["suggery_uuid"]) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') - procedures = grf(key, 'procedures', multiple_entries=True) + key_s["subject_uuid"], key_s["surgery_start_time"] = ( + action.Surgery & key + ).fetch1("subject_uuid", "surgery_start_time") + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.SurgeryProcedure.insert1(key_sp, skip_duplicates=True) - # action.OtherActionUser - print('Ingesting action.OtherActionUser...') + print("Ingesting action.OtherActionUser...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_users = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (other_actions & other_actions_with_users).proj( - other_action_uuid='uuid') + other_actions_with_users = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (other_actions & other_actions_with_users).proj(other_action_uuid="uuid") for key in keys: - key['uuid'] = key['other_action_uuid'] + key["uuid"] = key["other_action_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['suggery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["suggery_uuid"]) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_ou = key_o.copy() - key_ou['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_ou["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.OtherActionUser.insert1(key_ou, skip_duplicates=True) - # action.OtherActionProcedure - print('Ingesting action.OtherActionProcedure...') + print("Ingesting action.OtherActionProcedure...") other_actions = alyxraw.AlyxRaw & 'model = "actions.otheraction"' - other_actions_with_procedures = alyxraw.AlyxRaw.Field & other_actions & \ - 'fname="procedures"' & 'fvalue!="None"' + other_actions_with_procedures = ( + alyxraw.AlyxRaw.Field & other_actions & 'fname="procedures"' & 'fvalue!="None"' + ) keys = (other_actions & other_actions_with_procedures).proj( - other_action_uuid='uuid') + other_action_uuid="uuid" + ) for key in keys: - key['uuid'] = key['other_action_uuid'] - key['subject_uuid'] = uuid.UUID(grf(key, 'subject')) + key["uuid"] = key["other_action_uuid"] + key["subject_uuid"] = uuid.UUID(grf(key, "subject")) if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['suggery_uuid'])) + print( + "Surgery {} not in the table action.Surgery".format(key["suggery_uuid"]) + ) continue key_o = dict() - key_o['subject_uuid'], key_o['other_action_start_time'] = \ - (action.OtherAction & key).fetch1( - 'subject_uuid', 'other_action_start_time') + key_o["subject_uuid"], key_o["other_action_start_time"] = ( + action.OtherAction & key + ).fetch1("subject_uuid", "other_action_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_op = key_o.copy() - key_op['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_op["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.OtherActionProcedure.insert1(key_op, skip_duplicates=True) - # acquisition.ChildSession - print('Ingesting acquisition.ChildSession...') + print("Ingesting acquisition.ChildSession...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_parents = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="parent_session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_parents).proj( - session_uuid='uuid') + sessions_with_parents = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="parent_session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_parents).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_cs = dict() - key_cs['subject_uuid'], key_cs['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') - parent_session = grf(key, 'parent_session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))): - print('Parent session {} is not in \ - the table acquisition.Session'.format( - parent_session)) + key_cs["subject_uuid"], key_cs["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") + parent_session = grf(key, "parent_session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(parent_session))): + print( + "Parent session {} is not in \ + the table acquisition.Session".format( + parent_session + ) + ) continue - key_cs['parent_session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))).fetch1( - 'session_start_time') + key_cs["parent_session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(parent_session)) + ).fetch1("session_start_time") acquisition.ChildSession.insert1(key_cs, skip_duplicates=True) - # acquisition.SessionUser - print('Ingesting acquisition.SessionUser...') + print("Ingesting acquisition.SessionUser...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_users = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="users"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_users).proj( - session_uuid='uuid') + sessions_with_users = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="users"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_users).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") acquisition.SessionUser.insert1(key_su, skip_duplicates=True) - # acquisition.SessionProcedure - print('Ingesting acquisition.SessionProcedure...') + print("Ingesting acquisition.SessionProcedure...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="procedures"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="procedures"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") acquisition.SessionProcedure.insert1(key_sp, skip_duplicates=True) # acquisition.SessionProject - print('Ingesting acquisition.SessionProject...') + print("Ingesting acquisition.SessionProject...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' - sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="project"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') + sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="project"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - project = grf(key, 'project') + project = grf(key, "project") key_sp = key_s.copy() - key_sp['session_project'] = \ - (reference.Project & - dict(project_uuid=uuid.UUID(project))).fetch1( - 'project_name') + key_sp["session_project"] = ( + reference.Project & dict(project_uuid=uuid.UUID(project)) + ).fetch1("project_name") acquisition.SessionProject.insert1(key_sp, skip_duplicates=True) - # acquisition.WaterAdminstrationSession - print('Ingesting acquisition.WaterAdministrationSession...') + print("Ingesting acquisition.WaterAdministrationSession...") admin = alyxraw.AlyxRaw & 'model="actions.wateradministration"' - admin_with_session = alyxraw.AlyxRaw.Field & admin & \ - 'fname="session"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid='uuid') + admin_with_session = ( + alyxraw.AlyxRaw.Field & admin & 'fname="session"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & admin_with_session).proj(wateradmin_uuid="uuid") for key in keys: - key['uuid'] = key['wateradmin_uuid'] + key["uuid"] = key["wateradmin_uuid"] if not len(action.WaterAdministration & key): - print('Water admin {} is not in the \ - table action.WaterAdministration'.format( - key['uuid'])) + print( + "Water admin {} is not in the \ + table action.WaterAdministration".format( + key["uuid"] + ) + ) continue key_ws = dict() - key_ws['subject_uuid'], key_ws['administration_time'] = \ - (action.WaterAdministration & key).fetch1( - 'subject_uuid', 'administration_time') + key_ws["subject_uuid"], key_ws["administration_time"] = ( + action.WaterAdministration & key + ).fetch1("subject_uuid", "administration_time") - session = grf(key, 'session') + session = grf(key, "session") - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - print('Session {} is not in the table acquisition.Session'.format( - session)) + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + print("Session {} is not in the table acquisition.Session".format(session)) continue - key_ws['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'session_start_time') - - acquisition.WaterAdministrationSession.insert1(key_ws, - skip_duplicates=True) + key_ws["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("session_start_time") + acquisition.WaterAdministrationSession.insert1(key_ws, skip_duplicates=True) # data.ProjectRepository - print('Ingesting data.ProjectRespository...') + print("Ingesting data.ProjectRespository...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' - projects_with_repos = alyxraw.AlyxRaw.Field & projects & \ - 'fname="repositories"' & 'fvalue!="None"' - keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid='uuid') + projects_with_repos = ( + alyxraw.AlyxRaw.Field & projects & 'fname="repositories"' & 'fvalue!="None"' + ) + keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') - key['uuid'] = key['project_uuid'] + key_p["project_name"] = (reference.Project & key).fetch1("project_name") + key["uuid"] = key["project_uuid"] - repos = grf(key, 'repositories', multiple_entries=True) + repos = grf(key, "repositories", multiple_entries=True) for repo in repos: key_pr = key_p.copy() - key_pr['repo_name'] = \ - (data.DataRepository & - dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + key_pr["repo_name"] = ( + data.DataRepository & dict(repo_uuid=uuid.UUID(repo)) + ).fetch1("repo_name") data.ProjectRepository.insert1(key_pr, skip_duplicates=True) diff --git a/scripts/ingest_behavior.py b/scripts/ingest_behavior.py index a1fd8e2a..f7f24923 100755 --- a/scripts/ingest_behavior.py +++ b/scripts/ingest_behavior.py @@ -1,26 +1,23 @@ -''' +""" This script ingest behavioral data into tables in the ibl_behavior schema -''' +""" -from ibl_pipeline import subject, acquisition, data, behavior +from ibl_pipeline import acquisition, behavior, data, subject +if __name__ == "__main__": + kargs = dict(suppress_errors=True, display_progress=True) -if __name__ == '__main__': - kargs = dict( - suppress_errors=True, display_progress=True - ) - - print('-------- Populating CompleteWheelMoveSession -------') + print("-------- Populating CompleteWheelMoveSession -------") behavior.CompleteWheelMoveSession.populate(**kargs) # print('-------------- Populating WheelMoveSet -------------') # behavior.WheelMoveSet.populate(**kargs) - print('---------- Populating CompleteTrialSession ---------') + print("---------- Populating CompleteTrialSession ---------") behavior.CompleteTrialSession.populate(**kargs) - print('---------------- Populating TrialSet ---------------') + print("---------------- Populating TrialSet ---------------") behavior.TrialSet.populate(**kargs) - print('------------ Populating AmbientSensorData ----------') + print("------------ Populating AmbientSensorData ----------") behavior.AmbientSensorData.populate(**kargs) - print('---------------- Populating Settings ---------------') + print("---------------- Populating Settings ---------------") behavior.Settings.populate(**kargs) - print('------------- Populating SessionDelay --------------') + print("------------- Populating SessionDelay --------------") behavior.SessionDelay.populate(**kargs) diff --git a/scripts/ingest_data_tables.py b/scripts/ingest_data_tables.py index f43e6ef5..b478e20d 100755 --- a/scripts/ingest_data_tables.py +++ b/scripts/ingest_data_tables.py @@ -1,136 +1,139 @@ - -from ibl_pipeline.ingest import alyxraw, data, reference, acquisition, QueryBuffer -from ibl_pipeline.ingest import get_raw_field as grf import uuid + from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, acquisition, alyxraw, data +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference -if __name__ == '__main__': +if __name__ == "__main__": # ingest dataset entries key_source = (alyxraw.AlyxRaw & 'model="data.dataset"').proj( - dataset_uuid="uuid") - data.DataSet + dataset_uuid="uuid" + ) - data.DataSet data_set = QueryBuffer(data.DataSet) - for key in tqdm(key_source.fetch('KEY'), position=0): + for key in tqdm(key_source.fetch("KEY"), position=0): key_ds = key.copy() - key['uuid'] = key['dataset_uuid'] - - session = grf(key, 'session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - print('Session {} is not in the table acquisition.Session'.format( - session)) - print('dataset_uuid: {}'.format(str(key['uuid']))) + key["uuid"] = key["dataset_uuid"] + + session = grf(key, "session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + print("Session {} is not in the table acquisition.Session".format(session)) + print("dataset_uuid: {}".format(str(key["uuid"]))) continue - key_ds['subject_uuid'], key_ds['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'subject_uuid', 'session_start_time') + key_ds["subject_uuid"], key_ds["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("subject_uuid", "session_start_time") - key_ds['dataset_name'] = grf(key, 'name') + key_ds["dataset_name"] = grf(key, "name") - dt = grf(key, 'dataset_type') - key_ds['dataset_type_name'] = \ - (data.DataSetType & dict(dataset_type_uuid=uuid.UUID(dt))).fetch1( - 'dataset_type_name') + dt = grf(key, "dataset_type") + key_ds["dataset_type_name"] = ( + data.DataSetType & dict(dataset_type_uuid=uuid.UUID(dt)) + ).fetch1("dataset_type_name") - user = grf(key, 'created_by') + user = grf(key, "created_by") - if user != 'None': + if user != "None": try: - key_ds['dataset_created_by'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_ds["dataset_created_by"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") except: print(user) else: - key_ds['dataset_created_by'] = None + key_ds["dataset_created_by"] = None - format = grf(key, 'data_format') - key_ds['format_name'] = \ - (data.DataFormat & dict(format_uuid=uuid.UUID(format))).fetch1( - 'format_name') + format = grf(key, "data_format") + key_ds["format_name"] = ( + data.DataFormat & dict(format_uuid=uuid.UUID(format)) + ).fetch1("format_name") - key_ds['created_datetime'] = grf(key, 'created_datetime') + key_ds["created_datetime"] = grf(key, "created_datetime") - software = grf(key, 'generating_software') - if software != 'None': - key_ds['generating_software'] = software + software = grf(key, "generating_software") + if software != "None": + key_ds["generating_software"] = software else: - key_ds['generating_software'] = None + key_ds["generating_software"] = None - directory = grf(key, 'provenance_directory') - if directory != 'None': - key_ds['provenance_directory'] = directory + directory = grf(key, "provenance_directory") + if directory != "None": + key_ds["provenance_directory"] = directory else: - key_ds['provenance_directory'] = None + key_ds["provenance_directory"] = None - md5 = grf(key, 'md5') - if md5 != 'None': - key_ds['md5'] = md5 + md5 = grf(key, "md5") + if md5 != "None": + key_ds["md5"] = md5 else: - key_ds['md5'] = None + key_ds["md5"] = None - file_size = grf(key, 'file_size') - if file_size != 'None': - key_ds['file_size'] = file_size + file_size = grf(key, "file_size") + if file_size != "None": + key_ds["file_size"] = file_size else: - key_ds['file_size'] = None + key_ds["file_size"] = None data_set.add_to_queue1(key_ds) if data_set.flush_insert( - skip_duplicates=True, - allow_direct_insert=True, chunksz=100): - print('Inserted 100 dataset tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=100 + ): + print("Inserted 100 dataset tuples") if data_set.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining dataset tuples') - + print("Inserted all remaining dataset tuples") # ingest file record entries records = alyxraw.AlyxRaw & 'model="data.filerecord"' - repos = (data.DataRepository & 'repo_name LIKE "flatiron%"').fetch( - 'repo_uuid') - records_flatiron = alyxraw.AlyxRaw.Field & records & \ - 'fname = "data_repository"' & [{'fvalue': str(repo)} for repo in repos] - record_exists = alyxraw.AlyxRaw.Field & records & \ - 'fname = "exists"' & 'fvalue="True"' + repos = (data.DataRepository & 'repo_name LIKE "flatiron%"').fetch("repo_uuid") + records_flatiron = ( + alyxraw.AlyxRaw.Field + & records + & 'fname = "data_repository"' + & [{"fvalue": str(repo)} for repo in repos] + ) + record_exists = ( + alyxraw.AlyxRaw.Field & records & 'fname = "exists"' & 'fvalue="True"' + ) key_source = (alyxraw.AlyxRaw & record_exists & records_flatiron).proj( - record_uuid='uuid') - data.FileRecord + record_uuid="uuid" + ) - data.FileRecord file_record = QueryBuffer(data.FileRecord) - for key in tqdm(key_source.fetch('KEY'), position=0): + for key in tqdm(key_source.fetch("KEY"), position=0): key_fr = key.copy() - key['uuid'] = key['record_uuid'] - key_fr['exists'] = True + key["uuid"] = key["record_uuid"] + key_fr["exists"] = True - dataset = grf(key, 'dataset') + dataset = grf(key, "dataset") if not len(data.DataSet & dict(dataset_uuid=uuid.UUID(dataset))): - print('Dataset {} is not in the table data.DataSet') - print('Record_uuid: {}'.format(str(key['uuid']))) + print("Dataset {} is not in the table data.DataSet") + print("Record_uuid: {}".format(str(key["uuid"]))) continue - key_fr['subject_uuid'], key_fr['session_start_time'], \ - key_fr['dataset_name'] = \ - (data.DataSet & dict(dataset_uuid=uuid.UUID(dataset))).fetch1( - 'subject_uuid', 'session_start_time', 'dataset_name') + key_fr["subject_uuid"], key_fr["session_start_time"], key_fr["dataset_name"] = ( + data.DataSet & dict(dataset_uuid=uuid.UUID(dataset)) + ).fetch1("subject_uuid", "session_start_time", "dataset_name") - repo = grf(key, 'data_repository') - key_fr['repo_name'] = \ - (data.DataRepository & dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + repo = grf(key, "data_repository") + key_fr["repo_name"] = ( + data.DataRepository & dict(repo_uuid=uuid.UUID(repo)) + ).fetch1("repo_name") - key_fr['relative_path'] = grf(key, 'relative_path') + key_fr["relative_path"] = grf(key, "relative_path") file_record.add_to_queue1(key_fr) if file_record.flush_insert( - skip_duplicates=True, allow_direct_insert=True, chunksz=1000): - print('Inserted 1000 raw field tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=1000 + ): + print("Inserted 1000 raw field tuples") if file_record.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining file record tuples') + print("Inserted all remaining file record tuples") diff --git a/scripts/ingest_ephys_movement.py b/scripts/ingest_ephys_movement.py index 75ce2c12..93c4e6f5 100755 --- a/scripts/ingest_ephys_movement.py +++ b/scripts/ingest_ephys_movement.py @@ -1,29 +1,27 @@ - from ibl_pipeline import ephys from ibl_pipeline.analyses import ephys as ephys_analyses from ibl_pipeline.plotting import ephys as ephys_plotting - -if __name__ == '__main__': +if __name__ == "__main__": kargs = dict(display_progress=True, suppress_errors=True) - print('Populating AlignedTrialSpikes...') + print("Populating AlignedTrialSpikes...") ephys.AlignedTrialSpikes.populate(**kargs) - print('Populating Raster...') + print("Populating Raster...") ephys_plotting.Raster.populate(**kargs) - print('Populating Psth...') + print("Populating Psth...") ephys_plotting.Psth.populate(**kargs) - print('Populating DepthPeth analyses...') + print("Populating DepthPeth analyses...") ephys_analyses.DepthPeth.populate(**kargs) - print('Populating NormedDepthPeth analyses...') + print("Populating NormedDepthPeth analyses...") ephys_analyses.NormedDepthPeth.populate(**kargs) - print('Populating NormedDepthPeth plotting...') + print("Populating NormedDepthPeth plotting...") ephys_plotting.DepthPeth.populate(**kargs) - print('Populating DepthRasterExampleTrial...') + print("Populating DepthRasterExampleTrial...") ephys_plotting.DepthRasterExampleTrial.populate(**kargs) diff --git a/scripts/ingest_increment.py b/scripts/ingest_increment.py index 5377fee4..4586e7c0 100644 --- a/scripts/ingest_increment.py +++ b/scripts/ingest_increment.py @@ -1,4 +1,10 @@ -from ibl_pipeline.process import autoprocess, get_timezone, process_histology, process_qc, populate_wheel +from ibl_pipeline.process import ( + autoprocess, + get_timezone, + populate_wheel, + process_histology, + process_qc, +) autoprocess.process_new(timezone=get_timezone()) process_histology.main() diff --git a/scripts/ingest_utils.py b/scripts/ingest_utils.py index bdc0ba8c..014a3606 100755 --- a/scripts/ingest_utils.py +++ b/scripts/ingest_utils.py @@ -1,11 +1,10 @@ -''' +""" Utility functions for ingestion -''' +""" import traceback -def copy_table(target_schema, src_schema, table_name, - fresh=False, **kwargs): +def copy_table(target_schema, src_schema, table_name, fresh=False, **kwargs): target_table = getattr(target_schema, table_name) src_table = getattr(src_schema, table_name) @@ -13,14 +12,14 @@ def copy_table(target_schema, src_schema, table_name, target_table.insert(src_table, **kwargs) else: try: - target_table.insert(src_table - target_table.proj(), - skip_duplicates=True, **kwargs) + target_table.insert( + src_table - target_table.proj(), skip_duplicates=True, **kwargs + ) except Exception: for t in (src_table - target_table.proj()).fetch(as_dict=True): try: - if table_name == 'DataSet' and \ - not len(t['dataset_created_by']): - t.pop('dataset_created_by') + if table_name == "DataSet" and not len(t["dataset_created_by"]): + t.pop("dataset_created_by") target_table.insert1(t, skip_duplicates=True, **kwargs) except Exception: print("Error when inserting {}".format(t)) diff --git a/scripts/plotting_behavior.py b/scripts/plotting_behavior.py index a3e3938e..502e7d5b 100755 --- a/scripts/plotting_behavior.py +++ b/scripts/plotting_behavior.py @@ -1,49 +1,56 @@ -''' +""" This script populate all behavioral plotting table for the website -''' +""" import datajoint as dj -from ibl_pipeline.plotting import behavior -from ibl_pipeline import subject, reference from tqdm import tqdm +from ibl_pipeline import reference, subject +from ibl_pipeline.plotting import behavior -if __name__ == '__main__': +if __name__ == "__main__": - kwargs = dict( - suppress_errors=True, display_progress=True - ) + kwargs = dict(suppress_errors=True, display_progress=True) - print('------------ Populating plotting.SessionPsychCurve -----------') + print("------------ Populating plotting.SessionPsychCurve -----------") behavior.SessionPsychCurve.populate(**kwargs) - print('------ Populating plotting.SessionReactionTimeContrast -------') + print("------ Populating plotting.SessionReactionTimeContrast -------") behavior.SessionReactionTimeContrast.populate(**kwargs) - print('---- Populating plotting.SessionReactionTimeTrialNumber ------') + print("---- Populating plotting.SessionReactionTimeTrialNumber ------") behavior.SessionReactionTimeTrialNumber.populate(**kwargs) - print('--------------- Populating plotting.DatePsychCurve -----------') + print("--------------- Populating plotting.DatePsychCurve -----------") behavior.DatePsychCurve.populate(**kwargs) - print('-------- Populating plotting.DateReactionTimeContrast --------') + print("-------- Populating plotting.DateReactionTimeContrast --------") behavior.DateReactionTimeContrast.populate(**kwargs) - print('------ Populating plotting.DateReactionTimeTrialNumber -------') + print("------ Populating plotting.DateReactionTimeTrialNumber -------") behavior.DateReactionTimeTrialNumber.populate(**kwargs) - print('--------------- Populating plotting.WaterTypeColor -----------') + print("--------------- Populating plotting.WaterTypeColor -----------") behavior.WaterTypeColor.populate(**kwargs) - print('------------ Populating plotting.CumulativeSummary and update SubjectLatestDate -----------') + print( + "------------ Populating plotting.CumulativeSummary and update SubjectLatestDate -----------" + ) - print('Processing Cumulative plots...') + print("Processing Cumulative plots...") with dj.config(safemode=False): - (behavior.CumulativeSummary - & behavior.CumulativeSummary.get_outdated_entries().fetch('KEY')).delete() + ( + behavior.CumulativeSummary + & behavior.CumulativeSummary.get_outdated_entries().fetch("KEY") + ).delete() behavior.CumulativeSummary.populate(**kwargs) - print('Update SubjectLatestDate...') - subject_latest_date = subject.Subject.aggr(behavior.CumulativeSummary, - latest_date='MAX(latest_date)') + print("Update SubjectLatestDate...") + subject_latest_date = subject.Subject.aggr( + behavior.CumulativeSummary, latest_date="MAX(latest_date)" + ) behavior.SubjectLatestDate.insert(subject_latest_date, skip_duplicates=True) - need_update = behavior.SubjectLatestDate.proj( - inserted_date='latest_date') * subject_latest_date & 'inserted_date != latest_date' - for k in need_update.fetch('KEY'): + need_update = ( + behavior.SubjectLatestDate.proj(inserted_date="latest_date") + * subject_latest_date + & "inserted_date != latest_date" + ) + for k in need_update.fetch("KEY"): (behavior.SubjectLatestDate & k)._update1( - 'latest_date', (subject_latest_date & k).fetch1('latest_date')) + "latest_date", (subject_latest_date & k).fetch1("latest_date") + ) diff --git a/scripts/populate_external.py b/scripts/populate_external.py index dd86f86a..4365f6e7 100755 --- a/scripts/populate_external.py +++ b/scripts/populate_external.py @@ -1,11 +1,8 @@ from ibl_pipeline import ephys from ibl_pipeline.plotting import ephys as ephys_plotting -if __name__ == '__main__': - kargs = dict( - display_progress=True, - suppress_errors=True - ) +if __name__ == "__main__": + kargs = dict(display_progress=True, suppress_errors=True) ephys.Cluster.populate(**kargs) ephys.TrialSpikes.populate(**kargs) ephys_plotting.Raster.populate(**kargs) diff --git a/scripts/public/behavior_ingest_analyses.py b/scripts/public/behavior_ingest_analyses.py index d809b708..0e51db58 100644 --- a/scripts/public/behavior_ingest_analyses.py +++ b/scripts/public/behavior_ingest_analyses.py @@ -1,27 +1,27 @@ import time -from ibl_pipeline import subject, acquisition, data, behavior + +from ibl_pipeline import acquisition, behavior, data, subject from ibl_pipeline.analyses import behavior as behavior_analyses -kwargs = dict(display_progress=True, - suppress_errors=True) +kwargs = dict(display_progress=True, suppress_errors=True) start = time.time() -print('------ Populating CompleteTrialSession ---------') +print("------ Populating CompleteTrialSession ---------") behavior.CompleteTrialSession.populate(**kwargs) -print('------------- Populating TrialSet --------------') +print("------------- Populating TrialSet --------------") behavior.TrialSet.populate(**kwargs) -print('----------- Populating PsychResults ------------') +print("----------- Populating PsychResults ------------") behavior_analyses.PsychResults.populate(**kwargs) -print('--------- Populating PsychResultsBlock ---------') +print("--------- Populating PsychResultsBlock ---------") behavior_analyses.PsychResultsBlock.populate(**kwargs) -print('----------- Populating ReactionTime ------------') +print("----------- Populating ReactionTime ------------") behavior_analyses.ReactionTime.populate(**kwargs) -print('----- Populating ReactionTimeContrastBlock -----') +print("----- Populating ReactionTimeContrastBlock -----") behavior_analyses.ReactionTimeContrastBlock.populate(**kwargs) -print('------- Populating SessionTrainingStatus -------') +print("------- Populating SessionTrainingStatus -------") behavior_analyses.SessionTrainingStatus.populate(**kwargs) -print('------ Populating BehavioralSummaryByDate ------') +print("------ Populating BehavioralSummaryByDate ------") behavior_analyses.BehavioralSummaryByDate.populate(**kwargs) end = time.time() -print(end-start) +print(end - start) diff --git a/scripts/public/delete_non_sharing_entries.py b/scripts/public/delete_non_sharing_entries.py index bbdb3dd8..31128995 100644 --- a/scripts/public/delete_non_sharing_entries.py +++ b/scripts/public/delete_non_sharing_entries.py @@ -1,10 +1,8 @@ -''' +""" This script deletes the entries that are not shared in the public release of Jan 2020 -''' - -from ibl_pipeline import ( - reference, subject, action, acquisition, data, public) +""" +from ibl_pipeline import acquisition, action, data, public, reference, subject # delete all subjects that are not in the list (subject.Subject - public.PublicSubjectUuid).delete() diff --git a/scripts/public/drop_non_sharing_tables.py b/scripts/public/drop_non_sharing_tables.py index 467c5b76..538c15d4 100644 --- a/scripts/public/drop_non_sharing_tables.py +++ b/scripts/public/drop_non_sharing_tables.py @@ -1,21 +1,19 @@ +import inspect import datajoint as dj -from ibl_pipeline import reference, subject, action, acquisition import table_names as tables -import inspect +from ibl_pipeline import acquisition, action, reference, subject -reference_tables = [m[0] for m in inspect.getmembers(reference, - inspect.isclass)] +reference_tables = [m[0] for m in inspect.getmembers(reference, inspect.isclass)] subject_tables = [m[0] for m in inspect.getmembers(subject, inspect.isclass)] action_tables = [m[0] for m in inspect.getmembers(action, inspect.isclass)] -acquisition_tables = [m[0] for m in inspect.getmembers(acquisition, - inspect.isclass)] +acquisition_tables = [m[0] for m in inspect.getmembers(acquisition, inspect.isclass)] -print('============ Dropping non-sharing tables =============') +print("============ Dropping non-sharing tables =============") tables.init() for table_name in reference_tables: - print('------------- Dropped ' + table + ' --------------') + print("------------- Dropped " + table + " --------------") table = getattr(target_schema, table_name) diff --git a/scripts/public/ingest_alyx_raw.py b/scripts/public/ingest_alyx_raw.py index a6857054..b9267c2a 100644 --- a/scripts/public/ingest_alyx_raw.py +++ b/scripts/public/ingest_alyx_raw.py @@ -1,17 +1,19 @@ -''' +""" This script load the json dump and insert the tuples into the alyxraw table. -''' +""" -import datajoint as dj +import collections import json import logging import math -import collections import os.path as path -from ibl_pipeline.ingest import alyxraw, QueryBuffer import sys import uuid +import datajoint as dj + +from ibl_pipeline.ingest import QueryBuffer, alyxraw + logger = logging.getLogger(__name__) dir_name = path.dirname(__file__) @@ -19,17 +21,19 @@ if len(sys.argv) < 2: # no arguments given # if no argument given, assume a canonical file location and name - filename = path.join('/data', 'alyxfull.json') + filename = path.join("/data", "alyxfull.json") else: filename = path.join(dir_name, sys.argv[1]) -with open(filename, 'r') as fid: +with open(filename, "r") as fid: keys = json.load(fid) # remove invalid uuid from unused tables -keys = [key for key in keys - if key['model'] not in - ['auth.group', 'sessions.session', 'authtoken.token']] +keys = [ + key + for key in keys + if key["model"] not in ["auth.group", "sessions.session", "authtoken.token"] +] # use insert buffer to speed up the insersion process ib_main = QueryBuffer(alyxraw.AlyxRaw) @@ -37,38 +41,43 @@ # insert into AlyxRaw table for key in keys: - ib_main.add_to_queue1(dict(uuid=uuid.UUID(key['pk']), model=key['model'])) + ib_main.add_to_queue1(dict(uuid=uuid.UUID(key["pk"]), model=key["model"])) if ib_main.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw tuples.') + logger.debug("Inserted 10000 raw tuples.") if ib_main.flush_insert(skip_duplicates=True): - logger.debug('Inserted remaining raw tuples') + logger.debug("Inserted remaining raw tuples") # insert into the part table AlyxRaw.Field for key in keys: - key_field = dict(uuid=uuid.UUID(key['pk'])) - for field_name, field_value in key['fields'].items(): + key_field = dict(uuid=uuid.UUID(key["pk"])) + for field_name, field_value in key["fields"].items(): key_field = dict(key_field, fname=field_name) - if field_name == 'json' and field_value is not None: + if field_name == "json" and field_value is not None: if len(field_value) > 10000: continue else: - key_field['value_idx'] = 0 - key_field['fvalue'] = json.dumps(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = json.dumps(field_value) ib_part.add_to_queue1(key_field) - elif field_value is None or field_value == '' or field_value == [] or \ - (isinstance(field_value, float) and math.isnan(field_value)): - key_field['value_idx'] = 0 - key_field['fvalue'] = 'None' + elif ( + field_value is None + or field_value == "" + or field_value == [] + or (isinstance(field_value, float) and math.isnan(field_value)) + ): + key_field["value_idx"] = 0 + key_field["fvalue"] = "None" ib_part.add_to_queue1(key_field) - elif type(field_value) is list and \ - (type(field_value[0]) is dict or type(field_value[0]) is str): + elif type(field_value) is list and ( + type(field_value[0]) is dict or type(field_value[0]) is str + ): for value_idx, value in enumerate(field_value): - key_field['value_idx'] = value_idx - key_field['fvalue'] = str(value) + key_field["value_idx"] = value_idx + key_field["fvalue"] = str(value) ib_part.add_to_queue1(key_field) # elif isinstance(field_value, collections.Sequence) and \ # isinstance(field_value, (collections.Mapping, str)): @@ -76,12 +85,12 @@ # fvalue=str(value)) # for value_idx, value in enumerate(field_value)) else: - key_field['value_idx'] = 0 - key_field['fvalue'] = str(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = str(field_value) ib_part.add_to_queue1(key_field) if ib_part.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw field tuples') + logger.debug("Inserted 10000 raw field tuples") if ib_part.flush_insert(skip_duplicates=True): - logger.debug('Inserted all remaining raw field tuples') + logger.debug("Inserted all remaining raw field tuples") diff --git a/scripts/public/ingest_alyx_real.py b/scripts/public/ingest_alyx_real.py index bb02b53d..95f2ab17 100644 --- a/scripts/public/ingest_alyx_real.py +++ b/scripts/public/ingest_alyx_real.py @@ -1,16 +1,17 @@ -''' +""" This script copies tuples in the shadow tables into the real tables for alyx. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import reference as reference_ingest -from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import action as action_ingest +import table_names as tables + +from ibl_pipeline import acquisition, action, data, reference, subject from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import action as action_ingest from ibl_pipeline.ingest import data as data_ingest -from ibl_pipeline import reference, subject, action, acquisition, data +from ibl_pipeline.ingest import reference as reference_ingest +from ibl_pipeline.ingest import subject as subject_ingest from ibl_pipeline.ingest.ingest_utils import copy_table -import table_names as tables tables.init() diff --git a/scripts/public/ingest_alyx_shadow.py b/scripts/public/ingest_alyx_shadow.py index a63ea757..1007b298 100644 --- a/scripts/public/ingest_alyx_shadow.py +++ b/scripts/public/ingest_alyx_shadow.py @@ -1,17 +1,18 @@ -''' +""" This script inserts tuples in the alyxraw table into the shadow tables \ via auto-populating. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, data -from ibl_pipeline import public import utils +from ibl_pipeline import public +from ibl_pipeline.ingest import acquisition, action, alyxraw, data, reference, subject + kargs = dict(suppress_errors=True, display_progress=True, reserve_jobs=True) # reference tables -print('-------- Populating reference shadow tables ------------') +print("-------- Populating reference shadow tables ------------") reference.Lab.populate(**kargs) reference.LabMember.populate(**kargs) reference.LabMembership.populate(**kargs) @@ -19,7 +20,7 @@ reference.Project.populate(**kargs) # subject tables -print('-------- Populating subject shadow tables ------------') +print("-------- Populating subject shadow tables ------------") subject.Species.populate(**kargs) subject.Source.populate(**kargs) subject.Strain.populate(**kargs) @@ -43,17 +44,17 @@ subject.Zygosity.populate(**kargs) # action tables -print('-------- Populating action shadow tables -----------') +print("-------- Populating action shadow tables -----------") action.ProcedureType.populate(**kargs) action.Surgery.populate(**kargs) # acquisition tables -print('-------- Populating session entries -----------') +print("-------- Populating session entries -----------") acquisition.Session.populate(**kargs) # data tables -print('-------- Populating data shadow tables -----------') +print("-------- Populating data shadow tables -----------") data.DataFormat.populate(**kargs) data.DataRepositoryType.populate(**kargs) data.DataRepository.populate(**kargs) diff --git a/scripts/public/ingest_alyx_shadow_membership.py b/scripts/public/ingest_alyx_shadow_membership.py index 001ce7b4..e0b83181 100644 --- a/scripts/public/ingest_alyx_shadow_membership.py +++ b/scripts/public/ingest_alyx_shadow_membership.py @@ -1,305 +1,307 @@ -''' +""" This script inserts membership tuples into the membership shadow tables, \ which cannot be inserted with auto-population. -''' -import datajoint as dj +""" import json import uuid -from ibl_pipeline.ingest import ( - alyxraw, reference, subject, action, - acquisition, data, QueryBuffer) -from ibl_pipeline.ingest import get_raw_field as grf + +import datajoint as dj from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, acquisition, action, alyxraw, data +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference, subject + # reference.ProjectLabMember -print('Ingesting reference.ProjectLabMember...') +print("Ingesting reference.ProjectLabMember...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' users = alyxraw.AlyxRaw.Field & projects & 'fname="users"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & users).proj(project_uuid='uuid') +keys = (alyxraw.AlyxRaw & users).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') + key_p["project_name"] = (reference.Project & key).fetch1("project_name") - user_uuids = grf(key, 'users', multiple_entries=True, - model='subjects.project') + user_uuids = grf(key, "users", multiple_entries=True, model="subjects.project") if len(user_uuids): for user_uuid in user_uuids: - if user_uuid == 'None': + if user_uuid == "None": continue key_pl = key_p.copy() - key_pl['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user_uuid))).fetch1( - 'user_name') + key_pl["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user_uuid)) + ).fetch1("user_name") reference.ProjectLabMember.insert1(key_pl, skip_duplicates=True) # subject.AlleleSequence -print('Ingesting subject.AlleleSequence...') -keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid='uuid') +print("Ingesting subject.AlleleSequence...") +keys = (alyxraw.AlyxRaw & 'model="subjects.allele"').proj(allele_uuid="uuid") for key in keys: key_a = dict() - key_a['allele_name'] = (subject.Allele & key).fetch1('allele_name') - key['uuid'] = key['allele_uuid'] - sequences = grf(key, 'sequences', multiple_entries=True, - model="subjects.allele") + key_a["allele_name"] = (subject.Allele & key).fetch1("allele_name") + key["uuid"] = key["allele_uuid"] + sequences = grf(key, "sequences", multiple_entries=True, model="subjects.allele") for sequence in sequences: - if sequence != 'None': + if sequence != "None": key_as = key_a.copy() - key_as['sequence_name'] = \ - (subject.Sequence & - dict(sequence_uuid=uuid.UUID(sequence))).fetch1( - 'sequence_name') + key_as["sequence_name"] = ( + subject.Sequence & dict(sequence_uuid=uuid.UUID(sequence)) + ).fetch1("sequence_name") subject.AlleleSequence.insert1(key_as, skip_duplicates=True) # subject.LineAllele -print('Ingesting subject.LineAllele...') -keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid='uuid') +print("Ingesting subject.LineAllele...") +keys = (alyxraw.AlyxRaw & 'model="subjects.line"').proj(line_uuid="uuid") for key in keys: key_l = dict() - key_l['line_name'] = (subject.Line & key).fetch1('line_name') - key['uuid'] = key['line_uuid'] - alleles = grf(key, 'alleles', multiple_entries=True, model='subjects.line') + key_l["line_name"] = (subject.Line & key).fetch1("line_name") + key["uuid"] = key["line_uuid"] + alleles = grf(key, "alleles", multiple_entries=True, model="subjects.line") for allele in alleles: - if allele != 'None': + if allele != "None": key_la = key_l.copy() - key_la['allele_name'] = \ - (subject.Allele & - dict(allele_uuid=uuid.UUID(allele))).fetch1('allele_name') + key_la["allele_name"] = ( + subject.Allele & dict(allele_uuid=uuid.UUID(allele)) + ).fetch1("allele_name") subject.LineAllele.insert1(key_la, skip_duplicates=True) # action.SurgeryUser -print('Ingesting action.SurgeryUser...') +print("Ingesting action.SurgeryUser...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' -surgeries_with_users = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="users"' & 'fvalue!="None"' -keys = (surgeries & surgeries_with_users).proj( - surgery_uuid='uuid') +surgeries_with_users = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="users"' & 'fvalue!="None"' +) +keys = (surgeries & surgeries_with_users).proj(surgery_uuid="uuid") for key in keys: - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print("Surgery {} not in the table action.Surgery".format(key["surgery_uuid"])) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') + key_s["subject_uuid"], key_s["surgery_start_time"] = (action.Surgery & key).fetch1( + "subject_uuid", "surgery_start_time" + ) - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & - dict(user_uuid=uuid.UUID(user))).fetch1('user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") action.SurgeryUser.insert1(key_su, skip_duplicates=True) # action.SurgeryProcedure -print('Ingesting action.SurgeryProcedure...') +print("Ingesting action.SurgeryProcedure...") surgeries = alyxraw.AlyxRaw & 'model = "actions.surgery"' -surgeries_with_procedures = alyxraw.AlyxRaw.Field & surgeries & \ - 'fname="procedures"' & 'fvalue!="None"' +surgeries_with_procedures = ( + alyxraw.AlyxRaw.Field & surgeries & 'fname="procedures"' & 'fvalue!="None"' +) -keys = (surgeries & surgeries_with_procedures).proj( - surgery_uuid='uuid') +keys = (surgeries & surgeries_with_procedures).proj(surgery_uuid="uuid") for key in keys: key_s = dict() - key['uuid'] = key['surgery_uuid'] + key["uuid"] = key["surgery_uuid"] if not len(action.Surgery & key): - print('Surgery {} not in the table action.Surgery'.format( - key['surgery_uuid'])) + print("Surgery {} not in the table action.Surgery".format(key["surgery_uuid"])) continue key_s = dict() - key_s['subject_uuid'], key_s['surgery_start_time'] = \ - (action.Surgery & key).fetch1( - 'subject_uuid', 'surgery_start_time') - procedures = grf(key, 'procedures', multiple_entries=True) + key_s["subject_uuid"], key_s["surgery_start_time"] = (action.Surgery & key).fetch1( + "subject_uuid", "surgery_start_time" + ) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") action.SurgeryProcedure.insert1(key_sp, skip_duplicates=True) # acquisition.ChildSession -print('Ingesting acquisition.ChildSession...') +print("Ingesting acquisition.ChildSession...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' -sessions_with_parents = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="parent_session"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & sessions_with_parents).proj( - session_uuid='uuid') +sessions_with_parents = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="parent_session"' & 'fvalue!="None"' +) +keys = (alyxraw.AlyxRaw & sessions_with_parents).proj(session_uuid="uuid") for key in keys: - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_cs = dict() - key_cs['subject_uuid'], key_cs['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') - parent_session = grf(key, 'parent_session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))): - print('Parent session {} is not in \ - the table acquisition.Session'.format( - parent_session)) + key_cs["subject_uuid"], key_cs["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") + parent_session = grf(key, "parent_session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(parent_session))): + print( + "Parent session {} is not in \ + the table acquisition.Session".format( + parent_session + ) + ) continue - key_cs['parent_session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(parent_session))).fetch1( - 'session_start_time') + key_cs["parent_session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(parent_session)) + ).fetch1("session_start_time") acquisition.ChildSession.insert1(key_cs, skip_duplicates=True) # acquisition.SessionUser -print('Ingesting acquisition.SessionUser...') +print("Ingesting acquisition.SessionUser...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' -sessions_with_users = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="users"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & sessions_with_users).proj( - session_uuid='uuid') +sessions_with_users = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="users"' & 'fvalue!="None"' +) +keys = (alyxraw.AlyxRaw & sessions_with_users).proj(session_uuid="uuid") session_user = QueryBuffer(acquisition.SessionUser) for key in tqdm(keys, position=0): - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - users = grf(key, 'users', multiple_entries=True) + users = grf(key, "users", multiple_entries=True) for user in users: key_su = key_s.copy() - key_su['user_name'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_su["user_name"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") acquisition.SessionUser.insert1(key_su, skip_duplicates=True) session_user.add_to_queue1(key_su) - if session_user.flush_insert( - skip_duplicates=True, chunksz=1000): - print('Inserted 1000 session user tuples') + if session_user.flush_insert(skip_duplicates=True, chunksz=1000): + print("Inserted 1000 session user tuples") if session_user.flush_insert(skip_duplicates=True): - print('Inserted all remaining session user tuples') + print("Inserted all remaining session user tuples") # acquisition.SessionProcedure -print('Ingesting acquisition.SessionProcedure...') +print("Ingesting acquisition.SessionProcedure...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' -sessions_with_procedures = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="procedures"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj( - session_uuid='uuid') +sessions_with_procedures = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="procedures"' & 'fvalue!="None"' +) +keys = (alyxraw.AlyxRaw & sessions_with_procedures).proj(session_uuid="uuid") session_procedure = QueryBuffer(acquisition.SessionProcedure) for key in tqdm(keys, position=0): - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - procedures = grf(key, 'procedures', multiple_entries=True) + procedures = grf(key, "procedures", multiple_entries=True) for procedure in procedures: key_sp = key_s.copy() - key_sp['procedure_type_name'] = \ - (action.ProcedureType & - dict(procedure_type_uuid=uuid.UUID(procedure))).fetch1( - 'procedure_type_name') + key_sp["procedure_type_name"] = ( + action.ProcedureType & dict(procedure_type_uuid=uuid.UUID(procedure)) + ).fetch1("procedure_type_name") session_procedure.add_to_queue1(key_sp) - if session_procedure.flush_insert( - skip_duplicates=True, chunksz=1000): - print('Inserted 1000 session procedure tuples') + if session_procedure.flush_insert(skip_duplicates=True, chunksz=1000): + print("Inserted 1000 session procedure tuples") if session_procedure.flush_insert(skip_duplicates=True): - print('Inserted all remaining session procedure tuples') + print("Inserted all remaining session procedure tuples") # acquisition.SessionProject -print('Ingesting acquisition.SessionProject...') +print("Ingesting acquisition.SessionProject...") sessions = alyxraw.AlyxRaw & 'model="actions.session"' -sessions_with_projects = alyxraw.AlyxRaw.Field & sessions & \ - 'fname="project"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & sessions_with_projects).proj( - session_uuid='uuid') +sessions_with_projects = ( + alyxraw.AlyxRaw.Field & sessions & 'fname="project"' & 'fvalue!="None"' +) +keys = (alyxraw.AlyxRaw & sessions_with_projects).proj(session_uuid="uuid") session_project = QueryBuffer(acquisition.SessionProject) for key in tqdm(keys, position=0): - key['uuid'] = key['session_uuid'] + key["uuid"] = key["session_uuid"] if not len(acquisition.Session & key): - print('Session {} is not in the table acquisition.Session'.format( - key['session_uuid'])) + print( + "Session {} is not in the table acquisition.Session".format( + key["session_uuid"] + ) + ) continue key_s = dict() - key_s['subject_uuid'], key_s['session_start_time'] = \ - (acquisition.Session & key).fetch1( - 'subject_uuid', 'session_start_time') + key_s["subject_uuid"], key_s["session_start_time"] = ( + acquisition.Session & key + ).fetch1("subject_uuid", "session_start_time") - project = grf(key, 'project') + project = grf(key, "project") key_sp = key_s.copy() - key_sp['session_project'] = \ - (reference.Project & - dict(project_uuid=uuid.UUID(project))).fetch1( - 'project_name') + key_sp["session_project"] = ( + reference.Project & dict(project_uuid=uuid.UUID(project)) + ).fetch1("project_name") session_project.add_to_queue1(key_sp) - if session_project.flush_insert( - skip_duplicates=True, chunksz=1000): - print('Inserted 1000 session procedure tuples') + if session_project.flush_insert(skip_duplicates=True, chunksz=1000): + print("Inserted 1000 session procedure tuples") if session_project.flush_insert(skip_duplicates=True): - print('Inserted all remaining session procedure tuples') + print("Inserted all remaining session procedure tuples") # data.ProjectRepository -print('Ingesting data.ProjectRespository...') +print("Ingesting data.ProjectRespository...") projects = alyxraw.AlyxRaw & 'model="subjects.project"' -projects_with_repos = alyxraw.AlyxRaw.Field & projects & \ - 'fname="repositories"' & 'fvalue!="None"' -keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid='uuid') +projects_with_repos = ( + alyxraw.AlyxRaw.Field & projects & 'fname="repositories"' & 'fvalue!="None"' +) +keys = (alyxraw.AlyxRaw & projects_with_repos).proj(project_uuid="uuid") for key in keys: key_p = dict() - key_p['project_name'] = (reference.Project & key).fetch1('project_name') - key['uuid'] = key['project_uuid'] + key_p["project_name"] = (reference.Project & key).fetch1("project_name") + key["uuid"] = key["project_uuid"] - repos = grf(key, 'repositories', multiple_entries=True) + repos = grf(key, "repositories", multiple_entries=True) for repo in repos: key_pr = key_p.copy() - key_pr['repo_name'] = \ - (data.DataRepository & - dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + key_pr["repo_name"] = ( + data.DataRepository & dict(repo_uuid=uuid.UUID(repo)) + ).fetch1("repo_name") data.ProjectRepository.insert1(key_pr, skip_duplicates=True) diff --git a/scripts/public/ingest_data_tables.py b/scripts/public/ingest_data_tables.py index 03f29339..bf1dcffb 100644 --- a/scripts/public/ingest_data_tables.py +++ b/scripts/public/ingest_data_tables.py @@ -1,134 +1,137 @@ - -from ibl_pipeline.ingest import alyxraw, data, reference, acquisition, QueryBuffer -from ibl_pipeline.ingest import get_raw_field as grf import uuid + from tqdm import tqdm +from ibl_pipeline.ingest import QueryBuffer, acquisition, alyxraw, data +from ibl_pipeline.ingest import get_raw_field as grf +from ibl_pipeline.ingest import reference + # ingest dataset entries key_source = (alyxraw.AlyxRaw & 'model="data.dataset"').proj( - dataset_uuid="uuid") - data.DataSet + dataset_uuid="uuid" +) - data.DataSet data_set = QueryBuffer(data.DataSet) -for key in tqdm(key_source.fetch('KEY'), position=0): +for key in tqdm(key_source.fetch("KEY"), position=0): key_ds = key.copy() - key['uuid'] = key['dataset_uuid'] - - session = grf(key, 'session') - if not len(acquisition.Session & - dict(session_uuid=uuid.UUID(session))): - print('Session {} is not in the table acquisition.Session'.format( - session)) - print('dataset_uuid: {}'.format(str(key['uuid']))) + key["uuid"] = key["dataset_uuid"] + + session = grf(key, "session") + if not len(acquisition.Session & dict(session_uuid=uuid.UUID(session))): + print("Session {} is not in the table acquisition.Session".format(session)) + print("dataset_uuid: {}".format(str(key["uuid"]))) continue - key_ds['subject_uuid'], key_ds['session_start_time'] = \ - (acquisition.Session & - dict(session_uuid=uuid.UUID(session))).fetch1( - 'subject_uuid', 'session_start_time') + key_ds["subject_uuid"], key_ds["session_start_time"] = ( + acquisition.Session & dict(session_uuid=uuid.UUID(session)) + ).fetch1("subject_uuid", "session_start_time") - key_ds['dataset_name'] = grf(key, 'name') + key_ds["dataset_name"] = grf(key, "name") - dt = grf(key, 'dataset_type') - key_ds['dataset_type_name'] = \ - (data.DataSetType & dict(dataset_type_uuid=uuid.UUID(dt))).fetch1( - 'dataset_type_name') + dt = grf(key, "dataset_type") + key_ds["dataset_type_name"] = ( + data.DataSetType & dict(dataset_type_uuid=uuid.UUID(dt)) + ).fetch1("dataset_type_name") - user = grf(key, 'created_by') + user = grf(key, "created_by") - if user != 'None': + if user != "None": try: - key_ds['dataset_created_by'] = \ - (reference.LabMember & dict(user_uuid=uuid.UUID(user))).fetch1( - 'user_name') + key_ds["dataset_created_by"] = ( + reference.LabMember & dict(user_uuid=uuid.UUID(user)) + ).fetch1("user_name") except: print(user) else: - key_ds['dataset_created_by'] = None + key_ds["dataset_created_by"] = None - format = grf(key, 'data_format') - key_ds['format_name'] = \ - (data.DataFormat & dict(format_uuid=uuid.UUID(format))).fetch1( - 'format_name') + format = grf(key, "data_format") + key_ds["format_name"] = ( + data.DataFormat & dict(format_uuid=uuid.UUID(format)) + ).fetch1("format_name") - key_ds['created_datetime'] = grf(key, 'created_datetime') + key_ds["created_datetime"] = grf(key, "created_datetime") - software = grf(key, 'generating_software') - if software != 'None': - key_ds['generating_software'] = software + software = grf(key, "generating_software") + if software != "None": + key_ds["generating_software"] = software else: - key_ds['generating_software'] = None + key_ds["generating_software"] = None - directory = grf(key, 'provenance_directory') - if directory != 'None': - key_ds['provenance_directory'] = directory + directory = grf(key, "provenance_directory") + if directory != "None": + key_ds["provenance_directory"] = directory else: - key_ds['provenance_directory'] = None + key_ds["provenance_directory"] = None - md5 = grf(key, 'md5') - if md5 != 'None': - key_ds['md5'] = md5 + md5 = grf(key, "md5") + if md5 != "None": + key_ds["md5"] = md5 else: - key_ds['md5'] = None + key_ds["md5"] = None - file_size = grf(key, 'file_size') - if file_size != 'None': - key_ds['file_size'] = file_size + file_size = grf(key, "file_size") + if file_size != "None": + key_ds["file_size"] = file_size else: - key_ds['file_size'] = None + key_ds["file_size"] = None data_set.add_to_queue1(key_ds) if data_set.flush_insert( - skip_duplicates=True, - allow_direct_insert=True, chunksz=100): - print('Inserted 100 dataset tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=100 + ): + print("Inserted 100 dataset tuples") if data_set.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining dataset tuples') + print("Inserted all remaining dataset tuples") # ingest file record entries records = alyxraw.AlyxRaw & 'model="data.filerecord"' -repos = (data.DataRepository & 'repo_name LIKE "flatiron%"').fetch( - 'repo_uuid') -records_flatiron = alyxraw.AlyxRaw.Field & records & \ - 'fname = "data_repository"' & [{'fvalue': str(repo)} for repo in repos] -record_exists = alyxraw.AlyxRaw.Field & records & \ - 'fname = "exists"' & 'fvalue="True"' +repos = (data.DataRepository & 'repo_name LIKE "flatiron%"').fetch("repo_uuid") +records_flatiron = ( + alyxraw.AlyxRaw.Field + & records + & 'fname = "data_repository"' + & [{"fvalue": str(repo)} for repo in repos] +) +record_exists = alyxraw.AlyxRaw.Field & records & 'fname = "exists"' & 'fvalue="True"' key_source = (alyxraw.AlyxRaw & record_exists & records_flatiron).proj( - record_uuid='uuid') - data.FileRecord + record_uuid="uuid" +) - data.FileRecord file_record = QueryBuffer(data.FileRecord) -for key in tqdm(key_source.fetch('KEY'), position=0): +for key in tqdm(key_source.fetch("KEY"), position=0): key_fr = key.copy() - key['uuid'] = key['record_uuid'] - key_fr['exists'] = True + key["uuid"] = key["record_uuid"] + key_fr["exists"] = True - dataset = grf(key, 'dataset') + dataset = grf(key, "dataset") if not len(data.DataSet & dict(dataset_uuid=uuid.UUID(dataset))): - print('Dataset {} is not in the table data.DataSet') - print('Record_uuid: {}'.format(str(key['uuid']))) + print("Dataset {} is not in the table data.DataSet") + print("Record_uuid: {}".format(str(key["uuid"]))) continue - key_fr['subject_uuid'], key_fr['session_start_time'], \ - key_fr['dataset_name'] = \ - (data.DataSet & dict(dataset_uuid=uuid.UUID(dataset))).fetch1( - 'subject_uuid', 'session_start_time', 'dataset_name') + key_fr["subject_uuid"], key_fr["session_start_time"], key_fr["dataset_name"] = ( + data.DataSet & dict(dataset_uuid=uuid.UUID(dataset)) + ).fetch1("subject_uuid", "session_start_time", "dataset_name") - repo = grf(key, 'data_repository') - key_fr['repo_name'] = \ - (data.DataRepository & dict(repo_uuid=uuid.UUID(repo))).fetch1( - 'repo_name') + repo = grf(key, "data_repository") + key_fr["repo_name"] = ( + data.DataRepository & dict(repo_uuid=uuid.UUID(repo)) + ).fetch1("repo_name") - key_fr['relative_path'] = grf(key, 'relative_path') + key_fr["relative_path"] = grf(key, "relative_path") file_record.add_to_queue1(key_fr) if file_record.flush_insert( - skip_duplicates=True, allow_direct_insert=True, chunksz=1000): - print('Inserted 1000 raw field tuples') + skip_duplicates=True, allow_direct_insert=True, chunksz=1000 + ): + print("Inserted 1000 raw field tuples") if file_record.flush_insert(skip_duplicates=True, allow_direct_insert=True): - print('Inserted all remaining file record tuples') + print("Inserted all remaining file record tuples") diff --git a/scripts/public/ingest_user_map.py b/scripts/public/ingest_user_map.py index 138ff41d..a06bd824 100644 --- a/scripts/public/ingest_user_map.py +++ b/scripts/public/ingest_user_map.py @@ -1,17 +1,18 @@ from ibl_pipeline import public from ibl_pipeline.ingest import alyxraw -users = alyxraw.AlyxRaw.Field & \ - (alyxraw.AlyxRaw & 'model="misc.labmember"') & \ - 'fname="username"' -original_users = public.UserMap.proj(fvalue='user_name') +users = ( + alyxraw.AlyxRaw.Field + & (alyxraw.AlyxRaw & 'model="misc.labmember"') + & 'fname="username"' +) +original_users = public.UserMap.proj(fvalue="user_name") new_users = [] -for iuser, user in enumerate( - (users - original_users).fetch()): +for iuser, user in enumerate((users - original_users).fetch()): usermap = dict( - user_name=user['fvalue'], - pseudo_name='user%03d' % (iuser + len(original_users))) + user_name=user["fvalue"], pseudo_name="user%03d" % (iuser + len(original_users)) + ) new_users.append(usermap) diff --git a/scripts/public/plotting_behavior.py b/scripts/public/plotting_behavior.py index 80df8da5..4b6b79e7 100644 --- a/scripts/public/plotting_behavior.py +++ b/scripts/public/plotting_behavior.py @@ -1,30 +1,30 @@ -''' +""" This script populate all behavioral plotting table for the website -''' +""" import datajoint as dj -from ibl_pipeline.plotting import behavior -from ibl_pipeline import subject +from ibl_pipeline import subject +from ibl_pipeline.plotting import behavior -kwargs = dict( - suppress_errors=True, display_progress=True -) +kwargs = dict(suppress_errors=True, display_progress=True) -print('------------ Populating plotting.SessionPsychCurve -----------') +print("------------ Populating plotting.SessionPsychCurve -----------") behavior.SessionPsychCurve.populate(**kwargs) -print('------ Populating plotting.SessionReactionTimeContrast -------') +print("------ Populating plotting.SessionReactionTimeContrast -------") behavior.SessionReactionTimeContrast.populate(**kwargs) -print('---- Populating plotting.SessionReactionTimeTrialNumber ------') +print("---- Populating plotting.SessionReactionTimeTrialNumber ------") behavior.SessionReactionTimeTrialNumber.populate(**kwargs) -print('--------------- Populating plotting.DatePsychCurve -----------') +print("--------------- Populating plotting.DatePsychCurve -----------") behavior.DatePsychCurve.populate(**kwargs) -print('-------- Populating plotting.DateReactionTimeContrast --------') +print("-------- Populating plotting.DateReactionTimeContrast --------") behavior.DateReactionTimeContrast.populate(**kwargs) -print('--------------- Populating plotting.WaterTypeColor -----------') +print("--------------- Populating plotting.WaterTypeColor -----------") behavior.WaterTypeColor.populate(**kwargs) -print('------------ Populating plotting.CumulativeSummary -----------') +print("------------ Populating plotting.CumulativeSummary -----------") with dj.config(safemode=False): - (behavior.CumulativeSummary - & behavior.CumulativeSummary.get_outdated_entries().fetch('KEY')).delete() + ( + behavior.CumulativeSummary + & behavior.CumulativeSummary.get_outdated_entries().fetch("KEY") + ).delete() behavior.CumulativeSummary.populate(**kwargs) diff --git a/scripts/public/table_names.py b/scripts/public/table_names.py index 9c4cbb2e..eb7205ae 100644 --- a/scripts/public/table_names.py +++ b/scripts/public/table_names.py @@ -1,65 +1,59 @@ -''' +""" Create global variables for table names -''' +""" def init(): - global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, \ - ACQUISITION_TABLES, DATA_TABLES + global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, ACQUISITION_TABLES, DATA_TABLES REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabMembership', - 'LabLocation', - 'Project', - 'ProjectLabMember' + "Lab", + "LabMember", + "LabMembership", + "LabLocation", + "Project", + "ProjectLabMember", ) SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'SubjectUser', - 'SubjectProject', - 'SubjectLab', - 'Caging', - 'Death', - 'Weaning', - 'SubjectCullMethod', - 'GenotypeTest', - 'Zygosity', - 'Implant' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "SubjectUser", + "SubjectProject", + "SubjectLab", + "Caging", + "Death", + "Weaning", + "SubjectCullMethod", + "GenotypeTest", + "Zygosity", + "Implant", ) - ACTION_TABLES = ( - 'ProcedureType', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure' - ) + ACTION_TABLES = ("ProcedureType", "Surgery", "SurgeryUser", "SurgeryProcedure") ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", ) DATA_TABLES = ( - 'DataFormat', - 'DataRepositoryType', - 'DataRepository', - 'ProjectRepository', - 'DataSetType', - 'DataSet', - 'FileRecord' + "DataFormat", + "DataRepositoryType", + "DataRepository", + "ProjectRepository", + "DataSetType", + "DataSet", + "FileRecord", ) diff --git a/scripts/public/utils.py b/scripts/public/utils.py index 17137f7d..0546597d 100644 --- a/scripts/public/utils.py +++ b/scripts/public/utils.py @@ -1,8 +1,10 @@ -import datajoint as dj -from uuid import UUID -from ibl_pipeline.ingest import alyxraw, acquisition import os +from uuid import UUID + +import datajoint as dj + from ibl_pipeline import public +from ibl_pipeline.ingest import acquisition, alyxraw def get_uuids(model_name, uuid_name, subject_uuids): @@ -17,73 +19,83 @@ def get_uuids(model_name, uuid_name, subject_uuids): list of dictionaries as the restrictor for that table to be populated """ - if model_name == 'subjects.subject': - return [dict(subject_uuid=subject_uuid) - for subject_uuid in subject_uuids] + if model_name == "subjects.subject": + return [dict(subject_uuid=subject_uuid) for subject_uuid in subject_uuids] else: subjects = [dict(fvalue=str(uuid)) for uuid in subject_uuids] - if 'actions.' in model_name and model_name != 'actions.session': - uuids = (alyxraw.AlyxRaw & {'model': model_name} & - (alyxraw.AlyxRaw.Field & dict(fname='subject') & - subjects)).fetch('uuid') + if "actions." in model_name and model_name != "actions.session": + uuids = ( + alyxraw.AlyxRaw + & {"model": model_name} + & (alyxraw.AlyxRaw.Field & dict(fname="subject") & subjects) + ).fetch("uuid") - elif 'data.' in model_name or model_name == 'actions.session': + elif "data." in model_name or model_name == "actions.session": # loop over subjects and get sessions between the session range sessions = [] for subj_uuid, subj in zip(subject_uuids, subjects): - mode = dj.config.get('custom', {}).get('database.mode', os.getenv('MODE', '')) - if mode == 'public': + mode = dj.config.get("custom", {}).get( + "database.mode", os.getenv("MODE", "") + ) + if mode == "public": session_start, session_end = ( - public.PublicSubject & - (public.PublicSubjectUuid & - {'subject_uuid': subj_uuid})).fetch1( - 'session_start_date', 'session_end_date') - session_start = session_start.strftime('%Y-%m-%d') - session_end = session_end.strftime('%Y-%m-%d') + public.PublicSubject + & (public.PublicSubjectUuid & {"subject_uuid": subj_uuid}) + ).fetch1("session_start_date", "session_end_date") + session_start = session_start.strftime("%Y-%m-%d") + session_end = session_end.strftime("%Y-%m-%d") session_uuids = ( - alyxraw.AlyxRaw & {'model': 'actions.session'} & - (alyxraw.AlyxRaw.Field & 'fname="subject"' & subj) & - (alyxraw.AlyxRaw.Field & 'fname="start_time"' & - 'fvalue between "{}" and "{}"'.format( - session_start, session_end)) - ).fetch('uuid') + alyxraw.AlyxRaw + & {"model": "actions.session"} + & (alyxraw.AlyxRaw.Field & 'fname="subject"' & subj) + & ( + alyxraw.AlyxRaw.Field + & 'fname="start_time"' + & 'fvalue between "{}" and "{}"'.format( + session_start, session_end + ) + ) + ).fetch("uuid") else: - subjects = [dict(subject_uuid=subject_uuid) - for subject_uuid in subject_uuids] + subjects = [ + dict(subject_uuid=subject_uuid) + for subject_uuid in subject_uuids + ] session_uuids = (acquisition.Session & subjects).fetch( - 'session_uuid') + "session_uuid" + ) - if model_name == 'actions.session': + if model_name == "actions.session": sessions += [dict(uuid=uuid) for uuid in session_uuids] else: sessions += [dict(fvalue=str(uuid)) for uuid in session_uuids] - if model_name == 'actions.session': - uuids = ( - alyxraw.AlyxRaw & - {'model': model_name} & - sessions - ).fetch('uuid') + if model_name == "actions.session": + uuids = (alyxraw.AlyxRaw & {"model": model_name} & sessions).fetch( + "uuid" + ) - elif model_name != 'data.filerecord': + elif model_name != "data.filerecord": uuids = ( - alyxraw.AlyxRaw & {'model': model_name} & - (alyxraw.AlyxRaw.Field & 'fname="session"' & sessions) - ).fetch('uuid') + alyxraw.AlyxRaw + & {"model": model_name} + & (alyxraw.AlyxRaw.Field & 'fname="session"' & sessions) + ).fetch("uuid") else: dataset_uuids = ( - alyxraw.AlyxRaw & {'model': 'data.dataset'} & - (alyxraw.AlyxRaw.Field & 'fname="session"' & sessions) - ).fetch('uuid') - datasets = [dict(fvalue=str(uuid)) - for uuid in dataset_uuids] + alyxraw.AlyxRaw + & {"model": "data.dataset"} + & (alyxraw.AlyxRaw.Field & 'fname="session"' & sessions) + ).fetch("uuid") + datasets = [dict(fvalue=str(uuid)) for uuid in dataset_uuids] uuids = ( - alyxraw.AlyxRaw & {'model': model_name} & - (alyxraw.AlyxRaw.Field & 'fname="dataset"' & datasets) - ).fetch('uuid') + alyxraw.AlyxRaw + & {"model": model_name} + & (alyxraw.AlyxRaw.Field & 'fname="dataset"' & datasets) + ).fetch("uuid") return [{uuid_name: uuid} for uuid in uuids] diff --git a/scripts/table_names.py b/scripts/table_names.py index 26c78442..3ec90ae7 100755 --- a/scripts/table_names.py +++ b/scripts/table_names.py @@ -1,84 +1,81 @@ -''' +""" A list of table names -''' +""" REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabMembership', - 'LabLocation', - 'Project', - 'ProjectLabMember', - 'CoordinateSystem' + "Lab", + "LabMember", + "LabMembership", + "LabLocation", + "Project", + "ProjectLabMember", + "CoordinateSystem", ) SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'SubjectUser', - 'SubjectProject', - 'SubjectLab', - 'BreedingPair', - 'Litter', - 'LitterSubject', - 'Weaning', - 'Death', - 'SubjectCullMethod', - 'Caging', - 'UserHistory', - 'GenotypeTest', - 'Zygosity', - 'Implant', - 'Food', - 'CageType', - 'Enrichment', - 'Housing', - 'SubjectHousing' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "SubjectUser", + "SubjectProject", + "SubjectLab", + "BreedingPair", + "Litter", + "LitterSubject", + "Weaning", + "Death", + "SubjectCullMethod", + "Caging", + "UserHistory", + "GenotypeTest", + "Zygosity", + "Implant", + "Food", + "CageType", + "Enrichment", + "Housing", + "SubjectHousing", ) ACTION_TABLES = ( - 'ProcedureType', - 'Weighing', - 'WaterType', - 'WaterAdministration', - 'WaterRestriction', - 'WaterRestrictionUser', - 'WaterRestrictionProcedure', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', - 'OtherAction', - 'OtherActionUser', - 'OtherActionProcedure' - + "ProcedureType", + "Weighing", + "WaterType", + "WaterAdministration", + "WaterRestriction", + "WaterRestrictionUser", + "WaterRestrictionProcedure", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", + "OtherAction", + "OtherActionUser", + "OtherActionProcedure", ) ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', - 'WaterAdministrationSession' + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", + "WaterAdministrationSession", ) DATA_TABLES = ( - 'DataFormat', - 'DataRepositoryType', - 'DataRepository', - 'ProjectRepository', - 'DataSetType', - 'DataSet', - 'FileRecord' + "DataFormat", + "DataRepositoryType", + "DataRepository", + "ProjectRepository", + "DataSetType", + "DataSet", + "FileRecord", ) -EPHYS_TABLES = ( - 'Probe', -) +EPHYS_TABLES = ("Probe",) diff --git a/scripts/test_pipeline/ingest_alyx_raw.py b/scripts/test_pipeline/ingest_alyx_raw.py index a6857054..b9267c2a 100644 --- a/scripts/test_pipeline/ingest_alyx_raw.py +++ b/scripts/test_pipeline/ingest_alyx_raw.py @@ -1,17 +1,19 @@ -''' +""" This script load the json dump and insert the tuples into the alyxraw table. -''' +""" -import datajoint as dj +import collections import json import logging import math -import collections import os.path as path -from ibl_pipeline.ingest import alyxraw, QueryBuffer import sys import uuid +import datajoint as dj + +from ibl_pipeline.ingest import QueryBuffer, alyxraw + logger = logging.getLogger(__name__) dir_name = path.dirname(__file__) @@ -19,17 +21,19 @@ if len(sys.argv) < 2: # no arguments given # if no argument given, assume a canonical file location and name - filename = path.join('/data', 'alyxfull.json') + filename = path.join("/data", "alyxfull.json") else: filename = path.join(dir_name, sys.argv[1]) -with open(filename, 'r') as fid: +with open(filename, "r") as fid: keys = json.load(fid) # remove invalid uuid from unused tables -keys = [key for key in keys - if key['model'] not in - ['auth.group', 'sessions.session', 'authtoken.token']] +keys = [ + key + for key in keys + if key["model"] not in ["auth.group", "sessions.session", "authtoken.token"] +] # use insert buffer to speed up the insersion process ib_main = QueryBuffer(alyxraw.AlyxRaw) @@ -37,38 +41,43 @@ # insert into AlyxRaw table for key in keys: - ib_main.add_to_queue1(dict(uuid=uuid.UUID(key['pk']), model=key['model'])) + ib_main.add_to_queue1(dict(uuid=uuid.UUID(key["pk"]), model=key["model"])) if ib_main.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw tuples.') + logger.debug("Inserted 10000 raw tuples.") if ib_main.flush_insert(skip_duplicates=True): - logger.debug('Inserted remaining raw tuples') + logger.debug("Inserted remaining raw tuples") # insert into the part table AlyxRaw.Field for key in keys: - key_field = dict(uuid=uuid.UUID(key['pk'])) - for field_name, field_value in key['fields'].items(): + key_field = dict(uuid=uuid.UUID(key["pk"])) + for field_name, field_value in key["fields"].items(): key_field = dict(key_field, fname=field_name) - if field_name == 'json' and field_value is not None: + if field_name == "json" and field_value is not None: if len(field_value) > 10000: continue else: - key_field['value_idx'] = 0 - key_field['fvalue'] = json.dumps(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = json.dumps(field_value) ib_part.add_to_queue1(key_field) - elif field_value is None or field_value == '' or field_value == [] or \ - (isinstance(field_value, float) and math.isnan(field_value)): - key_field['value_idx'] = 0 - key_field['fvalue'] = 'None' + elif ( + field_value is None + or field_value == "" + or field_value == [] + or (isinstance(field_value, float) and math.isnan(field_value)) + ): + key_field["value_idx"] = 0 + key_field["fvalue"] = "None" ib_part.add_to_queue1(key_field) - elif type(field_value) is list and \ - (type(field_value[0]) is dict or type(field_value[0]) is str): + elif type(field_value) is list and ( + type(field_value[0]) is dict or type(field_value[0]) is str + ): for value_idx, value in enumerate(field_value): - key_field['value_idx'] = value_idx - key_field['fvalue'] = str(value) + key_field["value_idx"] = value_idx + key_field["fvalue"] = str(value) ib_part.add_to_queue1(key_field) # elif isinstance(field_value, collections.Sequence) and \ # isinstance(field_value, (collections.Mapping, str)): @@ -76,12 +85,12 @@ # fvalue=str(value)) # for value_idx, value in enumerate(field_value)) else: - key_field['value_idx'] = 0 - key_field['fvalue'] = str(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = str(field_value) ib_part.add_to_queue1(key_field) if ib_part.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw field tuples') + logger.debug("Inserted 10000 raw field tuples") if ib_part.flush_insert(skip_duplicates=True): - logger.debug('Inserted all remaining raw field tuples') + logger.debug("Inserted all remaining raw field tuples") diff --git a/scripts/test_spinning_brain.py b/scripts/test_spinning_brain.py index 6aefb407..51f3e499 100644 --- a/scripts/test_spinning_brain.py +++ b/scripts/test_spinning_brain.py @@ -1,5 +1,6 @@ import subprocess -subprocess.Popen(["Xvfb",":1","-screen", "0", "1280x1024x24", "-auth", "localhost"]) + +subprocess.Popen(["Xvfb", ":1", "-screen", "0", "1280x1024x24", "-auth", "localhost"]) """ Generates 3D rendering of all probe trajectories for a single subject. @@ -8,17 +9,18 @@ 'Histology track': Red 'Planned': Blue """ +import ibllib.atlas as atlas +import imageio +from atlaselectrophysiology import rendering + # Author: Olivier # environment installation guide https://github.com/int-brain-lab/iblenv # run "%qui qt" magic command from Ipython prompt for interactive mode from mayavi import mlab -from atlaselectrophysiology import rendering -import ibllib.atlas as atlas from oneibl.one import ONE -import imageio # GIF export params -file_name = 'animation.gif' +file_name = "animation.gif" fps = 20 # Code to generate figure @@ -26,8 +28,8 @@ fig = rendering.figure() -subject = 'KS003' -trajs = one.alyx.rest('trajectories', 'list', subject=subject) +subject = "KS003" +trajs = one.alyx.rest("trajectories", "list", subject=subject) ba_allen = atlas.AllenAtlas(25) ba_needles = atlas.NeedlesAtlas(25) @@ -35,27 +37,44 @@ plt_trj = [] for index, trj in enumerate(trajs): - if trj['coordinate_system'] == 'IBL-Allen': + if trj["coordinate_system"] == "IBL-Allen": brain_atlas = ba_allen - elif trj['coordinate_system'] == 'Needles-Allen': + elif trj["coordinate_system"] == "Needles-Allen": brain_atlas = ba_needles ins = atlas.Insertion.from_dict(trj, brain_atlas=brain_atlas) ins = atlas.Insertion.from_dict(trj, brain_atlas=ba_allen) mlapdv = brain_atlas.xyz2ccf(ins.xyz) - if trj['provenance'] == 'Micro-manipulator': - color = (0., 1., 0.) # Green - elif trj['provenance'] == 'Histology track': - color = (1., 0., 0.) # Red - elif trj['provenance'] == 'Planned': - color = (0., 0., 1.) # Blue - - lab = f"{trj['session']['subject']}/{trj['session']['start_time'][:10]}" + f"{str(trj['session']['number']).zfill(3)}" - plt = mlab.plot3d(mlapdv[:, 1], mlapdv[:, 2], mlapdv[:, 0], - line_width=3, color=color, tube_radius=20) + if trj["provenance"] == "Micro-manipulator": + color = (0.0, 1.0, 0.0) # Green + elif trj["provenance"] == "Histology track": + color = (1.0, 0.0, 0.0) # Red + elif trj["provenance"] == "Planned": + color = (0.0, 0.0, 1.0) # Blue + + lab = ( + f"{trj['session']['subject']}/{trj['session']['start_time'][:10]}" + + f"{str(trj['session']['number']).zfill(3)}" + ) + plt = mlab.plot3d( + mlapdv[:, 1], + mlapdv[:, 2], + mlapdv[:, 0], + line_width=3, + color=color, + tube_radius=20, + ) # setup the labels at the top of the trajectories - mlab.text3d(mlapdv[0, 1], mlapdv[0, 2], mlapdv[0, 0] - 500, lab, - line_width=4, color=tuple(color), figure=fig, scale=150) + mlab.text3d( + mlapdv[0, 1], + mlapdv[0, 2], + mlapdv[0, 0] - 500, + lab, + line_width=4, + color=tuple(color), + figure=fig, + scale=150, + ) plt_trj.append(plt) @@ -67,6 +86,6 @@ mlab.test_plot3d() f = mlab.gcf() f.scene._lift() - frames.append(mlab.screenshot(mode='rgb', antialiased=True)) + frames.append(mlab.screenshot(mode="rgb", antialiased=True)) imageio.mimsave(file_name, frames, duration=(1 / fps)) diff --git a/scripts/tests/add_probe_label.py b/scripts/tests/add_probe_label.py index 01f8e9e7..13379148 100755 --- a/scripts/tests/add_probe_label.py +++ b/scripts/tests/add_probe_label.py @@ -1,26 +1,26 @@ -from ibl_pipeline import ephys, acquisition -import datajoint as dj -from oneibl.one import ONE import re + import alf.io +import datajoint as dj +from oneibl.one import ONE from tqdm import tqdm +from ibl_pipeline import acquisition, ephys -if __name__ == '__main__': +if __name__ == "__main__": one = ONE() - keys = ephys.ProbeInsertion.fetch('KEY') + keys = ephys.ProbeInsertion.fetch("KEY") - dtypes = ['probes.description'] + dtypes = ["probes.description"] for key in tqdm(keys, position=0): - eID = str((acquisition.Session & key).fetch1('session_uuid')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) files = one.load(eID, dataset_types=dtypes, download_only=True) ses_path = alf.io.get_session_path(files[0]) - probes = alf.io.load_object(ses_path.joinpath('alf'), 'probes') + probes = alf.io.load_object(ses_path.joinpath("alf"), "probes") # ingest probe insertion - for p in probes['description']: - print(p['label']) - idx = int(re.search('probe.?0([0-3])', p['label']).group(1)) - if idx == key['probe_idx']: - dj.Table._update( - ephys.ProbeInsertion & key, 'probe_label', p['label']) + for p in probes["description"]: + print(p["label"]) + idx = int(re.search("probe.?0([0-3])", p["label"]).group(1)) + if idx == key["probe_idx"]: + dj.Table._update(ephys.ProbeInsertion & key, "probe_label", p["label"]) diff --git a/scripts/tests/criteria.py b/scripts/tests/criteria.py index e9100195..eac03f3c 100755 --- a/scripts/tests/criteria.py +++ b/scripts/tests/criteria.py @@ -1,16 +1,16 @@ -''' +""" This script tests the new version of criteria for the behavior benchmarks Shan Shen, 2019-11-02 -''' +""" -from ibl_pipeline import subject, acquisition, behavior +from ibl_pipeline import acquisition, behavior, subject from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.plotting import behavior as behavior_plotting -if __name__ == '__main__': +if __name__ == "__main__": test_animals = [ - {'subject_nickname': 'ZM_1743'}, + {"subject_nickname": "ZM_1743"}, # {'subject_nickname': 'IBL-T4'}, # {'subject_nickname': 'ibl_witten_07'} ] diff --git a/scripts/tests/ephys_ingestion.py b/scripts/tests/ephys_ingestion.py index 109b0a87..02b3975f 100755 --- a/scripts/tests/ephys_ingestion.py +++ b/scripts/tests/ephys_ingestion.py @@ -1,28 +1,31 @@ -''' +""" This script tests the ingestion of ephys pipeline. Shan Shen, 2019-11-20 -''' +""" -from ibl_pipeline import subject, acquisition, behavior, ephys -from ibl_pipeline.plotting import ephys as ephys_plotting +import datetime import logging import time - -import datetime from uuid import UUID +from ibl_pipeline import acquisition, behavior, ephys, subject +from ibl_pipeline.plotting import ephys as ephys_plotting -if __name__ == '__main__': - key = {'subject_uuid': UUID('f6fe3981-8b66-4ff7-828b-1a79bd31f0fe'), - 'session_start_time': datetime.datetime(2020, 2, 13, 10, 58, 33)} +if __name__ == "__main__": + key = { + "subject_uuid": UUID("f6fe3981-8b66-4ff7-828b-1a79bd31f0fe"), + "session_start_time": datetime.datetime(2020, 2, 13, 10, 58, 33), + } logging.basicConfig( - format='%(asctime)s - %(message)s', + format="%(asctime)s - %(message)s", handlers=[ logging.FileHandler("test_ephys_ingestion.log"), - logging.StreamHandler()], - level=30) + logging.StreamHandler(), + ], + level=30, + ) logger = logging.getLogger(__name__) @@ -30,61 +33,80 @@ start_time = time.time() - logger.log(30, 'Testing ingestion of CompleteClusterSession...') + logger.log(30, "Testing ingestion of CompleteClusterSession...") ephys.CompleteClusterSession.populate(key, **kargs) complete_cluster_time = time.time() - logger.log(30, 'Ingestion time of ProbeInsertion {}'.format( - complete_cluster_time-start_time)) - - logger.log(30, 'Testing ingestion of ProbeInsertion...') + logger.log( + 30, + "Ingestion time of ProbeInsertion {}".format( + complete_cluster_time - start_time + ), + ) + + logger.log(30, "Testing ingestion of ProbeInsertion...") ephys.ProbeInsertion.populate(key, **kargs) probe_insertion_time = time.time() - logger.log(30, 'Ingestion time of ProbeInsertion {}'.format( - probe_insertion_time-complete_cluster_time)) - - - logger.log(30, 'Testing ingestion of ProbeTrajectory...') + logger.log( + 30, + "Ingestion time of ProbeInsertion {}".format( + probe_insertion_time - complete_cluster_time + ), + ) + + logger.log(30, "Testing ingestion of ProbeTrajectory...") ephys.ProbeTrajectory.populate(key, **kargs) probe_trajectory_time = time.time() - logger.log(30, 'Ingestion time of ProbeTrajectory {}'.format( - probe_trajectory_time-probe_insertion_time)) - - logger.log(30, 'Testing ingestion of ChannelGroup...') + logger.log( + 30, + "Ingestion time of ProbeTrajectory {}".format( + probe_trajectory_time - probe_insertion_time + ), + ) + + logger.log(30, "Testing ingestion of ChannelGroup...") ephys.ChannelGroup.populate(key, **kargs) channel_group_time = time.time() - logger.log(30, 'Ingestion time of ChannelGroup {}'.format( - channel_group_time-probe_trajectory_time)) - - logger.log(30, 'Testing ingestion of Cluster...') + logger.log( + 30, + "Ingestion time of ChannelGroup {}".format( + channel_group_time - probe_trajectory_time + ), + ) + + logger.log(30, "Testing ingestion of Cluster...") ephys.DefaultCluster.populate(key, **kargs) cluster_time = time.time() - logger.log(30, 'Ingestion time of Cluster {}'.format( - cluster_time-channel_group_time)) + logger.log( + 30, "Ingestion time of Cluster {}".format(cluster_time - channel_group_time) + ) - logger.log(30, 'Testing ingestion of TrialSpikes...') + logger.log(30, "Testing ingestion of TrialSpikes...") ephys.AlignedTrialSpikes.populate(**kargs) trial_spikes_time = time.time() - logger.log(30, 'Ingestion time of TrialSpikes {}'.format( - trial_spikes_time-cluster_time)) + logger.log( + 30, "Ingestion time of TrialSpikes {}".format(trial_spikes_time - cluster_time) + ) - logger.log(30, 'Testing ingestion of plotting raster...') - ephys_plotting.Raster.populate( - **kargs) + logger.log(30, "Testing ingestion of plotting raster...") + ephys_plotting.Raster.populate(**kargs) raster_plotting_time = time.time() - logger.log(30, 'Ingestion time of Raster {}'.format( - raster_plotting_time-trial_spikes_time)) + logger.log( + 30, + "Ingestion time of Raster {}".format(raster_plotting_time - trial_spikes_time), + ) - logger.log(30, 'Testing ingestion of plotting psth...') - ephys_plotting.Psth.populate( - **kargs) + logger.log(30, "Testing ingestion of plotting psth...") + ephys_plotting.Psth.populate(**kargs) psth_plotting_time = time.time() - logger.log(30, 'Ingestion time of TrialSpikes {}'.format( - psth_plotting_time-raster_plotting_time)) + logger.log( + 30, + "Ingestion time of TrialSpikes {}".format( + psth_plotting_time - raster_plotting_time + ), + ) end_time = time.time() - logger.log(30, 'Total ingestion time {}'.format( - end_time-start_time - )) + logger.log(30, "Total ingestion time {}".format(end_time - start_time)) diff --git a/scripts/tests/ephys_ingestion_single.py b/scripts/tests/ephys_ingestion_single.py index 08b430dd..fb0f39d3 100755 --- a/scripts/tests/ephys_ingestion_single.py +++ b/scripts/tests/ephys_ingestion_single.py @@ -1,69 +1,85 @@ +import datetime +import json +from os import path +from uuid import UUID import datajoint as dj -from ibl_pipeline import behavior, ephys import numpy as np import pandas as pd import plotly import plotly.graph_objs as go -import json -from os import path -from uuid import UUID -import datetime from tqdm import tqdm +from ibl_pipeline import behavior, ephys -if __name__ == '__main__': - key = {'subject_uuid': UUID('18a54f60-534b-4ed5-8bda-b434079b8ab8'), - 'session_start_time': datetime.datetime(2019, 12, 6, 18, 30, 56), - 'cluster_revision': '0', - 'probe_idx': 0, - 'cluster_id': 100} +if __name__ == "__main__": + key = { + "subject_uuid": UUID("18a54f60-534b-4ed5-8bda-b434079b8ab8"), + "session_start_time": datetime.datetime(2019, 12, 6, 18, 30, 56), + "cluster_revision": "0", + "probe_idx": 0, + "cluster_id": 100, + } trials = behavior.TrialSet.Trial & key cluster = ephys.Cluster() & key - spike_times = cluster.fetch1('cluster_spikes_times') + spike_times = cluster.fetch1("cluster_spikes_times") - events = (ephys.Event & 'event!="go cue"').fetch('event') + events = (ephys.Event & 'event!="go cue"').fetch("event") - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_response_times, trial_feedback_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_response_time', - 'trial_feedback_time') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_response_times, + trial_feedback_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_response_time", + "trial_feedback_time", + ) # trial idx of each spike spike_ids = np.searchsorted( - np.sort(np.hstack([trial_start_times, trial_end_times])), spike_times) + np.sort(np.hstack([trial_start_times, trial_end_times])), spike_times + ) trial_spks = [] for itrial, trial_key in tqdm(enumerate(trial_keys), position=0): trial_spk = dict( **trial_key, - cluster_id=key['cluster_id'], - cluster_revision=key['cluster_revision'], - probe_idx=key['probe_idx'] + cluster_id=key["cluster_id"], + cluster_revision=key["cluster_revision"], + probe_idx=key["probe_idx"] ) trial_spike_time = spike_times[spike_ids == itrial] for event in events: if not len(trial_spike_time): - trial_spk['trial_spike_times'] = [] + trial_spk["trial_spike_times"] = [] else: - if event == 'stim on': - trial_spk['trial_spike_times'] = \ + if event == "stim on": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_stim_on_times[itrial] - elif event == 'response': - trial_spk['trial_spike_times'] = \ + ) + elif event == "response": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_response_times[itrial] - elif event == 'feedback': + ) + elif event == "feedback": if trial_feedback_times[itrial]: - trial_spk['trial_spike_times'] = \ + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_feedback_times[itrial] + ) else: continue - trial_spk['event'] = event + trial_spk["event"] = event trial_spks.append(trial_spk.copy()) # self.insert(trial_spks) diff --git a/scripts/tests/external_performance.py b/scripts/tests/external_performance.py index 3801ceb2..dc48063f 100644 --- a/scripts/tests/external_performance.py +++ b/scripts/tests/external_performance.py @@ -1,20 +1,21 @@ +import re +import time +from os import environ, path +from uuid import UUID + +import alf.io import datajoint as dj import numpy as np -from os import path, environ -from ibl_pipeline.common import * -from tqdm import tqdm -import numpy as np import pandas as pd -from uuid import UUID -import re -import alf.io +from tqdm import tqdm + +from ibl_pipeline.common import * from ibl_pipeline.utils import atlas -import time -if mode == 'update': - schema = dj.schema('ibl_ephys') +if mode == "update": + schema = dj.schema("ibl_ephys") else: - schema = dj.schema(dj.config.get('database.prefix', '') + 'ibl_ephys') + schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ephys") @schema @@ -28,66 +29,88 @@ class TrialSpikes(dj.Computed): trial_spike_times=null: blob@ephys # spike time for each trial, aligned to different event times trial_spikes_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = behavior.TrialSet * DefaultCluster * Event & \ - ['event in ("stim on", "feedback")', - wheel.MovementTimes & 'event="movement"'] + key_source = behavior.TrialSet * DefaultCluster * Event & [ + 'event in ("stim on", "feedback")', + wheel.MovementTimes & 'event="movement"', + ] def make(self, key): cluster = DefaultCluster() & key - spike_times = cluster.fetch1('cluster_spikes_times') - event = (Event & key).fetch1('event') + spike_times = cluster.fetch1("cluster_spikes_times") + event = (Event & key).fetch1("event") - if event == 'movement': + if event == "movement": trials = behavior.TrialSet.Trial * wheel.MovementTimes & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times, \ - trial_movement_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time', - 'movement_onset') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + trial_movement_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + "movement_onset", + ) else: trials = behavior.TrialSet.Trial & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + ) # trial idx of each spike spike_ids = np.searchsorted( np.sort(np.hstack(np.vstack([trial_start_times, trial_end_times]).T)), - spike_times) + spike_times, + ) trial_spks = [] for itrial, trial_key in enumerate(trial_keys): trial_spk = dict( - **trial_key, - cluster_id=key['cluster_id'], - probe_idx=key['probe_idx'] + **trial_key, cluster_id=key["cluster_id"], probe_idx=key["probe_idx"] ) - trial_spike_time = spike_times[spike_ids == itrial*2+1] + trial_spike_time = spike_times[spike_ids == itrial * 2 + 1] if not len(trial_spike_time): - trial_spk['trial_spike_times'] = [] + trial_spk["trial_spike_times"] = [] else: - if event == 'stim on': - trial_spk['trial_spike_times'] = \ + if event == "stim on": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_stim_on_times[itrial] - elif event == 'movement': - trial_spk['trial_spike_times'] = \ + ) + elif event == "movement": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_movement_times[itrial] - elif event == 'feedback': + ) + elif event == "feedback": if trial_feedback_times[itrial]: - trial_spk['trial_spike_times'] = \ + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_feedback_times[itrial] + ) else: continue - trial_spk['event'] = event + trial_spk["event"] = event trial_spks.append(trial_spk.copy()) self.insert(trial_spks) + @schema class TrialSpikesLocal(dj.Computed): definition = """ @@ -99,83 +122,109 @@ class TrialSpikesLocal(dj.Computed): trial_spike_times=null: blob@ephys_local # spike time for each trial, aligned to different event times trial_spikes_ts=CURRENT_TIMESTAMP: timestamp """ - key_source = behavior.TrialSet * DefaultCluster * Event & \ - ['event in ("stim on", "feedback")', - wheel.MovementTimes & 'event="movement"'] + key_source = behavior.TrialSet * DefaultCluster * Event & [ + 'event in ("stim on", "feedback")', + wheel.MovementTimes & 'event="movement"', + ] def make(self, key): cluster = DefaultCluster() & key - spike_times = cluster.fetch1('cluster_spikes_times') - event = (Event & key).fetch1('event') + spike_times = cluster.fetch1("cluster_spikes_times") + event = (Event & key).fetch1("event") - if event == 'movement': + if event == "movement": trials = behavior.TrialSet.Trial * wheel.MovementTimes & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times, \ - trial_movement_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time', - 'movement_onset') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + trial_movement_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + "movement_onset", + ) else: trials = behavior.TrialSet.Trial & key - trial_keys, trial_start_times, trial_end_times, \ - trial_stim_on_times, trial_feedback_times = \ - trials.fetch('KEY', 'trial_start_time', 'trial_end_time', - 'trial_stim_on_time', 'trial_feedback_time') + ( + trial_keys, + trial_start_times, + trial_end_times, + trial_stim_on_times, + trial_feedback_times, + ) = trials.fetch( + "KEY", + "trial_start_time", + "trial_end_time", + "trial_stim_on_time", + "trial_feedback_time", + ) # trial idx of each spike spike_ids = np.searchsorted( np.sort(np.hstack(np.vstack([trial_start_times, trial_end_times]).T)), - spike_times) + spike_times, + ) trial_spks = [] for itrial, trial_key in enumerate(trial_keys): trial_spk = dict( - **trial_key, - cluster_id=key['cluster_id'], - probe_idx=key['probe_idx'] + **trial_key, cluster_id=key["cluster_id"], probe_idx=key["probe_idx"] ) - trial_spike_time = spike_times[spike_ids == itrial*2+1] + trial_spike_time = spike_times[spike_ids == itrial * 2 + 1] if not len(trial_spike_time): - trial_spk['trial_spike_times'] = [] + trial_spk["trial_spike_times"] = [] else: - if event == 'stim on': - trial_spk['trial_spike_times'] = \ + if event == "stim on": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_stim_on_times[itrial] - elif event == 'movement': - trial_spk['trial_spike_times'] = \ + ) + elif event == "movement": + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_movement_times[itrial] - elif event == 'feedback': + ) + elif event == "feedback": if trial_feedback_times[itrial]: - trial_spk['trial_spike_times'] = \ + trial_spk["trial_spike_times"] = ( trial_spike_time - trial_feedback_times[itrial] + ) else: continue - trial_spk['event'] = event + trial_spk["event"] = event trial_spks.append(trial_spk.copy()) self.insert(trial_spks) -if __name__ == '__main__': - +if __name__ == "__main__": - session = acquisition.Session & {'session_uuid': 'f8d5c8b0-b931-4151-b86c-c471e2e80e5d'} - clusters = (ephys.DefaultCluster & session).fetch('KEY', limit=2) + session = acquisition.Session & { + "session_uuid": "f8d5c8b0-b931-4151-b86c-c471e2e80e5d" + } + clusters = (ephys.DefaultCluster & session).fetch("KEY", limit=2) tables = [ephys.AlignedTrialSpikes, TrialSpikes, TrialSpikesExternal] with dj.config(safemode=False): for table in tables: (table & clusters).delete() start_time = time.time() table.populate(clusters, display_progress=True, suppress_errors=True) - print('Populate time for {}: {}'.format( - table.__name__, time.time()-start_time)) + print( + "Populate time for {}: {}".format( + table.__name__, time.time() - start_time + ) + ) start_time = time.time() entries = (table & clusters).fetch() - print('Fetch time for {}: {}'.format( - table.__name__, time.time()-start_time)) + print( + "Fetch time for {}: {}".format(table.__name__, time.time() - start_time) + ) diff --git a/scripts/tests/patching.py b/scripts/tests/patching.py index 8aa9fd13..4007e511 100755 --- a/scripts/tests/patching.py +++ b/scripts/tests/patching.py @@ -1,18 +1,25 @@ - -from ibl_pipeline import subject, acquisition, ephys -from ibl_pipeline.job import patch import datetime +from ibl_pipeline import acquisition, ephys, subject +from ibl_pipeline.job import patch -if __name__ == '__main__': - sessions = acquisition.Session & ephys.DefaultCluster & 'session_lab not in ("cortexlab", "churchlandlab")' +if __name__ == "__main__": + sessions = ( + acquisition.Session + & ephys.DefaultCluster + & 'session_lab not in ("cortexlab", "churchlandlab")' + ) - for session in sessions.fetch('KEY'): - entry = (acquisition.Session*subject.Subject & session).fetch( - 'subject_uuid', 'session_start_time', - 'session_uuid', 'subject_nickname', as_dict=True) + for session in sessions.fetch("KEY"): + entry = (acquisition.Session * subject.Subject & session).fetch( + "subject_uuid", + "session_start_time", + "session_uuid", + "subject_nickname", + as_dict=True, + ) patch.Session.insert1( - dict(**entry[0], job_date=datetime.date(2020, 7, 10)), - skip_duplicates=True) + dict(**entry[0], job_date=datetime.date(2020, 7, 10)), skip_duplicates=True + ) patch.Run.populate(display_progress=True) diff --git a/scripts/tests/reaction_time_correction.py b/scripts/tests/reaction_time_correction.py index 29ba0927..478ed9c5 100755 --- a/scripts/tests/reaction_time_correction.py +++ b/scripts/tests/reaction_time_correction.py @@ -1,41 +1,36 @@ -''' +""" This script tests the modification on using go_cue_trigger_time for RT computation with stim_on_time is not available Shan Shen, 2019-11-20 -''' +""" -from ibl_pipeline import subject, acquisition, behavior +from ibl_pipeline import acquisition, behavior, subject from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.plotting import behavior as behavior_plotting - -if __name__ == '__main__': +if __name__ == "__main__": subj = subject.Subject & 'subject_nickname="SWC_018"' - print('Testing ReactionTime...') + print("Testing ReactionTime...") behavior_analyses.ReactionTime.populate(subj, display_progress=True) - print('Testing ReactionTimeContrastBlock...') - behavior_analyses.ReactionTimeContrastBlock.populate( - subj, display_progress=True) + print("Testing ReactionTimeContrastBlock...") + behavior_analyses.ReactionTimeContrastBlock.populate(subj, display_progress=True) - print('Testing plotting functions for SessionReactionTimeContrast and SessionReactionTimeTrialNumber...') - behavior_plotting.SessionReactionTimeContrast.populate( - subj, display_progress=True) + print( + "Testing plotting functions for SessionReactionTimeContrast and SessionReactionTimeTrialNumber..." + ) + behavior_plotting.SessionReactionTimeContrast.populate(subj, display_progress=True) behavior_plotting.SessionReactionTimeTrialNumber.populate( - subj, display_progress=True) - - print('Testing BehaviorSummaryByDate....') - behavior_analyses.BehavioralSummaryByDate.populate( - subj, display_progress=True) - - print('Testing plotting for BehavioralSummaryByDate...') - behavior_plotting.CumulativeSummary.populate( - subj, display_progress=True) - behavior_plotting.DatePsychCurve.populate( - subj, display_progress=True) - behavior_plotting.DateReactionTimeContrast.populate( - subj, display_progress=True) - behavior_plotting.DateReactionTimeTrialNumber.populate( - subj, display_progress=True) + subj, display_progress=True + ) + + print("Testing BehaviorSummaryByDate....") + behavior_analyses.BehavioralSummaryByDate.populate(subj, display_progress=True) + + print("Testing plotting for BehavioralSummaryByDate...") + behavior_plotting.CumulativeSummary.populate(subj, display_progress=True) + behavior_plotting.DatePsychCurve.populate(subj, display_progress=True) + behavior_plotting.DateReactionTimeContrast.populate(subj, display_progress=True) + behavior_plotting.DateReactionTimeTrialNumber.populate(subj, display_progress=True) diff --git a/scripts/updates/add_empty_entries_to_aligned_times.py b/scripts/updates/add_empty_entries_to_aligned_times.py index 04eeb6ab..38f6c080 100644 --- a/scripts/updates/add_empty_entries_to_aligned_times.py +++ b/scripts/updates/add_empty_entries_to_aligned_times.py @@ -1,9 +1,10 @@ +import datetime +from uuid import UUID -from ibl_pipeline import behavior, acquisition, ephys -from tqdm import tqdm import numpy as np -from uuid import UUID -import datetime +from tqdm import tqdm + +from ibl_pipeline import acquisition, behavior, ephys events = ephys.Event & 'event in ("feedback", "movement", "response", "stim on")' @@ -15,20 +16,28 @@ for event in events: - print('Inserting missing entries for {}...'.format(event['event'])) + print("Inserting missing entries for {}...".format(event["event"])) if ephys.AlignedTrialSpikes & event & clusters: - for cluster in tqdm(clusters.aggr( - ephys.AlignedTrialSpikes & event, - n_trials='count(trial_id)') & 'n_trials < {}'.format( - len(behavior.TrialSet.Trial & trial_set))): - trials_missing = (behavior.TrialSet.Trial & cluster) - \ - (ephys.AlignedTrialSpikes & cluster & event) - entries = (ephys.DefaultCluster.proj() * - trials_missing.proj() * - ephys.Event.proj() & event & cluster).fetch(as_dict=True) + for cluster in tqdm( + clusters.aggr( + ephys.AlignedTrialSpikes & event, n_trials="count(trial_id)" + ) + & "n_trials < {}".format(len(behavior.TrialSet.Trial & trial_set)) + ): + trials_missing = (behavior.TrialSet.Trial & cluster) - ( + ephys.AlignedTrialSpikes & cluster & event + ) + entries = ( + ephys.DefaultCluster.proj() + * trials_missing.proj() + * ephys.Event.proj() + & event + & cluster + ).fetch(as_dict=True) ephys.AlignedTrialSpikes.insert( [dict(**e, trial_spike_times=np.array([])) for e in entries], - skip_duplicates=True, allow_direct_insert=True + skip_duplicates=True, + allow_direct_insert=True, ) diff --git a/scripts/updates/add_level_graph_order.py b/scripts/updates/add_level_graph_order.py index 91c4a515..f6bd0f22 100755 --- a/scripts/updates/add_level_graph_order.py +++ b/scripts/updates/add_level_graph_order.py @@ -1,17 +1,15 @@ -from ibl_pipeline import reference -from ibl_pipeline.ingest import reference as reference_ingest import datajoint as dj from tqdm import tqdm +from ibl_pipeline import reference +from ibl_pipeline.ingest import reference as reference_ingest -if __name__ == '__main__': +if __name__ == "__main__": - for key in tqdm(reference.BrainRegion.fetch('KEY'), position=0): + for key in tqdm(reference.BrainRegion.fetch("KEY"), position=0): level, graph_order = (reference_ingest.BrainRegion & key).fetch1( - 'brain_region_level', 'graph_order') + "brain_region_level", "graph_order" + ) - dj.Table._update(reference.BrainRegion & key, - 'brain_region_level', - level) - dj.Table._update(reference.BrainRegion & key, - 'graph_order', graph_order) + dj.Table._update(reference.BrainRegion & key, "brain_region_level", level) + dj.Table._update(reference.BrainRegion & key, "graph_order", graph_order) diff --git a/scripts/updates/add_ts.py b/scripts/updates/add_ts.py index f0213cdc..94576815 100755 --- a/scripts/updates/add_ts.py +++ b/scripts/updates/add_ts.py @@ -1,27 +1,32 @@ -''' +""" This script add ts field to the tables. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import reference as reference_ingest -from ibl_pipeline.ingest import subject as subject_ingest -from ibl_pipeline.ingest import action as action_ingest +import tables_with_ts as tables + +from ibl_pipeline import acquisition, action, data, reference, subject from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import action as action_ingest from ibl_pipeline.ingest import data as data_ingest -from ibl_pipeline import reference, subject, action, acquisition, data +from ibl_pipeline.ingest import reference as reference_ingest +from ibl_pipeline.ingest import subject as subject_ingest from ibl_pipeline.utils import dj_alter_table -import tables_with_ts as tables def table_add_column(schema, table_name): - print('Altering' + table_name + '...') + print("Altering" + table_name + "...") table = getattr(schema, table_name) dj_alter_table.add_column( - table, table_name.lower()+'_ts', dtype='timestamp', - default_value='CURRENT_TIMESTAMP', use_keyword_default=True) + table, + table_name.lower() + "_ts", + dtype="timestamp", + default_value="CURRENT_TIMESTAMP", + use_keyword_default=True, + ) -if __name__ == '__main__': +if __name__ == "__main__": tables.init() diff --git a/scripts/updates/auto_deletion.py b/scripts/updates/auto_deletion.py index fae91949..062444e7 100755 --- a/scripts/updates/auto_deletion.py +++ b/scripts/updates/auto_deletion.py @@ -1,9 +1,9 @@ import datajoint as dj -import ibl_pipeline -from ibl_pipeline import update, reference, subject, behavior +import ibl_pipeline +from ibl_pipeline import behavior, reference, subject, update -schema = dj.schema('ibl_update') +schema = dj.schema("ibl_update") @schema @@ -16,17 +16,19 @@ class DeletionError(dj.Manual): """ -if __name__ == 'main': +if __name__ == "main": - records_for_deletion = update.DeletionRecord & 'deleted=0' & \ - [{'table': "ibl_pipeline.subject.Subject"}] + records_for_deletion = ( + update.DeletionRecord + & "deleted=0" + & [{"table": "ibl_pipeline.subject.Subject"}] + ) - for r in records_for_deletion.fetch('KEY'): + for r in records_for_deletion.fetch("KEY"): current_record = records_for_deletion & r - pk_dict, table_name = current_record.fetch1( - 'pk_dict', 'table') + pk_dict, table_name = current_record.fetch1("pk_dict", "table") table = eval(table_name) @@ -34,8 +36,8 @@ class DeletionError(dj.Manual): if not len(behavior.TrialSet & pk_dict): try: (table & pk_dict).delete() - dj.Table._update(current_record, 'deleted', True) - print(f'Deleted record {pk_dict}.') + dj.Table._update(current_record, "deleted", True) + print(f"Deleted record {pk_dict}.") except BaseException as e: if len(str(e)) > 255: @@ -43,7 +45,9 @@ class DeletionError(dj.Manual): else: error_msg = str(e) DeletionError.insert1( - dict(**current_record.fetch1(), - deletion_error_msg=error_msg)) + dict(**current_record.fetch1(), deletion_error_msg=error_msg) + ) else: - print(f'Skip deleting {pk_dict} because behavior data exists for this record') + print( + f"Skip deleting {pk_dict} because behavior data exists for this record" + ) diff --git a/scripts/updates/auto_updates.py b/scripts/updates/auto_updates.py index 242da040..0dd9dae3 100755 --- a/scripts/updates/auto_updates.py +++ b/scripts/updates/auto_updates.py @@ -1,9 +1,11 @@ +from uuid import UUID + import datajoint as dj + import ibl_pipeline -from ibl_pipeline import update, reference, subject -from uuid import UUID +from ibl_pipeline import reference, subject, update -schema = dj.schema('ibl_update') +schema = dj.schema("ibl_update") @schema @@ -17,28 +19,44 @@ class UpdateError(dj.Manual): def get_ts_attr(table): - return [attr for attr in table.heading.secondary_attributes if '_ts' in attr][0] + return [attr for attr in table.heading.secondary_attributes if "_ts" in attr][0] -if __name__ == '__main__': +if __name__ == "__main__": # get the unique records - records_for_updating = dj.U('table', 'attribute', 'pk_hash') & \ - (update.UpdateRecord & {'updated': False} & - [{'table': 'ibl_pipeline.subject.Subject'}]) + records_for_updating = dj.U("table", "attribute", "pk_hash") & ( + update.UpdateRecord + & {"updated": False} + & [{"table": "ibl_pipeline.subject.Subject"}] + ) updated_errors = [] - for r in records_for_updating.fetch('KEY'): + for r in records_for_updating.fetch("KEY"): current_record = records_for_updating & r q = current_record.aggr( - (update.UpdateRecord & {'updated': False}), update_ts='max(update_ts)') + (update.UpdateRecord & {"updated": False}), update_ts="max(update_ts)" + ) last_record = update.UpdateRecord & q - pk_dict, table, attribute, updated_value, original_value, update_ts = last_record.fetch1( - 'pk_dict', 'table', 'attribute', 'updated_value', 'original_value', 'update_ts') - - key = last_record.fetch1('KEY') + ( + pk_dict, + table, + attribute, + updated_value, + original_value, + update_ts, + ) = last_record.fetch1( + "pk_dict", + "table", + "attribute", + "updated_value", + "original_value", + "update_ts", + ) + + key = last_record.fetch1("KEY") table = eval(table) @@ -47,13 +65,15 @@ def get_ts_attr(table): dj.Table._update(table & pk_dict, attribute, updated_value) # update the updated status - dj.Table._update(last_record, 'updated', True) + dj.Table._update(last_record, "updated", True) # update the timestamp of the field in the original table attr_ts = get_ts_attr(table) dj.Table._update(table & pk_dict, attr_ts, update_ts) - print(f'Updated {pk_dict} field "{attribute}" from {original_value} to {updated_value}') + print( + f'Updated {pk_dict} field "{attribute}" from {original_value} to {updated_value}' + ) except BaseException as e: if len(str(e)) > 255: @@ -61,7 +81,7 @@ def get_ts_attr(table): else: error_msg = str(e) print(len(last_record)) - UpdateError.insert1( - dict(**key, - update_error_msg=error_msg)) - print(f'Fail to update {pk_dict} field "{attribute}" from {original_value} to {updated_value}') + UpdateError.insert1(dict(**key, update_error_msg=error_msg)) + print( + f'Fail to update {pk_dict} field "{attribute}" from {original_value} to {updated_value}' + ) diff --git a/scripts/updates/delete_and_repopulate_old_ephys_sessions.py b/scripts/updates/delete_and_repopulate_old_ephys_sessions.py index 8a1e2b08..cac782ff 100755 --- a/scripts/updates/delete_and_repopulate_old_ephys_sessions.py +++ b/scripts/updates/delete_and_repopulate_old_ephys_sessions.py @@ -1,21 +1,24 @@ -''' +""" This script delete the rasters and psth plots from the old ephys sessions, and repopulate, from most recent to oldest -''' +""" +import datetime +from uuid import UUID + import datajoint as dj +from tqdm import tqdm + from ibl_pipeline import ephys from ibl_pipeline.plotting import ephys as ephys_plotting -from tqdm import tqdm -from uuid import UUID -import datetime -if __name__ == '__main__': +if __name__ == "__main__": - keys = (ephys.CompleteClusterSession & - (ephys_plotting.RasterLinkS3 & 'session_start_time < "2019-12-07 16:00:00"')).fetch( - 'KEY', order_by='session_start_time desc') + keys = ( + ephys.CompleteClusterSession + & (ephys_plotting.RasterLinkS3 & 'session_start_time < "2019-12-07 16:00:00"') + ).fetch("KEY", order_by="session_start_time desc") # keys = \ # [{'subject_uuid': UUID('221b68e7-0014-46ae-b8af-308665d8b478'), @@ -27,29 +30,27 @@ for key in tqdm(keys, position=0): print(key) # delete tables - print('deleting entries from TrialSpikes cluster by cluster...') + print("deleting entries from TrialSpikes cluster by cluster...") # delete from TrialSpikes cluster by cluster - clusters = (ephys.Cluster & key).fetch('KEY') + clusters = (ephys.Cluster & key).fetch("KEY") for cluster in tqdm(clusters, position=0): (ephys.TrialSpikes & cluster).delete() - print('repopulating TrialSpikes...') - ephys.TrialSpikes.populate( - key, display_progress=True, - suppress_errors=True) + print("repopulating TrialSpikes...") + ephys.TrialSpikes.populate(key, display_progress=True, suppress_errors=True) - print('deleting entries from Raster...') + print("deleting entries from Raster...") (ephys_plotting.RasterLinkS3 & key).delete() - print('repopulating Raster...') + print("repopulating Raster...") ephys_plotting.RasterLinkS3.populate( - key, display_progress=True, - suppress_errors=True) + key, display_progress=True, suppress_errors=True + ) - print('deleting entries from Psth...') + print("deleting entries from Psth...") (ephys_plotting.PsthDataVarchar & key).delete() ephys_plotting.PsthDataVarchar.populate( - key, display_progress=True, - suppress_errors=True) + key, display_progress=True, suppress_errors=True + ) diff --git a/scripts/updates/delete_bad_aligned_spikes.py b/scripts/updates/delete_bad_aligned_spikes.py index 962edae1..060ea3de 100755 --- a/scripts/updates/delete_bad_aligned_spikes.py +++ b/scripts/updates/delete_bad_aligned_spikes.py @@ -1,13 +1,12 @@ import datajoint as dj -from ibl_pipeline import ephys from tqdm import tqdm +from ibl_pipeline import ephys -if __name__ == '__main__': +if __name__ == "__main__": - clusters = ephys.DefaultCluster & \ - (ephys.AlignedTrialSpikes & 'event="movement"') + clusters = ephys.DefaultCluster & (ephys.AlignedTrialSpikes & 'event="movement"') with dj.config(safemode=False): - for key in tqdm(clusters.fetch('KEY'), position=0): + for key in tqdm(clusters.fetch("KEY"), position=0): (ephys.AlignedTrialSpikes & 'event="movement"' & key).delete_quick() diff --git a/scripts/updates/delete_corrupted_sessions.py b/scripts/updates/delete_corrupted_sessions.py index 70468833..bb685c11 100755 --- a/scripts/updates/delete_corrupted_sessions.py +++ b/scripts/updates/delete_corrupted_sessions.py @@ -1,38 +1,36 @@ -import datajoint as dj -from ibl_pipeline import subject, acquisition, data, behavior -from ibl_pipeline.ingest import acquisition as acquisition_ingest -from ibl_pipeline.ingest import data as data_ingest -from ibl_pipeline.ingest import alyxraw import datetime -from oneibl.one import ONE -import numpy as np from uuid import UUID +import datajoint as dj +import numpy as np +from oneibl.one import ONE + +from ibl_pipeline import acquisition, behavior, data, subject +from ibl_pipeline.ingest import acquisition as acquisition_ingest +from ibl_pipeline.ingest import alyxraw +from ibl_pipeline.ingest import data as data_ingest -if __name__ == '__main__': +if __name__ == "__main__": with dj.config(safemode=False): - uuids = ((acquisition_ingest.Session - behavior.TrialSet.proj()) & - 'session_start_time > "2019-06-13"').fetch('session_uuid') + uuids = ( + (acquisition_ingest.Session - behavior.TrialSet.proj()) + & 'session_start_time > "2019-06-13"' + ).fetch("session_uuid") uuid_str = [str(uuid) for uuid in uuids] for uuid in uuid_str: - keys = (alyxraw.AlyxRaw.Field & 'fvalue="{}"'.format(uuid)).fetch('KEY') + keys = (alyxraw.AlyxRaw.Field & 'fvalue="{}"'.format(uuid)).fetch("KEY") (alyxraw.AlyxRaw & keys).delete() - (alyxraw.AlyxRaw & {'uuid': UUID(uuid)}).delete() + (alyxraw.AlyxRaw & {"uuid": UUID(uuid)}).delete() - if len(acquisition_ingest.Session & {'session_uuid': UUID(uuid)}): + if len(acquisition_ingest.Session & {"session_uuid": UUID(uuid)}): subj_uuid, session_start_time = ( - acquisition_ingest.Session & - {'session_uuid': UUID(uuid)}).fetch1( - 'subject_uuid', 'session_start_time' - ) + acquisition_ingest.Session & {"session_uuid": UUID(uuid)} + ).fetch1("subject_uuid", "session_start_time") else: continue - key = { - 'subject_uuid': subj_uuid, - 'session_start_time': session_start_time - } + key = {"subject_uuid": subj_uuid, "session_start_time": session_start_time} (acquisition_ingest.ChildSession & key).delete() (acquisition_ingest.SessionUser & key).delete() (acquisition_ingest.SessionProcedure & key).delete() diff --git a/scripts/updates/detect_updates.py b/scripts/updates/detect_updates.py index 426a42fd..e3226184 100755 --- a/scripts/updates/detect_updates.py +++ b/scripts/updates/detect_updates.py @@ -1,34 +1,33 @@ -''' +""" This script detects the updates and ingest the result into the table update.UpdateRecord -''' +""" import datajoint as dj +import numpy as np +import tables_for_updates as tables + +# import real tables as virtual module +from ibl_pipeline import acquisition, action, data, reference, subject # import updated tables -from ibl_pipeline.ingest import reference as reference_shadow -from ibl_pipeline.ingest import subject as subject_shadow +from ibl_pipeline.ingest import acquisition as acquisition_shadow from ibl_pipeline.ingest import action as action_shadow from ibl_pipeline.ingest import data as data_shadow -from ibl_pipeline.ingest import acquisition as acquisition_shadow - -# import real tables as virtual module -from ibl_pipeline import reference, subject, action, acquisition, data - +from ibl_pipeline.ingest import reference as reference_shadow +from ibl_pipeline.ingest import subject as subject_shadow from ibl_pipeline.utils import dj_compare_table -import numpy as np -import tables_for_updates as tables - -if __name__ == '__main__': +if __name__ == "__main__": tables.init() schemas = [reference, subject, action, acquisition, data] - schemas_shadow = [reference_shadow, - subject_shadow, - action_shadow, - acquisition_shadow, - data_shadow - ] + schemas_shadow = [ + reference_shadow, + subject_shadow, + action_shadow, + acquisition_shadow, + data_shadow, + ] tablenames = [ tables.REF_TABLES, tables.SUBJECT_TABLES, @@ -37,10 +36,11 @@ tables.DATA_TABLES, ] - tablepairs = {t: (getattr(s_src, t), getattr(s_dest, t)) - for tablename, s_src, s_dest - in zip(tablenames, schemas_shadow, schemas) - for t in tablename} + tablepairs = { + t: (getattr(s_src, t), getattr(s_dest, t)) + for tablename, s_src, s_dest in zip(tablenames, schemas_shadow, schemas) + for t in tablename + } tablenames = np.hstack(tablenames) dj_compare_table.diff(tablenames, tablepairs) diff --git a/scripts/updates/detect_updates_subjects.py b/scripts/updates/detect_updates_subjects.py index deb4d77a..05af7347 100755 --- a/scripts/updates/detect_updates_subjects.py +++ b/scripts/updates/detect_updates_subjects.py @@ -1,34 +1,33 @@ -''' +""" This script detects the updates and ingest the result into the table update.UpdateRecord -''' +""" import datajoint as dj +import numpy as np +import tables_for_updates as tables + +# import real tables as virtual module +from ibl_pipeline import acquisition, action, data, reference, subject # import updated tables -from ibl_pipeline.ingest import reference as reference_shadow -from ibl_pipeline.ingest import subject as subject_shadow +from ibl_pipeline.ingest import acquisition as acquisition_shadow from ibl_pipeline.ingest import action as action_shadow from ibl_pipeline.ingest import data as data_shadow -from ibl_pipeline.ingest import acquisition as acquisition_shadow - -# import real tables as virtual module -from ibl_pipeline import reference, subject, action, acquisition, data - +from ibl_pipeline.ingest import reference as reference_shadow +from ibl_pipeline.ingest import subject as subject_shadow from ibl_pipeline.utils import dj_compare_table -import numpy as np -import tables_for_updates as tables - -if __name__ == '__main__': +if __name__ == "__main__": tables.init() schemas = [reference, subject] - schemas_shadow = [reference_shadow, - subject_shadow, - # action_shadow, - # acquisition_shadow, - # data_shadow - ] + schemas_shadow = [ + reference_shadow, + subject_shadow, + # action_shadow, + # acquisition_shadow, + # data_shadow + ] tablenames = [ tables.REF_TABLES, tables.SUBJECT_TABLES, @@ -37,10 +36,11 @@ # tables.DATA_TABLES, ] - tablepairs = {t: (getattr(s_src, t), getattr(s_dest, t)) - for tablename, s_src, s_dest - in zip(tablenames, schemas_shadow, schemas) - for t in tablename} + tablepairs = { + t: (getattr(s_src, t), getattr(s_dest, t)) + for tablename, s_src, s_dest in zip(tablenames, schemas_shadow, schemas) + for t in tablename + } tablenames = np.hstack(tablenames) dj_compare_table.diff(tablenames, tablepairs) diff --git a/scripts/updates/drop_alyx_raw.py b/scripts/updates/drop_alyx_raw.py index 5396e7b9..f28c66c7 100755 --- a/scripts/updates/drop_alyx_raw.py +++ b/scripts/updates/drop_alyx_raw.py @@ -1,16 +1,15 @@ import datajoint as dj -from ibl_pipeline.ingest import alyxraw, reference, subject, \ - action, acquisition, data +from ibl_pipeline.ingest import acquisition, action, alyxraw, data, reference, subject with dj.config(safemode=False): # delete alyxraw for data.filerecord if exists = 0 - print('Deleting all alyx raw...') + print("Deleting all alyx raw...") alyxraw.AlyxRaw.delete() # delete shadow membership tables - print('Deleting membership tables...') + print("Deleting membership tables...") # reference tables reference.ProjectLabMember.delete() diff --git a/scripts/updates/ingest_alyx_raw.py b/scripts/updates/ingest_alyx_raw.py index ce4f8e23..318e7617 100755 --- a/scripts/updates/ingest_alyx_raw.py +++ b/scripts/updates/ingest_alyx_raw.py @@ -1,17 +1,19 @@ -''' +""" This script load the json dump and insert the tuples into the alyxraw table. -''' +""" -import datajoint as dj +import collections import json import logging import math -import collections import os.path as path -from ibl_pipeline.ingest import alyxraw, QueryBuffer import sys import uuid +import datajoint as dj + +from ibl_pipeline.ingest import QueryBuffer, alyxraw + logger = logging.getLogger(__name__) dir_name = path.dirname(__file__) @@ -19,17 +21,19 @@ if len(sys.argv) < 2: # no arguments given # if no argument given, assume a canonical file location and name - filename = path.join('/data', 'alyxfull.json') + filename = path.join("/data", "alyxfull.json") else: filename = path.join(dir_name, sys.argv[1]) -with open(filename, 'r') as fid: +with open(filename, "r") as fid: keys = json.load(fid) # remove invalid uuid from unused tables -keys = [key for key in keys - if key['model'] not in - ['auth.group', 'sessions.session', 'authtoken.token']] +keys = [ + key + for key in keys + if key["model"] not in ["auth.group", "sessions.session", "authtoken.token"] +] # use insert buffer to speed up the insersion process ib_main = QueryBuffer(alyxraw.AlyxRaw) @@ -37,54 +41,61 @@ # insert into AlyxRaw table for key in keys: - ib_main.add_to_queue1(dict(uuid=uuid.UUID(key['pk']), model=key['model'])) + ib_main.add_to_queue1(dict(uuid=uuid.UUID(key["pk"]), model=key["model"])) if ib_main.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw tuples.') + logger.debug("Inserted 10000 raw tuples.") if ib_main.flush_insert(skip_duplicates=True): - logger.debug('Inserted remaining raw tuples') + logger.debug("Inserted remaining raw tuples") # insert into the part table AlyxRaw.Field for ikey, key in enumerate(keys): try: - key_field = dict(uuid=uuid.UUID(key['pk'])) - for field_name, field_value in key['fields'].items(): + key_field = dict(uuid=uuid.UUID(key["pk"])) + for field_name, field_value in key["fields"].items(): key_field = dict(key_field, fname=field_name) - if field_name == 'json' and field_value is not None: + if field_name == "json" and field_value is not None: - key_field['value_idx'] = 0 - key_field['fvalue'] = json.dumps(field_value) - if len(key_field['fvalue']) < 10000: + key_field["value_idx"] = 0 + key_field["fvalue"] = json.dumps(field_value) + if len(key_field["fvalue"]) < 10000: ib_part.add_to_queue1(key_field) else: continue - if field_name == 'narrative' and field_value is not None: + if field_name == "narrative" and field_value is not None: # filter out emoji emoji_pattern = re.compile( "[" - u"\U0001F600-\U0001F64F" # emoticons - u"\U0001F300-\U0001F5FF" # symbols & pictographs - u"\U0001F680-\U0001F6FF" # transport & map symbols - u"\U0001F1E0-\U0001F1FF" # flags (iOS) - u"\U00002702-\U000027B0" - u"\U000024C2-\U0001F251" - "]+", flags=re.UNICODE) - - key_field['value_idx'] = 0 - key_field['fvalue'] = emoji_pattern.sub(r'', field_value) - - elif field_value is None or field_value == '' or field_value == [] or \ - (isinstance(field_value, float) and math.isnan(field_value)): - key_field['value_idx'] = 0 - key_field['fvalue'] = 'None' + "\U0001F600-\U0001F64F" # emoticons + "\U0001F300-\U0001F5FF" # symbols & pictographs + "\U0001F680-\U0001F6FF" # transport & map symbols + "\U0001F1E0-\U0001F1FF" # flags (iOS) + "\U00002702-\U000027B0" + "\U000024C2-\U0001F251" + "]+", + flags=re.UNICODE, + ) + + key_field["value_idx"] = 0 + key_field["fvalue"] = emoji_pattern.sub(r"", field_value) + + elif ( + field_value is None + or field_value == "" + or field_value == [] + or (isinstance(field_value, float) and math.isnan(field_value)) + ): + key_field["value_idx"] = 0 + key_field["fvalue"] = "None" ib_part.add_to_queue1(key_field) - elif type(field_value) is list and \ - (type(field_value[0]) is dict or type(field_value[0]) is str): + elif type(field_value) is list and ( + type(field_value[0]) is dict or type(field_value[0]) is str + ): for value_idx, value in enumerate(field_value): - key_field['value_idx'] = value_idx - key_field['fvalue'] = str(value) + key_field["value_idx"] = value_idx + key_field["fvalue"] = str(value) ib_part.add_to_queue1(key_field) # elif isinstance(field_value, collections.Sequence) and \ # isinstance(field_value, (collections.Mapping, str)): @@ -92,15 +103,15 @@ # fvalue=str(value)) # for value_idx, value in enumerate(field_value)) else: - key_field['value_idx'] = 0 - key_field['fvalue'] = str(field_value) + key_field["value_idx"] = 0 + key_field["fvalue"] = str(field_value) ib_part.add_to_queue1(key_field) if ib_part.flush_insert(skip_duplicates=True, chunksz=10000): - logger.debug('Inserted 10000 raw field tuples') + logger.debug("Inserted 10000 raw field tuples") except Exception as e: - print('Problematic entry:{}'.format(ikey)) + print("Problematic entry:{}".format(ikey)) raise if ib_part.flush_insert(skip_duplicates=True): - logger.debug('Inserted all remaining raw field tuples') + logger.debug("Inserted all remaining raw field tuples") diff --git a/scripts/updates/ingest_alyx_shadow_updates.py b/scripts/updates/ingest_alyx_shadow_updates.py index 76733808..9df4a57a 100755 --- a/scripts/updates/ingest_alyx_shadow_updates.py +++ b/scripts/updates/ingest_alyx_shadow_updates.py @@ -1,13 +1,13 @@ -''' +""" This script inserts tuples in the alyxraw table into the shadow tables \ via auto-populating, to detect the latest values. -''' +""" import datajoint as dj -from ibl_pipeline.ingest import alyxraw, reference, subject, action, acquisition, data +from ibl_pipeline.ingest import acquisition, action, alyxraw, data, reference, subject -if __name__ == '__main__': +if __name__ == "__main__": # reference tables reference.Lab.populate(suppress_errors=True) reference.LabMember.populate(suppress_errors=True) diff --git a/scripts/updates/repopulate_prob_left.py b/scripts/updates/repopulate_prob_left.py index 4544b0d7..e8105921 100755 --- a/scripts/updates/repopulate_prob_left.py +++ b/scripts/updates/repopulate_prob_left.py @@ -1,132 +1,200 @@ -''' +""" This script repopulates the data sets where probLeft has a problem. Shan Shen, 2020-03-23 -''' +""" -from ibl_pipeline import subject, acquisition, behavior, ephys -from ibl_pipeline.analyses import behavior as behavior_analyses -from ibl_pipeline.plotting import behavior as behavior_plotting -from ibl_pipeline.plotting import ephys as ephys_plotting -from uuid import UUID import datetime +from uuid import UUID + import datajoint as dj from tqdm import tqdm +from ibl_pipeline import acquisition, behavior, ephys, subject +from ibl_pipeline.analyses import behavior as behavior_analyses +from ibl_pipeline.plotting import behavior as behavior_plotting +from ibl_pipeline.plotting import ephys as ephys_plotting -if __name__ == '__main__': +if __name__ == "__main__": kargs = dict(suppress_errors=True, display_progress=True) keys = [ - {'subject_uuid': UUID('18a54f60-534b-4ed5-8bda-b434079b8ab8'), - 'session_start_time': datetime.datetime(2019, 12, 4, 12, 34, 21), - 'session_date': datetime.date(2019, 12, 4)}, - {'subject_uuid': UUID('18a54f60-534b-4ed5-8bda-b434079b8ab8'), - 'session_start_time': datetime.datetime(2019, 12, 5, 16, 28, 54), - 'session_date': datetime.date(2019, 12, 5)}, - {'subject_uuid': UUID('18a54f60-534b-4ed5-8bda-b434079b8ab8'), - 'session_start_time': datetime.datetime(2019, 12, 6, 18, 30, 56), - 'session_date': datetime.date(2019, 12, 6)}, - {'subject_uuid': UUID('18a54f60-534b-4ed5-8bda-b434079b8ab8'), - 'session_start_time': datetime.datetime(2019, 12, 7, 16, 19, 38), - 'session_date': datetime.date(2019, 12, 7)}, - {'subject_uuid': UUID('354e6122-de4a-4945-bafd-d46df65768f6'), - 'session_start_time': datetime.datetime(2019, 12, 4, 15, 54, 19), - 'session_date': datetime.date(2019, 12, 4)}, - {'subject_uuid': UUID('354e6122-de4a-4945-bafd-d46df65768f6'), - 'session_start_time': datetime.datetime(2019, 12, 5, 18, 57, 56), - 'session_date': datetime.date(2019, 12, 5)}, - {'subject_uuid': UUID('354e6122-de4a-4945-bafd-d46df65768f6'), - 'session_start_time': datetime.datetime(2019, 12, 6, 15, 36, 44), - 'session_date': datetime.date(2019, 12, 6)}, - {'subject_uuid': UUID('354e6122-de4a-4945-bafd-d46df65768f6'), - 'session_start_time': datetime.datetime(2019, 12, 8, 20, 1, 23), - 'session_date': datetime.date(2019, 12, 8)}, - {'subject_uuid': UUID('354e6122-de4a-4945-bafd-d46df65768f6'), - 'session_start_time': datetime.datetime(2019, 12, 9, 17, 31, 24), - 'session_date': datetime.date(2019, 12, 9)}, - {'subject_uuid': UUID('4e4b8689-cfc7-40b1-986a-b8d642920c98'), - 'session_start_time': datetime.datetime(2019, 11, 26, 12, 0, 15), - 'session_date': datetime.date(2019, 11, 26)}, - {'subject_uuid': UUID('4eb8afda-a4d9-4314-8956-cdf773223fe5'), - 'session_start_time': datetime.datetime(2019, 12, 3, 11, 30, 35), - 'session_date': datetime.date(2019, 12, 3)}, - {'subject_uuid': UUID('4eb8afda-a4d9-4314-8956-cdf773223fe5'), - 'session_start_time': datetime.datetime(2019, 12, 4, 11, 12, 38), - 'session_date': datetime.date(2019, 12, 4)}, - {'subject_uuid': UUID('4eb8afda-a4d9-4314-8956-cdf773223fe5'), - 'session_start_time': datetime.datetime(2019, 12, 5, 10, 5, 36), - 'session_date': datetime.date(2019, 12, 5)}, - {'subject_uuid': UUID('4eb8afda-a4d9-4314-8956-cdf773223fe5'), - 'session_start_time': datetime.datetime(2019, 12, 6, 10, 7, 39), - 'session_date': datetime.date(2019, 12, 6)}, - {'subject_uuid': UUID('7d334e82-1270-4346-86c2-4a8b7530946d'), - 'session_start_time': datetime.datetime(2019, 11, 25, 22, 53, 11), - 'session_date': datetime.date(2019, 11, 25)}, - {'subject_uuid': UUID('7d334e82-1270-4346-86c2-4a8b7530946d'), - 'session_start_time': datetime.datetime(2019, 11, 26, 18, 34, 56), - 'session_date': datetime.date(2019, 11, 26)}, - {'subject_uuid': UUID('7dfc4f76-3ab2-4d2b-9e01-f8c76e47f770'), - 'session_start_time': datetime.datetime(2019, 12, 11, 11, 35, 51), - 'session_date': datetime.date(2019, 12, 11)}, - {'subject_uuid': UUID('892316ab-346c-4592-a4ea-ee5e668fbdaa'), - 'session_start_time': datetime.datetime(2019, 11, 26, 17, 57, 15), - 'session_date': datetime.date(2019, 11, 26)}, - {'subject_uuid': UUID('9bebfe0b-082e-4d66-aca7-fae29317f708'), - 'session_start_time': datetime.datetime(2020, 1, 8, 15, 52, 42), - 'session_date': datetime.date(2020, 1, 8)}, - {'subject_uuid': UUID('9bebfe0b-082e-4d66-aca7-fae29317f708'), - 'session_start_time': datetime.datetime(2020, 1, 9, 15, 43, 58), - 'session_date': datetime.date(2020, 1, 9)}, - {'subject_uuid': UUID('9bebfe0b-082e-4d66-aca7-fae29317f708'), - 'session_start_time': datetime.datetime(2020, 1, 10, 14, 11, 34), - 'session_date': datetime.date(2020, 1, 10)}, - {'subject_uuid': UUID('9bebfe0b-082e-4d66-aca7-fae29317f708'), - 'session_start_time': datetime.datetime(2020, 1, 11, 13, 42, 47), - 'session_date': datetime.date(2020, 1, 11)}, - {'subject_uuid': UUID('b57c1934-f9d1-4dc4-a474-e2cb4acdf918'), - 'session_start_time': datetime.datetime(2019, 12, 8, 21, 58, 58), - 'session_date': datetime.date(2019, 12, 8)}, - {'subject_uuid': UUID('b57c1934-f9d1-4dc4-a474-e2cb4acdf918'), - 'session_start_time': datetime.datetime(2019, 12, 9, 19, 35, 10), - 'session_date': datetime.date(2019, 12, 9)}, - {'subject_uuid': UUID('b57c1934-f9d1-4dc4-a474-e2cb4acdf918'), - 'session_start_time': datetime.datetime(2019, 12, 10, 14, 40, 58), - 'session_date': datetime.date(2019, 12, 10)}, - {'subject_uuid': UUID('c00e0ffb-b8c6-4953-b9e7-975a3f4fd989'), - 'session_start_time': datetime.datetime(2019, 12, 4, 18, 33, 48), - 'session_date': datetime.date(2019, 12, 4)}, - {'subject_uuid': UUID('c25a02e4-d912-4c7e-8381-5cc1cec06faf'), - 'session_start_time': datetime.datetime(2019, 12, 10, 18, 32, 56), - 'session_date': datetime.date(2019, 12, 10)}, - {'subject_uuid': UUID('c25a02e4-d912-4c7e-8381-5cc1cec06faf'), - 'session_start_time': datetime.datetime(2019, 12, 11, 17, 30, 53), - 'session_date': datetime.date(2019, 12, 11)}, - {'subject_uuid': UUID('c25a02e4-d912-4c7e-8381-5cc1cec06faf'), - 'session_start_time': datetime.datetime(2019, 12, 15, 19, 51, 40), - 'session_date': datetime.date(2019, 12, 15)}, - {'subject_uuid': UUID('c6e8125f-b6c7-4349-b74d-32e8bd606f63'), - 'session_start_time': datetime.datetime(2019, 12, 6, 12, 14, 53), - 'session_date': datetime.date(2019, 12, 6)}, - {'subject_uuid': UUID('c6e8125f-b6c7-4349-b74d-32e8bd606f63'), - 'session_start_time': datetime.datetime(2019, 12, 7, 14, 15, 47), - 'session_date': datetime.date(2019, 12, 7)}, - {'subject_uuid': UUID('c6e8125f-b6c7-4349-b74d-32e8bd606f63'), - 'session_start_time': datetime.datetime(2019, 12, 8, 17, 40, 34), - 'session_date': datetime.date(2019, 12, 8)}, - {'subject_uuid': UUID('c6e8125f-b6c7-4349-b74d-32e8bd606f63'), - 'session_start_time': datetime.datetime(2019, 12, 10, 16, 44, 13), - 'session_date': datetime.date(2019, 12, 10)}] + { + "subject_uuid": UUID("18a54f60-534b-4ed5-8bda-b434079b8ab8"), + "session_start_time": datetime.datetime(2019, 12, 4, 12, 34, 21), + "session_date": datetime.date(2019, 12, 4), + }, + { + "subject_uuid": UUID("18a54f60-534b-4ed5-8bda-b434079b8ab8"), + "session_start_time": datetime.datetime(2019, 12, 5, 16, 28, 54), + "session_date": datetime.date(2019, 12, 5), + }, + { + "subject_uuid": UUID("18a54f60-534b-4ed5-8bda-b434079b8ab8"), + "session_start_time": datetime.datetime(2019, 12, 6, 18, 30, 56), + "session_date": datetime.date(2019, 12, 6), + }, + { + "subject_uuid": UUID("18a54f60-534b-4ed5-8bda-b434079b8ab8"), + "session_start_time": datetime.datetime(2019, 12, 7, 16, 19, 38), + "session_date": datetime.date(2019, 12, 7), + }, + { + "subject_uuid": UUID("354e6122-de4a-4945-bafd-d46df65768f6"), + "session_start_time": datetime.datetime(2019, 12, 4, 15, 54, 19), + "session_date": datetime.date(2019, 12, 4), + }, + { + "subject_uuid": UUID("354e6122-de4a-4945-bafd-d46df65768f6"), + "session_start_time": datetime.datetime(2019, 12, 5, 18, 57, 56), + "session_date": datetime.date(2019, 12, 5), + }, + { + "subject_uuid": UUID("354e6122-de4a-4945-bafd-d46df65768f6"), + "session_start_time": datetime.datetime(2019, 12, 6, 15, 36, 44), + "session_date": datetime.date(2019, 12, 6), + }, + { + "subject_uuid": UUID("354e6122-de4a-4945-bafd-d46df65768f6"), + "session_start_time": datetime.datetime(2019, 12, 8, 20, 1, 23), + "session_date": datetime.date(2019, 12, 8), + }, + { + "subject_uuid": UUID("354e6122-de4a-4945-bafd-d46df65768f6"), + "session_start_time": datetime.datetime(2019, 12, 9, 17, 31, 24), + "session_date": datetime.date(2019, 12, 9), + }, + { + "subject_uuid": UUID("4e4b8689-cfc7-40b1-986a-b8d642920c98"), + "session_start_time": datetime.datetime(2019, 11, 26, 12, 0, 15), + "session_date": datetime.date(2019, 11, 26), + }, + { + "subject_uuid": UUID("4eb8afda-a4d9-4314-8956-cdf773223fe5"), + "session_start_time": datetime.datetime(2019, 12, 3, 11, 30, 35), + "session_date": datetime.date(2019, 12, 3), + }, + { + "subject_uuid": UUID("4eb8afda-a4d9-4314-8956-cdf773223fe5"), + "session_start_time": datetime.datetime(2019, 12, 4, 11, 12, 38), + "session_date": datetime.date(2019, 12, 4), + }, + { + "subject_uuid": UUID("4eb8afda-a4d9-4314-8956-cdf773223fe5"), + "session_start_time": datetime.datetime(2019, 12, 5, 10, 5, 36), + "session_date": datetime.date(2019, 12, 5), + }, + { + "subject_uuid": UUID("4eb8afda-a4d9-4314-8956-cdf773223fe5"), + "session_start_time": datetime.datetime(2019, 12, 6, 10, 7, 39), + "session_date": datetime.date(2019, 12, 6), + }, + { + "subject_uuid": UUID("7d334e82-1270-4346-86c2-4a8b7530946d"), + "session_start_time": datetime.datetime(2019, 11, 25, 22, 53, 11), + "session_date": datetime.date(2019, 11, 25), + }, + { + "subject_uuid": UUID("7d334e82-1270-4346-86c2-4a8b7530946d"), + "session_start_time": datetime.datetime(2019, 11, 26, 18, 34, 56), + "session_date": datetime.date(2019, 11, 26), + }, + { + "subject_uuid": UUID("7dfc4f76-3ab2-4d2b-9e01-f8c76e47f770"), + "session_start_time": datetime.datetime(2019, 12, 11, 11, 35, 51), + "session_date": datetime.date(2019, 12, 11), + }, + { + "subject_uuid": UUID("892316ab-346c-4592-a4ea-ee5e668fbdaa"), + "session_start_time": datetime.datetime(2019, 11, 26, 17, 57, 15), + "session_date": datetime.date(2019, 11, 26), + }, + { + "subject_uuid": UUID("9bebfe0b-082e-4d66-aca7-fae29317f708"), + "session_start_time": datetime.datetime(2020, 1, 8, 15, 52, 42), + "session_date": datetime.date(2020, 1, 8), + }, + { + "subject_uuid": UUID("9bebfe0b-082e-4d66-aca7-fae29317f708"), + "session_start_time": datetime.datetime(2020, 1, 9, 15, 43, 58), + "session_date": datetime.date(2020, 1, 9), + }, + { + "subject_uuid": UUID("9bebfe0b-082e-4d66-aca7-fae29317f708"), + "session_start_time": datetime.datetime(2020, 1, 10, 14, 11, 34), + "session_date": datetime.date(2020, 1, 10), + }, + { + "subject_uuid": UUID("9bebfe0b-082e-4d66-aca7-fae29317f708"), + "session_start_time": datetime.datetime(2020, 1, 11, 13, 42, 47), + "session_date": datetime.date(2020, 1, 11), + }, + { + "subject_uuid": UUID("b57c1934-f9d1-4dc4-a474-e2cb4acdf918"), + "session_start_time": datetime.datetime(2019, 12, 8, 21, 58, 58), + "session_date": datetime.date(2019, 12, 8), + }, + { + "subject_uuid": UUID("b57c1934-f9d1-4dc4-a474-e2cb4acdf918"), + "session_start_time": datetime.datetime(2019, 12, 9, 19, 35, 10), + "session_date": datetime.date(2019, 12, 9), + }, + { + "subject_uuid": UUID("b57c1934-f9d1-4dc4-a474-e2cb4acdf918"), + "session_start_time": datetime.datetime(2019, 12, 10, 14, 40, 58), + "session_date": datetime.date(2019, 12, 10), + }, + { + "subject_uuid": UUID("c00e0ffb-b8c6-4953-b9e7-975a3f4fd989"), + "session_start_time": datetime.datetime(2019, 12, 4, 18, 33, 48), + "session_date": datetime.date(2019, 12, 4), + }, + { + "subject_uuid": UUID("c25a02e4-d912-4c7e-8381-5cc1cec06faf"), + "session_start_time": datetime.datetime(2019, 12, 10, 18, 32, 56), + "session_date": datetime.date(2019, 12, 10), + }, + { + "subject_uuid": UUID("c25a02e4-d912-4c7e-8381-5cc1cec06faf"), + "session_start_time": datetime.datetime(2019, 12, 11, 17, 30, 53), + "session_date": datetime.date(2019, 12, 11), + }, + { + "subject_uuid": UUID("c25a02e4-d912-4c7e-8381-5cc1cec06faf"), + "session_start_time": datetime.datetime(2019, 12, 15, 19, 51, 40), + "session_date": datetime.date(2019, 12, 15), + }, + { + "subject_uuid": UUID("c6e8125f-b6c7-4349-b74d-32e8bd606f63"), + "session_start_time": datetime.datetime(2019, 12, 6, 12, 14, 53), + "session_date": datetime.date(2019, 12, 6), + }, + { + "subject_uuid": UUID("c6e8125f-b6c7-4349-b74d-32e8bd606f63"), + "session_start_time": datetime.datetime(2019, 12, 7, 14, 15, 47), + "session_date": datetime.date(2019, 12, 7), + }, + { + "subject_uuid": UUID("c6e8125f-b6c7-4349-b74d-32e8bd606f63"), + "session_start_time": datetime.datetime(2019, 12, 8, 17, 40, 34), + "session_date": datetime.date(2019, 12, 8), + }, + { + "subject_uuid": UUID("c6e8125f-b6c7-4349-b74d-32e8bd606f63"), + "session_start_time": datetime.datetime(2019, 12, 10, 16, 44, 13), + "session_date": datetime.date(2019, 12, 10), + }, + ] - au_behavior = dj.create_virtual_module('au_behavior', 'user_anneurai_behavior') + au_behavior = dj.create_virtual_module("au_behavior", "user_anneurai_behavior") with dj.config(safemode=False): for key in tqdm(keys, position=0): - print('----------- Deleting AlignedTrialSpikes ---------') + print("----------- Deleting AlignedTrialSpikes ---------") (ephys.AlignedTrialSpikes & key).delete_quick() - print('---- Deleting TrialSet downstream plotting tables ----') + print("---- Deleting TrialSet downstream plotting tables ----") (behavior_plotting.DateReactionTimeTrialNumber & key).delete_quick() (behavior_plotting.DateReactionTimeContrast & key).delete_quick() (behavior_plotting.DateReactionTimeContrast & key).delete_quick() @@ -135,7 +203,7 @@ (behavior_plotting.SessionReactionTimeContrast & key).delete_quick() (behavior_plotting.SessionPsychCurve & key).delete_quick() - print('---- Deleting TrialSet downstream analyses tables ----') + print("---- Deleting TrialSet downstream analyses tables ----") (behavior_analyses.ReactionTimeContrastBlock & key).delete_quick() (behavior_analyses.ReactionTime & key).delete_quick() (behavior_analyses.BehavioralSummaryByDate & key).delete() @@ -143,39 +211,39 @@ (behavior_analyses.PsychResultsBlock & key).delete_quick() (behavior_analyses.PsychResults & key).delete_quick() - print('---- Deleting TrialSet main tables ----') + print("---- Deleting TrialSet main tables ----") (behavior.AmbientSensorData & key).delete_quick() (au_behavior.ChoiceHistory & key).delete_quick() (behavior.TrialSet.Trial & key).delete_quick() (behavior.TrialSet & key).delete_quick() - print('----------- Populating TrialSet ------------') + print("----------- Populating TrialSet ------------") behavior.TrialSet.populate(key, **kargs) - print('----------- Populating Ambient Sensor data------------') + print("----------- Populating Ambient Sensor data------------") behavior.AmbientSensorData.populate(key, **kargs) - print('----------- Populating PsychResults ------------') + print("----------- Populating PsychResults ------------") behavior_analyses.PsychResults.populate(key, **kargs) - print('--------- Populating PsychResultsBlock ---------') + print("--------- Populating PsychResultsBlock ---------") behavior_analyses.PsychResultsBlock.populate(key, **kargs) - print('----------- Populating ReactionTime ------------') + print("----------- Populating ReactionTime ------------") behavior_analyses.ReactionTime.populate(key, **kargs) - print('----- Populating ReactionTimeContrastBlock -----') + print("----- Populating ReactionTimeContrastBlock -----") behavior_analyses.ReactionTimeContrastBlock.populate(key, **kargs) - print('------- Populating SessionTrainingStatus -------') + print("------- Populating SessionTrainingStatus -------") behavior_analyses.SessionTrainingStatus.populate(key, **kargs) - print('------ Populating BehavioralSummaryByDate ------') + print("------ Populating BehavioralSummaryByDate ------") behavior_analyses.BehavioralSummaryByDate.populate(key, **kargs) - print('------------ Populating plotting.SessionPsychCurve -----------') + print("------------ Populating plotting.SessionPsychCurve -----------") behavior_plotting.SessionPsychCurve.populate(key, **kargs) - print('------ Populating plotting.SessionReactionTimeContrast -------') + print("------ Populating plotting.SessionReactionTimeContrast -------") behavior_plotting.SessionReactionTimeContrast.populate(key, **kargs) - print('---- Populating plotting.SessionReactionTimeTrialNumber ------') + print("---- Populating plotting.SessionReactionTimeTrialNumber ------") behavior_plotting.SessionReactionTimeTrialNumber.populate(key, **kargs) - print('--------------- Populating plotting.DatePsychCurve -----------') + print("--------------- Populating plotting.DatePsychCurve -----------") behavior_plotting.DatePsychCurve.populate(key, **kargs) - print('-------- Populating plotting.DateReactionTimeContrast --------') + print("-------- Populating plotting.DateReactionTimeContrast --------") behavior_plotting.DateReactionTimeContrast.populate(key, **kargs) - print('------ Populating plotting.DateReactionTimeTrialNumber -------') + print("------ Populating plotting.DateReactionTimeTrialNumber -------") behavior_plotting.DateReactionTimeTrialNumber.populate(key, **kargs) - print('--------------- Populating AlignedTrial -----------') + print("--------------- Populating AlignedTrial -----------") ephys.AlignedTrialSpikes.populate(key, **kargs) diff --git a/scripts/updates/tables_for_updates.py b/scripts/updates/tables_for_updates.py index 498f5f05..452057de 100755 --- a/scripts/updates/tables_for_updates.py +++ b/scripts/updates/tables_for_updates.py @@ -1,67 +1,59 @@ - -''' +""" Create global variables for table names -''' +""" def init(): - global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, \ - ACQUISITION_TABLES, DATA_TABLES + global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, ACQUISITION_TABLES, DATA_TABLES - REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabLocation', - 'Project' - ) + REF_TABLES = ("Lab", "LabMember", "LabLocation", "Project") SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'BreedingPair', - 'Litter', - 'LitterSubject', - 'Weaning', - 'Death', - 'Caging', - 'GenotypeTest', - 'Zygosity', - 'Implant' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "BreedingPair", + "Litter", + "LitterSubject", + "Weaning", + "Death", + "Caging", + "GenotypeTest", + "Zygosity", + "Implant", ) ACTION_TABLES = ( - 'ProcedureType', - 'Weighing', - 'WaterType', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', - 'OtherAction', - 'OtherActionUser', - 'OtherActionProcedure' - + "ProcedureType", + "Weighing", + "WaterType", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", + "OtherAction", + "OtherActionUser", + "OtherActionProcedure", ) ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", ) DATA_TABLES = ( - 'DataFormat', - 'DataRepositoryType', - 'DataRepository', - 'ProjectRepository', - 'DataSetType', + "DataFormat", + "DataRepositoryType", + "DataRepository", + "ProjectRepository", + "DataSetType", ) diff --git a/scripts/updates/tables_with_ts.py b/scripts/updates/tables_with_ts.py index 9690ac68..b0be7f34 100755 --- a/scripts/updates/tables_with_ts.py +++ b/scripts/updates/tables_with_ts.py @@ -1,77 +1,75 @@ -''' +""" Create global variables for table names -''' +""" def init(): - global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, \ - ACQUISITION_TABLES, DATA_TABLES + global REF_TABLES, SUBJECT_TABLES, ACTION_TABLES, ACQUISITION_TABLES, DATA_TABLES REF_TABLES = ( - 'Lab', - 'LabMember', - 'LabMembership', - 'LabLocation', - 'Project', - 'ProjectLabMember' + "Lab", + "LabMember", + "LabMembership", + "LabLocation", + "Project", + "ProjectLabMember", ) SUBJECT_TABLES = ( - 'Species', - 'Strain', - 'Source', - 'Sequence', - 'Allele', - 'AlleleSequence', - 'Line', - 'LineAllele', - 'Subject', - 'SubjectUser', - 'SubjectProject', - 'SubjectLab', - 'BreedingPair', - 'Litter', - 'LitterSubject', - 'Weaning', - 'Death', - 'Caging', - 'UserHistory', - 'GenotypeTest', - 'Zygosity', - 'Implant' + "Species", + "Strain", + "Source", + "Sequence", + "Allele", + "AlleleSequence", + "Line", + "LineAllele", + "Subject", + "SubjectUser", + "SubjectProject", + "SubjectLab", + "BreedingPair", + "Litter", + "LitterSubject", + "Weaning", + "Death", + "Caging", + "UserHistory", + "GenotypeTest", + "Zygosity", + "Implant", ) ACTION_TABLES = ( - 'ProcedureType', - 'Weighing', - 'WaterType', - 'WaterAdministration', - 'WaterRestriction', - 'WaterRestrictionUser', - 'WaterRestrictionProcedure', - 'Surgery', - 'SurgeryUser', - 'SurgeryProcedure', - 'OtherAction', - 'OtherActionUser', - 'OtherActionProcedure' - + "ProcedureType", + "Weighing", + "WaterType", + "WaterAdministration", + "WaterRestriction", + "WaterRestrictionUser", + "WaterRestrictionProcedure", + "Surgery", + "SurgeryUser", + "SurgeryProcedure", + "OtherAction", + "OtherActionUser", + "OtherActionProcedure", ) ACQUISITION_TABLES = ( - 'Session', - 'ChildSession', - 'SessionUser', - 'SessionProcedure', - 'SessionProject', - 'WaterAdministrationSession' + "Session", + "ChildSession", + "SessionUser", + "SessionProcedure", + "SessionProject", + "WaterAdministrationSession", ) DATA_TABLES = ( - 'DataFormat', - 'DataRepositoryType', - 'DataRepository', - 'ProjectRepository', - 'DataSetType', + "DataFormat", + "DataRepositoryType", + "DataRepository", + "ProjectRepository", + "DataSetType", ) diff --git a/scripts/updates/update_complete_session.py b/scripts/updates/update_complete_session.py index 2b71de59..f7fa5628 100755 --- a/scripts/updates/update_complete_session.py +++ b/scripts/updates/update_complete_session.py @@ -1,30 +1,41 @@ import datajoint as dj import numpy as np -from ibl_pipeline import behavior, acquisition, data +from ibl_pipeline import acquisition, behavior, data -if __name__ == '__main__': - required_datasets = ["_ibl_trials.feedback_times.npy", - "_ibl_trials.feedbackType.npy", - "_ibl_trials.intervals.npy", "_ibl_trials.choice.npy", - "_ibl_trials.response_times.npy", - "_ibl_trials.contrastLeft.npy", - "_ibl_trials.contrastRight.npy", - "_ibl_trials.probabilityLeft.npy"] +if __name__ == "__main__": + required_datasets = [ + "_ibl_trials.feedback_times.npy", + "_ibl_trials.feedbackType.npy", + "_ibl_trials.intervals.npy", + "_ibl_trials.choice.npy", + "_ibl_trials.response_times.npy", + "_ibl_trials.contrastLeft.npy", + "_ibl_trials.contrastRight.npy", + "_ibl_trials.probabilityLeft.npy", + ] - for key in behavior.CompleteTrialSession.fetch('KEY'): + for key in behavior.CompleteTrialSession.fetch("KEY"): try: - datasets = (data.FileRecord & key & 'repo_name LIKE "flatiron_%"' & - {'exists': 1}).fetch('dataset_name') - is_complete = bool(np.all([req_ds in datasets - for req_ds in required_datasets])) + datasets = ( + data.FileRecord & key & 'repo_name LIKE "flatiron_%"' & {"exists": 1} + ).fetch("dataset_name") + is_complete = bool( + np.all([req_ds in datasets for req_ds in required_datasets]) + ) if is_complete is True: - if '_ibl_trials.rewardVolume.npy' in datasets: - dj.Table._update(behavior.CompleteTrialSession & key, - 'reward_volume_status', 'Complete') + if "_ibl_trials.rewardVolume.npy" in datasets: + dj.Table._update( + behavior.CompleteTrialSession & key, + "reward_volume_status", + "Complete", + ) - if '_ibl_trials.itiDuration.npy' in datasets: - dj.Table._update(behavior.CompleteTrialSession & key, - 'iti_duration_status', 'Complete') + if "_ibl_trials.itiDuration.npy" in datasets: + dj.Table._update( + behavior.CompleteTrialSession & key, + "iti_duration_status", + "Complete", + ) except: print(key) diff --git a/scripts/updates/update_go_cue_fields.py b/scripts/updates/update_go_cue_fields.py index cd09c725..09d2e3ca 100755 --- a/scripts/updates/update_go_cue_fields.py +++ b/scripts/updates/update_go_cue_fields.py @@ -1,61 +1,73 @@ import datajoint as dj import numpy as np -from ibl_pipeline import behavior, acquisition from oneibl.one import ONE -if __name__ == '__main__': +from ibl_pipeline import acquisition, behavior - trial_sets_go_cue = behavior.CompleteTrialSession & \ - (behavior.TrialSet.Trial & 'trial_go_cue_time is NULL') & \ - 'go_cue_times_status = "Complete"' +if __name__ == "__main__": + + trial_sets_go_cue = ( + behavior.CompleteTrialSession + & (behavior.TrialSet.Trial & "trial_go_cue_time is NULL") + & 'go_cue_times_status = "Complete"' + ) n_go_cue = len(trial_sets_go_cue) - trial_sets_go_cue_trigger = behavior.CompleteTrialSession & \ - (behavior.TrialSet.Trial & 'trial_go_cue_trigger_time is NULL') & \ - 'go_cue_trigger_times_status = "Complete"' + trial_sets_go_cue_trigger = ( + behavior.CompleteTrialSession + & (behavior.TrialSet.Trial & "trial_go_cue_trigger_time is NULL") + & 'go_cue_trigger_times_status = "Complete"' + ) n_go_cue_trigger = len(trial_sets_go_cue_trigger) - if len(trial_sets_go_cue): - for ikey, key in enumerate(trial_sets_go_cue.fetch('KEY')): + for ikey, key in enumerate(trial_sets_go_cue.fetch("KEY")): # download data try: - eID = str((acquisition.Session & key).fetch1('session_uuid')) - go_cue_times = np.squeeze(ONE().load( - eID, dataset_types='_ibl_trials.goCue_times')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + go_cue_times = np.squeeze( + ONE().load(eID, dataset_types="_ibl_trials.goCue_times") + ) # update go cue time value - trials = behavior.TrialSet.Trial & key & \ - 'trial_go_cue_time is NULL' - for trial in trials.fetch('KEY'): + trials = behavior.TrialSet.Trial & key & "trial_go_cue_time is NULL" + for trial in trials.fetch("KEY"): dj.Table._update( - behavior.TrialSet.Trial & trial, 'trial_go_cue_time', - go_cue_times[trial['trial_id']-1]) + behavior.TrialSet.Trial & trial, + "trial_go_cue_time", + go_cue_times[trial["trial_id"] - 1], + ) if ikey % 100 == 0: - print('Go Cue entry number: {}/{}'.format(ikey, n_go_cue)) + print("Go Cue entry number: {}/{}".format(ikey, n_go_cue)) except: print(key) - if len(trial_sets_go_cue_trigger): - for ikey, key in enumerate(trial_sets_go_cue_trigger.fetch('KEY')): + for ikey, key in enumerate(trial_sets_go_cue_trigger.fetch("KEY")): try: # download data - eID = str((acquisition.Session & key).fetch1('session_uuid')) - go_cue_times = np.squeeze(ONE().load( - eID, dataset_types='_ibl_trials.goCueTrigger_times')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + go_cue_times = np.squeeze( + ONE().load(eID, dataset_types="_ibl_trials.goCueTrigger_times") + ) # update go cue trigger time value - trials = behavior.TrialSet.Trial & key & \ - 'trial_go_cue_trigger_time is NULL' - for trial in trials.fetch('KEY'): + trials = ( + behavior.TrialSet.Trial & key & "trial_go_cue_trigger_time is NULL" + ) + for trial in trials.fetch("KEY"): dj.Table._update( behavior.TrialSet.Trial & trial, - 'trial_go_cue_trigger_time', - go_cue_times[trial['trial_id']-1]) + "trial_go_cue_trigger_time", + go_cue_times[trial["trial_id"] - 1], + ) if ikey % 100 == 0: - print('Go Cue Trigger entry number: {}/{}'.format(ikey, n_go_cue_trigger)) + print( + "Go Cue Trigger entry number: {}/{}".format( + ikey, n_go_cue_trigger + ) + ) except: print(key) diff --git a/scripts/updates/update_iti_reward_volume.py b/scripts/updates/update_iti_reward_volume.py index 44c74866..33ff0c20 100755 --- a/scripts/updates/update_iti_reward_volume.py +++ b/scripts/updates/update_iti_reward_volume.py @@ -1,60 +1,72 @@ import datajoint as dj import numpy as np -from ibl_pipeline import behavior, acquisition from oneibl.one import ONE +from ibl_pipeline import acquisition, behavior -if __name__ == '__main__': +if __name__ == "__main__": - trial_sets_reward_volume = behavior.CompleteTrialSession & \ - (behavior.TrialSet.Trial & 'trial_reward_volume is NULL') & \ - 'reward_volume_status = "Complete"' + trial_sets_reward_volume = ( + behavior.CompleteTrialSession + & (behavior.TrialSet.Trial & "trial_reward_volume is NULL") + & 'reward_volume_status = "Complete"' + ) n_reward_volume = len(trial_sets_reward_volume) - trial_sets_iti_duration = behavior.CompleteTrialSession & \ - (behavior.TrialSet.Trial & 'trial_iti_duration is NULL') & \ - 'iti_duration_status = "Complete"' + trial_sets_iti_duration = ( + behavior.CompleteTrialSession + & (behavior.TrialSet.Trial & "trial_iti_duration is NULL") + & 'iti_duration_status = "Complete"' + ) n_reward_volume = len(trial_sets_iti_duration) - if len(trial_sets_reward_volume): - for ikey, key in enumerate(trial_sets_reward_volume.fetch('KEY')): + for ikey, key in enumerate(trial_sets_reward_volume.fetch("KEY")): # download data try: - eID = str((acquisition.Session & key).fetch1('session_uuid')) - go_cue_times = np.squeeze(ONE().load( - eID, dataset_types='_ibl_trials.rewardVolume')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + go_cue_times = np.squeeze( + ONE().load(eID, dataset_types="_ibl_trials.rewardVolume") + ) # update reward volume value - trials = behavior.TrialSet.Trial & key & \ - 'trial_reward_volume is NULL' - for trial in trials.fetch('KEY'): + trials = behavior.TrialSet.Trial & key & "trial_reward_volume is NULL" + for trial in trials.fetch("KEY"): dj.Table._update( - behavior.TrialSet.Trial & trial, 'trial_reward_volume', - trial['trial_id']-1) + behavior.TrialSet.Trial & trial, + "trial_reward_volume", + trial["trial_id"] - 1, + ) if ikey % 100 == 0: - print('reward volume entry number: {}/{}'.format(ikey, n_reward_volume)) + print( + "reward volume entry number: {}/{}".format( + ikey, n_reward_volume + ) + ) except: print(key) - if len(trial_sets_iti_duration): - for ikey, key in enumerate(trial_sets_iti_duration.fetch('KEY')): + for ikey, key in enumerate(trial_sets_iti_duration.fetch("KEY")): # download data try: - eID = str((acquisition.Session & key).fetch1('session_uuid')) - go_cue_times = np.squeeze(ONE().load( - eID, dataset_types='_ibl_trials.itiDuration')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) + go_cue_times = np.squeeze( + ONE().load(eID, dataset_types="_ibl_trials.itiDuration") + ) # update iti duration value - trials = behavior.TrialSet.Trial & key & \ - 'trial_iti_duration is NULL' - for trial in trials.fetch('KEY'): + trials = behavior.TrialSet.Trial & key & "trial_iti_duration is NULL" + for trial in trials.fetch("KEY"): dj.Table._update( - behavior.TrialSet.Trial & trial, 'trial_iti_duration', - trial['trial_id']-1) + behavior.TrialSet.Trial & trial, + "trial_iti_duration", + trial["trial_id"] - 1, + ) if ikey % 100 == 0: - print('iti duration entry number: {}/{}'.format(ikey, n_iti_duration)) + print( + "iti duration entry number: {}/{}".format(ikey, n_iti_duration) + ) except: print(key) diff --git a/scripts/updates/update_probe_insertion_uuid.py b/scripts/updates/update_probe_insertion_uuid.py index 7b8a29b6..08fb0414 100644 --- a/scripts/updates/update_probe_insertion_uuid.py +++ b/scripts/updates/update_probe_insertion_uuid.py @@ -1,40 +1,51 @@ -''' +""" This script update probe insertion uuid for old entries Shan Shen, 2021-03-05 -''' +""" import datajoint as dj from tqdm import tqdm + from ibl_pipeline import acquisition from ibl_pipeline.ingest import alyxraw - -ephys = dj.create_virtual_module('ephys', 'ibl_ephys') -ephys_ingest = dj.create_virtual_module('ephys_ingest', 'ibl_ingest_ephys') +ephys = dj.create_virtual_module("ephys", "ibl_ephys") +ephys_ingest = dj.create_virtual_module("ephys_ingest", "ibl_ingest_ephys") # Get mismatching probe uuids -mismatch_probe_insertions = \ - (ephys.ProbeInsertion & - (dj.U('subject_uuid', 'session_start_time', 'probe_idx') & ephys_ingest.ProbeInsertion)) - \ - ephys_ingest.ProbeInsertion.proj() +mismatch_probe_insertions = ( + ephys.ProbeInsertion + & ( + dj.U("subject_uuid", "session_start_time", "probe_idx") + & ephys_ingest.ProbeInsertion + ) +) - ephys_ingest.ProbeInsertion.proj() -alyx_keys = (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"').fetch('KEY') +alyx_keys = (alyxraw.AlyxRaw & 'model="experiments.probeinsertion"').fetch("KEY") -for key in tqdm(mismatch_probe_insertions.fetch('KEY')): +for key in tqdm(mismatch_probe_insertions.fetch("KEY")): # get corresponding entries in alyxraw - session_uuid = str((acquisition.Session & key).fetch1('session_uuid')) - probe_name, probe_idx = (ephys.ProbeInsertion & key).fetch1('probe_label', 'probe_idx') + session_uuid = str((acquisition.Session & key).fetch1("session_uuid")) + probe_name, probe_idx = (ephys.ProbeInsertion & key).fetch1( + "probe_label", "probe_idx" + ) if not probe_name: - probe_name = 'probe0' + str(probe_idx) - - q = alyxraw.AlyxRaw & alyx_keys & \ - (alyxraw.AlyxRaw.Field & alyx_keys & dict(fname='session', fvalue=session_uuid)) & \ - (alyxraw.AlyxRaw.Field & alyx_keys & dict(fname='name', fvalue=probe_name)) + probe_name = "probe0" + str(probe_idx) + + q = ( + alyxraw.AlyxRaw + & alyx_keys + & ( + alyxraw.AlyxRaw.Field + & alyx_keys + & dict(fname="session", fvalue=session_uuid) + ) + & (alyxraw.AlyxRaw.Field & alyx_keys & dict(fname="name", fvalue=probe_name)) + ) if len(q) == 1: - ephys.ProbeInsertion.update1( - dict(**key, probe_insertion_uuid=q.fetch1('uuid'))) + ephys.ProbeInsertion.update1(dict(**key, probe_insertion_uuid=q.fetch1("uuid"))) diff --git a/scripts/updates/update_psth.py b/scripts/updates/update_psth.py index 6b2b1dfc..9f09d642 100755 --- a/scripts/updates/update_psth.py +++ b/scripts/updates/update_psth.py @@ -1,14 +1,13 @@ - import datajoint as dj -from ibl_pipeline.plotting import ephys -from ibl_pipeline import acquisition from tqdm import tqdm -if __name__ == '__main__': +from ibl_pipeline import acquisition +from ibl_pipeline.plotting import ephys + +if __name__ == "__main__": with dj.config(safemode=False): - for key in tqdm((ephys.Psth).fetch('KEY')): + for key in tqdm((ephys.Psth).fetch("KEY")): (ephys.Psth & key).delete_quick() - ephys.Psth.populate(key, display_progress=True, - suppress_errors=True) + ephys.Psth.populate(key, display_progress=True, suppress_errors=True) diff --git a/scripts/updates/update_rt.py b/scripts/updates/update_rt.py index 2dc7b5fd..c05e461c 100755 --- a/scripts/updates/update_rt.py +++ b/scripts/updates/update_rt.py @@ -1,27 +1,29 @@ - -from ibl_pipeline import subject, acquisition, behavior -from ibl_pipeline.analyses import behavior as behavior_analyses -from ibl_pipeline.plotting import behavior as behavior_plotting -import datajoint as dj - -from tqdm import tqdm -from oneibl.one import ONE import alf +import datajoint as dj import numpy as np +from oneibl.one import ONE +from tqdm import tqdm +from ibl_pipeline import acquisition, behavior, subject +from ibl_pipeline.analyses import behavior as behavior_analyses +from ibl_pipeline.plotting import behavior as behavior_plotting -if __name__ == '__main__': +if __name__ == "__main__": one = ONE() # sessions to be updated - sessions_with_dates = \ - behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate & \ - 'median_reaction_time<0.01' + sessions_with_dates = ( + behavior_analyses.BehavioralSummaryByDate.ReactionTimeByDate + & "median_reaction_time<0.01" + ) - keys, eIDs = (acquisition.Session.proj( - 'session_uuid', session_date="date(session_start_time)") & - behavior.TrialSet & sessions_with_dates).fetch( - 'KEY', 'session_uuid') + keys, eIDs = ( + acquisition.Session.proj( + "session_uuid", session_date="date(session_start_time)" + ) + & behavior.TrialSet + & sessions_with_dates + ).fetch("KEY", "session_uuid") # update response time of behavior.TrialSet.Trial sessions_with_small_rts = [] @@ -29,28 +31,29 @@ updated_keys = [] for key, eID in tqdm(zip(keys, eIDs), position=0): - dtypes = ['trials.stimOn_times', 'trials.response_times'] + dtypes = ["trials.stimOn_times", "trials.response_times"] try: files = one.load(str(eID), dataset_types=dtypes, download_only=True) ses_path = alf.io.get_session_path(files[0]) - trials = alf.io.load_object(ses_path.joinpath('alf'), '_ibl_trials') + trials = alf.io.load_object(ses_path.joinpath("alf"), "_ibl_trials") except Exception as e: - print(str(eID) + ': ' + str(e)) + print(str(eID) + ": " + str(e)) continue if np.median(trials.response_times - trials.stimOn_times) < 0.01: - print('\n Still having small rt:' + str(eID)) + print("\n Still having small rt:" + str(eID)) unupdated_keys.append(key) sessions_with_small_rts.append(eID) else: for itrial, response_time in enumerate(trials.response_times): - if len(behavior.TrialSet.Trial & key & {'trial_id': itrial+1}) == 1: + if len(behavior.TrialSet.Trial & key & {"trial_id": itrial + 1}) == 1: dj.Table._update( - behavior.TrialSet.Trial & key & {'trial_id': itrial+1}, - 'trial_response_time', response_time) + behavior.TrialSet.Trial & key & {"trial_id": itrial + 1}, + "trial_response_time", + response_time, + ) updated_keys.append(key) - - np.save('sessions_with_small_rts.npy', sessions_with_small_rts) - np.save('updated_keys.npy', updated_keys) - np.save('unupdated_keys.npy', unupdated_keys) + np.save("sessions_with_small_rts.npy", sessions_with_small_rts) + np.save("updated_keys.npy", updated_keys) + np.save("unupdated_keys.npy", unupdated_keys) diff --git a/scripts/updates/update_session_uuids.py b/scripts/updates/update_session_uuids.py index 7a364279..35336cc6 100755 --- a/scripts/updates/update_session_uuids.py +++ b/scripts/updates/update_session_uuids.py @@ -1,45 +1,48 @@ -''' +""" This script update session_uuids in DJ table to match the lasted ONE eids. -''' +""" import datajoint as dj -from tqdm import tqdm from oneibl.one import ONE +from tqdm import tqdm - -if __name__ == '__main__': +if __name__ == "__main__": one = ONE() # ======= ingest subject and session tables into alyxraw `updates_ibl_alyxraw`==== - dj.config['database.prefix'] = 'updates_' - - from ibl_pipeline.ingest.ingest_alyx_raw import alyxraw, get_alyx_entries, insert_to_alyxraw + dj.config["database.prefix"] = "updates_" + from ibl_pipeline.ingest.ingest_alyx_raw import ( + alyxraw, + get_alyx_entries, + insert_to_alyxraw, + ) - insert_to_alyxraw(get_alyx_entries(models=['subjects.subject', - 'actions.session'])) + insert_to_alyxraw(get_alyx_entries(models=["subjects.subject", "actions.session"])) # ======= query sessions with non-matching eids ======= - acquisition = dj.create_virtual_module('acquisition', 'ibl_acquisition') - behavior = dj.create_virtual_module('behavior', 'ibl_behavior') + acquisition = dj.create_virtual_module("acquisition", "ibl_acquisition") + behavior = dj.create_virtual_module("behavior", "ibl_behavior") session_raw = alyxraw.AlyxRaw & 'model="actions.session"' - prob_sessions = (acquisition.Session - - (acquisition.Session.proj(uuid='session_uuid') & - session_raw)) & behavior.TrialSet + prob_sessions = ( + acquisition.Session + - (acquisition.Session.proj(uuid="session_uuid") & session_raw) + ) & behavior.TrialSet # eid non matching sessions with matching subject_uuid and session_start_time - session_start_time_field = dj.U('uuid', 'session_start_time') & \ - (alyxraw.AlyxRaw.Field & session_raw & 'fname="start_time"').proj( - session_start_time='cast(fvalue as datetime)') + session_start_time_field = dj.U("uuid", "session_start_time") & ( + alyxraw.AlyxRaw.Field & session_raw & 'fname="start_time"' + ).proj(session_start_time="cast(fvalue as datetime)") vals = (prob_sessions * session_start_time_field).fetch( - 'KEY', 'uuid', 'session_uuid') + "KEY", "uuid", "session_uuid" + ) for (key, uuid, session_uuid) in tqdm(zip(*vals), position=0, total=len(vals[0])): print(uuid) - dj.Table._update(prob_sessions, 'session_uuid', uuid.bytes) + dj.Table._update(prob_sessions, "session_uuid", uuid.bytes) diff --git a/scripts/updates/update_spike_amp_time.py b/scripts/updates/update_spike_amp_time.py index d11ef1f1..97a679f3 100755 --- a/scripts/updates/update_spike_amp_time.py +++ b/scripts/updates/update_spike_amp_time.py @@ -1,12 +1,15 @@ -from ibl_pipeline import ephys -from ibl_pipeline.plotting import ephys as ephys_plotting import datajoint as dj from tqdm import tqdm +from ibl_pipeline import ephys +from ibl_pipeline.plotting import ephys as ephys_plotting -if __name__ == '__main__': +if __name__ == "__main__": with dj.config(safemode=False): - for key in tqdm((ephys.ProbeInsertion & ephys_plotting.SpikeAmpTime).fetch('KEY'), position=0): + for key in tqdm( + (ephys.ProbeInsertion & ephys_plotting.SpikeAmpTime).fetch("KEY"), + position=0, + ): (ephys_plotting.SpikeAmpTime & key).delete() ephys_plotting.SpikeAmpTime.populate(key, suppress_errors=True) diff --git a/scripts/updates/update_summary_by_date.py b/scripts/updates/update_summary_by_date.py index b0a9ed12..33d10e90 100755 --- a/scripts/updates/update_summary_by_date.py +++ b/scripts/updates/update_summary_by_date.py @@ -1,22 +1,30 @@ +import numpy as np from tqdm import tqdm -from ibl_pipeline import subject, acquisition, behavior + +from ibl_pipeline import acquisition, behavior, subject from ibl_pipeline.analyses import behavior as behavior_analyses -import numpy as np -if __name__ == '__main__': +if __name__ == "__main__": for key in tqdm( - (behavior_analyses.BehavioralSummaryByDate & - 'n_trials_date is null').fetch('KEY'), position=0): - trial_sets = behavior.TrialSet.proj( - session_date='date(session_start_time)') & key + (behavior_analyses.BehavioralSummaryByDate & "n_trials_date is null").fetch( + "KEY" + ), + position=0, + ): + trial_sets = ( + behavior.TrialSet.proj(session_date="date(session_start_time)") & key + ) n_trials_date = len(behavior.TrialSet.Trial & trial_sets) training_day = len( - dj.U('session_date') & - (acquisition.Session.proj(session_date='date(session_start_time)') & - {'subject_uuid': key['subject_uuid']}) & - 'session_date<="{}"'.format(key['session_date'].strftime('%Y-%m-%d'))) + dj.U("session_date") + & ( + acquisition.Session.proj(session_date="date(session_start_time)") + & {"subject_uuid": key["subject_uuid"]} + ) + & 'session_date<="{}"'.format(key["session_date"].strftime("%Y-%m-%d")) + ) training_week = np.floor(training_day / 5) q = behavior_analyses.BehavioralSummaryByDate & key - dj.Table._update(q, 'n_trials_date', n_trials_date) - dj.Table._update(q, 'training_day', training_day) - dj.Table._update(q, 'training_week', training_week) + dj.Table._update(q, "n_trials_date", n_trials_date) + dj.Table._update(q, "training_day", training_day) + dj.Table._update(q, "training_week", training_week) diff --git a/scripts/updates/update_trial_fields.py b/scripts/updates/update_trial_fields.py index 8cc91eb8..62d93541 100755 --- a/scripts/updates/update_trial_fields.py +++ b/scripts/updates/update_trial_fields.py @@ -1,55 +1,63 @@ +import sys import datajoint as dj -from ibl_pipeline import acquisition, behavior import numpy as np -from tqdm import tqdm from oneibl.one import ONE -import sys +from tqdm import tqdm + +from ibl_pipeline import acquisition, behavior one = ONE() -def update_field(key, eID, trials, alf, djattr, dtype, status, - message_record): +def update_field(key, eID, trials, alf, djattr, dtype, status, message_record): data_status = (behavior.CompleteTrialSession & key).fetch1(status) - if data_status != 'Missing': + if data_status != "Missing": dataset = np.squeeze(one.load(eID, dataset_types=alf)) if len(dataset) != len(trials): - message_record.append( - dict(**key, error=alf)) + message_record.append(dict(**key, error=alf)) else: - for itrial, trial_key in enumerate(trials.fetch('KEY')): + for itrial, trial_key in enumerate(trials.fetch("KEY")): # print(dtype(dataset[itrial])) dj.Table._update( - behavior.TrialSet.Trial & trial_key, - djattr, dtype(dataset[itrial])) + behavior.TrialSet.Trial & trial_key, djattr, dtype(dataset[itrial]) + ) else: return -if __name__ == '__main__': +if __name__ == "__main__": # fetch keys with reward_volume but null in table TrialSet.Trial - sessions = behavior.TrialSet.aggr( - behavior.TrialSet.Trial, - n_prob_trials='sum(trial_id=floor(trial_reward_volume)+1)', - n_total_trials='count(*)') & 'n_prob_trials>5' + sessions = ( + behavior.TrialSet.aggr( + behavior.TrialSet.Trial, + n_prob_trials="sum(trial_id=floor(trial_reward_volume)+1)", + n_total_trials="count(*)", + ) + & "n_prob_trials>5" + ) if len(sys.argv) < 2: - keys = sessions.fetch('KEY') + keys = sessions.fetch("KEY") else: - keys = (sessions & sys.argv[1]).fetch('KEY') + keys = (sessions & sys.argv[1]).fetch("KEY") fields = [ # {'alf': 'trials.repNum', 'djattr': 'trial_rep_num', 'dtype': int, 'status': 'rep_num_status'}, # {'alf': 'trials.included', 'djattr': 'trial_included', 'dtype': bool, 'status': 'included_status'}, # {'alf': 'trials.goCue_times', 'djattr': 'trial_go_cue_time', 'dtype': float, 'status': 'go_cue_times_status'}, # {'alf': 'trials.goCueTrigger_times', 'djattr': 'trial_go_cue_trigger_time', 'dtype': float, 'status': 'go_cue_trigger_times_status'}, - {'alf': 'trials.rewardVolume', 'djattr': 'trial_reward_volume', 'dtype': float, 'status': 'reward_volume_status'}, + { + "alf": "trials.rewardVolume", + "djattr": "trial_reward_volume", + "dtype": float, + "status": "reward_volume_status", + }, # {'alf': 'trials.itiDuration', 'djattr': 'trial_iti_duration', 'dtype': float, 'status': 'iti_duration_status'}, ] @@ -57,17 +65,18 @@ def update_field(key, eID, trials, alf, djattr, dtype, status, for key in tqdm(keys, position=0): try: - eID = str((acquisition.Session & key).fetch1('session_uuid')) + eID = str((acquisition.Session & key).fetch1("session_uuid")) trials = behavior.TrialSet.Trial & key for field in fields: - update_field(key, eID, trials, **field, - message_record=problematic_keys) + update_field(key, eID, trials, **field, message_record=problematic_keys) except Exception: - problematic_keys.append(dict(**key, error='other')) + problematic_keys.append(dict(**key, error="other")) print( - 'problem updating {}'.format( - ', '.join('{}: {}'.format(k, value) for k, value in key.items()))) + "problem updating {}".format( + ", ".join("{}: {}".format(k, value) for k, value in key.items()) + ) + ) - np.save('problematic_keys.npy', problematic_keys) + np.save("problematic_keys.npy", problematic_keys) diff --git a/scripts/validate_new_ingestion.py b/scripts/validate_new_ingestion.py index 41a5663c..959dc02a 100644 --- a/scripts/validate_new_ingestion.py +++ b/scripts/validate_new_ingestion.py @@ -1,56 +1,87 @@ import datajoint as dj import pandas as pd -from ibl_pipeline import (reference, subject, action, - acquisition, data, ephys, qc, histology) - -from ibl_pipeline.ingest import reference as shadow_reference -from ibl_pipeline.ingest import subject as shadow_subject -from ibl_pipeline.ingest import action as shadow_action +from ibl_pipeline import ( + acquisition, + action, + data, + ephys, + histology, + qc, + reference, + subject, +) from ibl_pipeline.ingest import acquisition as shadow_acquisition +from ibl_pipeline.ingest import action as shadow_action from ibl_pipeline.ingest import data as shadow_data from ibl_pipeline.ingest import ephys as shadow_ephys -from ibl_pipeline.ingest import qc as shadow_qc from ibl_pipeline.ingest import histology as shadow_histology - from ibl_pipeline.ingest import job +from ibl_pipeline.ingest import qc as shadow_qc +from ibl_pipeline.ingest import reference as shadow_reference +from ibl_pipeline.ingest import subject as shadow_subject real_vmods = {} -for m in (reference, subject, action, - acquisition, data, ephys, qc, histology): - assert m.schema.database.startswith('test_') - schema_name = m.__name__.split('.')[-1] - real_vmods[schema_name] = dj.create_virtual_module(schema_name, m.schema.database[5:]) +for m in (reference, subject, action, acquisition, data, ephys, qc, histology): + assert m.schema.database.startswith("test_") + schema_name = m.__name__.split(".")[-1] + real_vmods[schema_name] = dj.create_virtual_module( + schema_name, m.schema.database[5:] + ) -def main(start='2022-01-20', end='2022-01-22', verbose=True): +def main(start="2022-01-20", end="2022-01-22", verbose=True): session_res = f'session_start_time BETWEEN "{start}" AND "{end}"' - vm_session_keys_for_missing = (real_vmods['acquisition'].Session & session_res).fetch('KEY') - session_keys_for_missing = (acquisition.Session & [{'session_uuid': u} for u in ( - real_vmods['acquisition'].Session & session_res).fetch('session_uuid')]).fetch('KEY') + vm_session_keys_for_missing = ( + real_vmods["acquisition"].Session & session_res + ).fetch("KEY") + session_keys_for_missing = ( + acquisition.Session + & [ + {"session_uuid": u} + for u in (real_vmods["acquisition"].Session & session_res).fetch( + "session_uuid" + ) + ] + ).fetch("KEY") - session_keys_for_extra = (acquisition.Session & session_res).fetch('KEY') - vm_session_keys_for_extra = (real_vmods['acquisition'].Session & [{'session_uuid': u} for u in ( - acquisition.Session & session_res).fetch('session_uuid')]).fetch('KEY') + session_keys_for_extra = (acquisition.Session & session_res).fetch("KEY") + vm_session_keys_for_extra = ( + real_vmods["acquisition"].Session + & [ + {"session_uuid": u} + for u in (acquisition.Session & session_res).fetch("session_uuid") + ] + ).fetch("KEY") discrepancy = {} for full_table_name, table_detail in job.DJ_TABLES.items(): - real_table = table_detail['real'] + real_table = table_detail["real"] if real_table is None: continue - schema_name, table_name = full_table_name.split('.') + schema_name, table_name = full_table_name.split(".") vm_real_table = getattr(real_vmods[schema_name], table_name) - if table_name in ('Session'): - missing = len(vm_real_table & vm_session_keys_for_missing) - len(real_table & session_keys_for_missing) - extra = len(real_table & session_keys_for_extra) - len(vm_real_table & vm_session_keys_for_extra) + if table_name in ("Session"): + missing = len(vm_real_table & vm_session_keys_for_missing) - len( + real_table & session_keys_for_missing + ) + extra = len(real_table & session_keys_for_extra) - len( + vm_real_table & vm_session_keys_for_extra + ) else: - missing = len((vm_real_table & vm_session_keys_for_missing) - (real_table & session_keys_for_missing).proj()) - extra = len((real_table & session_keys_for_extra) - (vm_real_table & vm_session_keys_for_extra).proj()) + missing = len( + (vm_real_table & vm_session_keys_for_missing) + - (real_table & session_keys_for_missing).proj() + ) + extra = len( + (real_table & session_keys_for_extra) + - (vm_real_table & vm_session_keys_for_extra).proj() + ) - discrepancy[full_table_name] = {'missing': missing, 'extra': extra} + discrepancy[full_table_name] = {"missing": missing, "extra": extra} discrepancy = pd.DataFrame(discrepancy).T if verbose: From d8b55b658b10b962aee7d5664b9cb20839c95186 Mon Sep 17 00:00:00 2001 From: Joseph Burling Date: Tue, 28 Jun 2022 18:08:19 -0500 Subject: [PATCH 2/4] fix: session start times without float component --- ibl_pipeline/acquisition_shared.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ibl_pipeline/acquisition_shared.py b/ibl_pipeline/acquisition_shared.py index 997690e2..5adeeb9b 100644 --- a/ibl_pipeline/acquisition_shared.py +++ b/ibl_pipeline/acquisition_shared.py @@ -1,4 +1,5 @@ import datetime +import re import uuid import datajoint as dj @@ -18,6 +19,15 @@ schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_acquisition") +_FLOAT_STR_REGEX = re.compile(r"\.[0-9]+$") + + +def convert_time_str(tstr): + add_float = ".%f" if _FLOAT_STR_REGEX.search(tstr) else "" + dt_fmt = f"%Y-%m-%dT%H:%M:%S{add_float}" + return datetime.datetime.strptime(tstr, dt_fmt).strftime("%Y-%m-%d %H:%M:%S") + + @schema class Session(dj.Manual): # @@ -55,9 +65,7 @@ def insert_with_alyx_rest(cls, backtrack_days=1, verbose=False): "subject_uuid": ( subject.Subject & {"subject_nickname": alyx_session["subject"]} ).fetch1("subject_uuid"), - "session_start_time": datetime.datetime.strptime( - alyx_session["start_time"], "%Y-%m-%dT%H:%M:%S.%f" - ).strftime("%Y-%m-%d %H:%M:%S"), + "session_start_time": convert_time_str(alyx_session["start_time"]), } sess_uuid = alyx_session["url"].split("/")[-1] From 8064df426601b14c7090d567649179da2adf4744 Mon Sep 17 00:00:00 2001 From: Joseph Burling Date: Wed, 29 Jun 2022 11:36:40 -0500 Subject: [PATCH 3/4] fix: one method name change --- ibl_pipeline/plotting/histology_plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ibl_pipeline/plotting/histology_plotting.py b/ibl_pipeline/plotting/histology_plotting.py index b28ab9e6..7d803030 100644 --- a/ibl_pipeline/plotting/histology_plotting.py +++ b/ibl_pipeline/plotting/histology_plotting.py @@ -90,7 +90,7 @@ def probe_trajectory_coronal(eid, probe_label, one, ax=None): ba_allen = atlas.AllenAtlas(25) - one.path_from_eid(eid) + one.eid2path(eid) traj = one.alyx.rest( "trajectories", "list", @@ -109,6 +109,6 @@ def probe_trajectory_coronal(eid, probe_label, one, ax=None): ax = ba_allen.plot_tilted_slice(xyz=picks, axis=1, volume="image", ax=ax) ax.plot(picks[:, 0] * 1e6, picks[:, 2] * 1e6) - ax.plot(channels[probe_label].x * 1e6, channels[probe_label].z * 1e6, "g*") + ax.plot(channels[probe_label]["x"] * 1e6, channels[probe_label]["z"] * 1e6, "g*") return ax From 7335c99410739d1d69be4d92bb8a6746ae07e57c Mon Sep 17 00:00:00 2001 From: Joseph Burling Date: Tue, 13 Sep 2022 20:26:59 -0500 Subject: [PATCH 4/4] fix: :recycle: mostly ONE changes and import sorts --- ibl_pipeline/__init__.py | 84 +++++++++++-------- ibl_pipeline/action_internal.py | 4 +- ibl_pipeline/ingest/__init__.py | 3 +- ibl_pipeline/ingest/job.py | 5 +- ibl_pipeline/ingest/reference.py | 5 +- ibl_pipeline/plotting/behavior.py | 3 +- ibl_pipeline/plotting/behavior_shared.py | 9 +- ibl_pipeline/plotting/ephys.py | 9 +- .../plotting/plotting_utils_behavior.py | 3 +- ibl_pipeline/process/ingest_membership.py | 4 +- ibl_pipeline/process/ingest_real.py | 4 +- ibl_pipeline/process/ingest_shadow.py | 2 +- ibl_pipeline/process/populate_behavior.py | 4 +- ibl_pipeline/process/process_histology.py | 3 +- 14 files changed, 71 insertions(+), 71 deletions(-) diff --git a/ibl_pipeline/__init__.py b/ibl_pipeline/__init__.py index b21645a7..304c5ded 100755 --- a/ibl_pipeline/__init__.py +++ b/ibl_pipeline/__init__.py @@ -1,12 +1,13 @@ import os +import re +from pathlib import Path import datajoint as dj - -_one = None +from appdirs import user_cache_dir dj.config["enable_python_native_blobs"] = True -mode = dj.config.get("custom", {}).get("database.mode", os.getenv("MODE", "")) +mode = dj.config.get("custom", {}).get("database.mode", os.getenv("DJ_MODE", "")) if mode == "test": dj.config["database.prefix"] = "test_" @@ -14,28 +15,9 @@ dj.config["database.prefix"] = "update_" -schema = dj.schema("ibl_storage") - - -@schema -class S3Access(dj.Manual): - definition = """ - s3_id: tinyint # unique id for each S3 pair - --- - access_key: varchar(128) # S3 access key - secret_key: varchar(128) # S3 secret key - """ - - -# attempt to get S3 access/secret key from different sources access_key = os.getenv("S3_ACCESS") secret_key = os.getenv("S3_SECRET") -if (access_key is None or secret_key is None) and len(S3Access.fetch()) > 0: - # if there are multiple entries in S3, it won't work - access_key, secret_key = S3Access.fetch1("access_key", "secret_key") - - if mode == "public": bucket = "ibl-dj-external-public" root = "/public" @@ -63,17 +45,49 @@ class S3Access(dj.Manual): } -try: - from one.api import OneAlyx -except ImportError: - print("ONE-api not set up") - one = False -else: - base_url = dj.config.get("custom", {}).get( - "database.alyx.url", os.getenv("ALYX_URL", None) - ) +def get_one_api_public(password=None, url="https://openalyx.internationalbrainlab.org"): try: - one = OneAlyx(base_url=base_url, silent=True) - except ConnectionError: - # by-pass error in removing the old format .one_params - one = OneAlyx(base_url=base_url, silent=True) + from one.api import OneAlyx + except ImportError: + print("'one-api' package not installed.") + one = None + else: + base_url = ( + dj.config.get("custom", {}).get( + "database.alyx.url", os.getenv("ALYX_URL", None) + ) + or url + ) + cache_dir = ( + Path(os.getenv("CACHE_DIR") or user_cache_dir("ibl")) + / "ONE" + / re.sub(r"^https*:/+", "", base_url) + ) + cache_dir.mkdir(parents=True, exist_ok=True) + try: + one = OneAlyx( + mode="remote", + wildcards=True, + base_url=base_url, + password=password or "international", + silent=True, + cache_dir=cache_dir, + ) + one.refresh_cache("refresh") + except ConnectionError: + print( + "Could not connect to Alyx. Using 'openalyx.internationalbrainlab.org'" + ) + one = OneAlyx( + mode="auto", + wildcards=True, + base_url="https://openalyx.internationalbrainlab.org", + password="international", + silent=True, + cache_dir=cache_dir, + ) + + return one + + +one = get_one_api_public() diff --git a/ibl_pipeline/action_internal.py b/ibl_pipeline/action_internal.py index b09a863b..e39555b9 100644 --- a/ibl_pipeline/action_internal.py +++ b/ibl_pipeline/action_internal.py @@ -2,11 +2,9 @@ import datajoint as dj -from ibl_pipeline import reference, subject +from ibl_pipeline import mode, reference, subject from ibl_pipeline.action_shared import ProcedureType -mode = dj.config.get("custom", {}).get("database.mode", "") - if mode == "update": schema = dj.schema("ibl_action") else: diff --git a/ibl_pipeline/ingest/__init__.py b/ibl_pipeline/ingest/__init__.py index 0622c184..a001202e 100755 --- a/ibl_pipeline/ingest/__init__.py +++ b/ibl_pipeline/ingest/__init__.py @@ -58,9 +58,10 @@ import datajoint as dj from tqdm import tqdm +from ibl_pipeline import mode from ibl_pipeline.ingest import alyxraw -if dj.config.get("custom", {}).get("database.mode", "") == "test": +if mode == "test": dj.config["database.prefix"] = "test_" logger = logging.getLogger(__name__) diff --git a/ibl_pipeline/ingest/job.py b/ibl_pipeline/ingest/job.py index d5075fdf..079737c4 100644 --- a/ibl_pipeline/ingest/job.py +++ b/ibl_pipeline/ingest/job.py @@ -375,7 +375,10 @@ def insert_task_status(cls, job_key, task, start, end): "real": acquisition.WaterAdministrationSession, "shadow": shadow_acquisition.WaterAdministrationSession, }, - "qc.SessionQCIngest": {"real": None, "shadow": shadow_qc.SessionQCIngest}, + "qc.SessionQCIngest": { + "real": None, + "shadow": shadow_qc.SessionQCIngest, + }, "qc.ProbeInsertionQCIngest": { "real": None, "shadow": shadow_qc.ProbeInsertionQCIngest, diff --git a/ibl_pipeline/ingest/reference.py b/ibl_pipeline/ingest/reference.py index b47c5a33..c9f4bf16 100755 --- a/ibl_pipeline/ingest/reference.py +++ b/ibl_pipeline/ingest/reference.py @@ -3,10 +3,11 @@ import datajoint as dj +from ibl_pipeline import mode from ibl_pipeline.ingest import alyxraw from ibl_pipeline.ingest import get_raw_field as grf -if dj.config.get("custom", {}).get("database.mode", "") == "public": +if mode == "public": from ibl_pipeline import public schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_ingest_reference") @@ -69,7 +70,7 @@ def make(self, key): # check the current mode, if public, omit some fields user_name = grf(key, "username") - if dj.config.get("custom", {}).get("database.mode", "") != "public": + if mode != "public": key_lab_member["user_name"] = user_name key_lab_member["password"] = grf(key, "password") key_lab_member["email"] = grf(key, "email") diff --git a/ibl_pipeline/plotting/behavior.py b/ibl_pipeline/plotting/behavior.py index bd5ac7a0..f37003f3 100755 --- a/ibl_pipeline/plotting/behavior.py +++ b/ibl_pipeline/plotting/behavior.py @@ -1,8 +1,7 @@ import os +from ibl_pipeline import mode from ibl_pipeline.plotting.behavior_shared import * -mode = dj.config.get("custom", {}).get("database.mode", "") - if mode != "public": from ibl_pipeline.plotting.behavior_internal import * diff --git a/ibl_pipeline/plotting/behavior_shared.py b/ibl_pipeline/plotting/behavior_shared.py index 8905bf45..5ffeb4cf 100644 --- a/ibl_pipeline/plotting/behavior_shared.py +++ b/ibl_pipeline/plotting/behavior_shared.py @@ -11,13 +11,11 @@ from ibl_pipeline import acquisition, action from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import data, reference, subject +from ibl_pipeline import data, mode, reference, subject from ibl_pipeline.analyses import behavior from ibl_pipeline.plotting import plotting_utils_behavior as putils from ibl_pipeline.utils import psychofit as psy -mode = dj.config.get("custom", {}).get("database.mode", "") - schema = dj.schema(dj.config.get("database.prefix", "") + "ibl_plotting_behavior") @@ -325,10 +323,7 @@ def make(self, key): ) # check the environment, public or internal - if dj.config.get("custom", {}).get("database.mode", "") == "public": - public = True - else: - public = False + public = mode == "public" subj = subject.Subject & key # get the first date when animal became "trained" and "ready for ephys" diff --git a/ibl_pipeline/plotting/ephys.py b/ibl_pipeline/plotting/ephys.py index 02a76fdb..3a0ad2b5 100755 --- a/ibl_pipeline/plotting/ephys.py +++ b/ibl_pipeline/plotting/ephys.py @@ -13,7 +13,7 @@ from matplotlib.axes import Axes from tqdm import tqdm -from ibl_pipeline import acquisition, subject +from ibl_pipeline import acquisition, mode, subject from ibl_pipeline.analyses import ephys as ephys_analyses from ibl_pipeline.plotting import ephys_plotting as eplt from ibl_pipeline.plotting import plotting_utils_ephys as putils @@ -21,8 +21,6 @@ from ibl_pipeline.plotting.figure_model import GifFigure, PngFigure from ibl_pipeline.plotting.utils import RedBlueColorBar -mode = dj.config.get("custom", {}).get("database.mode", "") - if mode == "public": root_path = "public" else: @@ -1190,8 +1188,7 @@ def _create_trial_raster(self, key, spikes_data, trial): return depth_raster def make(self, key): - - mode = "all" + mode_ = "all" spikes_data = putils.prepare_spikes_data(key) # pick some example trials and generate depth raster @@ -1212,7 +1209,7 @@ def make(self, key): ) trials_depthraster = [] - if mode == "example": + if mode_ == "example": conditions = [ {"trial_response_choice": "CW", "trial_feedback_type": 1}, diff --git a/ibl_pipeline/plotting/plotting_utils_behavior.py b/ibl_pipeline/plotting/plotting_utils_behavior.py index 6e2c8722..e21737f9 100755 --- a/ibl_pipeline/plotting/plotting_utils_behavior.py +++ b/ibl_pipeline/plotting/plotting_utils_behavior.py @@ -2,10 +2,9 @@ from ibl_pipeline import acquisition, action from ibl_pipeline import behavior as behavior_ingest -from ibl_pipeline import subject +from ibl_pipeline import mode, subject from ibl_pipeline.analyses import behavior -mode = dj.config.get("custom", {}).get("database.mode", "") if mode != "public": from ibl_pipeline import ephys diff --git a/ibl_pipeline/process/ingest_membership.py b/ibl_pipeline/process/ingest_membership.py index 39069c7d..1985f516 100755 --- a/ibl_pipeline/process/ingest_membership.py +++ b/ibl_pipeline/process/ingest_membership.py @@ -10,14 +10,12 @@ import pymysql from tqdm import tqdm +from ibl_pipeline import mode from ibl_pipeline.ingest import QueryBuffer, acquisition, action, alyxraw, data from ibl_pipeline.ingest import get_raw_field as grf from ibl_pipeline.ingest import reference, subject from ibl_pipeline.utils import is_valid_uuid -mode = dj.config.get("custom", {}).get("database.mode", "") - - MEMBERSHIP_TABLES = [ { "dj_current_table": reference.ProjectLabMember, diff --git a/ibl_pipeline/process/ingest_real.py b/ibl_pipeline/process/ingest_real.py index 6ccb9a08..b4b894ab 100755 --- a/ibl_pipeline/process/ingest_real.py +++ b/ibl_pipeline/process/ingest_real.py @@ -9,11 +9,9 @@ import datajoint as dj import numpy as np -from ibl_pipeline import acquisition, action, data, ephys, reference, subject +from ibl_pipeline import acquisition, action, data, ephys, mode, reference, subject from ibl_pipeline.ingest.common import * -mode = dj.config.get("custom", {}).get("database.mode", "") - REF_TABLES = ( "Lab", "LabMember", diff --git a/ibl_pipeline/process/ingest_shadow.py b/ibl_pipeline/process/ingest_shadow.py index 5ed10f8d..9b937d45 100755 --- a/ibl_pipeline/process/ingest_shadow.py +++ b/ibl_pipeline/process/ingest_shadow.py @@ -1,6 +1,7 @@ import datajoint as dj from datajoint import DataJointError +from ibl_pipeline import mode from ibl_pipeline.ingest import ( QueryBuffer, acquisition, @@ -11,7 +12,6 @@ subject, ) -mode = dj.config.get("custom", {}).get("database.mode", "") if mode != "public": from ibl_pipeline.ingest import ephys, histology diff --git a/ibl_pipeline/process/populate_behavior.py b/ibl_pipeline/process/populate_behavior.py index 1e13885e..72e1a8e7 100755 --- a/ibl_pipeline/process/populate_behavior.py +++ b/ibl_pipeline/process/populate_behavior.py @@ -7,12 +7,10 @@ import datajoint as dj from tqdm import tqdm -from ibl_pipeline import acquisition, action, behavior, data, reference, subject +from ibl_pipeline import acquisition, action, behavior, data, mode, reference, subject from ibl_pipeline.analyses import behavior as behavior_analyses from ibl_pipeline.plotting import behavior as behavior_plotting -mode = dj.config.get("custom", {}).get("database.mode", "") - BEHAVIOR_TABLES = [ behavior.CompleteWheelSession, behavior.CompleteTrialSession, diff --git a/ibl_pipeline/process/process_histology.py b/ibl_pipeline/process/process_histology.py index e9254df8..f3185c26 100644 --- a/ibl_pipeline/process/process_histology.py +++ b/ibl_pipeline/process/process_histology.py @@ -36,8 +36,7 @@ logger = logging.getLogger(__name__) -mode = dj.config.get("custom", {}).get("database.mode", "") - +from ibl_pipeline import mode ALYX_HISTOLOGY_MODELS = [ experiments.models.CoordinateSystem,