fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

trial.cpp

Committer:
gwappa
Date:
2018-05-23
Revision:
4:fcf597f82632
Parent:
3:991c6d5ce19d
Child:
5:849446d19406

File content as of revision 4:fcf597f82632:

#include "trial.h"
#include "IO.h"
#include "random.h"

void Trial::reset(const Task& task){
    // reset score
    response      = TrialFlags::Clear;
    
    // set delay duration
    delay_dur_ms  = task.delay_min_ms
                    + random::exponential(task.delay_var_ms, task.delay_var_ms*3);
    
    // set stim size
    switch(task.mode)
    {
    case Appear:
        if (random::unif(2) == 1) {
            response |= TrialFlags::Cues;
        }
        break;
    case Pair:
    default:
        response |= TrialFlags::Cues;
        break;
    }
    
    // reset interrupt events
    licking_events.clear();
    whisking_events.clear();
}

void Trial::writeToSerial() {
    switch(response){
#define WRITE_SCORE(SC,REPR) case SC: IO::write("%c%s;",IO::RESULT_HEADER,REPR); break;
        WRITE_SCORE(Responses::Hit,     "hit")
        WRITE_SCORE(Responses::Miss,    "miss")
        WRITE_SCORE(Responses::Catch,   "catch")
        WRITE_SCORE(Responses::Reject,  "reject")
        WRITE_SCORE(Responses::Reset,   "reset")
        WRITE_SCORE(Responses::NA,      "na")
#undef WRITE_SCORE
    }
    
    IO::write("wait%u",waiting);
    trialtime_t zero = (response == Responses::Reset)? starting : cuestarting;
    IO::write(";whisk");
    whisking_events.writeToSerial(zero);
    IO::write(";lick");
    licking_events.writeToSerial(zero);
    IO::write(";\r\n");
}