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,
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')
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,
""" 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