Report generated on 2022-04-27.

path = list()
path$movat <- "Z:/Histology/Movat/SVS"
path$ab <- "Z:/Histology/Alcian Blue/SVS"
fn <- function(path){
  dta <- data.frame(files = list.files(path=path, pattern="svs$")) %>%
    mutate(files = str_remove(files, "\\.svs"))
  dta <- dta %>% 
    separate(files, 
           into=c("stain", "id", "info", "extra"),
           sep = " ") %>%
  separate(info, into=c("rgn", "slidenum", "sliceid")) %>%
  mutate(slidenum = as.integer(slidenum))
  # pull out slides with multiple regions and separate rows
  t <- dta %>% 
  filter(str_detect(rgn, pattern="[A-z]{2}")) %>%
  filter(rgn != c("IL", "GCP"))
  rgn_compound <- t %>% pull(rgn) %>% unique()
  t <- t %>% 
  mutate(
    R = ifelse(str_detect(rgn, "R"), 1, NA),
    P = ifelse(str_detect(rgn, "P"), 1, NA),
    M = ifelse(str_detect(rgn, "M"), 1, NA),
    D = ifelse(str_detect(rgn, "D"), 1, NA)
  ) %>%
  pivot_longer(
    cols=c("R","P","M", "D"),
    names_to = c("rgn_stdrd"),
    values_drop_na = T
  ) %>%
  select(-value)
  # create standard region variable
  rgn_stdrd <- c("R", "P", "M", "D", "O")
  t2 <- dta %>%
  filter(!rgn %in% rgn_compound) %>%
  mutate(rgn_stdrd =
           case_when(rgn %in% rgn_stdrd ~ rgn,
                     rgn %in% c("IL") ~ "O",
                     str_detect(rgn, pattern="[0-9]+") ~ 
                       str_extract(rgn, pattern="[A-z]+"),
                     TRUE ~ "O"
         )) 
  dta <- rbind(t2, t)
  # extract mat-#, fill out dataframe with all possible values
  controls <- dta %>% filter(str_detect(id, "^D")) %>% pull(id)
  subjects <- dta %>% filter(str_detect(id, "^MAT-")) %>% mutate(matnum = as.numeric(str_remove(id, "MAT-"))) %>% pull(matnum)
  dta <- dta %>% 
    mutate(matnum = as.numeric(case_when(
    id %in% controls ~ paste0(9, str_extract(id, "[0-9]+")),
    !id %in% controls ~ str_extract(id, "[0-9]+"),
    TRUE ~ NA_character_
  )))
  dta <- full_join(dta, expand_grid(matnum=seq(1, max(subjects)), rgn_stdrd=rgn_stdrd)) %>%
    mutate(have_slide = ifelse(is.na(id), 0, 1))
  return(dta)
}
fn_label <- function(data){
  if(data[1,"stain"]=="MOV"){
    stain <- "Movat"
  } else if(data[1,"stain"]=="AB"){
    stain <- "Alcian Blue"
  } else if(data[1,"stain"=="MAS"]){
    stain <- "Masson Trichrome"
  }
  
  dta <- data %>%
    labelled::set_variable_labels(
      rgn_stdrd = "Region",
      have_slide = paste(stain, "Scanned?"),
      matnum = "MAT-#"
  ) %>%
    labelled::set_value_labels(
      rgn_stdrd = c(Root="R", Prox="P", Mid="M", Dist="D", Other="O"),
      have_slide = c(Yes=1, No=0),
      .strict=F
    )
  return(dta)
}

fn_tile <- function(data){
  plot <- labelled::unlabelled(data, ordered=T) %>%
    filter(!str_detect(id, "^D") | is.na(id)) %>% 
    ggplot(aes(y=matnum, x=rgn_stdrd))+
    geom_tile(aes(fill=have_slide), col="black")+
    scale_fill_manual(values=c("green", "grey50"))+
    theme_classic()+ggeasy::easy_labs()+
    theme(legend.position="top")
  return(plot)
}
dta_mvt <- fn(path$movat)

dta_mvt <- fn_label(dta_mvt)

fn_tile(dta_mvt)

dta_ab <- fn(path$ab)

dta_ab <- fn_label(dta_ab)

fn_tile(dta_ab)

dta <- full_join(
  subset(dta_ab, have_slide==1, select = -c(slidenum:extra,stain))%>%rename(have_ab=have_slide),
  subset(dta_mvt, have_slide==1, select = -c(slidenum:extra,stain))%>%rename(have_mvt=have_slide)
)
dta <- dta %>%
  mutate(have_which = case_when(
    have_ab==1 & have_mvt==1 ~ 2,
    have_ab==1 & is.na(have_mvt) ~ 1,
    is.na(have_ab) & have_mvt==1 ~ 0,
    TRUE ~ NA_real_
  )) %>%
  set_variable_labels(
    have_which = "Slides Scanned",
    matnum = "MAT-#") %>%
  add_value_labels(
    have_which = c("Both"=2, "Alcian Blue"=1, "Movat"=0)
  )
labelled::unlabelled(dta, ordered=T) %>% 
  filter(str_detect(id, "MAT")) %>%
  ggplot(aes(x=rgn_stdrd, y=matnum))+
  geom_tile(aes(fill=have_which), col="black")+
  scale_fill_manual(values=c("yellow","blue", "orchid"))+
  theme_classic()+
  ggeasy::easy_labs()+
  theme(legend.position="top")+
  facet_wrap(~have_which)