From 2edde252fd9ee413cb4c2b8e362ac18bcfdbef3d Mon Sep 17 00:00:00 2001 From: Gregory Jefferis Date: Sat, 31 Aug 2024 02:09:20 +0100 Subject: [PATCH 1/5] Use optional dataframe to supplement fanc_meta * this is a hack of course * if we keep it then we should try to make it more generic and allow other datasets to do something similar --- R/meta.R | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/R/meta.R b/R/meta.R index e8e1de0..ac7bf27 100644 --- a/R/meta.R +++ b/R/meta.R @@ -172,7 +172,28 @@ 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.fancmeta') + if(!is.null(metaf)) { + ext=tools::file_ext(metaf) + df2=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!") + + 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 } banc_meta <- function(ids=NULL, ...) { From c5437b047d0e57b76ff397aa7913b9001723146d Mon Sep 17 00:00:00 2001 From: Gregory Jefferis Date: Sat, 31 Aug 2024 02:10:20 +0100 Subject: [PATCH 2/5] coconatfly.fancmeta can be a function or an R call * necessary if we want to do something such as trigger/update a remote download --- R/meta.R | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/R/meta.R b/R/meta.R index ac7bf27..45ce8d3 100644 --- a/R/meta.R +++ b/R/meta.R @@ -175,13 +175,23 @@ fanc_meta <- function(ids=NULL, ...) { df=fancr::with_fanc(fancorbanc_meta(table='neuron_information', ids=ids, ...)) metaf=getOption('coconatfly.fancmeta') if(!is.null(metaf)) { - ext=tools::file_ext(metaf) - df2=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!") + # 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) |> From 5b273db9ff510c389539f1fe932487d4d5d6c793 Mon Sep 17 00:00:00 2001 From: Gregory Jefferis Date: Sat, 31 Aug 2024 02:18:19 +0100 Subject: [PATCH 3/5] uniform side encoding --- R/meta.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/meta.R b/R/meta.R index 45ce8d3..388109f 100644 --- a/R/meta.R +++ b/R/meta.R @@ -203,6 +203,7 @@ fanc_meta <- function(ids=NULL, ...) { df <- left_join(data.frame(id=ids), df, by='id') } } + df$side=sub("HS|idline$", "", df$side) df } From d01af6566510ee496e0224e73c88f855a84bf1d5 Mon Sep 17 00:00:00 2001 From: Gregory Jefferis Date: Sat, 31 Aug 2024 14:09:53 +0100 Subject: [PATCH 4/5] add experimental support for our fanc metadata * sourced from neck connective repo --- R/meta.R | 2 +- R/zzz.R | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 R/zzz.R diff --git a/R/meta.R b/R/meta.R index 388109f..28e95bf 100644 --- a/R/meta.R +++ b/R/meta.R @@ -173,7 +173,7 @@ manc_meta <- function(ids, ...) { fanc_meta <- function(ids=NULL, ...) { ids=fanc_ids(ids) df=fancr::with_fanc(fancorbanc_meta(table='neuron_information', ids=ids, ...)) - metaf=getOption('coconatfly.fancmeta') + metaf=getOption('coconatfly.fanc_meta') if(!is.null(metaf)) { # we can use an unevaluated call as an option # by evaluating we can trigger function 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() +} From 895549d3ca7438879ee4646d4369c7c789b0742d Mon Sep 17 00:00:00 2001 From: Gregory Jefferis Date: Sat, 31 Aug 2024 18:53:13 +0100 Subject: [PATCH 5/5] missing import - data.table * needed for reading tsvs --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) 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),