Running an Experiment in MATLAB

Using the Zapit API in MATLAB

The following example function presents 20 random stimuli using software timing.

function myStimPresenter
    
    % Get the API object from the base workspace
    hZP = zapit.utils.getObject;
    if isempty(hZP)
        return
    end

    if hZP.isReadyToStim == false
        fprintf('Zapit is not ready to stimulate.\n')
        return
    end

    % Present 20 random stimuli without waiting for a hardware trigger
    for ii = 1:20
        hZP.sendSamples('hardwareTriggered',false) % Starts right away
        pause(1) % Wait approx 1s 
        hZP.stopOptoStim
        pause(0.3) % Because of https://github.com/Zapit-Optostim/zapit/issues/102
    end

end

The following function presents 20 random stimuli using an external hardware trigger:

function myStimPresenter
    
    % Get the API object from the base workspace
    hZP = zapit.utils.getObject;
    if isempty(hZP)
        return
    end

    if hZP.isReadyToStim == false
        fprintf('Zapit is not ready to stimulate.\n')
        return
    end

    % Present 20 random 1 second stimuli without waiting for a hardware trigger
    for ii = 1:20
        hZP.sendSamples('hardwareTriggered',true,'stimDurationSeconds',1)
    end
end

Note the 0.3 seconds pause after the stopOptoStim in the first example. This is to take into account the laser power ramp-down time which is triggered by stopOptoStim. The system will not respond to an external trigger during this period in hardware triggered mode. The pause is almost certainly only needed during demo code. In reality it is unlikely one trial will follow the previous one with a latency of <300 ms. Add a timeout to your behavior code to avoid this should it be a possibility.

Last updated