diff --git a/DESCRIPTION b/DESCRIPTION index c17995f..cca4058 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,6 +31,7 @@ Imports: magrittr, bit64, usethis, + data.table, methods Suggests: malevnc (> 0.3.1), diff --git a/R/meta.R b/R/meta.R index e8e1de0..28e95bf 100644 --- a/R/meta.R +++ b/R/meta.R @@ -172,7 +172,39 @@ manc_meta <- function(ids, ...) { fanc_meta <- function(ids=NULL, ...) { ids=fanc_ids(ids) - fancr::with_fanc(fancorbanc_meta(table='neuron_information', ids=ids, ...)) + df=fancr::with_fanc(fancorbanc_meta(table='neuron_information', ids=ids, ...)) + metaf=getOption('coconatfly.fanc_meta') + if(!is.null(metaf)) { + # we can use an unevaluated call as an option + # by evaluating we can trigger function + if(is.call(metaf)) + metaf=eval(metaf) + else if(is.function(metaf)) + metaf=metaf() + + df2 <- if(is.data.frame(metaf)) + metaf + else if(is.character(metaf)) { + ext=tools::file_ext(metaf) + if(ext=='tsv') { + data.table::fread(metaf, integer64 = 'character') + } else if(ext=='feather') { + arrow::read_feather(metaf) + } else stop("Unsupported extension:", ext, " for FANC metadata file!") + } else stop("options('coconatfly.fancmeta') must be path to a file, a function or an unevaluated R `call`.") + df2$root_id=fancr::with_fanc(fafbseg::flywire_updateids(df2$root_id, df2$supervoxel_id, version = fanc_version())) + df2 <- df2 |> + rename(id=root_id) |> + select(-supervoxel_id, -cell_id) + df=dplyr::bind_rows(df2, df) + df <- df |> + filter(!duplicated(id)) + if(length(ids)>0) { + df <- left_join(data.frame(id=ids), df, by='id') + } + } + df$side=sub("HS|idline$", "", df$side) + df } banc_meta <- function(ids=NULL, ...) { diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 0000000..9a2143c --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,10 @@ +.onLoad <- function(libname, pkgname) { + # set up experimental extra + coconatfly.fanc_meta=getOption('coconatfly.fanc_meta') + if(is.null(coconatfly.fanc_meta)) { + options(coconatfly.fanc_meta=function() { + fafbseg::flywire_sirepo_file_memo('https://github.com/flyconnectome/2023neckconnective/blob/dev/data/fanc-neckconnective-anns.tsv', read=TRUE) + }) + } + invisible() +}