Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
Diff: trial.cpp
- Revision:
- 24:e236faf66935
- Parent:
- 23:61af0317e404
- Child:
- 26:b4421d1ee57a
--- a/trial.cpp Tue Jul 03 13:46:21 2018 +0000 +++ b/trial.cpp Tue Jul 03 13:58:05 2018 +0000 @@ -34,32 +34,42 @@ delay_dur_ms = task.delay_min_ms.value + random::exponential(task.delay_var_ms.value, task.delay_var_ms.value*3); - // generate stimuli + // reset cues audioOut.setEnabled(false); visualOut.setEnabled(false); vis_dur_us = 0; vis_onset_us = 0; + // configure reward + rewardOut.setOnset(0); + rewardOut.setDuration(ms_to_us(task.reward_dur_ms.value)); + + // configure cued state duration + visual stimulus position (if any) switch (task.mode.value) { case Pair: - visualOut.setBlinkDuration( calc_blink_duration(task.vis_blink_hz.value) ); - assignRandomStim(task); - rewardOut.setDuration(ms_to_us(task.reward_dur_ms.value)); - break; case Report: case Associate: - assignRandomStim(task); - // fallthrough + visualOut.setBlinkDuration( calc_blink_duration(task.vis_blink_hz.value) ); + assignCues(task, true); + break; case Motion: case MotionAlt: - rewardOut.setOnset(0); - rewardOut.setDuration(ms_to_us(task.reward_dur_ms.value)); - if (task.mode.value != Report) { - audioOut.setEnabled(true); - audioOut.setOnset(0); - audioOut.setDuration(ms_to_us(task.aud_dur_ms.value)); - audioOut.setBlinkDuration( calc_blink_duration(task.aud_tick_hz.value) ); - } + assignCues(task, false); + break; + } + + // assign Auditory cues (if any) + switch (task.mode.value) { + case Pair: + case Report: + break; + case Associate: + case Motion: + case MotionAlt: + audioOut.setEnabled(true); + audioOut.setOnset(0); + audioOut.setDuration(cued_dur_us); + audioOut.setBlinkDuration( calc_blink_duration(task.aud_tick_hz.value) ); break; } @@ -68,8 +78,17 @@ whisking_events.clear(); } -void Trial::assignRandomStim(const Task& task) +void Trial::assignCues(const Task& task, const bool& assignVisual) { + if (!assignVisual) { + visualOut.setEnabled(false); + vis_dur_us = 0; + vis_onset_us = 0; + + cued_dur_us = ms_to_us(task.aud_dur_ms.value); + return; + } + const uint32_t phasedur_us = ms_to_us(task.aud_dur_ms.value); const uint32_t minonset_us = ms_to_us(task.pre_min_ms.value); const uint32_t respdur_us = ms_to_us(task.resp_dur_ms.value); @@ -95,11 +114,16 @@ vis_dur_us = dur_us; vis_onset_us = onset_us; + + cued_dur_us = onset_us + dur_us + respdur_us; + } else { // no pulse visualOut.setEnabled(false); vis_dur_us = 0; vis_onset_us = 0; + + cued_dur_us = phasedur_us; } }