diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 9711021..c822e87 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -22,6 +22,7 @@ jobs: NEUPRINT_TOKEN: ${{ secrets.NEUPRINT_TOKEN }} CLIO_TOKEN: ${{ secrets.CLIO_TOKEN }} FLYWIRE_PRINCIPLES: IAGREETOTHEFLYWIREPRINCIPLES + CHUNKEDGRAPH_SECRET: ${{ secrets.CHUNKEDGRAPH_SECRET }} steps: - uses: actions/checkout@v3 diff --git a/DESCRIPTION b/DESCRIPTION index 7e89ae4..ca91afc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -19,7 +19,7 @@ Depends: R (>= 2.10), nat (>= 1.10.2.9000) Imports: - fafbseg (>= 0.14.1), + fafbseg (>= 0.15.0), nat.templatebrains (>= 1.0), pbapply, neuprintr (>= 1.3.2), @@ -29,10 +29,11 @@ Imports: coconat (>= 0.1.2), stringr, magrittr, - bit64 + bit64, + usethis Suggests: malevnc (> 0.3.1), - fancr, + fancr (>= 0.5.0), testthat (>= 3.0.0), ComplexHeatmap, InteractiveComplexHeatmap, @@ -55,7 +56,7 @@ Remotes: catmaid=natverse/rcatmaid, natverse/nat.h5reg, natverse/coconat -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 URL: https://github.com/flyconnectome/coconatfly, https://flyconnectome.github.io/coconatfly/ BugReports: https://github.com/flyconnectome/coconatfly/issues diff --git a/NAMESPACE b/NAMESPACE index d11b4ad..9933e79 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -28,6 +28,7 @@ importFrom(dplyr,group_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,n_distinct) +importFrom(dplyr,pull) importFrom(dplyr,rename) importFrom(dplyr,rename_with) importFrom(dplyr,select) diff --git a/R/datasets.R b/R/datasets.R index c00b864..5297101 100644 --- a/R/datasets.R +++ b/R/datasets.R @@ -1,6 +1,6 @@ cf_datasets <- function(rval=c("all", 'available')) { rval=match.arg(rval) - datasets=c("flywire", "malecns", 'manc', 'fanc', 'hemibrain', 'opticlobe') + datasets=c("flywire", "malecns", 'manc', 'fanc', 'hemibrain', 'opticlobe', 'banc') if(rval=='all') datasets else @@ -25,13 +25,13 @@ match_datasets <- function(ds) { abbreviate_datasets <- function(ds) { ds=match_datasets(ds) abbrevlist=c(hemibrain='hb', flywire='fw', manc='mv', fanc='fv', malecns='mc', - opticlobe='ol') + opticlobe='ol', banc='bc') unname(abbrevlist[ds]) } lengthen_datasets <- function(ds) { longlist=c(hb="hemibrain", fw="flywire", mv="manc", fv="fanc", mc="malecns", - ol='opticlobe') + ol='opticlobe', bc='banc') ds=match.arg(ds, names(longlist), several.ok = T) unname(longlist[ds]) } diff --git a/R/ids.R b/R/ids.R index d8dd159..cd2bc01 100644 --- a/R/ids.R +++ b/R/ids.R @@ -8,6 +8,19 @@ id2int64 <- function(x) { bit64::as.integer64(x) } +# extract numeric ids but pass on other character vectors such as queries +# always returns bit64 so results are easy to spot +extract_ids <- function(x) { + if(is.character(x) && length(x)==1 && !fafbseg:::valid_id(x, na.ok = T) && !grepl("http", x) && grepl("^\\s*(([a-z:]{1,3}){0,1}[0-9,\\s]+)+$",x, perl=T)) { + sx=gsub("[a-z:,\\s]+"," ", x, perl = T) + x=scan(text = trimws(sx), sep = ' ', what = '', quiet = T) + x <- id2int64(x) + } + if(is.numeric(x) || is.integer(x)) { + x <- id2int64(x) + } + x +} #' Interconvert between keys and ids/datasets #' @@ -101,6 +114,8 @@ is_key <- function(x, compound=FALSE) { #' @param opticlobe Pass opticlobe specific query or ids to this argument #' @param fanc Pass fanc ids to this argument (at present we do not support #' metadata queries for fanc) +#' @param banc Pass banc ids to this argument (we only support basic metadata +#' queries for banc) #' #' @details all neuprint datasets (hemibrain, malevnc, opticlobe, malecns) use #' the same query syntax although some fields may be dataset specific (see @@ -130,11 +145,11 @@ is_key <- function(x, compound=FALSE) { cf_ids <- function( query=NULL, datasets=c("brain", "vnc", "hemibrain", "flywire", "malecns", "manc", "fanc", - "opticlobe"), + "opticlobe", "banc"), expand=FALSE, keys=FALSE, hemibrain=NULL, flywire=NULL, malecns=NULL, manc=NULL, fanc=NULL, - opticlobe=NULL) { + opticlobe=NULL, banc=NULL) { nds=sum( !is.null(hemibrain), @@ -142,7 +157,8 @@ cf_ids <- function( !is.null(malecns), !is.null(manc), !is.null(fanc), - !is.null(opticlobe) + !is.null(opticlobe), + !is.null(banc) ) res <- if(!is.null(query)) { if(nds>0) @@ -152,15 +168,16 @@ cf_ids <- function( datasets=match.arg(datasets, several.ok = T) if('brain' %in% datasets) - datasets=union(datasets[datasets!='brain'], c("hemibrain", "flywire", "malecns")) + datasets=union(datasets[datasets!='brain'], c("hemibrain", "flywire", "malecns", "banc")) if('vnc' %in% datasets) datasets=union(datasets[datasets!='vnc'], c("manc", "fanc")) datasets=unique(datasets) structure(as.list(rep(query, length(datasets))), .Names=datasets) } else { if(nds==0) - stop("You must supply either the `query` argument or one of hemibrain:opticlobe!") - l=list(hemibrain=hemibrain, flywire=flywire, malecns=malecns, manc=manc, fanc=fanc, opticlobe=opticlobe) + stop("You must supply either the `query` argument or one of hemibrain:banc!") + l=list(hemibrain=hemibrain, flywire=flywire, malecns=malecns, manc=manc, + fanc=fanc, opticlobe=opticlobe, banc=banc) # drop any empty datasets l[lengths(l)>0] } @@ -230,6 +247,7 @@ expand_ids <- function(ids, dataset) { manc=malevnc::manc_ids, fanc=I, malecns=malecns::mcns_ids, + banc=banc_ids, flywire=function(ids) fafbseg::flywire_ids(ids, version=fafbseg::flywire_connectome_data_version()), function(ids) neuprintr::neuprint_ids(ids, conn=npconn(dataset))) tf=try(FUN(ids), silent = T) diff --git a/R/meta.R b/R/meta.R index 522f9c5..725162a 100644 --- a/R/meta.R +++ b/R/meta.R @@ -161,3 +161,92 @@ fanc_meta <- function(ids, ...) { data.frame(id=fancr::fanc_ids(ids), type=NA, side=NA) } +banc_meta <- function(ids=NULL, ...) { + ids=banc_ids(ids) + # cell_info %>% tidyr::pivot_wider(id_cols = pt_root_id, names_from = tag2, values_from = tag, values_fn = function(x) paste(x, collapse = ';')) %>% colnames() + fid=list(tag2=c('primary class',"anterior-posterior projection pattern", "neuron identity")) + # FIXME - think of a better workaround for the fact that ids may not be in + # correct materialisation state + # if(length(ids)>0) { + # fid[['pt_root_id']]=ids + # } + fid=list(cell_info=fid) + selc=list(cell_info=c("id", "tag", "tag2", "pt_root_id", 'pt_supervoxel_id')) + + cell_infos=fancr::with_banc( + fafbseg::flywire_cave_query('cell_info', filter_in_dict=fid, select_columns=selc, + version='latest', timetravel = T, allow_missing_lookups=T)) + metadf <- if(nrow(cell_infos)<1) { + df=data.frame(id=character(), class=character(), type=character(), side=character()) + } else { + cell_infosw <- cell_infos %>% + mutate(tag=sub("\n\n\n*banc-bot*","", fixed = T, tag)) %>% + tidyr::pivot_wider(id_cols = pt_root_id, + names_from = tag2, + values_from = tag, + values_fn = function(x) { + sux=sort(unique(x)) + # try removing ? + sux2=sort(unique(sub("?","", x, fixed = T))) + if(length(sux2)% + rename(id=pt_root_id, class=`primary class`, apc=`anterior-posterior projection pattern`,type=`neuron identity`) %>% + mutate(class=case_when( + class=='sensory neuron' & grepl('scending', apc) ~ paste('sensory', apc), + (is.na(class) | class=='central neuron') & apc=='ascending' ~ 'ascending', + (is.na(class) | class=='central neuron') & apc=='descending' ~ 'descending', + is.na(apc) & is.na(class) ~ 'unknown', + is.na(apc) ~ class, + T ~ paste(class, apc) + )) %>% + mutate(class=sub(" neuron", '', class)) %>% + select(id, class, type) %>% + mutate(id=as.character(id), side=NA) + } + if(length(ids)) + left_join(data.frame(id=ids), metadf, by='id') + else + metadf +} + +#' @importFrom dplyr pull +banc_ids <- function(ids) { + # extract numeric ids if possible + ids <- extract_ids(ids) + if(is.character(ids) && length(ids)==1 && !fafbseg:::valid_id(ids)) { + # query + metadf=banc_meta() + if(isTRUE(ids=='all')) return(fancr::fanc_ids(metadf$id, integer64 = F)) + if(isTRUE(ids=='neurons')) { + ids <- metadf %>% + filter(is.na(.data$class) | .data$class!='glia') %>% + pull(.data$id) + return(fancr::fanc_ids(ids, integer64 = F)) + } + if(substr(ids, 1, 1)=="/") + ids=substr(ids, 2, nchar(ids)) + if(!grepl(":", ids)) ids=paste0("type:", ids) + qsplit=stringr::str_match(ids, pattern = '[/]{0,1}(.+):(.+)') + field=qsplit[,2] + value=qsplit[,3] + if(!field %in% colnames(metadf)) { + stop("banc queries only work with these fields: ", + paste(colnames(metadf)[-1], collapse = ',')) + } + ids <- metadf %>% + filter(grepl(value, .data[[field]])) %>% + pull(.data$id) + } else if(length(ids)>0) { + # check they are valid for current materialisation + ids=fancr::with_banc(fafbseg::flywire_latestid(ids, version = banc_version())) + } + return(fancr::fanc_ids(ids, integer64 = F)) +} + +banc_version <- function() { + bcc=fancr::banc_cave_client() + ver=bcc$materialize$version + ver +} diff --git a/R/partners.R b/R/partners.R index 57e8a55..c3b6970 100644 --- a/R/partners.R +++ b/R/partners.R @@ -85,6 +85,15 @@ cf_partners <- function(ids, threshold=1L, partners=c("inputs", "outputs"), } else if (n=='fanc') { tres=fancr::fanc_partner_summary(ids[[n]], partners = partners, threshold = threshold-1L) + } else if (n=='banc') { + bids=banc_ids(ids[[n]]) + tres=fancr::with_banc(fancr::fanc_partner_summary(bids, partners = partners, + threshold = threshold-1L, version=banc_version())) + partner_col=grep("_id", colnames(tres), value = T) + # metadf=banc_meta(tres[[partner_col]]) + metadf=banc_meta() + colnames(metadf)[[1]]=partner_col + tres=left_join(tres, metadf, by = partner_col) } else if(n=='manc') { tres=malevnc::manc_connection_table(ids[[n]],partners = partners, threshold=threshold, chunk = neuprint.chunksize) tres %>% dplyr::select(partner, type, name) %>% dplyr::rename(bodyid=partner) diff --git a/R/utils.R b/R/utils.R index b766b95..1e58149 100644 --- a/R/utils.R +++ b/R/utils.R @@ -42,27 +42,54 @@ cf_connections <- function() { version=as.character(ver)) # fanc + dslist[['fanc']]=check_fanc() + dslist[['banc']]=check_banc() + dslist + as.data.frame(dplyr::bind_rows(dslist, .id = 'dataset')) +} + + +check_fanc <- function() { if(requireNamespace('fancr', quietly = T)) { - furl=try({ - u=fancr::with_fanc(fafbseg:::check_cloudvolume_url(set = F)) - sub('graphene://','', u) - }) - if(inherits(furl, 'try-error')) furl=NA_character_ - ver=tryCatch({ - fcc=fancr::fanc_cave_client() - as.character(fcc$materialize$version) - }, error=function(e) NA_character_) + have_token=!inherits(try(fafbseg::chunkedgraph_token(), silent = TRUE), 'try-error') + if(have_token) { + furl=try({ + u=fancr::with_fanc(fafbseg:::check_cloudvolume_url(set = F), force = F) + sub('graphene://','', u) + }, silent = T) + if(inherits(furl, 'try-error')) furl=NA_character_ + ver <- if(is.na(furl)) NA_character_ + else { + ver=try(silent = T, { + fcc=fancr::fanc_cave_client() + as.character(fcc$materialize$version) + }) + if(inherits(ver, 'try-error')) ver=NA_character_ + } + } else { + furl=NA_character_ + ver=NA_character_ + } fres=list(installed=T, server=furl, version=ver) } else { fres=list(installed=F, server=NA_character_, version=NA_character_) } - dslist[['fanc']]=fres - dslist - as.data.frame(dplyr::bind_rows(dslist, .id = 'dataset')) + fres } +check_banc <- function() { + if(requireNamespace('fancr', quietly = T)) { + fres=try(fancr::with_banc(check_fanc()), silent = T) + if(inherits(fres, 'try-error')) + fres=list(installed=T, server=NA_character_, version=NA_character_) + } else { + usethis::ui_info('Access to the BANC Dataset requires installation of fancr!') + fres=list(installed=F, server=NA_character_, version=NA_character_) + } + fres +} #' Status report for coconatfly installation #' @@ -118,5 +145,19 @@ dr_coconatfly <- function() { cli::cli_alert_danger( "To debug connection issues to the fanc dataset, try:\n{.code fancr::dr_fanc()}") + if(!isTRUE(filter(cfc, .data$dataset=='banc')$installed)) + cli::cli_alert_danger( + "To use the fancr dataset do:\n{.code natmanager::install(pkgs = 'fancr')}") + else if(is.na(filter(cfc, .data$dataset=='banc')$server)) + cli::cli_alert_danger( + "To debug connection issues to the banc dataset, try:\n{.code fancr::dr_fanc()}") + + # special case of most common auth issue + have_token=!inherits(try(fafbseg::chunkedgraph_token(), silent = TRUE), 'try-error') + if(!have_token) + usethis::ui_info(paste0( + 'No CAVE token found. This is required to access fanc/banc datasets!\n', + "Set one with {usethis::ui_code('fancr::fanc_set_token()')}")) + invisible(cfc) } diff --git a/README.Rmd b/README.Rmd index 78ac197..2f0011e 100644 --- a/README.Rmd +++ b/README.Rmd @@ -50,9 +50,10 @@ At present the following datasets are supported (dataset names used in the packa 4. Wei Lee, John Tuthill and colleagues [Female Adult Nerve Cord](https://github.com/htem/FANC_auto_recon) (**fanc**) 5. Janelia Male CNS (**malecns**) 6. Janelia Male Optic Lobe (part of the malecns) (**opticlobe**) +7. Wei Lee and colleagues [Brain and Nerve Cord](https://github.com/jasper-tms/the-BANC-fly-connectome/wiki) (**banc**) -Datasets 1-4 and 6 are either public (hemibrain, manc, flywire, opticlobe) or -access can be requested subject to agreeing to certain terms of use (fanc). +Datasets 1-4 and 7 are either public (hemibrain, manc, flywire, opticlobe) or +access can be requested subject to agreeing to certain terms of use (fanc, banc). The Male CNS dataset is currently undergoing proofreading and annotation in a collaboration between the [FlyEM](https://www.janelia.org/project-team/flyem) and diff --git a/README.md b/README.md index 20b1933..0f6dd93 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,13 @@ the package in brackets): Cord](https://github.com/htem/FANC_auto_recon) (**fanc**) 5. Janelia Male CNS (**malecns**) 6. Janelia Male Optic Lobe (part of the malecns) (**opticlobe**) +7. Wei Lee and colleagues [Brain and Nerve + Cord](https://github.com/jasper-tms/the-BANC-fly-connectome/wiki) + (**banc**) -Datasets 1-4 and 6 are either public (hemibrain, manc, flywire, +Datasets 1-4 and 7 are either public (hemibrain, manc, flywire, opticlobe) or access can be requested subject to agreeing to certain -terms of use (fanc). The Male CNS dataset is currently undergoing +terms of use (fanc, banc). The Male CNS dataset is currently undergoing proofreading and annotation in a collaboration between the [FlyEM](https://www.janelia.org/project-team/flyem) and [Cambridge Drosophila Connectomics Group](https://flyconnecto.me). Release is @@ -107,40 +110,40 @@ cf_meta(cf_ids('DA1_lPN', datasets = 'hemibrain')) #> 5 722817260 701 2435 2435 5635 Traced Roughly traced 1104413432 #> 6 754534424 646 2364 2364 5309 Traced Roughly traced 1265805547 #> 7 754538881 623 2320 2320 4867 Traced Roughly traced 1217284590 -#> cropped instance type cellBodyFiber notes soma side class group -#> 1 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R -#> 2 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R -#> 3 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R -#> 4 FALSE DA1_lPN_R DA1_lPN AVM02 FALSE R -#> 5 FALSE DA1_lPN_R DA1_lPN AVM02 FALSE R -#> 6 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R -#> 7 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R -#> dataset key -#> 1 hemibrain hb:1734350788 -#> 2 hemibrain hb:1734350908 -#> 3 hemibrain hb:1765040289 -#> 4 hemibrain hb:5813039315 -#> 5 hemibrain hb:722817260 -#> 6 hemibrain hb:754534424 -#> 7 hemibrain hb:754538881 +#> cropped instance type lineage notes soma side class group dataset +#> 1 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R hemibrain +#> 2 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R hemibrain +#> 3 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R hemibrain +#> 4 FALSE DA1_lPN_R DA1_lPN AVM02 FALSE R hemibrain +#> 5 FALSE DA1_lPN_R DA1_lPN AVM02 FALSE R hemibrain +#> 6 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R hemibrain +#> 7 FALSE DA1_lPN_R DA1_lPN AVM02 TRUE R hemibrain +#> key +#> 1 hb:1734350788 +#> 2 hb:1734350908 +#> 3 hb:1765040289 +#> 4 hb:5813039315 +#> 5 hb:722817260 +#> 6 hb:754534424 +#> 7 hb:754538881 ``` We can also do that for multiple brain datasets ``` r da1meta <- cf_meta(cf_ids('DA1_lPN', datasets = c('hemibrain', 'flywire'))) -#> Updating 5266 ids -#> flywire_rootid_cached: Looking up 5266 missing keys -#> Updating 4089 ids -#> flywire_rootid_cached: Looking up 4089 missing keys +#> Updating 6641 ids +#> flywire_rootid_cached: Looking up 6641 missing keys +#> Updating 5480 ids +#> flywire_rootid_cached: Looking up 5480 missing keys head(da1meta) -#> id side class type group instance dataset -#> 1 720575940604407468 R central DA1_lPN DA1_lPN_R flywire -#> 2 720575940623543881 R central DA1_lPN DA1_lPN_R flywire -#> 3 720575940637469254 R central DA1_lPN DA1_lPN_R flywire -#> 4 720575940614309535 L central DA1_lPN DA1_lPN_L flywire -#> 5 720575940617229632 R central DA1_lPN DA1_lPN_R flywire -#> 6 720575940619385765 L central DA1_lPN DA1_lPN_L flywire +#> id side class type lineage group instance dataset +#> 1 720575940604407468 R central DA1_lPN ALl1_ventral DA1_lPN_R flywire +#> 2 720575940623543881 R central DA1_lPN ALl1_ventral DA1_lPN_R flywire +#> 3 720575940637469254 R central DA1_lPN ALl1_ventral DA1_lPN_R flywire +#> 4 720575940614309535 L central DA1_lPN ALl1_ventral DA1_lPN_L flywire +#> 5 720575940617229632 R central DA1_lPN ALl1_ventral DA1_lPN_R flywire +#> 6 720575940619385765 L central DA1_lPN ALl1_ventral DA1_lPN_L flywire #> key #> 1 fw:720575940604407468 #> 2 fw:720575940623543881 @@ -182,21 +185,21 @@ da1ds %>% summarise(weight=sum(weight), npre=n_distinct(pre_id), npost=n_distinct(post_id)) #> `summarise()` has grouped output by 'type', 'dataset'. You can override using #> the `.groups` argument. -#> # A tibble: 343 × 6 -#> # Groups: type, dataset [269] +#> # A tibble: 381 × 6 +#> # Groups: type, dataset [289] #> type dataset side weight npre npost #> -#> 1 AL-AST1 flywire L 16 2 1 -#> 2 AL-AST1 flywire R 13 2 1 +#> 1 AL-AST1 flywire L 31 5 1 +#> 2 AL-AST1 flywire R 18 3 1 #> 3 AL-AST1 hemibrain R 25 3 1 -#> 4 APL flywire L 28 4 1 +#> 4 APL flywire L 43 7 1 #> 5 APL flywire R 70 6 1 #> 6 APL hemibrain R 113 6 1 -#> 7 AVLP010 flywire L 6 1 1 -#> 8 AVLP011,AVLP012 flywire L 6 1 1 -#> 9 AVLP011,AVLP012 flywire R 22 2 1 -#> 10 AVLP013 flywire L 14 2 1 -#> # ℹ 333 more rows +#> 7 AVLP010 flywire L 11 2 1 +#> 8 AVLP010 flywire R 5 1 1 +#> 9 AVLP011,AVLP012 flywire L 11 2 1 +#> 10 AVLP011,AVLP012 flywire R 27 3 1 +#> # ℹ 371 more rows ``` Let’s restrict that to types that are observed in both datasets. We do @@ -217,21 +220,21 @@ da1ds.shared_types.wide <- da1ds %>% #> `summarise()` has grouped output by 'type', 'dataset'. You can override using #> the `.groups` argument. da1ds.shared_types.wide -#> # A tibble: 39 × 4 -#> # Groups: type [39] +#> # A tibble: 42 × 4 +#> # Groups: type [42] #> type fw_L fw_R hb_R #> -#> 1 AL-AST1 16 13 25 -#> 2 APL 28 70 113 -#> 3 DA1_lPN 45 6 73 +#> 1 AL-AST1 31 18 25 +#> 2 APL 43 70 113 +#> 3 DA1_lPN 50 11 73 #> 4 DA1_vPN 250 254 333 -#> 5 DNb05 6 0 5 -#> 6 KCg-m 3275 2545 3030 -#> 7 LHAD1d2 72 33 15 -#> 8 LHAD1g1 62 60 48 -#> 9 LHAV2b11 44 77 29 -#> 10 LHAV3k6 19 16 5 -#> # ℹ 29 more rows +#> 5 DL3_lPN 5 0 9 +#> 6 DNb05 6 0 5 +#> 7 KCg-m 3290 2575 3030 +#> 8 LHAD1d2 72 43 15 +#> 9 LHAD1g1 62 60 48 +#> 10 LHAV2b11 44 77 29 +#> # ℹ 32 more rows ``` With the data organised like this, we can easily compare the connection @@ -272,10 +275,10 @@ seems to work very well for this purpose. ``` r cf_cosine_plot(cf_ids('/type:LAL0(08|09|10|42)', datasets = c("flywire", "hemibrain"))) -#> Updating 5266 ids -#> Updating 4089 ids -#> Matching types across datasets. Dropping 478/977 output partner types with total weight 8849/23759 -#> Matching types across datasets. Dropping 735/1361 input partner types with total weight 10892/26928 +#> Updating 6641 ids +#> Updating 5480 ids +#> Matching types across datasets. Dropping 510/1052 output partner types with total weight 9007/24134 +#> Matching types across datasets. Dropping 793/1493 input partner types with total weight 11121/27588 ``` diff --git a/man/cf_ids.Rd b/man/cf_ids.Rd index 0a9f9b8..5d5cbc7 100644 --- a/man/cf_ids.Rd +++ b/man/cf_ids.Rd @@ -8,7 +8,7 @@ cf_ids( query = NULL, datasets = c("brain", "vnc", "hemibrain", "flywire", "malecns", "manc", "fanc", - "opticlobe"), + "opticlobe", "banc"), expand = FALSE, keys = FALSE, hemibrain = NULL, @@ -16,7 +16,8 @@ cf_ids( malecns = NULL, manc = NULL, fanc = NULL, - opticlobe = NULL + opticlobe = NULL, + banc = NULL ) \method{c}{cidlist}(..., unique = TRUE) @@ -47,6 +48,9 @@ metadata queries for fanc)} \item{opticlobe}{Pass opticlobe specific query or ids to this argument} +\item{banc}{Pass banc ids to this argument (we only support basic metadata +queries for banc)} + \item{...}{One or more lists generated by \code{cf_ids} that should be joined together} diff --git a/man/figures/README-flywire-left-vs-right-1.png b/man/figures/README-flywire-left-vs-right-1.png index 59291a3..19fbc49 100644 Binary files a/man/figures/README-flywire-left-vs-right-1.png and b/man/figures/README-flywire-left-vs-right-1.png differ diff --git a/man/figures/README-flywire-vs-hemibrain-1.png b/man/figures/README-flywire-vs-hemibrain-1.png index 8879d57..032a9c2 100644 Binary files a/man/figures/README-flywire-vs-hemibrain-1.png and b/man/figures/README-flywire-vs-hemibrain-1.png differ diff --git a/man/figures/README-lal-cosine-cluster-1.png b/man/figures/README-lal-cosine-cluster-1.png index e34b8ff..b70afd7 100644 Binary files a/man/figures/README-lal-cosine-cluster-1.png and b/man/figures/README-lal-cosine-cluster-1.png differ