Nothing
## ----results="hide", message=FALSE--------------------------------------------
# Import libraries required for the vignette
library(eyelinker)
library(dplyr)
library(stringr)
library(tidyr)
library(ggplot2)
## ----results="hide", message=FALSE--------------------------------------------
# Read in example data
fpath <- system.file("extdata/mono250.asc.gz", package = "eyelinker")
asc <- read_asc(fpath)
## -----------------------------------------------------------------------------
asc$msg
## -----------------------------------------------------------------------------
trial_phases <- asc$msg %>%
mutate(
phase = case_when(
str_detect(text, "Initial_display") ~ "onset",
str_detect(text, "Target_display") ~ "target_on",
str_detect(text, "End_trial") ~ "trial_end"
)
) %>%
subset(!is.na(phase)) %>%
select(-c(text)) %>%
mutate(
phase = as.factor(phase)
)
## -----------------------------------------------------------------------------
trial_phases
## -----------------------------------------------------------------------------
sync_timestamps <- function(df, raw) {
# Get tracker sample rate and block onset timestamps from raw pupil data
ms_per_sample <- median(lead(raw$time)[1:10] - raw$time[1:10])
block_onsets <- raw %>%
group_by(block) %>%
summarize(onset = time[1])
# Adjust df so that its timestamps map onto the nearest sample timestamp
df <- df %>%
left_join(block_onsets, by = "block") %>%
group_by(block) %>%
mutate(
time = round((time - onset) / ms_per_sample) * ms_per_sample + onset
) %>%
select(-c(onset))
df
}
trial_phases <- sync_timestamps(trial_phases, asc$raw)
## -----------------------------------------------------------------------------
rawdat <- asc$raw %>%
left_join(trial_phases, by = c("block", "time")) %>%
group_by(block) %>%
fill(phase, .direction = "down")
## -----------------------------------------------------------------------------
rawdat <- rawdat %>%
subset(!is.na(phase)) %>%
group_by(block) %>%
mutate(
trialtime = time - time[1]
)
## -----------------------------------------------------------------------------
rawdat
## ----fig.width=6, fig.height=4------------------------------------------------
# Plot pupil size across the first 4 trials, color-coding by phase
ggplot(subset(rawdat, block < 5), aes(x = trialtime, y = ps, color = phase)) +
geom_line() +
facet_wrap(~ block) +
labs(color = "Phase") +
ylab("Pupil Size") +
xlab("Trial Time (ms)")
## -----------------------------------------------------------------------------
get_epochs <- function(msg, start, end = NULL, pad = c(0, 0)) {
end <- ifelse(is.null(end), start, end)
epochs <- msg %>%
group_by(block) %>%
# Select start/end event messages for each trial
filter(grepl(start, text) | grepl(end, text)) %>%
# If start != end and trial has no end event, discard trial
filter(n() >= ifelse(start == end, 1, 2)) %>%
# Get start and end timestamps for each trial, adding padding
summarize(
start = time[grepl(start, text)] - pad[1],
end = time[grepl(end, text)] + pad[2],
)
epochs
}
within_epoch <- function(time, epochs) {
time %within% cbind(epochs$start, epochs$end)
}
## -----------------------------------------------------------------------------
# Get the window of data between the trial start and end events for each trial
trial_windows <- get_epochs(asc$msg, start = "Initial", end = "End")
# Get the window of data 100 ms pre-target to 200 ms post-target for each trial
target_windows <- get_epochs(asc$msg, start = "Target", pad = c(100, 200))
## -----------------------------------------------------------------------------
raw_trial <- asc$raw %>%
filter(within_epoch(time, trial_windows))
raw_target <- asc$raw %>%
filter(within_epoch(time, target_windows))
## -----------------------------------------------------------------------------
raw_target %>%
group_by(block) %>%
summarize(duration = max(time) - min(time))
## -----------------------------------------------------------------------------
post_target <- get_epochs(asc$msg, start = "Target", end = "End")
asc$sacc %>%
filter(within_epoch(stime, post_target))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.