import datajoint as dj
from ibl_pipeline import acquisition
from paper_behavior_functions import \
    (figpath, query_sessions, query_subjects, group_colors, seaborn_style,
     FIGURE_HEIGHT, FIGURE_WIDTH)

# Set default figure size.
save_path = figpath()  # Our figure save path
colors = group_colors()
seaborn_style()

endcriteria = dj.create_virtual_module('SessionEndCriteriaImplemented',
                                       'group_shared_end_criteria')
sessions = query_sessions().proj(session_start_date='date(session_start_time)')
subj_crit = query_subjects().aggr(
    acquisition.Session(),
    first_day='min(date(session_start_time))').proj('first_day')
session_num = (sessions *
               subj_crit).proj(n='DATEDIFF(session_start_date, first_day)')

df = (endcriteria.SessionEndCriteriaImplemented * session_num).fetch(
    format='frame')  # Fetch data

# Convert statuses to numerical
fig, ax = plt.subplots(1, 1, figsize=(FIGURE_WIDTH / 4, FIGURE_HEIGHT))
ids = {k: v for v, k in enumerate(df['end_status'].unique())}
df['end_status_id'] = df['end_status'].map(ids)
bins = [0, 6, 13, 20, 27, 34]
ax = df.pivot(columns='end_status_id').n.plot(kind='hist',
                                              color=colors,
                                              bins=bins,
Beispiel #2
0
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from os.path import join
import seaborn as sns
from paper_behavior_functions import (query_subjects, seaborn_style, institution_map,
                                      group_colors, figpath)
from ibl_pipeline.analyses import behavior as behavior_analysis
from scipy import stats
import scikit_posthocs as sp

# Settings
fig_path = figpath()

# Query sessions
use_subjects = query_subjects()
ses = (use_subjects * behavior_analysis.SessionTrainingStatus * behavior_analysis.PsychResults
       & 'training_status = "in_training" OR training_status = "untrainable"').proj(
               'subject_nickname', 'n_trials_stim', 'institution_short').fetch(format='frame')
ses = ses.reset_index()
ses['n_trials'] = [sum(i) for i in ses['n_trials_stim']]

# Construct dataframe
training_time = pd.DataFrame(columns=['sessions'], data=ses.groupby('subject_nickname').size())
training_time['trials'] = ses.groupby('subject_nickname').sum()
training_time['lab'] = ses.groupby('subject_nickname')['institution_short'].apply(list).str[0]

# Change lab name into lab number
training_time['lab_number'] = training_time.lab.map(institution_map()[0])
training_time = training_time.sort_values('lab_number')
Beispiel #3
0
                acquisition.Session,
                first_session='min(date(session_start_time))')

# Filter mice that started training after the paper's cutoff date
all_mice = all_mice.aggr(acquisition.Session,
                         first_session='min(date(session_start_time))')
all_mice = (all_mice & 'first_session < "%s"' % CUTOFF_DATE)

print('1. Total # of mice in brainwide project: %d' % len(all_mice))

# ==================================================
# Exclude mice that are still in training at the date of cut-off, meaning they have not yet
# reached any learned criteria
# ==================================================

all_mice = query_subjects(
    criterion=None)  # Mice that started the training task protocol
still_training = all_mice * subject.Subject.aggr(behavior_analysis.SessionTrainingStatus,
                                                 session_start_time='max(session_start_time)') \
                   * behavior_analysis.SessionTrainingStatus - subject.Death \
                   & 'training_status = "in_training"' & 'session_start_time > "%s"' % CUTOFF_DATE
# print(pd.DataFrame(still_training))

# ==================================================
# Get mice that started training
# ==================================================

mice_started_training = (
    all_mice & (acquisition.Session() & 'task_protocol LIKE "%training%"'))
print('2. Number of mice that went into training: %d' %
      len(mice_started_training))
print(
Create list of UUIDs used in the paper

@author: Alex Pan
"""

import numpy as np
from os.path import join
from ibl_pipeline import reference, subject, acquisition, behavior
from ibl_pipeline.analyses import behavior as behavior_analysis
from paper_behavior_functions import query_subjects, query_sessions_around_criterion, figpath

# Get path to save
SAVE_PATH = figpath()

# All subjects
subjects = query_subjects(as_dataframe=True)

# Create dataframe with behavioral metrics of all mice
ses_2b = []
for i, nickname in enumerate(subjects['subject_nickname']):
    if np.mod(i + 1, 10) == 0:
        print('Loading data of subject %d of %d' %
              (i + 1, len(subjects['subject_nickname'])))

    # Get sessions and trials which are flagged as in_training
    ses_start = (
        acquisition.Session * subject.Subject *
        behavior_analysis.SessionTrainingStatus
        & ('subject_nickname = "%s"' % nickname)
        & 'training_status = "in_training" OR training_status = "untrainable"'
    ).proj('session_uuid').fetch(format='frame')
    'subject_nickname', 'sex', 'subject_birth_date', 'institution_short',
    last_training_session='max(date(session_start_time))')
mice_in_training = (subj_query & 'last_training_session > "2019-11-30"')
mice_at_start = len(all_mice)-len(mice_in_training)
print('Number of mice at start: %d' % mice_at_start)

# Get mice that when into training
mice_training = (subj_query & 'last_training_session < "2019-11-30"')

# Get dropout during habituation
training_query = (subject.Subject * subject.SubjectLab * reference.Lab * subject.SubjectProject
                  & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr(
    acquisition.Session() & 'task_protocol LIKE "%training%"',
    num_sessions='count(session_start_time)').fetch(format='frame')
print('Number of mice that went into habituation: %d' % (len(mice_training)
                                                         + sum(
                                                             training_query['num_sessions'] == 0)))
print('Number of mice that went into training: %d' % len(mice_training))

# Get number of mice that reached trained
print('Number of mice that reached trained: %d' % len(query_subjects()))

# Get number of mice ready for ephys
subj_query = (query_subjects().proj('subject_uuid') * subject.Subject * subject.SubjectProject
              & 'subject_project = "ibl_neuropixel_brainwide_01"').aggr(
    (acquisition.Session * behavior_analysis.SessionTrainingStatus())
    & 'training_status="ready4ephysrig"',
    'subject_nickname', 'sex', 'subject_birth_date',
    date_trained='min(date(session_start_time))')
print('Number of mice that reached ready for ephys: %d' % len(subj_query))
import seaborn as sns

from ibl_pipeline import subject
from ibl_pipeline.analyses import behavior as behavior_analysis
from paper_behavior_functions import (seaborn_style, institution_map,
                                      query_subjects, group_colors, figpath,
                                      load_csv, CUTOFF_DATE, FIGURE_HEIGHT,
                                      FIGURE_WIDTH, QUERY)
from lifelines import KaplanMeierFitter

# Settings
fig_path = figpath()
seaborn_style()

if QUERY is True:
    mice_started_training = query_subjects(criterion=None)
    still_training = (mice_started_training.aggr(
        behavior_analysis.SessionTrainingStatus,
        session_start_time='max(session_start_time)') *
                      behavior_analysis.SessionTrainingStatus - subject.Death
                      & 'training_status = "in_training"'
                      & 'session_start_time > "%s"' % CUTOFF_DATE)
    use_subjects = mice_started_training - still_training

    # Get training status and training time in number of sessions and trials
    ses = ((use_subjects * behavior_analysis.SessionTrainingStatus *
            behavior_analysis.PsychResults).proj(
                'subject_nickname', 'training_status', 'n_trials_stim',
                'institution_short').fetch(format='frame').reset_index())
    ses['n_trials'] = [sum(i) for i in ses['n_trials_stim']]
    ses = ses.drop('n_trials_stim', axis=1).dropna()
# ==================================================
# Exclude mice that are still in training at the date of cutt-off
# ==================================================

still_training = all_mice * subject.Subject.aggr(behavior_analysis.SessionTrainingStatus,
                                        session_start_time='max(session_start_time)')\
                   * behavior_analysis.SessionTrainingStatus - subject.Death \
                    & 'training_status = "in_training"' & 'session_start_time > "2020-03-01"'

# ==================================================
# Get mice that started training
# ==================================================

mice_started_training = (
    all_mice & (acquisition.Session() & 'task_protocol LIKE "%training%"'))
print('2. Number of mice that went into training: %d' %
      len(mice_started_training))
print(
    '3. Number of mice that are still in training (exclude from 1 and 2): %d' %
    len(still_training))

# ==================================================
# Mice that reached trained
# ==================================================

print('4. Number of mice that reached trained: %d' % len(query_subjects()))
print('5. Number of mice that reached ready4ephysrig: %d' %
      len(query_subjects(criterion='ready4ephysrig')))

print(pd.DataFrame(still_training))
# Get mice that started training
# ==================================================

mice_started_training = (
    all_mice & (acquisition.Session() & 'task_protocol LIKE "%training%"'))
print('2. Number of mice that went into training: %d' %
      len(mice_started_training))
print(
    '3. Number of mice that are still in training (exclude from 1 and 2): %d' %
    len(still_training))

# ==================================================
# Mice that reached trained
# ==================================================

trained = query_subjects(criterion='trained')
print('4. Number of mice that reached trained: %d' % len(trained))
print('5. Number of mice that reached ready4ephys: %d' %
      len(query_subjects(criterion='ephys')))

# ==================================================
# Trained mice yet to meet final criterion at the cut off date.
# These mice did not quite reach ready4ephysrig by the cut-off date, but were likely to
# ==================================================

# mice that reached trained but not ready4ephys, didn't die before the cut-off, and had fewer
# than 40 sessions (no session marked as 'untrainable')
session_training_status = acquisition.Session * behavior_analysis.SessionTrainingStatus(
)
trained_not_ready = (trained.aggr(
    session_training_status,
Beispiel #9
0
"""
import pandas as pd
import numpy as np
import datajoint as dj
from ibl_pipeline import behavior, acquisition, subject, action
from ibl_pipeline.analyses import behavior as behavior_analysis

from paper_behavior_functions import (query_subjects, EXAMPLE_MOUSE,
                                      institution_map, CUTOFF_DATE, load_csv)

############################
# Days to full proficiency #
############################
"""This section prints the mean number of days and trials required to reach full task
proficiency"""
use_subjects = query_subjects(criterion='ephys')
query = (behavior_analysis.BehavioralSummaryByDate * use_subjects)
query = subject.Subject.proj().aggr(query & 'session_date <= date_trained',
                                    'institution_short',
                                    n_training_days='MAX(training_day)',
                                    total_trials='SUM(n_trials_date)',
                                    n_training_weeks='MAX(training_week)')

df = query.fetch(order_by='institution_short', format='frame')
# Ensure correct data types
institution_map, _ = institution_map()
df['institution_code'] = df.institution_short.map(institution_map)
int_fields = ['n_training_weeks', 'n_training_days', 'total_trials']
df[int_fields] = df[int_fields].apply(pd.to_numeric)

# Fetch UUID of example mouse