From 1a9617a5d0e611e2a900d6277caf539eb4510d57 Mon Sep 17 00:00:00 2001 From: Steven Qiao Date: Tue, 30 Jun 2026 01:41:10 -0400 Subject: [PATCH 1/4] standardized procedure for db --- api/models/efp_schemas.py | 1 + api/utils/gene_id_utils.py | 1 + config/BAR_API.cfg | 1 + .../arabidopsis_NIE_pseudobulk_short.sql | 48 +++++++++++++++++++ config/init.sh | 1 + 5 files changed, 52 insertions(+) create mode 100644 config/databases/arabidopsis_NIE_pseudobulk_short.sql diff --git a/api/models/efp_schemas.py b/api/models/efp_schemas.py index 4bcbdd2..988f282 100644 --- a/api/models/efp_schemas.py +++ b/api/models/efp_schemas.py @@ -54,6 +54,7 @@ def _schema(species: str, charset: str = "latin1") -> DatabaseSpec: ("apple", "apple"), ("arabidopsis_ecotypes", "arabidopsis"), ("arachis", "arachis"), + ("arabidopsis_NIE_pseudobulk", "arabidopsis"), ("atgenexp", "arabidopsis"), ("atgenexp_hormone", "arabidopsis"), ("atgenexp_pathogen", "arabidopsis"), diff --git a/api/utils/gene_id_utils.py b/api/utils/gene_id_utils.py index e326c92..97defde 100644 --- a/api/utils/gene_id_utils.py +++ b/api/utils/gene_id_utils.py @@ -75,6 +75,7 @@ def is_probeset_id(gene_id: str) -> bool: "shoot_apex": "arabidopsis", "silique": "arabidopsis", "single_cell": "arabidopsis", + 'arabidopsis_NIE_pseudobulk': 'arabidopsis', # Actinidia (kiwifruit) "actinidia_bud_development": "actinidia", "actinidia_flower_fruit_development": "actinidia", diff --git a/config/BAR_API.cfg b/config/BAR_API.cfg index a241974..6b7d012 100755 --- a/config/BAR_API.cfg +++ b/config/BAR_API.cfg @@ -13,6 +13,7 @@ SQLALCHEMY_BINDS = { 'annotations_lookup': 'mysql://root:root@localhost/annotations_lookup', 'arabidopsis_ecotypes': 'mysql://root:root@localhost/arabidopsis_ecotypes', 'arachis': 'mysql://root:root@localhost/arachis', + 'arabidopsis_NIE_pseudobulk': 'mysql://root:root@localhost/arabidopsis_NIE_pseudobulk', 'cannabis': 'mysql://root:root@localhost/cannabis', 'canola_nssnp' : 'mysql://root:root@localhost/canola_nssnp', 'dna_damage': 'mysql://root:root@localhost/dna_damage', diff --git a/config/databases/arabidopsis_NIE_pseudobulk_short.sql b/config/databases/arabidopsis_NIE_pseudobulk_short.sql new file mode 100644 index 0000000..35bcfa6 --- /dev/null +++ b/config/databases/arabidopsis_NIE_pseudobulk_short.sql @@ -0,0 +1,48 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_NIE_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_NIE_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_NIE_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_NIE_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0346533,0.224356,'D0_Mesophyll'),('AT1G01010',0.0251518,0.185286,'D0_Sieve element_responsive'),('AT1G01010',0.0297745,0.203837,'D0_Guard'),('AT1G01010',0.0550332,0.260401,'D0_Defense state'),('AT1G01010',0.0424581,0.239094,'D0_Epidermal'),('AT1G01010',0.0163655,0.146177,'D0_Phloem Parenchyma'),('AT1G01010',0.0389615,0.234467,'D0_Metabolic stress state'),('AT1G01010',0.0292404,0.198967,'D0_Phloem companion'),('AT1G01010',0.0510094,0.226118,'D0_Trichome'),('AT1G01010',0.027103,0.181704,'D0_Dividing'),('AT1G01010',0.0692417,0.276578,'D0_Stress responsive'),('AT1G01010',0.0110158,0.119154,'D0_Sugar metabolic state'),('AT1G01010',0.0565404,0.272046,'D0_Immune active'),('AT1G01010',0.0513775,0.273271,'D0_Hydathode'),('AT1G01010',0.045102,0.247266,'D0_Vascular'),('AT1G01010',0.0256331,0.169289,'D0_Myrosin'),('AT1G01010',0.0274436,0.177235,'W0_Vascular'),('AT1G01010',0.024174,0.172252,'W0_Mesophyll'),('AT1G01010',0.0213485,0.15354,'W0_Phloem Parenchyma'),('AT1G01010',0.0286998,0.178188,'W0_Dividing'),('AT1G01010',0.0278313,0.182473,'W0_Epidermal'),('AT1G01010',0.0563447,0.251333,'W0_Immune active'),('AT1G01010',0.0343054,0.201204,'W0_Sieve element_responsive'),('AT1G01010',0.0574457,0.253535,'W0_Defense state'),('AT1G01010',0.0136855,0.12117,'W0_Guard'),('AT1G01010',0.0272221,0.169833,'W0_Phloem companion'),('AT1G01010',0.0715313,0.271057,'W0_Stress responsive'),('AT1G01010',0.00820466,0.0673068,'W0_Myrosin'),('AT1G01010',0.0393423,0.199799,'W0_Sugar metabolic state'),('AT1G01010',0.0339956,0.217678,'W0_Metabolic stress state'),('AT1G01010',0.0214199,0.133693,'W0_Trichome'),('AT1G01010',0.0571251,0.236552,'W0_Hydathode'),('AT1G01010',0.0422542,0.250415,'W15_Dividing'),('AT1G01010',0.0446,0.254963,'W15_Mesophyll'),('AT1G01010',0.037824,0.236808,'W15_Phloem Parenchyma'),('AT1G01010',0.0420744,0.251218,'W15_Immune active'),('AT1G01010',0.0387755,0.241218,'W15_Epidermal'),('AT1G01010',0.104241,0.43291,'W15_Hydathode'),('AT1G01010',0.104467,0.324257,'W15_Stress responsive'),('AT1G01010',0.03282,0.228891,'W15_Guard'),('AT1G01010',0.0783275,0.325689,'W15_Defense state'),('AT1G01010',0.0205945,0.15169,'W15_Myrosin'),('AT1G01010',0.0290853,0.203305,'W15_Phloem companion'),('AT1G01010',0.0409241,0.246531,'W15_Vascular'),('AT1G01010',0,0,'W15_Trichome'),('AT1G01010',0.0304135,0.206024,'W15_Sieve element_responsive'),('AT1G01010',0,0,'W15_Sugar metabolic state'),('AT1G01010',0.0573618,0.262866,'W15_Metabolic stress state'),('AT1G01010',0.0187317,0.156752,'R15_Sieve element_responsive'),('AT1G01010',0.0287312,0.191696,'R15_Immune active'),('AT1G01010',0.0329913,0.213788,'R15_Mesophyll'),('AT1G01010',0.0130775,0.14382,'R15_Guard'),('AT1G01010',0.0547408,0.257222,'R15_Defense state'),('AT1G01010',0.0541722,0.243631,'R15_Stress responsive'),('AT1G01010',0.02531,0.180358,'R15_Phloem Parenchyma'),('AT1G01010',0.0400045,0.239473,'R15_Epidermal'),('AT1G01010',0.0300884,0.196556,'R15_Vascular'),('AT1G01010',0.0282214,0.199286,'R15_Dividing'),('AT1G01010',0.034919,0.214859,'R15_Phloem companion'),('AT1G01010',0.018792,0.157063,'R15_Metabolic stress state'),('AT1G01010',0.0528136,0.261553,'R15_Trichome'),('AT1G01010',0,0,'R15_Myrosin'),('AT1G01010',0.0564275,0.281679,'R15_Hydathode'),('AT1G01010',0.0462055,0.222434,'R15_Sugar metabolic state'),('AT1G01020',0.161521,0.468897,'D0_Mesophyll'),('AT1G01020',0.163187,0.45825,'D0_Sieve element_responsive'),('AT1G01020',0.134235,0.419186,'D0_Guard'),('AT1G01020',0.1566,0.425135,'D0_Defense state'),('AT1G01020',0.178376,0.474155,'D0_Epidermal'),('AT1G01020',0.183195,0.479446,'D0_Phloem Parenchyma'),('AT1G01020',0.126,0.40608,'D0_Metabolic stress state'),('AT1G01020',0.17628,0.471908,'D0_Phloem companion'),('AT1G01020',0.394158,0.604338,'D0_Trichome'),('AT1G01020',0.217422,0.512643,'D0_Dividing'),('AT1G01020',0.262456,0.505874,'D0_Stress responsive'),('AT1G01020',0.213638,0.556462,'D0_Sugar metabolic state'),('AT1G01020',0.15074,0.444812,'D0_Immune active'),('AT1G01020',0.0888861,0.343135,'D0_Hydathode'),('AT1G01020',0.21508,0.520128,'D0_Vascular'),('AT1G01020',0.354521,0.627952,'D0_Myrosin'),('AT1G01020',0.327374,0.552174,'W0_Vascular'),('AT1G01020',0.254744,0.527378,'W0_Mesophyll'),('AT1G01020',0.38402,0.592769,'W0_Phloem Parenchyma'),('AT1G01020',0.254597,0.512452,'W0_Dividing'),('AT1G01020',0.258597,0.509531,'W0_Epidermal'),('AT1G01020',0.302626,0.542726,'W0_Immune active'),('AT1G01020',0.295859,0.533784,'W0_Sieve element_responsive'),('AT1G01020',0.277949,0.514132,'W0_Defense state'),('AT1G01020',0.227612,0.47704,'W0_Guard'),('AT1G01020',0.26905,0.510273,'W0_Phloem companion'),('AT1G01020',0.379981,0.546034,'W0_Stress responsive'),('AT1G01020',0.526001,0.618351,'W0_Myrosin'),('AT1G01020',0.244849,0.514526,'W0_Sugar metabolic state'),('AT1G01020',0.279799,0.556768,'W0_Metabolic stress state'),('AT1G01020',0.368836,0.558259,'W0_Trichome'),('AT1G01020',0.290903,0.544376,'W0_Hydathode'),('AT1G01020',0.268046,0.598221,'W15_Dividing'),('AT1G01020',0.221643,0.544871,'W15_Mesophyll'),('AT1G01020',0.263539,0.582182,'W15_Phloem Parenchyma'),('AT1G01020',0.265968,0.589934,'W15_Immune active'),('AT1G01020',0.25028,0.580544,'W15_Epidermal'),('AT1G01020',0.118011,0.401426,'W15_Hydathode'),('AT1G01020',0.33255,0.548801,'W15_Stress responsive'),('AT1G01020',0.196459,0.530506,'W15_Guard'),('AT1G01020',0.219787,0.522935,'W15_Defense state'),('AT1G01020',0.536151,0.713785,'W15_Myrosin'),('AT1G01020',0.253037,0.5803,'W15_Phloem companion'),('AT1G01020',0.292718,0.610683,'W15_Vascular'),('AT1G01020',0.406137,0.637708,'W15_Trichome'),('AT1G01020',0.296812,0.622277,'W15_Sieve element_responsive'),('AT1G01020',0.169453,0.489418,'W15_Sugar metabolic state'),('AT1G01020',0.133808,0.429167,'W15_Metabolic stress state'),('AT1G01020',0.175647,0.467061,'R15_Sieve element_responsive'),('AT1G01020',0.186866,0.474054,'R15_Immune active'),('AT1G01020',0.160363,0.459582,'R15_Mesophyll'),('AT1G01020',0.146853,0.44002,'R15_Guard'),('AT1G01020',0.173244,0.444024,'R15_Defense state'),('AT1G01020',0.311909,0.579816,'R15_Stress responsive'),('AT1G01020',0.196584,0.501564,'R15_Phloem Parenchyma'),('AT1G01020',0.210255,0.512069,'R15_Epidermal'),('AT1G01020',0.243431,0.549319,'R15_Vascular'),('AT1G01020',0.165606,0.456905,'R15_Dividing'),('AT1G01020',0.174941,0.481554,'R15_Phloem companion'),('AT1G01020',0.0748146,0.290302,'R15_Metabolic stress state'),('AT1G01020',0.444609,0.67144,'R15_Trichome'),('AT1G01020',0.244449,0.481214,'R15_Myrosin'),('AT1G01020',0.0560844,0.262508,'R15_Hydathode'),('AT1G01020',0.310946,0.669937,'R15_Sugar metabolic state'),('AT1G03987',0,0,'D0_Mesophyll'),('AT1G03987',0,0,'D0_Sieve element_responsive'),('AT1G03987',0,0,'D0_Guard'),('AT1G03987',0,0,'D0_Defense state'),('AT1G03987',0,0,'D0_Epidermal'),('AT1G03987',0,0,'D0_Phloem Parenchyma'),('AT1G03987',0.00114742,0.0383828,'D0_Metabolic stress state'),('AT1G03987',0,0,'D0_Phloem companion'),('AT1G03987',0,0,'D0_Trichome'),('AT1G03987',0,0,'D0_Dividing'),('AT1G03987',0,0,'D0_Stress responsive'),('AT1G03987',0,0,'D0_Sugar metabolic state'),('AT1G03987',0,0,'D0_Immune active'),('AT1G03987',0,0,'D0_Hydathode'),('AT1G03987',0,0,'D0_Vascular'),('AT1G03987',0,0,'D0_Myrosin'),('AT1G03987',0,0,'W0_Vascular'),('AT1G03987',4.34278e-05,0.00665333,'W0_Mesophyll'),('AT1G03987',0.00277755,0.0560351,'W0_Phloem Parenchyma'),('AT1G03987',0,0,'W0_Dividing'),('AT1G03987',0.000286003,0.0171823,'W0_Epidermal'),('AT1G03987',0,0,'W0_Immune active'),('AT1G03987',0,0,'W0_Sieve element_responsive'),('AT1G03987',0,0,'W0_Defense state'),('AT1G03987',0,0,'W0_Guard'),('AT1G03987',0,0,'W0_Phloem companion'),('AT1G03987',0,0,'W0_Stress responsive'),('AT1G03987',0,0,'W0_Myrosin'),('AT1G03987',0,0,'W0_Sugar metabolic state'),('AT1G03987',0,0,'W0_Metabolic stress state'),('AT1G03987',0,0,'W0_Trichome'),('AT1G03987',0,0,'W0_Hydathode'),('AT1G03987',0,0,'W15_Dividing'),('AT1G03987',0,0,'W15_Mesophyll'),('AT1G03987',0,0,'W15_Phloem Parenchyma'),('AT1G03987',0,0,'W15_Immune active'),('AT1G03987',0,0,'W15_Epidermal'),('AT1G03987',0,0,'W15_Hydathode'),('AT1G03987',0,0,'W15_Stress responsive'),('AT1G03987',0,0,'W15_Guard'),('AT1G03987',0,0,'W15_Defense state'),('AT1G03987',0,0,'W15_Myrosin'),('AT1G03987',0,0,'W15_Phloem companion'),('AT1G03987',0,0,'W15_Vascular'),('AT1G03987',0,0,'W15_Trichome'),('AT1G03987',0,0,'W15_Sieve element_responsive'),('AT1G03987',0,0,'W15_Sugar metabolic state'),('AT1G03987',0,0,'W15_Metabolic stress state'),('AT1G03987',0,0,'R15_Sieve element_responsive'),('AT1G03987',0,0,'R15_Immune active'),('AT1G03987',0,0,'R15_Mesophyll'),('AT1G03987',0,0,'R15_Guard'),('AT1G03987',0,0,'R15_Defense state'),('AT1G03987',0,0,'R15_Stress responsive'),('AT1G03987',0,0,'R15_Phloem Parenchyma'),('AT1G03987',0,0,'R15_Epidermal'),('AT1G03987',0,0,'R15_Vascular'),('AT1G03987',0,0,'R15_Dividing'),('AT1G03987',0,0,'R15_Phloem companion'),('AT1G03987',0,0,'R15_Metabolic stress state'),('AT1G03987',0,0,'R15_Trichome'),('AT1G03987',0,0,'R15_Myrosin'),('AT1G03987',0,0,'R15_Hydathode'),('AT1G03987',0,0,'R15_Sugar metabolic state'),('AT1G01030',0.0353245,0.229687,'D0_Mesophyll'),('AT1G01030',0.0508319,0.277014,'D0_Sieve element_responsive'),('AT1G01030',0.0190651,0.161301,'D0_Guard'),('AT1G01030',0.0118205,0.123339,'D0_Defense state'),('AT1G01030',0.0300025,0.210771,'D0_Epidermal'),('AT1G01030',0.0426734,0.23675,'D0_Phloem Parenchyma'),('AT1G01030',0.0197235,0.166614,'D0_Metabolic stress state'),('AT1G01030',0.0639022,0.29236,'D0_Phloem companion'),('AT1G01030',0.0130853,0.126866,'D0_Trichome'),('AT1G01030',0.047025,0.264666,'D0_Dividing'),('AT1G01030',0.019974,0.148379,'D0_Stress responsive'),('AT1G01030',0.0596321,0.294572,'D0_Sugar metabolic state'),('AT1G01030',0.0279946,0.200233,'D0_Immune active'),('AT1G01030',0.0229723,0.164906,'D0_Hydathode'),('AT1G01030',0.0238941,0.183736,'D0_Vascular'),('AT1G01030',0.0188602,0.163193,'D0_Myrosin'),('AT1G01030',0.0506589,0.248747,'W0_Vascular'),('AT1G01030',0.0535061,0.262296,'W0_Mesophyll'),('AT1G01030',0.0644344,0.269666,'W0_Phloem Parenchyma'),('AT1G01030',0.0573775,0.254088,'W0_Dividing'),('AT1G01030',0.0455864,0.235327,'W0_Epidermal'),('AT1G01030',0.0666272,0.283264,'W0_Immune active'),('AT1G01030',0.081567,0.316597,'W0_Sieve element_responsive'),('AT1G01030',0.0378518,0.205771,'W0_Defense state'),('AT1G01030',0.0479881,0.242284,'W0_Guard'),('AT1G01030',0.0681326,0.27496,'W0_Phloem companion'),('AT1G01030',0.0148013,0.111127,'W0_Stress responsive'),('AT1G01030',0.012951,0.105941,'W0_Myrosin'),('AT1G01030',0.0776093,0.29595,'W0_Sugar metabolic state'),('AT1G01030',0.0862373,0.317743,'W0_Metabolic stress state'),('AT1G01030',0.0221264,0.125364,'W0_Trichome'),('AT1G01030',0.0809607,0.331324,'W0_Hydathode'),('AT1G01030',0.0582736,0.292091,'W15_Dividing'),('AT1G01030',0.0424867,0.256081,'W15_Mesophyll'),('AT1G01030',0.0404456,0.244267,'W15_Phloem Parenchyma'),('AT1G01030',0.0617488,0.306099,'W15_Immune active'),('AT1G01030',0.0285649,0.211929,'W15_Epidermal'),('AT1G01030',0.0398324,0.222187,'W15_Hydathode'),('AT1G01030',0.0179485,0.133279,'W15_Stress responsive'),('AT1G01030',0.0289284,0.212602,'W15_Guard'),('AT1G01030',0.0582955,0.318576,'W15_Defense state'),('AT1G01030',0.0146288,0.133528,'W15_Myrosin'),('AT1G01030',0.0751335,0.345199,'W15_Phloem companion'),('AT1G01030',0.0287539,0.216714,'W15_Vascular'),('AT1G01030',0.0558232,0.278164,'W15_Trichome'),('AT1G01030',0.0864941,0.36646,'W15_Sieve element_responsive'),('AT1G01030',0.0486772,0.282022,'W15_Sugar metabolic state'),('AT1G01030',0,0,'W15_Metabolic stress state'),('AT1G01030',0.0678356,0.315183,'R15_Sieve element_responsive'),('AT1G01030',0.0572859,0.279995,'R15_Immune active'),('AT1G01030',0.0738335,0.328985,'R15_Mesophyll'),('AT1G01030',0.0274987,0.209603,'R15_Guard'),('AT1G01030',0.0113628,0.11454,'R15_Defense state'),('AT1G01030',0,0,'R15_Stress responsive'),('AT1G01030',0.0732687,0.321348,'R15_Phloem Parenchyma'),('AT1G01030',0.0302754,0.205867,'R15_Epidermal'),('AT1G01030',0.0228767,0.188712,'R15_Vascular'),('AT1G01030',0.0847586,0.344867,'R15_Dividing'),('AT1G01030',0.0453197,0.237123,'R15_Phloem companion'),('AT1G01030',0.0166944,0.140916,'R15_Metabolic stress state'),('AT1G01030',0.0107673,0.125567,'R15_Trichome'),('AT1G01030',0.0499963,0.255376,'R15_Myrosin'),('AT1G01030',0.00883748,0.122775,'R15_Hydathode'),('AT1G01030',0.0732399,0.338334,'R15_Sugar metabolic state'),('AT1G01040',0.26627,0.586696,'D0_Mesophyll'),('AT1G01040',0.22977,0.541642,'D0_Sieve element_responsive'),('AT1G01040',0.214768,0.532791,'D0_Guard'),('AT1G01040',0.3215,0.581813,'D0_Defense state'),('AT1G01040',0.275436,0.578627,'D0_Epidermal'),('AT1G01040',0.283293,0.582445,'D0_Phloem Parenchyma'),('AT1G01040',0.176631,0.47844,'D0_Metabolic stress state'),('AT1G01040',0.429609,0.698087,'D0_Phloem companion'),('AT1G01040',0.429334,0.621442,'D0_Trichome'),('AT1G01040',0.236295,0.534252,'D0_Dividing'),('AT1G01040',0.449221,0.617253,'D0_Stress responsive'),('AT1G01040',0.247542,0.545561,'D0_Sugar metabolic state'),('AT1G01040',0.301009,0.58898,'D0_Immune active'),('AT1G01040',0.131715,0.411956,'D0_Hydathode'),('AT1G01040',0.283445,0.582871,'D0_Vascular'),('AT1G01040',0.337147,0.582756,'D0_Myrosin'),('AT1G01040',0.353615,0.576752,'W0_Vascular'),('AT1G01040',0.279198,0.551398,'W0_Mesophyll'),('AT1G01040',0.32266,0.545344,'W0_Phloem Parenchyma'),('AT1G01040',0.254801,0.51437,'W0_Dividing'),('AT1G01040',0.321473,0.559856,'W0_Epidermal'),('AT1G01040',0.329472,0.564475,'W0_Immune active'),('AT1G01040',0.290749,0.545056,'W0_Sieve element_responsive'),('AT1G01040',0.361537,0.589919,'W0_Defense state'),('AT1G01040',0.258975,0.50793,'W0_Guard'),('AT1G01040',0.593359,0.707773,'W0_Phloem companion'),('AT1G01040',0.538562,0.644192,'W0_Stress responsive'),('AT1G01040',0.63833,0.671974,'W0_Myrosin'),('AT1G01040',0.251522,0.505119,'W0_Sugar metabolic state'),('AT1G01040',0.271478,0.495255,'W0_Metabolic stress state'),('AT1G01040',0.353374,0.566916,'W0_Trichome'),('AT1G01040',0.129357,0.368898,'W0_Hydathode'),('AT1G01040',0.261757,0.578514,'W15_Dividing'),('AT1G01040',0.299793,0.626391,'W15_Mesophyll'),('AT1G01040',0.32609,0.6403,'W15_Phloem Parenchyma'),('AT1G01040',0.361649,0.658991,'W15_Immune active'),('AT1G01040',0.334428,0.65866,'W15_Epidermal'),('AT1G01040',0.145512,0.438373,'W15_Hydathode'),('AT1G01040',0.603944,0.702496,'W15_Stress responsive'),('AT1G01040',0.25084,0.597081,'W15_Guard'),('AT1G01040',0.388916,0.676985,'W15_Defense state'),('AT1G01040',0.452701,0.676775,'W15_Myrosin'),('AT1G01040',0.727436,0.934372,'W15_Phloem companion'),('AT1G01040',0.369128,0.685149,'W15_Vascular'),('AT1G01040',0.384726,0.66076,'W15_Trichome'),('AT1G01040',0.36487,0.670959,'W15_Sieve element_responsive'),('AT1G01040',0.262194,0.628893,'W15_Sugar metabolic state'),('AT1G01040',0.163967,0.532346,'W15_Metabolic stress state'),('AT1G01040',0.399709,0.660604,'R15_Sieve element_responsive'),('AT1G01040',0.39522,0.65245,'R15_Immune active'),('AT1G01040',0.346795,0.648392,'R15_Mesophyll'),('AT1G01040',0.270957,0.580994,'R15_Guard'),('AT1G01040',0.450637,0.670743,'R15_Defense state'),('AT1G01040',0.493696,0.686676,'R15_Stress responsive'),('AT1G01040',0.346711,0.62819,'R15_Phloem Parenchyma'),('AT1G01040',0.314854,0.609712,'R15_Epidermal'),('AT1G01040',0.351234,0.633163,'R15_Vascular'),('AT1G01040',0.252036,0.577406,'R15_Dividing'),('AT1G01040',0.536328,0.764159,'R15_Phloem companion'),('AT1G01040',0.186631,0.467906,'R15_Metabolic stress state'),('AT1G01040',0.392665,0.647681,'R15_Trichome'),('AT1G01040',0.392207,0.627543,'R15_Myrosin'),('AT1G01040',0.204593,0.519858,'R15_Hydathode'),('AT1G01040',0.516001,0.736866,'R15_Sugar metabolic state'),('AT1G03993',0.000239801,0.0209982,'D0_Mesophyll'),('AT1G03993',0,0,'D0_Sieve element_responsive'),('AT1G03993',0,0,'D0_Guard'),('AT1G03993',0,0,'D0_Defense state'),('AT1G03993',0,0,'D0_Epidermal'),('AT1G03993',0,0,'D0_Phloem Parenchyma'),('AT1G03993',0,0,'D0_Metabolic stress state'),('AT1G03993',0.00122825,0.0388605,'D0_Phloem companion'),('AT1G03993',0,0,'D0_Trichome'),('AT1G03993',0,0,'D0_Dividing'),('AT1G03993',0,0,'D0_Stress responsive'),('AT1G03993',0,0,'D0_Sugar metabolic state'),('AT1G03993',0,0,'D0_Immune active'),('AT1G03993',0,0,'D0_Hydathode'),('AT1G03993',0,0,'D0_Vascular'),('AT1G03993',0,0,'D0_Myrosin'),('AT1G03993',0,0,'W0_Vascular'),('AT1G03993',0.000137099,0.0122178,'W0_Mesophyll'),('AT1G03993',0,0,'W0_Phloem Parenchyma'),('AT1G03993',0,0,'W0_Dividing'),('AT1G03993',0,0,'W0_Epidermal'),('AT1G03993',0,0,'W0_Immune active'),('AT1G03993',0,0,'W0_Sieve element_responsive'),('AT1G03993',0,0,'W0_Defense state'),('AT1G03993',0,0,'W0_Guard'),('AT1G03993',0,0,'W0_Phloem companion'),('AT1G03993',0,0,'W0_Stress responsive'),('AT1G03993',0,0,'W0_Myrosin'),('AT1G03993',0,0,'W0_Sugar metabolic state'),('AT1G03993',0,0,'W0_Metabolic stress state'),('AT1G03993',0,0,'W0_Trichome'),('AT1G03993',0,0,'W0_Hydathode'),('AT1G03993',0.000901372,0.0330697,'W15_Dividing'),('AT1G03993',0.000250723,0.0186275,'W15_Mesophyll'),('AT1G03993',0,0,'W15_Phloem Parenchyma'),('AT1G03993',0,0,'W15_Immune active'),('AT1G03993',0,0,'W15_Epidermal'),('AT1G03993',0,0,'W15_Hydathode'),('AT1G03993',0,0,'W15_Stress responsive'),('AT1G03993',0,0,'W15_Guard'),('AT1G03993',0.00240939,0.0624118,'W15_Defense state'),('AT1G03993',0,0,'W15_Myrosin'),('AT1G03993',0,0,'W15_Phloem companion'),('AT1G03993',0,0,'W15_Vascular'),('AT1G03993',0,0,'W15_Trichome'),('AT1G03993',0,0,'W15_Sieve element_responsive'),('AT1G03993',0,0,'W15_Sugar metabolic state'),('AT1G03993',0,0,'W15_Metabolic stress state'),('AT1G03993',0.00210867,0.0526321,'R15_Sieve element_responsive'),('AT1G03993',0.000267533,0.0175548,'R15_Immune active'),('AT1G03993',0.000159985,0.014841,'R15_Mesophyll'),('AT1G03993',0,0,'R15_Guard'),('AT1G03993',0,0,'R15_Defense state'),('AT1G03993',0,0,'R15_Stress responsive'),('AT1G03993',0,0,'R15_Phloem Parenchyma'),('AT1G03993',0,0,'R15_Epidermal'),('AT1G03993',0,0,'R15_Vascular'),('AT1G03993',0,0,'R15_Dividing'),('AT1G03993',0,0,'R15_Phloem companion'),('AT1G03993',0,0,'R15_Metabolic stress state'),('AT1G03993',0,0,'R15_Trichome'),('AT1G03993',0,0,'R15_Myrosin'),('AT1G03993',0,0,'R15_Hydathode'),('AT1G03993',0,0,'R15_Sugar metabolic state'),('MIR838A',0.000597173,0.0284984,'D0_Mesophyll'),('MIR838A',0,0,'D0_Sieve element_responsive'),('MIR838A',0.00229847,0.0555054,'D0_Guard'),('MIR838A',0.00061451,0.0277072,'D0_Defense state'),('MIR838A',0.000448428,0.0218974,'D0_Epidermal'),('MIR838A',0,0,'D0_Phloem Parenchyma'),('MIR838A',0,0,'D0_Metabolic stress state'),('MIR838A',0,0,'D0_Phloem companion'),('MIR838A',0,0,'D0_Trichome'),('MIR838A',0,0,'D0_Dividing'),('MIR838A',0,0,'D0_Stress responsive'),('MIR838A',0,0,'D0_Sugar metabolic state'),('MIR838A',0.0029707,0.0656395,'D0_Immune active'),('MIR838A',0,0,'D0_Hydathode'),('MIR838A',0.000853911,0.0385018,'D0_Vascular'),('MIR838A',0,0,'D0_Myrosin'),('MIR838A',0,0,'W0_Vascular'),('MIR838A',0.000138364,0.0107039,'W0_Mesophyll'),('MIR838A',0,0,'W0_Phloem Parenchyma'),('MIR838A',0,0,'W0_Dividing'),('MIR838A',0.000302563,0.0181768,'W0_Epidermal'),('MIR838A',0,0,'W0_Immune active'),('MIR838A',0,0,'W0_Sieve element_responsive'),('MIR838A',0,0,'W0_Defense state'),('MIR838A',0,0,'W0_Guard'),('MIR838A',0.00234157,0.0522018,'W0_Phloem companion'),('MIR838A',0,0,'W0_Stress responsive'),('MIR838A',0,0,'W0_Myrosin'),('MIR838A',0,0,'W0_Sugar metabolic state'),('MIR838A',0,0,'W0_Metabolic stress state'),('MIR838A',0,0,'W0_Trichome'),('MIR838A',0,0,'W0_Hydathode'),('MIR838A',0,0,'W15_Dividing'),('MIR838A',0.000272388,0.0199831,'W15_Mesophyll'),('MIR838A',0,0,'W15_Phloem Parenchyma'),('MIR838A',0.000771079,0.0383446,'W15_Immune active'),('MIR838A',0,0,'W15_Epidermal'),('MIR838A',0,0,'W15_Hydathode'),('MIR838A',0,0,'W15_Stress responsive'),('MIR838A',0.00145094,0.0486649,'W15_Guard'),('MIR838A',0,0,'W15_Defense state'),('MIR838A',0,0,'W15_Myrosin'),('MIR838A',0,0,'W15_Phloem companion'),('MIR838A',0.000363795,0.0176206,'W15_Vascular'),('MIR838A',0,0,'W15_Trichome'),('MIR838A',0,0,'W15_Sieve element_responsive'),('MIR838A',0,0,'W15_Sugar metabolic state'),('MIR838A',0,0,'W15_Metabolic stress state'),('MIR838A',0,0,'R15_Sieve element_responsive'),('MIR838A',0,0,'R15_Immune active'),('MIR838A',0,0,'R15_Mesophyll'),('MIR838A',0,0,'R15_Guard'),('MIR838A',0.00142911,0.0404716,'R15_Defense state'),('MIR838A',0,0,'R15_Stress responsive'),('MIR838A',0,0,'R15_Phloem Parenchyma'),('MIR838A',0,0,'R15_Epidermal'),('MIR838A',0,0,'R15_Vascular'),('MIR838A',0,0,'R15_Dividing'),('MIR838A',0,0,'R15_Phloem companion'),('MIR838A',0,0,'R15_Metabolic stress state'),('MIR838A',0.00840981,0.0980743,'R15_Trichome'),('MIR838A',0,0,'R15_Myrosin'),('MIR838A',0,0,'R15_Hydathode'),('MIR838A',0,0,'R15_Sugar metabolic state'),('PPA1',0.244935,0.573442,'D0_Mesophyll'),('PPA1',0.242123,0.563848,'D0_Sieve element_responsive'),('PPA1',0.222434,0.540085,'D0_Guard'),('PPA1',0.206237,0.493253,'D0_Defense state'),('PPA1',0.194756,0.498721,'D0_Epidermal'),('PPA1',0.299605,0.599504,'D0_Phloem Parenchyma'),('PPA1',0.174499,0.476392,'D0_Metabolic stress state'),('PPA1',0.251995,0.552574,'D0_Phloem companion'),('PPA1',0.22969,0.482062,'D0_Trichome'),('PPA1',0.252262,0.554948,'D0_Dividing'),('PPA1',0.386052,0.589697,'D0_Stress responsive'),('PPA1',0.134782,0.403319,'D0_Sugar metabolic state'),('PPA1',0.215925,0.507962,'D0_Immune active'),('PPA1',0.14052,0.434109,'D0_Hydathode'),('PPA1',0.267585,0.573505,'D0_Vascular'),('PPA1',0.391196,0.655005,'D0_Myrosin'),('PPA1',0.316463,0.54935,'W0_Vascular'),('PPA1',0.287988,0.561841,'W0_Mesophyll'),('PPA1',0.379675,0.567368,'W0_Phloem Parenchyma'),('PPA1',0.25512,0.50837,'W0_Dividing'),('PPA1',0.240842,0.495771,'W0_Epidermal'),('PPA1',0.250495,0.484024,'W0_Immune active'),('PPA1',0.324328,0.553043,'W0_Sieve element_responsive'),('PPA1',0.208226,0.457869,'W0_Defense state'),('PPA1',0.29515,0.537985,'W0_Guard'),('PPA1',0.311906,0.541341,'W0_Phloem companion'),('PPA1',0.442088,0.592553,'W0_Stress responsive'),('PPA1',0.314134,0.542919,'W0_Myrosin'),('PPA1',0.238217,0.460575,'W0_Sugar metabolic state'),('PPA1',0.138808,0.39277,'W0_Metabolic stress state'),('PPA1',0.251795,0.483722,'W0_Trichome'),('PPA1',0.334056,0.57506,'W0_Hydathode'),('PPA1',0.193322,0.514288,'W15_Dividing'),('PPA1',0.247411,0.574954,'W15_Mesophyll'),('PPA1',0.266461,0.569725,'W15_Phloem Parenchyma'),('PPA1',0.20048,0.513637,'W15_Immune active'),('PPA1',0.165411,0.486166,'W15_Epidermal'),('PPA1',0.249307,0.578233,'W15_Hydathode'),('PPA1',0.344617,0.565402,'W15_Stress responsive'),('PPA1',0.192612,0.528666,'W15_Guard'),('PPA1',0.171014,0.461723,'W15_Defense state'),('PPA1',0.309008,0.561179,'W15_Myrosin'),('PPA1',0.198943,0.532014,'W15_Phloem companion'),('PPA1',0.240141,0.567655,'W15_Vascular'),('PPA1',0.199828,0.500674,'W15_Trichome'),('PPA1',0.213447,0.537323,'W15_Sieve element_responsive'),('PPA1',0.180024,0.514978,'W15_Sugar metabolic state'),('PPA1',0.316962,0.644495,'W15_Metabolic stress state'),('PPA1',0.173904,0.466063,'R15_Sieve element_responsive'),('PPA1',0.163688,0.44975,'R15_Immune active'),('PPA1',0.203782,0.512351,'R15_Mesophyll'),('PPA1',0.16218,0.454589,'R15_Guard'); diff --git a/config/init.sh b/config/init.sh index 2002159..e899d38 100755 --- a/config/init.sh +++ b/config/init.sh @@ -21,6 +21,7 @@ echo "Successfully bootstrapped simple eFP databases" mysql -u $DB_USER -p$DB_PASS < ./config/databases/annotations_lookup.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_ecotypes.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/arachis.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_NIE_pseudobulk.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/canola_nssnp.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/eplant2.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/eplant_poplar.sql From 498005f1da9518a642236472075c509d423ebeaf Mon Sep 17 00:00:00 2001 From: Steven Qiao Date: Fri, 17 Jul 2026 02:34:18 -0400 Subject: [PATCH 2/4] Added all the correct pseudobulk and umap information --- api/__init__.py | 2 + api/models/efp_schemas.py | 16 +- api/resources/umap_expression.py | 148 ++++++++++++++++++ api/utils/bar_utils.py | 16 +- api/utils/gene_id_utils.py | 16 +- config/BAR_API.cfg | 17 +- .../arabidopsis_NIE_pseudobulk_dump.sql | 63 ++++++++ .../arabidopsis_NIE_pseudobulk_short.sql | 48 ------ config/databases/arabidopsis_NIE_umap.sql | 83 ++++++++++ ...arabidopsis_flower_lee_pseudobulk_dump.sql | 59 +++++++ .../databases/arabidopsis_flower_lee_umap.sql | 83 ++++++++++ .../arabidopsis_root_rs_pseudobulk_dump.sql | 59 +++++++ .../arabidopsis_root_shahan_umap.sql | 83 ++++++++++ ...rabidopsis_seed_martin_pseudobulk_dump.sql | 59 +++++++ .../arabidopsis_seed_martin_umap.sql | 83 ++++++++++ ...rabidopsis_silique_lee_pseudobulk_dump.sql | 59 +++++++ .../arabidopsis_silique_lee_umap.sql | 83 ++++++++++ .../arabidopsis_stem_lee_pseudobulk_dump.sql | 59 +++++++ .../databases/arabidopsis_stem_lee_umap.sql | 83 ++++++++++ config/databases/rice_OW_pseudobulk_dump.sql | 59 +++++++ config/databases/rice_OW_umap.sql | 83 ++++++++++ config/init.sh | 15 +- 22 files changed, 1217 insertions(+), 59 deletions(-) create mode 100644 api/resources/umap_expression.py create mode 100644 config/databases/arabidopsis_NIE_pseudobulk_dump.sql delete mode 100644 config/databases/arabidopsis_NIE_pseudobulk_short.sql create mode 100644 config/databases/arabidopsis_NIE_umap.sql create mode 100644 config/databases/arabidopsis_flower_lee_pseudobulk_dump.sql create mode 100644 config/databases/arabidopsis_flower_lee_umap.sql create mode 100644 config/databases/arabidopsis_root_rs_pseudobulk_dump.sql create mode 100644 config/databases/arabidopsis_root_shahan_umap.sql create mode 100644 config/databases/arabidopsis_seed_martin_pseudobulk_dump.sql create mode 100644 config/databases/arabidopsis_seed_martin_umap.sql create mode 100644 config/databases/arabidopsis_silique_lee_pseudobulk_dump.sql create mode 100644 config/databases/arabidopsis_silique_lee_umap.sql create mode 100644 config/databases/arabidopsis_stem_lee_pseudobulk_dump.sql create mode 100644 config/databases/arabidopsis_stem_lee_umap.sql create mode 100644 config/databases/rice_OW_pseudobulk_dump.sql create mode 100644 config/databases/rice_OW_umap.sql diff --git a/api/__init__.py b/api/__init__.py index 7306218..b402091 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -93,6 +93,7 @@ def create_app(): from api.resources.llama3 import llama3 from api.resources.gene_expression import gene_expression from api.resources.gene_density import gene_density + from api.resources.umap_expression import umap_expression bar_api.add_namespace(gene_information) bar_api.add_namespace(gaia) @@ -110,6 +111,7 @@ def create_app(): bar_api.add_namespace(llama3) bar_api.add_namespace(gene_expression) bar_api.add_namespace(gene_density) + bar_api.add_namespace(umap_expression) bar_api.init_app(bar_app) return bar_app diff --git a/api/models/efp_schemas.py b/api/models/efp_schemas.py index 988f282..012c693 100644 --- a/api/models/efp_schemas.py +++ b/api/models/efp_schemas.py @@ -54,7 +54,6 @@ def _schema(species: str, charset: str = "latin1") -> DatabaseSpec: ("apple", "apple"), ("arabidopsis_ecotypes", "arabidopsis"), ("arachis", "arachis"), - ("arabidopsis_NIE_pseudobulk", "arabidopsis"), ("atgenexp", "arabidopsis"), ("atgenexp_hormone", "arabidopsis"), ("atgenexp_pathogen", "arabidopsis"), @@ -238,6 +237,21 @@ def _schema(species: str, charset: str = "latin1") -> DatabaseSpec: ("wheat_meiosis", "wheat"), ("wheat_root", "wheat"), ("willow", "willow"), + ("arabidopsis_NIE_pseudobulk", "arabidopsis"), + ("rice_OW_pseudobulk", "rice"), + ("rice_OW_umap", "rice"), + ("arabidopsis_stem_lee_pseudobulk", "arabidopsis"), + ("arabidopsis_flower_lee_pseudobulk", "arabidopsis"), + ("arabidopsis_silique_lee_pseudobulk", "arabidopsis"), + ("arabidopsis_root_rs_pseudobulk", "arabidopsis"), + ("arabidopsis_seed_martin_pseudobulk", "arabidopsis"), + ("arabidopsis_NIE_umap", "arabidopsis"), + ("arabidopsis_root_shahan_umap", "arabidopsis"), + ("arabidopsis_seed_martin_umap", "arabidopsis"), + ("arabidopsis_flower_lee_umap", "arabidopsis"), + ("arabidopsis_silique_lee_umap", "arabidopsis"), + ("arabidopsis_stem_lee_umap", "arabidopsis"), + ] # Databases that store Affymetrix/microarray probeset IDs instead of gene identifiers. diff --git a/api/resources/umap_expression.py b/api/resources/umap_expression.py new file mode 100644 index 0000000..0fec911 --- /dev/null +++ b/api/resources/umap_expression.py @@ -0,0 +1,148 @@ +""" +Steven Qiao | BCB330 Project 2025-2026 | University of Toronto + +REST endpoint for per-cell UMAP coordinate + expression queries. + +Routes: GET /umap_expression/umap// + +All gene IDs are validated by species before reaching the query layer. +Expression is stored as a JSON array per gene in umap_expression; UMAP +coordinates are stored once per dataset in umap_coords. The two are +merged server-side by position before returning to the client. +""" +import json + +from flask_restx import Namespace, Resource +from markupsafe import escape +from sqlalchemy import text +from sqlalchemy.exc import SQLAlchemyError +from sqlalchemy.orm import Session + +from api import db +from api.utils.bar_utils import BARUtils +from api.utils.gene_id_utils import ( + CROSS_SPECIES_DATABASES, + DATABASE_SPECIES, + normalize_gene_id, + validate_gene_id, +) + +umap_expression = Namespace( + "UMAP Expression", + description="Per-cell UMAP coordinates and expression data for SUPeR Viewer", + path="/umap_expression", +) + +# Maps UMAP database names to their pseudobulk counterpart species. +# Add a new entry here whenever a new UMAP dump is generated. +UMAP_DATABASE_SPECIES: dict[str, str] = { + "rice_OW_umap": "rice", + "arabidopsis_NIE_umap": "arabidopsis", + "arabidopsis_root_shahan_umap": "arabidopsis", + "arabidopsis_seed_martin_umap": "arabidopsis", + "arabidopsis_flower_lee_umap": "arabidopsis", + "arabidopsis_silique_lee_umap": "arabidopsis", + "arabidopsis_stem_lee_umap": "arabidopsis", +} + + +@umap_expression.route("//") +@umap_expression.doc(description="Retrieve per-cell UMAP coordinates and expression values for a gene.") +@umap_expression.param( + "gene_id", + "Gene ID (e.g. AT1G01010 for Arabidopsis, Os10g0168500 for rice)", + _in="path", + default="Os10g0168500", +) +@umap_expression.param( + "database", + "UMAP database name (e.g. rice_OW_umap, arabidopsis_NIE_umap)", + _in="path", + default="rice_OW_umap", +) +class UMAPExpression(Resource): + def get(self, database, gene_id): + """Retrieve per-cell UMAP coordinates and expression for a gene.""" + database = str(escape(database)) + gene_id = str(escape(gene_id)) + + # 1. Resolve database species + species = UMAP_DATABASE_SPECIES.get(database) + if species is None: + return BARUtils.error_exit( + f"Unknown UMAP database '{database}'. " + f"Available: {', '.join(sorted(UMAP_DATABASE_SPECIES.keys()))}" + ), 400 + + # 2. Validate gene ID format against the expected input species regex + input_species = CROSS_SPECIES_DATABASES.get(database, species) + if not validate_gene_id(gene_id, input_species): + return BARUtils.error_exit(f"Invalid {input_species} gene ID: '{gene_id}'"), 400 + + # 3. Normalise (e.g. strip maize transcript suffix _T##) + gene_id = normalize_gene_id(gene_id, species) + + # 4. Get SQLAlchemy bind engine for this database + engine = db.engines.get(database) + if engine is None: + return BARUtils.error_exit("Database not available"), 503 + + # 5. Query expression JSON array for this gene (single PK lookup) + expr_sql = text( + "SELECT expression FROM umap_expression WHERE gene_id = :gene_id" + ) + + try: + with Session(engine) as session: + row = session.execute(expr_sql, {"gene_id": gene_id}).first() + except SQLAlchemyError as exc: + return BARUtils.error_exit(f"Database query failed: {str(exc)}"), 500 + + # Retry with uppercase (some datasets store IDs in uppercase) + if row is None: + try: + with Session(engine) as session: + row = session.execute(expr_sql, {"gene_id": gene_id.upper()}).first() + except SQLAlchemyError as exc: + return BARUtils.error_exit(f"Database query failed: {str(exc)}"), 500 + + if row is None: + return BARUtils.error_exit("No data found for the given gene"), 404 + + # Parse expression JSON array: [val0, val1, val2, ...] + expr_raw = row.expression + expr_list = json.loads(expr_raw) if isinstance(expr_raw, str) else expr_raw + + # 6. Query all coords ordered by cell_id (same for every gene) + coords_sql = text( + "SELECT cell_id, umap_1, umap_2, cell_type " + "FROM umap_coords ORDER BY cell_id" + ) + + try: + with Session(engine) as session: + coords = session.execute(coords_sql).all() + except SQLAlchemyError as exc: + return BARUtils.error_exit(f"Database query failed: {str(exc)}"), 500 + + # 7. Merge coords + expression by position + data = [ + { + "umap_1": float(c.umap_1), + "umap_2": float(c.umap_2), + "expression": float(expr_list.get(str(c.cell_id), 0.0)), + "cell_type": str(c.cell_type), + } + for i, c in enumerate(coords) + ] + + return BARUtils.success_exit({ + "gene_id": gene_id, + "database": database, + "species": species, + "record_count": len(data), + "data": data, + }) + + +umap_expression.add_resource(UMAPExpression, "//") \ No newline at end of file diff --git a/api/utils/bar_utils.py b/api/utils/bar_utils.py index 89cdf37..adac812 100644 --- a/api/utils/bar_utils.py +++ b/api/utils/bar_utils.py @@ -69,15 +69,19 @@ def is_poplar_gene_valid(gene): def is_rice_gene_valid(gene, isoform_id=False): """This function verifies if rice gene is valid :param gene: - :param isoform_id: True if you want to verifiy isoform ID + :param isoform_id: True if you want to verify isoform ID :return: True if valid """ - if isoform_id and re.search(r"^LOC_Os\d{2}g\d{5}\.\d{1,2}$", gene, re.I): - return True - elif isoform_id is False and re.search(r"^LOC_Os\d{2}g\d{5}$", gene, re.I): - return True + if isoform_id: + return bool( + re.search(r"^LOC_Os\d{2}g\d{5}\.\d{1,2}$", gene, re.I) or + re.search(r"^Os\d{2}g\d{7}\.\d{1,2}$", gene, re.I) + ) else: - return False + return bool( + re.search(r"^LOC_Os\d{2}g\d{5}$", gene, re.I) or + re.search(r"^Os\d{2}g\d{7}$", gene, re.I) + ) @staticmethod def is_tomato_gene_valid(gene, isoform_id=False): diff --git a/api/utils/gene_id_utils.py b/api/utils/gene_id_utils.py index 97defde..edf1193 100644 --- a/api/utils/gene_id_utils.py +++ b/api/utils/gene_id_utils.py @@ -75,7 +75,7 @@ def is_probeset_id(gene_id: str) -> bool: "shoot_apex": "arabidopsis", "silique": "arabidopsis", "single_cell": "arabidopsis", - 'arabidopsis_NIE_pseudobulk': 'arabidopsis', + # Actinidia (kiwifruit) "actinidia_bud_development": "actinidia", "actinidia_flower_fruit_development": "actinidia", @@ -286,6 +286,20 @@ def is_probeset_id(gene_id: str) -> bool: "willow": "willow", # Test "sample_data": "arabidopsis", + 'arabidopsis_NIE_pseudobulk': "arabidopsis", + "arabidopsis_stem_lee_pseudobulk": "arabidopsis", + "arabidopsis_flower_lee_pseudobulk": "arabidopsis", + "arabidopsis_silique_lee_pseudobulk": "arabidopsis", + "arabidopsis_root_rs_pseudobulk": "arabidopsis", + "arabidopsis_seed_martin_pseudobulk": "arabidopsis", + "rice_OW_pseudobulk": "rice", + "rice_OW_umap": "rice", + "arabidopsis_NIE_umap": "arabidopsis", + "arabidopsis_root_shahan_umap": "arabidopsis", + "arabidopsis_seed_martin_umap": "arabidopsis", + "arabidopsis_flower_lee_umap": "arabidopsis", + "arabidopsis_silique_lee_umap": "arabidopsis", + "arabidopsis_stem_lee_umap": "arabidopsis", } # fmt: on diff --git a/config/BAR_API.cfg b/config/BAR_API.cfg index 6b7d012..a9b7392 100755 --- a/config/BAR_API.cfg +++ b/config/BAR_API.cfg @@ -13,7 +13,6 @@ SQLALCHEMY_BINDS = { 'annotations_lookup': 'mysql://root:root@localhost/annotations_lookup', 'arabidopsis_ecotypes': 'mysql://root:root@localhost/arabidopsis_ecotypes', 'arachis': 'mysql://root:root@localhost/arachis', - 'arabidopsis_NIE_pseudobulk': 'mysql://root:root@localhost/arabidopsis_NIE_pseudobulk', 'cannabis': 'mysql://root:root@localhost/cannabis', 'canola_nssnp' : 'mysql://root:root@localhost/canola_nssnp', 'dna_damage': 'mysql://root:root@localhost/dna_damage', @@ -44,5 +43,19 @@ SQLALCHEMY_BINDS = { 'tomato_nssnp' : 'mysql://root:root@localhost/tomato_nssnp', 'tomato_sequence' : 'mysql://root:root@localhost/tomato_sequence', 'triphysaria' : 'mysql://root:root@localhost/triphysaria', - 'gaia' : 'mysql://root:root@localhost/gaia' + 'gaia' : 'mysql://root:root@localhost/gaia', + 'rice_OW_pseudobulk': 'mysql://root:root@localhost/rice_OW_pseudobulk', + 'arabidopsis_NIE_pseudobulk': 'mysql://root:root@localhost/arabidopsis_NIE_pseudobulk', + 'arabidopsis_stem_lee_pseudobulk': 'mysql://root:root@localhost/arabidopsis_stem_lee_pseudobulk', + 'arabidopsis_flower_lee_pseudobulk': 'mysql://root:root@localhost/arabidopsis_flower_lee_pseudobulk', + 'arabidopsis_silique_lee_pseudobulk': 'mysql://root:root@localhost/arabidopsis_silique_lee_pseudobulk', + 'arabidopsis_root_rs_pseudobulk': 'mysql://root:root@localhost/arabidopsis_root_rs_pseudobulk', + 'arabidopsis_seed_martin_pseudobulk': 'mysql://root:root@localhost/arabidopsis_seed_martin_pseudobulk', + 'rice_OW_umap': 'mysql://root:root@localhost/rice_OW_umap', + 'arabidopsis_NIE_umap': 'mysql://root:root@localhost/arabidopsis_NIE_umap', + 'arabidopsis_root_shahan_umap': 'mysql://root:root@localhost/arabidopsis_root_shahan_umap', + 'arabidopsis_seed_martin_umap': 'mysql://root:root@localhost/arabidopsis_seed_martin_umap', + 'arabidopsis_flower_lee_umap': 'mysql://root:root@localhost/arabidopsis_flower_lee_umap', + 'arabidopsis_silique_lee_umap': 'mysql://root:root@localhost/arabidopsis_silique_lee_umap', + 'arabidopsis_stem_lee_umap': 'mysql://root:root@localhost/arabidopsis_stem_lee_umap' } diff --git a/config/databases/arabidopsis_NIE_pseudobulk_dump.sql b/config/databases/arabidopsis_NIE_pseudobulk_dump.sql new file mode 100644 index 0000000..6ad7a21 --- /dev/null +++ b/config/databases/arabidopsis_NIE_pseudobulk_dump.sql @@ -0,0 +1,63 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_NIE_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_NIE_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_NIE_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_NIE_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0346533,0.224356,'D0_Mesophyll'),('AT1G01010',0.0251518,0.185286,'D0_Sieve element_responsive'),('AT1G01010',0.0297745,0.203837,'D0_Guard'),('AT1G01010',0.0550332,0.260401,'D0_Defense state'),('AT1G01010',0.0424581,0.239094,'D0_Epidermal'),('AT1G01010',0.0163655,0.146177,'D0_Phloem Parenchyma'),('AT1G01010',0.0389615,0.234467,'D0_Metabolic stress state'),('AT1G01010',0.0292404,0.198967,'D0_Phloem companion'),('AT1G01010',0.0510094,0.226118,'D0_Trichome'),('AT1G01010',0.027103,0.181704,'D0_Dividing'),('AT1G01010',0.0692417,0.276578,'D0_Stress responsive'),('AT1G01010',0.0110158,0.119154,'D0_Sugar metabolic state'),('AT1G01010',0.0565404,0.272046,'D0_Immune active'),('AT1G01010',0.0513775,0.273271,'D0_Hydathode'),('AT1G01010',0.045102,0.247266,'D0_Vascular'),('AT1G01010',0.0256331,0.169289,'D0_Myrosin'),('AT1G01010',0.0274436,0.177235,'W0_Vascular'),('AT1G01010',0.024174,0.172252,'W0_Mesophyll'),('AT1G01010',0.0213485,0.15354,'W0_Phloem Parenchyma'),('AT1G01010',0.0286998,0.178188,'W0_Dividing'),('AT1G01010',0.0278313,0.182473,'W0_Epidermal'),('AT1G01010',0.0563447,0.251333,'W0_Immune active'),('AT1G01010',0.0343054,0.201204,'W0_Sieve element_responsive'),('AT1G01010',0.0574457,0.253535,'W0_Defense state'),('AT1G01010',0.0136855,0.12117,'W0_Guard'),('AT1G01010',0.0272221,0.169833,'W0_Phloem companion'),('AT1G01010',0.0715313,0.271057,'W0_Stress responsive'),('AT1G01010',0.00820466,0.0673068,'W0_Myrosin'),('AT1G01010',0.0393423,0.199799,'W0_Sugar metabolic state'),('AT1G01010',0.0339956,0.217678,'W0_Metabolic stress state'),('AT1G01010',0.0214199,0.133693,'W0_Trichome'),('AT1G01010',0.0571251,0.236552,'W0_Hydathode'),('AT1G01010',0.0422542,0.250415,'W15_Dividing'),('AT1G01010',0.0446,0.254963,'W15_Mesophyll'),('AT1G01010',0.037824,0.236808,'W15_Phloem Parenchyma'),('AT1G01010',0.0420744,0.251218,'W15_Immune active'),('AT1G01010',0.0387755,0.241218,'W15_Epidermal'),('AT1G01010',0.104241,0.43291,'W15_Hydathode'),('AT1G01010',0.104467,0.324257,'W15_Stress responsive'),('AT1G01010',0.03282,0.228891,'W15_Guard'),('AT1G01010',0.0783275,0.325689,'W15_Defense state'),('AT1G01010',0.0205945,0.15169,'W15_Myrosin'),('AT1G01010',0.0290853,0.203305,'W15_Phloem companion'),('AT1G01010',0.0409241,0.246531,'W15_Vascular'),('AT1G01010',0,0,'W15_Trichome'),('AT1G01010',0.0304135,0.206024,'W15_Sieve element_responsive'),('AT1G01010',0,0,'W15_Sugar metabolic state'),('AT1G01010',0.0573618,0.262866,'W15_Metabolic stress state'),('AT1G01010',0.0187317,0.156752,'R15_Sieve element_responsive'),('AT1G01010',0.0287312,0.191696,'R15_Immune active'),('AT1G01010',0.0329913,0.213788,'R15_Mesophyll'),('AT1G01010',0.0130775,0.14382,'R15_Guard'),('AT1G01010',0.0547408,0.257222,'R15_Defense state'),('AT1G01010',0.0541722,0.243631,'R15_Stress responsive'),('AT1G01010',0.02531,0.180358,'R15_Phloem Parenchyma'),('AT1G01010',0.0400045,0.239473,'R15_Epidermal'),('AT1G01010',0.0300884,0.196556,'R15_Vascular'),('AT1G01010',0.0282214,0.199286,'R15_Dividing'),('AT1G01010',0.034919,0.214859,'R15_Phloem companion'),('AT1G01010',0.018792,0.157063,'R15_Metabolic stress state'),('AT1G01010',0.0528136,0.261553,'R15_Trichome'),('AT1G01010',0,0,'R15_Myrosin'),('AT1G01010',0.0564275,0.281679,'R15_Hydathode'),('AT1G01010',0.0462055,0.222434,'R15_Sugar metabolic state'); +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0242853,0.114475,'W0_Phloem average'); +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0228029,0.123446,'D0_Phloem average'); +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0301145,0.140262,'R15_Phloem average'); +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0334546,0.156053,'W15_Phloem average'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:32:31 diff --git a/config/databases/arabidopsis_NIE_pseudobulk_short.sql b/config/databases/arabidopsis_NIE_pseudobulk_short.sql deleted file mode 100644 index 35bcfa6..0000000 --- a/config/databases/arabidopsis_NIE_pseudobulk_short.sql +++ /dev/null @@ -1,48 +0,0 @@ --- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) --- --- Host: localhost Database: arabidopsis_NIE_pseudobulk --- ------------------------------------------------------ --- Server version 9.4.0 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!50503 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Current Database: `arabidopsis_NIE_pseudobulk` --- - -CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_NIE_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; - -USE `arabidopsis_NIE_pseudobulk`; - --- --- Table structure for table `sample_data` --- - -DROP TABLE IF EXISTS `sample_data`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `sample_data` ( - `data_probeset_id` varchar(16) NOT NULL, - `data_signal` float DEFAULT '0', - `data_signal_std` float DEFAULT '0', - `data_bot_id` varchar(64) NOT NULL, - KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `sample_data` --- - -LOCK TABLES `sample_data` WRITE; -/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; -INSERT INTO `sample_data` VALUES ('AT1G01010',0.0346533,0.224356,'D0_Mesophyll'),('AT1G01010',0.0251518,0.185286,'D0_Sieve element_responsive'),('AT1G01010',0.0297745,0.203837,'D0_Guard'),('AT1G01010',0.0550332,0.260401,'D0_Defense state'),('AT1G01010',0.0424581,0.239094,'D0_Epidermal'),('AT1G01010',0.0163655,0.146177,'D0_Phloem Parenchyma'),('AT1G01010',0.0389615,0.234467,'D0_Metabolic stress state'),('AT1G01010',0.0292404,0.198967,'D0_Phloem companion'),('AT1G01010',0.0510094,0.226118,'D0_Trichome'),('AT1G01010',0.027103,0.181704,'D0_Dividing'),('AT1G01010',0.0692417,0.276578,'D0_Stress responsive'),('AT1G01010',0.0110158,0.119154,'D0_Sugar metabolic state'),('AT1G01010',0.0565404,0.272046,'D0_Immune active'),('AT1G01010',0.0513775,0.273271,'D0_Hydathode'),('AT1G01010',0.045102,0.247266,'D0_Vascular'),('AT1G01010',0.0256331,0.169289,'D0_Myrosin'),('AT1G01010',0.0274436,0.177235,'W0_Vascular'),('AT1G01010',0.024174,0.172252,'W0_Mesophyll'),('AT1G01010',0.0213485,0.15354,'W0_Phloem Parenchyma'),('AT1G01010',0.0286998,0.178188,'W0_Dividing'),('AT1G01010',0.0278313,0.182473,'W0_Epidermal'),('AT1G01010',0.0563447,0.251333,'W0_Immune active'),('AT1G01010',0.0343054,0.201204,'W0_Sieve element_responsive'),('AT1G01010',0.0574457,0.253535,'W0_Defense state'),('AT1G01010',0.0136855,0.12117,'W0_Guard'),('AT1G01010',0.0272221,0.169833,'W0_Phloem companion'),('AT1G01010',0.0715313,0.271057,'W0_Stress responsive'),('AT1G01010',0.00820466,0.0673068,'W0_Myrosin'),('AT1G01010',0.0393423,0.199799,'W0_Sugar metabolic state'),('AT1G01010',0.0339956,0.217678,'W0_Metabolic stress state'),('AT1G01010',0.0214199,0.133693,'W0_Trichome'),('AT1G01010',0.0571251,0.236552,'W0_Hydathode'),('AT1G01010',0.0422542,0.250415,'W15_Dividing'),('AT1G01010',0.0446,0.254963,'W15_Mesophyll'),('AT1G01010',0.037824,0.236808,'W15_Phloem Parenchyma'),('AT1G01010',0.0420744,0.251218,'W15_Immune active'),('AT1G01010',0.0387755,0.241218,'W15_Epidermal'),('AT1G01010',0.104241,0.43291,'W15_Hydathode'),('AT1G01010',0.104467,0.324257,'W15_Stress responsive'),('AT1G01010',0.03282,0.228891,'W15_Guard'),('AT1G01010',0.0783275,0.325689,'W15_Defense state'),('AT1G01010',0.0205945,0.15169,'W15_Myrosin'),('AT1G01010',0.0290853,0.203305,'W15_Phloem companion'),('AT1G01010',0.0409241,0.246531,'W15_Vascular'),('AT1G01010',0,0,'W15_Trichome'),('AT1G01010',0.0304135,0.206024,'W15_Sieve element_responsive'),('AT1G01010',0,0,'W15_Sugar metabolic state'),('AT1G01010',0.0573618,0.262866,'W15_Metabolic stress state'),('AT1G01010',0.0187317,0.156752,'R15_Sieve element_responsive'),('AT1G01010',0.0287312,0.191696,'R15_Immune active'),('AT1G01010',0.0329913,0.213788,'R15_Mesophyll'),('AT1G01010',0.0130775,0.14382,'R15_Guard'),('AT1G01010',0.0547408,0.257222,'R15_Defense state'),('AT1G01010',0.0541722,0.243631,'R15_Stress responsive'),('AT1G01010',0.02531,0.180358,'R15_Phloem Parenchyma'),('AT1G01010',0.0400045,0.239473,'R15_Epidermal'),('AT1G01010',0.0300884,0.196556,'R15_Vascular'),('AT1G01010',0.0282214,0.199286,'R15_Dividing'),('AT1G01010',0.034919,0.214859,'R15_Phloem companion'),('AT1G01010',0.018792,0.157063,'R15_Metabolic stress state'),('AT1G01010',0.0528136,0.261553,'R15_Trichome'),('AT1G01010',0,0,'R15_Myrosin'),('AT1G01010',0.0564275,0.281679,'R15_Hydathode'),('AT1G01010',0.0462055,0.222434,'R15_Sugar metabolic state'),('AT1G01020',0.161521,0.468897,'D0_Mesophyll'),('AT1G01020',0.163187,0.45825,'D0_Sieve element_responsive'),('AT1G01020',0.134235,0.419186,'D0_Guard'),('AT1G01020',0.1566,0.425135,'D0_Defense state'),('AT1G01020',0.178376,0.474155,'D0_Epidermal'),('AT1G01020',0.183195,0.479446,'D0_Phloem Parenchyma'),('AT1G01020',0.126,0.40608,'D0_Metabolic stress state'),('AT1G01020',0.17628,0.471908,'D0_Phloem companion'),('AT1G01020',0.394158,0.604338,'D0_Trichome'),('AT1G01020',0.217422,0.512643,'D0_Dividing'),('AT1G01020',0.262456,0.505874,'D0_Stress responsive'),('AT1G01020',0.213638,0.556462,'D0_Sugar metabolic state'),('AT1G01020',0.15074,0.444812,'D0_Immune active'),('AT1G01020',0.0888861,0.343135,'D0_Hydathode'),('AT1G01020',0.21508,0.520128,'D0_Vascular'),('AT1G01020',0.354521,0.627952,'D0_Myrosin'),('AT1G01020',0.327374,0.552174,'W0_Vascular'),('AT1G01020',0.254744,0.527378,'W0_Mesophyll'),('AT1G01020',0.38402,0.592769,'W0_Phloem Parenchyma'),('AT1G01020',0.254597,0.512452,'W0_Dividing'),('AT1G01020',0.258597,0.509531,'W0_Epidermal'),('AT1G01020',0.302626,0.542726,'W0_Immune active'),('AT1G01020',0.295859,0.533784,'W0_Sieve element_responsive'),('AT1G01020',0.277949,0.514132,'W0_Defense state'),('AT1G01020',0.227612,0.47704,'W0_Guard'),('AT1G01020',0.26905,0.510273,'W0_Phloem companion'),('AT1G01020',0.379981,0.546034,'W0_Stress responsive'),('AT1G01020',0.526001,0.618351,'W0_Myrosin'),('AT1G01020',0.244849,0.514526,'W0_Sugar metabolic state'),('AT1G01020',0.279799,0.556768,'W0_Metabolic stress state'),('AT1G01020',0.368836,0.558259,'W0_Trichome'),('AT1G01020',0.290903,0.544376,'W0_Hydathode'),('AT1G01020',0.268046,0.598221,'W15_Dividing'),('AT1G01020',0.221643,0.544871,'W15_Mesophyll'),('AT1G01020',0.263539,0.582182,'W15_Phloem Parenchyma'),('AT1G01020',0.265968,0.589934,'W15_Immune active'),('AT1G01020',0.25028,0.580544,'W15_Epidermal'),('AT1G01020',0.118011,0.401426,'W15_Hydathode'),('AT1G01020',0.33255,0.548801,'W15_Stress responsive'),('AT1G01020',0.196459,0.530506,'W15_Guard'),('AT1G01020',0.219787,0.522935,'W15_Defense state'),('AT1G01020',0.536151,0.713785,'W15_Myrosin'),('AT1G01020',0.253037,0.5803,'W15_Phloem companion'),('AT1G01020',0.292718,0.610683,'W15_Vascular'),('AT1G01020',0.406137,0.637708,'W15_Trichome'),('AT1G01020',0.296812,0.622277,'W15_Sieve element_responsive'),('AT1G01020',0.169453,0.489418,'W15_Sugar metabolic state'),('AT1G01020',0.133808,0.429167,'W15_Metabolic stress state'),('AT1G01020',0.175647,0.467061,'R15_Sieve element_responsive'),('AT1G01020',0.186866,0.474054,'R15_Immune active'),('AT1G01020',0.160363,0.459582,'R15_Mesophyll'),('AT1G01020',0.146853,0.44002,'R15_Guard'),('AT1G01020',0.173244,0.444024,'R15_Defense state'),('AT1G01020',0.311909,0.579816,'R15_Stress responsive'),('AT1G01020',0.196584,0.501564,'R15_Phloem Parenchyma'),('AT1G01020',0.210255,0.512069,'R15_Epidermal'),('AT1G01020',0.243431,0.549319,'R15_Vascular'),('AT1G01020',0.165606,0.456905,'R15_Dividing'),('AT1G01020',0.174941,0.481554,'R15_Phloem companion'),('AT1G01020',0.0748146,0.290302,'R15_Metabolic stress state'),('AT1G01020',0.444609,0.67144,'R15_Trichome'),('AT1G01020',0.244449,0.481214,'R15_Myrosin'),('AT1G01020',0.0560844,0.262508,'R15_Hydathode'),('AT1G01020',0.310946,0.669937,'R15_Sugar metabolic state'),('AT1G03987',0,0,'D0_Mesophyll'),('AT1G03987',0,0,'D0_Sieve element_responsive'),('AT1G03987',0,0,'D0_Guard'),('AT1G03987',0,0,'D0_Defense state'),('AT1G03987',0,0,'D0_Epidermal'),('AT1G03987',0,0,'D0_Phloem Parenchyma'),('AT1G03987',0.00114742,0.0383828,'D0_Metabolic stress state'),('AT1G03987',0,0,'D0_Phloem companion'),('AT1G03987',0,0,'D0_Trichome'),('AT1G03987',0,0,'D0_Dividing'),('AT1G03987',0,0,'D0_Stress responsive'),('AT1G03987',0,0,'D0_Sugar metabolic state'),('AT1G03987',0,0,'D0_Immune active'),('AT1G03987',0,0,'D0_Hydathode'),('AT1G03987',0,0,'D0_Vascular'),('AT1G03987',0,0,'D0_Myrosin'),('AT1G03987',0,0,'W0_Vascular'),('AT1G03987',4.34278e-05,0.00665333,'W0_Mesophyll'),('AT1G03987',0.00277755,0.0560351,'W0_Phloem Parenchyma'),('AT1G03987',0,0,'W0_Dividing'),('AT1G03987',0.000286003,0.0171823,'W0_Epidermal'),('AT1G03987',0,0,'W0_Immune active'),('AT1G03987',0,0,'W0_Sieve element_responsive'),('AT1G03987',0,0,'W0_Defense state'),('AT1G03987',0,0,'W0_Guard'),('AT1G03987',0,0,'W0_Phloem companion'),('AT1G03987',0,0,'W0_Stress responsive'),('AT1G03987',0,0,'W0_Myrosin'),('AT1G03987',0,0,'W0_Sugar metabolic state'),('AT1G03987',0,0,'W0_Metabolic stress state'),('AT1G03987',0,0,'W0_Trichome'),('AT1G03987',0,0,'W0_Hydathode'),('AT1G03987',0,0,'W15_Dividing'),('AT1G03987',0,0,'W15_Mesophyll'),('AT1G03987',0,0,'W15_Phloem Parenchyma'),('AT1G03987',0,0,'W15_Immune active'),('AT1G03987',0,0,'W15_Epidermal'),('AT1G03987',0,0,'W15_Hydathode'),('AT1G03987',0,0,'W15_Stress responsive'),('AT1G03987',0,0,'W15_Guard'),('AT1G03987',0,0,'W15_Defense state'),('AT1G03987',0,0,'W15_Myrosin'),('AT1G03987',0,0,'W15_Phloem companion'),('AT1G03987',0,0,'W15_Vascular'),('AT1G03987',0,0,'W15_Trichome'),('AT1G03987',0,0,'W15_Sieve element_responsive'),('AT1G03987',0,0,'W15_Sugar metabolic state'),('AT1G03987',0,0,'W15_Metabolic stress state'),('AT1G03987',0,0,'R15_Sieve element_responsive'),('AT1G03987',0,0,'R15_Immune active'),('AT1G03987',0,0,'R15_Mesophyll'),('AT1G03987',0,0,'R15_Guard'),('AT1G03987',0,0,'R15_Defense state'),('AT1G03987',0,0,'R15_Stress responsive'),('AT1G03987',0,0,'R15_Phloem Parenchyma'),('AT1G03987',0,0,'R15_Epidermal'),('AT1G03987',0,0,'R15_Vascular'),('AT1G03987',0,0,'R15_Dividing'),('AT1G03987',0,0,'R15_Phloem companion'),('AT1G03987',0,0,'R15_Metabolic stress state'),('AT1G03987',0,0,'R15_Trichome'),('AT1G03987',0,0,'R15_Myrosin'),('AT1G03987',0,0,'R15_Hydathode'),('AT1G03987',0,0,'R15_Sugar metabolic state'),('AT1G01030',0.0353245,0.229687,'D0_Mesophyll'),('AT1G01030',0.0508319,0.277014,'D0_Sieve element_responsive'),('AT1G01030',0.0190651,0.161301,'D0_Guard'),('AT1G01030',0.0118205,0.123339,'D0_Defense state'),('AT1G01030',0.0300025,0.210771,'D0_Epidermal'),('AT1G01030',0.0426734,0.23675,'D0_Phloem Parenchyma'),('AT1G01030',0.0197235,0.166614,'D0_Metabolic stress state'),('AT1G01030',0.0639022,0.29236,'D0_Phloem companion'),('AT1G01030',0.0130853,0.126866,'D0_Trichome'),('AT1G01030',0.047025,0.264666,'D0_Dividing'),('AT1G01030',0.019974,0.148379,'D0_Stress responsive'),('AT1G01030',0.0596321,0.294572,'D0_Sugar metabolic state'),('AT1G01030',0.0279946,0.200233,'D0_Immune active'),('AT1G01030',0.0229723,0.164906,'D0_Hydathode'),('AT1G01030',0.0238941,0.183736,'D0_Vascular'),('AT1G01030',0.0188602,0.163193,'D0_Myrosin'),('AT1G01030',0.0506589,0.248747,'W0_Vascular'),('AT1G01030',0.0535061,0.262296,'W0_Mesophyll'),('AT1G01030',0.0644344,0.269666,'W0_Phloem Parenchyma'),('AT1G01030',0.0573775,0.254088,'W0_Dividing'),('AT1G01030',0.0455864,0.235327,'W0_Epidermal'),('AT1G01030',0.0666272,0.283264,'W0_Immune active'),('AT1G01030',0.081567,0.316597,'W0_Sieve element_responsive'),('AT1G01030',0.0378518,0.205771,'W0_Defense state'),('AT1G01030',0.0479881,0.242284,'W0_Guard'),('AT1G01030',0.0681326,0.27496,'W0_Phloem companion'),('AT1G01030',0.0148013,0.111127,'W0_Stress responsive'),('AT1G01030',0.012951,0.105941,'W0_Myrosin'),('AT1G01030',0.0776093,0.29595,'W0_Sugar metabolic state'),('AT1G01030',0.0862373,0.317743,'W0_Metabolic stress state'),('AT1G01030',0.0221264,0.125364,'W0_Trichome'),('AT1G01030',0.0809607,0.331324,'W0_Hydathode'),('AT1G01030',0.0582736,0.292091,'W15_Dividing'),('AT1G01030',0.0424867,0.256081,'W15_Mesophyll'),('AT1G01030',0.0404456,0.244267,'W15_Phloem Parenchyma'),('AT1G01030',0.0617488,0.306099,'W15_Immune active'),('AT1G01030',0.0285649,0.211929,'W15_Epidermal'),('AT1G01030',0.0398324,0.222187,'W15_Hydathode'),('AT1G01030',0.0179485,0.133279,'W15_Stress responsive'),('AT1G01030',0.0289284,0.212602,'W15_Guard'),('AT1G01030',0.0582955,0.318576,'W15_Defense state'),('AT1G01030',0.0146288,0.133528,'W15_Myrosin'),('AT1G01030',0.0751335,0.345199,'W15_Phloem companion'),('AT1G01030',0.0287539,0.216714,'W15_Vascular'),('AT1G01030',0.0558232,0.278164,'W15_Trichome'),('AT1G01030',0.0864941,0.36646,'W15_Sieve element_responsive'),('AT1G01030',0.0486772,0.282022,'W15_Sugar metabolic state'),('AT1G01030',0,0,'W15_Metabolic stress state'),('AT1G01030',0.0678356,0.315183,'R15_Sieve element_responsive'),('AT1G01030',0.0572859,0.279995,'R15_Immune active'),('AT1G01030',0.0738335,0.328985,'R15_Mesophyll'),('AT1G01030',0.0274987,0.209603,'R15_Guard'),('AT1G01030',0.0113628,0.11454,'R15_Defense state'),('AT1G01030',0,0,'R15_Stress responsive'),('AT1G01030',0.0732687,0.321348,'R15_Phloem Parenchyma'),('AT1G01030',0.0302754,0.205867,'R15_Epidermal'),('AT1G01030',0.0228767,0.188712,'R15_Vascular'),('AT1G01030',0.0847586,0.344867,'R15_Dividing'),('AT1G01030',0.0453197,0.237123,'R15_Phloem companion'),('AT1G01030',0.0166944,0.140916,'R15_Metabolic stress state'),('AT1G01030',0.0107673,0.125567,'R15_Trichome'),('AT1G01030',0.0499963,0.255376,'R15_Myrosin'),('AT1G01030',0.00883748,0.122775,'R15_Hydathode'),('AT1G01030',0.0732399,0.338334,'R15_Sugar metabolic state'),('AT1G01040',0.26627,0.586696,'D0_Mesophyll'),('AT1G01040',0.22977,0.541642,'D0_Sieve element_responsive'),('AT1G01040',0.214768,0.532791,'D0_Guard'),('AT1G01040',0.3215,0.581813,'D0_Defense state'),('AT1G01040',0.275436,0.578627,'D0_Epidermal'),('AT1G01040',0.283293,0.582445,'D0_Phloem Parenchyma'),('AT1G01040',0.176631,0.47844,'D0_Metabolic stress state'),('AT1G01040',0.429609,0.698087,'D0_Phloem companion'),('AT1G01040',0.429334,0.621442,'D0_Trichome'),('AT1G01040',0.236295,0.534252,'D0_Dividing'),('AT1G01040',0.449221,0.617253,'D0_Stress responsive'),('AT1G01040',0.247542,0.545561,'D0_Sugar metabolic state'),('AT1G01040',0.301009,0.58898,'D0_Immune active'),('AT1G01040',0.131715,0.411956,'D0_Hydathode'),('AT1G01040',0.283445,0.582871,'D0_Vascular'),('AT1G01040',0.337147,0.582756,'D0_Myrosin'),('AT1G01040',0.353615,0.576752,'W0_Vascular'),('AT1G01040',0.279198,0.551398,'W0_Mesophyll'),('AT1G01040',0.32266,0.545344,'W0_Phloem Parenchyma'),('AT1G01040',0.254801,0.51437,'W0_Dividing'),('AT1G01040',0.321473,0.559856,'W0_Epidermal'),('AT1G01040',0.329472,0.564475,'W0_Immune active'),('AT1G01040',0.290749,0.545056,'W0_Sieve element_responsive'),('AT1G01040',0.361537,0.589919,'W0_Defense state'),('AT1G01040',0.258975,0.50793,'W0_Guard'),('AT1G01040',0.593359,0.707773,'W0_Phloem companion'),('AT1G01040',0.538562,0.644192,'W0_Stress responsive'),('AT1G01040',0.63833,0.671974,'W0_Myrosin'),('AT1G01040',0.251522,0.505119,'W0_Sugar metabolic state'),('AT1G01040',0.271478,0.495255,'W0_Metabolic stress state'),('AT1G01040',0.353374,0.566916,'W0_Trichome'),('AT1G01040',0.129357,0.368898,'W0_Hydathode'),('AT1G01040',0.261757,0.578514,'W15_Dividing'),('AT1G01040',0.299793,0.626391,'W15_Mesophyll'),('AT1G01040',0.32609,0.6403,'W15_Phloem Parenchyma'),('AT1G01040',0.361649,0.658991,'W15_Immune active'),('AT1G01040',0.334428,0.65866,'W15_Epidermal'),('AT1G01040',0.145512,0.438373,'W15_Hydathode'),('AT1G01040',0.603944,0.702496,'W15_Stress responsive'),('AT1G01040',0.25084,0.597081,'W15_Guard'),('AT1G01040',0.388916,0.676985,'W15_Defense state'),('AT1G01040',0.452701,0.676775,'W15_Myrosin'),('AT1G01040',0.727436,0.934372,'W15_Phloem companion'),('AT1G01040',0.369128,0.685149,'W15_Vascular'),('AT1G01040',0.384726,0.66076,'W15_Trichome'),('AT1G01040',0.36487,0.670959,'W15_Sieve element_responsive'),('AT1G01040',0.262194,0.628893,'W15_Sugar metabolic state'),('AT1G01040',0.163967,0.532346,'W15_Metabolic stress state'),('AT1G01040',0.399709,0.660604,'R15_Sieve element_responsive'),('AT1G01040',0.39522,0.65245,'R15_Immune active'),('AT1G01040',0.346795,0.648392,'R15_Mesophyll'),('AT1G01040',0.270957,0.580994,'R15_Guard'),('AT1G01040',0.450637,0.670743,'R15_Defense state'),('AT1G01040',0.493696,0.686676,'R15_Stress responsive'),('AT1G01040',0.346711,0.62819,'R15_Phloem Parenchyma'),('AT1G01040',0.314854,0.609712,'R15_Epidermal'),('AT1G01040',0.351234,0.633163,'R15_Vascular'),('AT1G01040',0.252036,0.577406,'R15_Dividing'),('AT1G01040',0.536328,0.764159,'R15_Phloem companion'),('AT1G01040',0.186631,0.467906,'R15_Metabolic stress state'),('AT1G01040',0.392665,0.647681,'R15_Trichome'),('AT1G01040',0.392207,0.627543,'R15_Myrosin'),('AT1G01040',0.204593,0.519858,'R15_Hydathode'),('AT1G01040',0.516001,0.736866,'R15_Sugar metabolic state'),('AT1G03993',0.000239801,0.0209982,'D0_Mesophyll'),('AT1G03993',0,0,'D0_Sieve element_responsive'),('AT1G03993',0,0,'D0_Guard'),('AT1G03993',0,0,'D0_Defense state'),('AT1G03993',0,0,'D0_Epidermal'),('AT1G03993',0,0,'D0_Phloem Parenchyma'),('AT1G03993',0,0,'D0_Metabolic stress state'),('AT1G03993',0.00122825,0.0388605,'D0_Phloem companion'),('AT1G03993',0,0,'D0_Trichome'),('AT1G03993',0,0,'D0_Dividing'),('AT1G03993',0,0,'D0_Stress responsive'),('AT1G03993',0,0,'D0_Sugar metabolic state'),('AT1G03993',0,0,'D0_Immune active'),('AT1G03993',0,0,'D0_Hydathode'),('AT1G03993',0,0,'D0_Vascular'),('AT1G03993',0,0,'D0_Myrosin'),('AT1G03993',0,0,'W0_Vascular'),('AT1G03993',0.000137099,0.0122178,'W0_Mesophyll'),('AT1G03993',0,0,'W0_Phloem Parenchyma'),('AT1G03993',0,0,'W0_Dividing'),('AT1G03993',0,0,'W0_Epidermal'),('AT1G03993',0,0,'W0_Immune active'),('AT1G03993',0,0,'W0_Sieve element_responsive'),('AT1G03993',0,0,'W0_Defense state'),('AT1G03993',0,0,'W0_Guard'),('AT1G03993',0,0,'W0_Phloem companion'),('AT1G03993',0,0,'W0_Stress responsive'),('AT1G03993',0,0,'W0_Myrosin'),('AT1G03993',0,0,'W0_Sugar metabolic state'),('AT1G03993',0,0,'W0_Metabolic stress state'),('AT1G03993',0,0,'W0_Trichome'),('AT1G03993',0,0,'W0_Hydathode'),('AT1G03993',0.000901372,0.0330697,'W15_Dividing'),('AT1G03993',0.000250723,0.0186275,'W15_Mesophyll'),('AT1G03993',0,0,'W15_Phloem Parenchyma'),('AT1G03993',0,0,'W15_Immune active'),('AT1G03993',0,0,'W15_Epidermal'),('AT1G03993',0,0,'W15_Hydathode'),('AT1G03993',0,0,'W15_Stress responsive'),('AT1G03993',0,0,'W15_Guard'),('AT1G03993',0.00240939,0.0624118,'W15_Defense state'),('AT1G03993',0,0,'W15_Myrosin'),('AT1G03993',0,0,'W15_Phloem companion'),('AT1G03993',0,0,'W15_Vascular'),('AT1G03993',0,0,'W15_Trichome'),('AT1G03993',0,0,'W15_Sieve element_responsive'),('AT1G03993',0,0,'W15_Sugar metabolic state'),('AT1G03993',0,0,'W15_Metabolic stress state'),('AT1G03993',0.00210867,0.0526321,'R15_Sieve element_responsive'),('AT1G03993',0.000267533,0.0175548,'R15_Immune active'),('AT1G03993',0.000159985,0.014841,'R15_Mesophyll'),('AT1G03993',0,0,'R15_Guard'),('AT1G03993',0,0,'R15_Defense state'),('AT1G03993',0,0,'R15_Stress responsive'),('AT1G03993',0,0,'R15_Phloem Parenchyma'),('AT1G03993',0,0,'R15_Epidermal'),('AT1G03993',0,0,'R15_Vascular'),('AT1G03993',0,0,'R15_Dividing'),('AT1G03993',0,0,'R15_Phloem companion'),('AT1G03993',0,0,'R15_Metabolic stress state'),('AT1G03993',0,0,'R15_Trichome'),('AT1G03993',0,0,'R15_Myrosin'),('AT1G03993',0,0,'R15_Hydathode'),('AT1G03993',0,0,'R15_Sugar metabolic state'),('MIR838A',0.000597173,0.0284984,'D0_Mesophyll'),('MIR838A',0,0,'D0_Sieve element_responsive'),('MIR838A',0.00229847,0.0555054,'D0_Guard'),('MIR838A',0.00061451,0.0277072,'D0_Defense state'),('MIR838A',0.000448428,0.0218974,'D0_Epidermal'),('MIR838A',0,0,'D0_Phloem Parenchyma'),('MIR838A',0,0,'D0_Metabolic stress state'),('MIR838A',0,0,'D0_Phloem companion'),('MIR838A',0,0,'D0_Trichome'),('MIR838A',0,0,'D0_Dividing'),('MIR838A',0,0,'D0_Stress responsive'),('MIR838A',0,0,'D0_Sugar metabolic state'),('MIR838A',0.0029707,0.0656395,'D0_Immune active'),('MIR838A',0,0,'D0_Hydathode'),('MIR838A',0.000853911,0.0385018,'D0_Vascular'),('MIR838A',0,0,'D0_Myrosin'),('MIR838A',0,0,'W0_Vascular'),('MIR838A',0.000138364,0.0107039,'W0_Mesophyll'),('MIR838A',0,0,'W0_Phloem Parenchyma'),('MIR838A',0,0,'W0_Dividing'),('MIR838A',0.000302563,0.0181768,'W0_Epidermal'),('MIR838A',0,0,'W0_Immune active'),('MIR838A',0,0,'W0_Sieve element_responsive'),('MIR838A',0,0,'W0_Defense state'),('MIR838A',0,0,'W0_Guard'),('MIR838A',0.00234157,0.0522018,'W0_Phloem companion'),('MIR838A',0,0,'W0_Stress responsive'),('MIR838A',0,0,'W0_Myrosin'),('MIR838A',0,0,'W0_Sugar metabolic state'),('MIR838A',0,0,'W0_Metabolic stress state'),('MIR838A',0,0,'W0_Trichome'),('MIR838A',0,0,'W0_Hydathode'),('MIR838A',0,0,'W15_Dividing'),('MIR838A',0.000272388,0.0199831,'W15_Mesophyll'),('MIR838A',0,0,'W15_Phloem Parenchyma'),('MIR838A',0.000771079,0.0383446,'W15_Immune active'),('MIR838A',0,0,'W15_Epidermal'),('MIR838A',0,0,'W15_Hydathode'),('MIR838A',0,0,'W15_Stress responsive'),('MIR838A',0.00145094,0.0486649,'W15_Guard'),('MIR838A',0,0,'W15_Defense state'),('MIR838A',0,0,'W15_Myrosin'),('MIR838A',0,0,'W15_Phloem companion'),('MIR838A',0.000363795,0.0176206,'W15_Vascular'),('MIR838A',0,0,'W15_Trichome'),('MIR838A',0,0,'W15_Sieve element_responsive'),('MIR838A',0,0,'W15_Sugar metabolic state'),('MIR838A',0,0,'W15_Metabolic stress state'),('MIR838A',0,0,'R15_Sieve element_responsive'),('MIR838A',0,0,'R15_Immune active'),('MIR838A',0,0,'R15_Mesophyll'),('MIR838A',0,0,'R15_Guard'),('MIR838A',0.00142911,0.0404716,'R15_Defense state'),('MIR838A',0,0,'R15_Stress responsive'),('MIR838A',0,0,'R15_Phloem Parenchyma'),('MIR838A',0,0,'R15_Epidermal'),('MIR838A',0,0,'R15_Vascular'),('MIR838A',0,0,'R15_Dividing'),('MIR838A',0,0,'R15_Phloem companion'),('MIR838A',0,0,'R15_Metabolic stress state'),('MIR838A',0.00840981,0.0980743,'R15_Trichome'),('MIR838A',0,0,'R15_Myrosin'),('MIR838A',0,0,'R15_Hydathode'),('MIR838A',0,0,'R15_Sugar metabolic state'),('PPA1',0.244935,0.573442,'D0_Mesophyll'),('PPA1',0.242123,0.563848,'D0_Sieve element_responsive'),('PPA1',0.222434,0.540085,'D0_Guard'),('PPA1',0.206237,0.493253,'D0_Defense state'),('PPA1',0.194756,0.498721,'D0_Epidermal'),('PPA1',0.299605,0.599504,'D0_Phloem Parenchyma'),('PPA1',0.174499,0.476392,'D0_Metabolic stress state'),('PPA1',0.251995,0.552574,'D0_Phloem companion'),('PPA1',0.22969,0.482062,'D0_Trichome'),('PPA1',0.252262,0.554948,'D0_Dividing'),('PPA1',0.386052,0.589697,'D0_Stress responsive'),('PPA1',0.134782,0.403319,'D0_Sugar metabolic state'),('PPA1',0.215925,0.507962,'D0_Immune active'),('PPA1',0.14052,0.434109,'D0_Hydathode'),('PPA1',0.267585,0.573505,'D0_Vascular'),('PPA1',0.391196,0.655005,'D0_Myrosin'),('PPA1',0.316463,0.54935,'W0_Vascular'),('PPA1',0.287988,0.561841,'W0_Mesophyll'),('PPA1',0.379675,0.567368,'W0_Phloem Parenchyma'),('PPA1',0.25512,0.50837,'W0_Dividing'),('PPA1',0.240842,0.495771,'W0_Epidermal'),('PPA1',0.250495,0.484024,'W0_Immune active'),('PPA1',0.324328,0.553043,'W0_Sieve element_responsive'),('PPA1',0.208226,0.457869,'W0_Defense state'),('PPA1',0.29515,0.537985,'W0_Guard'),('PPA1',0.311906,0.541341,'W0_Phloem companion'),('PPA1',0.442088,0.592553,'W0_Stress responsive'),('PPA1',0.314134,0.542919,'W0_Myrosin'),('PPA1',0.238217,0.460575,'W0_Sugar metabolic state'),('PPA1',0.138808,0.39277,'W0_Metabolic stress state'),('PPA1',0.251795,0.483722,'W0_Trichome'),('PPA1',0.334056,0.57506,'W0_Hydathode'),('PPA1',0.193322,0.514288,'W15_Dividing'),('PPA1',0.247411,0.574954,'W15_Mesophyll'),('PPA1',0.266461,0.569725,'W15_Phloem Parenchyma'),('PPA1',0.20048,0.513637,'W15_Immune active'),('PPA1',0.165411,0.486166,'W15_Epidermal'),('PPA1',0.249307,0.578233,'W15_Hydathode'),('PPA1',0.344617,0.565402,'W15_Stress responsive'),('PPA1',0.192612,0.528666,'W15_Guard'),('PPA1',0.171014,0.461723,'W15_Defense state'),('PPA1',0.309008,0.561179,'W15_Myrosin'),('PPA1',0.198943,0.532014,'W15_Phloem companion'),('PPA1',0.240141,0.567655,'W15_Vascular'),('PPA1',0.199828,0.500674,'W15_Trichome'),('PPA1',0.213447,0.537323,'W15_Sieve element_responsive'),('PPA1',0.180024,0.514978,'W15_Sugar metabolic state'),('PPA1',0.316962,0.644495,'W15_Metabolic stress state'),('PPA1',0.173904,0.466063,'R15_Sieve element_responsive'),('PPA1',0.163688,0.44975,'R15_Immune active'),('PPA1',0.203782,0.512351,'R15_Mesophyll'),('PPA1',0.16218,0.454589,'R15_Guard'); diff --git a/config/databases/arabidopsis_NIE_umap.sql b/config/databases/arabidopsis_NIE_umap.sql new file mode 100644 index 0000000..ed5b9d6 --- /dev/null +++ b/config/databases/arabidopsis_NIE_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_NIE_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_NIE_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_NIE_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_NIE_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,-3.696337,-0.631605,'Vascular'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT3G55980','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:12:53 diff --git a/config/databases/arabidopsis_flower_lee_pseudobulk_dump.sql b/config/databases/arabidopsis_flower_lee_pseudobulk_dump.sql new file mode 100644 index 0000000..d588f42 --- /dev/null +++ b/config/databases/arabidopsis_flower_lee_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_flower_lee_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_flower_lee_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_flower_lee_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_flower_lee_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.00328525,0.0572235,'Unknown'),('AT1G01010',0.00271003,0.0519873,'Tapetum'),('AT1G01010',0.00235294,0.0484501,'Gynoecium and developing ovule'),('AT1G01010',0.00793651,0.0887326,'Anther'),('AT1G01010',0.00791557,0.0886167,'Epidermal'),('AT1G01010',0.00625,0.0788095,'Male meiocyte'),('AT1G01010',0.00243902,0.0493263,'Pollen'),('AT1G01010',0.0306905,0.172478,'Vascular'),('AT1G01010',0,0,'Developing ovule'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:38:03 diff --git a/config/databases/arabidopsis_flower_lee_umap.sql b/config/databases/arabidopsis_flower_lee_umap.sql new file mode 100644 index 0000000..4338dea --- /dev/null +++ b/config/databases/arabidopsis_flower_lee_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_flower_lee_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_flower_lee_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_flower_lee_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_flower_lee_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,-6.162047,-2.984256,'Vascular'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT3G15510','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:19:53 diff --git a/config/databases/arabidopsis_root_rs_pseudobulk_dump.sql b/config/databases/arabidopsis_root_rs_pseudobulk_dump.sql new file mode 100644 index 0000000..f0e2ac4 --- /dev/null +++ b/config/databases/arabidopsis_root_rs_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_root_rs_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_root_rs_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_root_rs_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_root_rs_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0291868,0.110369,'shr2_top_endodermis'),('AT1G01010',0.0291868,0.110369,'shr2_side_endodermis'),('AT1G01010',0.0291868,0.110369,'shr2_tip_endodermis'),('AT1G01010',0.0841449,0.295676,'shr2_tip_lateral_root_cap'),('AT1G01010',0.541465,0.453214,'shr2_top_phloem'),('AT1G01010',0.541465,0.453214,'shr2_side_phloem'),('AT1G01010',0.186628,0.498255,'shr2_top_procambium'),('AT1G01010',0.186628,0.498255,'shr2_side_procambium'),('AT1G01010',0.325798,0.468653,'shr2_tip_cortex'),('AT1G01010',0.325798,0.468653,'shr2_top_cortex'),('AT1G01010',0.325798,0.468653,'shr2_side_cortex'),('AT1G01010',0.212179,0.587404,'shr2_xpp_circle'),('AT1G01010',0.336566,0.545843,'shr2_proto_circle'),('AT1G01010',0.870751,0.69034,'shr2_ppp_circle'),('AT1G01010',0,0,'shr2_meta_circle'),('AT1G01010',0.173986,0.34659,'scr4_top_endodermis'),('AT1G01010',0.173986,0.34659,'scr4_side_endodermis'),('AT1G01010',0.173986,0.34659,'scr4_tip_endodermis'),('AT1G01010',0.0555967,0.238622,'scr4_tip_lateral_root_cap'),('AT1G01010',0.480513,0.469044,'scr4_top_phloem'),('AT1G01010',0.480513,0.469044,'scr4_side_phloem'),('AT1G01010',0.27563,0.544907,'scr4_top_procambium'),('AT1G01010',0.27563,0.544907,'scr4_side_procambium'),('AT1G01010',0.3307,0.475607,'scr4_tip_cortex'),('AT1G01010',0.3307,0.475607,'scr4_top_cortex'),('AT1G01010',0.3307,0.475607,'scr4_side_cortex'),('AT1G01010',0.246466,0.658447,'scr4_xpp_circle'),('AT1G01010',0.344688,0.528917,'scr4_proto_circle'),('AT1G01010',0.71456,0.668174,'scr4_ppp_circle'),('AT1G01010',0.158992,0.395162,'scr4_meta_circle'),('AT1G01010',0.217057,0.420266,'col0_top_endodermis'),('AT1G01010',0.217057,0.420266,'col0_side_endodermis'),('AT1G01010',0.217057,0.420266,'col0_tip_endodermis'),('AT1G01010',0.0437373,0.236872,'col0_tip_lateral_root_cap'),('AT1G01010',0.337514,0.407831,'col0_top_phloem'),('AT1G01010',0.337514,0.407831,'col0_side_phloem'),('AT1G01010',0.0994925,0.402853,'col0_top_procambium'),('AT1G01010',0.0994925,0.402853,'col0_side_procambium'),('AT1G01010',0.193213,0.463268,'col0_tip_cortex'),('AT1G01010',0.193213,0.463268,'col0_top_cortex'),('AT1G01010',0.193213,0.463268,'col0_side_cortex'),('AT1G01010',0.104103,0.383042,'col0_xpp_circle'),('AT1G01010',0.128259,0.352872,'col0_proto_circle'),('AT1G01010',0.570925,0.720127,'col0_ppp_circle'),('AT1G01010',0.0538516,0.257377,'col0_meta_circle'),('AT1G01010',0.168283,0.272921,'shr2_top_xylem'),('AT1G01010',0.168283,0.272921,'shr2_side_xylem'),('AT1G01010',0.25184,0.330116,'scr4_top_xylem'),('AT1G01010',0.25184,0.330116,'scr4_side_xylem'),('AT1G01010',0.0910555,0.218381,'col0_top_xylem'),('AT1G01010',0.0910555,0.218381,'col0_side_xylem'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:37:36 diff --git a/config/databases/arabidopsis_root_shahan_umap.sql b/config/databases/arabidopsis_root_shahan_umap.sql new file mode 100644 index 0000000..4f3585c --- /dev/null +++ b/config/databases/arabidopsis_root_shahan_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_root_shahan_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_root_shahan_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_root_shahan_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_root_shahan_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,-4.902692,0.721032,'Xylem pole pericycle'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT1G79580','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:18:41 diff --git a/config/databases/arabidopsis_seed_martin_pseudobulk_dump.sql b/config/databases/arabidopsis_seed_martin_pseudobulk_dump.sql new file mode 100644 index 0000000..c2be2d7 --- /dev/null +++ b/config/databases/arabidopsis_seed_martin_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_seed_martin_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_seed_martin_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_seed_martin_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_seed_martin_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.0530547,0.254381,'3DAP PEN'),('AT1G01010',0.0216086,0.173621,'3DAP ii1'),('AT1G01010',0.0103579,0.111004,'3DAP oi1'),('AT1G01010',0.0076461,0.0931657,'3DAP ii2'),('AT1G01010',0.0337478,0.199283,'3DAP CZSC'),('AT1G01010',0.00294196,0.0541595,'3DAP oi2'),('AT1G01010',0.10066,0.365283,'3DAP CPT'),('AT1G01010',0.0406977,0.271892,'3DAP OVL'),('AT1G01010',0.00927357,0.110809,'3DAP FUN'),('AT1G01010',0.011236,0.105403,'3DAP EMB'),('AT1G01010',0.0123457,0.110424,'3DAP ii1\''),('AT1G01010',0.0209924,0.156104,'3DAP MCE'),('AT1G01010',0.084788,0.30424,'3DAP CZE'),('AT1G01010',0.00975836,0.102921,'5DAP PEN'),('AT1G01010',0.00544218,0.0735699,'5DAP ii2'),('AT1G01010',0.00364564,0.0738595,'5DAP oi1'),('AT1G01010',0.00275356,0.0605298,'5DAP oi2'),('AT1G01010',0.0168612,0.156074,'5DAP CZSC'),('AT1G01010',0.0140845,0.167244,'5DAP MCE'),('AT1G01010',0.0578662,0.241111,'5DAP CZE'),('AT1G01010',0.00572519,0.075448,'5DAP ii1'),('AT1G01010',0.00319489,0.0564329,'5DAP ii1\''),('AT1G01010',0.00571429,0.0753766,'5DAP FUN'),('AT1G01010',0.0172414,0.13017,'5DAP CPT'),('AT1G01010',0,0,'5DAP EMB'),('AT1G01010',0.00164474,0.040522,'7DAP oi2'),('AT1G01010',0.00156678,0.0395512,'7DAP EMB'),('AT1G01010',0.00155521,0.0394052,'7DAP MCE'),('AT1G01010',0.0035229,0.0672088,'7DAP CZE'),('AT1G01010',0.00617284,0.0896332,'7DAP oi1'),('AT1G01010',0.00374813,0.0611072,'7DAP PEN'),('AT1G01010',0.00371747,0.0608576,'7DAP ii1\''),('AT1G01010',0,0,'7DAP CZSC'),('AT1G01010',0.00934579,0.0962206,'7DAP ii1'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:38:00 diff --git a/config/databases/arabidopsis_seed_martin_umap.sql b/config/databases/arabidopsis_seed_martin_umap.sql new file mode 100644 index 0000000..4cd90ae --- /dev/null +++ b/config/databases/arabidopsis_seed_martin_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_seed_martin_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_seed_martin_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_seed_martin_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_seed_martin_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,13.585819,4.483196,'7DAP oi2'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT2G42840','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:19:25 diff --git a/config/databases/arabidopsis_silique_lee_pseudobulk_dump.sql b/config/databases/arabidopsis_silique_lee_pseudobulk_dump.sql new file mode 100644 index 0000000..16ca786 --- /dev/null +++ b/config/databases/arabidopsis_silique_lee_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_silique_lee_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_silique_lee_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_silique_lee_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_silique_lee_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT3G62230',0.0706862,0.31542,'Young_silique'),('AT3G62230',0.733355,7.09161,'Meristematic'),('AT3G62230',0.107002,0.51633,'Seed_(silique)'),('AT3G62230',0.912326,8.1105,'Stele'),('AT3G62230',0.0960795,0.450791,'Epidermal'),('AT3G62230',0.0697413,0.39891,'Guard'),('AT3G62230',0.0312072,0.257404,'Mature_silique'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:38:13 diff --git a/config/databases/arabidopsis_silique_lee_umap.sql b/config/databases/arabidopsis_silique_lee_umap.sql new file mode 100644 index 0000000..54ac1be --- /dev/null +++ b/config/databases/arabidopsis_silique_lee_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_silique_lee_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_silique_lee_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_silique_lee_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_silique_lee_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,-0.375122,-4.285366,'Young_silique'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT3G24140','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:20:48 diff --git a/config/databases/arabidopsis_stem_lee_pseudobulk_dump.sql b/config/databases/arabidopsis_stem_lee_pseudobulk_dump.sql new file mode 100644 index 0000000..f16e4fb --- /dev/null +++ b/config/databases/arabidopsis_stem_lee_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_stem_lee_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_stem_lee_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_stem_lee_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_stem_lee_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('AT1G01010',0.00110294,0.033192,'Phloem'),('AT1G01010',0.00376124,0.0612126,'Unknown'),('AT1G01010',0.00569801,0.0752695,'Epidermal'),('AT1G01010',0,0,'Vascular'),('AT1G01010',0.00303644,0.0550201,'Cambium'),('AT1G01010',0.00273806,0.057785,'Xylem'),('AT1G01010',0.00826446,0.0905325,'Trichome'),('AT1G01010',0.00478469,0.0690057,'Guard'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:38:19 diff --git a/config/databases/arabidopsis_stem_lee_umap.sql b/config/databases/arabidopsis_stem_lee_umap.sql new file mode 100644 index 0000000..3051f26 --- /dev/null +++ b/config/databases/arabidopsis_stem_lee_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: arabidopsis_stem_lee_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `arabidopsis_stem_lee_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `arabidopsis_stem_lee_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `arabidopsis_stem_lee_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,-5.448315,-0.628197,'Xylem'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('AT5G26000','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:21:35 diff --git a/config/databases/rice_OW_pseudobulk_dump.sql b/config/databases/rice_OW_pseudobulk_dump.sql new file mode 100644 index 0000000..98ea4f6 --- /dev/null +++ b/config/databases/rice_OW_pseudobulk_dump.sql @@ -0,0 +1,59 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: rice_OW_pseudobulk +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `rice_OW_pseudobulk` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `rice_OW_pseudobulk` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `rice_OW_pseudobulk`; + +-- +-- Table structure for table `sample_data` +-- + +DROP TABLE IF EXISTS `sample_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sample_data` ( + `data_probeset_id` varchar(16) NOT NULL, + `data_signal` float DEFAULT '0', + `data_signal_std` float DEFAULT '0', + `data_bot_id` varchar(64) NOT NULL, + KEY `data_probeset_id` (`data_probeset_id`,`data_bot_id`,`data_signal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sample_data` +-- + +LOCK TABLES `sample_data` WRITE; +/*!40000 ALTER TABLE `sample_data` DISABLE KEYS */; +INSERT INTO `sample_data` VALUES ('Os01g0100100',0.129185,0.530995,'Mild.Drought_Mesophyll.Precursor'),('Os01g0100100',0.106975,0.46405,'Mild.Drought_Mesophyll'),('Os01g0100100',0.151811,0.516815,'Mild.Drought_Meristem'),('Os01g0100100',0.132724,0.488526,'Mild.Drought_Phloem.SE'),('Os01g0100100',0.12683,0.500265,'Mild.Drought_Procambium'),('Os01g0100100',0.109141,0.484893,'Mild.Drought_Mestome.Sheath'),('Os01g0100100',0.125236,0.505634,'Mild.Drought_Large.Parenchyma'),('Os01g0100100',0.120893,0.502762,'Mild.Drought_Epidermis'),('Os01g0100100',0.132058,0.495218,'Mild.Drought_Epidermal.Precursor'),('Os01g0100100',0.112158,0.505641,'Mild.Drought_Xylem.Parenchyma'),('Os01g0100100',0.100015,0.453001,'Mild.Drought_Bundle.Sheath'),('Os01g0100100',0.160374,0.525898,'Mild.Drought_Xylem'),('Os01g0100100',0.0934676,0.425296,'Mild.Drought_Phloem.CC'),('Os01g0100100',0.082868,0.397654,'Mild.Drought_Fibre'),('Os01g0100100',0.113234,0.451226,'Mild.Salinity_Epidermis'),('Os01g0100100',0.141241,0.501154,'Mild.Salinity_Large.Parenchyma'),('Os01g0100100',0.113952,0.443924,'Mild.Salinity_Mesophyll'),('Os01g0100100',0.144946,0.533016,'Mild.Salinity_Mesophyll.Precursor'),('Os01g0100100',0.153651,0.510159,'Mild.Salinity_Epidermal.Precursor'),('Os01g0100100',0.152906,0.515587,'Mild.Salinity_Fibre'),('Os01g0100100',0.182268,0.550966,'Mild.Salinity_Meristem'),('Os01g0100100',0.165656,0.54804,'Mild.Salinity_Procambium'),('Os01g0100100',0.166638,0.613442,'Mild.Salinity_Xylem.Parenchyma'),('Os01g0100100',0.148959,0.490888,'Mild.Salinity_Bundle.Sheath'),('Os01g0100100',0.114692,0.460839,'Mild.Salinity_Phloem.CC'),('Os01g0100100',0.11211,0.447056,'Mild.Salinity_Phloem.SE'),('Os01g0100100',0.172487,0.576142,'Mild.Salinity_Xylem'),('Os01g0100100',0.0550576,0.286011,'Mild.Salinity_Mestome.Sheath'),('Os01g0100100',0.175404,0.526929,'Moderate.Drought_Meristem'),('Os01g0100100',0.100094,0.421708,'Moderate.Drought_Mesophyll'),('Os01g0100100',0.145837,0.504885,'Moderate.Drought_Epidermal.Precursor'),('Os01g0100100',0.134881,0.516218,'Moderate.Drought_Mesophyll.Precursor'),('Os01g0100100',0.145586,0.509715,'Moderate.Drought_Large.Parenchyma'),('Os01g0100100',0.178613,0.567032,'Moderate.Drought_Fibre'),('Os01g0100100',0.145843,0.517616,'Moderate.Drought_Procambium'),('Os01g0100100',0.126689,0.484529,'Moderate.Drought_Epidermis'),('Os01g0100100',0.117171,0.466344,'Moderate.Drought_Bundle.Sheath'),('Os01g0100100',0.136332,0.489258,'Moderate.Drought_Phloem.SE'),('Os01g0100100',0.186774,0.540855,'Moderate.Drought_Xylem'),('Os01g0100100',0.107581,0.458867,'Moderate.Drought_Phloem.CC'),('Os01g0100100',0.101266,0.447594,'Moderate.Drought_Xylem.Parenchyma'),('Os01g0100100',0.0869355,0.377102,'Moderate.Drought_Mestome.Sheath'),('Os01g0100100',0.143541,0.521343,'Moderate.Salinity_Mesophyll.Precursor'),('Os01g0100100',0.141676,0.508878,'Moderate.Salinity_Procambium'),('Os01g0100100',0.130862,0.486061,'Moderate.Salinity_Large.Parenchyma'),('Os01g0100100',0.0963355,0.419142,'Moderate.Salinity_Epidermis'),('Os01g0100100',0.10797,0.438712,'Moderate.Salinity_Mesophyll'),('Os01g0100100',0.154966,0.49645,'Moderate.Salinity_Meristem'),('Os01g0100100',0.13686,0.494768,'Moderate.Salinity_Epidermal.Precursor'),('Os01g0100100',0.195956,0.551093,'Moderate.Salinity_Xylem'),('Os01g0100100',0.185312,0.579004,'Moderate.Salinity_Bundle.Sheath'),('Os01g0100100',0.123884,0.457882,'Moderate.Salinity_Phloem.SE'),('Os01g0100100',0.135465,0.490025,'Moderate.Salinity_Phloem.CC'),('Os01g0100100',0.231051,0.662818,'Moderate.Salinity_Fibre'),('Os01g0100100',0.0416138,0.259696,'Moderate.Salinity_Mestome.Sheath'),('Os01g0100100',0.120685,0.538305,'Moderate.Salinity_Xylem.Parenchyma'),('Os01g0100100',0.161996,0.54257,'Well.Watered_Epidermal.Precursor'),('Os01g0100100',0.152254,0.531447,'Well.Watered_Procambium'),('Os01g0100100',0.142733,0.529409,'Well.Watered_Mesophyll.Precursor'),('Os01g0100100',0.139095,0.497106,'Well.Watered_Large.Parenchyma'),('Os01g0100100',0.104085,0.452645,'Well.Watered_Epidermis'),('Os01g0100100',0.143517,0.504735,'Well.Watered_Fibre'),('Os01g0100100',0.111729,0.461803,'Well.Watered_Mesophyll'),('Os01g0100100',0.164855,0.528581,'Well.Watered_Meristem'),('Os01g0100100',0.0873551,0.367031,'Well.Watered_Phloem.SE'),('Os01g0100100',0.155796,0.530873,'Well.Watered_Phloem.CC'),('Os01g0100100',0.140626,0.509396,'Well.Watered_Bundle.Sheath'),('Os01g0100100',0.208249,0.594796,'Well.Watered_Xylem'),('Os01g0100100',0.118218,0.481877,'Well.Watered_Xylem.Parenchyma'),('Os01g0100100',0.171145,0.540487,'Well.Watered_Mestome.Sheath'); +/*!40000 ALTER TABLE `sample_data` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:33:32 diff --git a/config/databases/rice_OW_umap.sql b/config/databases/rice_OW_umap.sql new file mode 100644 index 0000000..a57c5fe --- /dev/null +++ b/config/databases/rice_OW_umap.sql @@ -0,0 +1,83 @@ +-- MySQL dump 10.13 Distrib 9.4.0, for Linux (x86_64) +-- +-- Host: localhost Database: rice_OW_umap +-- ------------------------------------------------------ +-- Server version 9.4.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `rice_OW_umap` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `rice_OW_umap` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `rice_OW_umap`; + +-- +-- Table structure for table `umap_coords` +-- + +DROP TABLE IF EXISTS `umap_coords`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_coords` ( + `cell_id` INT NOT NULL, + `umap_1` FLOAT NOT NULL, + `umap_2` FLOAT NOT NULL, + `cell_type` VARCHAR(128) NOT NULL, + PRIMARY KEY (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_coords` +-- + +LOCK TABLES `umap_coords` WRITE; +/*!40000 ALTER TABLE `umap_coords` DISABLE KEYS */; +INSERT INTO `umap_coords` VALUES (0,2.269168,1.439900,'Xylem.Parenchyma'); +/*!40000 ALTER TABLE `umap_coords` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `umap_expression` +-- + +DROP TABLE IF EXISTS `umap_expression`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `umap_expression` ( + `gene_id` VARCHAR(32) NOT NULL, + `expression` JSON NOT NULL, + PRIMARY KEY (`gene_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `umap_expression` +-- + +LOCK TABLES `umap_expression` WRITE; +/*!40000 ALTER TABLE `umap_expression` DISABLE KEYS */; +INSERT INTO `umap_expression` VALUES ('Os10g0168500','{}'); +/*!40000 ALTER TABLE `umap_expression` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- Dump completed on 2026-07-17 01:16:09 diff --git a/config/init.sh b/config/init.sh index e899d38..fb92b6a 100755 --- a/config/init.sh +++ b/config/init.sh @@ -21,7 +21,6 @@ echo "Successfully bootstrapped simple eFP databases" mysql -u $DB_USER -p$DB_PASS < ./config/databases/annotations_lookup.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_ecotypes.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/arachis.sql -mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_NIE_pseudobulk.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/canola_nssnp.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/eplant2.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/eplant_poplar.sql @@ -50,6 +49,20 @@ mysql -u $DB_USER -p$DB_PASS < ./config/databases/tomato_nssnp.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/tomato_sequence.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/triphysaria.sql mysql -u $DB_USER -p$DB_PASS < ./config/databases/gaia.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_NIE_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/rice_OW_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_stem_lee_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_flower_lee_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_silique_lee_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_root_rs_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_seed_martin_pseudobulk.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/rice_OW_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_NIE_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_root_shahan_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_seed_martin_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_flower_lee_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_silique_lee_umap.sql +mysql -u $DB_USER -p$DB_PASS < ./config/databases/arabidopsis_stem_lee_umap.sql echo "Data are now loaded. Preparing API config" echo "Please manually edit config file!" From 75d237b7e29f976e4a946d7b85669d7b0b8e9f96 Mon Sep 17 00:00:00 2001 From: Steven Qiao Date: Sun, 26 Jul 2026 22:40:56 -0400 Subject: [PATCH 3/4] Updated endpoint to separate new SUPeR gene exprssion and added average expression --- api/__init__.py | 2 + api/resources/super_viewer_gene_expression.py | 160 ++++++++++++++++++ api/resources/umap_expression.py | 12 -- 3 files changed, 162 insertions(+), 12 deletions(-) create mode 100644 api/resources/super_viewer_gene_expression.py diff --git a/api/__init__.py b/api/__init__.py index b402091..e5d8f34 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -94,6 +94,7 @@ def create_app(): from api.resources.gene_expression import gene_expression from api.resources.gene_density import gene_density from api.resources.umap_expression import umap_expression + from api.resources.super_viewer_gene_expression import super_viewer_gene_expression bar_api.add_namespace(gene_information) bar_api.add_namespace(gaia) @@ -112,6 +113,7 @@ def create_app(): bar_api.add_namespace(gene_expression) bar_api.add_namespace(gene_density) bar_api.add_namespace(umap_expression) + bar_api.add_namespace(super_viewer_gene_expression) bar_api.init_app(bar_app) return bar_app diff --git a/api/resources/super_viewer_gene_expression.py b/api/resources/super_viewer_gene_expression.py new file mode 100644 index 0000000..1e63c83 --- /dev/null +++ b/api/resources/super_viewer_gene_expression.py @@ -0,0 +1,160 @@ +""" +Steven Qiao | SUPeR Viewer | BAR_API + +REST endpoint for SUPeR Viewer gene expression queries across the eFP +pseudobulk databases (arabidopsis_NIE_pseudobulk, rice_OW_pseudobulk, +arabidopsis_root_rs_pseudobulk, etc). + +This is deliberately modeled on the existing gene_expression endpoint +(same validation / probeset-conversion pipeline, same +query_efp_database_dynamic call) so it queries the *same* `sample_data` +table — there is no second SQL table. The "two tables" the SUPeR Viewer +needs are produced by splitting the single query result in Python: + + - "expression" : one row per real tissue/condition (data_bot_id + values other than Mean_CTRL) — same shape as + the existing gene_expression response. + - "mean_expression" : the single Mean_CTRL row — the gene's average + (and std) across every cell in the dataset, + regardless of tissue/condition. Populated by + generate_pseudobulk_dumps.py, which now writes + a Mean_CTRL row for every gene in every + dataset (see MEAN_CTRL_BOT_ID there). + +Routes: GET /super_viewer_gene_expression/expression// + +NOTE: this file assumes query_efp_database_dynamic's success payload is a +dict with a "data" key holding the list of sample_data rows, and that +each row is a dict exposing "name" (the tissue/data_bot_id) and "value" +(the expression signal) — confirmed against a live response. If the +real return shape differs again, adjust the `_split_rows` helper below +accordingly — the validation and error handling above it are copied +verbatim from gene_expression.py and should not need changes. +""" +from flask_restx import Namespace, Resource +from markupsafe import escape + +from api.services.efp_data import query_efp_database_dynamic +from api.utils.bar_utils import BARUtils +from api.utils.gene_id_utils import ( + CROSS_SPECIES_DATABASES, + DATABASE_SPECIES, + PROBESET_DATABASES, + convert_gene_to_probeset, + is_probeset_id, + normalize_gene_id, + validate_gene_id, +) + +# Must match MEAN_CTRL_BOT_ID in generate_pseudobulk_dumps.py +MEAN_CTRL_BOT_ID = "Mean_CTRL" + +super_viewer_gene_expression = Namespace( + "SUPeR Viewer Gene Expression", + description=( + "Per-tissue and dataset-wide mean gene expression from SUPeR " + "Viewer eFP pseudobulk databases." + ), + path="/super_viewer_gene_expression", +) + + +def _split_rows(rows): + """ + Split sample_data rows into (tissue_rows, mean_row). + + tissue_rows : list of every row except Mean_CTRL — the normal + per-tissue/condition expression values. + mean_row : the single Mean_CTRL row (or None if the database/gene + predates the Mean_CTRL rollout and has no such row). + + NOTE: query_efp_database_dynamic's rows come back shaped as + {"name": , "value": } — confirmed from a + live response — not {"data_bot_id": ..., "data_signal": ...} as + originally assumed. Update this if the shape changes again. + """ + tissue_rows = [] + mean_row = None + for row in rows: + bot_id = row.get("name") + if bot_id == MEAN_CTRL_BOT_ID: + mean_row = row + else: + tissue_rows.append(row) + return tissue_rows, mean_row + + +@super_viewer_gene_expression.route("/expression//") +@super_viewer_gene_expression.doc( + description=( + "Retrieve per-tissue expression values and the dataset-wide mean " + "(Mean_CTRL) for a gene from a specified SUPeR Viewer eFP database." + ) +) +@super_viewer_gene_expression.param( + "gene_id", + "Gene ID (e.g. AT1G01010 for Arabidopsis, or a probeset like 261585_at)", + _in="path", + default="AT1G01010", +) +@super_viewer_gene_expression.param( + "database", + "Database name (e.g. arabidopsis_NIE_pseudobulk, rice_OW_pseudobulk)", + _in="path", + default="arabidopsis_NIE_pseudobulk", +) +class SUPeRViewerGeneExpression(Resource): + def get(self, database, gene_id): + """Retrieve per-tissue values and the all-cell mean for a gene. + """ + database = str(escape(database)) + gene_id = str(escape(gene_id)) + + # 1. Resolve database species and expected input species. + species = DATABASE_SPECIES.get(database) + if species is None: + return BARUtils.error_exit(f"Unknown database '{database}'"), 400 + input_species = CROSS_SPECIES_DATABASES.get(database, species) + + # 2. If the caller already supplied a probeset ID, use it directly + if is_probeset_id(gene_id): + query_id = gene_id + else: + # 3. Validate gene ID format against the expected input species regex + if not validate_gene_id(gene_id, input_species): + return BARUtils.error_exit(f"Invalid {input_species} gene ID: '{gene_id}'"), 400 + + # 4. Normalise (e.g. strip maize transcript suffix _T##) + gene_id = normalize_gene_id(gene_id, species) + + # 5. Microarray / non-direct databases need gene ID -> probeset conversion + if database in PROBESET_DATABASES: + probeset, err = convert_gene_to_probeset(gene_id, species, database) + if err: + return BARUtils.error_exit(err), 404 + query_id = probeset + else: + query_id = gene_id + + result = query_efp_database_dynamic(database, query_id) + + if not result["success"]: + error_code = result.get("error_code", 500) + if error_code == 404: + return BARUtils.error_exit("No data found for the given gene"), 404 + if error_code == 503: + return BARUtils.error_exit("Database not available"), 503 + return BARUtils.error_exit("An error occurred"), 500 + + rows = result.get("data", []) + tissue_rows, mean_row = _split_rows(rows) + + return BARUtils.success_exit({ + "expression": tissue_rows, + "mean_expression": mean_row, + }) + + +super_viewer_gene_expression.add_resource( + SUPeRViewerGeneExpression, "/expression//" +) \ No newline at end of file diff --git a/api/resources/umap_expression.py b/api/resources/umap_expression.py index 0fec911..db8ac46 100644 --- a/api/resources/umap_expression.py +++ b/api/resources/umap_expression.py @@ -1,15 +1,3 @@ -""" -Steven Qiao | BCB330 Project 2025-2026 | University of Toronto - -REST endpoint for per-cell UMAP coordinate + expression queries. - -Routes: GET /umap_expression/umap// - -All gene IDs are validated by species before reaching the query layer. -Expression is stored as a JSON array per gene in umap_expression; UMAP -coordinates are stored once per dataset in umap_coords. The two are -merged server-side by position before returning to the client. -""" import json from flask_restx import Namespace, Resource From 5c6d9c55c0ad012ce0913e060f4b76f5a9e7ad5e Mon Sep 17 00:00:00 2001 From: StevenQiaoUT Date: Sun, 26 Jul 2026 22:42:07 -0400 Subject: [PATCH 4/4] Update super_viewer_gene_expression.py --- api/resources/super_viewer_gene_expression.py | 36 ++----------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/api/resources/super_viewer_gene_expression.py b/api/resources/super_viewer_gene_expression.py index 1e63c83..1f6126e 100644 --- a/api/resources/super_viewer_gene_expression.py +++ b/api/resources/super_viewer_gene_expression.py @@ -1,36 +1,4 @@ -""" -Steven Qiao | SUPeR Viewer | BAR_API - -REST endpoint for SUPeR Viewer gene expression queries across the eFP -pseudobulk databases (arabidopsis_NIE_pseudobulk, rice_OW_pseudobulk, -arabidopsis_root_rs_pseudobulk, etc). - -This is deliberately modeled on the existing gene_expression endpoint -(same validation / probeset-conversion pipeline, same -query_efp_database_dynamic call) so it queries the *same* `sample_data` -table — there is no second SQL table. The "two tables" the SUPeR Viewer -needs are produced by splitting the single query result in Python: - - - "expression" : one row per real tissue/condition (data_bot_id - values other than Mean_CTRL) — same shape as - the existing gene_expression response. - - "mean_expression" : the single Mean_CTRL row — the gene's average - (and std) across every cell in the dataset, - regardless of tissue/condition. Populated by - generate_pseudobulk_dumps.py, which now writes - a Mean_CTRL row for every gene in every - dataset (see MEAN_CTRL_BOT_ID there). - -Routes: GET /super_viewer_gene_expression/expression// - -NOTE: this file assumes query_efp_database_dynamic's success payload is a -dict with a "data" key holding the list of sample_data rows, and that -each row is a dict exposing "name" (the tissue/data_bot_id) and "value" -(the expression signal) — confirmed against a live response. If the -real return shape differs again, adjust the `_split_rows` helper below -accordingly — the validation and error handling above it are copied -verbatim from gene_expression.py and should not need changes. -""" + from flask_restx import Namespace, Resource from markupsafe import escape @@ -157,4 +125,4 @@ def get(self, database, gene_id): super_viewer_gene_expression.add_resource( SUPeRViewerGeneExpression, "/expression//" -) \ No newline at end of file +)