Skip to content

Commit b7d2015

Browse files
committed
adds metadata and ensures QC runs
1 parent c4ed858 commit b7d2015

9 files changed

Lines changed: 31 additions & 11 deletions

File tree

tests/translator/foraging2/test_foraging2_extract.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,3 +690,6 @@ def test_get_max_session_duration(foraging2_data_stage4_2018_05_10):
690690

691691
def test_get_abort_on_early_response(foraging2_data_stage4_2018_05_10):
692692
assert extract.get_abort_on_early_response(foraging2_data_stage4_2018_05_10) == True
693+
694+
def test_get_periodic_flash(foraging2_data_stage4_2018_05_10):
695+
assert extract.get_periodic_flash(foraging2_data_stage4_2018_05_10) == (0.25, 0.5)

tests/translator/foraging2/test_foraging2_translator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def test_data_to_metadata(monkeypatch, foraging2_data_fixture):
141141
"behavior_session_uuid": '',
142142
"abort_on_early_response": True,
143143
"auto_reward_delay": 0.0,
144+
"periodic_flash": (0.25, 0.5),
144145
}
145146

146147

tests/translator/test_translator_functional.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from visual_behavior.translator import foraging2, foraging
66
from visual_behavior.translator.core import create_extended_dataframe
77
from visual_behavior.uuid_utils import create_session_uuid
8+
from visual_behavior.validation.qc import generate_qc_report
89

910

1011
"""test the schemas vs the outputs here
@@ -56,6 +57,8 @@ def test_foraging2_translator_schema(foraging2_data_stage4_2018_05_10):
5657
core_data['metadata']['startdatetime'],
5758
)
5859
_test_core_data_schemas(core_data)
60+
generate_qc_report(core_data)
61+
5962

6063
def test_foraging_translator_schema(behavioral_session_output_fixture):
6164
core_data = foraging.data_to_change_detection_core(
@@ -68,3 +71,4 @@ def test_foraging_translator_schema(behavioral_session_output_fixture):
6871
)
6972

7073
_test_core_data_schemas(core_data)
74+
generate_qc_report(core_data)

visual_behavior/schemas/core.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,16 @@ class MetadataSchema(Schema):
346346
description='maximum volume of water to deliver in a session, in mL',
347347
required=True,
348348
)
349+
auto_reward_delay = fields.Float(
350+
description='delay between change time and reward on autoreward trials',
351+
required=True,
352+
)
353+
periodic_flash = fields.List(
354+
fields.Float,
355+
description='duration of flash and grey screen',
356+
required=True,
357+
allow_none=True,
358+
)
349359

350360

351361
# class ChangeDetectionSessionCoreSchema(Schema):

visual_behavior/translator/foraging/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ def load_metadata(data):
9393
metadata['initial_blank_duration'] = data['initial_blank']
9494
metadata['warm_up_trials'] = data['warmup_trials']
9595
metadata['stimulus_window'] = data['trial_duration'] - data['delta_minimum']
96+
metadata['auto_reward_delay'] = 0.0 # hard coded
97+
98+
blank_dur = np.mean(data['blank_duration_range'])
99+
metadata['periodic_flash'] = (data['stim_duration'], blank_dur) if blank_dur > 0 else None
96100

97101
block_length = data['lick_detect_training_block_length']
98102

visual_behavior/translator/foraging2/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
get_stimulus_window, get_volume_limit, get_failure_repeats, \
1414
get_catch_frequency, get_free_reward_trials, get_min_no_lick_time, \
1515
get_max_session_duration, get_abort_on_early_response, get_session_id, \
16-
get_even_sampling, get_auto_reward_delay
16+
get_even_sampling, get_auto_reward_delay, get_periodic_flash
1717

1818

1919
from .extract_stimuli import get_visual_stimuli
@@ -164,6 +164,7 @@ def data_to_metadata(data):
164164
"initial_blank_duration": get_initial_blank_duration(data),
165165
"even_sampling_enabled": get_even_sampling(data),
166166
"behavior_session_uuid": behavior_session_uuid,
167+
"periodic_flash": get_periodic_flash(data),
167168
}
168169

169170

visual_behavior/translator/foraging2/extract.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,3 +1434,7 @@ def get_abort_on_early_response(data):
14341434
abort on early response boolean or None if not found
14351435
"""
14361436
return data["items"]["behavior"]["config"]["DoC"]["abort_on_early_response"]
1437+
1438+
1439+
def get_periodic_flash(data):
1440+
return tuple(data['items']['behavior']['config']['DoC']['periodic_flash'])

visual_behavior/validation/extended_trials.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,6 @@ def count_stimuli_per_trial(trials, visual_stimuli):
186186
return stimuli_per_trial
187187

188188

189-
def fix_periodic_flash(pf):
190-
'''
191-
deal with core_data['metadata']['params']['periodic_flash']='None'
192-
'''
193-
return None if pf == 'None' else pf
194-
195-
196189
# test functions
197190
def validate_autoreward_volume(trials, auto_reward_volume):
198191
'''Each dispense of water for autorewards should be `auto_reward_vol`.'''
@@ -859,7 +852,7 @@ def validate_change_frame_at_flash_onset(trials, visual_stimuli, periodic_flash)
859852
'''
860853
if `periodic_flash` is not null, changes should always coincide with a stimulus onset
861854
'''
862-
if fix_periodic_flash(periodic_flash) is None:
855+
if periodic_flash is None:
863856
return True
864857
else:
865858
# get all non-null change frames
@@ -877,7 +870,7 @@ def validate_initial_blank(trials, visual_stimuli, initial_blank, periodic_flash
877870
'''
878871

879872
# this test doesn't make sense for static stimuli with no initial blank. just return True
880-
if fix_periodic_flash(periodic_flash) is None and initial_blank == 0:
873+
if periodic_flash is None and initial_blank == 0:
881874
return True
882875
else:
883876
# preallocate array

visual_behavior/validation/qc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def define_validation_functions(core_data):
4545
STIMULUS_WINDOW = core_data['metadata']['stimulus_window']
4646
VOLUME_LIMIT = core_data['metadata']['volume_limit']
4747

48-
PERIODIC_FLASH = et.fix_periodic_flash(core_data['metadata']['params']['periodic_flash'])
48+
PERIODIC_FLASH = core_data['metadata']['periodic_flash']
4949

5050
validation_functions = {
5151
# et.validate_schema

0 commit comments

Comments
 (0)