Keisuke Sehara / Mbed 2 deprecated STM32_Whisking

Dependencies:   mbed

Revision:
14:af3adf5d5ddf
Parent:
13:8ea85a33e37a
Child:
15:20f7f737c256
--- a/trial.cpp	Mon Jun 25 13:20:00 2018 +0000
+++ b/trial.cpp	Mon Jun 25 14:47:41 2018 +0000
@@ -2,6 +2,7 @@
 #include "rig.h"
 #include "IO.h"
 #include "random.h"
+#include "events.h"
 
 const uint64_t MicrosecondsInSecond = 1000000;
 
@@ -17,6 +18,7 @@
                     
     // generate visual stimulus
     if ((task.mode.value == Report) || (task.mode.value == Associate)) {
+        visualOut.attachTurnOnCallback(&events::gate);
         assignRandomStim(task);
     } else {
         vis_cued        = false;
@@ -33,18 +35,20 @@
 {
     const uint32_t  phasedur_us = ms_to_us(task.aud_dur_ms.value);
     const uint32_t  respdur_us  = ms_to_us(task.resp_dur_ms.value);
+    const uint32_t  avgdur_us   = ms_to_us(task.vis_avg_ms.value);
     const uint32_t  mindur_us   = ms_to_us(task.vis_min_ms.value);
     const double    failure_perc = (double)(task.vis_fail_perc.value);
     
     const double    validphase  = (double)(phasedur_us - respdur_us - mindur_us);
-    const double    taudenom    = 2.0 - ::log(failure_perc);
-    const uint32_t  tau         = (uint32_t)(validphase/taudenom + 0.5);
+    const double    taudenom    = ::log(100.0) - ::log(failure_perc);
+    const double    ftau        = validphase/taudenom;
+    const uint32_t  tau         = (uint32_t)(ftau + 0.5);
     const uint32_t  onset       = random::exponential(tau, validphase);
     
     if (onset < validphase) {
         // generate duration
         const uint32_t durvar   = validphase - onset;
-        const uint32_t duration = random::unif(durvar) + mindur_us;
+        const uint32_t duration = random::exponential(avgdur_us, durvar) + mindur_us;
         
         visualOut.setDuration(duration);
         visualOut.setOnset(onset);