Distributed control circuits across a brain-and-cord connectome.
The 40 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
- [1] § Methods › Clustering influence by influence and connectivity ↔ R/04_indirect_connectivity.Rmd, lines 978–1094 · score 0.98 · dynamic tree cut, cutreeDynamic, deepSplit, minClusterSize, min_dist, n_neighbors
- [2] § Methods › Naming effector groups ↔ banc/annotations/franken-annotations-fix.R, lines 1071–1130 · score 0.97 · SEZ_NSC_CAPA, l_NSC_CRZ, l_NSC_ITP, m_NSC_DH44, m_NSC_DILP, m_NSC_DMS
- [3] § Methods › Naming effector groups ↔ malecns/malecns-meta.R, lines 1152–1211 · score 0.96 · SEZ_NSC_CAPA, l_NSC_CRZ, l_NSC_ITP, m_NSC_DH44, m_NSC_DILP, m_NSC_DMS
- [4] § Methods › Naming effector groups ↔ banc/annotations/franken-annotations-fix.R, lines 711–770 · score 0.96 · long tendon muscle, tarsus levators, femur reductors, trochanter flexors, tibia flexors, leg muscle
- [5] § Methods › Naming effector groups ↔ malecns/malecns-meta.R, lines 732–791 · score 0.96 · long tendon muscle, tarsus levators, femur reductors, trochanter flexors, tibia flexors, leg muscle
- [6] § Methods › Clustering influence by influence and connectivity ↔ R/03_connectivity_analyses.Rmd, lines 1177–1265 · score 0.95 · dynamic tree cut, cutreeDynamic, deepSplit, minClusterSize, ward.D2, hierarchical clustering
- [7] § Methods › Naming effector groups ↔ exploration/R/abd-influence.R, lines 911–957 · score 0.94 · MNhm03, MNhm42, MNhm43, indirect flight, haltere motor neurons, tpn
- [8] § Methods › Neurotransmitter prediction ↔ resnet_18/scripts/02_train.py, lines 251–302 · score 0.91 · focal loss, random gamma, random affine, random noise, Adam, augmentation
- [9] § Methods › Cell-type matching and annotation › Expert manual annotation of sensory and effector neurons ↔ banc/annotations/franken-annotations-fix.R, lines 274–351 · score 0.90 · salivary glands, digestive tract, exit nerve, Wheeler, body part, metathoracic
- [10] § Methods › Cell-type matching and annotation › Overview ↔ banc/share/banc-nblast-share-gcs.R, the whole file · a weak match · score 0.90 · banc_fanc_1116_nblast.feather, banc_hemibrain_v1.2.1_nblast.feather, banc_manc_v1.2.1_nblast.feather, banc_fafb_783_nblast.feather, maleCNS, cross
- [11] § Methods › Naming effector groups ↔ malecns/malecns-meta.R, lines 1152–1211 · score 0.89 · EN27X010, haltere power, haltere steering, haltere motor neurons, wing steering, myomodulatory
- [12] § Methods › Annotation taxonomy ↔ banc/annotations/franken-annotations-fix.R, lines 1311–1393 · score 0.89 · PPL1 dopaminergic neuron, wing steering motor, front leg, Kenyon cell, leg motor neuron, cell function detailed
- [13] § Methods › Data analysis and visualization ↔ banc/annotations/franken-annotations-fix.R, lines 274–351 · score 0.88 · prosternal organ, salivary glands, digestive tract, retrocerebral complex, neurohemal complex, enteric
- [14] § Methods › Annotation taxonomy ↔ banc/curation/make_codex_annotations_flat_table_v888.R, lines 108–145 · score 0.87 · neuropeptide verified, codex annotations, neurotransmitter verified, body part sensory, peripheral target, match ID
- [15] § Methods › Cell-type matching and annotation › Overview ↔ banc/nblast/banc-nblast-compile.R, lines 1551–1602 · score 0.87 · banc_fanc_1116_nblast.feather, banc_hemibrain_v1.2.1_nblast.feather, banc_manc_v1.2.1_nblast.feather, banc_fafb_783_nblast.feather, cross, error
- [16] § Methods › Cell-type matching and annotation › Automated typing by morphology and connectivity ↔ alignment/banc-alignment-run.py, lines 501–579 · score 0.86 · connectivity profiles, individual FAFB, optic lobe, somata, Jaccard, centroids
- [17] § Methods › Colour maximum intensity projections ↔ fanc/render_neurons.py, lines 13–157 · score 0.86 · maximum intensity projections, JRC2018_UNISEX_20x_HR, jrc2018 vnc unisex, depth, mips, BANC
- [18] § Methods › Synapse detection ↔ o2/production/o2_banc_v888_rebuild.sh, lines 1–61 · score 0.85 · synapse neuropil lookup, synapses v3 enriched, v3 parquet, nt prediction, synapses v2, splits
- [19] § Methods › Naming CNS networks ↔ banc/annotations/franken-annotations-fix.R, lines 1131–1190 · score 0.82 · FB tangential, hDelta, vDelta, optic lobe, Delta7, PEN
- [20] § Methods › Naming CNS networks ↔ malecns/malecns-meta.R, lines 1272–1331 · score 0.82 · FB tangential, hDelta, vDelta, optic lobe, Delta7, PEN
- [21] § Methods › Naming effector groups ↔ exploration/R/abd-influence.R, lines 763–810 · score 0.82 · ventral cervical, dorsal prothoracic, head bristle, pharyngeal nerves, prosternal, motor neuron
- [22] § Methods › Naming effector groups ↔ banc/annotations/franken-annotations-fix.R, lines 1071–1130 · score 0.82 · sez nsc, salivary motor neuron, proboscis motor neuron, neurosecretory cells, DNg28, pharynx
- [23] § Methods › Synapse detection evaluation ↔ exploration/matlab/plot_heatmap_syn_per_np.m, lines 6–73 · score 0.81 · haltere tectulum, wing tectulum, lower tectulum, abdominal neuromere, accessory, medial
- [24] § A metric of influence ↔ python/fly_connectome_04_indirect_connectivity.ipynb, lines 1–111 · score 0.80 · indirect connections, log transform, computationally efficient, linear dynamical, signal propagation, steady state
- [25] § Methods › Synapse detection ↔ o2/oneshots/o2_banc_v890_rebuild.sh, lines 1–66 · score 0.80 · synapse neuropil lookup, synapses v3 enriched, nt prediction, synapses v2, parquet, splits
- [26] § Methods › Naming AN/DN clusters ↔ malecns/malecns-meta.R, lines 732–791 · score 0.80 · external taste sensilla, taste peg, hair plates, leg motor, labellum, bristles
- [27] § Methods › Specimen ↔ malecns/malecns-meta.R, lines 1272–1331 · score 0.78 · lobula plate, lamina intrinsic, optic lobes, intrinsic neurons, Lai, medulla
- [28] § A metric of influence ↔ R/04_indirect_connectivity.Rmd, lines 45–114 · score 0.78 · log transform, computationally efficient, indirect connections, linear dynamical, signal propagation, steady state
- [29] § Methods › Naming effector groups ↔ banc/annotations/franken-annotations-fix.R, lines 353–410 · score 0.77 · dorsal prothoracic, pharyngeal nerves, antennal nerves, labial, maxillary, cervical
- [30] § Methods › Naming effector groups ↔ exploration/R/abd-influence.R, lines 812–859 · score 0.77 · sez nsc, salivary motor neuron, proboscis motor neuron, Hugin, ingestion, neurosecretory
- [31] § Methods › Proofreading ↔ slackbots/deprecated_proofreading_status_bot.py, lines 81–116 · score 0.76 · proofread status, proofread neurons, Bot, Slack, edits, backbone
- [32] § A unified open-source connectome ↔ banc/legacy/banc-synapse-proportion-plot.R, lines 1–71 · score 0.75 · cumulative share, BANC synapse, synapses v2, identified neuron, roughly proofread, trachea
- [33] § Methods › Naming CNS networks ↔ malecns/malecns-meta.R, lines 1452–1511 · score 0.74 · DN1p, PPL1 dopaminergic, projection neurons, DN3, circadian, bristle
- [34] § Methods › Naming CNS networks ↔ banc/annotations/franken-annotations-fix.R, lines 1251–1310 · score 0.74 · single leg neuromere, serially convergent, VNC intrinsic, metathoracic, prothoracic, dorsal
- [35] § Methods › Overview ↔ banc/transforms/banc-ngl-upload.R, lines 369–415 · score 0.73 · Google Storage, nerve cord fly, FlyWire, lab_brain, lee, volume
- [36] § Methods › Cell-type matching and annotation › Expert manual annotation of sensory and effector neurons ↔ exploration/R/abd-influence.R, lines 763–810 · score 0.73 · abdominal nerves, metathoracic, prothoracic, tract, chemosensory, chordotonal
- [37] § Methods › Neuropils and template alignment ↔ fanc/transforms/template_alignment.py, lines 135–269 · score 0.72 · VNC templates, template space, female brain, warping, transform, resolution
- [38] § Methods › Synapse detection evaluation ↔ malecns/malecns-meta.R, lines 1332–1391 · score 0.72 · leg neuromere, Kenyon cells, mushroom body, lobula, medulla, medial
- [39] § Methods › Naming AN/DN clusters ↔ banc/annotations/franken-annotations-fix.R, lines 711–770 · score 0.72 · external taste sensilla, taste peg, leg motor neurons, labellum, effector, cells
- [40] § Methods › Spectral clustering ↔ banc/clustering/banc-spectral-clustering.R, lines 31–94 · score 0.71 · min connection strength, embedding seed, cluster seed, UMAP, Spectral, CNS
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R · 2,003 lines · 107 KB · GPL-3.0 · 10 matches
- #' franken-annotations-fix — Standardise franken-brain annotations against published labels.
- #'
- #' Diff `franken_meta()` cell_types against the published FAFB Supplemental
- #' table and apply targeted corrections to the franken-brain CSV (column
- #' harmonisation, dataset-specific fix blocks).
- #'
- #' @section Reads:
- #' - `franken_meta()`
- #' - `BANC-project/data/banc_annotations/Supplemental_file1_neuron_annotations.tsv`
- #'
- #' @section Writes:
- #' - `<banc.meta.save.path>/frankenbrain_v*_meta.csv` (per-fix-block)
- #'
- #' @section Notes:
- #' - Manual; many blocks are currently commented out — uncomment to apply.
- ############################################
- ### STANDARDISE THE ANNOTATIONS FOR BANC ###
- ############################################
- source("banc/banc-startup.R")
- # get current table
- franken.meta <- franken_meta()
- #######################################
- ## DIFFERENCE WITH PUBLISHED LABELS ###
- #######################################
- # # read published data
- # fafb.pub <- read_tsv("/Users/papers/BANC-project/data/banc_annotations/Supplemental_file1_neuron_annotations.tsv",
- # col_types = banc.col.types)
- #
- # # cell type difference
- # franken.cts <- franken.meta %>%
- # dplyr::filter(dataset=="FAFB", region!="optic_lobe") %>%
- # dplyr::distinct(cell_type) %>%
- # dplyr::pull(cell_type)
- # fafb.cts <- fafb.pub %>%
- # dplyr::mutate(cell_type = dplyr::case_when(
- # is.na(cell_type)&!is.na(hemibrain_type) ~ hemibrain_type,
- # is.na(cell_type)&!is.na(morphology_group) ~ morphology_group,
- # TRUE ~ cell_type
- # )) %>%
- # dplyr::distinct(cell_type) %>%
- # dplyr::pull(cell_type)
- #
- # # diff
- # ct.diff <- setdiff(franken.cts, fafb.cts)
- ######################################
- ## ADD MISSING NEURONS SINCE PRINT ###
- ######################################
- # ft.midbrain <- fafbseg::flytable_query("select root_id, root_783, supervoxel_id, nucleus_id, super_class, cell_class, cell_sub_class, top_nt, side from info")
- # ft.optic <- fafbseg::flytable_query("select root_id, root_783, supervoxel_id, nucleus_id, super_class, cell_class, cell_sub_class, top_nt, side from optic")
- # ft.glia <- rbind(ft.midbrain,ft.optic) %>%
- # dplyr::filter(grepl("glia",super_class)|grepl("glia",cell_class)|grepl("glia",cell_sub_class)) %>%
- # dplyr::distinct(root_id, .keep_all = TRUE)
- # readr::write_csv(ft.glia, file = "/Users/abates/Downloads/fafb_flywire_glia.csv")
- # ft.midbrain <- fafbseg::flytable_query("select _id, root_783, supervoxel_id, nucleus_id, flow, super_class, cell_class, cell_sub_class, cell_type, hemibrain_type, ito_lee_hemilineage, hartenstein_hemilineage, morphology_group, top_nt, top_nt_conf, side, nerve, vfb_id, fbbt_id, status, soma_x from info")
- # ft.midbrain$region <- "midbrain"
- # ft.optic <- fafbseg::flytable_query("select * from optic")
- # ft.optic$region <- "optic_lobe"
- # ft.update <- ft.midbrain %>%
- # rbind.fill(ft.optic.update) %>%
- # dplyr::filter(!root_783 %in% na.omit(unique(franken.meta$fafb_id))) %>%
- # dplyr::filter(!cell_class %in% c("fragment","trachea","large_fragment","ECM","tadpole")) %>%
- # dplyr::filter(!super_class %in% c("not_a_neuron")) %>%
- # dplyr::filter(!grepl("glia",cell_class)) %>%
- # dplyr::rename(neuron_id = root_783,
- # FAFB_supervoxel_id=supervoxel_id,
- # FAFB_nucleus_id=nucleus_id,
- # FAFB_flow=flow,
- # FAFB_super_class=super_class,
- # FAFB_cell_class=cell_class,
- # FAFB_cell_sub_class=cell_sub_class,
- # FAFB_cell_type=cell_type,
- # FAFB_hemibrain_type=hemibrain_type,
- # FAFB_ito_lee_hemilineage=ito_lee_hemilineage,
- # FAFB_hartenstein_hemilineage=hartenstein_hemilineage,
- # FAFB_morphology_group=morphology_group,
- # FAFB_top_nt=top_nt,
- # FAFB_top_nt_conf=top_nt_conf,
- # FAFB_side=side,
- # FAFB_nerve=nerve,
- # FAFB_vfb_id=vfb_id,
- # FAFB_fbbt_id=fbbt_id,
- # FAFB_status=status) %>%
- # dplyr::mutate(fafb_id = neuron_id,
- # flow=FAFB_flow,
- # super_class=FAFB_super_class,
- # cell_type=dplyr::case_when(
- # !is.na(matsliah_type) ~ matsliah_type,
- # TRUE ~ FAFB_cell_type
- # ),
- # cell_class = FAFB_cell_class,
- # cell_sub_class=FAFB_cell_sub_class,
- # hemilineage=dplyr::case_when(
- # !is.na(FAFB_ito_lee_hemilineage) ~ FAFB_ito_lee_hemilineage,
- # TRUE ~ FAFB_hartenstein_hemilineage
- # ),
- # top_nt=FAFB_top_nt,
- # side=FAFB_side,
- # nerve=FAFB_nerve) %>%
- # dplyr::select(neuron_id,
- # fafb_id,
- # region,
- # flow,
- # super_class,
- # cell_class,
- # cell_sub_class,
- # cell_type,
- # top_nt,
- # side,
- # nerve,
- # hemilineage,
- # FAFB_supervoxel_id,
- # FAFB_nucleus_id,
- # FAFB_flow,
- # FAFB_super_class,
- # FAFB_cell_class,
- # FAFB_cell_sub_class,
- # FAFB_cell_type,
- # FAFB_hemibrain_type,
- # FAFB_ito_lee_hemilineage,
- # FAFB_hartenstein_hemilineage,
- # FAFB_morphology_group,
- # FAFB_top_nt,
- # FAFB_top_nt_conf,
- # FAFB_side,
- # FAFB_nerve,
- # FAFB_vfb_id,
- # FAFB_fbbt_id,
- # FAFB_status) %>%
- # dplyr::filter(!is.na(cell_type))
- # ft.update[is.na(ft.update)] <- ''
- # banctable_append_rows(base='cns_meta',
- # table = "franken_meta",
- # df = as.data.frame(ft.update),
- # chunksize = 1000)
- ##################################
- ## USE ARIE'S OPTIC LOBE TYPES ###
- ##################################
- # Change to matisliah types
- # ft.optic <- fafbseg::flytable_query("select root_783, matsliah_type from optic")
- # allowed neurotransmitters (for neurotransmitters_verified column)
- allowed_neurotransmitters <- c(
- "acetylcholine", "gaba", "glutamate", "glycine", "dopamine",
- "serotonin", "histamine", "tyramine", "octopamine", "nitric_oxide"
- )
- # execute changes to annotations
- # documented here: https://github.com/wilson-lab/bancpipeline/blob/main/annotations/annotations.md
- franken.meta.update <- franken.meta %>%
- ### CELL TYPE CHANGES ####
- # # cell type left join
- # dplyr::left_join(ft.optic %>%
- # dplyr::distinct(root_783,
- # matsliah_type),
- # by = c("fafb_id"="root_783")) %>%
- # # cell_type
- # dplyr::mutate(cell_type = dplyr::case_when(
- # cell_type=="ocellar retinula cell" ~ "ocellar_retinula_cell",
- # !is.na(matsliah_type) ~ matsliah_type,
- # TRUE ~ cell_type
- # )) %>%
- # dplyr::select(-matsliah_type) %>%
- ### MOVING TO NEW POLICY ####
- # citation
- dplyr::mutate(citation_cell_type = dplyr::case_when(
- !is.na(FAFB_cell_type)&cell_type==FAFB_cell_type ~ "Schlegel et al., 2024 (cell type)",
- !is.na(MANC_type)&cell_type==MANC_type ~ "Marin et al., 2024 (cell type)",
- TRUE ~ NA
- ) ) %>%
- # flow
- dplyr::mutate(flow = dplyr::case_when(
- cell_type %in% c("AN_4_22ac4f12", "AN_4_63", "AN_4_None", "AN_4_c964e2c2", "AN_GNG_69", # corrections
- "SA_MDA_2", "SA_MDA_3", "Dm9", "L4", "C3", "Dm11", "L3", "Lawf1", "Lawf2") ~ "intrinsic",
- grepl("afferent",flow) ~ "afferent",
- grepl("sensory",super_class)&!grepl("efferent|intrinsic",flow) ~ "afferent",
- grepl("^R1-6$|^R7$|^R8$", cell_type) ~ "afferent",
- grepl("motor|endocrine|efferent",super_class) ~ "efferent",
- grepl("efferent",flow) ~ "efferent",
- grepl("^ascending$",super_class) ~ "intrinsic",
- grepl("^descending$",super_class) ~ "intrinsic",
- grepl("ascending|descending",super_class) ~ "intrinsic",
- grepl("intrinsic",flow) ~ "intrinsic",
- is.na(nerve) ~ "intrinsic",
- # none get NA, as desired
- TRUE ~ NA
- ) ) %>%
- # side
- dplyr::mutate(side = dplyr::case_when(
- grepl("right",side) ~ "right",
- grepl("left",side) ~ "left",
- grepl("center|midline|unpaired|both",side) ~ "center", # midline and unpaired unused
- # small number get NA, some sensory and others with missing class info
- TRUE ~ NA
- ) ) %>%
- # region — "neck_connective" disabled as a region value. Ascending/descending
- # neurons are identified via super_class; cervical_connective is a tract entry.
- dplyr::mutate(region = dplyr::case_when(
- grepl("visual_centrifugal",super_class) ~ "central_brain",
- (grepl("visual_projection|optic",super_class) &
- !grepl("ocellar_interneuron",super_class)) ~ "optic_lobe",
- grepl("ocellar",super_class) ~ "central_brain",
- grepl("ocellar",cell_class) ~ "central_brain",
- grepl("vnc|VNC",region) ~ "ventral_nerve_cord",
- grepl("midbrain|central_brain|sez",region) ~ "central_brain",
- grepl("OL|optic",region) ~ "optic_lobe",
- TRUE ~ NA
- ) ) %>%
- dplyr::mutate(body_part_sensory = dplyr::case_when(
- grepl("^R1-6$|^R7$|^R8$",cell_type) ~ "retina",
- cell_type %in% "R1-6" ~ "retina",
- cell_type %in% c("R7","R8") ~ "retina",
- !grepl("sensory|visceral",super_class) ~ NA,
- grepl("^ISN$",cell_type) ~ "hemolymph_sensory",
- # head
- ## head bristles
- grepl("BM_Ant",cell_type) ~ "antenna",
- grepl("BM_dOcci",cell_type) ~ "occipital_dorsal",
- grepl("BM_dPoOr",cell_type) ~ "postorbital_dorsal",
- grepl("BM_FrOr", cell_type) ~ "frontoorbital",
- grepl("BM_Fr",cell_type) ~ "frontal",
- grepl("BM_Hau",cell_type) ~ "haustellum",
- grepl("BM_InOc",cell_type) ~ "interocellar",
- grepl("BM_InOm",cell_type) ~ "interommatidial",
- grepl("BM_MaPa",cell_type) ~ "maxillary_palp",
- grepl("BM_Oc",cell_type) ~ "ocellar",
- grepl("BM_Or",cell_type) ~ "orbital",
- grepl("BM_Taste",cell_type) ~ "labellum",
- grepl("BM_Vib",cell_type) ~ "vibrissa",
- grepl("BM_vOcci_vPoOr",cell_type) ~ "postorbital_ventral",
- grepl("BM_Vt_PoOc",cell_type) ~ "postocellar",
- ## by prior annotation
- grepl("^eye$",body_part_sensory) ~ "eye",
- grepl("head$",body_part_sensory) ~ "head",
- grepl("antenna",nerve) ~ "antenna",
- grepl("antenna",body_part_sensory) ~ "antenna",
- grepl("aorta",body_part_sensory) ~ "aorta",
- grepl("CB0991",cell_type) ~ "aorta",
- grepl("crop",body_part_sensory) ~ "crop",
- grepl("cibarium",body_part_sensory) ~ "cibarium",
- grepl("retina",body_part_sensory) ~ "retina",
- cell_type %in% "HBeyelet" ~ "eyelet",
- grepl("ocellar_retinula_cell",cell_type) ~ "ocellus",
- grepl("ocellar|ocelli",body_part_sensory)&peripheral_target_type!="bristle" ~ "ocellus",
- grepl("ocellar|ocelli",cell_function)&peripheral_target_type!="bristle" ~ "ocellus",
- grepl("ocellar|ocelli",cell_function_detailed)&peripheral_target_type!="bristle" ~ "ocellus",
- grepl("vibrissa",body_part_sensory) ~ "vibrissa",
- grepl("labellum",body_part_sensory) ~ "labellum",
- grepl("proboscis",cell_function)&flow=="efferent" ~ "proboscis",
- grepl("pharynx",cell_function)&flow=="efferent" ~ "pharynx",
- grepl("proboscis-pharynx",body_part_sensory) ~ "proboscis-pharynx",
- grepl("proboscis",body_part_sensory) ~ "proboscis",
- grepl("pharynx",body_part_sensory) ~ "pharynx",
- grepl("palps",body_part_sensory) ~ "maxillary_palp",
- grepl("eye",body_part_sensory) ~ "eye",
- # CNS
- grepl("pars_intercerebralis",body_part_sensory) ~ "pars_intercerebralis",
- grepl("pars_lateralis",body_part_sensory) ~ "pars_lateralis",
- grepl("sez|subesophageal_zone",body_part_sensory) ~ "subesophageal_zone",
- grepl("ventral_nerve_cord|vnc",body_part_sensory) ~ "ventral_nerve_cord",
- # blood
- grepl("haemolymph|hemolymph",body_part_sensory) ~ "hemolymph",
- # thorax
- grepl("thorax",body_part_sensory) ~ "thorax",
- #grepl("neck",body_part_sensory) ~ "neck",
- # Legs
- grepl("front_leg",body_part_sensory) ~ "front_leg",
- grepl("middle_leg",body_part_sensory) ~ "middle_leg",
- grepl("hind_leg",body_part_sensory) ~ "hind_leg",
- grepl("leg",body_part_sensory) ~ "leg",
- # Flight
- grepl("haltere",body_part_sensory) ~ "haltere",
- grepl("notum|thorax",body_part_sensory) ~ "thorax",
- grepl("wing_base",body_part_sensory) ~ "wing_base",
- grepl("wing_margin",body_part_sensory) ~ "wing_margin",
- grepl("wing_tegula",body_part_sensory) ~ "wing_tegula",
- grepl("wing",body_part_sensory) ~ "wing",
- grepl("wing_endocrine",cell_function) ~ "wing",
- # Abdomen
- grepl("abdomen",body_part_sensory) ~ "abdomen",
- grepl("abdominal_wall",body_part_sensory) ~ "abdominal_wall",
- # Chordotonal organs
- grepl("metathoracic_chordotonal_organ",body_part_sensory) ~ "metathoracic_chordotonal_organ",
- grepl("prothoracic_chordotonal_organ",body_part_sensory) ~ "prothoracic_chordotonal_organ",
- grepl("prosternal_organ",body_part_sensory) ~ "prosternal_organ",
- grepl("wheelers_organ",body_part_sensory) ~ "wheelers_organ",
- # other
- !is.na(body_part_sensory) ~ body_part_sensory,
- ## by nerves
- grepl("^AN$",FAFB_nerve) ~ "antenna",
- grepl("^aPhN$",FAFB_nerve) ~ "pharynx",
- grepl("^PhN$",FAFB_nerve) ~ "pharynx",
- grepl("AbN2|AbN3|AbN4|AbNT",MANC_entryNerve) ~ "abdomen",
- grepl("DMetaN",MANC_entryNerve) ~ "haltere",
- grepl("DProN",MANC_entryNerve) ~ "front_leg",
- grepl("ProLN",MANC_entryNerve) ~ "front_leg",
- grepl("VProN",MANC_entryNerve) ~ "front_leg",
- grepl("MesoLN",MANC_entryNerve) ~ "middle_leg",
- grepl("MetaLN", MANC_entryNerve) ~ "hind_leg",
- grepl("PDMN",MANC_entryNerve) ~ "thorax",
- grepl("ADMN",MANC_entryNerve) ~ "wing",
- grepl("PrN",MANC_entryNerve) ~ "prosternal_organ",
- grepl("ProCN",MANC_entryNerve) ~ "prothoracic_chordotonal_organ",
- # remainder
- TRUE ~ "unknown"
- ) ) %>%
- dplyr::mutate(body_part_effector = dplyr::case_when(
- !grepl("efferent",flow) ~ NA,
- grepl("retrocerebral_complex",body_part_effector) ~ "retrocerebral_complex",
- grepl("enteric_complex",body_part_effector) ~ "digestive_tract",
- grepl("corpus_allatum",body_part_effector) ~ "corpus_allatum",
- grepl("salivary_gland",body_part_effector) ~ "salivary_gland",
- grepl("neurohemal_complex",body_part_effector) ~ "neurohemal_complex",
- grepl("antenna",body_part_effector) ~ "antenna",
- grepl("crop",body_part_effector) ~ "crop",
- grepl("eye",body_part_effector) ~ "eye",
- grepl("front_leg",body_part_effector) ~ "front_leg",
- grepl("middle_leg",body_part_effector) ~ "middle_leg",
- grepl("hind_leg",body_part_effector) ~ "hind_leg",
- grepl("haltere",body_part_effector) ~ "haltere",
- grepl("neck",body_part_effector) ~ "neck",
- grepl("proboscis",body_part_effector) ~ "proboscis",
- grepl("pharynx",body_part_effector) ~ "pharynx",
- grepl("wing",body_part_effector) ~ "wing",
- grepl("abdomen",body_part_effector) ~ "abdomen",
- grepl("prothorax",body_part_effector) ~ "prothorax",
- ## by nerves
- !is.na(body_part_effector) ~ body_part_effector,
- # grepl("^AN$",FAFB_nerve) ~ "antenna",
- # grepl("^aPhN$",FAFB_nerve) ~ "pharynx",
- # grepl("^PhN$",FAFB_nerve) ~ "pharynx",
- # grepl("^CV$|CvN|CVC",FAFB_nerve) ~ "neck",
- # grepl("AbN2|AbN3|AbN4|AbNT",MANC_exitNerve) ~ "abdomen",
- # grepl("DMetaN",MANC_exitNerve) ~ "haltere",
- # grepl("DProN",MANC_exitNerve) ~ "prothorax",
- # grepl("ProAN|ProLN",MANC_exitNerve) ~ "front_leg",
- # grepl("VProN",MANC_exitNerve) ~ "front_leg",
- # grepl("MesoLN",MANC_exitNerve) ~ "middle_leg",
- # grepl("MetaLN",MANC_exitNerve) ~ "hind_leg",
- # grepl("PDMN",MANC_exitNerve) ~ "wing",
- # grepl("ADMN|MesoAN",MANC_exitNerve) ~ "wing",
- # grepl("CvN|CVC|^CV$",MANC_exitNerve) ~ "neck",
- TRUE ~ "unknown"
- ) ) %>%
- dplyr::mutate(nerve = dplyr::case_when(
- grepl("NCC",nerve) & side=="right" ~ "right_corpus_cardiacum_nerve",
- grepl("NCC",nerve) &side=="left" ~ "left_corpus_cardiacum_nerve",
- grepl("NCC",nerve) ~ "left_corpus_cardiacum_nerve",
- grepl("^AN",nerve) & side=="right" ~ "right_antennal_nerve",
- grepl("^AN",nerve) &side=="left" ~ "left_antennal_nerve",
- grepl("^AN",nerve) ~ "antennal_nerve",
- grepl("MxLbN",nerve) & side=="right" ~ "right_maxillary-labial_nerve",
- grepl("MxLbN",nerve) &side=="left" ~ "left_maxillary-labial_nerve",
- grepl("MxLbN",nerve) ~ "maxillary-labial_nerve",
- grepl("PhN",nerve) & side=="right" ~ "right_pharyngeal_nerve",
- grepl("PhN",nerve) &side=="left" ~ "left_pharyngeal_nerve",
- grepl("PhN",nerve) ~ "pharyngeal_nerve",
- grepl("aPhN",nerve) & side=="right" ~ "right_accessory_pharyngeal_nerve",
- grepl("aPhN",nerve) &side=="left" ~ "left_accessory_pharyngeal_nerve",
- grepl("aPhN",nerve) ~ "accessory_pharyngeal_nerve",
- grepl("OCN",nerve) & side=="right" ~ "right_ocellar_nerve",
- grepl("OCN",nerve) &side=="left" ~ "left_ocellar_nerve",
- grepl("OCN",nerve) ~ "ocellar_nerve",
- grepl("^ON",nerve) & side=="right" ~ "right_optic_nerve",
- grepl("^ON",nerve) &side=="left" ~ "left_optic_nerve",
- grepl("^ON",nerve) ~ "optic_nerve",
- grepl("CvN_R",nerve) ~ "right_cervical_nerve",
- grepl("CvN_L",nerve) ~ "left_cervical_nerve",
- grepl("CvN",nerve) ~ "cervical_nerve",
- grepl("CV",nerve) & side=="right" ~ "right_cervical_nerve",
- grepl("CV",nerve) & side=="left" ~ "left_cervical_nerve",
- grepl("CV",nerve) & side=="left" ~ "cervical_nerve",
- grepl("DProN_R",nerve) ~ "right_dorsal_prothoracic_nerve",
- grepl("DProN_L",nerve) ~ "left_dorsal_prothoracic_nerve",
- grepl("DProN",nerve) ~ "dorsal_prothoracic_nerve",
- grepl("ProLN_R",nerve) ~ "right_prothoracic_leg_nerve",
- grepl("ProLN_L",nerve) ~ "left_prothoracic_leg_nerve",
- grepl("ProLN",nerve) ~ "prothoracic_leg_nerve",
- grepl("PrN_R",nerve) ~ "right_prosternal_nerve",
- grepl("PrN_L",nerve) ~ "left_prosternal_nerve",
- grepl("PrN",nerve) ~ "prosternal_nerve",
- grepl("ProAN_R",nerve) ~ "right_prothoracic_accessory_nerve",
- grepl("ProAN_L",nerve) ~ "left_prothoracic_accessory_nerve",
- grepl("ProAN",nerve) ~ "prothoracic_accessory_nerve",
- grepl("ProCN_R",nerve) ~ "right_prothoracic_chordotonal_nerve",
- grepl("ProCN_L",nerve) ~ "left_prothoracic_chordotonal_nerve",
- grepl("ProCN",nerve) ~ "prothoracic_chordotonal_nerve",
- grepl("VProN_R",nerve) ~ "right_ventral_prothoracic_nerve",
- grepl("VProN_L",nerve) ~ "left_ventral_prothoracic_nerve",
- grepl("VProN",nerve) ~ "ventral_prothoracic_nerve",
- grepl("ADMN_R",nerve) ~ "right_anterior_dorsal_mesothoracic_nerve",
- grepl("ADMN_L",nerve) ~ "left_anterior_dorsal_mesothoracic_nerve",
- grepl("ADMN",nerve) ~ "anterior_dorsal_mesothoracic_nerve",
- grepl("PDMN_R",nerve) ~ "right_posterior_dorsal_mesothoracic_nerve",
- grepl("PDMN_L",nerve) ~ "left_posterior_dorsal_mesothoracic_nerve",
- grepl("PDMN",nerve) ~ "posterior_dorsal_mesothoracic_nerve",
- grepl("MesoLN_R",nerve) ~ "right_mesothoracic_leg_nerve",
- grepl("MesoLN_L",nerve) ~ "left_mesothoracic_leg_nerve",
- grepl("MesoLN",nerve) ~ "mesothoracic_leg_nerve",
- grepl("MesoAN_R",nerve) ~ "right_mesothoracic_accessory_nerve",
- grepl("MesoAN_L",nerve) ~ "left_mesothoracic_accessory_nerve",
- grepl("MesoAN",nerve) ~ "mesothoracic_accessory_nerve",
- grepl("DMetaN_R",nerve) ~ "right_dorsal_metathoracic_nerve",
- grepl("DMetaN_L",nerve) ~ "left_dorsal_metathoracic_nerve",
- grepl("DMetaN",nerve) ~ "dorsal_metathoracic_nerve",
- grepl("MetaLN_R",nerve) ~ "right_metathoracic_leg_nerve",
- grepl("MetaLN_L",nerve) ~ "left_metathoracic_leg_nerve",
- grepl("MetaLN",nerve) ~ "metathoracic_leg_nerve",
- grepl("AbN1_R",nerve) ~ "right_first_abdominal_nerve",
- grepl("AbN1_L",nerve) ~ "left_first_abdominal_nerve",
- grepl("AbN1",nerve) ~ "first_abdominal_nerve",
- grepl("AbN2_R",nerve) ~ "right_second_abdominal_nerve",
- grepl("AbN2_L",nerve) ~ "left_second_abdominal_nerve",
- grepl("AbN2",nerve) ~ "second_abdominal_nerve",
- grepl("AbN3_R",nerve) ~ "right_third_abdominal_nerve",
- grepl("AbN3_L",nerve) ~ "left_third_abdominal_nerve",
- grepl("AbN3",nerve) ~ "third_abdominal_nerve",
- grepl("AbN4_R",nerve) ~ "right_fourth_abdominal_nerve",
- grepl("AbN4_L",nerve) ~ "left_fourth_abdominal_nerve",
- grepl("AbN4",nerve) ~ "fourth_abdominal_nerve",
- grepl("AbNT_R",nerve) ~ "right_abdominal_nerve_trunk",
- grepl("AbNT_L",nerve) ~ "left_abdominal_nerve_trunk",
- grepl("AbNT",nerve) ~ "abdominal_nerve_trunk",
- grepl("AbNX_R",nerve) ~ "right_abdominal_nerve_other",
- grepl("AbNX_L",nerve) ~ "left_abdominal_nerve_other",
- grepl("AbNX",nerve) ~ "abdominal_nerve_other",
- TRUE ~ NA
- ) ) %>%
- # translate neuropeptide names to FlyBase ones in neuropeptide_verified column
- dplyr::mutate(neuropeptide_verified = gsub("allatostatin-a","AstA",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("allatostatin-c","AstC",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("amnesiac","amn",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("capability","Capa",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("ccap","CCAP",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("ccha1","CCHa1",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("ccha2","CCHa2",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("cnma","CNMa",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("corazonin","Crz",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("dARC1","dARC1",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("dh31|Dh331","Dh31",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("dh44","Dh44",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("DILP","Ilp",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("dsk","Dsk",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("dnpf|^NPF","NPF",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("drosulfakinin","Dsk",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("eclosion hormone","Eh",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("fmrfa","FMRFa",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("gpa2","Gpa2",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("gpb5","Gpb5",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("hugin","Hug",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("itp","ITP",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("leucokinin","Lk",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("MIP","Mip",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("myosuppressin|myosupressin","Ms",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("natalisin","Natalisin",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("Nplp1","Nplp1",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("Nplp2","Nplp2",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("Nplp3","Nplp3",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("Nplp4","Nplp4",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("orcokinin","Orcokinin",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("burisconin","Pburs",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("pdf","Pdf",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("proctolin","Proc",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("ptth","Ptth",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("ryanimide","RYa",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("^sp$","SP",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("SIFamide","SIFa",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("sNPF","sNPF",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("space blanket","Sb",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("tachykinin","Tk",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified = gsub("trissin","Trissin",neuropeptide_verified)) %>%
- dplyr::mutate(neuropeptide_verified =
- ifelse(grepl("neuropeptide-negative|negative", neuropeptide_verified, ignore.case = TRUE),
- NA, neuropeptide_verified)) %>%
- # translate neuropeptide names to FlyBase ones in neurotransmitter_verified column
- dplyr::mutate(neurotransmitter_verified = gsub("allatostatin-a","AstA",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("allatostatin-c","AstC",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("amnesiac","amn",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("capability","Capa",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("ccap","CCAP",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("ccha1","CCHa1",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("ccha2","CCHa2",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("cnma","CNMa",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("corazonin","Crz",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("dARC1","dARC1",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("dh31|Dh331","Dh31",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("dh44","Dh44",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("DILP","Ilp",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("dsk","Dsk",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("dnpf|^NPF","NPF",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("drosulfakinin","Dsk",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("eclosion hormone","Eh",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("fmrfa","FMRFa",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("gpa2","Gpa2",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("gpb5","Gpb5",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("hugin","Hug",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("itp","ITP",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("leucokinin","Lk",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("MIP","Mip",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("myosuppressin|myosupressin","Ms",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("natalisin","Natalisin",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("Nplp1","Nplp1",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("Nplp2","Nplp2",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("Nplp3","Nplp3",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("Nplp4","Nplp4",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("orcokinin","Orcokinin",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("burisconin","Pburs",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("pdf","Pdf",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("proctolin","Proc",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("ptth","Ptth",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("ryanimide","RYa",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("^sp$","SP",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("SIFamide","SIFa",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("sNPF","sNPF",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("space blanket","Sb",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("tachykinin","Tk",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified = gsub("trissin","Trissin",neurotransmitter_verified)) %>%
- dplyr::mutate(neurotransmitter_verified =
- ifelse(grepl("neuropeptide-negative|negative", neurotransmitter_verified, ignore.case = TRUE),
- NA, neurotransmitter_verified)) %>%
- # change nitric oxide to include _
- dplyr::mutate(neurotransmitter_verified = gsub("nitric oxide","nitric_oxide",neurotransmitter_verified)) %>%
- # save existing neuropeptide_verified, neurotransmitter_verified,
- # make additional updates to new columns banc_neuropeptide_verified and
- # banc_neurotransmitter_verified
- dplyr::mutate(banc_neuropeptide_verified = neuropeptide_verified) %>%
- # join with semicolons, remove duplicates
- dplyr::mutate(banc_neuropeptide_verified =
- sapply(banc_neuropeptide_verified, function(entry) {
- # Check if entry is empty or NA
- if (is.na(entry) || entry == "") {
- return(NA) # Return NA if the entry is empty or NA
- }
- # Otherwise, proceed to split the entry
- split_entries <- unlist(str_split(entry, "[ ,;]+")) %>%
- unique() # Remove duplicates
- # Join the unique entries with "; "
- paste(split_entries, collapse = "; ")
- })
- ) %>%
- dplyr::mutate(banc_neurotransmitter_verified = neurotransmitter_verified) %>%
- # clean up banc_neurotransmitter_verified column to remove neuropeptides and
- # notes about being negative for specific neurotransmitter
- dplyr::mutate(banc_neurotransmitter_verified = map_chr(
- str_split(banc_neurotransmitter_verified, "[,;]\\s*"),
- function(values) {
- # Filter to keep only the allowed neurotransmitters
- valid_values <- values[values %in% allowed_neurotransmitters]
- # Remove any empty values that might remain
- valid_values <- valid_values[valid_values != ""]
- # Remove duplicates
- unique_values <- unique(valid_values)
- # Join with semicolons
- if(length(unique_values) > 0) {
- paste(unique_values, collapse = "; ")
- } else {
- NA # Return NA if no valid neurotransmitters
- }
- }
- )) %>%
- #dplyr::rowwise() %>%
- #dplyr::mutate(neurotransmitter_verified = strsplit(neurotransmitter_verified,split=",")) %>%
- #dplyr::ungroup() %>%
- dplyr::mutate(super_class = dplyr::case_when(
- # not neurons
- cell_class %in% c('glia','putative_glia') ~ "glia",
- grepl("trachea",super_class) ~ "trachea",
- grepl("not_a_neuron|NOT_A_NEURON",super_class) ~ "not_a_neuron",
- # Neck
- cell_type == "SNpp54" ~"ventral_nerve_cord_sensory",
- grepl("^ISN$",cell_type) ~ "central_brain_sensory",
- super_class %in% c("descending") ~ "descending",
- super_class %in% c("ascending") ~ "ascending",
- super_class %in% c("sensory_ascending") ~ "sensory_ascending",
- grepl("ascending|descending", super_class) & grepl('sensory_descending', super_class) ~ "sensory_descending",
- grepl("ascending|descending", super_class) & grepl('sensory', super_class) ~ "sensory_ascending",
- grepl("ascending|descending", super_class) & grepl('efferent|motor|endocrine', super_class) ~ "ascending_visceral_circulatory",
- grepl("ascending|descending", super_class) & grepl('afferent', flow) ~ "sensory_ascending",
- super_class %in% c("sensory_descending") ~ "sensory_descending",
- super_class %in% c("visceral_circulatory_ascending") ~ "ascending_motor",
- super_class %in% c("efferent_ascending") ~ "efferent_ascending",
- super_class %in% c("efferent_descending") ~ "efferent_descending",
- # Afferent
- grepl("afferent",flow) ~ paste0(region,"_sensory"),
- grepl("sensory",flow) ~ paste0(region,"_sensory"),
- cell_type %in% "HBeyelet" ~ "optic_lobe_sensory",
- grepl("ocellar_retinula", cell_type) ~ "central_brain_sensory",
- grepl("^R1-6$|^R7$|^R8$", cell_type) ~ "optic_lobe_sensory",
- # efferent
- grepl("endocrine|visceral_circulatory",cell_class) ~ paste0(region,"_visceral_circulatory"),
- grepl("endocrine|visceral_circulatory",super_class) ~ paste0(region,"_visceral_circulatory"),
- grepl("endocrine|visceral_circulatory",cell_function) ~ paste0(region,"_visceral_circulatory"),
- grepl("motor",cell_class) ~ paste0(region,"_motor"),
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ paste0(region,"_motor"),
- grepl("motor",cell_function) ~ paste0(region,"_motor"),
- # optic transfer
- super_class %in% c("visual_centrifugal") ~ "visual_centrifugal",
- super_class %in% c("visual_projection") ~ "visual_projection",
- # intrinsic
- grepl("ocellar",cell_class) ~ "central_brain_intrinsic",
- grepl("midbrain|central_brain",region) ~ "central_brain_intrinsic",
- grepl("vnc|ventral_nerve_cord",region) ~ "ventral_nerve_cord_intrinsic",
- grepl("vnc|ventral_nerve_cord",super_class) ~ "ventral_nerve_cord_intrinsic",
- grepl("vnc|ventral_nerve_cord",cell_class) ~ "ventral_nerve_cord_intrinsic",
- grepl("optic",region) ~ "optic_lobe_intrinsic",
- super_class %in% c("optic") ~ "optic_lobe_intrinsic",
- grepl("central",flow) ~ "central_brain_intrinsic",
- grepl("central",super_class) ~ "central_brain_intrinsic",
- TRUE ~ "unknown"
- )) %>%
- # flow again
- dplyr::mutate(flow = dplyr::case_when(
- super_class=="ascending_sensory"&grepl("^SA",cell_type) ~ "afferent",
- super_class=="ascending$"&!grepl("^SA",cell_type) ~ "intrinsic",
- cell_type %in% "HBeyelet" ~ "afferent",
- grepl("ocellar_retinula", cell_type) ~ "afferent",
- # none get NA, as desired
- TRUE ~ flow
- ) ) %>%
- # peripheral_target_type
- dplyr::mutate(peripheral_target_type = dplyr::case_when(
- # pain
- grepl("SNch01|SNxx19|SNxx20|SNxx21",MANC_type) ~ "multidendritic", # class_iv
- grepl("nociception",cell_function) ~ "multidendritic",
- grepl("pharynx|cibarium",body_part_sensory)&(grepl("mechanosensory|tactile|pumping|ciberial",cell_function)|grepl("mechanosensory|tactile|pumping|ciberial",cell_function_detailed)) ~ "multidendritic",
- # taste
- grepl("taste peg",cell_sub_class) ~ "taste_peg",
- grepl("taste_peg",cell_sub_class) ~ "taste_peg",
- grepl("taste bristle",cell_sub_class) ~ "taste_peg",
- grepl("taste_bristle",cell_sub_class) ~ "taste_peg",
- grepl("taste_peg",cell_function_detailed) ~ "taste_peg",
- grepl("hair plate",cell_sub_class) ~ "hair_plate",
- grepl("eye_bristle",cell_sub_class) ~ "bristle",
- grepl("head_bristle",cell_sub_class) ~ "bristle",
- grepl("bristle",cell_function_detailed) ~ "bristle",
- grepl("bristle",cell_function_detailed) ~ "bristle",
- grepl("mechanosensory_bristle",cell_sub_class) ~ "bristle",
- grepl("bristle",body_part_sensory) ~ "bristle",
- grepl("^JO-",cell_type) ~ "chordotonal_organ",
- grepl("chordotonal",cell_type) ~ "chordotonal_organ",
- grepl("chordotonal",cell_sub_class) ~ "chordotonal_organ",
- grepl("chordotonal",cell_function) ~ "chordotonal_organ",
- grepl("DNx01",cell_type) ~ "campaniform_sensillum",
- grepl("campaniform",cell_sub_class) ~ "campaniform_sensillum",
- grepl("campaniform",cell_function_detailed) ~ "campaniform_sensillum",
- grepl("campaniform",cell_function) ~ "campaniform_sensillum",
- # hemolymph
- grepl("haemolymph|hemolymph",body_part_sensory) ~ "nutrient_receptor",
- # both
- grepl("taste peg",cell_function_detailed) ~ "taste_peg",
- grepl("taste_peg",cell_function_detailed) ~ "taste_peg",
- grepl("taste_peg",cell_sub_class) ~ "taste_peg",
- grepl("bristle",cell_function_detailed) ~ "bristle",
- grepl("bristle",cell_sub_class) ~ "bristle",
- grepl("hair_plate",cell_function_detailed) ~ "hair_plate",
- grepl("hair_plate",cell_sub_class) ~ "hair_plate",
- grepl("taste peg",cell_function) ~ "taste_peg",
- grepl("taste_peg",cell_function) ~ "taste_peg",
- grepl("bristle",cell_function) ~ "bristle",
- grepl("bristle",cell_sub_class) ~ "bristle",
- grepl("hair_plate",cell_function) ~ "hair_plate",
- # from MANC
- grepl("campaniform sensilla",MANC_receptorType) ~ "campaniform_sensillum",
- grepl("chordotonal",MANC_receptorType) ~ "chordotonal_organ",
- grepl("chordotonal",cell_function_detailed) ~ "chordotonal_organ",
- grepl("hair plate",MANC_receptorType) ~ "hair_plate",
- grepl("putative sweet taste bristle",MANC_receptorType) ~ "taste_peg",
- grepl("sweet taste bristle",MANC_receptorType) ~ "taste_peg",
- grepl("taste bristle",MANC_receptorType) ~ "taste_peg",
- grepl("strand receptor",MANC_receptorType) ~ "strand",
- grepl("taste bristle",MANC_receptorType) ~ "taste_peg",
- # visual
- grepl("ocellar retinula",FAFB_cell_type) ~ "photoreceptor",
- grepl("ocellar_retinula",cell_type) ~ "photoreceptor",
- grepl("^R1-6|^R1-6|^R7|^R8",cell_type) ~ "photoreceptor",
- grepl("^R1-6|^R1-6|^R7|^R8",cell_type) ~ "photoreceptor",
- grepl("^HBeyelet",cell_type) ~ "photoreceptor",
- grepl("^HBeyelet",cell_type) ~ "photoreceptor",
- # from FAFB
- grepl("^ORN",cell_type)&cell_function=="olfactory" ~ "olfactory_sensillum",
- grepl("^TRN",cell_type)&cell_function=="thermosensory" ~ "thermosensory_sensillum",
- grepl("^HRN",cell_type)&cell_function=="hygrosensory" ~ "hygrosensory_sensillum",
- grepl("AC neuron|AC_neuron|ac_neuron",cell_type) ~ "internal_thermosensory_receptor",
- grepl("leg",body_part_sensory)&grepl("chemosensory|gustatory",cell_function) ~ "taste_peg",
- grepl("labellum",body_part_sensory)&grepl("chemosensory|gustatory",cell_function) ~ "external_taste_sensillum",
- grepl("abdomen",body_part_sensory)&grepl("chemosensory|gustatory",cell_function) ~ "external_taste_sensillum",
- grepl("pharynx|crop",body_part_sensory)&grepl("chemosensory|gustatory",cell_function) ~ "internal_taste_sensillum",
- grepl("wing_margin",body_part_sensory)&grepl("chemosensory|gustatory",cell_function) ~ "taste_sensillum",
- grepl("sensory",super_class) ~ "orphan",
- # motor
- # leg muscles - from MANC (note, subtle differences from FANC)
- grepl("Acc._ti_flexor", cell_class) ~ "accessory_tibia_flexor_muscle",
- grepl("Fe_reductor", cell_class) ~ "femur_reductor_muscle",
- grepl("ltm1-tibia", cell_class) ~ "long_tendon_muscle_1",
- grepl("ltm2-femur", cell_class) ~ "long_tendon_muscle_2",
- grepl("ltm", cell_class) ~ "long_tendon_muscle",
- grepl("Pleural_remotor/abductor", cell_class) ~ "pleural_remotor_and_abductor_muscle",
- grepl("Sternal_adductor", cell_class) ~ "sternal_adductor_muscle",
- grepl("Sternal_anterior_rotator", cell_class) ~ "sternal_anterior_rotator_muscle",
- grepl("Sternal_posterior_rotator", cell_class) ~ "sternal_posterior_rotator_muscle",
- grepl("Sternotrochanter", cell_class) ~ "sternotrochanter_extensor_muscle",
- grepl("Ta_depressor", cell_class) ~ "tarsus_depressor_muscle",
- grepl("Ta_levator", cell_class) ~ "tarsus_levator_muscle",
- grepl("Tergopleural/Pleural_promotor", cell_class) ~ "tergopleural_or_pleural_promotor_muscle",
- grepl("Tergotr.", cell_class) ~ "tergotrochanter_extensor_muscle",
- grepl("Ti_extensor", cell_class) ~ "tibia_extensor_muscle",
- grepl("Ti_flexor", cell_class) ~ "tibia_flexor_muscle",
- grepl("Tr_extensor", cell_class) ~ "trochanter_extensor_muscle",
- grepl("Tr_flexor", cell_class) ~ "trochanter_flexor_muscle",
- grepl("leg_motor", cell_function) ~ "leg_muscle",
- # wing muscles - from MANC (note, subtle differences from FANC)
- grepl("b1_motor_neuron", cell_class) ~ "b1_muscle",
- grepl("b2_motor_neuron", cell_class) ~ "b2_muscle",
- grepl("b3_motor_neuron", cell_class) ~ "b3_muscle",
- grepl("^DLM", cell_class) ~ "dorsal_longitudinal_muscle",
- grepl("^DVM", cell_class) ~ "dorsoventral_muscle",
- grepl("^hg1_motor_neuron", cell_class) ~ "iv1_muscle",
- grepl("^hg2_motor_neuron", cell_class) ~ "iv2_muscle",
- grepl("^hg3_motor_neuron", cell_class) ~ "iv3_muscle",
- grepl("^hg4_motor_neuron", cell_class) ~ "iv4_muscle",
- grepl("^i1_motor_neuron", cell_class) ~ "i1_muscle",
- grepl("^i2_motor_neuron", cell_class) ~ "i2_muscle",
- grepl("^iii1_motor_neuron", cell_class) ~ "iii1_muscle",
- grepl("^iii3_motor_neuron", cell_class) ~ "iii2_muscle",
- grepl("^ps1_motor_neuron", cell_class) ~ "ps1_muscle",
- grepl("^ps2_motor_neuron", cell_class) ~ "ps2_muscle",
- grepl("^tp1_motor_neuron", cell_class) ~ "tp1_muscle",
- grepl("^tp2_motor_neuron", cell_class) ~ "tp2_muscle",
- grepl("^tp_motor_neuron", cell_class) ~ "tergopleural_muscle",
- grepl("^TTM_motor_neuron", cell_class) ~ "trochanter_extensor_muscle",
- ((grepl("wing", body_part_effector) & grepl("motor", super_class)) |
- (grepl("wing_motor_neuron", cell_class))) ~ "wing_muscle",
- # haltere muscles - from MANC
- grepl("^hDVM_motor_neuron", cell_class) ~ "haltere_dorsoventral_muscle",
- grepl("^hi1_motor_neuron", cell_class) ~ "hi1_muscle",
- grepl("^hi2_motor_neuron", cell_class) ~ "hi2_muscle",
- grepl("^hiii2_motor_neuron", cell_class) ~ "hiii2_muscle",
- grepl("haltere_motor_neuron", cell_class) ~ "haltere_direct_control_muscle",
- # neck muscles - from MANC
- grepl("^CvN_A1$", cell_type) ~ "transverse_horizontal_1_muscle",
- grepl("^CvN_A2$", cell_type) ~ "transverse_horizontal_2_muscle",
- (grepl("^FNM2$", cell_type) & grepl("AD_motor_neuron", cell_class)) ~ "adductor_muscle",
- grepl("neck_motor_neuron", cell_class) ~ "neck_muscle",
- # antenna muscles - from FAFB (specific muscle targets unknown)
- grepl("antennal_motor_neuron", cell_class) ~ "antenna_muscle",
- # retina muscles - from FAFB (specific muscle targets unknown)
- grepl("eye_motor_neuron", cell_class) ~ "retina_muscle",
- # proboscis muscles (specific muscle targets unknown)
- (grepl("proboscis_motor_neuron", cell_class) | grepl("proboscis", body_part_effector)) ~ "proboscis_muscle",
- # pharynx muscles (specific muscle targets unknown)
- grepl("pharynx", body_part_effector) ~ "pharynx_muscle",
- # proboscis muscles (specific muscle targets unknown)
- grepl("proboscis_motor_neuron", cell_class) ~ "proboscis_muscle",
- # salivary muscle
- grepl("salivary_motor_neuron", cell_class) ~ "m13_muscle",
- # crop
- grepl("crop_motor_neuron", cell_class) ~ "crop_muscle",
- # remainder
- TRUE ~ NA
- ) ) %>%
- dplyr::mutate(cell_function_detailed = dplyr::case_when(
- # gustatory
- grepl("sugar_or_water",cell_function)|grepl("sugar_or_water",cell_function_detailed) ~ "sweet_or_water",
- grepl("putative sweet taste bristle",MANC_receptorType) ~ "sweet",
- grepl("sweet taste bristle",MANC_receptorType) ~ "sweet",
- grepl("sweet taste bristle",MANC_receptorType) ~ "sweet",
- grepl("sugar",cell_function)|grepl("sugar",cell_function_detailed) ~ "sweet",
- grepl("sweet",cell_function)|grepl("sweet",cell_function_detailed) ~ "sweet",
- grepl("water",cell_function)|grepl("water",cell_function_detailed)|grepl("water",cell_sub_class) ~ "water",
- grepl("bitter",cell_function)|grepl("bitter",cell_function_detailed)|grepl("bitter",cell_sub_class) ~ "bitter",
- grepl("low_salt",cell_function)|grepl("low_salt",cell_function_detailed)|grepl("low_salt",cell_sub_class) ~ "low_salt",
- grepl("pheromone_contact",cell_function)|grepl("pheromone_contact",cell_function_detailed) ~ "pheromone_contact",
- grepl("gustatory",cell_function)&grepl("pheromone",cell_function_detailed) ~ "pheromone_contact",
- grepl("chemosensory",cell_function)&grepl("pheromone",cell_function_detailed) ~ "pheromone_contact",
- # olfactory --add
- grepl("^ORN_VL2p$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_DL5$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_DM2$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_VM7d$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_VM3$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_VA2$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_DP1m$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_DP1l$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_VC4$",cell_type)&cell_function=="olfactory" ~ "alcoholic_fermentation_volatile",
- grepl("^ORN_V$",cell_type)&cell_function=="olfactory" ~ "carbon_dioxide_volatile",
- grepl("^ORN_DM1$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_DM4$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VM7d$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VM5v$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_DM3$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VA3$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VA4$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VC2$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_DM1$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VA3$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_VA6$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_DM5$",cell_type)&cell_function=="olfactory" ~ "yeasty_volatile",
- grepl("^ORN_DM3$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_VA3$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_VM5v$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_DM2$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_VM2$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_VM5d$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_DL1$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_DA3$",cell_type)&cell_function=="olfactory" ~ "fruity_volatile",
- grepl("^ORN_DL2d$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_DL2v$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VC5$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VL2a$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VM4$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VL1$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VM1$",cell_type)&cell_function=="olfactory" ~ "decaying_fruit_volatile",
- grepl("^ORN_VA1v$",cell_type)&cell_function=="olfactory" ~ "pheromone_volatile",
- grepl("^ORN_VA1d$",cell_type)&cell_function=="olfactory" ~ "pheromone_volatile",
- grepl("^ORN_DA1$",cell_type)&cell_function=="olfactory" ~ "pheromone_volatile",
- grepl("^ORN_DL3$",cell_type)&cell_function=="olfactory" ~ "pheromone_volatile",
- grepl("^ORN_DC3$",cell_type)&cell_function=="olfactory" ~ "pheromone_volatile",
- grepl("^ORN_DA2$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DM3$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DC1$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DL5$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DL4$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DC4$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_VC3$",cell_type)&cell_function=="olfactory" ~ "aversive_volatile",
- grepl("^ORN_DC2$",cell_type)&cell_function=="olfactory" ~ "plant_matter_volatile",
- grepl("^ORN_VC1$",cell_type)&cell_function=="olfactory" ~ "plant_matter_volatile",
- grepl("^ORN_VA5$",cell_type)&cell_function=="olfactory" ~ "animal_matter_volatile",
- grepl("^ORN_VA7l$",cell_type)&cell_function=="olfactory" ~ "animal_matter_volatile",
- grepl("co2|carbon_dioxide",cell_function)|grepl("co2|carbon_dioxide",cell_function_detailed) ~ "carbon_dioxide",
- grepl("pheromone_volatile",cell_function)|grepl("pheromone_volatile",cell_function_detailed) ~ "pheromone_volatile",
- grepl("olfactory",cell_function)&grepl("pheromone",cell_function_detailed) ~ "pheromone_volatile",
- # thermosensory
- grepl("TRN_VP1",cell_type) ~ "evaporation",
- grepl("TRN_VP2",cell_type) ~ "heating",
- grepl("TRN_VP3",cell_type) ~ "cooling",
- grepl("HRN_VP4",cell_type) ~ "dry",
- grepl("HRN_VP5",cell_type) ~ "humid",
- grepl("heating",cell_sub_class) ~ "heating",
- grepl("cooling",cell_sub_class) ~ "cooling",
- grepl("humid",cell_sub_class) ~ "humid",
- grepl("dry",cell_sub_class) ~ "dry",
- # mechanosensory
- ### chordotonal
- grepl("JO-A",cell_type) ~ "auditory_low_frequency",
- grepl("JO-B",cell_type) ~ "auditory_high_frequency",
- grepl("JO-C",cell_type) ~ "direction",
- grepl("JO-D",cell_type) ~ "position",
- grepl("JO-E",cell_type) ~ "position",
- grepl("JO-F",cell_type) ~ "position",
- grepl("chordotonal_club|club_chordotonal",cell_function_detailed)|grepl("club",cell_sub_class) ~ "vibro_tactile",
- grepl("chordotonal_claw|claw_chordotonal",cell_function_detailed)|grepl("claw",cell_sub_class) ~ "position",
- grepl("chordotonal_hook|hook_chordotonal",cell_function_detailed)|grepl("hook",cell_sub_class) ~ "direction",
- grepl("club",cell_sub_class) ~ "vibro_tactile",
- grepl("claw",cell_sub_class) ~ "position",
- grepl("hook",cell_sub_class) ~ "direction",
- grepl("vibro-tactile|vibro_tactile",cell_function)|grepl("vibro-tactile|vibro_tactile",cell_function_detailed) ~ "vibro_tactile",
- grepl("vibration",cell_function)|grepl("vibration",cell_function_detailed) ~ "vibration",
- grepl("position",cell_function)|grepl("position",cell_function_detailed) ~ "position",
- grepl("stretch",cell_function)|grepl("stretch",cell_function_detailed) ~ "stretch",
- grepl("deflection",cell_function)|grepl("deflection",cell_function_detailed) ~ "deflection",
- ### other
- grepl("_bristle",cell_function_detailed) ~ cell_function_detailed,
- grepl("campaniform",peripheral_target_type) ~ "mechanical_strain",
- grepl("hair_plate",peripheral_target_type) ~ "joint_angle",
- grepl("chordotonal",peripheral_target_type) ~ "vibro_position",
- ### putative pump
- grepl("ciberial",cell_function)|grepl("ciberial",cell_function_detailed) ~ "contractile",
- grepl("pumping",cell_function)|grepl("pumping",cell_function_detailed) ~ "contractile",
- grepl("ciberial",cell_function)|grepl("ciberial",cell_function_detailed) ~ "contractile",
- grepl("CB0991",cell_type) ~ "contractile",
- # respiratory
- grepl("oxygenation",cell_function)|grepl("oxygenation",cell_function_detailed) ~ "oxygenation",
- grepl("respiratory",cell_function)|grepl("respiratory",cell_function_detailed) ~ "respiratory",
- # interoceptive
- grepl("interoceptive",cell_function)|grepl("interoceptive",cell_function_detailed)|grepl("^ISN",cell_type) ~ "interoceptive",
- grepl("AC neuron|AC_neuron|ac_neuron",cell_type) ~ "internal_thermosensory",
- # motor related
- # leg
- grepl("Acc._ti_flexor", cell_class) ~ "flex_femur_tibia_joint",
- grepl("Fe_reductor", cell_class) ~ "unknown_leg_movement",
- grepl("ltm1-tibia", cell_class) ~ "pull_long_tendon",
- grepl("ltm2-femur", cell_class) ~ "pull_long_tendon",
- grepl("ltm", cell_class) ~ "pull_long_tendon",
- grepl("Pleural_remotor/abductor", cell_class) ~ "move_coxa_posterior_lateral",
- grepl("Sternal_adductor", cell_class) ~ "move_coxa_medial",
- grepl("Sternal_anterior_rotator", cell_class) ~ "move_coxa_anterior",
- grepl("Sternal_posterior_rotator", cell_class) ~ "move_coxa_posterior",
- grepl("Sternotrochanter", cell_class) ~ "extend_coxa_trochanter_joint",
- grepl("Ta_depressor", cell_class) ~ "extend_tibia_tarsus_joint",
- grepl("Ta_levator", cell_class) ~ "flex_tibia_tarsus_joint",
- grepl("Tergopleural/Pleural_promotor", cell_class) ~ "move_coxa_anterior",
- grepl("Tergotr.", cell_class) ~ "extend_coxa_trochanter_joint",
- grepl("Ti_extensor", cell_class) ~ "extend_femur_tibia_joint",
- grepl("Ti_flexor", cell_class) ~ "flex_femur_tibia_joint",
- grepl("Tr_extensor", cell_class) ~ "extend_coxa_trochanter_joint",
- grepl("Tr_flexor", cell_class) ~ "flex_coxa_trochanter_joint",
- grepl("leg_motor", cell_function) ~ "unknown_leg_movement",
- # wing - from MANC (note, subtle differences from FANC)
- grepl("^b1_motor_neuron", cell_class) ~ "tonic_wing_steering",
- grepl("^b2_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("^b3_motor_neuron", cell_class) ~ "tonic_wing_steering",
- grepl("^DLM", cell_class) ~ "wing_power",
- grepl("^DVM", cell_class) ~ "wing_power",
- grepl("hg1_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("hg2_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("hg3_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("hg4_motor_neuron", cell_class) ~ "tonic_wing_steering",
- grepl("^i1_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("^i2_motor_neuron", cell_class) ~ "tonic_wing_steering",
- grepl("^iii1_motor_neuron", cell_class) ~ "phasic_wing_steering",
- grepl("^iii3_motor_neuron", cell_class) ~ "unknown_wing_steering",
- grepl("^ps1_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^ps2_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp1_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp2_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^TTM_motor_neuron", cell_class) ~ "middle_leg_extension",
- # haltere muscles - from MANC
- grepl("hDVM_motor_neuron", cell_class) ~ "haltere_power",
- grepl("hi1_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("hi2_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("hiii2_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("haltere_motor_neuron", cell_class) ~ "unknown_haltere",
- # visceral_circulatory - neuropeptide(s) for identified neurons (by Meet)
- grepl("^m_NSC_DILP$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^m_NSC_DH44$", cell_type) ~ banc_neuropeptide_verified,
- (grepl("^ventral_nerve_cord_visceral_circulatory$", super_class) &
- grepl("Dh44", banc_neuropeptide_verified) &
- grepl("Lk", banc_neuropeptide_verified)) ~ banc_neuropeptide_verified,
- grepl("^m_NSC_DMS$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^l_NSC_ITP$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^l_NSC_CRZ$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^l_NSC_DH31$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^SEZ_NSC_Hugin$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^SEZ_NSC_CAPA$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^ENXXX012$", cell_type) ~ banc_neuropeptide_verified,
- grepl("^EN27X010$", cell_type) ~ banc_neuropeptide_verified,
- # for remainder, wipe cell_function_detailed from visceral_circulatory neurons
- grepl("visceral_circulatory", super_class) ~ NA,
- # remainder
- cell_function_detailed=="NA" ~ NA,
- is.na(cell_function_detailed) ~ cell_function_detailed,
- TRUE ~ cell_function_detailed
- ) ) %>%
- dplyr::mutate(cell_function = dplyr::case_when(
- grepl("CB0991",cell_type) ~ "aorta",
- # gustatory
- grepl("taste_peg",peripheral_target_type) ~ "gustatory_tactile",
- grepl("sensory",super_class) & cell_type=='TPMN' ~ "gustatory_tactile",
- grepl("bitter",cell_function)|grepl("bitter",cell_function_detailed) ~ "gustatory",
- grepl("sugar_or_water",cell_function)|grepl("sugar_or_water",cell_function_detailed) ~ "gustatory",
- grepl("sugar",cell_function)|grepl("sugar",cell_function_detailed) ~ "gustatory",
- grepl("water",cell_function)|grepl("water",cell_function_detailed) ~ "gustatory",
- grepl("pheromone_contact",cell_function)|grepl("pheromone_contact",cell_function_detailed) ~ "gustatory",
- grepl("pheromone_contact",cell_function)|grepl("low_salt",cell_function_detailed) ~ "gustatory",
- grepl("chemosensory|gustatory",cell_function) ~ "gustatory",
- grepl("chemosensory|gustatory",cell_function_detailed) ~ "gustatory",
- grepl("sensory",super_class) & grepl("^SA_VTV_",cell_type) ~ "gustatory",
- # olfactory
- grepl("co2|carbon_dioxide",cell_function)|grepl("co2|carbon_dioxide",cell_function_detailed) ~ "olfactory",
- grepl("pheromone_volatile",cell_function)|grepl("pheromone_volatile",cell_function_detailed) ~ "olfactory",
- grepl("olfactory",cell_function) ~ "olfactory",
- # thermosensory
- grepl("thermosensory",cell_function) ~ "thermosensory",
- grepl("^TRN",cell_type) ~ "thermosensory",
- grepl("hygrosensory",cell_function) ~ "hygrosensory",
- grepl("^HRN",cell_type) ~ "hygrosensory",
- # mechanosensory
- grepl("JO-",cell_type) ~ "proprioception",
- grepl("vibro-tactile|vibro_tactile",cell_function)|grepl("vibro-tactile|vibro_tactile",cell_function_detailed) ~ "proprioception",
- grepl("proprioception|proprioceptive",cell_function)|grepl("proprioception|proprioceptive",cell_function_detailed) ~ "proprioception",
- grepl("vibration",cell_function)|grepl("vibration",cell_function_detailed) ~ "proprioception",
- grepl("position",cell_function)|grepl("position",cell_function_detailed) ~ "proprioception",
- grepl("stretch",cell_function)|grepl("stretch",cell_function_detailed) ~ "proprioception",
- grepl("campaniform|hair_plate|chordotonal",peripheral_target_type) ~ "proprioception",
- ### bristle
- grepl("^tactile$",cell_function)|grepl("^tactile$",cell_function_detailed) ~ "tactile",
- grepl("mechanosensory|bristle",cell_function) ~ "tactile",
- grepl("bristle",peripheral_target_type) ~ "tactile",
- ### nociception
- grepl("nociception",cell_function)|grepl("nociception",cell_function_detailed) ~ "putative_nociception",
- ### contractile
- grepl("ciberial",cell_function)|grepl("ciberial",cell_function_detailed) ~ "contractile",
- grepl("pumping",cell_function)|grepl("pumping",cell_function_detailed) ~ "contractile",
- # visual
- cell_type %in% "R1-6" ~ "visual_achromatic",
- cell_type %in% c("L1","L2","L3","L4","L5") ~ "visual_achromatic",
- cell_type %in% "HBeyelet" ~ "visual_achromatic",
- cell_type %in% c("R7","R8") ~ "visual_chromatic",
- (grepl("^DmDRA", cell_type)) ~ "visual_polarized_light",
- grepl("ocellar",cell_function)|grepl("ocellar",cell_function_detailed) ~ "visual_ocellar",
- grepl("ocellar_retinula_cell",cell_type) ~ "visual_ocellar",
- grepl("^OCG",cell_type) ~ "visual_ocellar",
- grepl("visual_chromatic",cell_function)|grepl("visual_chromatic",cell_function_detailed) ~ "visual_chromatic",
- grepl("visual_achromatic",cell_function)|grepl("visual_achromatic",cell_function_detailed) ~ "visual_achromatic",
- grepl("ocellar",cell_function)|grepl("ocellar",cell_function_detailed) ~ "visual_ocellar",
- # respiratory
- grepl("oxygenation",cell_function)|grepl("oxygenation",cell_function_detailed) ~ "oxygenation",
- grepl("respiratory",cell_function)|grepl("respiratory",cell_function_detailed) ~ "respiratory",
- # interoceptive
- grepl("interoceptive",cell_function)|grepl("interoceptive",cell_function_detailed)|grepl("^ISN",cell_type) ~ "interoceptive",
- grepl("AC neuron",cell_type) ~ "thermosensory",
- # motor
- # leg
- grepl("leg_motor", cell_function) ~ "leg_motor",
- # wing muscles
- grepl("b1_motor_neuron", cell_class) ~ "wing_steering",
- grepl("b2_motor_neuron", cell_class) ~ "wing_steering",
- grepl("b3_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^DLM", cell_class) ~ "wing_power",
- grepl("^DVM", cell_class) ~ "wing_power",
- grepl("^hg1_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^hg2_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^hg3_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^hg4_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^i1_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^i2_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^iii1_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^iii3_motor_neuron", cell_class) ~ "wing_steering",
- grepl("^ps1_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^ps2_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp1_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp2_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^tp_motor_neuron", cell_class) ~ "wing_tension",
- grepl("^TTM_motor_neuron", cell_class) ~ "jump_escape",
- ((grepl("wing", body_part_effector) & grepl("motor", super_class)) |
- (grepl("wing_motor_neuron", cell_class))) ~ "unknown_wing_motor",
- # haltere
- grepl("^hDVM_motor_neuron", cell_class) ~ "haltere_power",
- grepl("^hi1_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("^hi2_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("^hiii2_motor_neuron", cell_class) ~ "haltere_steering",
- grepl("haltere_motor_neuron", cell_class) ~ "unknown_haltere_motor",
- # neck - from MANC
- grepl("neck_motor_neuron", cell_class) ~ "neck_motor",
- grepl("neck_motor_neuron", cell_sub_class) ~ "neck_motor",
- # antenna
- grepl("antennal_motor_neuron", cell_class) ~ "antenna_motor",
- # retina
- grepl("eye_motor_neuron", cell_class) ~ "retina_motor",
- # proboscis
- (grepl("proboscis_motor_neuron", cell_class) | grepl("proboscis", body_part_effector)) ~ "proboscis_motor",
- # pharynx
- grepl("pharynx", body_part_effector) ~ "pharynx_motor",
- # proboscis muscles (specific muscle targets unknown)
- grepl("proboscis_motor_neuron", cell_class) ~ "proboscis_motor",
- # salivary
- grepl("salivary_motor_neuron", cell_class) ~ "salivary_motor",
- # crop
- grepl("crop_motor_neuron", cell_class) ~ "crop_motor",
- # visceral_circulatory - functions defined by Meet
- grepl("^m_NSC_DILP$", cell_type) ~ "energy_metabolism; food_intake",
- grepl("^m_NSC_DH44$", cell_type) ~
- "diuresis; food_intake; energy_metabolism; post_mating_responses",
- (grepl("^ventral_nerve_cord_visceral_circulatory$", super_class) &
- grepl("Dh44", banc_neuropeptide_verified) &
- grepl("Lk", banc_neuropeptide_verified)) ~
- "diuresis; stress_tolerance; pain_threshold",
- grepl("^m_NSC_DMS$", cell_type) ~ "food_intake",
- grepl("^l_NSC_ITP$", cell_type) ~
- "hormone_regulation; stress_tolerance; energy_metabolism; osmotic_balance",
- grepl("^l_NSC_CRZ$", cell_type) ~
- "cardiostimulation; energy_metabolism; stress_tolerance; hormone_regulation",
- grepl("^l_NSC_DH31$", cell_type) ~
- "diuresis; gut_motility; hormone_regulation",
- grepl("^SEZ_NSC_CAPA$", cell_type) ~ "anti_diuresis; stress_tolerance",
- grepl("^ENXXX012$", cell_type) ~
- "anti_diuresis; stress_tolerance; energy_metabolism",
- grepl("^EN27X010$", cell_type) ~ "myomodulation; energy_metabolism",
- # remainder
- TRUE ~ NA
- ) ) %>%
- dplyr::mutate(cell_function_detailed = dplyr::case_when(
- cell_function == cell_function_detailed ~ NA,
- TRUE ~ cell_function_detailed
- )) %>%
- dplyr::mutate(cell_class = dplyr::case_when(
- # 'endocrine'
- grepl("^ISN$",cell_type) ~ "nutrient_sensory_neuron",
- grepl("^PSI$",cell_type) ~ "peripheral_intrinsic_neuron",
- grepl("^ascending_visceral_circulatory",super_class) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^m_NSC_unknown$",cell_type) ~ "pars_intercerebralis_neurosecretory_cell",
- grepl("^DNg28$",cell_type) ~ "subesophageal_zone_neurosecretory_cell",
- grepl("^m-NSC$|medial_NSC|medial_neurosecretory_cell",cell_sub_class) ~ "pars_intercerebralis_neurosecretory_cell",
- grepl("^l-NSC$|lateral_NSC|lateral_neurosecretory_cell",cell_sub_class) ~ "pars_lateralis_neurosecretory_cell",
- grepl("SEZ-NSC|subesophageal_zone_neurosecretory_cell",cell_sub_class) ~ "subesophageal_zone_neurosecretory_cell",
- grepl("^PI$",FAFB_cell_type) ~ "pars_intercerebralis_efferent_neuron",
- grepl("FMRFa|CAPA",neuropeptide_verified)&grepl("efferent",flow)&grepl("ventral_nerve_cord",region)&grepl("ANm",MANC_origin) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("endocrine",cell_class)&grepl("ventral_nerve_cord",region)&grepl("hemal",body_part_effector)&grepl("ANm",MANC_origin) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^ad_encodrine_neuron$|ANm_endocrine",cell_class)&grepl("hemal",body_part_effector) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^EN$",cell_sub_class)&grepl("ventral_nerve_cord",region)&grepl("hemal",body_part_effector)&grepl("ANm",MANC_origin) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("FMRFa|CAPA",neuropeptide_verified)&grepl("efferent",flow)&grepl("ventral_nerve_cord",region) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("endocrine",cell_class)&grepl("ventral_nerve_cord",region)&grepl("hemal",body_part_effector) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^EN$",cell_sub_class)&grepl("ventral_nerve_cord",region)&grepl("hemal",body_part_effector) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^ad_encodrine_neuron$|ANm_endocrine",cell_class)&!grepl("hemal",body_part_effector)&grepl("ANm",MANC_origin) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^ad_encodrine_neuron$",cell_sub_class)&grepl("ANm",MANC_origin) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("endocrine",cell_class)&grepl("ventral_nerve_cord",region)&!grepl("hemal",body_part_effector) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^EN$",cell_sub_class)&grepl("ventral_nerve_cord",region)&!grepl("hemal",body_part_effector) ~ "ventral_nerve_cord_neurosecretory_cell",
- grepl("^multi_endocrine$",cell_class) ~ "ventral_nerve_cord_efferent_neuron",
- grepl("^EN$",cell_sub_class)&grepl("brain",region) ~ "central_brain_efferent_neuron",
- grepl("endocrine",cell_class)&grepl("brain",region) ~ "central_brain_efferent_neuron",
- cell_sub_class=="NSC" ~ paste0(region,"_neurosecretory_cell"),
- # sensory
- ## classics
- grepl("^ORN",cell_type) ~ "olfactory_receptor_neuron",
- grepl("^GRN",cell_type) ~ "gustatory_receptor_neuron",
- grepl("^HRN",cell_type) ~ "hygrosensory_receptor_neuron",
- grepl("^TRN",cell_type) ~ "thermosensory_receptor_neuron",
- grepl("AC neuron|AC_neuron|ac_neuron",cell_type) ~ "thermosensory_receptor_neuron",
- ### conjunctions
- grepl("sensory",super_class)&!is.na(peripheral_target_type) ~ paste0(peripheral_target_type,"_neuron"),
- grepl("sensory",super_class)&is.na(peripheral_target_type) ~ "orphan_sensory_neuron",
- # grepl("sensory",super_class)&grepl("head|^frontal|^frontoorbital|^orbital|^interocellar|^vibrissa|^interommatidial|^occipital_dorsal|^occipital_ventral|^postorbital_dorsal|^postorbital_ventral|^vertical|^postocellar|^supracervical|^haustellum|^ocellar",body_part_sensory)&!is.na(peripheral_target_type) ~ paste0("head_",peripheral_target_type,"_neuron"),
- # central complex
- grepl("CX|central_complex",cell_class) & grepl("^hDelta|^vDelta|^FC|columnar|^PEN$",cell_sub_class) ~ "central_complex_intrinsic_neuron",
- grepl("CX|central_complex",cell_class) & grepl("^EL$|^EPG|^Delta7|^P6\\-8P9|^P1\\-9|^PFN|^FC",cell_type) ~ "central_complex_intrinsic_neuron",
- grepl("CX|central_complex",cell_class) & grepl("^NO$|PB_input|ER|fb_tangential|FB_tangential|ExR|NO_input|CB.FB|^SA1|^SA2|^SA3|^SAF|^FB",cell_sub_class) ~ "central_complex_input_neuron",
- grepl("CX|central_complex",cell_class) & grepl("^NO$|PB_input|ER|fb_tangential|FB_tangential|ExR|NO_input|CB.FB|^SA1|^SA2|^SA3|^SAF|^FB",cell_type) ~ "central_complex_input_neuron",
- grepl("CX|central_complex",cell_class) & grepl("^FS|^PFL|^PFR|^FR|^PFG|^PEG",cell_sub_class) ~ "central_complex_output_neuron",
- # motor
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & is.na(body_part_effector) ~ "orphan_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & grepl("leg",body_part_effector) ~ "leg_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & grepl("spiracle", cell_class) ~ "spiracle_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & grepl("wing",body_part_effector) ~ "wing_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & grepl("neck",body_part_effector) ~ "neck_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) & grepl("salivary",body_part_effector) ~ "salivary_motor_neuron",
- grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ paste0(body_part_effector,"_motor_neuron"),
- # neck
- super_class=="ascending" ~ "ascending_neuron",
- super_class=="descending" ~ "descending_neuron",
- grepl("sensory_ascending",cell_class) ~ "sensory_ascending_neuron",
- grepl("sensory_descending",cell_class) ~ "sensory_descending_neuron",
- grepl("efferent_ascending",cell_class) ~ "efferent_ascending_neuron",
- grepl("efferent_descending",cell_class) ~ "efferent_descending_neuron",
- # circadian
- grepl("^clock$|circadian",cell_class) ~ "circadian_neuron",
- cell_type %in% "HBeyelet" ~ "circadian_neuron",
- grepl("APDN3|LTe71|SLP1500|LMTe01|SLP249|PLP080",cell_type)~ "circadian_neuron",
- grepl("^LNd|^LNv|^DN1p|^DN1a|^DN1b|^DN3|^LPN$|CB1215|PV7c11",cell_type)~ "circadian_neuron",
- grepl("SLPpl1",FAFB_ito_lee_hemilineage)&grepl("clock|circadian",cell_class)~ "circadian_neuron",
- # optic
- (grepl("^C2$|^C3$", cell_type)) ~ "optic_lobe_intrinsic_centrifugal",
- (grepl("^Dm\\d+", cell_type)) ~ "distal_medulla",
- (grepl("^CB3849$", cell_type)) ~ "distal_medulla",
- (grepl("^DmDRA", cell_type)) ~ "distal_medulla_dorsal_rim_area",
- (grepl("^Lai$", cell_type)) ~ "lamina_intrinsic",
- (grepl("^L\\d$", cell_type)) ~ "lamina_monopolar",
- (grepl("^L\\d-\\d$", cell_type)) ~ "lamina_monopolar",
- (grepl("^Lat$", cell_type)) ~ "lamina_tangential",
- (grepl("Lawf", cell_type)) ~ "lamina_wide_field",
- (grepl("^Li\\d+$", cell_type)) ~ "lobula_intrinsic",
- (grepl("^CB3815$", cell_type)) ~ "lobula_intrinsic",
- (grepl("^LLPt$", cell_type)) ~ "lobula_lobula_plate_tangential",
- (grepl("^CT1$|^LMa\\d$", cell_type)) ~ "lobula_medulla_amacrine",
- (grepl("^CB3818$", cell_type)) ~ "lobula_medulla_amacrine",
- (grepl("^LMt\\d$", cell_type)) ~ "lobula_medulla_tangential",
- (grepl("CB3820", cell_type)) ~ "lobula_medulla_tangential",
- (grepl("^LPi\\d+$", cell_type)) ~ "lobula_plate_intrinsic",
- (grepl("^CB3826$", cell_type)) ~ "lobula_plate_intrinsic",
- (grepl("^Mi\\d+$", cell_type)) ~ "medulla_intrinsic",
- (grepl("^Am1$", cell_type)) ~ "medulla_lobula_lobula_plate_amacrine",
- (grepl("^MLt\\d$", cell_type)) ~ 'medulla_lobula_tangential',
- (grepl("^CB3833$", cell_type)) ~ 'medulla_lobula_tangential',
- (grepl("^PDt$", cell_type)) ~ "proximal_distal_medulla_tangential",
- (grepl("^Pm\\d+$", cell_type)) ~ "proximal_medulla",
- (grepl("^Sm\\d+$", cell_type)) ~ "serpentine_medulla",
- (grepl("^CB3825$|^CB3832$", cell_type)) ~ "serpentine_medulla",
- (grepl("^T\\d", cell_type)) ~ 'transverse_neuron',
- (grepl("^Tlp\\d+$", cell_type)) ~ "translobula_plate",
- (grepl("^Tm\\d+", cell_type)) ~ "transmedullary",
- (grepl("^CB3851$|^CB3864$", cell_type)) ~ "transmedullary",
- (grepl("^TmY\\d+", cell_type)) ~ "transmedullary_y",
- (grepl("^CB3816$", cell_type)) ~ "transmedullary_y",
- (grepl("^Y\\d+$", cell_type)) ~ "y_neuron",
- (grepl("^CB3846$", cell_type)) ~ "y_neuron",
- (grepl("^LC", cell_type)) ~ "lobula_columnar",
- (grepl("^LT", cell_type)) ~ "lobula_tangential",
- (grepl("^LPC\\d+$", cell_type)) ~ "lobula_plate_columnar",
- (grepl("^LPLC\\d+$", cell_type)) ~ "lobula_plate_lobula_columnar",
- (grepl("^LLPC\\d+$", cell_type)) ~ "lobula_lobula_plate_columnar",
- (grepl("^LPT|^Nod|^VS|^HS|^H1$|^H2$|^DCH$|^FD1$|^FD3$|^V1$|^vCal1$|^VCH$", cell_type))
- ~ "lobula_plate_tangential_cell",
- (grepl("^MeMe", cell_type)) ~ "medulla_medulla",
- (grepl("^MeTu", cell_type)) ~ "medulla_tubercle",
- (grepl("^MeLp", cell_type)) ~ "medulla_lobula_plate",
- (grepl("^aMe", cell_type)) ~ "amacrine_medulla",
- (grepl("^MTe|MC65", cell_type)) ~ "medulla_tangential",
- (grepl("^mALC\\d+", cell_type)) ~ "medial_antennal_lobula",
- (grepl("^cM\\d+", cell_type)) ~ "centrifugal_medulla",
- (grepl("^cML\\d+", cell_type)) ~ "centrifugal_medulla_lobula",
- (grepl("^cMLLP\\d+", cell_type)) ~ "centrifugal_medulla_lobula_lobula_plate",
- (grepl("^cL\\d+", cell_type)) ~ "centrifugal_lobula",
- (grepl("^cLM\\d+", cell_type)) ~ "centrifugal_lobula_medulla",
- (grepl("^cLP", cell_type)) ~ "centrifugal_lobula_plate",
- (grepl("^cLLP\\d+", cell_type)) ~ "centrifugal_lobula_lobula_plate",
- (grepl("cLLPM\\d+", cell_type)) ~ "centrifugal_lobula_lobula_plate_medulla",
- (grepl("^OA-A", cell_type)) ~ "optic_anterior",
- (grepl("^R\\d$|^R1-6$", cell_type)) ~ "photoreceptor",
- grepl("^TuBu$",cell_class)|grepl("^TuBu$",cell_type) ~ "tubercular_bulbar_neuron",
- grepl("ocellar_projection",cell_class)|grepl("ocellar_projection",cell_sub_class) ~ "ocellar_projection_neuron",
- grepl("^OCC",cell_type)|grepl("ocellar_centrifugal",cell_sub_class) ~ "ocellar_centrifugal_neuron",
- grepl("^OCI|^OCL",cell_type)|grepl("ocellar_interneuron",cell_sub_class) ~ "ocellar_intrinsic_neuron",
- grepl("ocellar",cell_sub_class) ~ "ocellar_intrinsic_neuron",
- # classics
- grepl("^ALIN$",cell_class) ~ "antennal_lobe_centrifugal_neuron",
- grepl("^ALON$",cell_class) ~ "antennal_lobe_output_neuron",
- grepl("^ALPN$",cell_class) ~ "antennal_lobe_projection_neuron",
- grepl("^ALLN$",cell_class) ~ "antennal_lobe_local_neuron",
- grepl("^TPN$",cell_class) ~ "subesophageal_zone_projection_neuron",
- grepl("^water_PN|^mAL",cell_sub_class) ~ "subesophageal_zone_projection_neuron",
- grepl("^water_PN|^mAL$",cell_class)|grepl("^mAL$",cell_sub_class) ~ "subesophageal_zone_projection_neuron",
- grepl("^WEDPN$",cell_class) ~ "wedge_projection_neuron",
- grepl("^MBON$",cell_class) ~ "mushroom_body_output_neuron",
- grepl("^MBIN$",cell_class) ~ "mushroom_body_extrinsic_neuron",
- cell_type %in% c("APL","DPM") ~ "mushroom_intrinsic_body",
- grepl("^DAN$",cell_class)&grepl("^PAM|^PPL",cell_type) ~ "mushroom_body_dopaminergic_neuron",
- grepl("^DAN$",cell_class)&grepl("^PPM",cell_type) ~ "PPM_dopaminergic_neuron",
- #grepl("^TOON$",cell_class) ~ "third_order_olfactory_neuron",
- grepl("^LHON$",cell_class) ~ "lateral_horn_output_neuron",
- grepl("^LHLN$",cell_class) ~ "lateral_horn_local_neuron",
- grepl("^LHCENT$",cell_class) ~ "lateral_horn_centrifugal_neuron",
- grepl("^KC$|^Kenyon_cell|Kenyon_Cell",cell_class) ~ "kenyon_cell",
- grepl("^bilateral$",cell_class) ~ "bilateral_neuron",
- # VNC intrinsic
- grepl("independent leg",MANC_serialMotif) ~ "single_leg_neuromere",
- grepl("sequential",MANC_serialMotif) ~ "sequential_leg_neuromeres",
- grepl("centrifugal",MANC_serialMotif) ~ "ventral_nerve_cord_centrifugal",
- grepl("dorsal",MANC_serialMotif) ~ "ventral_nerve_cord_dorsal",
- grepl("centripetal",MANC_serialMotif) ~ "ventral_nerve_cord_centripetal",
- grepl("convergent",MANC_serialMotif) ~ "ventral_nerve_cord_serially_convergent",
- # bad
- grepl("^Interneuron_TBD$",cell_class) ~ NA,
- grepl("^TBD$",FAFB_cell_class) ~ NA,
- grepl("^TBD$",cell_class) ~ NA,
- TRUE ~ NA
- )) %>%
- #dplyr::rowwise() %>%
- dplyr::mutate(cell_sub_class = dplyr::case_when(
- grepl("^ISN$",cell_type) ~ "hemolymph_sensory_neuron",
- # chordotonals
- grepl("chordotonal_club|club_chordotonal",cell_function_detailed) ~ paste0(body_part_sensory,"_club_chordotonal_organ_neuron"),
- grepl("chordotonal_claw|claw_chordotonal",cell_function_detailed) ~ paste0(body_part_sensory,"_claw_chordotonal_organ_neuron"),
- grepl("chordotonal_hook|hook_chordotonal",cell_function_detailed) ~ paste0(body_part_sensory,"_hook_chordotonal_organ_neuron"),
- grepl("chordotonal_club|club_chordotonal",cell_sub_class) ~ paste0(body_part_sensory,"_club_chordotonal_organ_neuron"),
- grepl("chordotonal_claw|claw_chordotonal",cell_sub_class) ~ paste0(body_part_sensory,"_claw_chordotonal_organ_neuron"),
- grepl("chordotonal_hook|hook_chordotonal",cell_sub_class) ~ paste0(body_part_sensory,"_hook_chordotonal_organ_neuron"),
- grepl("chordotonal_claw",cell_function_detailed) ~ paste0(body_part_sensory,"_claw_chordotonal_organ_neuron"),
- grepl("chordotonal_club",cell_function_detailed) ~ paste0(body_part_sensory,"_club_chordotonal_organ_neuron"),
- grepl("chordotonal_hook",cell_function_detailed) ~ paste0(body_part_sensory,"_hook_chordotonal_organ_neuron"),
- grepl("^JO-A",cell_type) ~ "johnstons_organ_A_neuron",
- grepl("^JO-B",cell_type) ~ "johnstons_organ_B_neuron",
- grepl("^JO-C",cell_type) ~ "johnstons_organ_C_neuron",
- grepl("^JO-D",cell_type) ~ "johnstons_organ_D_neuron",
- grepl("^JO-E",cell_type) ~ "johnstons_organ_E_neuron",
- grepl("^JO-F",cell_type) ~ "johnstons_organ_F_neuron",
- grepl("^JO-",cell_type) ~ "johnstons_organ_other_neuron",
- grepl("chordotonal organ, JO",cell_class) ~ "johnstons_organ_neuron",
- # sensory
- grepl("AC neuron|AC_neuron|ac_neuron",cell_type) ~ "internal_thermosensory_receptor_neuron",
- grepl("sensory",super_class)&!is.na(body_part_sensory)&!grepl("metathoracic|wheelers|prothoracic",cell_class) ~ paste0(gsub("_chordotonal_organ|_organ","",body_part_sensory),"_",cell_class),
- grepl("sensory",super_class)&!is.na(body_part_sensory) ~ paste0(body_part_sensory,"_",cell_class),
- # ALPNS
- grepl("multiglomerular",cell_sub_class) ~ "multiglomerular_projection_neuron",
- grepl("uniglomerular",cell_sub_class) ~ "uniglomerular_projection_neuron",
- # bristles
- grepl("_bristle",cell_sub_class) ~ cell_sub_class,
- # central complex
- FAFB_cell_class=="CX" & grepl("hDelta",cell_type) ~ "hDelta",
- FAFB_cell_class=="CX" & grepl("vDelta",cell_type) ~ "vDelta",
- FAFB_cell_class=="CX" & grepl("^FB|^CB.FB|^SA1|^SA2|^SA3",cell_type) ~ "FB_tangential",
- FAFB_cell_class=="CX" & grepl("^ExR",cell_type) ~ "ExR",
- FAFB_cell_class=="CX" & grepl("^FC",cell_type) ~ "FC",
- FAFB_cell_class=="CX" & grepl("^FS",cell_type) ~ "FS",
- FAFB_cell_class=="CX" & grepl("^PFL",cell_type) ~ "PFL",
- FAFB_cell_class=="CX" & grepl("^PFN",cell_type) ~ "PFN",
- FAFB_cell_class=="CX" & grepl("^ER",cell_type) ~ "EB_input",
- FAFB_cell_class=="CX" & grepl("^FR1|^FR2",cell_type) ~ "FR",
- FAFB_cell_class=="CX" & grepl("^PFR$",cell_type) ~ "PFR",
- FAFB_cell_class=="CX" & grepl("^PFGs$",cell_type) ~ "PFG",
- FAFB_cell_class=="CX" & grepl("^PEG",cell_type) ~ "PEG",
- FAFB_cell_class=="CX" & grepl("^PEN_",cell_type) ~ "PEN",
- FAFB_cell_class=="CX" & grepl("^GLNO$|^LCNOp$|^LCNOpm$|^LNO1$|^LNO1$|^LNO2$",cell_type) ~ "NO_input",
- FAFB_cell_class=="CX" & grepl("^IbSpsP|^LPsP|^SpsP",cell_type) ~ "PB_input",
- # kenyon cells
- grepl("^KCab",cell_type)~ "KCab",
- grepl("^KCapbp",cell_type)~ "KCapbp",
- grepl("^KCg",cell_type)~ "KCg",
- # wing
- #grepl("^w-cHIN",cell_type)~ "w-cHIN",
- #grepl("^n-cHIN",cell_type)~ "n-cHIN",
- # dopamine
- grepl("^PAM",cell_type) ~ "PAM_dopaminergic_neuron",
- grepl("^CB2730",cell_type) ~ "PAM_dopaminergic_neuron",
- grepl("^PPL1",cell_type)~ "PPL1_dopaminergic_neuron",
- grepl("^PPL2",cell_type)~ "PPL2_dopaminergic_neuron",
- grepl("^PPM",cell_type)|grepl("^PPM",cell_type)~ "PPM_dopaminergic_neuron",
- # circadian
- grepl("APDN3|LTe71|SLP1500|LMTe01|SLP249|PLP080",cell_type)~ "APDN3",
- grepl("^LNd",cell_type)~ "LNd",
- grepl("^LNv",cell_type)~ "LNv",
- grepl("^DN1p",cell_type)~ "DN1p",
- grepl("^DN1a",cell_type)~ "DN1a",
- grepl("^DN1b",cell_type)~ "DN1b",
- grepl("^DN3",cell_type)~ "DN3",
- grepl("^DN1p",cell_sub_class)~ "DN1p",
- grepl("^DN1a",cell_sub_class)~ "DN1a",
- grepl("^DN1b",cell_sub_class)~ "DN1b",
- grepl("^DN3",cell_sub_class)~ "DN3",
- grepl("^LPN$|CB1215|PV7c11",cell_type)~ "LPN",
- grepl("SLPpl1",FAFB_ito_lee_hemilineage)&grepl("clock|circadian",cell_class)~ "s-CPDN",
- cell_type %in% "HBeyelet" ~ "hofbauer_buchner_eyelet_neuron",
- # ventral nerve cord
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="BR" ~ "ventral_nerve_cord_bilateral_restricted",
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="IR" ~ "ventral_nerve_cord_ipsilateral_restricted",
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="CR" ~ "ventral_nerve_cord_contralateral_restricted",
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="BI" ~ "ventral_nerve_cord_bilateral_interconnecting",
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="II" ~ "ventral_nerve_cord_ipsilateral_interconnecting",
- grepl("ventral_nerve_cord_intrinsic",super_class)&MANC_subclass=="CI" ~ "ventral_nerve_cord_contralateral_interconnecting",
- # motor
- grepl("front_leg",body_part_effector)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "front_leg_motor_neuron",
- grepl("haltere_power",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "haltere_power_neuron",
- grepl("haltere_steering",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "haltere_steering_neuron",
- grepl("hind_leg",body_part_effector)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "hind_leg_motor_neuron",
- grepl("jump_escape",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "middle_leg_extension_jump_motor_neuron",
- grepl("middle_leg",body_part_effector)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "middle_leg_motor_neuron",
- grepl("neck_pitch",cell_function_detailed)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "neck_pitch_motor_neuron",
- grepl("neck_roll",cell_function_detailed)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "neck_roll_motor_neuron",
- grepl("neck_yaw",cell_function_detailed)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "neck_yaw_motor_neuron",
- grepl("wing_power",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "wing_power_motor_neuron",
- grepl("wing_steering",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "wing_steering_motor_neuron",
- grepl("wing_tension",cell_function)&grepl("central_brain_motor|ventral_nerve_cord_motor",super_class) ~ "wing_tension_motor_neuron",
- # endocrine
- grepl("^PSI$",cell_type) ~ paste0(body_part_effector, "_peripheral_intrinsic_neuron"),
- grepl("visceral",super_class) ~ paste0(body_part_effector,gsub("pars_intercerebralis_|pars_lateralis_|ventral_nerve_cord_|central_brain_|subesophageal_zone_|abdominal_neuromere_","_",cell_class)),
- #grepl("^l_NSC_unknown|l_NSC_DH31",cell_type)~ "circadian_neuroendocrine_neuron", # DNES
- #grepl("abdomen_endocrine",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "abdomen_endocrine",
- # grepl("pars_intercerebralis_endocrine_enteric",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "pars_intercerebralis_enteric_endocrine_neuron",
- # grepl("pars_intercerebralis_endocrine_unknown",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "pars_intercerebralis_unknown_endocrine_neuron",
- # grepl("pars_lateralis_endocrine_corpus_allatum",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "pars_lateralis_corpus_allatum_endocrine_neuron",
- # grepl("pars_lateralis_endocrine_retrocerebral_complex",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "pars_lateralis_retrocerebral_complex_endocrine_neuron",
- # grepl("pars_lateralis_endocrine_unknown",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "pars_lateralis_unknown_endocrine_neuron",
- # !is.na(body_part_effector)&grepl("endocrine|visceral_circulatory",super_class) ~ paste0(body_part_effector,"_endocrine_neuron"),
- # !is.na(body_part_effector)&grepl("^EN$",cell_class)|grepl("^EN$",cell_sub_class) ~ paste(body_part_effector,"_endocrine"),
- # grepl("SEZ_endocrine",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "subesophageal_zone_endocrine",
- # grepl("wing_endocrine",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "wing_endocrine_neuron",
- # grepl("neurohemal_complex_endocrine",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "neurohemal_complex_endocrine_neuron",
- # grepl("ovulation",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "ovulation_endocrine_neuron",
- # grepl("peripheral_serotonin",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "peripheral_serotonin_neuron",
- # grepl("^endocrine$",cell_function)&grepl("endocrine|visceral_circulatory",super_class) ~ "endocrine_neuron",
- # other
- grepl("^water_PN",cell_sub_class) ~ "BiT",
- grepl("^mAL$",cell_class)|grepl("^mAL$",cell_sub_class) ~ "mAL",
- TRUE ~ NA
- ))
- #dplyr::mutate(cell_class = gsub("\\>|\\.","-",cell_class)) %>%
- # select changed columns
- franken.meta.update.toPush <- franken.meta.update %>%
- select(flow, super_class, cell_class, cell_sub_class, cell_function,
- cell_function_detailed, peripheral_target_type, body_part_sensory,
- body_part_effector, nerve, banc_neuropeptide_verified,
- banc_neurotransmitter_verified, side, region, `_id`)
- # add old franken_meta columns to updated version, for relevant columns, as
- # franken_[column name]
- # columns that have changed with above code
- franken.meta.keep <- franken.meta %>%
- # rename columns
- mutate(franken_flow = flow,
- franken_super_class = super_class,
- franken_cell_class = cell_class,
- franken_cell_sub_class = cell_sub_class,
- franken_cell_function = cell_function,
- franken_cell_function_detailed = cell_function_detailed,
- franken_peripheral_target_type = peripheral_target_type,
- franken_body_part_sensory = body_part_sensory,
- franken_body_part_effector = body_part_effector,
- franken_nerve = nerve,
- franken_side = side,
- franken_region = region,) %>%
- select(franken_flow, franken_super_class, franken_cell_class,
- franken_cell_sub_class, franken_cell_function,
- franken_cell_function_detailed, franken_peripheral_target_type,
- franken_body_part_sensory, franken_body_part_effector,
- franken_nerve, franken_side, franken_region,
- neurotransmitter_verified, neuropeptide_verified, `_id`)
- # join with franken.meta.update.toPush
- franken.meta.joined <- franken.meta.update.toPush %>%
- inner_join(franken.meta.keep, by = "_id")
- # write to franken_meta SeaTable
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.joined),
- append_allowed = FALSE,
- chunksize = 1000)
- # 250619 - policy update to super_class - implement here, given previous update
- # has already been pushed to the table
- franken.meta.update <- franken.meta %>%
- mutate(super_class = case_when(
- grepl("central_brain_motor|ventral_nerve_cord_motor", super_class) ~ "motor",
- grepl("central_brain_sensory|optic_lobe_sensory|ventral_nerve_cord_sensory",
- super_class) ~ "sensory",
- grepl("central_brain_visceral_circulatory|ventral_nerve_cord_visceral_circulatory",
- super_class) ~ "visceral_circulatory",
- TRUE ~ super_class
- ))
- franken.meta.update.toPush <- franken.meta.update %>%
- select(super_class, banc_id, `_id`)
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.update.toPush),
- append_allowed = FALSE,
- chunksize = 1000)
- # 250626 - update to nerve - right and left cervical nerve will only apply to
- # neurons that leave the side of the neck and not regular ascending and
- # descending neurons
- franken.meta.update <- franken.meta %>%
- filter((grepl("cervical_nerve", nerve) & !grepl("ventral", nerve) &
- !grepl("motor", super_class))) %>%
- mutate(nerve = case_when(
- (grepl("cervical_nerve", nerve) & !grepl("ventral", nerve) &
- !grepl("motor", super_class)) ~ NA,
- TRUE ~ nerve
- ))
- franken.meta.update.toPush <- franken.meta.update %>%
- select(nerve, sexual_dimorphism, `_id`)
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.update.toPush),
- append_allowed = FALSE,
- chunksize = 1000)
- # 250627 - super_class for TmY14 is wrong
- franken.meta.update <- franken_meta %>%
- filter(grepl("^TmY14$", cell_type)) %>%
- mutate(super_class = case_when(
- grepl("^TmY14$", cell_type) ~ "optic_lobe_intrinsic",
- TRUE ~ super_class
- )) %>%
- select(super_class, sexual_dimorphism, `_id`)
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.update),
- append_allowed = FALSE,
- chunksize = 1000)
- # 250627 - there are a subset of ascending neurons with flow afferent, which is wrong
- franken.meta.update <- franken_meta %>%
- filter(grepl("afferent", flow) & grepl("^ascending$", super_class)) %>%
- mutate(flow = case_when(
- (grepl("afferent", flow) & grepl("^ascending$", super_class)) ~ "intrinsic",
- TRUE ~ flow
- )) %>%
- select(flow, sexual_dimorphism, `_id`)
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.update),
- append_allowed = FALSE,
- chunksize = 1000)
- # 6/29/25 - missing organ_neuron after hook_chordotonal for small subset
- franken.meta.update <- franken.meta %>%
- filter(grepl("hook_chordotonal", cell_sub_class) & !grepl("neuron", cell_sub_class)) %>%
- mutate(cell_sub_class = gsub("hook_chordotonal", "hook_chordotonal_organ_neuron",
- cell_sub_class)) %>%
- select(`_id`, cell_sub_class, sexual_dimorphism)
- banctable_update_rows(base='cns_meta',
- table = "franken_meta",
- df = as.data.frame(franken.meta.update),
- append_allowed = FALSE,
- chunksize = 1000)
- # View and check a chosen snippet
- snippet <- franken.meta.update %>%
- # dplyr::filter(grepl("visceral",super_class)) %>%
- dplyr::group_by(flow,super_class, cell_class, cell_sub_class,cell_function, cell_function_detailed) %>%
- dplyr::summarize(
- count = dplyr::n()
- ) %>%
- dplyr::arrange(flow,super_class, cell_class, cell_sub_class, cell_function, cell_function_detailed)
- knitr::kable(snippet)
- clipr::write_clip(knitr::kable(snippet))
- ### STANDARDIZATION TESTS FOR BANC ANNOTATIONS ###
- # Helper function to compare original and updated values for a column
- compare_and_summarize <- function(original_df, updated_df, column_name) {
- if(!(column_name %in% colnames(original_df) && column_name %in% colnames(updated_df))) {
- return(paste("Column", column_name, "not found in one or both dataframes"))
- }
- # Get original and updated values
- orig_values <- original_df[[column_name]]
- updt_values <- updated_df[[column_name]]
- # Create mapping table
- mapping_df <- data.frame(
- original = orig_values,
- updated = updt_values,
- row_id = 1:length(orig_values)
- ) %>%
- filter(original != updated | (is.na(original) & !is.na(updated)) | (!is.na(original) & is.na(updated)))
- # Create unique mapping combinations with counts
- unique_mapping_df <- mapping_df %>%
- dplyr::group_by(original, updated) %>%
- dplyr::summarize(
- count = dplyr::n(),
- example_row_id = first(row_id),
- .groups = 'drop'
- ) %>%
- dplyr::arrange(desc(count))
- # Generate summary
- orig_counts <- table(orig_values, useNA = "ifany")
- updt_counts <- table(updt_values, useNA = "ifany")
- orig_summary <- data.frame(
- value = names(orig_counts),
- count = as.numeric(orig_counts),
- dataset = "original"
- )
- updt_summary <- data.frame(
- value = names(updt_counts),
- count = as.numeric(updt_counts),
- dataset = "updated"
- )
- summary_df <- rbind(orig_summary, updt_summary)
- return(list(
- mapping = mapping_df,
- unique_mapping = unique_mapping_df,
- summary = summary_df,
- changed_count = nrow(mapping_df),
- total_count = length(orig_values),
- change_percent = round(nrow(mapping_df) / length(orig_values) * 100, 2)
- ))
- }
- # Function to print a nicely formatted report for a column
- print_column_report <- function(comparison_result, column_name) {
- cat("\n\n======================================\n")
- cat("ANALYSIS FOR COLUMN:", column_name, "\n")
- cat("======================================\n\n")
- cat("CHANGE STATISTICS:\n")
- cat("Total rows:", comparison_result$total_count, "\n")
- cat("Changed rows:", comparison_result$changed_count, "\n")
- cat("Change percentage:", comparison_result$change_percent, "%\n\n")
- if(nrow(comparison_result$unique_mapping) > 0) {
- cat("UNIQUE MAPPING COMBINATIONS (top 150):\n")
- unique_mappings_to_show <- head(comparison_result$unique_mapping, 150)
- # Format NA values for better display
- unique_mappings_to_show$original <- ifelse(is.na(unique_mappings_to_show$original),
- "NA",
- as.character(unique_mappings_to_show$original))
- unique_mappings_to_show$updated <- ifelse(is.na(unique_mappings_to_show$updated),
- "NA",
- as.character(unique_mappings_to_show$updated))
- # Calculate percentage of total changes
- unique_mappings_to_show$percent <- round(unique_mappings_to_show$count / comparison_result$changed_count * 100, 1)
- # Create a nice display format
- for(i in 1:nrow(unique_mappings_to_show)) {
- cat(sprintf("'%s' → '%s': %d occurrences (%.1f%% of changes, example row: %d)\n",
- unique_mappings_to_show$original[i],
- unique_mappings_to_show$updated[i],
- unique_mappings_to_show$count[i],
- unique_mappings_to_show$percent[i],
- unique_mappings_to_show$example_row_id[i]))
- }
- if(nrow(comparison_result$unique_mapping) > 150) {
- cat("... and", nrow(comparison_result$unique_mapping) - 150, "more combinations\n")
- }
- cat("\n")
- }
- cat("VALUE INVENTORY (top 150 values before and after):\n")
- orig_top <- comparison_result$summary %>%
- dplyr::filter(dataset == "original") %>%
- dplyr::arrange(desc(count)) %>%
- head(150)
- updt_top <- comparison_result$summary %>%
- dplyr::filter(dataset == "updated") %>%
- dplyr::arrange(desc(count)) %>%
- head(150)
- cat("Original top values:\n")
- print(orig_top)
- cat("\nUpdated top values:\n")
- print(updt_top)
- # Check if any values disappeared or appeared
- orig_values <- comparison_result$summary$value[comparison_result$summary$dataset == "original"]
- updt_values <- comparison_result$summary$value[comparison_result$summary$dataset == "updated"]
- disappeared <- setdiff(orig_values, updt_values)
- appeared <- setdiff(updt_values, orig_values)
- if(length(disappeared) > 0) {
- cat("\nValues that disappeared after standardization:\n")
- print(disappeared)
- }
- if(length(appeared) > 0) {
- cat("\nNew values that appeared after standardization:\n")
- print(appeared)
- }
- }
- # List of columns to check
- columns_to_check <- c(
- "citation_cell_type", "flow", "side", "region", "peripheral_target_type",
- "cell_function_detailed", "cell_function", "nerve", "body_part_sensory",
- "body_part_effector", "super_class", "cell_sub_class", "cell_class"
- )
- # Run tests for all columns
- test_results <- list()
- for(column in columns_to_check) {
- test_results[[column]] <- compare_and_summarize(franken.meta, franken.meta.update, column)
- print_column_report(test_results[[column]], column)
- }
- # Additional validation tests
- cat("\n\n======================================\n")
- cat("ADDITIONAL VALIDATION CHECKS\n")
- cat("======================================\n\n")
- # Check for any NAs introduced in critical columns
- for(column in columns_to_check) {
- orig_na_count <- sum(is.na(franken.meta[[column]]))
- updt_na_count <- sum(is.na(franken.meta.update[[column]]))
- if(updt_na_count > orig_na_count) {
- cat("WARNING: Column", column, "has more NAs after standardization.\n")
- cat(" Original NA count:", orig_na_count, "\n")
- cat(" Updated NA count:", updt_na_count, "\n")
- cat(" Difference:", updt_na_count - orig_na_count, "\n\n")
- }
- }
- # Check for standardization consistency
- for(column in columns_to_check) {
- mapping_df <- test_results[[column]]$mapping
- if(nrow(mapping_df) > 0) {
- # Check if same original value maps to different updated values
- inconsistencies <- mapping_df %>%
- dplyr::filter(!is.na(original)) %>%
- dplyr::group_by(original) %>%
- dplyr::summarize(unique_updates = dplyr::n_distinct(updated, na.rm = TRUE)) %>%
- dplyr::filter(unique_updates > 1)
- if(nrow(inconsistencies) > 0) {
- cat("WARNING: Inconsistent mappings found in column", column, "\n")
- for(i in 1:nrow(inconsistencies)) {
- orig_val <- inconsistencies$original[i]
- cat(" Original value '", orig_val, "' maps to multiple updated values:\n", sep="")
- examples <- mapping_df %>%
- dplyr::filter(original == orig_val) %>%
- dplyr::group_by(updated) %>%
- dplyr::slice(1) %>%
- dplyr::ungroup()
- for(j in 1:nrow(examples)) {
- cat(" -> '", examples$updated[j], "' (example row: ", examples$row_id[j], ")\n", sep="")
- }
- }
- cat("\n")
- }
- }
- }
- # Print summary statistics for all columns
- cat("\n\n======================================\n")
- cat("OVERALL STANDARDIZATION SUMMARY\n")
- cat("======================================\n\n")
- summary_df <- data.frame(
- column = character(),
- total_rows = integer(),
- changed_rows = integer(),
- change_percent = numeric(),
- original_distinct = integer(),
- updated_distinct = integer(),
- distinct_change = integer(),
- stringsAsFactors = FALSE
- )
- for(column in columns_to_check) {
- result <- test_results[[column]]
- orig_distinct <- length(unique(franken.meta[[column]]))
- updt_distinct <- length(unique(franken.meta.update[[column]]))
- summary_df <- rbind(summary_df, data.frame(
- column = column,
- total_rows = result$total_count,
- changed_rows = result$changed_count,
- change_percent = result$change_percent,
- original_distinct = orig_distinct,
- updated_distinct = updt_distinct,
- distinct_change = updt_distinct - orig_distinct
- ))
- }
- summary_df <- summary_df %>% dplyr::arrange(desc(change_percent))
- print(summary_df)
- # Make full changelog
- franken.meta.changelog <- data.frame(
- timestamp = Sys.time(),
- columns_changed = length(columns_to_check),
- total_rows = nrow(franken.meta),
- total_changes = sum(sapply(test_results, function(x) x$changed_count))
- )
- # Add a detailed description of changes
- changelog_text <- paste0(
- "BANC METADATA STANDARDIZATION CHANGELOG\n",
- "Generated: ", format(Sys.time(), "%Y-%m-%d %H:%M:%S"), "\n",
- "Total rows processed: ", nrow(franken.meta), "\n",
- "Total columns modified: ", length(columns_to_check), "\n\n",
- "SUMMARY OF CHANGES BY COLUMN:\n"
- )
- # Add summary stats for each column
- for (column in columns_to_check) {
- result <- test_results[[column]]
- orig_distinct <- length(unique(franken.meta[[column]]))
- updt_distinct <- length(unique(franken.meta.update[[column]]))
- changelog_text <- paste0(
- changelog_text,
- "Column: ", column, "\n",
- " - Changed values: ", result$changed_count, " (", result$change_percent, "% of data)\n",
- " - Original distinct values: ", orig_distinct, "\n",
- " - Updated distinct values: ", updt_distinct, "\n",
- " - Net change in distinct values: ", updt_distinct - orig_distinct, "\n\n"
- )
- # Add top 150 most frequent mappings
- if (nrow(result$unique_mapping) > 0) {
- changelog_text <- paste0(
- changelog_text,
- " Top 150 most common transformations:\n"
- )
- top_mappings <- head(result$unique_mapping, 150)
- for (i in 1:nrow(top_mappings)) {
- orig_val <- if(is.na(top_mappings$original[i])) "NA" else as.character(top_mappings$original[i])
- updt_val <- if(is.na(top_mappings$updated[i])) "NA" else as.character(top_mappings$updated[i])
- changelog_text <- paste0(
- changelog_text,
- " '", orig_val, "' → '", updt_val, "': ",
- top_mappings$count[i], " occurrences (",
- round(top_mappings$count[i] / result$changed_count * 100, 1), "% of changes)\n"
- )
- }
- changelog_text <- paste0(changelog_text, "\n")
- }
- # Add values that disappeared
- orig_values <- result$summary$value[result$summary$dataset == "original"]
- updt_values <- result$summary$value[result$summary$dataset == "updated"]
- disappeared <- setdiff(orig_values, updt_values)
- appeared <- setdiff(updt_values, orig_values)
- if (length(disappeared) > 0) {
- changelog_text <- paste0(
- changelog_text,
- " Values that were removed (up to 150):\n ",
- paste(head(disappeared, 150), collapse = ", "),
- if(length(disappeared) > 150) paste0(" (and ", length(disappeared) - 150, " more)") else "",
- "\n\n"
- )
- }
- if (length(appeared) > 0) {
- changelog_text <- paste0(
- changelog_text,
- " New values that were added (up to 150):\n ",
- paste(head(appeared, 150), collapse = ", "),
- if(length(appeared) > 150) paste0(" (and ", length(appeared) - 150, " more)") else "",
- "\n\n"
- )
- }
- # Check for inconsistent mappings
- inconsistencies <- result$mapping %>%
- dplyr::filter(!is.na(original)) %>%
- dplyr::group_by(original) %>%
- dplyr::summarize(unique_updates = dplyr::n_distinct(updated, na.rm = TRUE)) %>%
- dplyr::filter(unique_updates > 1)
- if (nrow(inconsistencies) > 0) {
- changelog_text <- paste0(
- changelog_text,
- " WARNING: Inconsistent mappings found for ", nrow(inconsistencies), " original value(s):\n"
- )
- for (i in 1:min(nrow(inconsistencies), 5)) {
- orig_val <- inconsistencies$original[i]
- examples <- result$mapping %>%
- dplyr::filter(original == orig_val) %>%
- dplyr::group_by(updated) %>%
- dplyr::slice(1)
- changelog_text <- paste0(
- changelog_text,
- " '", orig_val, "' maps to: ",
- paste(sapply(examples$updated, function(x) ifelse(is.na(x), "NA", as.character(x))), collapse = ", "),
- "\n"
- )
- }
- if (nrow(inconsistencies) > 5) {
- changelog_text <- paste0(
- changelog_text,
- " (and ", nrow(inconsistencies) - 5, " more inconsistent mappings)\n"
- )
- }
- changelog_text <- paste0(changelog_text, "\n")
- }
- }
- # Complete the object with the text
- franken.meta.changelog$changes_detail <- changelog_text
- # Save original
- franken.meta.concise <- franken.meta.update %>%
- dplyr::distinct(neuron_id,
- dataset,
- side,
- nerve,
- hemilineage,
- flow,
- super_class,
- cell_class,
- cell_sub_class,
- cell_type,
- body_part_sensory,
- body_part_effector,
- peripheral_target_type,
- cell_function,
- cell_function_detailed,
- top_nt)
- save.path <- "/Users/abates/projects/flyconnectome/bancpipeline/data/meta"
- readr::write_csv(franken.meta, file.path(save.path,"franken_meta_v1.csv"))
- readr::write_csv(franken.meta.update, file.path(save.path,"franken_meta_update_for_v2.csv"))
- readr::write_csv(franken.meta.concise, file.path(save.path,"franken_meta_concise_update_for_v2.csv"))
- writeLines(changelog_text, file.path(save.path,"franken_meta_v1_to_v2_changelog.txt"))
- # # update
- # banctable_update_rows(base='cns_meta',
- # table = "franken_meta",
- # df = as.data.frame(franken.meta.update),
- # append_allowed = FALSE,
- # chunksize = 1000)
- #######################
- ### Plots to assess ###
- #######################
- # Create a heatmap to visualize the complete hierarchy
- # This helps show which combinations exist and their frequencies
- hierarchy_heatmap <- franken.meta.update %>%
- dplyr::filter(!is.na(flow) & !is.na(super_class) & !is.na(cell_class)) %>%
- dplyr::count(flow, super_class, cell_class) %>%
- # Transform to log scale to better show differences
- dplyr::mutate(log_n = log10(n + 1))
- # Get top cell classes by count for visualization clarity
- top_cell_classes <- hierarchy_heatmap %>%
- dplyr::group_by(cell_class) %>%
- dplyr::summarize(total = sum(n)) %>%
- dplyr::arrange(desc(total)) %>%
- utils::head(40) %>%
- dplyr::pull(cell_class)
- p1 <- hierarchy_heatmap %>%
- dplyr::filter(cell_class %in% top_cell_classes) %>%
- ggplot2::ggplot(ggplot2::aes(x = reorder(cell_class, log_n),
- y = reorder(super_class, log_n),
- fill = log_n)) +
- ggplot2::geom_tile() +
- ggplot2::facet_wrap(~flow, ncol = 1, scales = "free_y") +
- ggplot2::scale_fill_viridis_c(name = "log10(count+1)") +
- ggplot2::labs(title = "Hierarchical Relationship Matrix",
- subtitle = "flow > super_class > cell_class",
- x = "cell_class", y = "super_class") +
- ggplot2::theme_minimal() +
- ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, hjust = 1, size = 7),
- axis.text.y = ggplot2::element_text(size = 7),
- panel.grid = ggplot2::element_blank())
- # Create a heatmap to visualize the complete hierarchy
- # This helps show which combinations exist and their frequencies
- hierarchy_heatmap <- franken.meta.update %>%
- dplyr::filter(!is.na(flow) & !is.na(super_class) & !is.na(cell_class),
- super_class == "sensory") %>%
- dplyr::count(cell_class, cell_sub_class) %>%
- # Transform to log scale to better show differences
- dplyr::mutate(log_n = log10(n + 1))
- # Get top cell classes by count for visualization clarity
- top_cell_classes <- hierarchy_heatmap %>%
- dplyr::group_by(cell_sub_class) %>%
- dplyr::summarize(total = sum(n)) %>%
- dplyr::arrange(desc(total)) %>%
- utils::head(40) %>%
- dplyr::pull(cell_sub_class)
- p2 <- hierarchy_heatmap %>%
- dplyr::filter(cell_sub_class %in% top_cell_classes) %>%
- ggplot2::ggplot(ggplot2::aes(x = reorder(cell_sub_class, log_n),
- y = reorder(cell_class, log_n),
- fill = log_n)) +
- ggplot2::geom_tile() +
- #ggplot2::facet_wrap(~flow, ncol = 1, scales = "free_y") +
- ggplot2::scale_fill_viridis_c(name = "log10(Count+1)") +
- ggplot2::labs(title = "Hierarchical Relationship Matrix",
- subtitle = " cell_class > cell_sub_class",
- x = "cell_sub_class", y = "cell_class") +
- ggplot2::theme_minimal() +
- ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, hjust = 1, size = 7),
- axis.text.y = ggplot2::element_text(size = 7),
- panel.grid = ggplot2::element_blank())
franken-annotations-fix.R, under GPL-3.0 · at the source
Overview
and 81 other authors
Laia Serratosa Capdevila10, Ruairí J V Roberts10, Eva J Munnelly10, Nina Griggs10, Helen Langley10, Borja Moya-Llamas10, Zuoyu Zhang11,12, Ryan T Maloney13,14,15, Szi-chieh Yu6, Amy R Sterling6, Marissa Sorek6, Krzysztof Kruk16, Nikitas Serafetinidis16, Serene Dhawan6, Finja Klemm17, Paul Brooks18, Ellen Lesser19, Jessica M Jones20, Sara E Pierce-Lundgren20, Su-Yee Lee20, Yichen Luo20, Andrew P Cook21, Theresa H McKim22, Dimitrios Stasi Giakoumas23,24, Benjamin Gorko25, Justin Ellis-Joyce26,27, Jiayi Zhang28, Emily C Kophs29, Tjalda Falt30, Alexa M Negron-Morales31, Austin Burke6, James Hebditch6, Kyle P Willie6, Ryan Willie6, Sergiy Popovych32, Nico Kemnitz32, Dodam Ih32, Kisuk Lee32, Ran Lu32, Akhilesh Halageri32, J Alexander Bae32, Ben Jourdan33, Gregory Schwartzman34, Damian D Demarest35, Emily Behnke6, Doug Bland16, Anne Kristiansen16, Jaime Skelton16, Tom Stocks16, Dustin Garner25, Anthony Hernandez16, Sandeep Kumar6, The BANC-FlyWire Consortium36,37,38, Kevin C Daly8,39, Sven Dorkenwald40, Forrest Collman40, Marie P Suver29, Lisa M Fenk30, Michael J Pankratz35, Zepeng Yao23,41,42,43, Fei Wang28, Stephen J Huston44, Tomke Stürner45, Gregory S X E Jefferis18,45, Katharina Eichler17, Andrew M Seeds31, Stefanie Hampel31, Sweta Agrawal21, Tatsuo S Okubo11,12, Meet Zandawala46,47, Thomas Macrina32, Diane-Yayra Adjavon26, Jan Funke26, John C Tuthill20, Anthony Azevedo20, H Sebastian Seung6,48, Benjamin L de Bivort13,14, Mala Murthy6, Jan Drugowitsch1, Rachel I Wilson1, Wei-Chung Allen Lee1,4949 affiliations
- Department of Neurobiology, Harvard Medical School, Boston, MA USA
- Centre for Neural Circuit and Behaviour, University of Oxford, Oxford, UK
- Present Address: Neuroengineering Laboratory, Brain Mind Institute and Institute of Bioengineering, EPFL, Lausanne, Switzerland
- Present Address: Department of Molecular and Cellular Biology, Harvard University, Cambridge, MA USA
- Present Address: Center for Brain Science, Harvard University, Cambridge, MA USA
- Princeton Neuroscience Institute, Princeton University, Princeton, NJ USA
- Yikes, Baltimore, MD USA
- Department of Biology, West Virginia University, Morgantown, WV USA
- Present Address: Department of Neurobiology, Harvard Medical School, Boston, MA USA
- Aelysia, Bristol, UK
- Beijing Institute for Brain Research, Chinese Academy of Medical Sciences and Peking Union Medical College, Beijing, China
- Chinese Institute for Brain Research, Beijing, Beijing, China
- Department of Organismic and Evolutionary Biology, Harvard University, Cambridge, MA USA
- Center for Brain Science, Harvard University, Cambridge, MA USA
- Present Address: Psychology Department, Colorado College, Colorado Springs, CO USA
- Eyewire, Boston, MA USA
- Genetics Department, Leipzig University, Leipzig, Germany
- Zoology Department, University of Cambridge, Cambridge, UK
- Department of Molecular Genetics and Cell Biology, The University of Chicago, Chicago, IL USA
- Department of Neurobiology and Biophysics, University of Washington, Seattle, WA USA
- School of Neuroscience, Virginia Tech, Blacksburg, VA USA
- Department of Biology, University of Nevada Reno, Reno, NV USA
- Department of Biology, University of Florida, Gainesville, FL USA
- Present Address: Interdisciplinary Graduate Program in Neuroscience, University of Iowa, Iowa City, IA USA
- Molecular, Cellular, and Developmental Biology, University of California Santa Barbara, Santa Barbara, CA USA
- HHMI Janelia, Ashburn, VA USA
- Department of Neuroscience, Johns Hopkins University, Baltimore, MD USA
- Institute of Neuroscience, Center for Excellence in Brain Science and Intelligence Technology, Chinese Academy of Sciences, Shanghai, China
- Department of Biological Sciences, Vanderbilt University, Nashville, TN USA
- Max Planck Institute for Biological Intelligence, Martinsried, Germany
- Institute of Neurobiology, University of Puerto Rico Medical Sciences Campus, San Juan, Puerto Rico
- Zetta AI, Sherrill, NY USA
- School of Informatics, University of Edinburgh, Edinburgh, UK
- Japan Advanced Institute of Science and Technology (JAIST), Nomi, Japan
- Molecular Brain Physiology and Behavior, LIMES Institute, University of Bonn, Bonn, Germany
- Champalimaud Neuroscience Programme, Champalimaud Centre for the Unknown, Lisbon, Portugal
- Department of Biology, Leipzig University, Leipzig, Germany
- RWTH Aachen University, Aachen, Germany
- Department of Neuroscience, West Virginia University, Morgantown, WV USA
- Allen Institute for Brain Science, Seattle, WA USA
- Florida Chemical Senses Institute, University of Florida, Gainesville, FL USA
- McKnight Brain Institute, University of Florida, Gainesville, FL USA
- Genetics Institute, University of Florida, Gainesville, FL USA
- Department of Neuroscience, Zuckerman Mind Brain Behavior Institute, Columbia University, New York, NY USA
- Neurobiology Division, MRC Laboratory of Molecular Biology, Cambridge, UK
- Department of Biochemistry and Molecular Biology, University of Nevada Reno, Reno, NV USA
- Neurobiology and Genetics, Theodor-Boveri-Institute, Biocenter, Julius-Maximilians-University of Würzburg, Am Hubland, Würzburg, Germany
- Computer Science Department, Princeton University, Princeton, NJ USA
- F. M. Kirby Neurobiology Center, Boston Children’s Hospital, Harvard Medical School, Boston, MA USA
Abstract
Just as genomes revolutionized molecular genetics, connectomes (maps of neurons and synapses) are transforming neuroscience. To date, the only organisms with complete connectomes are worms1–3, sea squirts4 and comb jellies5 (103–104 synapses). By contrast, the fruit fly is more complex (108 synaptic connections), with a brain that supports learning and spatial memory6,7 and an intricate ventral nerve cord analogous to the vertebrate spinal cord8–12. Here we report a densely reconstructed adult fly connectome that unites the brain and ventral nerve cord, and we leverage this resource to investigate principles of neural control. We show that effector neurons (motor neurons, endocrine cells and efferent neurons targeting the viscera) are primarily influenced by sensory neurons in the same body part, forming local feedback loops. These local loops are linked by long-range circuits that involve ascending and descending neurons organized into behaviour-centric modules. Single ascending and descending neurons are often positioned to influence the voluntary movements of multiple body parts, together with the endocrine cells or visceral organs that support those movements. Brain regions involved in learning and navigation supervise these circuits. These results reveal an architecture that is distributed, parallelized and embodied, reminiscent of distributed control architectures in engineered systems13,14.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 40 matches between paragraphs and lines of code.
doi:10.7910/dvn/7wth1n
Availability: 5 checks, the latest on 29 September 2026: unreachable at the last attempt (HTTP 202)
- 29 September 2026: unreachable at the last attempt (HTTP 202)
- 28 September 2026: unreachable at the last attempt (HTTP 202)
- 28 September 2026: unreachable at the last attempt (HTTP 202)
- 27 September 2026: unreachable at the last attempt (HTTP 202)
- 27 September 2026: unreachable at the last attempt (HTTP 202)
Zenodo 15999929
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
8 files
- InfluenceCalculator/
InfluenceCalculator.py , Python, 692 lines - InfluenceCalculator/
__init__.py , Python, 3 lines - InfluenceCalculator/
data/ , Python, 65 lines__init__.py - examples/
celegans_worked_example. , Python, 338 linespy - tests/
conftest.py , Python, 57 lines - tests/
test_influence_calculato , Python, 269 linesr.py - LICENSE.txt, License, 28 lines
- README.md, Text, 261 lines
jasper-tms/the-banc-fly-connectome
01d797a23beb5e79032e509d03b4218c3f5cc60e, 15 May 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
40 files
- colormips/
render_neuron_into_templ , Python, 46 linesate_space.py - data/
volume_meshes/ , Python, 24 linesJRC2018_VNC_FEMALE/ upload_meshes_to_google_ storage_bucket.py - data/
volume_meshes/ , Python, 26 linesJRC2018_VNC_FEMALE_to_BA NC/ upload_meshes_to_google_ storage_bucket.py - data/
volume_meshes/ , Python, 28 linesJRC2018_VNC_UNISEX_to_BA NC/ upload_meshes_to_google_ storage_bucket.py - data/
volume_meshes/ , Python, 84 linescut_neuromeres_by_side.p y - data/
volume_meshes/ , Python, 76 linesmake_segment_properties. py - data/
volume_meshes/ , Python, 61 lineswarp_mesh_to_BANC.py - example_notebooks/
FANC_Connectomics_Genera , Jupyter, 751 linesl_Intro.ipynb - example_notebooks/
fanc_python_package_exam , Jupyter, 122 linesples.ipynb - example_notebooks/
skeletonization.ipynb , Jupyter, 96 lines - example_notebooks/
update_cave_tables.ipynb , Jupyter, 64 lines - fanc/
__init__.py , Python, 36 lines - fanc/
annotations.py , Python, 1,690 lines - fanc/
auth.py , Python, 100 lines - fanc/
connectivity.py , Python, 143 lines - fanc/
lookup.py , Python, 1,088 lines - fanc/
ngl_info.py , Python, 72 lines - fanc/
publish.py , Python, 403 lines - fanc/
render_neurons.py , Python, 292 lines, 1 match - fanc/
skeletonize.py , Python, 206 lines - fanc/
statebuilder.py , Python, 287 lines - fanc/
statemanager.py , Python, 53 lines - fanc/
synaptic_links.py , Python, 246 lines - fanc/
template_spaces.py , Python, 163 lines - fanc/
transforms/ , Python, 4 lines__init__.py - fanc/
transforms/ , Python, 270 linesrealignment.py - fanc/
transforms/ , Python, 451 lines, 1 matchtemplate_alignment.py - fanc/
transforms/ , Shell, 46 linestransform_parameters/ brain_240714/ register_brain_240714.sh - fanc/
transforms/ , Shell, 67 linestransform_parameters/ brain_240721/ register_brain.sh - fanc/
transforms/ , Shell, 56 linestransform_parameters/ vnc_240721/ register_vnc.sh - fanc/
upload.py , Python, 795 lines - fanc/
visualize.py , Python, 297 lines - slackbots/
annotation_bot.py , Python, 509 lines - slackbots/
congrats_bot.py , Python, 113 lines - slackbots/
create_permissions_json_ , Python, 103 linesfrom_googlesheet.py - slackbots/
deprecated_proofreading_ , Python, 345 lines, 1 matchstatus_bot.py - slackbots/
serve_orphaned_somas.py , Python, 222 lines - tests/
tests.py , Python, 100 lines - LICENSE, License, 674 lines
- README.md, Text, 86 lines
huit.harvard.edu/ai-sandbox
Availability: 5 checks, the latest on 29 September 2026: unreachable at the last attempt (HTTP 403)
- 29 September 2026: unreachable at the last attempt (HTTP 403)
- 28 September 2026: unreachable at the last attempt (HTTP 403)
- 28 September 2026: unreachable at the last attempt (HTTP 403)
- 27 September 2026: unreachable at the last attempt (HTTP 403)
- 27 September 2026: unreachable at the last attempt (HTTP 403)
console.cloud.google.com/storage/browser
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
CAVEconnectome/pcg_skel
d0178be10a5a037e5fc64b8f754ef560f7466ee3, 14 April 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
16 files
- .bmv-post-commit.sh, Shell, 2 lines
- pcg_skel/
__init__.py , Python, 8 lines - pcg_skel/
chunk_cache.py , Python, 85 lines - pcg_skel/
chunk_tools.py , Python, 457 lines - pcg_skel/
features.py , Python, 497 lines - pcg_skel/
nocache.py , Python, 637 lines - pcg_skel/
pcg_anno.py , Python, 274 lines - pcg_skel/
pcg_skel.py , Python, 676 lines - pcg_skel/
service.py , Python, 182 lines - pcg_skel/
skel_utils.py , Python, 100 lines - pcg_skel/
utils.py , Python, 112 lines - test_synapse_feature.ipy
nb , Jupyter, 181 lines - tests/
conftest.py , Python, 152 lines - tests/
test_pcg_skel.py , Python, 104 lines - LICENSE, License, 21 lines
- README.md, Text, 10 lines
sjcabs/fly_connectome_data_tutorial
85c66244cfb2c02b2442905c4428b42a0d8e6656, 7 June 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
18 files
- R/
01_data_access.Rmd , R, 609 lines - R/
02_neuron_morphology.Rmd , R, 919 lines - R/
03_connectivity_analyses , R, 1,660 lines, 1 match.Rmd - R/
04_indirect_connectivity , R, 1,238 lines, 2 matches.Rmd - R/
05_transcriptomics.Rmd , R, 1,296 lines - R/
setup/ , R, 1,208 linesfunctions.R - R/
setup/ , Python, 61 linesgcs_parquet_lazy.py - R/
setup/ , Python, 82 linesgcs_parquet_reader.py - R/
setup/ , R, 173 linespackages.R - inst/
fly_connectome_data_tuto , Shell, 165 linesrial_sjcabs_env.sh - inst/
install_reticulate_depen , Shell, 189 linesdencies.sh - python/
fly_connectome_01_data_a , Jupyter, 673 linesccess.ipynb - python/
fly_connectome_02_neuron , Jupyter, 2,385 lines_morphology.ipynb - python/
fly_connectome_03_connec , Jupyter, 1,648 linestivity_analyses.ipynb - python/
fly_connectome_04_indire , Jupyter, 1,165 lines, 1 matchct_connectivity.ipynb - python/
fly_connectome_05_transc , Jupyter, 981 linesriptomics.ipynb - repository limit reached (2,000 files or 30 MB): the rest is at the source (8 files)
- LICENSE, License, 21 lines
- README.md, Text, 491 lines
Zenodo 20350642
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Zenodo 20350572
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
334 files
- alignment/
alignment-data-sources.R , R, 432 lines - alignment/
alignment_paths.py , Python, 231 lines - alignment/
alignment_splits.py , Python, 91 lines - alignment/
assessment/ , Python, 43 linesconftest.py - alignment/
assessment/ , R, 24 lineshelper-load.R - alignment/
assessment/ , R, 101 linestest-data-sources.R - alignment/
assessment/ , Python, 95 linestest_metrics.py - alignment/
assessment/ , Python, 84 linestest_profile_builder.py - alignment/
assessment/ , Python, 95 linestest_splits.py - alignment/
banc-alignment-diff.R , R, 147 lines - alignment/
banc-alignment-discrepan , R, 224 linescies.R - alignment/
banc-alignment-discrepan , Python, 133 linescies.py - alignment/
banc-alignment-false-pos , R, 135 linesitives-append.R - alignment/
banc-alignment-false-pos , R, 175 linesitives.R - alignment/
banc-alignment-fill-cell , R, 273 lines-type.R - alignment/
banc-alignment-fill-supe , R, 264 linesr-class.R - alignment/
banc-alignment-fix-seeds , R, 163 lines.R - alignment/
banc-alignment-ntac.py , Python, 243 lines - alignment/
banc-alignment-plots.R , R, 749 lines - alignment/
banc-alignment-prep.R , R, 49 lines - alignment/
banc-alignment-run.py , Python, 2,042 lines, 1 match - alignment/
banc-alignment-sweep-eva , R, 390 linesl.R - alignment/
banc-alignment-sweep.py , Python, 258 lines - alignment/
banc-alignment-update-se , R, 32 linesatable.R - alignment/
banc-alignment-validate. , R, 280 linesR - alignment/
diag_align.sh , Shell, 139 lines - alignment/
presets/ , R, 463 linesoptic-lobe/ prep.R - alignment/
presets/ , R, 175 linesoptic-lobe/ update-seatable.R - alignment/
presets/ , R, 512 lineswhole-brain/ prep.R - alignment/
presets/ , R, 415 lineswhole-brain/ update-seatable.R - alignment/
run-scheduled-alignments , Shell, 212 lines.sh - alignment/
test_ind_subset_equivale , Python, 117 linesnce.py - banc/
annotations/ , R, 664 linesbanc-cell-info.R - banc/
annotations/ , R, 133 linesbanc-community.R - banc/
annotations/ , R, 325 linesbanc-connectivity-review -groups.R - banc/
annotations/ , R, 29 linesbanc-fix-major-cell-type -errors.R - banc/
annotations/ , R, 366 linesbanc-kc-by-connectivity. R - banc/
annotations/ , R, 133 linesbanc-pn-by-connectivity. R - banc/
annotations/ , R, 468 linesbanc-sensory-classify.R - banc/
annotations/ , R, 229 linesbanc-sensory-jo-orn.R - banc/
annotations/ , R, 148 linesbanc-tracing-cns-network .R - banc/
annotations/ , R, 216 linesbanc-tracing-matches.R - banc/
annotations/ , R, 319 linesbanc-tracing-png-tags.R - banc/
annotations/ , R, 313 linesbanc-tracing-status.R - banc/
annotations/ , R, 526 linesbanc-vnc-retyping.R - banc/
annotations/ , R, 2,003 lines, 10 matchesfranken-annotations-fix. R - banc/
banc-functions.R , R, 2,175 lines - banc/
banc-startup.R , R, 538 lines - banc/
banc-test.R , R, 328 lines - banc/
betweenness/ , R, 100 linesbanc-betweenness-run.R - banc/
betweenness/ , Python, 268 linesbanc-betweenness.py - banc/
clustering/ , R, 184 linesbanc-cluster-cns-network -heatmap.R - banc/
clustering/ , R, 66 linesbanc-spectral-clustering -run.R - banc/
clustering/ , R, 406 lines, 1 matchbanc-spectral-clustering .R - banc/
clustering/ , Python, 479 linesbanc-spectral-clustering .py - banc/
clustering/ , R, 263 linesbanc-update-seatable-clu sters.R - banc/
clustering/ , R, 454 linesbanc-visualise-clusters. R - banc/
clustering/ , Shell, 29 linesinstall-deps.sh - banc/
curation/ , R, 435 linesbanc_cell_representative _point.R - banc/
curation/ , R, 162 linesbanc_curation_init.R - banc/
curation/ , R, 553 linesbanc_meta_annotation_upd ate_from_cell_info.R - banc/
curation/ , R, 465 linesbanc_meta_annotation_upd ate_from_cell_type.R - banc/
curation/ , R, 531 linesbanc_meta_annotation_upd ate_from_matching.R - banc/
curation/ , R, 168 linesbanc_meta_error_check.R - banc/
curation/ , R, 501 linesbanc_meta_fix_duplicates .R - banc/
curation/ , R, 260 lines, 1 matchmake_codex_annotations_f lat_table_v888.R - banc/
franken/ , R, 1,325 linesbanc-frankenbrain.R - banc/
franken/ , R, 402 linesfranken-seeds.R - banc/
influence/ , R, 173 linesbanc-aggregate-influence .R - banc/
influence/ , R, 451 linesbanc-build-influence.R - banc/
influence/ , R, 100 linesbanc-sync-influence.R - banc/
legacy/ , R, 408 linesbanc-all-by-all-influenc e.R - banc/
legacy/ , R, 589 linesbanc-an-dn-connectivity. R - banc/
legacy/ , R, 985 linesbanc-assess-synapses.R - banc/
legacy/ , R, 222 linesbanc-build-influence.R - banc/
legacy/ , R, 339 linesbanc-build.R - banc/
legacy/ , R, 135 linesbanc-data.R - banc/
legacy/ , R, 139 linesbanc-influence.R - banc/
legacy/ , R, 1,316 linesbanc-meta-integrate.R - banc/
legacy/ , R, 928 linesbanc-meta.R - banc/
legacy/ , R, 1,889 linesbanc-nblast-share.R - banc/
legacy/ , R, 247 linesbanc-ntpred.R - banc/
legacy/ , R, 36 linesbanc-regions.R - banc/
legacy/ , R, 544 linesbanc-roots.R - banc/
legacy/ , R, 366 linesbanc-sjcabs.R - banc/
legacy/ , R, 147 linesbanc-skel.R - banc/
legacy/ , R, 350 linesbanc-split.R - banc/
legacy/ , R, 120 lines, 1 matchbanc-synapse-proportion- plot.R - banc/
legacy/ , R, 70 linesfix-batch-003-duplicates .R - banc/
load-keys.R , R, 58 lines - banc/
matching/ , R, 466 linesbanc-al-connectivity-mat ches.R - banc/
matching/ , R, 303 linesbanc-al-review-images.R - banc/
matching/ , R, 1,029 linesbanc-al-type-changes.R - banc/
matching/ , R, 766 linesbanc-bm-asymmetry.R - banc/
matching/ , R, 867 linesbanc-class-fixes.R - banc/
matching/ , R, 445 linesbanc-cx-connectivity-mat ches.R - banc/
matching/ , R, 379 linesbanc-cx-fix.R - banc/
matching/ , R, 287 linesbanc-cx-review-images.R - banc/
matching/ , R, 464 linesbanc-fafb-cell-type-fixe s.R - banc/
matching/ , R, 291 linesbanc-update-abdominal-ne uromere-types.R - banc/
matching/ , R, 1,139 linesbanc-vnc-sexually-dimorp hic.R - banc/
matching/ , R, 2,097 linesbanc-vnc-type-changes.R - banc/
matching/ , R, 426 linesbanc-vnc-type-review-ima ges.R - banc/
meta/ , R, 218 linesbanc-hemilineages.R - banc/
meta/ , R, 156 linesbanc-meta-fix.R - banc/
meta/ , R, 568 linesbanc-meta.R - banc/
metrics/ , R, 1,235 linesbanc-calculate-completio n.R - banc/
metrics/ , R, 363 linesbanc-calculate-connectiv ity.R - banc/
metrics/ , R, 211 linesbanc-calculate-l2-metric s.R - banc/
metrics/ , R, 534 linesbanc-calculate-neuropil- inclusion.R - banc/
metrics/ , R, 294 linesbanc-calculate-ntpred.R - banc/
metrics/ , R, 303 linesbanc-calculate-regions.R - banc/
metrics/ , R, 276 linesbanc-calculate-root-posi tions.R - banc/
metrics/ , R, 201 linesbanc-calculate-skeletons .R - banc/
metrics/ , R, 488 linesbanc-calculate-split.R - banc/
metrics/ , R, 366 linesbanc-calculate-synapses. R - banc/
metrics/ , R, 147 linesbanc-calculate-volumes.R - banc/
metrics/ , R, 108 linesbanc-extract-synapse-loo kups.R - banc/
metrics/ , R, 144 linesbanc-l2.R - banc/
metrics/ , R, 54 linesbanc-nuclei.R - banc/
metrics/ , R, 78 linesbanc-obj.R - banc/
metrics/ , R, 959 linesbanc-synapses-v3-optimis ed.R - banc/
metrics/ , R, 676 linesbanc-synapses-v3.R - banc/
metrics/ , R, 337 linesbanc-v3-synapse-sample.R - banc/
nblast/ , R, 159 linesbanc-fafb-nblast-images. R - banc/
nblast/ , R, 338 linesbanc-fafb-nblast.R - banc/
nblast/ , R, 159 linesbanc-fanc-nblast-images. R - banc/
nblast/ , R, 243 linesbanc-fanc-nblast.R - banc/
nblast/ , R, 153 linesbanc-hemibrain-nblast-im ages.R - banc/
nblast/ , R, 253 linesbanc-hemibrain-nblast.R - banc/
nblast/ , R, 136 linesbanc-lr-nblast-images.R - banc/
nblast/ , R, 40 linesbanc-make-proofread-ids. R - banc/
nblast/ , R, 151 linesbanc-malecns-nblast-imag es.R - banc/
nblast/ , R, 257 linesbanc-malecns-nblast.R - banc/
nblast/ , R, 147 linesbanc-manc-nblast-images. R - banc/
nblast/ , R, 310 linesbanc-manc-nblast.R - banc/
nblast/ , R, 318 linesbanc-nblast-cave.R - banc/
nblast/ , R, 1,602 lines, 1 matchbanc-nblast-compile.R - banc/
nblast/ , R, 415 linesbanc-nblast-lr.R - banc/
nblast/ , R, 242 linesbanc-nblast-native.R - banc/
nblast/ , R, 400 linesbanc-nblast-plot.R - banc/
nblast/ , R, 171 linesbanc-nblast-search.R - banc/
nblast/ , R, 320 linesbanc-nblast-wrong-matche s.R - banc/
nblast/ , R, 166 linesbanc-sort-folders.R - banc/
share/ , R, 1,351 linesbanc-data.R - banc/
share/ , R, 141 linesbanc-export-skeletons.R - banc/
share/ , R, 67 lines, 1 matchbanc-nblast-share-gcs.R - banc/
share/ , R, 177 linesbanc-publish-synapse-loo kups.R - banc/
share/ , R, 89 linesbanc-sjcabs-upload.R - banc/
share/ , R, 286 linesbanc-sjcabs.R - banc/
transforms/ , R, 118 linesbanc-fafb-mesh-transform .R - banc/
transforms/ , R, 127 linesbanc-fafb-skel-transform .R - banc/
transforms/ , R, 106 linesbanc-fanc-mesh-transform .R - banc/
transforms/ , R, 117 linesbanc-fanc-skel-transform .R - banc/
transforms/ , R, 95 linesbanc-hemibrain-mesh-tran sform.R - banc/
transforms/ , R, 111 linesbanc-hemibrain-skel-tran sform.R - banc/
transforms/ , R, 122 linesbanc-malecns-mesh-transf orm.R - banc/
transforms/ , R, 95 linesbanc-manc-mesh-transform .R - banc/
transforms/ , R, 111 linesbanc-manc-skel-transform .R - banc/
transforms/ , R, 602 lines, 1 matchbanc-ngl-upload.R - banc/
transforms/ , R, 120 linesbanc-publish-segment-pro perties.R - banc/
update/ , R, 117 linesbanc-dcv-density.R - banc/
update/ , R, 195 linesbanc-delete.R - banc/
update/ , R, 1,013 linesbanc-ids.R - banc/
update/ , R, 130 linesbanc-ids888.R - banc/
update/ , R, 113 linesbanc-ids890.R - banc/
update/ , R, 697 linesbanc-update-celltypes.R - banc/
update/ , R, 433 linesbanc-update-matches.R - banc/
update/ , R, 207 linesbanc-update-metrics.R - banc/
update/ , R, 156 linesbanc-update-ntpred.R - banc/
update/ , R, 401 linesbanc-update-seatable.R - banc/
update/ , R, 284 linesbanc-update-status.R - banc/
update/ , R, 20 linesbanc-updateids.R - banc/
utilities/ , R, 135 linesbanc-csv-feather-convert .R - banc/
utilities/ , R, 1,733 linesbanc-dimorphic-density.R - banc/
utilities/ , R, 2,318 linesbanc-plot.R - banc/
utilities/ , Python, 199 linesmalecns-3dprint-stl.py - deform/
deform_fafb.sh , Shell, 6 lines - deform/
deformetrica-fafb-brain. , R, 400 linesR - deform/
deformetrica-lr.R , R, 311 lines - deform/
deformetrica-manc-vnc.R , R, 219 lines - deform/
example/ , Shell, 6 linesdeform.sh - deform/
transfer_vtk.R , R, 76 lines - exploration/
R/ , R, 128 linesDNg27-connectivity.R - exploration/
R/ , R, 187 linesSAG-connectivity.R - exploration/
R/ , R, 1,048 lines, 4 matchesabd-influence.R - exploration/
R/ , R, 138 linesabd-neurons-of-interest. R - exploration/
R/ , R, 281 linesabd-startup.R - exploration/
R/ , R, 415 linesan-connectivity.R - exploration/
R/ , R, 118 linesan-topography-viewing.R - exploration/
R/ , R, 287 linesbanc-an-dn-graph.R - exploration/
R/ , R, 368 linesbanc-connectivity-compar ison.R - exploration/
R/ , R, 712 linesbanc-gustatory-network.R - exploration/
R/ , R, 193 linesbanc-organise-tracing.R - exploration/
R/ , R, 318 linesbanc-umap-analysis.R - exploration/
R/ , R, 47 linesconnectivity-playground. R - exploration/
R/ , R, 201 linesdn-connectivity-plot.R - exploration/
R/ , R, 329 linesdn-connectivity-save-dat a.R - exploration/
R/ , R, 121 linesdn-gen-save-data.R - exploration/
R/ , R, 247 linesdn-nblast-cluster-1-9-wi th-nt.R - exploration/
R/ , R, 206 linesdn-nblast-cluster-1-9-wi th-subclusters.R - exploration/
R/ , R, 167 linesdn-nblast-cluster-assign -test.R - exploration/
R/ , R, 90 linesdn-nblast-cluster-assign .R - exploration/
R/ , R, 157 linesdn-nblast-clusters.R - exploration/
R/ , R, 78 linesdn-nblast-full-dendrogra m.R - exploration/
R/ , R, 759 linesdn-oviDNs-get-inputs-out puts.R - exploration/
R/ , R, 133 linesdn-oviDNs.R - exploration/
R/ , R, 95 linesdn-search-aDNs-grooming. R - exploration/
R/ , R, 404 linesdn-synapse-per-neuropil- save-data.R - exploration/
R/ , R, 43 linesdn-taxonomy.R - exploration/
R/ , R, 183 linesfafb-example-analysis.R - exploration/
R/ , R, 432 linesfig-1.R - exploration/
R/ , R, 146 linesfind-neurons.R - exploration/
R/ , R, 175 lineshemibrain-tangential-hde lta.R - exploration/
R/ , R, 1,040 linesinfluence-umap.R - exploration/
R/ , R, 186 linesjon-an-search.R - exploration/
R/ , R, 167 linesload-plot-influence-scor es-example.R - exploration/
R/ , R, 197 linesmanc-example-analysis.R - exploration/
R/ , R, 598 linesneck-connective-an-revis e.R - exploration/
R/ , R, 186 linesneck-connective-an.R - exploration/
R/ , R, 294 linesneck-connective-dn.R - exploration/
R/ , R, 283 linesneck-connective-network. R - exploration/
R/ , R, 807 linesneck-connective-neuropil s-an.R - exploration/
R/ , R, 590 linesneck-connective-neuropil s-dn.R - exploration/
R/ , R, 170 linesneck-connective-roots.R - exploration/
R/ , R, 255 linespC1-connectivity.R - exploration/
R/ , R, 116 linesplotqueryPNG-in-BANC.R - exploration/
matlab/ , MATLAB, 89 linesabdDNs_influence_analysi s.m - exploration/
matlab/ , MATLAB, 59 linesdn_anatomical_clusters_d isplay.m - exploration/
matlab/ , MATLAB, 97 linesdn_anatomy_vs_connectivi ty.m - exploration/
matlab/ , MATLAB, 69 linesdn_synapse_per_neuropil_ per_dn_type.m - exploration/
matlab/ , MATLAB, 79 linesextract_influence_bodypa rts.m - exploration/
matlab/ , MATLAB, 102 linesextract_influence_modali ty.m - exploration/
matlab/ , MATLAB, 104 linesplot_heatmap_cos_dist.m - exploration/
matlab/ , MATLAB, 265 lines, 1 matchplot_heatmap_syn_per_np. m - exploration/
matlab/ , MATLAB, 86 linesplot_hist_cos_dist.m - exploration/
python/ , Shell, 24 linesbanc.sh - exploration/
python/ , Python, 175 linesbatch-cascade.py - exploration/
python/ , Python, 463 linescascade-model.py - exploration/
python/ , Jupyter, 712 linesclustering-jf.ipynb - exploration/
python/ , Jupyter, 1,353 linesdn-an-connectivity-based -clustering.ipynb - exploration/
python/ , Python, 136 linesfafb-example-analysis.py - exploration/
python/ , Jupyter, 236 linesjf-analysis-explore.ipyn b - exploration/
python/ , Python, 353 linesreal-data-cascade-main.p y - exploration/
python/ , Jupyter, 625 linesreal-data-cascade.ipynb - exploration/
python/ , Jupyter, 495 linesspectral-propagation-met hod.ipynb - exploration/
python/ , Jupyter, 182 linestoy-data.ipynb - fafb/
fafb-meta.R , R, 302 lines - fafb/
fafb-sjcabs.R , R, 337 lines - fafb/
sort-connectome-data.R , R, 53 lines - fanc/
fanc-data.R , R, 1 line - fanc/
fanc-meta.R , R, 130 lines - hemibrain/
hemibrain-meta.R , R, 134 lines - hemibrain/
hemibrain-sjcabs.R , R, 390 lines - malecns/
malecns-meta.R , R, 1,810 lines, 8 matches - malecns/
malecns-sjcabs.R , R, 504 lines - malecns/
malecns-skels.R , R, 174 lines - manc/
manc-data.R , R, 192 lines - manc/
manc-meta.R , R, 223 lines - manc/
manc-sjcabs.R , R, 230 lines - manc/
manc-split.R , R, 336 lines - o2/
alignment/ , Shell, 167 lineso2_banc_alignment.sh - o2/
alignment/ , Shell, 57 lineso2_banc_optic_prep.sh - o2/
alignment/ , Shell, 68 lineso2_banc_wb_align_v888v2_ only.sh - o2/
alignment/ , Shell, 102 lineso2_banc_wb_cosine_v888v2 .sh - o2/
alignment/ , Shell, 83 lineso2_banc_wb_cosine_v888v2 _priority.sh - o2/
alignment/ , Shell, 86 lineso2_banc_wb_cosine_v888v3 .sh - o2/
alignment/ , Shell, 69 lineso2_banc_wb_ensemble_ind_ v888v2.sh - o2/
alignment/ , Shell, 53 lineso2_banc_wb_ntac_v888v2.s h - o2/
alignment/ , Shell, 68 lineso2_banc_wb_prep_v888v2.s h - o2/
alignment/ , Shell, 56 lineso2_banc_wb_prep_v888v2_p riority.sh - o2/
alignment/ , Shell, 109 lineso2_banc_wb_production_v8 88v2.sh - o2/
alignment/ , Shell, 23 lineso2_banc_wb_push.sh - o2/
o2_env.sh , Shell, 30 lines - o2/
oneshots/ , Shell, 32 lineso2_banc_assess_synapses_ plot.sh - o2/
oneshots/ , Shell, 37 lineso2_banc_ol_ind_smoketest .sh - o2/
oneshots/ , Shell, 120 lineso2_banc_optic_sweep.sh - o2/
oneshots/ , Shell, 90 lineso2_banc_proofread_redo.s h - o2/
oneshots/ , Shell, 23 lineso2_banc_synapse_proporti on_plot.sh - o2/
oneshots/ , Shell, 32 lineso2_banc_v3_synapse_sampl e.sh - o2/
oneshots/ , Shell, 156 lineso2_banc_v850_rebuild.sh - o2/
oneshots/ , Shell, 249 lines, 1 matcho2_banc_v890_rebuild.sh - o2/
oneshots/ , Shell, 60 lineso2_banc_wb_cosine_v888v2 _alpha05.sh - o2/
oneshots/ , Shell, 33 lineso2_banc_wb_dryrun_diff.s h - o2/
oneshots/ , Shell, 49 lineso2_banc_wb_ntac_rerun.sh - o2/
oneshots/ , Shell, 83 lineso2_banc_wb_probe.sh - o2/
oneshots/ , Shell, 167 lineso2_banc_wb_sweep.sh - o2/
oneshots/ , Shell, 89 lineso2_ranks.sh - o2/
oneshots/ , Shell, 14 lineso2_test_l2_10ids.sh - o2/
production/ , Shell, 18 lineso2_banc_aggregate_influe nce.sh - o2/
production/ , Shell, 28 lineso2_banc_aggregate_influe nce_priority.sh - o2/
production/ , Shell, 40 lineso2_banc_betweenness.sh - o2/
production/ , Shell, 56 lineso2_banc_completion.sh - o2/
production/ , Shell, 71 lineso2_banc_data_push.sh - o2/
production/ , Shell, 69 lineso2_banc_data_push_priori ty.sh - o2/
production/ , Shell, 45 lineso2_banc_data_push_v3only .sh - o2/
production/ , Shell, 104 lineso2_banc_edgelist_rebuild .sh - o2/
production/ , Shell, 25 lineso2_banc_export_skeletons .sh - o2/
production/ , Shell, 47 lineso2_banc_images.sh - o2/
production/ , Shell, 74 lineso2_banc_influence.sh - o2/
production/ , Shell, 68 lineso2_banc_influence_array. sh - o2/
production/ , Shell, 22 lineso2_banc_meshes.sh - o2/
production/ , Shell, 76 lineso2_banc_metrics.sh - o2/
production/ , Shell, 17 lineso2_banc_native.sh - o2/
production/ , Shell, 22 lineso2_banc_native_array.sh - o2/
production/ , Shell, 61 lineso2_banc_nblast.sh - o2/
production/ , Shell, 37 lineso2_banc_nblast_compile_c hain.sh - o2/
production/ , Shell, 26 lineso2_banc_nblast_compile_o nly.sh - o2/
production/ , Shell, 76 lineso2_banc_nblast_dataset.s h - o2/
production/ , Shell, 34 lineso2_banc_ngl.sh - o2/
production/ , Shell, 44 lineso2_banc_ngl_upload_array .sh - o2/
production/ , Shell, 22 lineso2_banc_publish_lookups. sh - o2/
production/ , Shell, 20 lineso2_banc_publish_segment_ properties.sh - o2/
production/ , Shell, 20 lineso2_banc_refresh_blacklis t.sh - o2/
production/ , Shell, 114 lineso2_banc_results.sh - o2/
production/ , Shell, 42 lineso2_banc_spectral.sh - o2/
production/ , Shell, 28 lineso2_banc_split.sh - o2/
production/ , Shell, 28 lineso2_banc_synapses.sh - o2/
production/ , Shell, 20 lineso2_banc_synapses_v3.sh - o2/
production/ , Shell, 96 lineso2_banc_update.sh - o2/
production/ , Shell, 22 lineso2_banc_updateids.sh - o2/
production/ , Shell, 225 lines, 1 matcho2_banc_v888_rebuild.sh - o2/
production/ , Shell, 44 lineso2_deform_cpu.sh - o2/
production/ , Shell, 45 lineso2_deform_fafb.sh - o2/
production/ , Shell, 29 lineso2_install_bancr.sh - o2/
production/ , Shell, 22 lineso2_malecns.sh - o2/
production/ , Shell, 27 lineso2_manc.sh - o2/
production/ , Shell, 22 lineso2_manc_skel.sh - o2/
production/ , Shell, 9 lineso2_transfer.sh - scripts/
seeds_to_production.sh , Shell, 49 lines - setup/
create_cave_table.py , Python, 34 lines - setup/
hms_setup.R , R, 467 lines - LICENSE, License, 674 lines
- README.md, Text, 363 lines
Zenodo 20350564
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
15 files
- R/
influence-calculator-r.R , R, 456 lines - R/
influencer-package.R , R, 51 lines - R/
install-python.R , R, 93 lines - R/
python-wrapper.R , R, 308 lines - R/
utils.R , R, 169 lines - R/
zzz.R , R, 22 lines - inst/
install_key_dependencies , Shell, 47 lines.sh - inst/
install_python_deps.sh , Shell, 273 lines - tests/
testthat.R , R, 12 lines - tests/
testthat/ , R, 142 linestest-comparison.R - tests/
testthat/ , R, 225 linestest-influence-calculato r-r.R - tests/
testthat/ , R, 71 linestest-python-wrapper.R - vignettes/
getting-started.Rmd , R, 182 lines - LICENSE.md, License, 595 lines
- README.md, Text, 713 lines
Zenodo 20350570
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
8 files
- resnet_18/
scripts/ , Python, 136 lines01_split_data.py - resnet_18/
scripts/ , Python, 479 lines, 1 match02_train.py - resnet_18/
scripts/ , Python, 305 lines03_inference.py - resnet_18/
scripts/ , Python, 306 lines03_inference_val.py - resnet_18/
scripts/ , Python, 121 linesloss.py - resnet_18/
scripts/ , Python, 52 linesresnet_18.py - LICENSE, License, 674 lines
- README.md, Text, 27 lines
Zenodo 20350648
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Zenodo 20350566
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
20 files
- R/
data.R , R, 253 lines - R/
gganat.R , R, 65 lines - R/
ggplot2.R , R, 868 lines - R/
utils.R , R, 109 lines - data-raw/
prepare_data.R , R, 131 lines - docs/
bootstrap-toc.js , JavaScript, 159 lines - docs/
docsearch.js , JavaScript, 85 lines - docs/
pkgdown.js , JavaScript, 162 lines - tests/
testthat.R , R, 5 lines - tests/
testthat/ , R, 78 linestest-basic.R - tests/
testthat/ , R, 86 linestest-data.R - tests/
testthat/ , R, 123 linestest-geom_neuron.R - tests/
testthat/ , R, 66 linestest-ggplot2_neuron_path .R - tests/
testthat/ , R, 135 linestest-integration.R - tests/
testthat/ , R, 3 linestest-setup-rgl.R - tests/
testthat/ , R, 98 linestest-utils.R - vignettes/
banc_examples.Rmd , R, 296 lines - LICENSE, License, 2 lines
- LICENSE.md, License, 21 lines
- README.md, Text, 503 lines
Zenodo 21282630
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
8 files
- InfluenceCalculator/
InfluenceCalculator.py , Python, 692 lines - InfluenceCalculator/
__init__.py , Python, 3 lines - InfluenceCalculator/
data/ , Python, 65 lines__init__.py - examples/
celegans_worked_example. , Python, 338 linespy - tests/
conftest.py , Python, 57 lines - tests/
test_influence_calculato , Python, 269 linesr.py - LICENSE.txt, License, 28 lines
- README.md, Text, 261 lines
Code availability
A comprehensive collection of community tools and software packages for working with the BANC dataset can be found at the project hub (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 14 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 448 scripts, each with its path and the digest of its content;
- 40 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- cran.r-project.org/
package= , at cran.r-project.org; found in the referencesmass - doi:10.7910/
dvn/ , at the source; found in “Data availability”8tfggb - github.com/
flyconnectome/ , at github.com; found in DataCitedrosophila_neurotransmit ters - github.com/
funkelab/ , at github.com; found in DataCitedrosophila_neuropeptides - github.com/
funkelab/ , at github.com; found in DataCitedrosophila_neurotransmit ters - zenodo:20818141, at Zenodo; found in DataCite
- zenodo:20818142, at Zenodo; found in DataCite
- zenodo:20818143, at Zenodo; found in DataCite
- zenodo:20818144, at Zenodo; found in DataCite
Data Availability Statement
Data are freely accessible through multiple platforms. A general overview of the resource and links to these tools are available at the BANC portal (https://
A comprehensive collection of community tools and software packages for working with the BANC dataset can be found at the project hub (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Publisher: n/a → Nature Portfolio
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 101 authors, 3 keywords, 13 MeSH terms, 3 funders, 303 references.
Cite
This paper
Bates, A. S., Phelps, J. S., Kim, M., Yang, H. H., Matsliah, A., Ajabi, Z., Perlman, E., Delgado, K. M., Osman, M. A. M., Salmon, C. K., Gager, J., Silverman, B., Renauld, S., Salman, F., Patel, J., Collie, M. F., Fan, J., Pacheco, D. A., Zhao, Y., . . . Lee, W.-C. A. (2026). Distributed control circuits across a brain-and-cord connectome. Nature, 656(8129), 957-970. https://
BibTeX
@article{bates2026distri
author = {Bates, Alexander S and Phelps, Jasper S and Kim, Minsu and Yang, Helen H and Matsliah, Arie and Ajabi, Zaki and Perlman, Eric and Delgado, Kevin M and Osman, Mohammed Abdal Monium and Salmon, Christopher K and Gager, Jay and Silverman, Benjamin and Renauld, Sophia and Salman, Farzaan and Patel, Janki and Collie, Matthew F and Fan, Jingxuan and Pacheco, Diego A and Zhao, Yunzhi and Zhang, Wenyi and Serratosa Capdevila, Laia and Roberts, Ruairí J V and Munnelly, Eva J and Griggs, Nina and Langley, Helen and Moya-Llamas, Borja and Zhang, Zuoyu and Maloney, Ryan T and Yu, Szi-chieh and Sterling, Amy R and Sorek, Marissa and Kruk, Krzysztof and Serafetinidis, Nikitas and Dhawan, Serene and Klemm, Finja and Brooks, Paul and Lesser, Ellen and Jones, Jessica M and Pierce-Lundgren, Sara E and Lee, Su-Yee and Luo, Yichen and Cook, Andrew P and McKim, Theresa H and Giakoumas, Dimitrios Stasi and Gorko, Benjamin and Ellis-Joyce, Justin and Zhang, Jiayi and Kophs, Emily C and Falt, Tjalda and Negron-Morales, Alexa M and Burke, Austin and Hebditch, James and Willie, Kyle P and Willie, Ryan and Popovych, Sergiy and Kemnitz, Nico and Ih, Dodam and Lee, Kisuk and Lu, Ran and Halageri, Akhilesh and Bae, J Alexander and Jourdan, Ben and Schwartzman, Gregory and Demarest, Damian D and Behnke, Emily and Bland, Doug and Kristiansen, Anne and Skelton, Jaime and Stocks, Tom and Garner, Dustin and Hernandez, Anthony and Kumar, Sandeep and {The BANC-FlyWire Consortium} and Daly, Kevin C and Dorkenwald, Sven and Collman, Forrest and Suver, Marie P and Fenk, Lisa M and Pankratz, Michael J and Yao, Zepeng and Wang, Fei and Huston, Stephen J and Stürner, Tomke and Jefferis, Gregory S X E and Eichler, Katharina and Seeds, Andrew M and Hampel, Stefanie and Agrawal, Sweta and Okubo, Tatsuo S and Zandawala, Meet and Macrina, Thomas and Adjavon, Diane-Yayra and Funke, Jan and Tuthill, John C and Azevedo, Anthony and Seung, H Sebastian and de Bivort, Benjamin L and Murthy, Mala and Drugowitsch, Jan and Wilson, Rachel I and Lee, Wei-Chung Allen},
title = {{Distributed control circuits across a brain-and-cord connectome}},
journal = {Nature},
year = {2026},
month = jun,
volume = {656},
number = {8129},
pages = {957--970},
publisher = {Nature Portfolio},
issn = {0028-0836},
doi = {10.1038/
url = {https://
pmid = {42259917},
pmcid = {PMC13518251}
}
RIS
TY - JOUR
AU - Bates, Alexander S
AU - Phelps, Jasper S
AU - Kim, Minsu
AU - Yang, Helen H
AU - Matsliah, Arie
AU - Ajabi, Zaki
AU - Perlman, Eric
AU - Delgado, Kevin M
AU - Osman, Mohammed Abdal Monium
AU - Salmon, Christopher K
AU - Gager, Jay
AU - Silverman, Benjamin
AU - Renauld, Sophia
AU - Salman, Farzaan
AU - Patel, Janki
AU - Collie, Matthew F
AU - Fan, Jingxuan
AU - Pacheco, Diego A
AU - Zhao, Yunzhi
AU - Zhang, Wenyi
AU - Serratosa Capdevila, Laia
AU - Roberts, Ruairí J V
AU - Munnelly, Eva J
AU - Griggs, Nina
AU - Langley, Helen
AU - Moya-Llamas, Borja
AU - Zhang, Zuoyu
AU - Maloney, Ryan T
AU - Yu, Szi-chieh
AU - Sterling, Amy R
AU - Sorek, Marissa
AU - Kruk, Krzysztof
AU - Serafetinidis, Nikitas
AU - Dhawan, Serene
AU - Klemm, Finja
AU - Brooks, Paul
AU - Lesser, Ellen
AU - Jones, Jessica M
AU - Pierce-Lundgren, Sara E
AU - Lee, Su-Yee
AU - Luo, Yichen
AU - Cook, Andrew P
AU - McKim, Theresa H
AU - Giakoumas, Dimitrios Stasi
AU - Gorko, Benjamin
AU - Ellis-Joyce, Justin
AU - Zhang, Jiayi
AU - Kophs, Emily C
AU - Falt, Tjalda
AU - Negron-Morales, Alexa M
AU - Burke, Austin
AU - Hebditch, James
AU - Willie, Kyle P
AU - Willie, Ryan
AU - Popovych, Sergiy
AU - Kemnitz, Nico
AU - Ih, Dodam
AU - Lee, Kisuk
AU - Lu, Ran
AU - Halageri, Akhilesh
AU - Bae, J Alexander
AU - Jourdan, Ben
AU - Schwartzman, Gregory
AU - Demarest, Damian D
AU - Behnke, Emily
AU - Bland, Doug
AU - Kristiansen, Anne
AU - Skelton, Jaime
AU - Stocks, Tom
AU - Garner, Dustin
AU - Hernandez, Anthony
AU - Kumar, Sandeep
AU - The BANC-FlyWire Consortium
AU - Daly, Kevin C
AU - Dorkenwald, Sven
AU - Collman, Forrest
AU - Suver, Marie P
AU - Fenk, Lisa M
AU - Pankratz, Michael J
AU - Yao, Zepeng
AU - Wang, Fei
AU - Huston, Stephen J
AU - Stürner, Tomke
AU - Jefferis, Gregory S X E
AU - Eichler, Katharina
AU - Seeds, Andrew M
AU - Hampel, Stefanie
AU - Agrawal, Sweta
AU - Okubo, Tatsuo S
AU - Zandawala, Meet
AU - Macrina, Thomas
AU - Adjavon, Diane-Yayra
AU - Funke, Jan
AU - Tuthill, John C
AU - Azevedo, Anthony
AU - Seung, H Sebastian
AU - de Bivort, Benjamin L
AU - Murthy, Mala
AU - Drugowitsch, Jan
AU - Wilson, Rachel I
AU - Lee, Wei-Chung Allen
TI - Distributed control circuits across a brain-and-cord connectome
T2 - Nature
J2 - Nature
PY - 2026
DA - 2026/
VL - 656
IS - 8129
SP - 957
EP - 970
SN - 0028-0836
PB - Nature Portfolio
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Distributed control circuits across a brain-and-cord connectome",
"container-title": "Nature",
"author": [
{
"family": "Bates",
"given": "Alexander S"
},
{
"family": "Phelps",
"given": "Jasper S"
},
{
"family": "Kim",
"given": "Minsu"
},
{
"family": "Yang",
"given": "Helen H"
},
{
"family": "Matsliah",
"given": "Arie"
},
{
"family": "Ajabi",
"given": "Zaki"
},
{
"family": "Perlman",
"given": "Eric"
},
{
"family": "Delgado",
"given": "Kevin M"
},
{
"family": "Osman",
"given": "Mohammed Abdal Monium"
},
{
"family": "Salmon",
"given": "Christopher K"
},
{
"family": "Gager",
"given": "Jay"
},
{
"family": "Silverman",
"given": "Benjamin"
},
{
"family": "Renauld",
"given": "Sophia"
},
{
"family": "Salman",
"given": "Farzaan"
},
{
"family": "Patel",
"given": "Janki"
},
{
"family": "Collie",
"given": "Matthew F"
},
{
"family": "Fan",
"given": "Jingxuan"
},
{
"family": "Pacheco",
"given": "Diego A"
},
{
"family": "Zhao",
"given": "Yunzhi"
},
{
"family": "Zhang",
"given": "Wenyi"
},
{
"family": "Serratosa Capdevila",
"given": "Laia"
},
{
"family": "Roberts",
"given": "Ruairí J V"
},
{
"family": "Munnelly",
"given": "Eva J"
},
{
"family": "Griggs",
"given": "Nina"
},
{
"family": "Langley",
"given": "Helen"
},
{
"family": "Moya-Llamas",
"given": "Borja"
},
{
"family": "Zhang",
"given": "Zuoyu"
},
{
"family": "Maloney",
"given": "Ryan T"
},
{
"family": "Yu",
"given": "Szi-chieh"
},
{
"family": "Sterling",
"given": "Amy R"
},
{
"family": "Sorek",
"given": "Marissa"
},
{
"family": "Kruk",
"given": "Krzysztof"
},
{
"family": "Serafetinidis",
"given": "Nikitas"
},
{
"family": "Dhawan",
"given": "Serene"
},
{
"family": "Klemm",
"given": "Finja"
},
{
"family": "Brooks",
"given": "Paul"
},
{
"family": "Lesser",
"given": "Ellen"
},
{
"family": "Jones",
"given": "Jessica M"
},
{
"family": "Pierce-Lundgren",
"given": "Sara E"
},
{
"family": "Lee",
"given": "Su-Yee"
},
{
"family": "Luo",
"given": "Yichen"
},
{
"family": "Cook",
"given": "Andrew P"
},
{
"family": "McKim",
"given": "Theresa H"
},
{
"family": "Giakoumas",
"given": "Dimitrios Stasi"
},
{
"family": "Gorko",
"given": "Benjamin"
},
{
"family": "Ellis-Joyce",
"given": "Justin"
},
{
"family": "Zhang",
"given": "Jiayi"
},
{
"family": "Kophs",
"given": "Emily C"
},
{
"family": "Falt",
"given": "Tjalda"
},
{
"family": "Negron-Morales",
"given": "Alexa M"
},
{
"family": "Burke",
"given": "Austin"
},
{
"family": "Hebditch",
"given": "James"
},
{
"family": "Willie",
"given": "Kyle P"
},
{
"family": "Willie",
"given": "Ryan"
},
{
"family": "Popovych",
"given": "Sergiy"
},
{
"family": "Kemnitz",
"given": "Nico"
},
{
"family": "Ih",
"given": "Dodam"
},
{
"family": "Lee",
"given": "Kisuk"
},
{
"family": "Lu",
"given": "Ran"
},
{
"family": "Halageri",
"given": "Akhilesh"
},
{
"family": "Bae",
"given": "J Alexander"
},
{
"family": "Jourdan",
"given": "Ben"
},
{
"family": "Schwartzman",
"given": "Gregory"
},
{
"family": "Demarest",
"given": "Damian D"
},
{
"family": "Behnke",
"given": "Emily"
},
{
"family": "Bland",
"given": "Doug"
},
{
"family": "Kristiansen",
"given": "Anne"
},
{
"family": "Skelton",
"given": "Jaime"
},
{
"family": "Stocks",
"given": "Tom"
},
{
"family": "Garner",
"given": "Dustin"
},
{
"family": "Hernandez",
"given": "Anthony"
},
{
"family": "Kumar",
"given": "Sandeep"
},
{
"literal": "The BANC-FlyWire Consortium"
},
{
"family": "Daly",
"given": "Kevin C"
},
{
"family": "Dorkenwald",
"given": "Sven"
},
{
"family": "Collman",
"given": "Forrest"
},
{
"family": "Suver",
"given": "Marie P"
},
{
"family": "Fenk",
"given": "Lisa M"
},
{
"family": "Pankratz",
"given": "Michael J"
},
{
"family": "Yao",
"given": "Zepeng"
},
{
"family": "Wang",
"given": "Fei"
},
{
"family": "Huston",
"given": "Stephen J"
},
{
"family": "Stürner",
"given": "Tomke"
},
{
"family": "Jefferis",
"given": "Gregory S X E"
},
{
"family": "Eichler",
"given": "Katharina"
},
{
"family": "Seeds",
"given": "Andrew M"
},
{
"family": "Hampel",
"given": "Stefanie"
},
{
"family": "Agrawal",
"given": "Sweta"
},
{
"family": "Okubo",
"given": "Tatsuo S"
},
{
"family": "Zandawala",
"given": "Meet"
},
{
"family": "Macrina",
"given": "Thomas"
},
{
"family": "Adjavon",
"given": "Diane-Yayra"
},
{
"family": "Funke",
"given": "Jan"
},
{
"family": "Tuthill",
"given": "John C"
},
{
"family": "Azevedo",
"given": "Anthony"
},
{
"family": "Seung",
"given": "H Sebastian"
},
{
"family": "de Bivort",
"given": "Benjamin L"
},
{
"family": "Murthy",
"given": "Mala"
},
{
"family": "Drugowitsch",
"given": "Jan"
},
{
"family": "Wilson",
"given": "Rachel I"
},
{
"family": "Lee",
"given": "Wei-Chung Allen"
}
],
"container-title-short":
"volume": "656",
"issue": "8129",
"page": "957-970",
"DOI": "10.1038/
"PMID": "42259917",
"PMCID": "PMC13518251",
"ISSN": "0028-0836",
"publisher": "Nature Portfolio",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
8
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.7554/elife.96084 [code]
- Organization of circuits linking descending input to motor output in the &
lt;i& gt;Drosophila& lt;/ i& gt; Male Adult Nerve Cord connectome. Journal: eLifeIn common: igraph, ggpubr, ggplot2, 1 other tool, drosophila, 40 references, 3 authors - [2] doi:10.3389/fnsys.2026.1822122 [code]
- Convergence-divergence circuits for multimodal integration of innate and learned opponent valences.Journal: Frontiers in systems neuroscienceIn common: UMAP, igraph, NetworkX, 9 other tools, 39 references
- [3] doi:10.1016/j.isci.2026.117359 [code]
- Connectomic mapping of pharyngeal and gut sensory circuits in adult &
lt;i& gt;Drosophila& lt;/ i& gt;. Journal: iScienceIn common: Plotly, seaborn, tidyverse, 4 other tools, drosophila, 23 references, author Zepeng Yao - [4] doi:10.1038/s41467-026-72152-x [code]
- Centralized brain networks controlling antennal grooming coordination.Journal: Nature communicationsIn common: NetworkX, seaborn, scikit-learn, 4 other tools, drosophila, 26 references
- [5] doi:10.1038/s41593-026-02388-9 [code]
- Hippocampal CA3 connectomics reveals a gradient of mossy fiber inputs and selective feedforward inhibition onto pyramidal cells.Journal: Nature neuroscienceIn common: igraph, NetworkX, Plotly, 7 other tools, 7 references, 4 authors
- [6] doi:10.1371/journal.pbio.3003959 [code]
- Recurrent synapses between CO2-sensitive olfactory sensory neurons enable robust CO2 detection in Aedes aegypti mosquitoes.Journal: PLoS biologyIn common: seaborn, scikit-learn, pandas, 3 other tools, drosophila, 17 references, author Wei-Chung Allen Lee
- [7] doi:10.1038/s41586-026-10797-w [code]
- A global molecular code for birth order and neuronal identity in Drosophila.Journal: NatureIn common: reticulate, igraph, data.table, 5 other tools, drosophila, 12 references, author Gregory S. X. E. Jefferis
- [8] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: caret, reticulate, UMAP, 20 other tools
- [9] doi:10.1002/bies.70122 [code]
- Imprecision in Vision: Lessons From Neural Circuits in the Fly.Journal: BioEssays : news and reviews in molecular, cellular and developmental biologyIn common: drosophila, 18 references
- [10] doi:10.1093/bioinformatics/btag592 [code]
- Network-based stratification of allele-specific expression reveals patient subgroups in Huntington's disease.Journal: Bioinformatics (Oxford, England)In common: reticulate, UMAP, igraph, 17 other tools
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 14 repositories of the authors' code, each at its verified commit and with its license, 448 scripts, and 40 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:01e21f50acd02ced…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
